เปรียบเทียบ
อัปเดตล่าสุด | รุ่นที่เสถียร | ตัวเลือกถอนการอ้างสิทธิ์ | รุ่นเบต้า | รุ่นอัลฟ่า |
---|---|---|---|---|
21 สิงหาคม 2024 | 1.3.0 | - | - | - |
การประกาศทรัพยากร Dependency
หากต้องการเพิ่มทรัพยากร Dependency ของการเปรียบเทียบ คุณต้องเพิ่มที่เก็บ Google Maven ไปยัง โปรเจ็กต์ของคุณ อ่านแล้ว ที่เก็บ Maven ของ Google สำหรับข้อมูลเพิ่มเติม
การเปรียบเทียบมาโคร
วิธีใช้การเปรียบเทียบมาโคร
ในโปรเจ็กต์ของคุณ ให้เพิ่มทรัพยากร Dependency ต่อไปนี้ลงในไฟล์ build.gradle
สำหรับ
ข้อมูลส่วนตัวของคุณ
โมดูลการเปรียบเทียบมาโคร:
ดึงดูด
dependencies { androidTestImplementation "androidx.benchmark:benchmark-macro-junit4:1.3.0" }
Kotlin
dependencies { androidTestImplementation("androidx.benchmark:benchmark-macro-junit4:1.3.0") }
การเปรียบเทียบย่อย
วิธีใช้ Microbenchmark
ในโปรเจ็กต์ของคุณ ให้เพิ่มทรัพยากร Dependency ต่อไปนี้ลงในไฟล์ build.gradle
สำหรับ
ข้อมูลส่วนตัวของคุณ
โมดูลการเปรียบเทียบย่อย:
ดึงดูด
dependencies { androidTestImplementation "androidx.benchmark:benchmark-junit4:1.3.0" } android { ... defaultConfig { ... testInstrumentationRunner "androidx.benchmark.junit4.AndroidBenchmarkRunner" } }
Kotlin
dependencies { androidTestImplementation("androidx.benchmark:benchmark-junit4:1.3.0") } android { ... defaultConfig { ... testInstrumentationRunner = "androidx.benchmark.junit4.AndroidBenchmarkRunner" } }
ไลบรารี Microbenchmark มีปลั๊กอิน Gradle สำหรับใช้กับโมดูล Microbenchmark อีกด้วย
ปลั๊กอินนี้ตั้งค่าเริ่มต้นการกำหนดค่าบิลด์สำหรับโมดูล ซึ่งตั้งค่า
สำเนาเอาต์พุตเปรียบเทียบไปยังโฮสต์
และให้
./gradlew lockClocks
งาน
หากต้องการใช้ปลั๊กอิน ให้ใส่บรรทัดต่อไปนี้ในบล็อก "ปลั๊กอิน" ในระดับบนสุด
build.gradle
ไฟล์:
ดึงดูด
plugins { id 'androidx.benchmark' version '1.3.0' apply false }
Kotlin
plugins { id("androidx.benchmark") version "1.3.0" apply false }
จากนั้นใช้ปลั๊กอินกับไฟล์ build.gradle
ของโมดูลการเปรียบเทียบ
ดึงดูด
plugins { id 'androidx.benchmark' }
Kotlin
plugins { id("androidx.benchmark") }
ความคิดเห็น
ความคิดเห็นของคุณช่วยปรับปรุง Jetpack ให้ดียิ่งขึ้น โปรดแจ้งให้เราทราบหากคุณพบปัญหาใหม่หรือมี ไอเดียในการปรับปรุงไลบรารีนี้ โปรดดูที่ ปัญหาที่มีอยู่ ในไลบรารีนี้ก่อนที่จะสร้างใหม่ คุณสามารถเพิ่มการโหวตให้กับปัญหาที่มีอยู่ได้โดย คลิกปุ่มดาว
ดูเอกสารประกอบเกี่ยวกับเครื่องมือติดตามปัญหา เพื่อดูข้อมูลเพิ่มเติม
เวอร์ชัน 1.3
เวอร์ชัน 1.3.0
21 สิงหาคม 2024
ปล่อย androidx.benchmark:benchmark-*:1.3.0
แล้ว เวอร์ชัน 1.3.0 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงของ Microbenchmark ตั้งแต่เวอร์ชัน 1.2.0
- การติดตามเมธอดจะเปิดอยู่โดยค่าเริ่มต้นในการเปรียบเทียบแบบไมโครเมื่อทำงานในอุปกรณ์ส่วนใหญ่
- การติดตามเมธอดจะทำงานเป็นเฟสแยกต่างหากหลังการวัด
- การติดตามเมธอดในบางแพลตฟอร์มและเวอร์ชัน ART จะส่งผลต่อระยะการวัดผลภายหลัง โดยในเวอร์ชันเหล่านี้ การติดตามเมธอดจะปิดอยู่โดยค่าเริ่มต้น และระบบพิมพ์คำเตือนไปยังเอาต์พุต Studio
- การเปรียบเทียบเทรดหลักและ ANR
- เพิ่ม
measureRepeatedOnMainThread
สำหรับการเปรียบเทียบเทรด UI (เช่น เนื้อหาที่โต้ตอบกับ UI ของ Compose/View) เพื่อหลีกเลี่ยง ANR ที่ทำงานอยู่เป็นเวลาหลายวินาที - ระบบจะข้ามการติดตามของเมธอดหากคาดว่าจะเรียกใช้เกินกำหนดเวลาการหลีกเลี่ยง ANR ตั้งค่า
androidx.benchmark.profiling.skipWhenDurationRisksAnr
เป็น "เท็จ" เพื่อปิดใช้ลักษณะการทำงานนี้ (ไม่แนะนำสำหรับการเรียกใช้ CI)
- เพิ่ม
- การทำให้มีขนาดเล็กลง
- กฎ Proguard แบบฝังเพื่อปรับปรุงการเปรียบเทียบแบบไมโครโดยเปิดใช้การลดขนาด
- การลดขนาด/R8 ในโมดูลไลบรารีต้องใช้ AGP 8.3 และจะเปิดใช้ผ่าน
android.buildTypes.release.androidTest.enableMinification
ในbuild.gradle
ได้ - เพิ่ม
BlackHole.consume()
API แบบทดลองเพื่อป้องกันการกำจัดโค้ดที่เสียหาย (If6812, b/286091643)
- เมตริก
- ฟีเจอร์ตัวนับเหตุการณ์ CPU ทดลอง (เมตริกจาก
perf_event_open
ซึ่งต้องใช้รูทบนแพลตฟอร์มส่วนใหญ่) เข้าถึงผ่านInstrumentationArgument
androidx.benchmark.cpuEventCounter.enable
(ตั้งค่าเป็นtrue
ได้) และandroidx.benchmark.cpuEventCounter.events
ได้ เช่น ถึง (Instructions,CpuCycles
) โปรแกรมจำลองการแก้ไขข้อบกพร่องของผู้ใช้ควรรองรับฟีเจอร์นี้ แต่ยังไม่ได้ทดสอบการรองรับใน
- ฟีเจอร์ตัวนับเหตุการณ์ CPU ทดลอง (เมตริกจาก
การเปลี่ยนแปลงของเกณฑ์มาตรฐาน MacRO ตั้งแต่เวอร์ชัน 1.2.0
- การยกเครื่องการติดตามเมธอดสำหรับการเปรียบเทียบมาโคร
- ตอนนี้การติดตามเมธอดจะมีขอบเขตอยู่ที่ระยะเวลาของ
measureBlock
และจะบันทึกได้หลายเซสชันหากกระบวนการเริ่มต้นขึ้นหลายครั้ง - ก่อนหน้านี้ การติดตามเมธอดจะใช้ได้กับการเปรียบเทียบ
StartupMode.COLD
เท่านั้น และจะไม่มีข้อมูลสำหรับmeasureBlocks
ที่ไม่ได้เริ่มกระบวนการเป้าหมายใหม่ - เมธอดที่แก้ไขแล้วจะล้างการติดตามในมาโครการเปรียบเทียบ ดังนั้นการติดตามเมธอดจึงควรได้รับการจับภาพอย่างสมบูรณ์และถูกต้องแม้ในอุปกรณ์ที่ทำงานช้า (I6349a, b/329904950)
- ตอนนี้การติดตามเมธอดจะมีขอบเขตอยู่ที่ระยะเวลาของ
- ถ่ายโอนโปรไฟล์ ART ให้ถูกต้องระหว่างการทำซ้ำ
warmUp
แต่ละรายการเมื่อกระบวนการไม่ทำงานเพื่อให้การวัดCompilationMode.Partial(warmup=N)
มีความถูกต้องมากขึ้น (I17923) - ข้อความความล้มเหลวในการออกอากาศ Drop Shader
- เพิ่มคำแนะนำการแก้ไขข้อบกพร่องในข้อความแจ้งความล้มเหลวในการออกอากาศของตัวปรับแสงเงา
- เพิ่มอาร์กิวเมนต์การใช้เครื่องมือ 2 รายการสำหรับการลบล้างลักษณะการทำงานของตัวปรับแสงเงาเพื่อแก้ปัญหาข้อขัดข้องเมื่อเปรียบเทียบแอปที่ไม่มี
ProfileInstaller
1.3androidx.benchmark.dropShaders.enable=true/false
: ใช้เพื่อข้ามการวางตัวปรับแสงเงาทั้งหมด (รวมถึงที่ทำในการเปิดตัวStartupMode.Cold
) โดยเฉพาะเมื่อเปรียบเทียบแอปที่ยังไม่ได้ใช้ profileinstaller 1.3androidx.benchmark.dropShaders.throwOnFailure=true/false
: ใช้สำหรับยอมรับความล้มเหลวเมื่อพยายามวางตัวปรับแสงเงา เช่น เมื่อเปรียบเทียบแอปที่ไม่มีตัวติดตั้ง Profile 1.3 (I4f573)
- เพิ่มตัวแปร
MacrobenchmarkRule#measureRepeated
ทดลองที่ใช้PerfettoConfig
ที่กำหนดเองสำหรับการบันทึกการติดตาม Perfetto ที่ปรับแต่งเต็มรูปแบบ โปรดทราบว่าการกำหนดค่าที่ไม่ถูกต้องอาจทำให้คลาสเมตริกในตัวล้มเหลว (Idfd3d, b/309841164, b/304038384) - ยกเลิกงาน Dexopt พื้นหลังก่อนเรียกใช้ Macrobenchmark เพื่อลดสัญญาณรบกวน (I989ed)
- ขณะนี้ Macrobenchmark จะรอ 1 วินาทีเพื่อให้แอปพลิเคชันเป้าหมายล้างโปรไฟล์ ART (ก่อนหน้านี้รอ 500 มิลลิวินาที) (I85a50, b/316082056)
- การยกเครื่อง TraceSectionMetric
- หมายเหตุ: การเปลี่ยนแปลง
TraceSectionMetric
รายการด้านล่างอาจส่งผลต่อเอาต์พุตในการใช้งาน CI และอาจทำให้เกิดความไม่ต่อเนื่องหรือการแยกวิเคราะห์ช่วงพักโฆษณา - ตอนนี้ "ผลรวม" เป็นค่าเริ่มต้น เนื่องจากการใช้เมตริกนี้ส่วนใหญ่มีไว้สำหรับเหตุการณ์ที่เกิดขึ้นซ้ำ และมักทิ้งข้อมูลในกรณีเหล่านี้
- เปลี่ยนเป็นปรับแต่งได้มากขึ้นพร้อมโหมดที่พร้อมใช้งานมากขึ้น
- ฝังชื่อโหมดไว้ในชื่อเอาต์พุตเมตริกแล้ว (ใน Studio และ JSON)
- ตอนนี้รองรับสไลซ์ที่สร้างขึ้นโดยใช้
Trace.{begin|end}AsyncSection
- หมายเหตุ: การเปลี่ยนแปลง
- เมตริก
- ปุ่มเปิด/ปิด - เพิ่ม
PowerMetric.deviceSupportsHighPrecisionTracking
,PowerMetric.deviceBatteryHasMinimumCharge()
และPowerMetric.deviceSupportsPowerEnergy()
แล้ว - เปลี่ยนชื่อ
Metric.getResult
เป็นgetMeasurements
เพื่อให้ตรงกับประเภทการแสดงผล - เพิ่มป้ายกำกับ log.w / ข้อยกเว้น ในการตรวจหาการเริ่มต้นล้มเหลวทั้งหมด ซึ่งการดำเนินการนี้ไม่ได้เปลี่ยนลักษณะการทำงานในปัจจุบัน (ดังนั้นจะมีข้อผิดพลาดบางอย่างเกิดขึ้น และบางครั้งก็ตรวจไม่พบการเริ่มต้นทำงานเอง) เพียงแต่ช่วยให้เข้าใจได้มากขึ้น โดยทั่วไปแล้วเมตริกที่
Log.w()
และรายงานไม่สำเร็จคือเมตริกที่ไม่มีเหตุการณ์ที่ไม่ใช่เฟรม ระบบจะมีข้อยกเว้นเมื่อตรวจพบการเริ่มต้น ยกเว้นข้อมูลเวลาของเฟรม (จากส่วน UI/RT) (Id240f, b/329145809) - เพิ่มการวัด
frameCount
ไปยังFrameTimingMetric
เพื่อช่วยในการค้นพบสถานการณ์ที่การวัดเปลี่ยนแปลงเนื่องจากจำนวนเฟรมที่สร้างมีการเปลี่ยนแปลง (เพิ่มภาพเคลื่อนไหวใหม่ แก้ไขปัญหาการใช้งานไม่ได้แล้ว) (I1e5aa) - ชี้แจงว่า
frameOverrunMs
เป็นเมตริกที่แนะนำให้ใช้สำหรับการติดตามเมื่อมีในเอกสาร พร้อมเหตุผล (I18749, b/329478323) - แก้ไขปัญหาที่เฟรมที่ไม่สิ้นสุดที่จุดเริ่มต้นและจุดสิ้นสุดของการติดตามจับคู่กันได้ ซึ่งจะรายงานเป็นเฟรมเดียวที่มีความยาวมากอย่างไม่ถูกต้อง (I39353, b/322232828)
- ปรับปรุงข้อผิดพลาด
FrameTimingMetric
เมื่อไม่มีการสร้างเฟรม และแสดงลิงก์ไปยังการติดตามเสมอเมื่อแยกวิเคราะห์เมตริกไม่สำเร็จเพื่อช่วยในการวินิจฉัยปัญหา (I956B9) - แก้ไขข้อขัดข้องใน
FrameTimingMetric
แล้ว แยกวิเคราะห์รหัสเฟรมไม่สำเร็จ โดยเฉพาะในอุปกรณ์ OEM บางรุ่น (Ia24bc, b/303823815, b/306235276) - ผ่อนคลายความเข้มงวดของการตรวจสอบใน
FrameMetrics
และเพิ่มรายละเอียดเพิ่มเติมให้กับข้อความแสดงข้อผิดพลาด (Iadede)
- ปุ่มเปิด/ปิด - เพิ่ม
การบันทึกโปรไฟล์พื้นฐาน / ปลั๊กอิน Gradle มีการเปลี่ยนแปลงตั้งแต่เวอร์ชัน 1.2.0
- เพิ่ม AGP เวอร์ชันสูงสุดที่แนะนำเป็น 9.0.0-alpha01
- ตรวจสอบว่างาน
mergeArtProfile
และmergeStartupProfile
รอการสร้างโปรไฟล์พื้นฐานเสมอ (I623d6, b/343086054) - การสร้างโปรไฟล์พื้นฐานให้สำเร็จจะแสดงข้อมูลสรุปสิ่งที่เปลี่ยนแปลง (I824c8, b/269484510)
- เพิ่ม DSL เพื่อปิดใช้คำเตือน (Ic4deb, b/331237001)
- แก้ไขเพื่อให้การเปรียบเทียบใช้โปรไฟล์พื้นฐานที่สร้างขึ้นเมื่อ
automaticGenerationDuringBuild
ปิดอยู่ (Ic144f, b/333024280) - แก้ไขการลบล้างพร็อพเพอร์ตี้ปลั๊กอิน Gradle
BaselineProfile
เพื่อเปิดใช้การสร้างและการเปรียบเทียบโปรไฟล์พื้นฐานเมื่อปรับแต่งnonMinified
หรือประเภทบิลด์การเปรียบเทียบ (Ib8f05, b/324837887) - แก้ไขการรวมโปรไฟล์ข้อมูลพื้นฐานของไลบรารีใน AAR ก่อนหน้า AGP 8.3.0-alpha15 (I1d2af, b/313992099)
- URL เอาต์พุตของโปรไฟล์เริ่มต้นและฐานที่คงที่เมื่อสิ้นสุดงานการสร้าง (I802e5, b/313976958)
การเปลี่ยนแปลงที่สำคัญอื่นๆ ตั้งแต่เวอร์ชัน 1.2.0
- การจับภาพการติดตาม
- ลดข้อผิดพลาด EXITCODE 2 เมื่อเริ่ม Perfetto จากข้อผิดพลาดเป็นคำเตือนที่บันทึกไว้
- เปิดใช้การติดตาม AIDL โดยค่าเริ่มต้นในการเปรียบเทียบ(ต้องใช้ API 28) (Ia0af2, b/341852305)
- เปิดใช้การติดตามแท็ก Porter โดยค่าเริ่มต้นในการเปรียบเทียบ การดำเนินการนี้จะบันทึกจุดติดตามเวคล็อก เป็นต้น (Icfe44, b/286551983)
- เพิ่มระยะหมดเวลาของการบันทึกการติดตามเพื่อหลีกเลี่ยงข้อขัดข้องเมื่อเริ่มการติดตามในอุปกรณ์ที่ช้ากว่า (I98841, b/329145808)
- เพิ่ม API สาธารณะของ
PerfettoTraceProcessor.Session.queryMetrics
API ที่มีตัวแปร JSON, textprotocol และไบนารีของ Proto (ไม่ได้เข้ารหัส) ซึ่งจะช่วยให้คุณค้นหาเมตริกในตัวของTraceProcessor
(I54d7f, b/304038382) ได้ - เปิดใช้การเริ่มบล็อกในระเบียนการติดตามของ Perfetto เพื่อลดความเสี่ยงที่ข้อมูลจะสูญหายเมื่อเริ่มการติดตาม รองรับเฉพาะใน API 33 ขึ้นไป (Ie6e41, b/310760059)
- เอาต์พุต JSON
- เพิ่มข้อมูลเพิ่มเติมในบริบทการเปรียบเทียบในเอาต์พุต JSON:
context.artMainlineVersion
- โมดูล Art Mainline เวอร์ชันจำนวนเต็ม (หากมีในอุปกรณ์ หากไม่มี-1
)context.build.id
- เท่ากับ android.os.Build.IDcontext.build.version.codename
- เท่ากับ android.os.Build.VERSION.CODENAMEcontext.build.version.abbreviatedCodename
- สอดคล้องกับตัวอักษรแรกของชื่อรหัสรุ่นทดลอง (รวมถึงในบิลด์ที่เปิดตัว) (Ie5020)
- เพิ่มรายการ
profilerOutput
ไปยังเอาต์พุต JSON เพื่อให้ใช้เครื่องมือเกี่ยวกับการติดตามการทำโปรไฟล์ได้ง่ายขึ้น (เช่น Perfetto, Methodการติดตาม) (I05ddd, b/332604449) - เพิ่มคำเตือนเมื่อมีการใช้ Android Test Orchestrator ในโมดูลเปรียบเทียบ เนื่องจากการดำเนินการนี้จะทำให้ระบบเขียนทับไฟล์ JSON เอาต์พุตต่อโมดูลซ้ำ (Ia1af6, b/286899049)
- ใส่เมื่อชื่อไฟล์ยาวเกิน 200 อักขระเพื่อหลีกเลี่ยงการขัดข้องที่ไม่ชัดเจนเมื่อเขียนหรือประมวลผลไฟล์ (I4a5ab)
- เพิ่มข้อมูลเพิ่มเติมในบริบทการเปรียบเทียบในเอาต์พุต JSON:
เวอร์ชัน 1.3.0-rc01
7 สิงหาคม 2024
ปล่อย androidx.benchmark:benchmark-*:1.3.0-rc01
แล้ว เวอร์ชัน 1.3.0-rc01 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไข
androidx.benchmark.cpuEventCounter
ที่สร้างค่าที่เสียหายสำหรับเหตุการณ์ที่ไม่ใช่วิธีการ (I7386a, b/286306579) - แก้ไข
resumeTiming
/runWithTimingDisabled
เพื่อให้สอดคล้องกับลำดับความสำคัญของเมตริก และลดผลกระทบของการหยุดชั่วคราว/กลับมาใช้เมตริกที่มีลำดับความสำคัญต่ำกว่าในผลลัพธ์ของเมตริกที่มีลำดับความสำคัญสูงกว่าได้อย่างมาก เช่น หากใช้ตัวนับประสิทธิภาพ CPU ผ่านอาร์กิวเมนต์การวัดคุมcpuEventCounter.enable
timeNs จะไม่ลดลงอย่างมีนัยสำคัญอีกต่อไปเมื่อมีการหยุดชั่วคราว/กลับมาทำงานอีกครั้ง (I39c2e, b/286306579, b/307445225) - ลดโอกาสของการสุ่มตัวอย่างสแต็กซึ่งเป็นสาเหตุให้
measureRepeatedOnMainThread
ตรวจพบการหมดเวลาฮาร์ดของเทรดหลักด้วยการย้าย Conversion การสุ่มตัวอย่างสแต็กออกจากเทรดหลัก (I487a8, b/342237318) - นำการระบุการเข้าถึง API ของแพลตฟอร์มใหม่ออกด้วยตนเอง เนื่องจากการดำเนินการนี้จะเกิดขึ้นโดยอัตโนมัติผ่านการสร้างแบบจำลอง API เมื่อใช้ R8 กับ AGP 7.3 ขึ้นไป (เช่น R8 เวอร์ชัน 3.3) และสำหรับบิลด์ทั้งหมดเมื่อใช้ AGP 8.1 ขึ้นไป (เช่น D8 เวอร์ชัน 8.1) เราขอแนะนำให้ไคลเอ็นต์ที่ไม่ได้ใช้ AGP อัปเดตเป็น D8 เวอร์ชัน 8.1 หรือใหม่กว่า ดูบทความนี้สำหรับรายละเอียดเพิ่มเติม (I9496c, b/345472586)
- เพิ่มการตรวจสอบเวอร์ชัน agp เพื่อส่งชื่อแพ็กเกจเป็นอาร์กิวเมนต์ instr ชื่อแพ็กเกจของแอปเป้าหมายที่อยู่ก่อนหน้า AGP 8.4.0 จะส่งไปยังแอปการวัดคุมผ่านอาร์กิวเมนต์การวัดไม่ได้ (0c72a3f)
เวอร์ชัน 1.3.0-beta02
10 กรกฎาคม 2024
ปล่อย androidx.benchmark:benchmark-*:1.3.0-beta02
แล้ว เวอร์ชัน 1.3.0-beta02 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- จัดการ EXITCODE
2
อย่างค่อยเป็นค่อยไปเมื่อเริ่ม Perfetto เพื่อบันทึกคำเตือน แต่ดำเนินการต่อ
เวอร์ชัน 1.3.0-beta01
12 มิถุนายน 2024
ปล่อย androidx.benchmark:benchmark-*:1.3.0-beta01
แล้ว เวอร์ชัน 1.3.0-beta01 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เปลี่ยนชื่อ
MethodTracing.affectsMeasurementOnThisDevice
เป็นAFFECTS_MEASUREMENT_ON_THIS_DEVICE
เพื่อความสอดคล้อง (I1bdfa) - เพิ่ม
BlackHole.consume()
API แบบทดลองเพื่อป้องกันการกำจัดโค้ดที่เสียหายในการเปรียบเทียบขนาดเล็ก (If6812, b/286091643) - ต่อจากนี้ไป Microการเปรียบเทียบจะประมวลผลอย่างถูกต้องเพื่อป้องกันไม่ให้การติดตามเมธอดรบกวนการวัด กรณีนี้จะเกิดขึ้นในอุปกรณ์บางเครื่องเมื่อมีการบังคับให้เปิดการติดตามเมธอด (ผ่านอาร์กิวเมนต์การวัดคุมหรือ
MicrobenchmarkConfig
) และในกรณีที่มีการพยายามวัดหลังจากการติดตามเมธอด อุปกรณ์ที่ได้รับผลกระทบกำลังใช้ API 26-30 หรือโมดูลเมนไลน์ ART บางเวอร์ชันที่ได้รับผลกระทบจากการรบกวนนี้ และตรวจจับได้ขณะรันไทม์ผ่านProfilerConfig.MethodTracing.affectsMeasurementOnThisDevice
(Iafb92, b/303660864)
แก้ไขข้อบกพร่อง
- เวอร์ชัน AGP สูงสุดที่มีการเพิ่มประสิทธิภาพคือ 9.0.0-alpha01 (I5bbb0)
- เพิ่มโหมดคอมไพล์ลงในบริบทการเปรียบเทียบ (If5612, b/325512900)
- เปิดใช้การติดตาม AIDL โดยค่าเริ่มต้น (ต้องใช้ API 28) (Ia0af2, b/341852305)
- เพิ่มข้อมูลเพิ่มเติมในบริบทการเปรียบเทียบในเอาต์พุต JSON:
context.artMainlineVersion
- โมดูล Art Mainline เวอร์ชันจำนวนเต็ม (หากมีในอุปกรณ์ มิฉะนั้นจะแสดง -1)context.build.id
- เท่ากับandroid.os.Build.ID
context.build.version.codename
- เท่ากับandroid.os.Build.VERSION.CODENAME
context.build.version.abbreviatedCodename
- สอดคล้องกับตัวอักษรแรกของชื่อรหัสรุ่นทดลอง (แม้ในรุ่นที่เผยแพร่) (Ie5020)
- แก้ไข
StackSampling
เพื่อแสดงตามandroidx.benchmark.profiling.sampleDurationSeconds
(Ib1d53) - เปลี่ยนมาโคร->ทรัพยากร Dependency ทั่วไปเป็น
api()
เพื่อให้ใช้งานได้ง่ายขึ้น เช่นPerfettoTrace
และPerfettoConfig
(Icdae3, b/341851833) - ตรวจสอบว่างาน
mergeArtProfile
และmergeStartupProfile
รอการสร้างโปรไฟล์พื้นฐานเสมอ (I623d6, b/343086054) - พิจารณาสถานะการเปิดใช้ตัวแปรเมื่อตัดสินใจว่าจะเปิดใช้ตัวแปรหรือไม่ (I5d19e, b/343249144)
- เพิ่มระยะหมดเวลาเริ่มต้นสําหรับตัวประมวลผลการติดตาม Perfetto (I87e8c, b/329145808)
เวอร์ชัน 1.3.0-alpha05
14 พฤษภาคม 2024
ปล่อย androidx.benchmark:benchmark-*:1.3.0-alpha05
แล้ว เวอร์ชัน 1.3.0-alpha05 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- จะมีข้อยกเว้นที่ชัดเจนขึ้นเมื่อเมตริก networkbench แสดงผลค่าเป็น 0 สำหรับการทำซ้ำทั้งหมด (Iab58f, b/314931695)
- กฎวิธีแก้ปัญหาเพิ่มเติมที่เพิ่มลงในกฎ Microbench Proguard รวมถึงการรองรับกฎ Listener และคำเตือน / ข้อผิดพลาดอื่นๆ ที่พบ (I14d8f, b/329126308, b/339085669)
- การติดตามเมธอดจะทำงานเป็นเฟสแยกต่างหากในระหว่าง Macrobenchmark และจะไม่มีผลกับการวัดอีกต่อไป (If9a50, b/285912360, b/336588271)
- เพิ่มคำแนะนำการแก้ไขข้อบกพร่องพิเศษในการวางข้อความแสดงข้อผิดพลาดในการออกอากาศของตัวปรับแสงเงา (I5efa6, b/325502725)
เวอร์ชัน 1.3.0-alpha04
1 พฤษภาคม 2024
ปล่อย androidx.benchmark:benchmark-*:1.3.0-alpha04
แล้ว เวอร์ชัน 1.3.0-alpha04 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เพิ่มตัวแปร
MacrobenchmarkRule#measureRepeated
ทดลองที่ใช้PerfettoConfig
ที่กำหนดเองสำหรับการบันทึกการติดตาม Perfetto ที่ปรับแต่งเต็มรูปแบบ โปรดทราบว่าการกำหนดค่าที่ไม่ถูกต้องอาจทำให้คลาสเมตริกในตัวล้มเหลว (Idfd3d, b/309841164, b/304038384) - เปลี่ยนชื่อ
PowerMetric.deviceSupportsPowerEnergy
เป็นPowerMetric.deviceSupportsHighPrecisionTracking
เพื่อความชัดเจน (I5b82f) - เพิ่ม
PowerMetric.deviceBatteryHasMinimumCharge()
และPowerMetric.deviceSupportsPowerEnergy()
เพื่อให้เปลี่ยนหรือข้ามการเปรียบเทียบตามความสามารถในการวัดพลังงานของอุปกรณ์ได้ (I6a591, b/322121218)
แก้ไขข้อบกพร่อง
- เพิ่มการเปรียบเทียบกับโปรไฟล์พื้นฐานก่อนหน้า (I824c8, b/269484510)
- เพิ่ม DSL เพื่อปิดใช้คำเตือน (Ic4deb, b/331237001)
- เปลี่ยนข้อยกเว้นในบันทึกข้อมูลเมื่อปิดใช้ตัวแปรการเปรียบเทียบ (I8a517, b/332772491)
- ทำให้การบันทึกการติดตามเมธอดสำหรับการเปรียบเทียบแบบมาโครทำได้ง่ายขึ้นโดยจำกัดขอบเขตอยู่ที่ระยะเวลาของ
measureBlock()
จริง ก่อนหน้านี้การสมัครใช้บริการเริ่มต้นตั้งแต่การเปิดตัวกระบวนการเป้าหมายและรองรับ Cold Start เท่านั้น (Iee85a, b/300651094) - หลีกเลี่ยงข้อขัดข้องเมื่อตัวประมวลผลการติดตาม Perfetto เริ่มทำงานช้า (I98841, b/329145808)
เวอร์ชัน 1.3.0-alpha03
17 เมษายน 2024
ปล่อย androidx.benchmark:benchmark-*:1.3.0-alpha03
แล้ว เวอร์ชัน 1.3.0-alpha03 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เพิ่ม API สาธารณะของ
PerfettoTraceProcessor.Session.queryMetrics
API ที่มีตัวแปร JSON, textprotocol และไบนารีของ Proto (ไม่ได้เข้ารหัส) ซึ่งช่วยให้คุณค้นหาเมตริกที่อยู่ใน TraceProcessor (I54d7f, b/304038382) - เพิ่ม
profilerOutput
ไปยังเอาต์พุต JSON เพื่อให้ใช้เครื่องมือเกี่ยวกับการติดตามการทำโปรไฟล์ได้ง่ายขึ้น (เช่น Perfetto, Method การย้ายข้อมูล) (I05ddd, b/332604449) - เพิ่มแท็ก Power ในการเปรียบเทียบ Perfetto Config การดำเนินการนี้จะบันทึกจุดติดตามเวคล็อก เป็นต้น (Icfe44, b/286551983)
- อาร์กิวเมนต์
androidx.benchmark.profiling.skipWhenDurationRisksAnr
ที่เพิ่มแล้วเป็น "เท็จ" ได้เพื่อหลีกเลี่ยงการข้ามการติดตามเมธอดเมื่อระยะเวลาที่คาดไว้อาจทำให้เกิด ANR ซึ่งแนะนำให้หลีกเลี่ยงในการเรียกใช้ CI - เพิ่มอาร์กิวเมนต์
androidx.benchmark.profiling.perfCompare.enable
อินสแตนซ์ทดสอบ โดยตั้งค่าเป็น "จริง" เพื่อเรียกใช้ช่วงเวลาการเปรียบเทียบระหว่างช่วงการวัดและเฟสการทำโปรไฟล์ มีประโยชน์ เช่น ประเมินค่าใช้จ่ายในการติดตาม Method (I61fb4, b/329146942)
การเปลี่ยนแปลง API
- เปลี่ยน
TraceSectionMetric.Mode
เป็นคลาสที่ปิดผนึกเพื่อให้ขยายในอนาคตได้โดยไม่ทำให้รายละเอียดครบถ้วนเมื่อคำสั่ง (I71f7b) - เพิ่ม
TraceSectionMetric.Mode.Average
และ.Count
และจัดเรียงอาร์กิวเมนต์ใหม่เพื่อให้อาร์กิวเมนต์ (โหมด) ที่พบมากกว่าอยู่ในรายการอาร์กิวเมนต์ ทำให้ไม่จำเป็นต้องระบุชื่อพารามิเตอร์ (Ibf0b0, b/315830077, b/322167531) - เปลี่ยนชื่อ
Metric.getResult
เป็นgetMeasurements
ให้ตรงกับประเภทผลลัพธ์ (I42595)
แก้ไขข้อบกพร่อง
- แก้ไขเพื่อให้การเปรียบเทียบใช้โปรไฟล์พื้นฐานที่สร้างขึ้นเมื่อ
automaticGenerationDuringBuild
ปิดอยู่ (Ic144f, b/333024280) - แก้ไขการลบล้างพร็อพเพอร์ตี้ปลั๊กอิน Gradle
BaselineProfile
เพื่อเปิดใช้การสร้างและการเปรียบเทียบโปรไฟล์พื้นฐานเมื่อปรับแต่งnonMinified
หรือประเภทบิลด์การเปรียบเทียบ (Ib8f05, b/324837887) - เมธอดที่แก้ไขแล้วจะล้างการติดตามในมาโครการเปรียบเทียบ ดังนั้นการติดตามเมธอดจึงควรได้รับการจับภาพอย่างสมบูรณ์และถูกต้องแม้ในอุปกรณ์ที่ทำงานช้า (I6349a, b/329904950)
- เปิดใช้การเริ่มบล็อกในระเบียนการติดตามของ Perfetto เพื่อลดความเสี่ยงที่ข้อมูลจะสูญหายเมื่อเริ่มการติดตาม รองรับเฉพาะใน API 33 ขึ้นไป (Ie6e41, b/310760059)
- เพิ่มคำเตือนเมื่อมีการใช้ Android Test Orchestrator ในโมดูลเปรียบเทียบ เนื่องจากการดำเนินการนี้จะทำให้ระบบเขียนทับไฟล์ JSON เอาต์พุตต่อโมดูลซ้ำ (Ia1af6, b/286899049)
- บังคับ ',' (คอมมา) เครื่องหมายคั่นหลักพันเพื่อความสอดคล้องในเอาต์พุต Studio โดยละเว้นภาษาของอุปกรณ์ (I3e921, b/313496656)
TraceSectionMetric
รองรับสไลซ์ที่สร้างขึ้นโดยใช้Trace.{begin|end}AsyncSection
แล้ว (I91b32, b/300434906)- เพิ่มป้ายกำกับ log.w / ข้อยกเว้น ในการตรวจหาการเริ่มต้นล้มเหลวทั้งหมด ซึ่งการดำเนินการนี้ไม่ได้เปลี่ยนลักษณะการทำงานในปัจจุบัน (ดังนั้นจะมีข้อผิดพลาดบางอย่างเกิดขึ้น และบางครั้งก็ตรวจไม่พบการเริ่มต้นทำงานเอง) เพียงแต่ช่วยให้เข้าใจได้มากขึ้น โดยทั่วไปแล้วเมตริกที่
Log.w()
และรายงานไม่สำเร็จคือเมตริกที่ไม่มีเหตุการณ์ที่ไม่ใช่เฟรม ระบบจะมีข้อยกเว้นเมื่อตรวจพบการเริ่มต้น ยกเว้นข้อมูลเวลาของเฟรม (จากส่วน UI/RT) (Id240f, b/329145809) - ยกเลิกงาน Dexopt พื้นหลังก่อนเรียกใช้ Macrobenchmark เพื่อลดสัญญาณรบกวน (I989ed)
- เพิ่มการวัด
frameCount
ไปยังFrameTimingMetric
เพื่อช่วยในการค้นพบสถานการณ์ที่การวัดเปลี่ยนแปลงเนื่องจากจำนวนเฟรมที่สร้างมีการเปลี่ยนแปลง (เพิ่มภาพเคลื่อนไหวใหม่ แก้ไขปัญหาการใช้งานไม่ได้แล้ว) (I1e5aa) - ชี้แจงว่า
frameOverrunMs
เป็นเมตริกที่แนะนำให้ใช้สำหรับการติดตามเมื่อมีในเอกสาร พร้อมเหตุผล (I18749, b/329478323)
เวอร์ชัน 1.3.0-alpha02
20 มีนาคม 2024
ปล่อย androidx.benchmark:benchmark-*:1.3.0-alpha02
แล้ว เวอร์ชัน 1.3.0-alpha02 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
การรองรับ R8 แบบทดลองใน Microbench ผ่านกฎ Proguard แบบฝัง โปรดทราบว่าการรองรับนี้อยู่ในขั้นทดลองและต้องใช้ AGP 8.3 สำหรับการลดขนาดการทดสอบโมดูลไลบรารี ใช้รายการต่อไปนี้เพื่อเปิดใช้การลด/เพิ่มประสิทธิภาพ R8 ใน
build.gradle
ของโมดูลการเปรียบเทียบ ซึ่งควรทําให้ประสิทธิภาพเพิ่มขึ้นอย่างมากโดยขึ้นอยู่กับภาระงาน (I738a3, b/184378053)android { buildTypes.release.androidTest.enableMinification = true }
แก้ไขข้อบกพร่อง
- แก้ไขคำเตือน Method ของการติดตามให้อยู่ในบรรทัดแยกต่างหากจากเอาต์พุต Microbench (I0455c, b/328308833)
เวอร์ชัน 1.3.0-alpha01
21 กุมภาพันธ์ 2024
ปล่อย androidx.benchmark:benchmark-*:1.3.0-alpha01
แล้ว เวอร์ชัน 1.3.0-alpha01 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เปลี่ยนชื่อพารามิเตอร์บูลีน
MicrobenchmarkConfig
รายการเพื่อหลีกเลี่ยงคำที่ไม่จำเป็น "ควร" (Ia8f00, b/303387299) - เพิ่ม
BenchmarkRule.measureRepeatedOnMainThread
เพื่อให้การเปรียบเทียบเทรดหลัก (เช่น รายการที่แตะ UI มุมมองหรือ Compose) สามารถหลีกเลี่ยงการทริกเกอร์ ANR ได้ โดยเฉพาะอย่างยิ่งในระหว่างชุดโปรแกรมขนาดใหญ่ใน CI (I5c86d) - เพิ่ม
FrameTimingGfxInfoMetric
ซึ่งเป็นการใช้งานทางเลือกทดลองของFrameTimingMetric
ที่มีการวัดผลมาจากแพลตฟอร์มโดยตรง แทนที่จะดึงข้อมูลมาจากการติดตาม Perfetto (I457cb, b/322232828) - เพิ่มความสามารถในการถ่ายโอนโปรไฟล์ ART ในระหว่างการทำซ้ำ
warmUp
แต่ละครั้ง (I17923) - การเปลี่ยนแปลงหลายอย่างใน
TraceSectionMetric
API ได้แก่- เพิ่ม
Mode.Min
และMode.Max
- เพิ่มอาร์กิวเมนต์ป้ายกำกับเพื่อลบล้างชื่อส่วนเป็นป้ายกำกับเมตริก
- เพิ่มชื่อโหมดลงในเอาต์พุตเพื่ออธิบายความหมายของเมตริกแล้ว
- เปลี่ยนค่าเริ่มต้นเป็นผลรวม เนื่องจากการใช้เมตริกนี้ส่วนใหญ่มีไว้สำหรับเหตุการณ์ที่เกิดซ้ำ โปรดระมัดระวังการเปลี่ยนแปลงของการใช้ CI เนื่องจากอาจทำให้เกิดความไม่ต่อเนื่อง หรือหยุดแยกวิเคราะห์ (Ic1e82, b/301892382, b/301955938)
- เพิ่ม
แก้ไขข้อบกพร่อง
- ปรับปรุงข้อความแสดงข้อผิดพลาดในปลั๊กอิน Gradle ของโปรไฟล์พื้นฐานเมื่อไม่มีอุปกรณ์ที่มีการจัดการที่ระบุ (Idea2b, b/313803289)
- แก้ไขการรวมโปรไฟล์พื้นฐานของไลบรารีใน AAR ก่อนหน้า AGP 8.3.0-alpha15 (I1d2af, b/313992099)
- URL เอาต์พุตของโปรไฟล์เริ่มต้นและคงที่เมื่อสิ้นสุดงานการสร้าง (I802e5, b/313976958)
- ปรับระยะหมดเวลาของแหล่งข้อมูลเพื่อพยายามแก้ไข
java.lang.IllegalStateException: Failed to stop [ProcessPid(processName=perfetto, pid=...)]
(I8dc7d, b/323601788) - เพิ่มอาร์กิวเมนต์การใช้เครื่องมือ 2 รายการสำหรับการลบล้างลักษณะการทำงานของตัวปรับแสงเงาเพื่อแก้ปัญหาข้อขัดข้องเมื่อเปรียบเทียบแอปที่ไม่มี
ProfileInstaller
1.3androidx.benchmark.dropShaders.enable=true/false
: ใช้เพื่อข้ามการวางตัวปรับแสงเงาทั้งหมด (รวมถึงที่ทำในการเปิดตัวStartupMode.Cold
) โดยเฉพาะเมื่อเปรียบเทียบแอปที่ยังไม่ได้ใช้ profileinstaller 1.3androidx.benchmark.dropShaders.throwOnFailure=true/false
: ใช้สำหรับยอมรับความล้มเหลวเมื่อพยายามวางตัวปรับแสงเงา เช่น เมื่อเปรียบเทียบแอปที่ไม่มีตัวติดตั้ง Profile 1.3 (I4f573)
- ข้ามการติดตามเมธอดในเธรด UI เมื่อคาดว่าจะใช้เวลานานกว่า 2-3 วินาที และติดตามเมธอดการล้างข้อมูลเมื่อทำการส่ง (I6e768)
- ใส่เมื่อชื่อไฟล์ยาวเกิน 200 อักขระเพื่อหลีกเลี่ยงการขัดข้องที่ไม่ชัดเจนเมื่อเขียนหรือประมวลผลไฟล์ (I4a5ab)
- แก้ไขปัญหาที่เฟรมที่ไม่สิ้นสุดที่จุดเริ่มต้นและจุดสิ้นสุดของการติดตามจับคู่กันได้ ซึ่งจะรายงานเป็นเฟรมเดียวที่มีความยาวมากอย่างไม่ถูกต้อง (I39353, b/322232828)
- ใช้
--skip verification
ใน API 30 ขึ้นไปเมื่อติดตั้งแพ็กเกจใน API 30-33 อีกครั้งเพื่อล้างโปรไฟล์ ART ในบิลด์ผู้ใช้ ซึ่งจะช่วยข้ามคำเตือนของ Play Protect ที่ทำให้การทำงานล้มเหลวในอุปกรณ์บางประเภท (Ic9e36) - ใช้
am force-stop
เพื่อปิดแอปเมื่อไม่ใช่แอปของระบบ เช่น UI หรือ Launcher ของระบบ (I5e028) - การเปรียบเทียบมาโครจะรอ
1 second
เพื่อให้แอปพลิเคชันเป้าหมายล้างข้อมูลโปรไฟล์ ART (ซึ่งก่อนหน้านี้ต้องรอ500 ms
) (I85a50, b/316082056) - ปรับปรุงข้อผิดพลาด
FrameTimingMetric
เมื่อไม่มีการสร้างเฟรม และแสดงลิงก์ไปยังการติดตามเสมอเมื่อแยกวิเคราะห์เมตริกไม่สำเร็จเพื่อช่วยในการวินิจฉัยปัญหา (I956B9) - แก้ไขข้อขัดข้องใน
FrameTimingMetric
แล้ว แยกวิเคราะห์รหัสเฟรมไม่สำเร็จ โดยเฉพาะในอุปกรณ์ OEM บางรุ่น (Ia24bc, b/303823815, b/306235276) - ผ่อนคลายความเข้มงวดของการตรวจสอบใน
FrameMetrics
และเพิ่มรายละเอียดเพิ่มเติมให้กับข้อความแสดงข้อผิดพลาด (Iadede)
เวอร์ชัน 1.2
เวอร์ชัน 1.2.4
17 เมษายน 2024
ปล่อย androidx.benchmark:benchmark-*:1.2.4
แล้ว เวอร์ชัน 1.2.4 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไข srcset ของโปรไฟล์ฐานที่ไม่ได้ตั้งค่าในตัวแปรการเปรียบเทียบ รวมถึงแก้ไข
automaticGenerationDuringBuild
ในไลบรารีที่ทำให้เกิดการขึ้นต่อกันแบบเวียนกลับ (I28ab7, b/333024280) - ใช้
am force-stop
เพื่อปิดแอปเมื่อไม่ใช่แอปของระบบ เช่น UI หรือ Launcher ของระบบ วิธีนี้ช่วยแก้ไขStartupMode.COLD
ที่ขัดข้องจาก "Package $package ต้องไม่ทำงานก่อน Cold Start!" เนื่องจากกระบวนการยุติการทำงานไม่สำเร็จโดยสมบูรณ์ (I5e028)
เวอร์ชัน 1.2.3
24 มกราคม 2024
ปล่อย androidx.benchmark:benchmark-*:1.2.3
แล้ว เวอร์ชัน 1.2.3 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- นำข้อยกเว้นออกจากปลั๊กอิน Baseline Profile Gradle เมื่อ AGP เป็นเวอร์ชัน 8.3.0 ขึ้นไป
- แก้ไขการรวมโปรไฟล์ข้อมูลพื้นฐานของไลบรารีใน AAR ก่อนหน้า AGP 8.3.0-alpha15
เวอร์ชัน 1.2.2
1 ธันวาคม 2023
ปล่อย androidx.benchmark:benchmark-*:1.2.2
แล้ว เวอร์ชัน 1.2.2 มีคอมมิตเหล่านี้
โปรไฟล์พื้นฐาน
- บันทึกการดำเนินการจะแสดงเส้นทางไฟล์เอาต์พุตของโปรไฟล์พื้นฐานเป็น URI ของไฟล์ในเครื่อง (aosp/2843918, aosp/2853665, b/313976958)
เวอร์ชัน 1.2.1
15 พฤศจิกายน 2023
ปล่อย androidx.benchmark:benchmark-*:1.2.1
แล้ว เวอร์ชัน 1.2.1 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ปรับปรุงข้อความแสดงข้อผิดพลาดเมื่อผู้ใช้ปิดใช้ตัวแปรการทดสอบ (b/307478189)
- เพิ่มพร็อพเพอร์ตี้เพื่อรองรับการผสานรวมการเรียกใช้การทดสอบ AS (b/309805233), (b/309116324)
เวอร์ชัน 1.2.0
18 ตุลาคม 2023
ปล่อย androidx.benchmark:benchmark-*:1.2.0
แล้ว เวอร์ชัน 1.2.0 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 1.1.0
โปรไฟล์พื้นฐาน
- ปลั๊กอิน Baseline Profile Gradle ใหม่จะทำให้การบันทึกข้อมูลโดยอัตโนมัติและรวมโปรไฟล์พื้นฐานในเวิร์กโฟลว์การทดสอบและบิลด์ของคุณด้วย
- ตอนนี้
BaselineProfileRule.collect
มีความเสถียร ซึ่งเป็นเวอร์ชันที่เรียบง่ายและไม่ซับซ้อนของBaselineProfileRule.collectBaselineProfile
API ทดลองก่อนหน้า- เพียงระบุ
packageName
และขับเคลื่อนแอป
- เพียงระบุ
- สำหรับไลบรารีที่สร้างโปรไฟล์พื้นฐาน ตอนนี้คุณสามารถกรองกฎที่สร้างในโค้ด (อาร์กิวเมนต์
BaselineProfileRule.collect
) หรือกรองได้ง่ายๆ ในปลั๊กอิน Gradle - การแก้ไข
- คอลเล็กชันโปรไฟล์พื้นฐานแบบคงที่ใน Android U+ (Id1392, b/277645214)
การเปรียบเทียบมาโคร
- การรวบรวม
- ขณะนี้ Macrobenchmark รีเซ็ตสถานะการรวบรวมอย่างถูกต้องสำหรับคอมไพล์แต่ละรายการได้แล้ว โดยต้องติดตั้ง APK ก่อน Android 14 ใหม่ ดังนั้นจึงขอแนะนำให้ทำการเปรียบเทียบใน Android 14 ขึ้นไปหากต้องการคงสถานะเดิม (เช่น การเข้าสู่ระบบของผู้ใช้) ในสิ่งที่วัดอยู่
- นอกจากนี้ คุณยังหลีกเลี่ยงปัญหานี้ได้ด้วยการควบคุมการคอมไพล์แอปแยกต่างหาก และข้ามการคอมไพล์ด้วย
CompilationMode.Ignore()
หรืออาร์กิวเมนต์การวัด
อาร์กิวเมนต์สำหรับการใช้เครื่องมือ
- รองรับอาร์กิวเมนต์การวัดคุม
androidx.benchmark.dryRunMode.enable
(มีอยู่แล้วใน Microbenchmark) เพื่อการตรวจสอบที่รวดเร็วขึ้น (เช่น เมื่อสร้างการเปรียบเทียบหรือในการส่งล่วงหน้า) - การสนับสนุนสำหรับ
androidx.benchmark.profiling.mode=StackSampling
และMethodTracing
- เพิ่ม
androidx.benchmark.enabledRules
เพื่ออนุญาตการทดสอบโปรไฟล์พื้นฐานเทียบกับการทดสอบกฎการเปรียบเทียบมาโครในการกรองรันไทม์ - เพิ่มอาร์กิวเมนต์
androidx.benchmark.perfettoSdkTracing.enable
เพื่อเปิดใช้การติดตามด้วย tracing-perfetto เช่น การเขียนการติดตามการจัดองค์ประกอบใหม่ โปรดทราบว่าเมื่อใช้กับStartupMode.COLD
การกำหนดเวลาจะได้รับผลกระทบอย่างมากเมื่อมีการโหลดไลบรารีการติดตามและเปิดใช้ในระหว่างการเริ่มต้นแอป
- รองรับอาร์กิวเมนต์การวัดคุม
ข้อกำหนด
- ตอนนี้การเปรียบเทียบมาโครต้องใช้
ProfileInstaller
1.3.0 ขึ้นไปในแอปเป้าหมายเพื่อเปิดใช้การบันทึก / รีเซ็ตโปรไฟล์ และการล้างแคชตัวปรับแสงเงา
- ตอนนี้การเปรียบเทียบมาโครต้องใช้
Metric API ใหม่รุ่นทดลอง
- เพิ่ม
TraceSectionMetric
เวอร์ชันทดลองซึ่งช่วยให้คุณแยกช่วงเวลาง่ายๆ จากบล็อกtrace("") {}
ในแอป หรือ TraceMetric เพื่อใช้ประโยชน์จากความสามารถในการค้นหาของ PerfettoTraceProcessor
ได้อย่างเต็มที่ - เพิ่ม
PowerMetric
เวอร์ชันทดลองเพื่อบันทึกข้อมูลการใช้พลังงานแล้ว - เพิ่ม
MemoryCountersMetric
แบบทดลองเพื่อนับข้อผิดพลาดของหน้าแล้ว - เพิ่ม API แบบทดลอง
PerfettoTraceProcessor
ซึ่งใช้ภายในเพื่อดึงเมตริกจากการติดตามระบบ (หรือที่เรียกว่าการติดตาม Perfetto)
- เพิ่ม
การแก้ไข
- แก้ไขข้อขัดข้องเมื่อติดตั้งหรือดึงข้อมูลโปรไฟล์จากแอปที่ติดตั้งจาก APK หลายรายการ (เช่น จาก App Bundle)
- แก้ไข
FrameTimingMetric
การละเว้นเฟรมที่มีรหัสเฟรมไม่สอดคล้องกัน (โดยทั่วไปคือเฟรมระหว่าง Ripples ใน API 31+) (I747d2, b/279088460) - แก้ไขข้อผิดพลาดการแยกวิเคราะห์บนการติดตาม > 64MB (Ief831, b/269949822)
- อธิบายข้อผิดพลาดเมื่ออิมเมจระบบปฏิบัติการของอุปกรณ์ (โดยเฉพาะโปรแกรมจำลอง) ไม่ได้กำหนดค่าสำหรับการติดตามหรือการคอมไพล์อย่างถูกต้อง
- ข้ามการตรวจสอบระดับแบตเตอรี่สำหรับอุปกรณ์ที่ไม่มีแบตเตอรี่ (ไมโครและมาโคร)
- ปรับปรุงเอาต์พุตไฟล์ให้มีข้อผิดพลาดที่ชัดเจนมากขึ้นสำหรับไดเรกทอรีเอาต์พุตที่ไม่ถูกต้อง และค่าเริ่มต้นที่ปลอดภัยขึ้น
- ปรับปรุงความเสถียรของ
StartupMode.COLD
โดยการทิ้งแคชตัวปรับแสงเงาอย่างสม่ำเสมอ (แสดงผ่านMacrobenchmarkScope.dropShaderCache
) - ข้อกำหนดสำรอง Leanback ที่แก้ไขแล้วสำหรับ
startActivityAndWait
การเปรียบเทียบย่อย
- ฟีเจอร์
- ระบบย้ายการทำโปรไฟล์ไปยังระยะแยกต่างหากตามหลังเมตริกอื่นๆ ดังนั้น การทดสอบ 1 ครั้งสามารถแสดงทั้งเวลาที่ถูกต้องและผลการทำโปรไฟล์
- API การทดสอบ
- เพิ่ม
MicrobenchmarkConfig
API เวอร์ชันทดลองสำหรับการกำหนดเมตริกที่กำหนดเอง รวมถึงการกำหนดค่าการติดตามและการสร้างโปรไฟล์ สามารถใช้เพื่อบันทึกการติดตามเมธอดหรือบันทึกจุดติดตาม (แต่โปรดระวังโอเวอร์เฮดการติดตาม) - เพิ่ม API ทดลองสำหรับการควบคุม
BenchmarkState
แยกต่างหากจากBenchmarkRule
โดยไม่มี JUnit - เพิ่มระเบียน
PerfettoTrace
รุ่นทดลองเพื่อเปิดใช้การบันทึกการติดตาม Perfetto ที่มีการกำหนดค่าที่กำหนดเองแยกจาก API การเปรียบเทียบ
- เพิ่ม
- การแก้ไข
- วิธีแก้ปัญหาเบื้องต้นโดยไม่มีช่องว่างนำหน้าในเอาต์พุตการเปรียบเทียบ Android Studio
- แก้ไขปัญหาที่การพิมพ์คำเตือนในเอาต์พุตการเปรียบเทียบของ Android Studio ไม่สำเร็จ
- แก้ไขข้อขัดข้อง
SampledProfiling
ใน Android 13 (API 33) ขึ้นไป - เพิ่มประสิทธิภาพของ
dryRunMode
อย่างมากโดยข้ามการติดตามIsolationActivity
และ Perfetto (โหมดทดลองเรียกใช้ได้เร็วขึ้นสูงสุด 10 เท่าในระบบปฏิบัติการเวอร์ชันเก่า)
เวอร์ชัน 1.2.0-rc02
6 ตุลาคม 2023
ปล่อย androidx.benchmark:benchmark-*:1.2.0-rc02
แล้ว เวอร์ชัน 1.2.0-rc02 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขเอาต์พุตไฟล์การเปรียบเทียบเพื่อไม่ให้การคัดลอกไฟล์ปลั๊กอิน
BaselineProfile
ทำงานขัดข้องอีกต่อไป มีการสร้างและคัดลอกไฟล์ออกจากอุปกรณ์ แต่ได้รับการเปลี่ยนชื่อที่ทำให้ปลั๊กอิน Gradle มองไม่เห็น (I8dbcc, b/303034735, b/296453339) - ชี้แจงข้อความแสดงข้อผิดพลาดเกี่ยวกับการโหลด
tracing-perfetto
เมื่อแทรกจากโมดูลการเปรียบเทียบมาโครในแอปพลิเคชันเป้าหมาย
เวอร์ชัน 1.2.0-rc01
20 กันยายน 2023
ปล่อย androidx.benchmark:benchmark-*:1.2.0-rc01
แล้ว เวอร์ชัน 1.2.0-rc01 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- มีข้อยกเว้น (พร้อมวิธีการแก้ไข) เมื่อการติดตาม Perfetto SDK เริ่มต้นในการเปรียบเทียบไม่สำเร็จ (I6c878, b/286228781)
- แก้ไขข้อขัดข้องของ OOM เมื่อแปลงการติดตามเมธอด ART -> Perfetto มาแล้ว (I106bd, b/296905344)
- (การเปรียบเทียบมาโคร) ป้ายกำกับการติดตามเมธอดที่ชี้แจงเมื่อลิงก์ในเอาต์พุตทดสอบของ Studio และระบุเมธอดที่ตั้งชื่อไฟล์ให้ไม่ซ้ำกันในอุปกรณ์/โฮสต์ ดังนั้นระบบจะไม่เขียนทับไฟล์เมื่อมีการเรียกใช้การเปรียบเทียบมากกว่า 1 รายการ (I08e65, b/285912360)
- ตรวจสอบว่าอุปกรณ์ทำงานอยู่ขณะจับภาพโปรไฟล์พื้นฐาน (I503fc)
เวอร์ชัน 1.2.0-beta05
30 สิงหาคม 2023
ปล่อย androidx.benchmark:benchmark-*:1.2.0-beta05
แล้ว เวอร์ชัน 1.2.0-beta05 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้ปลั๊กอิน Baseline Profile Gradle รองรับปลั๊กอิน Android Gradle 8.3 แล้ว (aosp/2715214)
เวอร์ชัน 1.2.0-beta04
23 สิงหาคม 2023
ปล่อย androidx.benchmark:benchmark-*:1.2.0-beta04
แล้ว เวอร์ชัน 1.2.0-beta04 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ปลั๊กอิน Gradle โปรไฟล์พื้นฐานรองรับปลั๊กอิน Android Gradle 8.3 แล้ว (aosp/2715214)
แก้ไขข้อบกพร่อง
- แก้ไขความล้มเหลวในการเขียน / ย้ายและดึงไฟล์ (โดยเฉพาะไฟล์จากการทดสอบที่ทำเป็นพารามิเตอร์) โดยล้างชื่อไฟล์เอาต์พุตเพิ่มเติมโดยหลีกเลี่ยง '=' และ ":" ในชื่อไฟล์เอาต์พุต (I759d8)
เวอร์ชัน 1.2.0-beta03
9 สิงหาคม 2023
ปล่อย androidx.benchmark:benchmark-*:1.2.0-beta03
แล้ว เวอร์ชัน 1.2.0-beta03 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เพิ่มอาร์กิวเมนต์เพื่อกรอง
TraceSectionMetric
เป็นแพ็กเกจเป้าหมายเท่านั้น เปิดอยู่โดยค่าเริ่มต้น (Ia219b, b/292208786)
แก้ไขข้อบกพร่อง
- เปลี่ยนชื่ออาร์กิวเมนต์การใช้เครื่องมือ
fullTracing.enable
เป็นperfettoSdkTracing.enable
เพื่อให้สอดคล้องกับชื่ออาร์ติแฟกต์และการอ้างอิงอื่นๆfullTracing.enable
จะยังคงทำหน้าที่เป็นตัวเลือกสำรองต่อไป (I7cc00) - ตอนนี้จุดติดตามภายในไลบรารีที่เป็นเกณฑ์เปรียบเทียบ (รวมถึงการติดตามแบบวนซ้ำ/เฟสของไลบรารีเปรียบเทียบแบบไมโคร) จะปรากฏในโปรแกรมดูการติดตามระบบของ Studio และอยู่ในกระบวนการที่ถูกต้องใน Perfetto (I6b2e7, b/293510459)
- นำข้อผิดพลาด "มาโครเปรียบเทียบไม่ได้" ใน API 31 ขึ้นไปออกแล้ว และข้ามการตรวจสอบที่สามารถสร้างโปรไฟล์ได้ในอุปกรณ์ที่รูท eng/userdebug (I2abac, b/291722507)
- เมื่อใช้การเพิ่มประสิทธิภาพเลย์เอาต์ Dex ตอนนี้กฎโปรไฟล์เริ่มต้นจะถือว่าเป็นกฎโปรไฟล์พื้นฐานด้วย (aosp/2684246, b/293889189)
เวอร์ชัน 1.2.0-beta02
26 กรกฎาคม 2023
ปล่อย androidx.benchmark:benchmark-*:1.2.0-beta02
แล้ว เวอร์ชัน 1.2.0-beta02 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เพิ่ม API ทดลองสำหรับเมตริกและการกำหนดค่าที่กำหนดเองของ Microbench (เช่น เครื่องมือสร้างโปรไฟล์ และการติดตาม) (I86101, b/291820856)
แก้ไขข้อบกพร่อง
- รายงานข้อผิดพลาดในMacrobench เมื่อกำหนดค่าระบบปฏิบัติการไม่ถูกต้องสำหรับการติดตาม ดังที่ได้รับการแก้ไขแล้วในโปรแกรมจำลอง API 26/28 ARM64 (I0a328, b/282191686)
- เพิ่มรายละเอียดในการรีเซ็ตการคอมไพล์ไม่สำเร็จเพื่อแนะนำให้อัปเดตโปรแกรมจำลอง เนื่องจากโปรแกรมจำลองบางอย่างได้แก้ไขปัญหานี้แล้วเมื่อเร็วๆ นี้ (I8c815, b/282191686)
- ทำให้
androidx.test.uiautomator:uiautomator:2.2.0
เป็นapi
แทนทรัพยากร Dependency ของimplementation
(I1981e)
เวอร์ชัน 1.2.0-beta01
18 กรกฎาคม 2023
ปล่อย androidx.benchmark:benchmark-*:1.2.0-beta01
แล้ว เวอร์ชัน 1.2.0-beta01 มีการคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขคำเตือนที่ระงับในเอาต์พุตการเปรียบเทียบใน Studio บางครั้งและวิธีแก้ปัญหาเบื้องต้นจากเอาต์พุตการเปรียบเทียบไม่แสดงใน Studio (Ia61d0, b/227205461, b/286306579, b/285912360)
- แก้ไขความคิดเห็นสำหรับ
FrameTimingMetric
แล้ว เมตริกย่อยมีชื่อว่าframeDurationCpuMs
(Ib097f, b/288830934)
เวอร์ชัน 1.2.0-alpha16
21 มิถุนายน 2023
ปล่อย androidx.benchmark:benchmark-*:1.2.0-alpha16
แล้ว เวอร์ชัน 1.2.0-alpha16 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เปลี่ยนชื่อ API ของ
BaselineProfileRule.collectBaselineProfile()
เป็นBaselineProfileRule.collect()
แล้ว (I4B665)
แก้ไขข้อบกพร่อง
- การรองรับการเปรียบเทียบมาโครสำหรับ
androidx.benchmark.profiling.mode = MethodTracing
(I7ad37, b/285912360) - การทำโปรไฟล์ Microbenchmark ย้ายไปยังเฟสแยกต่างหาก จึงเกิดขึ้นเป็นลำดับหลังการวัด แทนที่จะแทนที่ ขณะนี้ส่วนการติดตาม
MethodTracing
รายการจะรวมอยู่ในการติดตาม Perfetto ที่บันทึกไว้ด้วย (หากมี) (I9f657, b/285014599) - เพิ่มการวัดจำนวนใน
TraceSectionMetric
ด้วยMode.Sum
(Ic121a, b/264398606)
เวอร์ชัน 1.2.0-alpha15
7 มิถุนายน 2023
ปล่อย androidx.benchmark:benchmark-*:1.2.0-alpha15
แล้ว เวอร์ชัน 1.2.0-alpha15 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เพิ่ม
MemoryUsageMetric
ทดลองสำหรับการติดตามการใช้งานหน่วยความจำของแอปพลิเคชันเป้าหมาย (I56453, b/133147125, b/281749311) - เพิ่มการรองรับการกำหนดค่า Perfetto ที่กำหนดเองอย่างเต็มรูปแบบด้วย
PerfettoTrace.record
(If9d75, b/280460183) - เพิ่มพร็อพเพอร์ตี้เพื่อข้ามการสร้างโปรไฟล์พื้นฐานแล้ว การใช้งาน:
./gradlew assemble -Pandroidx.baselineprofile.skipgeneration
(I37fda, b/283447020)
การเปลี่ยนแปลง API
collectBaselineProfile
API จะสร้างโปรไฟล์พื้นฐานที่เสถียรเสมอ ระบบได้นำ APIcollectStableBaselineProfile
ออกแล้วและควรใช้collectBaselineProfile
แทน (I17262, b/281078707)- เปลี่ยนอาร์กิวเมนต์
filterPredicate
ของBaselineProfileRule
เป็นค่าที่ไม่เป็นค่าว่าง โดยมีค่าเริ่มต้นเท่ากันเพื่อให้การทำงานของตัวกรองเริ่มต้นในเอกสารชัดเจนมากขึ้น (I3816e)
แก้ไขข้อบกพร่อง
- ปิดใช้การติดตาม
IsolationActivity
และ Perfetto ในdryRunMode
เพื่อปรับปรุงประสิทธิภาพอย่างมาก เนื่องจากเป็นรันไทม์ส่วนใหญ่ (Ie4f7d) - รองรับการสุ่มตัวอย่างสแต็กการเรียกใช้ในการเปรียบเทียบแบบมาโครโดยใช้อาร์กิวเมนต์ทดสอบการใช้เครื่องมือ
androidx.benchmark.profiling.mode=StackSampling
และandroidx.benchmark.profiling.sampleFrequency
(I1d13b, b/282188489) - แก้ไขข้อขัดข้องเมื่อวางตัวให้เฉดสีใน Android U (API 34) รวมถึงในโปรแกรมจำลอง (I031ca, b/274314544)
เวอร์ชัน 1.2.0-alpha14
3 พฤษภาคม 2023
ปล่อย androidx.benchmark:benchmark-*:1.2.0-alpha14
แล้ว เวอร์ชัน 1.2.0-alpha14 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไข
FrameTimingMetric
การละเว้นเฟรมที่มีรหัสเฟรมไม่สอดคล้องกัน การดำเนินการนี้จะทำให้ภาพเคลื่อนไหวบางรายการในแพลตฟอร์มเวอร์ชันล่าสุด (API 31 ขึ้นไป) ไม่สนใจเฟรมจำนวนมากขณะที่RenderThread
กำลังเคลื่อนไหว (เช่น ระหว่างที่คลื่นกระเพื่อม) (I747d2, b/279088460) - การแยกวิเคราะห์ตัวประมวลผลการติดตามแบบคงที่สำหรับการติดตามที่มีขนาดใหญ่กว่า 64 MB (Ief831, b/269949822)
- แก้ไขปัญหาการสร้างโปรไฟล์พื้นฐานใน Android U ไม่สำเร็จเนื่องจากเอาต์พุตของคำสั่ง
pm dump-profiles
ไม่ตรงกัน (รหัส1392, b/277645214) - แก้ไขสคริปต์การล็อกนาฬิกา GPU เพื่อเปรียบเทียบสตริงอย่างถูกต้อง (I53e54, b/213935715)
เวอร์ชัน 1.2.0-alpha13
5 เมษายน 2023
ปล่อย androidx.benchmark:benchmark-*:1.2.0-alpha13
แล้ว เวอร์ชัน 1.2.0-alpha13 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เพิ่มพารามิเตอร์ประเภทโปรไฟล์เมื่อสร้างโปรไฟล์พื้นฐานเพื่อรองรับฟีเจอร์โปรไฟล์สตาร์ทอัพที่กำลังจะเปิดตัว (Ie20d7, b/275093123)
- เพิ่ม API
TraceMetric
เวอร์ชันทดลองใหม่สำหรับการกำหนดเมตริกที่กำหนดเองโดยสมบูรณ์ตามเนื้อหาของการติดตาม Perfetto (I4ce31, b/219851406) - เพิ่มเมตริกทดลองเพื่อระบุจำนวนข้อผิดพลาดของหน้าระหว่างการเปรียบเทียบ (I48db0)
เวอร์ชัน 1.2.0-alpha12
22 มีนาคม 2023
ปล่อย androidx.benchmark:benchmark-*:1.2.0-alpha12
แล้ว เวอร์ชัน 1.2.0-alpha12 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ปลั๊กอิน Gradle ของโปรไฟล์แบบพื้นฐานใหม่เปิดตัวในเวอร์ชันอัลฟ่า ซึ่งช่วยให้สร้างโปรไฟล์พื้นฐานได้ง่ายขึ้นและลดความซับซ้อนของเวิร์กโฟลว์ของนักพัฒนาซอฟต์แวร์
การเปลี่ยนแปลง API
- นำการสนับสนุนการติดตามของ Perfetto ออกจาก API 21 และ 22 ซึ่งมีทั้ง Microbenchmarks และ
PerfettoTrace
API เวอร์ชันทดลอง ก่อนหน้านี้ การเชื่อมต่อUiAutomation
รายการไม่น่าเชื่อถือในอุปกรณ์บางเครื่อง (I78e8c) - เพิ่ม API ทดลองแบบสาธารณะสำหรับ
PerfettoTraceProcessor
เพื่อเปิดใช้การแยกวิเคราะห์เนื้อหาการติดตาม นี่คือขั้นตอนหนึ่งซึ่งจะก้าวไปสู่เมตริกที่กำหนดเองอย่างสมบูรณ์ตามข้อมูลการติดตามของ Perfetto (I2659e, b/219851406)
เวอร์ชัน 1.2.0-alpha11
8 มีนาคม 2023
ปล่อย androidx.benchmark:benchmark-*:1.2.0-alpha11
แล้ว เวอร์ชัน 1.2.0-alpha11 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขข้อขัดข้องใน
MacrobenchmarkRule
และBaselineProfileRule
เมื่อติดตั้งใหม่หรือแยกโปรไฟล์จาก App Bundle ที่มี APK หลายรายการ (I0d8c8, b/270587281)
เวอร์ชัน 1.2.0-alpha10
22 กุมภาพันธ์ 2023
ปล่อย androidx.benchmark:benchmark-*:1.2.0-alpha10
แล้ว เวอร์ชัน 1.2.0-alpha10 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ใน Android 14 ขึ้นไป มาโครการเปรียบเทียบจะไม่ติดตั้งแอปพลิเคชันเป้าหมายอีกครั้งเพื่อรีเซ็ตสถานะการคอมไพล์อีกต่อไป เนื่องด้วยฟีเจอร์ใหม่ของแพลตฟอร์ม ก่อนหน้านี้ คุณจำเป็นต้องมีอุปกรณ์ที่รูทหรือจัดการกับสถานะของแอปพลิเคชันทั้งหมด (เช่น การเข้าสู่ระบบของผู้ใช้) ออกก่อนที่จะเรียกใช้การเปรียบเทียบแต่ละครั้ง (I9b08c, b/249143766)
แก้ไขข้อบกพร่อง
- แก้ไข
DryRunMode
เพื่อไม่ให้เกิดข้อขัดข้องที่มีโปรไฟล์ว่างเปล่าอีกต่อไป เนื่องจากการข้ามการคอมไพล์ แต่จะเรียกใช้การทำซ้ำครั้งเดียวและดึงข้อมูลโปรไฟล์เพื่อให้แน่ใจว่ามีการจับภาพบางอย่าง (I2f05d, b/266403227) - แก้ไขข้อขัดข้องของ
PowerMetric
เมื่อตรวจหาการแสดงข้อมูล powerstats ในระดับ API เก่า (5faaf9, b/268253898)
เวอร์ชัน 1.2.0-alpha09
11 มกราคม 2023
ปล่อย androidx.benchmark:benchmark-*:1.2.0-alpha09
แล้ว เวอร์ชัน 1.2.0-alpha09 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- เปิดใช้การส่งผ่าน
None
ไปยังอาร์กิวเมนต์เครื่องมือandroidx.benchmark.enabledRules
เพื่อปิดใช้การสร้างโปรไฟล์พื้นฐาน / การเปรียบเทียบทั้งหมด (I3d7fd, b/258671856) - แก้ไขการบันทึก
PerfettoTrace
ในโมดูลแอป (เช่น APK การทดสอบเครื่องมือที่ไม่ได้ทำด้วยตนเอง) (I12cfc) - แก้ไขลำดับอาร์กิวเมนต์ adb โปรไฟล์พื้นฐานในเอาต์พุต Studio (I958d1, b/261781624)
- ตอนนี้ระบบได้รู้จัก API โปรแกรมจำลองแขน 33 อย่างถูกต้อง เช่น เมื่อพยายามเรียกใช้การเปรียบเทียบมาโคร และจะพิมพ์คําเตือนอย่างถูกต้อง (69133b,b/262209591)
- ข้ามการตรวจสอบระดับแบตเตอรี่ในอุปกรณ์ที่ไม่มีแบตเตอรี่ในการเปรียบเทียบมาโคร (fe4114, b/232448937)
เวอร์ชัน 1.2.0-alpha08
7 ธันวาคม 2022
ปล่อย androidx.benchmark:benchmark-*:1.2.0-alpha08
แล้ว เวอร์ชัน 1.2.0-alpha08 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เพิ่ม API ใหม่ทดลอง
PerfettoTrace.record {}
และPerfettoTraceRule
เพื่อบันทึกการติดตาม Perfetto (หรือที่เรียกว่าการติดตามระบบ) ซึ่งเป็นส่วนหนึ่งของการทดสอบ เพื่อตรวจสอบพฤติกรรมและประสิทธิภาพของการทดสอบ (I3ba16) BaselineProfileRule
ยอมรับภาคแสดงตัวกรองแทนรายการคำนำหน้าแพ็กเกจแล้ว วิธีนี้ช่วยให้การทดสอบควบคุมการกรองได้อย่างสมบูรณ์ (I93240)- เพิ่ม API แบบทดลอง
BaselineProfileRule.collectStableBaselineProfile
ซึ่งรอจนกว่าโปรไฟล์พื้นฐานจะเสถียรสำหรับการทำซ้ำ N ครั้ง (I923f3) - เพิ่มความสามารถในการระบุคำนำหน้าชื่อไฟล์เอาต์พุตเมื่อสร้างโปรไฟล์พื้นฐานโดยใช้
BaselineProfileRule
(I7b59f, b/260318655)
แก้ไขข้อบกพร่อง
- ปรับปรุงความปลอดภัยในการเขียนเอาต์พุตไฟล์ ซึ่งควรป้องกันไม่ให้ไฟล์เอาต์พุตไม่ถูกเขียน / ต่อท้าย โดยเฉพาะใน API 21/22 (If8c44, b/227510293)
- แก้ไขเอาต์พุตของการติดตาม
simpleperf
เพื่อสร้างและวางไฟล์อย่างถูกต้อง ซึ่งก็น่าจะช่วยแก้ปัญหาโดยทั่วไปที่ Gradle ดึงไฟล์ไม่สำเร็จด้วย (I12a1c, b/259424099) - ปรับปรุงข้อความแสดงข้อผิดพลาดของ profileinstaller ที่พิมพ์เมื่อ profileinstaller เก่าเกินไป ในขณะนี้ เครื่องมือนี้จะบอกให้คุณอัปเดต profileinstaller เวอร์ชัน (1.2.1) สำหรับการวัดโปรไฟล์พื้นฐานใน API 31 ถึง 33 แทนที่จะระบุว่าไม่รองรับ (Ia517f, b/253519888)
- แก้ไขความล้มเหลวของคำสั่ง Shell หลายรายการเกี่ยวกับข้อความแสดงข้อผิดพลาดที่พิมพ์ด้วย API ที่ต้องใช้ <=23 ซึ่งรวมถึงการตั้งค่าไบนารีการบันทึกแบบ Perfetto ที่ล้มเหลวและการดักจับการติดตามล้มเหลว (Ib6b87, b/258863685)
- จัดเรียงกฎโปรไฟล์ที่สร้างขึ้นโดยอัตโนมัติเพื่อลดจำนวนการเปลี่ยนแปลงเมื่อการเปลี่ยนแปลงเมื่อเวลาผ่านไป (เมื่อเช็คอินกฎโปรไฟล์ลงในการควบคุมแหล่งที่มา) (Ie2509)
- แก้ไขข้อขัดข้องในบิลด์ที่ไม่ผ่านรูทซึ่งต่ำกว่า Android 13 (API 33) ที่มีข้อความ
Expected no stderr from echo 3 > /proc/sys/vm/drop_caches
(I6c245, b/259508183)
ปัญหาที่ทราบ
- MacrobenchmarkScope.dropShaderCache()
อาจขัดข้องเนื่องจากไม่มีการออกอากาศรีจิสทรีในไฟล์ Manifest ของตัวติดตั้งโปรไฟล์ ซึ่งยังไม่ได้เผยแพร่ (I5c728, b/258619948) หากต้องการแก้ปัญหาเบื้องต้นใน profileinstaller:1.3.0-alpha02
ให้เพิ่มค่าต่อไปนี้ลงใน AndroidManifest.xml ของแอปพลิเคชัน (ไม่ใช่ของการเปรียบเทียบของคุณ)
<!-- workaround bug in profileinstaller 1.3.0-alpha02, remove when updating to alpha03+ -->
<receiver
android:name="androidx.profileinstaller.ProfileInstallReceiver"
android:permission="android.permission.DUMP"
android:exported="true">
<intent-filter>
<action android:name="androidx.profileinstaller.action.BENCHMARK_OPERATION" />
</intent-filter>
</receiver>
เวอร์ชัน 1.2.0-alpha07
9 พฤศจิกายน 2022
ปล่อย androidx.benchmark:benchmark-*:1.2.0-alpha07
แล้ว เวอร์ชัน 1.2.0-alpha07 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เพิ่ม
PowerMetric
API สำหรับการวัดพลังงานและพลังงานในการเปรียบเทียบแบบมาโคร (Ife601, b/220183779) - แก้ไข
MacrobenchmarkScope.dropShaderCache()
ให้วางแคชตัวปรับแสงเงาแล้ว ซึ่งจะนำเสียงรบกวนประมาณ 20 มิลลิวินาทีออกจากการเปรียบเทียบStartupMode.COLD
เนื่องจากตอนนี้ตัวปรับแสงเงาสามารถล้างการทำซ้ำแต่ละครั้งได้อย่างสม่ำเสมอ ก่อนหน้านี้ การคอมไพล์Partial
ที่ใช้การทำซ้ำสำหรับการอุ่นเครื่องจะรายงานตัวเลขที่เร็วไม่ถูกต้อง เนื่องจากการแคชตัวปรับแสงมีแนวโน้มที่จะเกิดขึ้นระหว่าง Warmup มากกว่า การแก้ไขนี้ต้องใช้อุปกรณ์ที่รูทหรือใช้profileinstaller:1.3.0-alpha02
ในแอปเป้าหมาย สําหรับการเปลี่ยนแปลง API ของไลบรารีProfileInstaller
โปรดดูหน้า ProfileInstaller 1.30-alpha02 (Ia5171, b/231455742) - เพิ่ม
TraceSectionMode("label", Mode.Sum)
แล้ว ทำให้วัดเวลาทั้งหมดที่ใช้ในส่วนการติดตามหลายส่วนที่มีป้ายกำกับเดียวกัน ตัวอย่างเช่นTraceSectionMetric("inflate", Mode.Sum)
จะรายงานเมตริกinflateMs
สำหรับเวลาทั้งหมดในการเปรียบเทียบมาโครที่ใช้กับเงินเฟ้อ รวมทั้งนำข้อกำหนด API 29 ออกด้วย เนื่องจากTraceSectionMetric
ทำงานร่วมกับandroidx.tracing.Trace
ในระดับ API ที่ต่ำกว่า โดยใช้forceEnableAppTracing
ในแอปเป้าหมาย (Id7b68, b/231455742)
แก้ไขข้อบกพร่อง
- เพิ่มความปลอดภัยของคำสั่ง Shell ภายในทั้งหมดด้วยการตรวจสอบเอาต์พุต/ข้อผิดพลาดทั้งหมด (I5984d, b/255402908, b/253094958)
- ระบุอุปกรณ์ในคำสั่ง
adb pull
ของโปรไฟล์พื้นฐาน เพื่อให้คัดลอกคำสั่งพุลได้ง่ายๆ หากมีการเชื่อมต่ออุปกรณ์หลายเครื่อง (สูงสุด 1 โปรแกรมจำลอง) (I6ac6c, b/223359380) - เพิ่มข้อผิดพลาดหากไม่ได้ตั้งค่า apk การทดสอบมาโครการเปรียบเทียบเป็นการวัดคุมด้วยตนเอง ข้อผิดพลาดนี้ทำให้ไม่สามารถทำการเปรียบเทียบมาโครจากภายในกระบวนการของแอปเป้าหมายได้ ในระหว่างดำเนินการ Macrobench จะไม่สามารถคอมไพล์/ฆ่า/Cold Start แอปหรือควบคุมสิทธิ์ของตัวเอง (I4279b)
- แก้ไขปัญหาใน
measureRepeated()
ที่StartupMode.COLD
ไม่ปิดกระบวนการเป้าหมายหลังจากวันที่setupBlock
ตอนนี้setupBlock
การโต้ตอบกับแอปจะไม่ปล่อยให้กระบวนการของแอปทำงานต่อไป และการวัดผล Cold Start ที่ไม่ถูกต้อง (I8ebb7)
เวอร์ชัน 1.2.0-alpha06
24 ตุลาคม 2022
ปล่อย androidx.benchmark:benchmark-*:1.2.0-alpha06
แล้ว เวอร์ชัน 1.2.0-alpha06 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
BaselineProfileRule
ไม่จำเป็นต้องใช้รูทใน Android 13 (API 33) และไม่ได้อยู่ระหว่างการทดลองอีกต่อไป (Ie0a7d, b/250083467, b/253094958)- การเปลี่ยนแปลงนี้ยังช่วยแก้ปัญหาการล้างโปรไฟล์จากแอปไปยังดิสก์ในอุปกรณ์ที่ไม่ผ่านการรูทด้วย แต่จะต้องมีการอัปเดตการใช้ Profileinstaller ของแอปเป้าหมายด้วย
- หากต้องการใช้
BaselineProfileRule
หรือCompilationMode.Partial(warmupIterations)
ในอุปกรณ์ที่ไม่ผ่านการรูท คุณต้องอัปเดตแอปเป้าหมายให้ใช้androidx.profileinstaller.profileinstaller:1.3.0-alpha01
ด้วย ซึ่งจะทำให้สามารถล้างโปรไฟล์ไปยังดิสก์ได้อย่างถูกต้องเพื่อให้สามารถคอมไพล์/ดึงข้อมูลได้
แก้ไขข้อบกพร่อง
- แก้ไขข้อขัดข้องของ
SampledProfiling
ใน API 33 ขึ้นไป (I40743, b/236109374)
เวอร์ชัน 1.2.0-alpha05
5 ตุลาคม 2022
ปล่อย androidx.benchmark:benchmark-*:1.2.0-alpha05
แล้ว เวอร์ชัน 1.2.0-alpha05 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขรายละเอียดเฟรมในโปรแกรมดูการติดตามของระบบ Studio สำหรับการติดตามที่บันทึกการเปรียบเทียบ (I3f3ae, b/239677443)
- แก้ไข
FrameTimingMetric
เพื่อแสดงFrameOverrun
ว่าต้องใช้ API 31 แทน 29 (I716dd, b/220702554) - ตั้งค่าการทำซ้ำใน
BaselineProfileRule
และแสดงอย่างชัดเจนหากไม่ได้ติดตั้งแพ็กเกจเป้าหมาย (ทำกับ MacrobenchmarkRule ไปแล้ว) (Ic09a3, b/227991471)
เวอร์ชัน 1.2.0-alpha04
21 กันยายน 2022
ปล่อย androidx.benchmark:benchmark-*:1.2.0-alpha04
แล้ว เวอร์ชัน 1.2.0-alpha04 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
เพิ่มการสนับสนุนสำหรับอาร์กิวเมนต์การวัดคุม
dryRunMode.enable
ไปยังมาโครการเปรียบเทียบ (มีในไมโครอยู่แล้ว) เพื่อการพัฒนาในเครื่องที่เร็วขึ้น และตรวจสอบการทำงานอัตโนมัติของแอป (เช่น ในการส่งล่วงหน้า) การดำเนินการนี้จะลบล้างการทำซ้ำเป็น 1 ข้ามการคอมไพล์ ระงับข้อผิดพลาดในการกำหนดค่าทั้งหมด และปิดใช้เอาต์พุตของไฟล์ .json สำหรับการวัด (Ib51b4, b/175149857)ในบรรทัดคำสั่ง Gradle
./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.dryRunMode.enable=true
ในbuild.gradle
android { defaultConfig { testInstrumentationRunnerArgument 'androidx.benchmark.dryRunMode.enable', 'true' } }
แก้ไขข้อบกพร่อง
- แก้ไข
StartupTimingMetric
ว่าไม่ต้องเปิดใช้งานกิจกรรมที่วัดผลแล้วผ่านMacrobenchmarkScope.startActivityAndWait()
อีกต่อไป ซึ่งหมายความว่าเมตริกสามารถรับการเปิดตัวจาก การแจ้งเตือน,Context.startActivity()
, การไปยังส่วนต่างๆ ตามกิจกรรมบนแอป หรือคำสั่ง Shell (Ia2de6, b/245414235) - แก้ไขข้อบกพร่องที่
startActivityAndWait
จะหมดเวลาโดยพยายามรอให้การเปิดตัวเสร็จสมบูรณ์ในโปรแกรมจำลองโดยการลดความเข้มงวดของการตรวจจับเฟรม (Ibe2c6, b/244594339, b/228946895)
เวอร์ชัน 1.2.0-alpha03
7 กันยายน 2022
ปล่อย androidx.benchmark:benchmark-*:1.2.0-alpha03
แล้ว เวอร์ชัน 1.2.0-alpha03 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เพิ่ม API ทดลองสำหรับการใช้
BenchmarkState
อย่างอิสระ ซึ่งแยกต่างหากจากBenchmarkRule
/JUnit4
(Id478f, b/228489614)
แก้ไขข้อบกพร่อง
- เพิ่ม Leanback สำรองสำหรับ
startActivityAndWait
(01ed77, b/242899915)
เวอร์ชัน 1.2.0-alpha02
24 สิงหาคม 2022
ปล่อย androidx.benchmark:benchmark-*:1.2.0-alpha02
แล้ว เวอร์ชัน 1.2.0-alpha02 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ค่าเริ่มต้นคือ
am force stop
สําหรับMacrobenchmarkScope.killProcess()
แม้ว่าจะรูทแล้ว ยกเว้นระหว่างการสร้างโปรไฟล์พื้นฐาน ซึ่งสามารถลบล้างได้ด้วยอาร์กิวเมนต์บูลีนที่ไม่บังคับ (02cce9, b/241214097)
แก้ไขข้อบกพร่อง
- รองรับการสร้างโปรไฟล์พื้นฐานสำหรับแอประบบ (I900b8, b/241214097)
- รองรับการตรวจสอบเมตริกพลังงาน ODPM ในอุปกรณ์ที่ไม่มีสิทธิ์เข้าถึงระดับราก (a38c78, b/229623230)
เวอร์ชัน 1.2.0-alpha01
27 กรกฎาคม 2022
ปล่อย androidx.benchmark:benchmark-*:1.2.0-alpha01
แล้ว เวอร์ชัน 1.2.0-alpha01 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- คอมโพเนนต์ Tracing-perfetto-common ช่วยให้เครื่องมือเปิดใช้การติดตาม Perfetto SDK ในแอปที่เปิดเผย (I2cc7f)
เพิ่มอาร์กิวเมนต์การวัดคุม
androidx.benchmark.enabledRules
เพื่อเปิดใช้การกรองการเรียกใช้การเปรียบเทียบมาโครกับเฉพาะการเปรียบเทียบ หรือเพียงแค่การสร้างโปรไฟล์พื้นฐาน ผ่านใน "Macrobenchmark" หรือ "BaselineProfile" ทำการทดสอบเพียงประเภทเดียว เช่น เมื่อเพิ่งสร้างBaselineProfiles
ในโปรแกรมจำลอง รองรับรายการที่คั่นด้วยจุลภาค (I756b7, b/230371561)เช่น ใน create.gradle ของมาโครการเปรียบเทียบ:
android { defaultConfig { testInstrumentationRunnerArgument 'androidx.benchmark.enabledRules', 'BaselineProfile' } }
หรือจากบรรทัดคำสั่ง Gradle
./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile
การเปลี่ยนแปลง API
- เพิ่ม
PowerMetric
ใหม่สําหรับการวัดงานด้านพลังงานและพลังงานในการเปรียบเทียบ (I9f39b, b/220183779) - เพิ่มโหมดคอมไพล์ใหม่
CompilationMode.Ignore
เพื่อข้ามการรีเซ็ตโปรไฟล์และการรวบรวม (Ibbcf8, b/230453509) - เพิ่มพารามิเตอร์ใหม่ใน
BaselineProfileRule#collectBaselineProfile
เพื่อกรองไฟล์เอาต์พุตตามชื่อแพ็กเกจ (If7338, b/220146561) - ช่วยให้นักพัฒนาซอฟต์แวร์คายประจุอุปกรณ์เพื่อวัดการระบายพลังงาน (I6a6cb)
- เพิ่มความสามารถในการล้างแคชตัวปรับแสงเงาใน
MacrobenchmarkScope
(I32122) - ทำให้นักพัฒนาซอฟต์แวร์กำหนดค่าการแสดงประเภทเมตริกและรายละเอียดหมวดหมู่ของระบบย่อยที่ต้องการ (I810c9)
- ก่อนหน้านี้
UnsupportedOperationException
จะอยู่ในเกณฑ์การเปรียบเทียบหากทำงานในอุปกรณ์ที่ไม่รองรับ ตอนนี้ UOE จะเกิดขึ้นเฉพาะในกรณีที่ใช้เมตริกในอุปกรณ์ที่ไม่รองรับ (เช่นPowerMetric.configure
) (I5cf20, b/227229375) - เพิ่ม
TotalPowerMetric
และTotalEnergyMetric
สำหรับการวัดกำลังและพลังงานทั้งหมดในแต่ละหมวดหมู่ของระบบในการเปรียบเทียบมาโคร (I3b26b, b/224557371)
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ไม่มีการรีเซ็ตเมธอดที่คอมไพล์อย่างถูกต้องระหว่างการเปรียบเทียบมาโครแต่ละรายการในบิลด์ที่ไม่รูท ทำให้ต้องติดตั้ง APK อีกครั้งสำหรับการทำซ้ำแต่ละครั้ง ซึ่งจะล้างข้อมูลแอปพลิเคชันสำหรับการเปรียบเทียบมาโครแต่ละรายการ (I31c74, b/230665435)
- แก้ไขข้อขัดข้องในการบันทึกการติดตามใน API 21/22 (If7fd6, b/227509388, b/227510293, b/227512788)
- การตรวจจับการเปิดตัวกิจกรรมแบบยกเครื่องเพื่อแก้ไข "อ่านเมตริกไม่ได้" ในการเปรียบเทียบมาโครเริ่มต้น (Ia517C)
เวอร์ชัน 1.1.1
เวอร์ชัน 1.1.1
9 พฤศจิกายน 2022
ปล่อย androidx.benchmark:benchmark-*:1.1.1
แล้ว เวอร์ชัน 1.1.1 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไข
android.system.ErrnoException: open failed: EACCES
ซึ่งเกิดขึ้นในอุปกรณ์ Android11 (API 30) ขึ้นไป บางรุ่น นี่เป็นการแก้ไขที่โดนใจจาก1.2.0-alpha01
(aosp/2072249)
เวอร์ชัน 1.1.0
เวอร์ชัน 1.1.0
15 มิถุนายน 2022
ปล่อย androidx.benchmark:benchmark-*:1.1.0
แล้ว เวอร์ชัน 1.1.0 มีคอมมิตเหล่านี้
- เวอร์ชันนี้เหมือนกับ
androidx.benchmark:benchmark-*:1.1.0-rc03
การเปลี่ยนแปลงที่สำคัญตั้งแต่เวอร์ชัน 1.0.0
การรองรับ Jetpack Macrobenchmarks ซึ่งช่วยให้คุณวัดการโต้ตอบทั้งแอปได้ เช่น startupและการเลื่อน ซึ่งช่วยให้บันทึกการติดตามและ วัดผลส่วนการติดตาม
การรองรับโปรไฟล์พื้นฐาน
CompilationMode.Partial
เพื่อวัดประสิทธิภาพของโปรไฟล์พื้นฐาน@BaselineProfileRule
เพื่อสร้างโปรไฟล์พื้นฐานโดยอัตโนมัติสำหรับเส้นทางของผู้ใช้ที่สำคัญ
การสนับสนุนสำหรับเมตริกการจัดสรรและ การทำโปรไฟล์ระหว่างการเรียกใช้ Microbenchmark
เวอร์ชัน 1.1.0-rc03
1 มิถุนายน 2022
ปล่อย androidx.benchmark:benchmark-*:1.1.0-rc03
แล้ว เวอร์ชัน 1.1.0-rc03 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
หลีกเลี่ยงการติดตั้งแพ็กเกจเป้าหมายใหม่ในทุกการเปรียบเทียบซ้ำ ( aosp/2093027, b/231976084)
นำการหน่วงเวลา
300ms
ออกจากpressHome()
(aosp/2086030, b/231322975)ปรับปรุงความเร็วในการทดสอบการเปรียบเทียบมาโครโดยการเพิ่มประสิทธิภาพคำสั่ง Shell ที่ใช้ขั้นสูง (aosp/2086023, b/231323582)
การรองรับอุปกรณ์ Gradle ที่มีการจัดการเมื่อสร้างโปรไฟล์พื้นฐานที่มีการเปรียบเทียบแบบมาโคร (aosp/2062228, b/228926421)
เวอร์ชัน 1.1.0-rc02
11 พฤษภาคม 2022
ปล่อย androidx.benchmark:benchmark-*:1.1.0-rc02
แล้ว เวอร์ชัน 1.1.0-rc02 มีคอมมิตเหล่านี้
- โปรดทราบว่ารุ่นนี้จะมีการเปลี่ยนแปลงลักษณะการทำงาน เนื่องจากตอนนี้แอปได้รับการติดตั้งอีกครั้งโดยสมบูรณ์แล้วในระหว่างการเปรียบเทียบแต่ละรายการเพื่อให้การวัดผลแม่นยำ
การแก้ไขข้อบกพร่อง/การเปลี่ยนแปลงลักษณะการทำงาน
แก้ไขปัญหาที่การคอมไพล์แอปไม่ได้รับการรีเซ็ตอย่างถูกต้องระหว่างการเปรียบเทียบมาโคร และไม่รีเซ็ตเลยในบิลด์ที่ไม่รูท การดำเนินการนี้ช่วยแก้ไขหลายๆ กรณีที่การทำการทดสอบหลายครั้งจะส่งผลให้
CompilationMode
มีผลกับการวัดเพียงเล็กน้อยหรือไม่มีเลย ในการแก้ปัญหานี้ ตอนนี้แอปเป้าหมายจะติดตั้งวิธีการทดสอบแต่ละวิธีอีกครั้งโดยสมบูรณ์ ซึ่งจะล้างข้อมูลแอปพลิเคชันระหว่างการเปรียบเทียบมาโครแต่ละรายการ (I31c74, b/230665435)วิธีนี้ช่วยป้องกันไม่ให้แอปตั้งค่าสถานะก่อนการทดสอบ คุณจึงข้ามการคอมไพล์ / การติดตั้งอีกครั้งได้เพื่อแก้ไขปัญหานี้ ตัวอย่างเช่น คุณสามารถคอมไพล์เป้าหมายอย่างสมบูรณ์ด้วยคำสั่ง Shell
cmd package compile -f -m speed <package>
แล้วข้ามขั้นตอนการคอมไพล์ของมาโครมาตรฐานเช่น ใน create.gradle ของมาโครการเปรียบเทียบ:
android { defaultConfig { testInstrumentationRunnerArgument 'androidx.benchmark.compilation.enabled, 'false' } }
หรือจากบรรทัดคำสั่ง Gradle
./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.compilation.enabled=false
ทำให้สามารถแชร์โมดูลระหว่างการเปรียบเทียบมาโครกับการทดสอบการสร้างโปรไฟล์พื้นฐานได้ด้วยการเพิ่มอาร์กิวเมนต์การวัดคุม
androidx.benchmark.enabledRules
ผ่านใน "Macrobenchmark" หรือ "BaselineProfile" ทำการทดสอบเพียงประเภทเดียว เช่น เมื่อสร้างBaselineProfiles
ในโปรแกรมจำลอง (I756b7, b/230371561)เช่น ใน create.gradle ของมาโครการเปรียบเทียบ:
android { defaultConfig { testInstrumentationRunnerArgument 'androidx.benchmark.enabledRules', 'BaselineProfile' } }
หรือจากบรรทัดคำสั่ง Gradle
./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.enabledRules=BaselineProfile
เวอร์ชัน 1.1.0-rc01
20 เมษายน 2022
ปล่อย androidx.benchmark:benchmark-*:1.1.0-rc01
แล้ว เวอร์ชัน 1.1.0-rc01 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- ตอนนี้ลิงก์เอาต์พุตโปรไฟล์พื้นฐานใน Android Studio ใช้ชื่อไฟล์ที่ไม่ซ้ำกันแล้ว วิธีนี้แสดงผลผลลัพธ์ล่าสุดของการใช้
BaselineProfileRule
เสมอ ( aosp/2057008, b/228203086 )
เวอร์ชัน 1.1.0-beta06
6 เมษายน 2022
ปล่อย androidx.benchmark:benchmark-*:1.1.0-beta06
แล้ว เวอร์ชัน 1.1.0-beta06 มีการคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขข้อขัดข้องในการบันทึกการติดตามใน API 21/22 (If7fd6, b/227509388)
- การตรวจจับการเปิดตัวกิจกรรมแบบยกเครื่องเพื่อแก้ไข "อ่านเมตริกไม่ได้" ในการเปรียบเทียบมาโครเริ่มต้น (Ia517C)
- แก้ไขเมตริกการเริ่มต้นใช้งานสำหรับการเปรียบเทียบมาโครเมื่อใช้
CompilationMode.None()
ก่อนการเปลี่ยนแปลงนี้ ดูเหมือนว่าCompilationMode.Partial()
จะช้ากว่าCompilation.None()
(611ac9)
เวอร์ชัน 1.1.0-beta05
23 มีนาคม 2022
ปล่อย androidx.benchmark:benchmark-*:1.1.0-beta05
แล้ว เวอร์ชัน 1.1.0-beta05 มีการคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- ปิดใช้งานแพ็กเกจหลังจากข้ามการติดตั้งโปรไฟล์เมื่อใช้
CompilationMode.None
(aosp/1991373) - แก้ไขปัญหาที่การเปรียบเทียบของมาโครรวบรวมเมตริกการเริ่มต้นไม่ได้เมื่อใช้
StartupMode.COLD
(aosp/2012227 b/218668335)
เวอร์ชัน 1.1.0-beta04
23 กุมภาพันธ์ 2022
ปล่อย androidx.benchmark:benchmark-*:1.1.0-beta04
แล้ว เวอร์ชัน 1.1.0-beta04 มีการคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
แก้ไขเมตริกที่หายไปใน Android 10 และ
NoSuchElementException
เกิดจากการไม่ได้รับการบันทึกชื่อกระบวนการ ได้อย่างถูกต้องในร่องรอย (Ib4c17, b/218668335)ใช้
PowerManager
สำหรับการตรวจจับการควบคุมความร้อนใน Q (API 29) ขึ้นไป ซึ่งจะช่วยลดความถี่ของการบิดเบือนความจริงได้อย่างมาก ผลบวกในการตรวจจับการควบคุมความร้อน (ลองเปรียบเทียบอีกครั้งหลังผ่านไป 90 วัน ระยะเวลาพักที่สอง) และเพิ่มความเร็วในการเปรียบเทียบได้อย่างมากกับผู้ใช้ งานสร้าง ยังมีการตรวจจับคันเร่งแม้ว่านาฬิกาจะทำงานอยู่ ล็อกไว้ (หากล็อกไว้สูงเกินไปสำหรับตัวอุปกรณ์ สภาพแวดล้อมของคุณ) (I9c027, b/217497678, b/131755853)กรองการจัดโปรไฟล์แบบสุ่มตัวอย่างแบบง่ายไปยังชุดข้อความ
measureRepeated
รายการเท่านั้นเพื่อให้ตรวจสอบได้ง่ายขึ้น (Ic3e12, b/217501939)รองรับเมตริกจากโปรเซสย่อยของ UI ที่มีชื่อในแอปที่มีหลายการประมวลผล (Ice6c0, b/215988434)
กรองกฎโปรไฟล์พื้นฐานเพื่อกำหนดเป้าหมายเป็น Android 9 (SDK 28) aosp/1980331 b/216508418
ข้ามการติดตั้งโปรไฟล์เมื่อใช้
Compilation.None()
นอกจากนี้ ระบบจะรายงานคำเตือนเมื่อแอปใช้androidx.profileinstaller
และปลั๊กอิน Android Gradle เวอร์ชันเก่า aosp/1977029
เวอร์ชัน 1.1.0-beta03
9 กุมภาพันธ์ 2022
ปล่อย androidx.benchmark:benchmark-*:1.1.0-beta03
แล้ว เวอร์ชัน 1.1.0-beta03 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เพิ่ม
AudioUnderrunMetric
ลงในไลบรารีการเปรียบเทียบมาโครภายใต้ Flag ทดลองเพื่อให้ตรวจจับเสียงที่มีประสิทธิภาพต่ำได้ (Ib5972) BaselineProfileRule
ไม่ยอมรับการบล็อกsetup
อีกต่อไปเนื่องจากฟังก์ชันนี้ทำงานเหมือนกับprofileBlock
(Ic7dfe, b/215536447)เช่น
@Test fun collectBaselineProfile() { baselineRule.collectBaselineProfile( packageName = PACKAGE_NAME, setupBlock = { startActivityAndWait() }, profileBlock = { // ... } ) }
@Test fun collectBaselineProfile() { baselineRule.collectBaselineProfile( packageName = PACKAGE_NAME, profileBlock = { startActivityAndWait() // ... } ) }
แก้ไขข้อบกพร่อง
- แก้ปัญหาการติดตามตัวสร้างโปรไฟล์ microbench ไม่สำเร็จในการเรียกใช้ครั้งต่อๆ ไปเมื่อลิงก์ในเอาต์พุต Studio (I5ae4d, b/214917025)
- ป้องกันการคอมไพล์คำสั่ง Shell ใน API 23 (Ice380)
- เปลี่ยนชื่อ
FrameCpuTime
แล้ว ->FrameDurationCpu
FrameUiTime
->FrameDurationUi
เพื่อชี้แจงระยะเวลา ไม่ใช่การประทับเวลา และเพื่อจับคู่กับคำนำหน้า (I0eba3, b/216337830)
เวอร์ชัน 1.1.0-beta02
26 มกราคม 2022
ปล่อย androidx.benchmark:benchmark-*:1.1.0-beta02
แล้ว เวอร์ชัน 1.1.0-beta02 มีการคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- การสุ่มตัวอย่างสแต็ก Microbenchmark / โปรไฟล์การติดตามเมธอด จะลิงก์กับผลลัพธ์ใน Studio แล้ว ซึ่งคล้ายกับเอาต์พุตการทำโปรไฟล์อื่นๆ และไม่ระงับผลการค้นหา เมตริกการจัดสรร (Idcb65, b/214440748, b/214253245)
- ตอนนี้ BaselineProfileRule จะพิมพ์คําสั่ง
adb pull
ในเอาต์พุต Logcat และ Studio สําหรับดึงไฟล์ข้อความ BaselineProfile ที่สร้างขึ้น (f08811)
เวอร์ชัน 1.1.0-beta01
12 มกราคม 2022
ปล่อย androidx.benchmark:benchmark-*:1.1.0-beta01
แล้ว เวอร์ชัน 1.1.0-beta01 มีการคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขการละเว้นอาร์กิวเมนต์เครื่องมือสร้างโปรไฟล์ (I37373, b/210619998)
- นำ
CompliationModes
ที่เลิกใช้งานแล้วออก (I98186, b/213467659) - เปลี่ยนอาร์กิวเมนต์โปรไฟล์พื้นฐานของ
CompilationMode.Partial
เป็น enum เพื่อความชัดเจน (Id67ea)
เวอร์ชัน 1.1.0-alpha13
15 ธันวาคม 2021
ปล่อย androidx.benchmark:benchmark-*:1.1.0-alpha13
แล้ว เวอร์ชัน 1.1.0-alpha13 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เพิ่มการติดตามระบบแบบ Low-overhead System Tracing ไปยัง Microbench เอาต์พุตใน Android Q (API 29 ขึ้นไป) โปรดทราบว่าในตอนนี้ระบบไม่ได้บันทึกการติดตามที่กำหนดเอง (ผ่าน
android.os.Trace
หรือandroidx.tracing
Jetpack API) เพื่อหลีกเลี่ยงผลกระทบต่อผลลัพธ์ การติดตามนี้น่าจะเป็นประโยชน์ในการวินิจฉัย ความไม่เสถียร โดยเฉพาะจากแหล่งที่มา ที่อยู่นอกเกณฑ์การเปรียบเทียบ (I298be, b/205636583, b/145598917) - อธิบาย
CompilationModes
เป็น 3 ชั้นเรียน ได้แก่ ทั้งหมด ไม่มี บางส่วน ก่อนหน้านี้มีการตั้งชื่ออย่างไม่สอดคล้องกันตามอาร์กิวเมนต์การคอมไพล์ (ซึ่งเราถือว่าเป็นรายละเอียดการใช้งาน) และฟีเจอร์ต่างๆ ซึ่งจะทำให้ข้อดีและข้อเสีย ชุดค่าผสมที่เป็นไปได้ และพฤติกรรมในแพลตฟอร์มเวอร์ชันต่างๆ มีความชัดเจนมากขึ้น (I3d7bf, b/207132597) - การตั้งค่าและการวัดผลจะเป็นคู่กันเสมอตามลำดับ ตอนนี้คุณค้นหาชื่อแพ็กเกจและการทำซ้ำได้แล้ว (แต่การทำซ้ำอาจเป็น
null
ในสถานการณ์วอร์มอัพบางสถานการณ์) (Id3b68, b/208357448, b/208369635)
แก้ไขข้อบกพร่อง
- แก้ไข
CompilationMode.Speed
ซึ่งถือเป็นNone
อย่างไม่ถูกต้อง (I01137)
เวอร์ชัน 1.1.0-alpha12
17 พฤศจิกายน 2021
ปล่อย androidx.benchmark:benchmark-*:1.1.0-alpha12
แล้ว เวอร์ชัน 1.1.0-alpha12 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เพิ่ม TraceSectionMetric แบบทดลองสำหรับแบบอิงตามการติดตามที่กำหนดเอง การวัดเวลา (I99db1, b/204572664)
แก้ไขข้อบกพร่อง
- ปลุกอุปกรณ์ด้วยการทำซ้ำแต่ละครั้งเพื่อให้แน่ใจว่าสามารถทดสอบ UI ได้ ต้องปิดใช้หน้าจอล็อก (Ibfa28, b/180963442)
- แก้ไขข้อขัดข้องหลายรายการในโหมดการทำโปรไฟล์การสุ่มตัวอย่างเป็นกลุ่ม โปรแกรมจำลองและอุปกรณ์ที่ไม่รูท (Icdbda, b/202719335)
- นำสลีป 0.5 วินาทีออกเมื่อสิ้นสุดการทำซ้ำแต่ละครั้ง หาก คุณเห็นเมตริกที่หายไปจากการเปลี่ยนแปลงนี้ โปรดรายงานข้อบกพร่อง (Iff6aa)
- ลดความเสี่ยงที่ข้อมูลจะสูญหายและลดโอเวอร์เฮดหน่วยความจำจากการติดตาม (Id2544, b/199324831, b/204448861)
- ลดขนาดการติดตามลง ~40% โดยการสลับไปใช้รูปแบบพื้นที่เก็บข้อมูลกำหนดการแบบกะทัดรัด (Id5fb6, b/199324831)
- อัปเดตการใช้งานเมตริกสตาร์ทอัพให้สิ้นสุดที่เวลาเสมอ สิ้นสุดเธรดการแสดงผล การดำเนินการนี้มีความสอดคล้องกันมากขึ้นในแพลตฟอร์มต่างๆ เวอร์ชัน และอื่นๆ ที่ใกล้เคียงกับการวัดผลในแอป (Ic6b55)
เวอร์ชัน 1.1.0-alpha11
3 พฤศจิกายน 2021
ปล่อย androidx.benchmark:benchmark-*:1.1.0-alpha11
แล้ว เวอร์ชัน 1.1.0-alpha11 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ตอนนี้การเปรียบเทียบมาโครมี
minSdkVersion
ที่23
(If2655) - เพิ่ม
BaselineProfileRule
เวอร์ชันทดลองใหม่ซึ่งสามารถสร้างโปรไฟล์พื้นฐานในเส้นทางของผู้ใช้ที่สำคัญของแอป เอกสารประกอบโดยละเอียดที่ควรปฏิบัติตาม (Ibbefa, b/203692160) - นำตัวแปรอินเทอร์เฟซที่ซ้ำของมาตรวัดซึ่งเพิ่มเข้ามาแล้วออก สำหรับผู้โทร Java เนื่องจากทำให้เกิดความคลุมเครือในการดำเนินการ/การแก้ไข โปรแกรมเรียก Java จะต้องแสดงผล Unit.Instance จาก อีกครั้ง วัดซ้ำ หากคุณไม่สะดวก โปรดรายงานข้อบกพร่อง สามารถกลับมาดูอีกครั้งในเวอร์ชันถัดไป (Ifb23e, b/204331495)
เวอร์ชัน 1.1.0-alpha10
27 ตุลาคม 2021
ปล่อย androidx.benchmark:benchmark-*:1.1.0-alpha10
แล้ว เวอร์ชัน 1.1.0-alpha10 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- Backport StartupTimingMetric" การจะย้อนกลับไปใช้ API 23 ช่วงเวลานี้ การใช้งานใหม่ยังจัดการ reportFullyDrawn() ได้ดีกว่าเดิมเพื่อรอ จนกว่าจะมีการแสดงเนื้อหาที่เกี่ยวข้อง (If3ac9, b/183129298)
- เพิ่ม JvmOverloads ในเมธอด MacrobenchmarkScope หลายรายการสำหรับผู้โทร Java (I644fe, b/184546459)
- ให้ฟังก์ชัน MacrobenchmarkRule.measureate ทางเลือกที่ใช้
Consumer<MacrobenchmarkScope>
สำหรับการใช้งานสำนวนในภาษา Java (If74ab, b/184546459)
แก้ไขข้อบกพร่อง
- แก้ไขการติดตามที่ไม่เริ่มต้นเร็วพอและไม่มีข้อมูลเมตริก การดำเนินการนี้จะช่วยแก้ปัญหา "ไม่สามารถอ่านเมตริกใดๆ ได้ ในช่วงเปรียบเทียบ" ข้อยกเว้นที่เกิดจากไลบรารีเอง (I6dfcb, b/193827052, b/200302931)
- FrameNegativeSlack ได้เปลี่ยนชื่อเป็น FrameOverrun เพื่อชี้แจงความหมายว่าเฟรมใช้ไปมากแค่ไหนเมื่อเวลาผ่านไป (I6c2aa, b/203008701)
เวอร์ชัน 1.1.0-alpha09
13 ตุลาคม 2021
ปล่อย androidx.benchmark:benchmark-*:1.1.0-alpha09
แล้ว เวอร์ชัน 1.1.0-alpha09 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- รองรับการวางแคชของหน้าเคอร์เนลโดยไม่มีรูทใน API 31/S+ ซึ่งจะเพิ่มความแม่นยำในการเปิดตัว StartupMode.COLD (Iecfdb, b/200160030)
เวอร์ชัน 1.1.0-alpha08
29 กันยายน 2021
ปล่อย androidx.benchmark:benchmark-*:1.1.0-alpha08
แล้ว เวอร์ชัน 1.1.0-alpha08 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เปิดใช้การเปรียบเทียบมาโครแบบเลื่อนเพื่อให้กลับไปที่ API 23 (If39c2, b/183129298)
- เพิ่มเมตริกสุ่มตัวอย่างประเภทใหม่ไปยัง UI และเอาต์พุต JSON ที่เน้นเกี่ยวกับ เปอร์เซ็นไทล์ของตัวอย่างหลายรายการต่อ 1 การทำซ้ำ (I56247, b/199940612)
- เปลี่ยนไปใช้เมตริกจำนวนลอยตัวตลอดการเปรียบเทียบ ไลบรารี (ตัดใน UI ของ Studio) (I69249, b/197008210)
เวอร์ชัน 1.1.0-alpha07
1 กันยายน 2021
ปล่อย androidx.benchmark:benchmark-*:1.1.0-alpha07
แล้ว เวอร์ชัน 1.1.0-alpha07 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เพิ่ม API ขั้นต่ำเป็น 21 เพื่อให้สอดคล้องกับระดับ API ต่ำสุดที่จะรองรับในอนาคต จำนวน API ขั้นต่ำที่รองรับในปัจจุบันยังคงได้รับการถ่ายทอดผ่าน requiredApi() และขณะนี้คือ 29 (I440d6, b/183129298)
แก้ไขข้อบกพร่อง
- แก้ไข
ProfileInstaller
เพื่อให้แอปที่ใช้โปรไฟล์เกณฑ์พื้นฐานเรียกใช้ Macroการเปรียบเทียบโดยใช้CompilationMode.BaselineProfile
ได้ง่ายขึ้น (I42657, b/196074999) หมายเหตุ: ต้องอัปเดตเป็นandroidx.profileinstaller:profileinstaller:1.1.0-alpha04
ขึ้นไปด้วย - การเปรียบเทียบระหว่าง
StartupMode.COLD
+CompilationMode.None
มีความเสถียรมากขึ้นแล้ว (I770cd, b/196074999)
เวอร์ชัน 1.1.0-alpha06
18 สิงหาคม 2021
ปล่อย androidx.benchmark:benchmark-*:1.1.0-alpha06
แล้ว เวอร์ชัน 1.1.0-alpha06 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เพิ่มอาร์กิวเมนต์การวัดคุม
androidx.benchmark.iterations
เพื่ออนุญาตให้ลบล้างจำนวนการทำซ้ำด้วยตนเองเมื่อทดสอบ/ทำโปรไฟล์ในเครื่อง (6188be, b/194137879)
แก้ไขข้อบกพร่อง
- เปลี่ยนไปใช้ Simpleperf เป็นเครื่องมือสร้างโปรไฟล์การสุ่มตัวอย่างเริ่มต้นใน API 29+ (Ic4b34, b/158303822)
ปัญหาที่ทราบ
CompilationMode.BaselineProfile
ยังอยู่ระหว่างการพัฒนา หลีกเลี่ยงการใช้เพื่อพิจารณาว่าโปรไฟล์มีประสิทธิภาพดีเพียงใดในขณะนี้
เวอร์ชัน 1.1.0-alpha05
4 สิงหาคม 2021
ปล่อย androidx.benchmark:benchmark-*:1.1.0-alpha05
แล้ว เวอร์ชัน 1.1.0-alpha05 มีคอมมิตเหล่านี้
1.1.0-alpha04
ถูกยกเลิกก่อนการเปิดตัวเนื่องจากมีข้อขัดข้องเกิดขึ้นเป็นครั้งคราว b/193827052
การเปลี่ยนแปลง API
- เปลี่ยน startActivityAndWait เพื่อเรียกใช้การเปิดตัวผ่าน
am start
ซึ่งช่วยลด เวลาในการทำซ้ำการวัดแต่ละครั้งประมาณ 5 วินาที โดยไม่เสียค่าใช้จ่ายอีกต่อไป ไฟล์พาร์เซล Intent (I5a6f5, b/192009149
แก้ไขข้อบกพร่อง
- ลดความแรงของการตรวจจับคันเร่งความร้อน และ คำนวณข้อมูลพื้นฐานใหม่หากตรวจพบตัวควบคุมบ่อยๆ (I7327B)
- แก้ไข FrameTimingMetric ให้ทำงานใน Android S เวอร์ชันเบต้า (Ib60cc, b/193260119)
- ใช้
EmptyActivity
เพื่อให้แอปเป้าหมายออกจากสถานะบังคับหยุดเพื่อให้รองรับCompilationMode.BaselineProfile
ได้ดียิ่งขึ้น (Id7cac, b/192084204) - เปลี่ยนนามสกุลไฟล์การติดตามเป็น
.perfetto-trace
เพื่อให้ตรงกับมาตรฐานแพลตฟอร์ม (I4c236, b/174663039) - ตอนนี้ StartupTimingMetrics" จะเป็นผลของ "fullDrawnMs" เมตริก เพื่อวัดระยะเวลาจนกว่าแอปพลิเคชันของคุณจะแสดงภาพเสร็จสมบูรณ์ ถึง กำหนดเมตริกนี้สำหรับแอป เรียกใช้ Activity.reportFullyDrawn เนื้อหาเริ่มต้นพร้อมใช้งาน เช่น เมื่อรายการเริ่มต้น จะโหลดจากฐานข้อมูลหรือเครือข่าย (เมธอดreportFullyDrawn พร้อมใช้งาน โดยไม่มีการตรวจสอบเวอร์ชันบิลด์ใน ComponentActivity) โปรดทราบว่าการทดสอบต้องใช้เวลานานพอที่จะบันทึกเมตริก (startActivityAndWait จะไม่รอ reportFullyDrawn) (If1141, b/179176560)
- ลดต้นทุนของการเพิ่มข้อมูลเมตาของ Ui ต่อท้ายการติดตามมากกว่า 50 มิลลิวินาที (Ic8390, b/193923003)
- ความถี่ในการทำแบบสำรวจเพิ่มขึ้นอย่างเห็นได้ชัดเมื่อหยุด การติดตามซึ่งสามารถลดจำนวน เช่น รันไทม์เปรียบเทียบการเริ่มต้นใช้งานมากกว่า 30% (Idfbc1, b/193723768)
เวอร์ชัน 1.1.0-alpha03
16 มิถุนายน 2021
ปล่อย androidx.benchmark:benchmark-*:1.1.0-alpha03
แล้ว เวอร์ชัน 1.1.0-alpha03 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เพิ่ม
CompilationMode.BaselineProfile
ใหม่เพื่อรองรับโปรไฟล์ที่ติดตั้งโดยใช้ไลบรารี Jetpack ProfileInstaller (aosp/1720930)
แก้ไขข้อบกพร่อง
ตัวอย่างโค้ด Gradle สำหรับระงับข้อผิดพลาดในการเปรียบเทียบได้รับการอัปเดตให้ใช้ API ที่เลิกใช้งานแล้วซึ่งมีไวยากรณ์ที่รองรับผู้ใช้ .gradle.kts ด้วย
เช่น
testInstrumentationRunnerArguments["androidx.benchmark.suppressErrors"] = "EMULATOR,LOW-BATTERY"
เวอร์ชัน 1.1.0-alpha02
18 พฤษภาคม 2021
การเปรียบเทียบเวอร์ชัน 1.1.0-alpha02 เป็นองค์ประกอบสำคัญในการเปรียบเทียบ นั่นคือการเปรียบเทียบแบบมาโคร นอกจากการเปรียบเทียบจะช่วยให้คุณวัดลูปของ CPU แล้ว การเปรียบเทียบมาโครยังช่วยในการวัดการโต้ตอบทั้งแอป เช่น การเริ่มต้นและการเลื่อน รวมถึงการติดตามการติดตามได้อีกด้วย ดูข้อมูลเพิ่มเติมได้ที่เอกสารประกอบของไลบรารี
ปล่อย androidx.benchmark:benchmark-*:1.1.0-alpha02
แล้ว เวอร์ชัน 1.1.0-alpha02 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
เพิ่มอาร์ติแฟกต์การเปรียบเทียบมาโคร (androidx.benchmark:benchmark-macro-junit4
และ androidx.benchmark:benchmark-macro
) แล้ว
- บันทึกเมตริกประสิทธิภาพการเริ่มต้นใช้งาน การเลื่อน/ภาพเคลื่อนไหวจากแอป ในเครื่อง หรือใน CI
- จับภาพและตรวจสอบการติดตามจากภายใน Android Studio
แก้ไขข้อบกพร่อง
- วิธีแก้ปัญหาเกี่ยวกับสิทธิ์ของ Shell กับไดเรกทอรีเอาต์พุตใน Android 12 (หมายเหตุ - อาจต้องอัปเดตปลั๊กอิน Android Gradle เป็น 7.0.0 Canary และ Android Studio เป็น Arctic Fox (2020.3.1) เพื่อบันทึกไฟล์เอาต์พุตในอุปกรณ์ที่ได้รับผลกระทบต่อไป) (Icb039)
- รองรับการแคชการกำหนดค่าใน BenchmarkPlugin (6be1c1, b/159804788)
- เอาต์พุตไฟล์แบบง่าย - เปิดใช้โดยค่าเริ่มต้นในไดเรกทอรีที่ไม่ต้องใช้
requestLegacyExternalStorage=true
(8b5a4d, b/172376362) - แก้ไขคำเตือน Logcat ของการพิมพ์ไลบรารีเกี่ยวกับการไม่พบการค้นหา เทรด JIT ในเวอร์ชันแพลตฟอร์มที่ไม่มีอยู่ (I9cc63, b/161847393)
- แก้ไขสำหรับการอ่านความถี่สูงสุดของอุปกรณ์ (I55c7a)
เวอร์ชัน 1.1.0-alpha01
10 มิถุนายน 2020
ปล่อย androidx.benchmark:benchmark-common:1.1.0-alpha01
, androidx.benchmark:benchmark-gradle-plugin:1.1.0-alpha01
และ androidx.benchmark:benchmark-junit4:1.1.0-alpha01
แล้ว เวอร์ชัน 1.1.0-alpha01 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่ของ 1.1
- เมตริกการจัดสรร - ตอนนี้การเปรียบเทียบจะทำงานอีกระยะหลังจากอุ่นเครื่องและกำหนดเวลา โดยบันทึกจำนวนการจัดสรร การจัดสรรอาจทำให้เกิดปัญหาด้านประสิทธิภาพบนแพลตฟอร์มเวอร์ชันเก่า (140 นาโนวินาทีใน O กลายเป็น 8 นาโนวินาทีใน M ซึ่งวัดจาก Nexus5X เมื่อนาฬิกามีการล็อกไว้) เมตริกนี้จะแสดงในเอาต์พุตของคอนโซล Android Studio รวมทั้งใน
- การสนับสนุนการจัดทำโปรไฟล์ - ตอนนี้คุณสามารถบันทึกข้อมูลการทำโปรไฟล์สำหรับการเรียกใช้การเปรียบเทียบเพื่อตรวจสอบสาเหตุที่โค้ดอาจทำงานช้าได้แล้ว การเปรียบเทียบรองรับการบันทึกเมธอด Method หรือการสุ่มตัวอย่างเมธอดจาก ART คุณสามารถตรวจสอบไฟล์เหล่านี้ด้วยเครื่องมือสร้างโปรไฟล์ใน Android Studio โดยใช้ไฟล์ > เปิด
- ตอนนี้ปลั๊กอิน การเปรียบเทียบ Gradle มีค่าเริ่มต้น เพื่อการตั้งค่าที่ง่ายขึ้น ดังนี้
testBuildType
ตั้งค่าให้ปล่อยโดยค่าเริ่มต้นเพื่อหลีกเลี่ยงการใช้ทรัพยากร Dependency ที่มีการครอบคลุมของโค้ดในตัว BuildType ที่เผยแพร่ยังได้รับการกำหนดค่าเป็น BuildType เริ่มต้น ซึ่งจะช่วยให้ Android Studio เลือกตัวแปรของบิลด์ที่ถูกต้องได้โดยอัตโนมัติเมื่อเปิดโปรเจ็กต์เป็นครั้งแรก (b/138808399)- ใช้
signingConfig.debug
เป็นการกำหนดค่าการรับรองเริ่มต้น (b/153583269)
** แก้ไขข้อบกพร่อง **
- ลดค่าใช้จ่ายในขั้นตอนการเริ่มระบบก่อนลงเล็กน้อยลงอย่างมาก โดยการวัดผลครั้งแรกของการเปรียบเทียบแต่ละรายการสูงกว่าเกณฑ์อื่นๆ เกินความเป็นจริง ปัญหานี้เห็นได้ชัดเจนกว่าในค่าเปรียบเทียบที่น้อยมาก (ไม่เกิน 1 ไมโครวินาที) (b/142058671)
- แก้ไขข้อผิดพลาด
InstrumentationResultParser
ที่พิมพ์สำหรับการเปรียบเทียบแต่ละรายการเมื่อเรียกใช้จากบรรทัดคำสั่ง (I64988, b/154248456)
ปัญหาที่ทราบ
- บรรทัดคำสั่ง การเรียกใช้ Gradle ของการเปรียบเทียบจะไม่พิมพ์ผลลัพธ์ออกมาโดยตรง คุณแก้ไขปัญหานี้ได้โดยเรียกใช้ผ่าน Studio หรือแยกวิเคราะห์ไฟล์เอาต์พุต JSON เพื่อดูผลลัพธ์
- การรายงานการเปรียบเทียบไม่สามารถดึงรายงานจากอุปกรณ์ที่ติดตั้งแอปซึ่งมี applicationId ที่ลงท้ายด้วย "android" หรือ "download" (ไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่) ผู้ใช้ที่พบปัญหานี้ควรอัปเกรดปลั๊กอิน Android Gradle เป็นเวอร์ชัน 4.2-alpha01 ขึ้นไป
เวอร์ชัน 1.0.0
เวอร์ชันเปรียบเทียบ 1.0.0
20 พฤศจิกายน 2019
ระบบเผยแพร่ androidx.benchmark:benchmark-common:1.0.0
, androidx.benchmark:benchmark-gradle-plugin:1.0.0
และ androidx.benchmark:benchmark-junit4:1.0.0
โดยไม่มีการเปลี่ยนแปลงจาก 1.0.0-rc01 เวอร์ชัน 1.0.0 มีคอมมิตเหล่านี้
ฟีเจอร์หลักของ 1.0.0
ไลบรารีการเปรียบเทียบช่วยให้คุณเขียนข้อความเปรียบเทียบประสิทธิภาพของโค้ดแอปและได้ผลลัพธ์อย่างรวดเร็ว
ซึ่งจะช่วยป้องกันปัญหาการกำหนดค่าบิลด์และรันไทม์ รวมทั้งทำให้ประสิทธิภาพของอุปกรณ์เสถียรเพื่อให้มั่นใจว่าการวัดผลจะมีความถูกต้องและสอดคล้องกัน เรียกใช้การเปรียบเทียบโดยตรงใน Android Studio หรือในการผสานรวมแบบต่อเนื่องเพื่อดูประสิทธิภาพของโค้ดเมื่อเวลาผ่านไป และป้องกันการเกิดปัญหาซ้ำ
ฟีเจอร์หลักๆ ได้แก่
- การป้องกันภาพสั่นไหวของนาฬิกา
- การจัดลําดับความสําคัญของชุดข้อความอัตโนมัติ
- การรองรับการทดสอบประสิทธิภาพของ UI เช่น ใน RecyclerView Sample
- การวอร์มอัพและการวนซ้ำที่รับรู้ JIT
- ผลลัพธ์การเปรียบเทียบ JSON สำหรับการประมวลผลภายหลัง
เวอร์ชัน 1.0.0-rc01
23 ตุลาคม 2019
ปล่อย androidx.benchmark:benchmark-common:1.0.0-rc01
, androidx.benchmark:benchmark-gradle-plugin:1.0.0-rc01
และ androidx.benchmark:benchmark-junit4:1.0.0-rc01
แล้ว เวอร์ชัน 1.0.0-rc01 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เพิ่ม Sytrace Tracing ในการเปรียบเทียบแล้ว
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาความไม่เสถียรของเมตริกที่ JIT ไม่เสร็จสิ้นก่อนการอุ่นเครื่องเนื่องจากมีการลดลำดับความสำคัญ (b/140773023)
- ไดเรกทอรีเอาต์พุต JSON แบบรวมในปลั๊กอิน Android Gradle 3.5 และ 3.6
เวอร์ชัน 1.0.0-beta01
9 ตุลาคม 2019
ปล่อย androidx.benchmark:benchmark-common:1.0.0-beta01
, androidx.benchmark:benchmark-gradle-plugin:1.0.0-beta01
และ androidx.benchmark:benchmark-junit4:1.0.0-beta01
แล้ว เวอร์ชัน 1.0.0-beta01 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เรียกใช้การเก็บข้อมูลขยะก่อนการอุ่นเครื่องแต่ละครั้งเพื่อลดแรงกดของหน่วยความจำจากการเปรียบเทียบหนึ่ง เพื่อรั่วไหลไปยังรายการถัดไป (b/140895105)
แก้ไขข้อบกพร่อง
- เพิ่มทรัพยากร Dependency ของ
androidx.annotation:android-experimental-lint
เพื่อให้โค้ด Java สร้างข้อผิดพลาด Lint ได้อย่างถูกต้องเมื่อไม่มีการใช้ API เวอร์ชันทดลอง ซึ่งคล้ายกับข้อมูลที่คำอธิบายประกอบทดลองของ Kotlin มีให้สำหรับผู้โทร Kotlin - ขณะนี้ตรวจพบการใช้งานอาร์กิวเมนต์เครื่องมือ
additionalTestOutputDir
อย่างถูกต้องสำหรับเอาต์พุตในปลั๊กอิน Android Gradle 3.6 เพื่อให้ทราบเวลาที่ AGP จะจัดการการคัดลอกข้อมูล - แก้ไขความถี่นาฬิกาที่ตรวจไม่พบใน JSON เพื่อให้พิมพ์
-1
ได้อย่างถูกต้อง (b/141945670)
เวอร์ชัน 1.0.0-alpha06
18 กันยายน 2019
ปล่อย androidx.benchmark:benchmark-common:1.0.0-alpha06
, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha06
และ androidx.benchmark:benchmark-junit4:1.0.0-alpha06
แล้ว เวอร์ชัน 1.0.0-alpha06 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เพิ่มการตรวจสอบการใช้แพ็กเกจเก่าอย่างไม่ถูกต้องสำหรับตัวดำเนินการทดสอบ ซึ่งตอนนี้แสดงข้อความแสดงข้อผิดพลาดที่เป็นประโยชน์มากขึ้น
การเปลี่ยนแปลง API
- หมายเหตุการทดลอง
ExperimentalAnnotationReport
แสดงต่อสาธารณะอย่างถูกต้องแล้วในขณะนี้ ขณะนี้การใช้ benchState#report API เวอร์ชันทดลองต้องใช้คำอธิบายประกอบนี้
เวอร์ชัน 1.0.0-alpha05
5 กันยายน 2019
ปล่อย androidx.benchmark:benchmark-common:1.0.0-alpha05
, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha05
และ androidx.benchmark:benchmark-junit4:1.0.0-alpha05
แล้ว คุณสามารถดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
การเปลี่ยนแปลง API
- ตอนนี้
BenchmarkState.reportData
API ได้รับการทำเครื่องหมายว่าเป็นรุ่นทดลอง
แก้ไขข้อบกพร่อง
- แก้ไขสคริปต์การล็อกนาฬิกา ซึ่งจะล้มเหลวในอุปกรณ์ที่ไม่มียูทิลิตี Shell
cut
หรือexpr
- แก้ไขปัญหาเกี่ยวกับงาน
./gradlew lockClocks
ที่จะค้างในอุปกรณ์ที่ได้รับการรูทด้วยยูทิลิตี su เวอร์ชันเก่าซึ่งไม่รองรับ Flag-c
เวอร์ชัน 1.0.0-alpha04
7 สิงหาคม 2019
ปล่อย androidx.benchmark:benchmark-common:1.0.0-alpha04
, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha04
และ androidx.benchmark:benchmark-junit4:1.0.0-alpha04
แล้ว คุณสามารถดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
นอกจากนี้ เรายังได้เพิ่มเอกสารประกอบใหม่เกี่ยวกับวิธีใช้ไลบรารีการเปรียบเทียบโดยไม่ใช้ Gradle ทั้งสำหรับการใช้กับระบบบิลด์ที่แตกต่างกัน (เช่น Bazel หรือ Buck) และเมื่อใช้งานใน CI ดูข้อมูลเพิ่มเติมได้ที่สร้างการเปรียบเทียบโดยไม่ใช้ Gradle และเรียกใช้การเปรียบเทียบในการผสานรวมแบบต่อเนื่อง
ฟีเจอร์ใหม่
- ปลั๊กอิน Gradle
- ตอนนี้ระบบจะปิดใช้การครอบคลุมของการทดสอบโดยอัตโนมัติ และตั้งค่า
AndroidBenchmarkRunner
โดยค่าเริ่มต้น (b/138374050) - เพิ่มการรองรับสำเนาข้อมูลใหม่ที่อิงตาม AGP เมื่อใช้การเปรียบเทียบและเมื่อใช้ AGP 3.6 ขึ้นไป
- ตอนนี้ระบบจะปิดใช้การครอบคลุมของการทดสอบโดยอัตโนมัติ และตั้งค่า
- การเพิ่มรูปแบบ JSON
- เวลาในการทดสอบการเปรียบเทียบเอาต์พุตทั้งหมด (b/133147694)
- ตอนนี้การเปรียบเทียบ
@Parameterized
ที่ใช้สตริงชื่อ (เช่น@Parameters(name = "size={0},depth={1}")
) จะแสดงชื่อและค่าของพารามิเตอร์ต่อการเปรียบเทียบในเอาต์พุต JSON (b/132578772)
- โหมดทดลองเรียกใช้ (b/138785848)
- เพิ่ม "ทดลองเรียกใช้" แล้ว ในการเรียกใช้ลูปการเปรียบเทียบแต่ละรายการเพียงครั้งเดียว เพื่อตรวจสอบข้อผิดพลาด/ข้อขัดข้องโดยไม่ต้องบันทึกการวัด ซึ่งอาจเป็นประโยชน์ เช่น เช่น การใช้เกณฑ์เปรียบเทียบอย่างรวดเร็วในการส่งล่วงหน้าเพื่อตรวจสอบว่าใช้งานได้หรือไม่
การเปลี่ยนแปลง API
- มีการเปลี่ยนแปลงโครงสร้างโมดูล การแยกไลบรารี (b/138451391)
benchmark:benchmark-junit4
มีคลาสที่พึ่งพา JUnit:AndroidBenchmarkRunner
และBenchmarkRule
ซึ่งได้ย้ายไปอยู่ในแพ็กเกจandroidx.benchmark.junit4
แล้วbenchmark:benchmark-common
จะมีตรรกะที่เหลือ รวมถึง BenchmarkState API- การแยกส่วนนี้จะช่วยให้ไลบรารีรองรับการเปรียบเทียบได้โดยไม่ต้องใช้ JUnit4 API ในอนาคต
- คำเตือนการกำหนดค่าถือเป็นข้อผิดพลาดและจะทำให้การทดสอบขัดข้อง (b/137653596)
- ทั้งนี้ก็เพื่อส่งเสริมให้เกิดการวัดผลที่แม่นยำมากขึ้น โดยเฉพาะใน CI
- โดยสามารถลดข้อผิดพลาดเหล่านี้กลับไปเป็นคำเตือนที่มีอาร์กิวเมนต์การวัดคุมได้ ตัวอย่างเช่น
-e androidx.benchmark.suppressErrors "DEBUGGABLE,LOW_BATTERY"
แก้ไขข้อบกพร่อง
- ข้อผิดพลาดเมื่อเขียนไปยังที่จัดเก็บข้อมูลภายนอกในอุปกรณ์ Q จะแสดงข้อความที่สื่อความมากขึ้น พร้อมคำแนะนำเกี่ยวกับวิธีแก้ไขปัญหา
- หน้าจอจะเปิดโดยอัตโนมัติระหว่างการเรียกใช้การเปรียบเทียบ แทนที่จะทำงานล้มเหลวเมื่อหน้าจอปิดอยู่
การมีส่วนร่วมจากภายนอก
- ขอขอบคุณ Sergey Zakharov ร่วมปรับปรุงเอาต์พุต JSON และการแก้ไขปัญหาหน้าจอ
เวอร์ชัน 1.0.0-alpha03
2 กรกฎาคม 2019
ปล่อย androidx.benchmark:benchmark:1.0.0-alpha03
และ androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha03
แล้ว คุณสามารถดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
ฟีเจอร์ใหม่
- แสดงระยะเวลาการนอนหลับเนื่องจากการควบคุมความร้อนตามการเปรียบเทียบในรายงาน JSON ฉบับเต็ม
แก้ไขข้อบกพร่อง
- คุณไม่ควรต้องใช้ปลั๊กอิน Gradle หลังใช้ปลั๊กอิน Android และบล็อก Android แล้ว
- เพิ่มการรองรับรายงานการเปรียบเทียบในอุปกรณ์ Android 10 ที่ใช้พื้นที่เก็บข้อมูลที่กำหนดขอบเขต
เวอร์ชัน 1.0.0-alpha02
6 มิถุนายน 2019
androidx.benchmark:1.0.0-alpha02
และ
ปล่อย androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha02
แล้ว
คุณสามารถดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
โปรดทราบว่าเราถือว่าสคีมา JSON เป็น API เราวางแผนที่จะทำตาม ข้อจำกัดด้านความเสถียรเหมือน API อื่นๆ: มีความเสถียร (มีข้อยกเว้นน้อยมาก) เพียงครั้งเดียว เบต้าและได้รับการแก้ไขในรุ่นสุดท้ายโดยมีการเพิ่มเฉพาะรุ่นย่อยและ การเปลี่ยนแปลง/การนำออกในรุ่นหลัก
การเปลี่ยนแปลง API
สคีมา JSON ที่ปรับปรุงใหม่ การเปลี่ยนแปลงเพิ่มเติมกับสคีมา JSON มีแนวโน้มที่จะ จำกัดเฉพาะการเพิ่มเท่านั้น:
- จัดระเบียบโครงสร้างออบเจ็กต์ผลลัพธ์ใหม่เพื่อรองรับกลุ่มเมตริกเพิ่มเติม ในอนาคต (b/132713021)
- เพิ่มข้อมูลบริบทของการดำเนินการทดสอบ เช่น อุปกรณ์และข้อมูลบิลด์ และ นาฬิกาล็อกอยู่หรือไม่ ไปจนถึงออบเจ็กต์ระดับบนสุด (b/132711920)
- ตอนนี้ชื่อเมตริกเวลามี "ns" อยู่ในชื่อแล้ว (b/132714527)
- สถิติเพิ่มเติมที่เพิ่มขึ้นตามเมตริกที่รายงาน (สูงสุด ค่ามัธยฐาน ต่ำสุด) และ "นาโน" แบบง่ายถูกนำออก สถิติสรุป (b/132713851)
นำเอาต์พุต XML ออกแล้ว (b/132714414)
นำการตรวจจับการควบคุมความร้อนออกจาก API ของ
BenchmarkState.reportData
แล้ว (b/132887006)
แก้ไขข้อบกพร่อง
- แก้ไข
./gradlew lockClocks
ไม่ติดในอุปกรณ์ OS ล่าสุดบางเครื่อง (b/133424037) - ปิดใช้การตรวจหาการควบคุมสำหรับโปรแกรมจำลองแล้ว (b/132880807)
เวอร์ชัน 1.0.0-alpha01
7 พฤษภาคม 2019
ปล่อย androidx.benchmark:benchmark:1.0.0-alpha01
แล้ว คอมมิตที่รวม
ในเวอร์ชันนี้มีให้บริการ
ที่นี่