เมื่อทดสอบการผสานรวม ProfilingManager ในเครื่อง คำขออาจถูกจำกัดโดยการจำกัดอัตราคำขอ หรือการติดตามเบื้องหลังอาจไม่ทำงานเมื่อทดสอบทริกเกอร์ ใช้คำสั่ง adb ในหน้านี้เพื่อปิดใช้การควบคุมปริมาณ ดึงโปรไฟล์ เก็บการติดตามที่ไม่ได้ปกปิดข้อมูล ทริกเกอร์การจับภาพ และตรวจสอบสถานะบริการในอุปกรณ์ทดสอบ
ปิดใช้ตัวจำกัดอัตรา
หากต้องการปิดใช้กระบวนการของแอปและตัวจำกัดอัตราของระบบสำหรับคำขอ requestProfiling ระหว่างการทดสอบในเครื่อง ให้เรียกใช้คำสั่ง device_config ต่อไปนี้
adb shell device_config put profiling_testing rate_limiter.disabled true
เมื่อทดสอบเสร็จแล้ว ให้รีเซ็ต Flag โดยทำดังนี้
adb shell device_config delete profiling_testing rate_limiter.disabled
ดึงโปรไฟล์โดยใช้ ADB
หากต้องการตรวจสอบโปรไฟล์ที่ปกปิดข้อมูลในเครื่องบนอุปกรณ์ที่มีสิทธิ์เข้าถึงระดับรูท ให้เรียกใช้ adb
pull พร้อมเส้นทางที่ getResultFilePath แสดงผล:
# Pull a profile
adb pull /data/user/0/<com.example.myapp>/files/profiling/<profile-file-name>
เก็บรักษาผลลัพธ์ชั่วคราวและผลลัพธ์ที่ไม่ได้ปกปิด
เมื่อทดสอบการทำโปรไฟล์ในเครื่อง คุณสามารถเก็บผลลัพธ์ไว้ในไดเรกทอรีชั่วคราวที่ /data/misc/perfetto-traces/profiling/ การเปรียบเทียบการติดตามของระบบที่ไม่ได้ปกปิดข้อมูลกับเวอร์ชันที่ปกปิดข้อมูลจะช่วยให้คุณเข้าใจว่าข้อมูลใดถูกตัดออกระหว่างการปกปิดข้อมูล
วิธีเก็บรักษาผลลัพธ์ชั่วคราวและผลลัพธ์ที่ไม่ได้ปกปิดจะขึ้นอยู่กับเวอร์ชัน Android ที่อุปกรณ์ใช้ ดังนี้
Android 16 (ระดับ API 36) ขึ้นไป: คุณสามารถเก็บทั้งผลลัพธ์ที่ไม่ได้ปกปิด (หากมี) และผลลัพธ์ที่ปกปิดไว้ในไดเรกทอรีชั่วคราว ซึ่งได้รับการขยายใน Android 16 ให้เข้าถึงได้โดยใช้
adb pullในบิลด์ทุกประเภทโดยไม่ต้องมีสิทธิ์เข้าถึงระดับรูท (ขณะที่ Android 15 ต้องมีสิทธิ์เข้าถึงระดับรูทเพื่ออ่าน/data/misc/perfetto-traces/profiling/) หากต้องการป้องกันไม่ให้ระบบลบผลลัพธ์ชั่วคราว ให้เรียกใช้คำสั่งต่อไปนี้adb shell device_config put profiling_testing delete_temporary_results.disabled trueAndroid 15 (ระดับ API 35): ในไดเรกทอรีชั่วคราว คุณสามารถเก็บเฉพาะผลลัพธ์ที่ไม่ได้ปกปิด ซึ่งเข้าถึงได้ผ่าน
adbเฉพาะในบิลด์ที่มีสิทธิ์เข้าถึงระดับรูทเท่านั้น (แอปของคุณยังคงได้รับโปรไฟล์ที่ปกปิดข้อมูลในไดเรกทอรี/data/user/0/<app>/files/profiling/ของแอปเอง ซึ่งโค้ดแอปสามารถอ่านหรือคัดลอกในบิลด์ใดก็ได้ แม้ว่าการดึงข้อมูลจาก/data/user/0/...โดยตรงด้วยadb pullจะต้องใช้สิทธิ์เข้าถึงระดับรูท หรือadb shell run-as <app>ในบิลด์ที่แก้ไขข้อบกพร่องได้) หากต้องการป้องกันไม่ให้ระบบลบร่องรอยที่ไม่ได้ปกปิด ให้เรียกใช้คำสั่งต่อไปนี้adb shell device_config put profiling_testing delete_unredacted_trace.disabled true
หลังจากบันทึกโปรไฟล์แล้ว ให้ดึงไฟล์ที่เก็บไว้ออกจากไดเรกทอรีชั่วคราว โดยทำดังนี้
# Pull a retained redacted profile (Android 16 and higher)
adb pull /data/misc/perfetto-traces/profiling/<trace-name>.<profile-type-ext>
# Pull an unredacted system trace
adb pull /data/misc/perfetto-traces/profiling/<trace-name>.perfetto-trace-unredacted
ในคำสั่งเหล่านี้ <trace-name> คือชื่อไฟล์ฐาน (ไม่มีนามสกุล) จากเส้นทางที่ ProfilingResult.getResultFilePath แสดงผล และสำเนาการติดตามของระบบที่ไม่ได้ปกปิดจะเพิ่ม -unredacted ต่อท้ายนามสกุล .perfetto-trace ดูรายละเอียดเกี่ยวกับโครงสร้างชื่อไฟล์และค่า <profile-type-ext> ได้ที่หัวข้อตำแหน่งไฟล์และรูปแบบการตั้งชื่อ
adb shell device_config delete profiling_testing delete_temporary_results.disabled
adb shell device_config delete profiling_testing delete_unredacted_trace.disabled
บังคับให้เปิดใช้การติดตามเบื้องหลังสำหรับการทดสอบทริกเกอร์
เนื่องจากการติดตามเบื้องหลังของระบบจะทำงานตามช่วงเวลาแบบสุ่มในเวอร์ชันที่ใช้งานจริง การทดสอบการทำโปรไฟล์ตามทริกเกอร์ในเครื่องจึงอาจทำได้ยาก หากต้องการบังคับให้ระบบเรียกใช้การติดตามในเบื้องหลังอย่างต่อเนื่องและข้ามตัวจำกัดอัตราคำขอระดับระบบสำหรับทริกเกอร์ของแอป ให้ตั้งค่า system_triggered_profiling.testing_package_name ดังนี้
adb shell device_config put profiling_testing system_triggered_profiling.testing_package_name <com.example.myapp>
ระยะเวลาพักการใช้งานต่อทริกเกอร์ที่กำหนดค่าด้วย setRateLimitingPeriodHours จะยังคงมีผลอยู่ เนื่องจากโหมดนี้จะทำงานอย่างต่อเนื่องจนกว่าคุณจะล้างข้อมูล ให้ลบแฟล็กเมื่อทดสอบเสร็จแล้ว
adb shell device_config delete profiling_testing system_triggered_profiling.testing_package_name
คำสั่งการแก้ไขข้อบกพร่องที่มีประโยชน์
ใน Android 16 (API ระดับ 36) ขึ้นไปที่มีเวอร์ชันโมดูล Profiling ล่าสุด คุณสามารถใช้เครื่องมือ cmd profiling_service ผ่าน adb เพื่อเปิดใช้การบันทึกแบบละเอียด เรียกใช้คอลเล็กชันโปรไฟล์แบบออนดีมานด์ และทดสอบทริกเกอร์ได้โดยตรงจากบรรทัดคำสั่ง
เปิดใช้การบันทึกแก้ไขข้อบกพร่องแบบละเอียด
หากต้องการเปิดใช้บันทึก ProfilingService โดยละเอียดใน logcat และวิเคราะห์การจัดการและการส่งคำขอ ให้เรียกใช้คำสั่งต่อไปนี้
adb shell cmd profiling_service enable-logs true
ขอการรวบรวมโปรไฟล์แบบออนดีมานด์
หากต้องการเริ่มจับภาพโปรไฟล์ทันทีสำหรับแพ็กเกจที่เฉพาะเจาะจงจากบรรทัดคำสั่ง ให้เรียกใช้คำสั่งต่อไปนี้
adb shell cmd profiling_service request-profiling <profiling_type> <com.example.myapp> [--user <user_id>] [--duration <duration_ms>] [--sources <sources>]
ในคำสั่งนี้ <profiling_type> คือค่าคงที่จำนวนเต็มจาก ProfilingManager (1 สำหรับฮีปดัมป์ของ Java, 2 สำหรับโปรไฟล์ฮีป, 3 สำหรับการสุ่มตัวอย่างสแต็ก หรือ 4 สำหรับการติดตามของระบบ) กระบวนการของแอปเป้าหมายต้องทำงานสำหรับโปรไฟล์หน่วยความจำและสแต็ก คำขอจะขึ้นอยู่กับตัวจำกัดอัตราเว้นแต่จะปิดใช้ และ ProfilingResult ที่เสร็จสมบูรณ์จะส่งไปยัง Listener ทั่วโลกที่ลงทะเบียนกับ registerForAllProfilingResults เท่านั้น
ลงทะเบียนและจำลองทริกเกอร์
หากต้องการลงทะเบียนทริกเกอร์หรือเริ่มเหตุการณ์ทริกเกอร์จำลองสำหรับแพ็กเกจและยืนยันการจัดการ Callback ของทริกเกอร์ ให้เรียกใช้คำสั่งต่อไปนี้
adb shell cmd profiling_service add-trigger <trigger_type> <com.example.myapp> [--user <user_id>]
adb shell cmd profiling_service trigger <trigger_type> <com.example.myapp> [--user <user_id>]
ในคำสั่งเหล่านี้ <trigger_type> คือค่าคงที่จำนวนเต็มจาก ProfilingTrigger (เช่น 1 สำหรับ TRIGGER_TYPE_APP_FULLY_DRAWN, 2 สำหรับ TRIGGER_TYPE_ANR หรือ 7 สำหรับ TRIGGER_TYPE_OOM) การเรียกใช้ add-trigger จะลงทะเบียนทริกเกอร์ด้วยระยะเวลาพัก 0 ชั่วโมง ซึ่งจะลบล้างการลงทะเบียนที่มีอยู่สำหรับทริกเกอร์ประเภทนั้น การจำลองทริกเกอร์ที่บันทึกภาพรวมของการติดตามเบื้องหลัง (เช่น 1 หรือ 2) ต้องใช้การติดตามเบื้องหลังที่ใช้งานอยู่ (ดูบังคับให้เปิดใช้การติดตามเบื้องหลังสำหรับการทดสอบทริกเกอร์)
รวบรวมสถานะ ProfilingManager โดยรวม
ใน Android 16 (API ระดับ 36) ขึ้นไปที่มีโมดูล Profiling เวอร์ชันล่าสุด คุณสามารถเรียกใช้ dumpsys กับ profiling_service เพื่อวินิจฉัยปัญหาและตรวจสอบสถานะปัจจุบันของ ProfilingManager ได้ ดังนี้
adb shell dumpsys profiling_service
เอาต์พุต dumpsys profiling_service มีไว้เพื่อวัตถุประสงค์ในการให้ข้อมูลและการแก้ไขข้อบกพร่องเท่านั้น และรูปแบบอาจมีการเปลี่ยนแปลง ซึ่งจะแสดงภาพรวมของสถานะภายในของบริการ ซึ่งรวมถึงข้อมูลต่อไปนี้
- การควบคุมปริมาณที่ใช้งานอยู่และสถานะตัวจำกัดอัตรา
- การกำหนดค่าอุปกรณ์ที่ใช้งานอยู่
- ทริกเกอร์แอปที่ลงทะเบียนและระยะเวลาคูลดาวน์ของการจำกัดอัตราคำขอ
- เซสชันการทำโปรไฟล์ที่ใช้งานอยู่และอยู่ในคิว
- คำขอการทำโปรไฟล์ล่าสุด เหตุการณ์ทริกเกอร์ และเหตุการณ์การส่งผลลัพธ์