การประมาณเวลาประมวลผลเฟรมของ CPU และ GPU (เวลาของเฟรม) เป็นสิ่งสำคัญในการทำความเข้าใจประสิทธิภาพของแอปและระบุคอขวด เมื่อสร้างโปรไฟล์แอปด้วย AGI โปรแกรมสร้างโปรไฟล์ระบบจะให้ข้อมูลการติดตามที่คุณใช้ประมาณเวลาเฟรมได้
เวลา CPU
ใน AGI คุณจะดูเวลาเฟรมของ CPU ทั้งหมดและที่ใช้งานอยู่ในแทร็ก CPU ของโปรไฟล์ระบบได้
เวลา CPU รวม
หากต้องการวัดเวลา CPU ทั้งหมดที่ใช้
เลือกช่วงเวลา
ซึ่งรวมถึงเวลาระหว่างเหตุการณ์การส่งเฟรมที่ต่อเนื่องกัน เหตุการณ์การส่งเฟรมคือ eglSwapBuffers (สำหรับ OpenGL) และ vkQueuePresentKHR
(สำหรับ Vulkan)
eglSwapBuffer 2 เหตุการณ์
vkQueuePresentKHR 2 เหตุการณ์การวัดนี้เป็นค่าประมาณของเวลา CPU ทั้งหมด แต่ไม่จำเป็นต้อง
แสดงเวลา CPU ที่ใช้งานอยู่ ตัวอย่างเช่น ในแอปที่ขึ้นอยู่กับ GPU นั้น CPU
อาจรอให้ GPU ทำงานเสร็จก่อนจึงจะส่งเฟรมใหม่ เหตุการณ์นี้มักเกิดขึ้นเมื่อเหตุการณ์ dequeueBuffer, eglSwapBuffer (สำหรับ OpenGL) หรือ vkQueuePresent (สำหรับ Vulkan) ใช้เวลา CPU เป็นจำนวนมาก
เวลารอจะรวมอยู่ในเวลา CPU ทั้งหมด แต่ไม่รวมอยู่ในเวลา CPU ที่ใช้งานอยู่
dequeueBuffer และ eglSwapBuffer
เวลา CPU ที่ใช้งาน
เวลา CPU ที่ใช้งานอยู่จะกำหนดเวลาที่ CPU เรียกใช้โค้ดแอปโดยไม่อยู่ในสถานะว่าง
หากต้องการวัดเวลา CPU ที่ใช้งานอยู่ ให้ดูส่วนแบ่งกำลังทำงานเหนือเหตุการณ์ CPU นับส่วนทั้งหมดของการติดตามระหว่างเหตุการณ์การส่งเฟรม 2 รายการที่อยู่ในสถานะกำลังทำงาน ตรวจสอบว่าคุณได้รวมเธรดที่ใช้งานได้
อีกวิธีหนึ่งในการวัดเวลา CPU ที่ใช้งานอยู่คือการดูชิ้นส่วนแอปในแทร็ก CPU ส่วนเหล่านี้จะระบุเวลาที่ CPU ทำงานและสอดคล้องกับส่วนกำลังทำงาน
คุณสามารถเพิ่มเครื่องหมาย ATrace ลงในแอปเพื่อช่วยระบุชิ้นส่วนของแอปได้ ซึ่งจะแสดงเครื่องหมายในแทร็ก CPU ของ System Profiler
ประมาณเวลาที่ใช้ในการแสดงผลเฟรมของ GPU
หากต้องการประมาณเวลาเฟรมของ GPU คุณสามารถใช้ชิ้นส่วน GPU หรือตัวนับ GPU ใน System Profiler ค่าประมาณจะแม่นยำมากขึ้นเมื่อใช้สไลซ์ GPU
สไลซ์ GPU
หาก System Profiler มีข้อมูลสไลซ์ GPU คุณจะได้รับข้อมูลเวลาที่ใช้ในการแสดงผลเฟรมของ GPU ที่แม่นยำมาก โดยการวัดเวลารวมที่แอป ใช้ในการทำงานที่เชื่อมโยงกับเฟรมเดียว
อุปกรณ์ Mali
ในอุปกรณ์ Mali ชิ้นส่วน GPU จะมีแทร็กส่วนย่อย ที่ไม่ใช่ส่วนย่อย และบางครั้งก็มีแทร็กที่ไม่ใช่ส่วนย่อยเพิ่มเติม สำหรับเฟรมที่มีความซับซ้อนน้อยกว่า งานของ Fragment และ Non-Fragment จะเป็นแบบลำดับ ดังนั้นการแยกแยะงานของเฟรมหนึ่ง ออกจากอีกเฟรมหนึ่งจึงทำได้โดยการมองหาระหว่างงาน GPU ที่ใช้งานอยู่
อีกทางเลือกหนึ่งคือ หากคุณคุ้นเคยกับงานที่ส่งไปยัง GPU การระบุรูปแบบของพาสการเรนเดอร์ที่ส่งจะให้ข้อมูลเกี่ยวกับเวลาที่เฟรมเริ่มต้นและสิ้นสุด
สำหรับแอปที่มีเวิร์กโฟลว์ GPU แบบขนานมากขึ้น คุณจะดูเวลาที่ใช้ในการแสดงผลเฟรมของ GPU ได้โดยค้นหาเฟรมทั้งหมดที่มี submissionID เดียวกันในแผงการเลือกสำหรับแต่ละสไลซ์
สำหรับแอปที่ใช้ Vulkan คุณสามารถใช้การส่งหลายรายการเพื่อสร้างเฟรมได้ ติดตามรหัสการส่งโดยใช้แทร็ก Vulkan Events ซึ่งมีสไลซ์สำหรับการส่งแต่ละรายการ การเลือกสไลซ์การส่งจะไฮไลต์สไลซ์กิจกรรม GPU ทั้งหมดที่สอดคล้องกับการส่ง
อุปกรณ์ Adreno
ในอุปกรณ์ Adreno ชิ้นส่วน GPU จะปรากฏในแทร็กคิว GPU 0 และจะแสดงตามลำดับเสมอ เพื่อให้คุณดูชิ้นส่วนทั้งหมดที่แสดงถึง การส่งผ่านการแสดงผลสำหรับเฟรมและใช้ชิ้นส่วนเหล่านั้นเพื่อวัดเวลาเฟรมของ GPU ได้
เช่นเดียวกับสถานการณ์ Mali ที่อธิบายไว้ก่อนหน้านี้ หากแอปใช้ Vulkan แทร็กเหตุการณ์ Vulkan จะให้ข้อมูลเกี่ยวกับงานที่ส่งเพื่อ ดำเนินการเฟรม หากต้องการไฮไลต์การแสดงผล ให้คลิกสไลซ์เหตุการณ์ Vulkan ที่เชื่อมโยงกับเฟรม
มีบางสถานการณ์ที่ขอบเขตเฟรมของ GPU แยกแยะได้ยากขึ้น เนื่องจากแอปใช้ GPU อย่างหนัก ในสถานการณ์เหล่านี้ หากคุณคุ้นเคยกับงานที่ส่งไปยัง GPU คุณจะระบุรูปแบบที่ใช้ในการเรียกใช้การแสดงผลและกำหนดขอบเขตเฟรมจากข้อมูลนั้นได้
เคาน์เตอร์ GPU
หากไม่มีข้อมูลส่วนแบ่ง GPU ในการติดตาม คุณสามารถประมาณเวลาที่ใช้ในการแสดงผลเฟรมของ GPU ได้โดยใช้แทร็กตัวนับ GPU
อุปกรณ์ Mali
ในอุปกรณ์ Mali คุณสามารถใช้แทร็กการใช้ GPU เพื่อประมาณเวลาที่ใช้ในการแสดงผลเฟรมของ GPU สำหรับแอปที่ไม่ได้ใช้ GPU อย่างหนัก เมื่อแอปใช้ GPU น้อยลง แอปจะมีช่วงเวลาปกติที่กิจกรรม GPU สูงและต่ำแทนที่จะมีกิจกรรมสูงอย่างต่อเนื่อง หากต้องการประมาณเวลาเฟรม GPU โดยใช้แทร็กการใช้ GPU ให้วัดระยะเวลาของช่วงที่มีกิจกรรมสูงในแทร็ก
หากแอปใช้ GPU มากขึ้น การใช้ GPU ก็อาจสูงมากอย่างต่อเนื่อง ในกรณีนี้ คุณสามารถใช้แทร็กการใช้คิวของ Fragment และการใช้คิวที่ไม่ใช่ Fragment เพื่อตรวจสอบกิจกรรมของ GPU และ ประมาณเวลาเฟรมของ GPU การมองหารูปแบบในแทร็กแบบแยกส่วนและแบบไม่แยกส่วนจะช่วยให้คุณประมาณขอบเขตของเฟรมได้คร่าวๆ และใช้ขอบเขตนั้นเพื่อวัดเวลาที่ใช้ในการแสดงผลเฟรมของ GPU
อุปกรณ์ Adreno
ในอุปกรณ์ Adreno หากแอปไม่ได้ใช้ GPU อย่างหนัก คุณสามารถประมาณเวลาที่ใช้ในการแสดงผลเฟรมของ GPU ได้ในลักษณะเดียวกับที่ทำกับอุปกรณ์ Mali ในส่วนก่อนหน้า
หากแอปใช้ GPU มากกว่า และแอปพลิเคชันมีเปอร์เซ็นต์การใช้ GPU สูงอย่างต่อเนื่อง คุณสามารถใช้แทร็กคำสั่ง Vertex/วินาทีและคำสั่ง Fragment / วินาทีเพื่อประมาณเวลาเฟรม GPU ได้ การมองหารูปแบบในระดับกิจกรรมของแทร็กเหล่านี้จะช่วยให้คุณประมาณคร่าวๆ ได้ว่าขอบเขตของเฟรมอยู่ที่ใด และใช้ข้อมูลนั้นเพื่อวัดเวลาที่ใช้ในการแสดงผลเฟรมของ GPU
แทร็กอื่นๆ เหล่านี้อาจให้ข้อมูลที่คล้ายกัน
- Vertices Shaded / Second
- ส่วนย่อยที่แรเงา / วินาที
- % จุดยอดการแรเงาตามเวลา
- % ชิ้นส่วนการแรเงาตามเวลา