การกําหนดค่า OpenGLRenderer

เอกสารนี้อธิบายการปรับแต่งประสิทธิภาพเพื่อเพิ่มประสิทธิภาพฮาร์ดแวร์

พร็อพเพอร์ตี้ OpenGLRenderer (libhwui)

เอกสารนี้อธิบายพร็อพเพอร์ตี้สำหรับการควบคุมไปป์ไลน์การแสดงผล 2 มิติที่เร่งด้วยฮาร์ดแวร์ของ Android ตั้งค่าพร็อพเพอร์ตี้เหล่านี้ใน device.mk เป็น PRODUCT_PROPERTY_OVERRIDES

พร็อพเพอร์ตี้สำหรับ Android ทุกเวอร์ชัน

พร็อพเพอร์ตี้ ประเภท ค่าเริ่มต้น คำอธิบาย
ro.zygote.disable_gl_preload boolean false เปิดหรือปิดใช้การโหลดล่วงหน้าของไดรเวอร์ EGL/GL ใน Zygote ในเวลาบูต เมื่อพร็อพเพอร์ตี้นี้เป็น false Zygote จะโหลดไดรเวอร์ GL ล่วงหน้าโดย เรียกใช้ eglGetDisplay(EGL_DEFAULT_DISPLAY) ซึ่งจะโหลดโค้ดไลบรารีแบบไดนามิกใน Zygote เพื่อแชร์กับกระบวนการอื่นๆ ทั้งหมด หากไดรเวอร์ไม่รองรับการแชร์ ให้ตั้งค่าพร็อพเพอร์ตี้นี้เป็น true

พร็อพเพอร์ตี้สำหรับ Android 8.0 และต่ำกว่า

พร็อพเพอร์ตี้ ประเภท ค่าเริ่มต้น คำอธิบาย
ro.hwui.disable_scissor_opt boolean false

เปิดหรือปิดใช้การเพิ่มประสิทธิภาพกรรไกร ค่าที่ยอมรับคือ true และ false เมื่อเปิดใช้การเพิ่มประสิทธิภาพด้วยกรรไกร OpenGLRenderer จะพยายาม ลดการตัดด้วยกรรไกรโดยการเปิดและปิดใช้การทดสอบ GL scissor อย่างเลือกสรร

เมื่อปิดใช้ OpenGLRenderer จะเปิดใช้การทดสอบกรรไกร GL ไว้และเปลี่ยน สี่เหลี่ยมผืนผ้ากรรไกรตามต้องการ GPU บางรุ่น (เช่น SGX 540) จะทำงานได้ดีกว่า เมื่อเปลี่ยนสี่เหลี่ยมผืนผ้ากรรไกรบ่อยกว่าการเปิดหรือ ปิดใช้การทดสอบกรรไกรบ่อยๆ

ro.hwui.texture_cache_size float 24 กำหนดขนาดแคชเท็กซ์เจอร์ต่อกระบวนการเป็นเมกะไบต์ เราขอแนะนำให้ใช้แคชที่มีขนาดใหญ่พอที่จะเก็บพื้นผิว 32 บิตหลายหน้าจอ ตัวอย่างเช่น ในจอแสดงผลขนาด 1280x800 บัฟเฟอร์แบบเต็มหน้าจอจะใช้พื้นที่ประมาณ 4 MB ดังนั้นแคชควรมีขนาดอย่างน้อย 20 MB
ro.hwui.layer_cache_size float 16 กำหนดขนาดแคชเลเยอร์ต่อกระบวนการเป็นเมกะไบต์ เรา ขอแนะนำให้ใช้แคชที่มีขนาดใหญ่พอที่จะเก็บหน้าจอได้ 4 เท่าใน 32 บิต ตัวอย่างเช่น ในจอแสดงผลขนาด 1280x800 บัฟเฟอร์แบบเต็มหน้าจอจะใช้พื้นที่ประมาณ 4 MB ดังนั้นแคชควรมีขนาดอย่างน้อย 16 MB
ro.hwui.gradient_cache_size float 0.5 กำหนดขนาดแคชการไล่ระดับสีต่อกระบวนการเป็นเมกะไบต์ โดยทั่วไปแล้ว การไล่ระดับสีเดียวจะใช้หน่วยความจำระหว่าง 1 KB ถึง 4 KB เราขอแนะนำให้ใช้แคชที่มีขนาดใหญ่พอที่จะเก็บการไล่ระดับสีอย่างน้อย 12 รายการ
ro.hwui.patch_cache_size integer 128 กำหนดขนาด (หน่วยเป็นกิโลไบต์) ของแคช 9-patch ต่อกระบวนการ แคชนี้ จะเก็บเฉพาะข้อมูลจุดยอด คุณจึงทำให้มีขนาดเล็กได้ แต่ละจุดยอดประกอบด้วย โฟลต 4 รายการ หรือ 16 ไบต์
ro.hwui.path_cache_size float 4 กำหนดขนาดแคชเส้นทางต่อกระบวนการเป็นเมกะไบต์ เราขอแนะนำให้ใช้แคชที่มีขนาดใหญ่พอที่จะเก็บพื้นผิว 32 บิตได้อย่างน้อย 1 หน้าจอ ตัวอย่างเช่น ในจอแสดงผลขนาด 1280x800 บัฟเฟอร์แบบเต็มหน้าจอจะใช้พื้นที่ประมาณ 4 MB ดังนั้นแคชควรมีขนาดอย่างน้อย 4 MB
ro.hwui.shape_cache_size float 1 กำหนดขนาดแคชรูปร่างต่อกระบวนการในหน่วยเมกะไบต์ แคชหลายรายการ เช่น วงกลมและสี่เหลี่ยมผืนผ้าโค้งมน จะใช้ค่านี้ เราขอแนะนำให้ใช้แคชที่มีขนาดใหญ่พอที่จะเก็บหน้าจอ 8 บิตได้อย่างน้อย 1 หน้าจอ เช่น ในจอแสดงผลขนาด 1280x800 บัฟเฟอร์แบบเต็มหน้าจอจะใช้พื้นที่ประมาณ 1 MB ดังนั้นแคชควรมีขนาดอย่างน้อย 1 MB
ro.hwui.drop_shadow_cache_size float 2 กำหนดขนาด (หน่วยเป็นเมกะไบต์) ของแคชเงาตกกระทบของข้อความต่อกระบวนการ เราขอแนะนําให้ใช้แคชที่มีขนาดใหญ่พอที่จะเก็บพื้นผิว 8 บิต 2 หน้าจอ เช่น ในจอแสดงผลขนาด 1280x800 บัฟเฟอร์แบบเต็มหน้าจอจะใช้พื้นที่ประมาณ 1 MB ดังนั้นแคชควรมีขนาดอย่างน้อย 2 MB
ro.hwui.r_buffer_cache_size float 2 กำหนดขนาดแคชบัฟเฟอร์การแสดงผลต่อกระบวนการเป็นเมกะไบต์ เรา ขอแนะนำให้ใช้แคชที่มีขนาดใหญ่พอที่จะเก็บหน้าจอ 2 เท่าใน 8 บิต เช่น ในจอแสดงผลขนาด 1280x800 บัฟเฟอร์แบบเต็มหน้าจอจะใช้พื้นที่ประมาณ 1 MB ดังนั้นแคชควรมีขนาดอย่างน้อย 2 MB แคชอาจมีขนาดเล็กลงหากอุปกรณ์รองรับบัฟเฟอร์ลายฉลุ 4 บิตหรือ 1 บิต
ro.hwui.texture_cache_flush_rate float 0.6 กำหนดเปอร์เซ็นต์ของแคชพื้นผิวที่จะเก็บไว้หลังจากล้างหน่วยความจำ ระบบจะทริกเกอร์การล้างหน่วยความจำเมื่อต้องการเรียกคืนหน่วยความจำในแอปพลิเคชันทั้งหมด เราขอแนะนำให้ปล่อยแคชประมาณ 50% ในสถานการณ์ดังกล่าว
ro.hwui.text_small_cache_width integer 1024 กำหนดความกว้างเป็นพิกเซลของแคชแบบอักษรเริ่มต้น ขีดจำกัดบน ขึ้นอยู่กับความเร็วที่ GPU อัปโหลดพื้นผิวได้ เราขอแนะนำให้ใช้ขนาดอย่างน้อย 1024 พิกเซล แต่ไม่เกิน 2048 พิกเซล นอกจากนี้ ให้ใช้ค่าที่เป็นเลขยกกำลังของ 2
ro.hwui.text_small_cache_height integer 256 กำหนดความสูงเป็นพิกเซลของแคชแบบอักษรเริ่มต้น ขีดจำกัดบน ขึ้นอยู่กับความเร็วที่ GPU อัปโหลดพื้นผิวได้ เราขอแนะนำให้ใช้ขนาดอย่างน้อย 256 พิกเซล แต่ไม่เกิน 1024 พิกเซล
ro.hwui.text_large_cache_width integer 2048 กำหนดความกว้างของแคชแบบอักษรขนาดใหญ่ในหน่วยพิกเซล แคชนี้ใช้สำหรับ กลีฟที่มีขนาดใหญ่เกินกว่าจะใส่ในแคชแบบอักษรเริ่มต้น ขีดจำกัดบน ขึ้นอยู่กับความเร็วที่ GPU อัปโหลดพื้นผิวได้ เราขอแนะนำให้ใช้ความละเอียดอย่างน้อย 2048 พิกเซล แต่ไม่เกิน 4096 พิกเซล นอกจากนี้ ให้ใช้ค่าที่เป็นเลขยกกำลังของ 2
ro.hwui.text_large_cache_height integer 512 กำหนดความสูงเป็นพิกเซลของแคชแบบอักษรขนาดใหญ่ แคชแบบอักษรขนาดใหญ่ ใช้สำหรับกลีฟที่มีขนาดใหญ่เกินกว่าจะพอดีกับแคชแบบอักษรเริ่มต้น ขีดจำกัดบนขึ้นอยู่กับความเร็วที่ GPU อัปโหลดพื้นผิวได้ เราขอแนะนำ ให้ใช้ขนาดอย่างน้อย 512 พิกเซล แต่ไม่เกิน 2048 พิกเซล นอกจากนี้ ให้ใช้ค่าที่เป็นเลขยกกำลังของ 2
hwui.text_gamma_correction string lookup เลือกเทคนิคการแก้ไขแกมมาของข้อความ โดยมี 4 ตัวเลือก ดังนี้
  • lookup3: การแก้ไขตามตารางการค้นหา การแก้ไขแกมมา จะแตกต่างกันสำหรับข้อความสีดำและสีขาว (ดูเกณฑ์ดังนี้)
  • lookup: การแก้ไขตามตารางการค้นหาเดียว
  • shader3: การแก้ไขที่ใช้โดย Shader GLSL การแก้ไขแกมมา จะแตกต่างกันสำหรับข้อความสีดำและสีขาว (ดูเกณฑ์ดังนี้)
  • shader: การแก้ไขที่ใช้โดย Shader GLSL
ฟังก์ชันการแก้ไขแกมมาของการค้นหาทำงานได้ดีที่สุดใน GPU ที่มีการคำนวณ Shader แบบจำกัด การแก้ไขแกมมาของ Shader เหมาะที่สุดสำหรับการประหยัดหน่วยความจำ เราขอแนะนำให้ใช้ เทคนิค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 เปิดหรือปิดใช้ PBO ในฮาร์ดแวร์ OpenGL ES 3.0 ตัวแสดงผล ใช้ PBO เพื่ออัปโหลดเท็กซ์เจอร์แบบไม่พร้อมกัน โดยเฉพาะอย่างยิ่งสำหรับแคชแบบอักษร คุณควรเปิดใช้พร็อพเพอร์ตี้นี้ไว้เสมอ แต่สามารถปิดใช้ได้ ในระหว่างการเริ่มต้นหรือการพัฒนาหาก PBO ทำให้เกิดความเสียหายหรือประสิทธิภาพต่ำ ด้วยเหตุนี้ พร็อพเพอร์ตี้จึงไม่ใช่แบบอ่านอย่างเดียว