การติดตามมักจะเป็นแหล่งข้อมูลที่ดีที่สุดเมื่อตรวจสอบ ปัญหาประสิทธิภาพ ซึ่งช่วยให้คุณตั้งสมมติฐานเกี่ยวกับปัญหาและ จุดที่ต้องเริ่มมองหา
Android รองรับการติดตาม 2 ระดับ ได้แก่ การติดตามระบบและวิธีการ การติดตาม
เนื่องจากการติดตามระบบจะติดตามเฉพาะบริเวณที่มีการทำเครื่องหมายไว้สำหรับการติดตามโดยเฉพาะ ค่าใช้จ่ายต่ำและไม่ส่งผลกระทบต่อประสิทธิภาพของแอปมากนัก ระบบ การติดตามนั้นมีประโยชน์มากในการดูว่าส่วนหนึ่งๆ ของโค้ดใช้เวลานานแค่ไหน ที่จะเรียกใช้
เมธอดการติดตามจะติดตามการเรียกใช้ฟังก์ชันทั้งหมดในแอปของคุณ แพงมาก จึงส่งผลต่อประสิทธิภาพการทำงานของแอปอย่างมาก แต่จะให้ ภาพของสิ่งที่เกิดขึ้น ฟังก์ชันที่มีการเรียกใช้ และความถี่ พวกเขาจะถูกโทรหา
โดยค่าเริ่มต้น การติดตามของระบบจะไม่รวมฟังก์ชันที่ประกอบกันได้แต่ละรายการ ซึ่งพร้อมใช้งานในการติดตามเมธอด
เรากำลังทดสอบฟังก์ชันใหม่ของการติดตามระบบเพื่อแสดง Composable ภายในการติดตามของระบบ ทำให้คุณมีความรบกวนจากระบบในระดับต่ำ การติดตามพร้อมวิธีการระดับรายละเอียดในการเรียบเรียง
ตั้งค่าสำหรับการติดตามองค์ประกอบ
หากต้องการลองใช้การติดตามการจัดองค์ประกอบใหม่ในโปรเจ็กต์ คุณต้องอัปเดตเป็น เวอร์ชันต่อไปนี้เป็นอย่างน้อย
- Android Studio Flamingo
- UI เขียน: 1.3.0
- คอมไพเลอร์ของ Compose: 1.3.0
อุปกรณ์หรือโปรแกรมจำลองที่คุณเรียกใช้การติดตามจะต้องอยู่ในระดับ API ขั้นต่ำด้วย 30.
นอกจากนี้ คุณต้องเพิ่มทรัพยากร Dependency ใหม่ใน Compose Runtime Tracing
implementation("androidx.compose.runtime:runtime-tracing:1.0.0-beta01")
เมื่อใช้ทรัพยากร Dependency นี้ เมื่อคุณใช้การติดตามระบบที่มีการจัดองค์ประกอบใหม่ คุณจะเห็นฟังก์ชันที่ประกอบกันได้โดยอัตโนมัติ
ติดตามระบบ
ในการติดตามระบบและดูการติดตามการจัดองค์ประกอบใหม่ในการใช้งานจริง ให้ทำตาม ขั้นตอนเหล่านี้:
เปิดเครื่องมือสร้างโปรไฟล์โดยทำดังนี้
คลิกไทม์ไลน์ของ CPU
ไปยัง UI ที่คุณต้องการติดตามในแอป แล้วเลือกระบบ Trace และ Record
ใช้แอปเพื่อจัดองค์ประกอบใหม่และหยุดบันทึก เมื่อการติดตามมี ได้รับการประมวลผลและปรากฏขึ้น ตอนนี้คุณควรเห็น Composable ใน การติดตามการจัดองค์ประกอบใหม่ คุณสามารถใช้แป้นพิมพ์และเมาส์เพื่อซูมและเลื่อนได้ รอบๆ การติดตาม หากคุณไม่คุ้นเคยกับการนำทางการติดตาม โปรดดูที่ เอกสารประกอบบันทึกการติดตาม
การดับเบิลคลิกที่ Composable ในแผนภูมิจะนำคุณไปยังซอร์สโค้ด
คุณสามารถดู Composable ในแผนภูมิ Flame พร้อมกับไฟล์และบรรทัดได้ด้วย หมายเลข:
ข้อควรระวัง
โอเวอร์เฮดของขนาด APK
แม้ว่าเรามีเป้าหมายที่จะลดค่าใช้จ่ายของฟีเจอร์ให้น้อยที่สุด แอป Compose ที่มาจากสตริงการติดตามจะมีขนาด APK เพิ่มขึ้น ที่ฝังอยู่ใน APK โดยคอมไพเลอร์ Compose การเพิ่มขนาดนี้อาจ ค่อนข้างเล็กถ้าแอปของคุณไม่ได้ใช้ฟีเจอร์ Compose มากหรือใหญ่กว่าสำหรับ Compose เต็มรูปแบบ แอป นอกจากนี้ สตริงการติดตามเหล่านี้จะไม่มีการสร้างความสับสนเพิ่มเติมเพื่อให้ปรากฏใน เครื่องมือการติดตามดังที่แสดงก่อนหน้า คอมไพเลอร์ของ Compose จะแทรกองค์ประกอบดังกล่าวลงใน ตั้งแต่เวอร์ชัน 1.3.0 เป็นต้นไป
คุณนำสตริงการติดตามออกในบิลด์เวอร์ชันที่ใช้งานจริงได้ด้วยการเพิ่ม กฎ Proguard ต่อไปนี้
-assumenosideeffects public class androidx.compose.runtime.ComposerKt {
boolean isTraceInProgress();
void traceEventStart(int,int,int,java.lang.String);
void traceEventStart(int,java.lang.String);
void traceEventEnd();
}
ฟังก์ชันเหล่านี้อาจมีการเปลี่ยนแปลงในอนาคต แต่จะมีการกล่าวถึงการเปลี่ยนแปลงใดๆ ใน เขียนบันทึกประจำรุ่น
โปรดทราบว่าการใช้งานไฟล์เหล่านั้นต่อแม้จะมีค่าใช้จ่ายเกี่ยวกับขนาด APK บ้าง ช่วยรับประกันว่า APK ที่มีการทำโปรไฟล์อยู่นั้นเป็น APK เดียวกับที่ผู้ใช้แอปเรียกใช้
ช่วงเวลาที่แม่นยำ
สำหรับการจัดโปรไฟล์ที่ถูกต้อง เช่นเดียวกับการทดสอบประสิทธิภาพใดๆ คุณต้องทำ
แอป profileable
และ non-debuggable
ตามแอปพลิเคชันในโปรไฟล์
บันทึกการติดตามจากเทอร์มินัล
คุณสามารถบันทึกการติดตามองค์ประกอบจากเทอร์มินัลได้ ในการดำเนินการนี้ คุณต้อง เพื่อทำตามขั้นตอนที่ Android Studio ทำให้คุณโดยอัตโนมัติ
เพิ่มทรัพยากร Dependency
ก่อนอื่นให้เพิ่มทรัพยากร Dependency เพิ่มเติมลงในแอป
implementation("androidx.tracing:tracing-perfetto:1.0.0")
implementation("androidx.tracing:tracing-perfetto-binary:1.0.0")
สร้างคำสั่งระเบียน
- สร้างคำสั่งระเบียนโดยใช้ใน Perfetto
เพิ่มส่วนแหล่งข้อมูล
track_event
ด้วยตนเองตามตัวอย่างต่อไปนี้adb shell perfetto \ -c - --txt \ -o /data/misc/perfetto-traces/trace \ <<EOF buffers: { size_kb: 63488 fill_policy: RING_BUFFER } buffers: { size_kb: 2048 fill_policy: RING_BUFFER } data_sources: { config { name: "track_event" } } duration_ms: 10000 flush_period_ms: 30000 incremental_state_config { clear_period_ms: 5000 } EOF
จับภาพการติดตาม
- เปิดแอปและเตรียมส่วนที่ต้องการติดตาม
เปิดใช้การติดตามในแอปด้วยการออกการออกอากาศ
# set app package variable, e.g. com.google.samples.apps.nowinandroid.debug # can be found through `adb shell ps -ef` or `adb shell cmd package list packages` package=<your app process> # issue a broadcast to enable tracing adb shell am broadcast \ -a androidx.tracing.perfetto.action.ENABLE_TRACING \ $package/androidx.tracing.perfetto.TracingReceiver
เริ่มใช้คำสั่งบันทึกที่คุณสร้างไว้ก่อนหน้านี้
เปิดการติดตาม
adb pull <location>
การติดตามจากอุปกรณ์ (ตำแหน่งที่ระบุไว้ใน คำสั่งระเบียน)เปิดใน Perfetto
จับภาพการติดตามด้วย Jetpack Macrobenchmark
คุณวัดประสิทธิภาพได้ด้วย Jetpack Macrobenchmark ซึ่งจะให้ผลลัพธ์เป็นการติดตาม หากต้องการเปิดใช้การติดตามองค์ประกอบด้วย ขั้นต่ำ คุณจะต้องทำดังนี้
เพิ่มทรัพยากร Dependency เพิ่มเติมต่อไปนี้ในโมดูลทดสอบ Macrobenchmark
implementation("androidx.tracing:tracing-perfetto:1.0.0") implementation("androidx.tracing:tracing-perfetto-binary:1.0.0")
เพิ่มอาร์กิวเมนต์การวัด
androidx.benchmark.fullTracing.enable=true
ก่อนที่จะใช้การเปรียบเทียบ ตรวจสอบการใช้เครื่องมือการเปรียบเทียบแบบมาโคร อาร์กิวเมนต์สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการเปรียบเทียบแบบมาโคร อาร์กิวเมนต์ของการวัดคุม
ความคิดเห็น
เรายินดีรับฟังความคิดเห็นจากคุณเกี่ยวกับฟีเจอร์นี้ รวมถึงข้อบกพร่องที่คุณพบเกี่ยวกับฟีเจอร์นี้ และคำขอทั้งหมดที่คุณมี คุณสามารถส่งความคิดเห็นถึงเราผ่านปัญหานี้ แท็กติดตาม