การติดตามการเรียบเรียง

การติดตามมักจะเป็นแหล่งข้อมูลที่ดีที่สุดเมื่อตรวจสอบปัญหาด้านประสิทธิภาพเป็นอันดับแรก ข้อมูลเหล่านี้ช่วยให้คุณสร้างสมมติฐานเกี่ยวกับปัญหาและจุดเริ่มต้นในการค้นหา

Android รองรับการติดตาม 2 ระดับ ได้แก่ System Tracing และ Method Tracing

เนื่องจากการติดตามระบบจะติดตามเฉพาะบริเวณที่ทําเครื่องหมายไว้สําหรับการติดตามโดยเฉพาะ จึงมีค่าใช้จ่ายเพิ่มเติมต่ำและไม่ส่งผลต่อประสิทธิภาพของแอปมากนัก การติดตามระบบเหมาะสําหรับดูระยะเวลาที่ส่วนต่างๆ ของโค้ดใช้เวลาในการทํางาน

การติดตามเมธอดจะติดตามการเรียกฟังก์ชันทุกรายการในแอป ซึ่งใช้ทรัพยากรมากและส่งผลต่อประสิทธิภาพของแอปอย่างมาก แต่จะให้ภาพรวมทั้งหมดเกี่ยวกับสิ่งที่เกิดขึ้น ฟังก์ชันใดที่เรียกใช้ และความถี่ในการเรียกใช้

โดยค่าเริ่มต้น การติดตามของระบบจะไม่รวมฟังก์ชันที่ประกอบกันได้แต่ละรายการ ซึ่งจะแสดงในการติดตามเมธอด

ขณะนี้เรากำลังทดสอบฟังก์ชันการติดตามระบบใหม่เพื่อแสดงฟังก์ชันที่คอมโพสิเบิลภายในการติดตามระบบ ซึ่งให้ความรบกวนผู้ใช้จากการติดตามระบบในระดับต่ำ โดยมีระดับการติดตามรายละเอียดในองค์ประกอบ

ตั้งค่าการติดตามองค์ประกอบ

หากต้องการลองใช้การติดตามการคอมโพสิชันใหม่ในโปรเจ็กต์ คุณต้องอัปเดตเป็นเวอร์ชันต่อไปนี้เป็นอย่างน้อย

  • Android Studio Flamingo
  • UI ของ Compose: 1.3.0
  • คอมไพเลอร์ของ Compose: 1.3.0

อุปกรณ์หรือโปรแกรมจำลองที่คุณใช้การติดตามต้องมี API ระดับ 30 ขึ้นไปด้วย

นอกจากนี้ คุณยังต้องเพิ่มการพึ่งพาใหม่ในเครื่องมือติดตามรันไทม์ของ Compose ดังนี้

implementation("androidx.compose.runtime:runtime-tracing:1.0.0-beta01")

เมื่อใช้การขึ้นต่อกันนี้ เมื่อคุณติดตามระบบที่มีการจัดองค์ประกอบใหม่ คุณจะเห็นฟังก์ชันที่ประกอบกันได้โดยอัตโนมัติ

ทำการติดตามระบบ

หากต้องการติดตามระบบและดูการติดตามการคอมโพสิชันใหม่ในการใช้งาน ให้ทําตามขั้นตอนต่อไปนี้

  1. เปิดเครื่องมือวิเคราะห์โปรไฟล์

    Android Studio - เริ่มการโปรไฟล์
    รูปที่ 2 Android Studio - เริ่มการโปรไฟล์
  2. คลิกไทม์ไลน์ CPU

    เครื่องมือวิเคราะห์ Android Studio - ไทม์ไลน์ CPU
    รูปที่ 3 เครื่องมือสร้างโปรไฟล์ Android Studio - ไทม์ไลน์ CPU
  3. ไปยัง UI ที่ต้องการติดตามในแอป แล้วเลือกระบบ ติดตามและบันทึก

    ตัวเลือกการติดตาม - การติดตามของระบบ
    รูปที่ 4 ตัวเลือกการติดตาม - การติดตามของระบบ
  4. ใช้แอปเพื่อทำให้เกิดการจัดองค์ประกอบใหม่และหยุดบันทึก เมื่อการติดตามได้รับการประมวลผลและปรากฏขึ้นแล้ว ตอนนี้คุณควรจะเห็น Composable ในการติดตามการจัดองค์ประกอบใหม่ คุณสามารถใช้แป้นพิมพ์และเมาส์เพื่อซูมและเลื่อนไปรอบๆ ร่องรอยได้ หากไม่คุ้นเคยกับการไปยังส่วนต่างๆ ของร่องรอย โปรดดูเอกสารประกอบบันทึกร่องรอย

    การติดตามของระบบ
    รูปที่ 5 การติดตามระบบ

    การดับเบิลคลิกคอมโพสิเบิลในแผนภูมิจะนำคุณไปยังซอร์สโค้ดของคอมโพสิเบิลนั้น

  5. นอกจากนี้ คุณยังดูคอมโพสิเบิลในแผนภูมิเปลวไฟพร้อมกับหมายเลขไฟล์และบรรทัดได้ด้วย

    แผนภูมิ Flame Chart
    ภาพที่ 6 แผนภูมิ Flame Chart

ข้อจำกัด

โอเวอร์เฮดของขนาด APK

แม้ว่าเราจะพยายามลดค่าใช้จ่ายเพิ่มเติมของฟีเจอร์นี้ให้เหลือน้อยที่สุดแล้ว แต่ขนาด APK ของแอป Compose จะเพิ่มขึ้นจากสตริงการติดตามที่คอมไพเลอร์ Compose ฝังไว้ใน APK การเพิ่มขนาดนี้อาจค่อนข้างต่ำหากแอปไม่ได้ใช้ 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();

}

ฟังก์ชันเหล่านี้อาจเปลี่ยนแปลงในอนาคต แต่เราจะกล่าวถึงการเปลี่ยนแปลงทั้งหมดในบันทึกประจำรุ่นของ Compose

โปรดทราบว่าการคงไฟล์เหล่านี้ไว้แม้จะมีค่าใช้จ่ายด้านขนาด APK บ้าง แต่ก็เป็นการรับประกันว่า APK ที่สร้างโปรไฟล์เป็น APK เดียวกับที่ผู้ใช้แอปเรียกใช้

การกำหนดเวลาที่แม่นยำ

คุณต้องทำให้แอป profileable และ non-debuggable เป็นไปตามแอปพลิเคชันที่โปรไฟล์ได้เพื่อให้การโปรไฟล์แม่นยำ เช่นเดียวกับการทดสอบประสิทธิภาพ

บันทึกการติดตามจากเทอร์มินัล

คุณสามารถบันทึกการติดตามองค์ประกอบจากเทอร์มินัลได้ โดยคุณต้องทำตามขั้นตอนที่ Android Studio มักจะทำให้คุณโดยอัตโนมัติ

เพิ่มการพึ่งพา

ก่อนอื่น ให้เพิ่มข้อกําหนดเพิ่มเติมลงในแอป

implementation("androidx.tracing:tracing-perfetto:1.0.0")
implementation("androidx.tracing:tracing-perfetto-binary:1.0.0")

สร้างคำสั่งระเบียน

  1. สร้างคำสั่งบันทึกโดยใช้ Perfetto
  2. เพิ่มส่วนแหล่งข้อมูล 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

บันทึกการติดตาม

  1. เปิดแอปและเตรียมส่วนที่ต้องการติดตาม
  2. เปิดใช้การติดตามในแอปด้วยการออกการออกอากาศ

    # 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
    
  3. เริ่มคำสั่งบันทึกที่คุณสร้างไว้ก่อนหน้านี้

เปิดการติดตาม

  1. adb pull <location>การติดตามจากอุปกรณ์ (ตำแหน่งที่ระบุในคำสั่งระเบียน)

  2. เปิดใน Perfetto

บันทึกการติดตามด้วย Jetpack Macrobenchmark

คุณสามารถวัดประสิทธิภาพด้วย Jetpack Macrobenchmark ซึ่งจะแสดงร่องรอยเป็นผลลัพธ์ หากต้องการเปิดใช้การติดตามการประพันธ์เพลงด้วยการทดสอบประสิทธิภาพแบบแมโคร คุณต้องทำดังนี้

  1. เพิ่มข้อกําหนดเพิ่มเติมเหล่านี้ลงในโมดูลการทดสอบ Macrobenchmark

    implementation("androidx.tracing:tracing-perfetto:1.0.0")
    implementation("androidx.tracing:tracing-perfetto-binary:1.0.0")
    
  2. เพิ่มandroidx.benchmark.fullTracing.enable=trueอาร์กิวเมนต์เครื่องมือวัดก่อนเรียกใช้การเปรียบเทียบ ดูข้อมูลเพิ่มเติมเกี่ยวกับอาร์กิวเมนต์เครื่องมือวัดประสิทธิภาพการทำงานแบบแมโคร

ความคิดเห็น

เรายินดีรับฟังความคิดเห็นของคุณเกี่ยวกับฟีเจอร์นี้ ข้อบกพร่องที่พบ และคำขอต่างๆ คุณส่งความคิดเห็นถึงเราได้ผ่านเครื่องมือติดตามปัญหา