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