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

เอกสารนี้อธิบายการปรับแต่งประสิทธิภาพที่คุณทำได้เพื่อใช้ฮาร์ดแวร์ให้ได้ประโยชน์สูงสุด

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

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

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

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

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

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

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

เมื่อปิดใช้การเพิ่มประสิทธิภาพ 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 0.5 float กําหนดขนาด (หน่วยเป็นเมกะไบต์) ของแคชไล่ระดับสีต่อกระบวนการ โดยปกติแล้ว ไล่ระดับสีเดียวจะใช้หน่วยความจําประมาณ 1-4 KB ขอแนะนําให้ใช้แคชที่ใหญ่พอที่จะเก็บไล่ระดับสีได้อย่างน้อย 12 รายการ
ro.hwui.patch_cache_size integer 128 กำหนดขนาดแคช 9 แพตช์เป็นกิโลไบต์ต่อกระบวนการ แคชนี้จะเก็บเฉพาะข้อมูลเวอร์เท็กซ์ จึงมีขนาดเล็กได้ โดยจุดยอดแต่ละจุดจะประกอบด้วยเลขทศนิยม 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: การแก้ไขที่ใช้โดยโปรแกรมเปลี่ยนสี GLSL การแก้แกมมาจะแตกต่างกันสำหรับข้อความสีดำและสีขาว (ดูเกณฑ์ด้านล่าง)
  • shader: การแก้ไขที่ใช้โดยโปรแกรมเปลี่ยนสี GLSL
การแก้ไขแกมมาแบบดูตารางทำงานได้ดีที่สุดใน GPU ที่มีคณิตศาสตร์เชดเดอร์แบบจํากัด การแก้ไขแกมมาของเฉดสีเหมาะที่สุดสำหรับการประหยัดหน่วยความจำ เราขอแนะนำให้ใช้เทคนิค 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 ทําให้ข้อมูลเสียหายหรือประสิทธิภาพแย่มาก ด้วยเหตุนี้พร็อพเพอร์ตี้จึงไม่ใช่แบบอ่านอย่างเดียว