การกำหนดค่า 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

ใช้เพื่อเปิดหรือปิดใช้งานการเพิ่มประสิทธิภาพแบบกรรไกร ค่าที่ยอมรับเป็นจริงและเท็จ เมื่อเปิดใช้งานการปรับกรรไกรให้เหมาะสม 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 ขอแนะนำให้ใช้แคชที่มีขนาดใหญ่พอที่จะเก็บการไล่ระดับสีอย่างน้อยสิบสองอัน
ro.hwui.patch_cache_size integer 128 กำหนดขนาดเป็นกิโลไบต์ของแคช 9 แพตช์ต่อกระบวนการ แคชนี้เก็บเฉพาะข้อมูลจุดยอดเท่านั้น จึงสามารถเก็บไว้ให้มีขนาดเล็กได้ แต่ละจุดยอดประกอบด้วย 4 โฟลตหรือ 16 ไบต์
ro.hwui.path_cache_size float 4 กำหนดขนาด เป็นเมกะไบต์ ของแคชพาธต่อกระบวนการ เราแนะนำให้ใช้แคชที่มีขนาดใหญ่พอที่จะเก็บพื้นผิว 32 บิตได้อย่างน้อยหนึ่งหน้าจอ ตัวอย่างเช่น บนจอแสดงผล 1280x800 บัฟเฟอร์แบบเต็มหน้าจอใช้พื้นที่ประมาณ 4 MB ดังนั้นแคชควรมีอย่างน้อย 4 MB
ro.hwui.shape_cache_size float 1 กำหนดขนาดเป็นเมกะไบต์ ของแคชรูปร่างต่อกระบวนการ ค่านี้ถูกใช้โดยแคชหลายๆ อัน เช่น วงกลมและสี่เหลี่ยมมุมมน เราขอแนะนำให้ใช้แคชที่มีขนาดใหญ่พอที่จะเก็บหน้าจอ 8 บิตอย่างน้อยหนึ่งหน้าจอ ตัวอย่างเช่น บนจอแสดงผล 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 กำหนดขนาดเป็นเมกะไบต์ ของแคชบัฟเฟอร์การเรนเดอร์ต่อกระบวนการ ขอแนะนำให้ใช้แคชที่มีขนาดใหญ่พอที่จะเก็บหน้าจอสองเท่าใน 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 พิกเซล คุณควรใช้กำลังสองค่าด้วย
ro.hwui.text_small_cache_height integer 256 กำหนดความสูงเป็นพิกเซลของแคชแบบอักษรเริ่มต้น ขอบเขตบนขึ้นอยู่กับความเร็วที่ GPU สามารถอัปโหลดพื้นผิวได้ เราขอแนะนำให้ใช้อย่างน้อย 256 พิกเซล แต่ไม่เกิน 1,024 พิกเซล
ro.hwui.text_large_cache_width integer 2048 กำหนดความกว้างเป็นพิกเซลของแคชแบบอักษรขนาดใหญ่ แคชนี้ใช้สำหรับร่ายมนตร์ที่มีขนาดใหญ่เกินไปที่จะใส่ในแคชแบบอักษรเริ่มต้น ขอบเขตบนขึ้นอยู่กับความเร็วที่ GPU สามารถอัปโหลดพื้นผิวได้ เราแนะนำให้ใช้อย่างน้อย 2048 พิกเซล แต่ไม่เกิน 4096 พิกเซล คุณควรใช้กำลังสองค่าด้วย
ro.hwui.text_large_cache_height integer 512 กำหนดความสูงเป็นพิกเซลของแคชแบบอักษรขนาดใหญ่ แคชแบบอักษรขนาดใหญ่ใช้สำหรับสัญลักษณ์ที่มีขนาดใหญ่เกินกว่าจะใส่ลงในแคชแบบอักษรเริ่มต้นได้ ขอบเขตบนขึ้นอยู่กับความเร็วที่ GPU สามารถอัปโหลดพื้นผิวได้ เราขอแนะนำให้ใช้อย่างน้อย 512 พิกเซล แต่ไม่เกิน 2048 พิกเซล คุณควรใช้กำลังสองค่าด้วย
hwui.text_gamma_correction string lookup เลือกเทคนิคการแก้ไขแกมมาข้อความ มีสี่ทางเลือกที่เป็นไปได้:
  • lookup3 : การแก้ไขตามตารางการค้นหา การแก้ไขแกมม่าจะแตกต่างกันสำหรับข้อความขาวดำ (ดูเกณฑ์ด้านล่าง)
  • lookup : การแก้ไขตามตารางการค้นหาเดียว
  • shader3 : การแก้ไขที่ใช้โดย GLSL shader การแก้ไขแกมม่าจะแตกต่างกันสำหรับข้อความขาวดำ (ดูเกณฑ์ด้านล่าง)
  • shader : การแก้ไขที่ใช้โดย GLSL shader
การแก้ไขแกมม่าการค้นหาทำงานได้ดีที่สุดบน 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 ทำให้เกิดความเสียหายหรือประสิทธิภาพการทำงานที่แย่มาก นี่คือสาเหตุที่คุณสมบัติไม่อ่านอย่างเดียว