การจัดการพลังงานและประสิทธิภาพของอุปกรณ์ Android ช่วยให้มั่นใจได้ว่าแอปจะทำงานได้อย่างต่อเนื่องและราบรื่นบนฮาร์ดแวร์หลากหลายประเภท ใน Android 7.0 และใหม่กว่า OEM สามารถใช้การสนับสนุนสำหรับคำแนะนำด้านประสิทธิภาพที่ยั่งยืน ซึ่งช่วยให้แอปสามารถรักษาประสิทธิภาพของอุปกรณ์ให้สอดคล้องกัน และระบุคอร์พิเศษเฉพาะเพื่อปรับปรุงประสิทธิภาพสำหรับแอปที่ทำงานอยู่เบื้องหน้าซึ่งใช้ CPU มาก
ประสิทธิภาพที่ยั่งยืน
สำหรับแอปที่ทำงานเป็นเวลานาน (เกม กล้อง RenderScript การประมวลผลเสียง) ประสิทธิภาพอาจแตกต่างกันอย่างมากเมื่อถึงขีดจำกัดอุณหภูมิของอุปกรณ์และระบบบนชิป (SoC) ถูกควบคุมปริมาณ นักพัฒนาแอปที่สร้างแอปประสิทธิภาพสูงและใช้งานได้ยาวนานนั้นถูกจำกัด เนื่องจากความสามารถของแพลตฟอร์มพื้นฐานนั้นเป็นเป้าหมายที่เคลื่อนไหวเมื่ออุปกรณ์เริ่มร้อนขึ้น
เพื่อแก้ไขข้อจำกัดเหล่านี้ Android 7.0 ได้แนะนำการสนับสนุนเพื่อประสิทธิภาพที่ยั่งยืน ช่วยให้ OEM สามารถให้คำแนะนำเกี่ยวกับความสามารถด้านประสิทธิภาพของอุปกรณ์สำหรับแอปที่ทำงานเป็นเวลานาน นักพัฒนาแอพสามารถใช้คำแนะนำเหล่านี้เพื่อปรับแต่งแอพให้มีระดับประสิทธิภาพของอุปกรณ์ที่สม่ำเสมอและคาดเดาได้ตลอดระยะเวลาอันยาวนาน
สถาปัตยกรรม
แอป Android สามารถขอให้แพลตฟอร์มเข้าสู่โหมดประสิทธิภาพที่ยั่งยืน โดยที่อุปกรณ์ Android สามารถรักษาระดับประสิทธิภาพที่สม่ำเสมอเป็นระยะเวลานานได้
การนำไปปฏิบัติ
เพื่อรองรับประสิทธิภาพที่ยั่งยืนใน Android 7.0 และใหม่กว่า OEM ต้อง:
- ทำการเปลี่ยนแปลงเฉพาะอุปกรณ์กับพลังงาน HAL เพื่อล็อคความถี่ CPU/GPU สูงสุด หรือ ดำเนินการปรับแต่งอื่นๆ เพื่อป้องกันการควบคุมปริมาณความร้อน
- ใช้คำแนะนำใหม่
POWER_HINT_SUSTAINED_PERFORMANCE
ใน power HAL - ประกาศการสนับสนุนโดยส่งคืน TRUE ผ่าน
isSustainedPerformanceModeSupported()
API - ใช้
Window.setSustainedPerformanceMode
ในการใช้งานอ้างอิงของ Nexus คำใบ้ด้านพลังงานจะจำกัดความถี่สูงสุดของ CPU และ GPU ในระดับที่ยั่งยืนสูงสุด โปรดทราบว่าการลดแถบ MAX ในความถี่ CPU/GPU จะลดอัตราเฟรมลง แต่ควรใช้อัตราที่ต่ำกว่านี้ในโหมดนี้เนื่องจากความยั่งยืน ตัวอย่างเช่น อุปกรณ์ที่ใช้นาฬิกาสูงสุดปกติอาจสามารถเรนเดอร์ที่ 60 FPS ได้เป็นเวลาสองสามนาที แต่หลังจากที่อุปกรณ์ร้อนขึ้น อุปกรณ์อาจเร่งความเร็วไปที่ 30 FPS ภายในสิ้น 30 นาที เมื่อใช้โหมดต่อเนื่อง อุปกรณ์สามารถเรนเดอร์อย่างสม่ำเสมอที่ 45 FPS ตลอด 30 นาที เป้าหมายคืออัตราเฟรมเมื่อใช้โหมดที่สูง (หรือสูงกว่า) มากกว่าอัตราเฟรมเมื่อไม่ได้ใช้โหมดและสม่ำเสมอเมื่อเวลาผ่านไปเพื่อให้นักพัฒนาไม่ต้องไล่ตามเป้าหมายที่กำลังเคลื่อนที่
เราขอแนะนำอย่างยิ่งให้ใช้โหมด Sustained เพื่อให้อุปกรณ์บรรลุประสิทธิภาพที่ยั่งยืนสูงสุดที่เป็นไปได้ ไม่ใช่แค่ค่าต่ำสุดที่จำเป็นในการผ่านการทดสอบ (เช่น เลือกความถี่สูงสุด MAX สูงสุดที่เป็นไปได้ที่ไม่ทำให้อุปกรณ์เร่งความร้อนเมื่อเวลาผ่านไป)
หมายเหตุ : ไม่จำเป็นต้องมีการกำหนดอัตรานาฬิกาสูงสุดเพื่อใช้โหมดต่อเนื่อง
การตรวจสอบ
OEM สามารถใช้การทดสอบ CTS (Android 7.0 ขึ้นไป) เพื่อตรวจสอบการใช้งาน API ประสิทธิภาพที่ยั่งยืน การทดสอบรันปริมาณงานประมาณ 30 นาที และเปรียบเทียบประสิทธิภาพทั้งที่เปิดและไม่เปิดใช้งานโหมดยั่งยืน:
- เมื่อเปิดใช้งานโหมดต่อเนื่อง อัตราเฟรมจะต้องค่อนข้างคงที่ (การทดสอบจะวัดเปอร์เซ็นต์ของการเปลี่ยนแปลงอัตราเฟรมในช่วงเวลาหนึ่ง และต้องมีการเปลี่ยนแปลง <5%)
- เมื่อเปิดใช้งานโหมดต่อเนื่อง อัตราเฟรมจะต้องไม่ต่ำกว่าอัตราเฟรมเมื่อสิ้นสุด 30 นาทีโดยปิดใช้งานโหมด
นอกจากนี้ คุณยังสามารถทดสอบการใช้งานของคุณด้วยตนเองกับเวิร์กโหลดที่ใช้ CPU และ GPU จำนวนมากได้ เพื่อให้แน่ใจว่าอุปกรณ์จะไม่ควบคุมความร้อนหลังจากใช้งานไป 30 นาที ในการทดสอบภายใน เราใช้ปริมาณงานตัวอย่าง รวมถึงเกมและแอปการเปรียบเทียบประสิทธิภาพ (เช่น gfxbench )
แกนพิเศษ
สำหรับเวิร์กโหลดที่ใช้ CPU มากและไวต่อเวลา การได้รับการจองล่วงหน้าโดยเธรดอื่นอาจเป็นความแตกต่างระหว่างการกำหนดเส้นตายของเฟรมหรือไม่ก็ได้ สำหรับแอปที่มีข้อกำหนดด้านเวลาแฝงและอัตราเฟรมที่เข้มงวด (เช่น แอปเสียงหรือความเป็นจริงเสมือน) การมีแกน CPU พิเศษสามารถรับประกันประสิทธิภาพในระดับที่ยอมรับได้
อุปกรณ์ที่ใช้ Android 7.0 หรือใหม่กว่าสามารถจองหนึ่งคอร์ไว้อย่างชัดเจนสำหรับแอปเบื้องหน้าอันดับต้นๆ ได้ ปรับปรุงประสิทธิภาพสำหรับแอปเบื้องหน้าทั้งหมด และให้แอปที่มีปริมาณงานที่มีความเข้มข้นสูงควบคุมวิธีการจัดสรรงานข้ามคอร์ CPU ได้มากขึ้น
หากต้องการสนับสนุนคอร์พิเศษบนอุปกรณ์:
- เปิดใช้งาน
cpusets
และกำหนดค่าcpuset
ที่มีเฉพาะแอปเบื้องหน้าด้านบนเท่านั้น - ตรวจสอบให้แน่ใจว่าคอร์หนึ่งคอร์ (นี่คือคอร์พิเศษ) ถูกสงวนไว้สำหรับเธรดจาก
cpuset
นี้ - ใช้ getExclusiveCores API เพื่อส่งคืนหมายเลขคอร์ของคอร์พิเศษ
หากต้องการทราบว่ากระบวนการใดกำหนดเวลาไว้บนคอร์ใด ให้ใช้ systrace
ในขณะที่รันเวิร์กโหลดใดๆ และตรวจสอบว่าไม่มีเธรดพื้นที่ผู้ใช้จากแอปอื่นนอกเหนือจากแอปเบื้องหน้าบนสุดที่ถูกกำหนดเวลาไว้บนคอร์พิเศษ
หากต้องการดูการใช้งานอ้างอิงสำหรับ Nexus 6P โปรดดูที่ android//device/huawei/angler/power/power.c