การกําหนดค่า 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 แบบเลือก

เมื่อปิดใช้ 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-patches ต่อกระบวนการเป็นกิโลไบต์ แคชนี้จะเก็บเฉพาะข้อมูลจุดยอด ดังนั้นคุณจึงสามารถเก็บไว้ให้มีขนาดเล็กได้ จุดยอดแต่ละจุดประกอบด้วยค่าทศนิยม 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 กำหนดเกณฑ์ความสว่างที่สูงกว่าซึ่งจะใช้การแก้ไขแกมมาสีขาว applied. ค่าต้องอยู่ในช่วง 0-255
hwui.use_gpu_pixel_buffers boolean true เปิดหรือปิดใช้บัฟเฟอร์พิกเซลของ GPU ในฮาร์ดแวร์ OpenGL ES 3.0 ตัวแสดงผลใช้ PBO เพื่ออัปโหลดพื้นผิวแบบไม่พร้อมกัน โดยเฉพาะอย่างยิ่งสำหรับแคชแบบอักษร พร็อพเพอร์ตี้นี้ควรเปิดใช้ไว้เสมอ แต่คุณสามารถปิดใช้ ระหว่างการเริ่มต้นระบบหรือการพัฒนาได้หาก PBO ทำให้เกิดการเสียหายหรือประสิทธิภาพไม่ดี นี่จึงเป็นเหตุผลที่พร็อพเพอร์ตี้นี้ไม่ใช่แบบอ่านอย่างเดียว