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

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

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

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

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

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

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

प्रॉपर्टी टाइप डिफ़ॉल्ट मान ब्यौरा
ro.hwui.disable_scissor_opt boolean 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 0.5 float हर प्रोसेस के ग्रेडिएंट कैश मेमोरी का साइज़, मेगाबाइट में तय करता है. आम तौर पर, एक ग्रेडिएंट 1 से 4 केबी तक मेमोरी लेता है. हमारा सुझाव है कि आप कम से कम बारह ग्रेडिएंट को स्टोर करने के लिए, इतना बड़ा कैश मेमोरी का इस्तेमाल करें.
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 हार्डवेयर पर PBOs के इस्तेमाल को चालू या बंद करने के लिए किया जाता है. रेंडरर, एसिंक्रोनस टेक्सचर अपलोड करने के लिए PBO का इस्तेमाल करता है. खास तौर पर, फ़ॉन्ट कैश मेमोरी के लिए. इस प्रॉपर्टी को हमेशा चालू रखना चाहिए. हालांकि, अगर PBO के इस्तेमाल से डेटा खराब हो जाता है या परफ़ॉर्मेंस खराब हो जाती है, तो इसे शुरू करने या डेवलपमेंट के दौरान बंद किया जा सकता है. इसलिए, प्रॉपर्टी को सिर्फ़ पढ़ा नहीं जा सकता.