OpenGLRenderer का कॉन्फ़िगरेशन

इस दस्तावेज़ में, हार्डवेयर की परफ़ॉर्मेंस को ऑप्टिमाइज़ करने के लिए परफ़ॉर्मेंस ट्यूनिंग के बारे में बताया गया है.

OpenGLRenderer (libhwui) प्रॉपर्टी

इस दस्तावेज़ में, Android के 2D हार्डवेयर-ऐक्सलरेटेड रेंडरिंग पाइपलाइन को कंट्रोल करने के लिए प्रॉपर्टी के बारे में बताया गया है. इन प्रॉपर्टी को device.mk में PRODUCT_PROPERTY_OVERRIDES के तौर पर सेट करें.

Android के सभी वर्शन के लिए प्रॉपर्टी

प्रॉपर्टी टाइप डिफ़ॉल्ट मान ब्यौरा
ro.zygote.disable_gl_preload boolean false इस फ़्लैग की मदद से, बूट होने के समय Zygote में EGL/GL ड्राइवर को प्रीलोड करने की सुविधा चालू या बंद की जा सकती है. इस प्रॉपर्टी के false होने पर, Zygote eglGetDisplay(EGL_DEFAULT_DISPLAY) को लागू करके GL ड्राइवर को पहले से लोड कर देता है. इससे Zygote में डाइनैमिक लाइब्रेरी कोड लोड होता है, ताकि इसे अन्य सभी प्रोसेस के साथ शेयर किया जा सके. अगर ड्राइवर, शेयर करने की सुविधा के साथ काम नहीं करता है, तो इस प्रॉपर्टी को true पर सेट करें.

Android 8.0 और इससे पुराने वर्शन के लिए प्रॉपर्टी

प्रॉपर्टी टाइप डिफ़ॉल्ट मान ब्यौरा
ro.hwui.disable_scissor_opt boolean false

इस कुकी से, सीज़र ऑप्टिमाइज़ेशन की सुविधा चालू या बंद होती है. true और false को वैल्यू के तौर पर इस्तेमाल किया जा सकता है. सिज़र ऑप्टिमाइज़ेशन चालू होने पर, OpenGLRenderer, GL सिज़र टेस्ट को चुनिंदा तौर पर चालू और बंद करके, सिज़रिंग को कम करने की कोशिश करता है.

इस सुविधा के बंद होने पर, OpenGLRenderer, GL सीज़र टेस्ट को चालू रखता है और ज़रूरत के हिसाब से सीज़र रेक्ट में बदलाव करता है. कुछ जीपीयू (उदाहरण के लिए, SGX 540) कैंची वाले रेक्ट को बार-बार बदलने पर बेहतर परफ़ॉर्म करते हैं. ऐसा तब होता है, जब कैंची वाले टेस्ट को बार-बार चालू या बंद किया जाता है.

ro.hwui.texture_cache_size float 24 यह हर प्रोसेस के लिए टेक्सचर कैश का साइज़ मेगाबाइट में तय करता है. हमारा सुझाव है कि आप ऐसी कैश मेमोरी का इस्तेमाल करें जिसमें 32-बिट टेक्सचर की कई स्क्रीन सेव की जा सकें. उदाहरण के लिए, 1280x800 डिसप्ले पर, फ़ुल स्क्रीन बफ़र में करीब 4 एमबी का डेटा इस्तेमाल होता है. इसलिए, कैश मेमोरी कम से कम 20 एमबी होनी चाहिए.
ro.hwui.layer_cache_size float 16 इससे हर प्रोसेस के लिए लेयर के कैश मेमोरी का साइज़ मेगाबाइट में तय किया जाता है. हमारा सुझाव है कि आप इतनी बड़ी कैश मेमोरी का इस्तेमाल करें कि उसमें 32 बिट में स्क्रीन के साइज़ से चार गुना डेटा सेव किया जा सके. उदाहरण के लिए, 1280x800 डिसप्ले पर, फ़ुल स्क्रीन बफ़र में करीब 4 एमबी का इस्तेमाल होता है. इसलिए, कैश मेमोरी कम से कम 16 एमबी होनी चाहिए.
ro.hwui.gradient_cache_size float 0.5 इससे हर प्रोसेस के लिए ग्रेडिएंट कैश का साइज़ मेगाबाइट में तय किया जाता है. एक ग्रेडिएंट आम तौर पर, 1 केबी से 4 केबी मेमोरी लेता है. हमारा सुझाव है कि आप ऐसी कैश मेमोरी का इस्तेमाल करें जिसमें कम से कम 12 ग्रेडिएंट सेव किए जा सकें.
ro.hwui.patch_cache_size integer 128 यह हर प्रोसेस के लिए, नौ पैच वाली इमेज की कैश मेमोरी का साइज़ किलोबाइट में तय करता है. इस कैश मेमोरी में सिर्फ़ वर्टेक्स डेटा होता है. इसलिए, इसे छोटा रखा जा सकता है. हर वर्टेक्स में चार फ़्लोट या 16 बाइट होते हैं.
ro.hwui.path_cache_size float 4 इससे हर प्रोसेस के पाथ की कैश मेमोरी का साइज़ मेगाबाइट में तय किया जाता है. हमारा सुझाव है कि आप ऐसी कैश मेमोरी का इस्तेमाल करें जिसमें कम से कम एक स्क्रीन के 32-बिट टेक्सचर सेव किए जा सकें. उदाहरण के लिए, 1280x800 डिसप्ले पर, फ़ुल स्क्रीन बफ़र में करीब 4 एमबी का डेटा इस्तेमाल होता है. इसलिए, कैश मेमोरी कम से कम 4 एमबी होनी चाहिए.
ro.hwui.shape_cache_size float 1 यह हर प्रोसेस के लिए, शेप की कैश मेमोरी का साइज़ मेगाबाइट में तय करता है. इस वैल्यू का इस्तेमाल कई कैश मेमोरी करती हैं. जैसे, सर्कल और गोल आयत. हमारा सुझाव है कि आप इतनी बड़ी कैश मेमोरी का इस्तेमाल करें जिसमें कम से कम एक 8-बिट स्क्रीन सेव हो सके. उदाहरण के लिए, 1280x800 डिसप्ले पर, फ़ुल स्क्रीन बफ़र करीब 1 एमबी का इस्तेमाल करता है. इसलिए, कैश मेमोरी कम से कम 1 एमबी की होनी चाहिए.
ro.hwui.drop_shadow_cache_size float 2 यह हर प्रोसेस के लिए, टेक्स्ट ड्रॉप शैडो की कैश मेमोरी का साइज़ मेगाबाइट में तय करता है. हमारा सुझाव है कि आप इतनी बड़ी कैश मेमोरी का इस्तेमाल करें जिसमें 8-बिट टेक्सचर की दो स्क्रीन सेव की जा सकें. उदाहरण के लिए, 1280x800 डिसप्ले पर, फ़ुल स्क्रीन बफ़र में करीब 1 एमबी का इस्तेमाल होता है. इसलिए, कैश मेमोरी कम से कम 2 एमबी होनी चाहिए.
ro.hwui.r_buffer_cache_size float 2 यह हर प्रोसेस के रेंडर बफ़र की कैश मेमोरी का साइज़ मेगाबाइट में तय करता है. हमारा सुझाव है कि आप ऐसी कैश मेमोरी का इस्तेमाल करें जो 8 बिट में स्क्रीन के साइज़ से दोगुनी हो. उदाहरण के लिए, 1280x800 डिसप्ले पर, फ़ुल स्क्रीन बफ़र करीब 1 एमबी का इस्तेमाल करता है. इसलिए, कैश मेमोरी कम से कम 2 एमबी की होनी चाहिए. अगर डिवाइस, 4-बिट या 1-बिट स्टेंसिल बफ़र के साथ काम करता है, तो कैश मेमोरी का साइज़ कम हो सकता है.
ro.hwui.texture_cache_flush_rate float 0.6 यह तय करता है कि मेमोरी फ़्लश होने के बाद, टेक्सचर कैश का कितना प्रतिशत हिस्सा सेव रखा जाएगा. सिस्टम, मेमोरी फ़्लश तब करता है, जब उसे सभी ऐप्लिकेशन के लिए मेमोरी वापस लेनी होती है. हमारा सुझाव है कि ऐसी स्थितियों में, करीब 50% कैश मेमोरी को रिलीज़ कर दें.
ro.hwui.text_small_cache_width integer 1024 यह डिफ़ॉल्ट फ़ॉन्ट कैश मेमोरी की चौड़ाई को पिक्सल में तय करता है. ऊपरी बाउंड इस बात पर निर्भर करता है कि जीपीयू कितनी तेज़ी से टेक्सचर अपलोड कर सकता है. हमारा सुझाव है कि कम से कम 1024 पिक्सल और ज़्यादा से ज़्यादा 2048 पिक्सल वाली इमेज का इस्तेमाल करें. साथ ही, दो की घात वाली वैल्यू का इस्तेमाल करें.
ro.hwui.text_small_cache_height integer 256 यह डिफ़ॉल्ट फ़ॉन्ट कैश की ऊंचाई को पिक्सल में तय करता है. ऊपरी बाउंड इस बात पर निर्भर करता है कि जीपीयू कितनी तेज़ी से टेक्सचर अपलोड कर सकता है. हमारा सुझाव है कि कम से कम 256 पिक्सल और ज़्यादा से ज़्यादा 1024 पिक्सल का इस्तेमाल करें.
ro.hwui.text_large_cache_width integer 2048 यह बड़े फ़ॉन्ट की कैश मेमोरी की चौड़ाई को पिक्सल में तय करता है. इस कैश मेमोरी का इस्तेमाल उन ग्लिफ़ के लिए किया जाता है जो डिफ़ॉल्ट फ़ॉन्ट कैश मेमोरी में फ़िट नहीं हो पाते. ऊपरी बाउंड इस बात पर निर्भर करता है कि जीपीयू कितनी तेज़ी से टेक्सचर अपलोड कर सकता है. हमारा सुझाव है कि कम से कम 2048 पिक्सल और ज़्यादा से ज़्यादा 4096 पिक्सल वाली इमेज का इस्तेमाल करें. साथ ही, दो की घात वाली वैल्यू का इस्तेमाल करें.
ro.hwui.text_large_cache_height integer 512 इससे बड़े फ़ॉन्ट की कैश मेमोरी की ऊंचाई पिक्सल में तय होती है. बड़े फ़ॉन्ट की कैश मेमोरी का इस्तेमाल उन ग्लिफ़ के लिए भी किया जाता है जो डिफ़ॉल्ट फ़ॉन्ट की कैश मेमोरी में फ़िट नहीं हो पाते. ऊपरी बाउंड इस बात पर निर्भर करता है कि जीपीयू कितनी तेज़ी से टेक्सचर अपलोड कर सकता है. हमारा सुझाव है कि आप कम से कम 512 पिक्सल और ज़्यादा से ज़्यादा 2048 पिक्सल वाली इमेज का इस्तेमाल करें. साथ ही, दो की घात वाली वैल्यू का इस्तेमाल करें.
hwui.text_gamma_correction string lookup यह विकल्प, टेक्स्ट के लिए गामा करेक्शन की तकनीक चुनता है. इसके चार विकल्प हो सकते हैं:
  • lookup3: लुकअप टेबल के आधार पर किया गया सुधार. ब्लैक ऐंड व्हाइट टेक्स्ट के लिए, गामा करेक्शन अलग-अलग होता है. थ्रेशोल्ड यहां दिए गए हैं.
  • lookup: एक लुकअप टेबल के आधार पर किया गया सुधार.
  • shader3: GLSL शेडर की ओर से लागू किया गया सुधार. ब्लैक ऐंड व्हाइट टेक्स्ट के लिए, गामा करेक्शन अलग-अलग होता है. थ्रेशोल्ड यहां दिए गए हैं.
  • shader: GLSL शेडर की ओर से लागू किया गया सुधार.
लुकअप गामा करेक्शन फ़ंक्शन, उन जीपीयू पर सबसे अच्छा काम करता है जिनमें सीमित शेडर मैथ होता है. शेडर गामा करेक्शन, मेमोरी सेव करने के लिए सबसे सही होते हैं. हमारा सुझाव है कि आप डिफ़ॉल्ट lookup तकनीक का इस्तेमाल करें. यह क्वालिटी, स्पीड, और मेमोरी के इस्तेमाल के मामले में बेहतर विकल्प है.
hwui.text_gamma float 1.4 यह टेक्स्ट के गामा करेक्शन के लिए इस्तेमाल की गई गामा वैल्यू तय करता है. डिवाइस के डिसप्ले के हिसाब से, इस वैल्यू में बदलाव किया जा सकता है.
hwui.text_gamma.black_threshold integer 64 यह ल्यूमिनेंस थ्रेशोल्ड तय करता है. इससे कम होने पर, ब्लैक गामा करेक्शन लागू होता है. वैल्यू, 0 से 255 के बीच होनी चाहिए.
hwui.text_gamma.white_threshold integer 192 इससे ल्यूमिनेंस थ्रेशोल्ड तय होता है. इस थ्रेशोल्ड से ज़्यादा ल्यूमिनेंस होने पर, वाइट गामा करेक्शन लागू होता है. वैल्यू, 0 से 255 के बीच होनी चाहिए.
hwui.use_gpu_pixel_buffers boolean true इस विकल्प की मदद से, OpenGL ES 3.0 हार्डवेयर पर PBO के इस्तेमाल को चालू या बंद किया जा सकता है. रेंडरर, एसिंक्रोनस टेक्सचर अपलोड करने के लिए PBO का इस्तेमाल करता है. खास तौर पर, फ़ॉन्ट कैश के लिए. यह प्रॉपर्टी हमेशा चालू रहनी चाहिए. हालांकि, अगर PBO की वजह से डेटा खराब होता है या परफ़ॉर्मेंस ठीक नहीं रहती है, तो ब्रिंगअप या डेवलपमेंट के दौरान इसे बंद किया जा सकता है. इसलिए, प्रॉपर्टी को सिर्फ़ पढ़ा नहीं जा सकता.