เปรียบเทียบ
อัปเดตล่าสุด | รุ่นที่เสถียร | รุ่นที่อาจได้รับการเผยแพร่ | รุ่นเบต้า | รุ่นอัลฟ่า |
---|---|---|---|---|
30 กรกฎาคม 2025 | 1.4.0 | - | - | - |
การประกาศทรัพยากร Dependency
หากต้องการเพิ่มทรัพยากร Dependency ใน Benchmark คุณต้องเพิ่มที่เก็บ Maven ของ Google ลงในโปรเจ็กต์ อ่านข้อมูลเพิ่มเติมได้ที่ที่เก็บ Maven ของ Google
มาโครเบนช์มาร์ก
หากต้องการใช้ Macrobenchmark ในโปรเจ็กต์ ให้เพิ่มการอ้างอิงต่อไปนี้ลงในไฟล์ build.gradle
สำหรับ
โมดูล Macrobenchmark
Groovy
dependencies { androidTestImplementation "androidx.benchmark:benchmark-macro-junit4:1.4.0" }
Kotlin
dependencies { androidTestImplementation("androidx.benchmark:benchmark-macro-junit4:1.4.0") }
Microbenchmark
หากต้องการใช้ Microbenchmark
ในโปรเจ็กต์ ให้เพิ่มการอ้างอิงต่อไปนี้ลงในไฟล์ build.gradle
สำหรับ
โมดูล Microbenchmark
Groovy
dependencies { androidTestImplementation "androidx.benchmark:benchmark-junit4:1.4.0" } android { ... defaultConfig { ... testInstrumentationRunner "androidx.benchmark.junit4.AndroidBenchmarkRunner" } }
Kotlin
dependencies { androidTestImplementation("androidx.benchmark:benchmark-junit4:1.4.0") } android { ... defaultConfig { ... testInstrumentationRunner = "androidx.benchmark.junit4.AndroidBenchmarkRunner" } }
ไลบรารี Microbenchmark ยังมีปลั๊กอิน Gradle สำหรับใช้กับโมดูล Microbenchmark ด้วย
ปลั๊กอินนี้จะตั้งค่าการกําหนดค่าบิลด์เริ่มต้นสําหรับโมดูล ตั้งค่าการคัดลอกเอาต์พุตการเปรียบเทียบไปยังโฮสต์ และระบุ
งาน ./gradlew lockClocks
หากต้องการใช้ปลั๊กอิน ให้ใส่บรรทัดต่อไปนี้ในบล็อก `plugins` ในไฟล์ build.gradle
ระดับบนสุด
Groovy
plugins { id 'androidx.benchmark' version '1.4.0' apply false }
Kotlin
plugins { id("androidx.benchmark") version "1.4.0" apply false }
จากนั้นใช้ปลั๊กอินกับไฟล์ build.gradle
ของข้อบังคับ
Groovy
plugins { id 'androidx.benchmark' }
Kotlin
plugins { id("androidx.benchmark") }
ความคิดเห็น
ความคิดเห็นของคุณช่วยเราปรับปรุง Jetpack ให้ดียิ่งขึ้น โปรดแจ้งให้เราทราบหากพบปัญหาใหม่หรือมี ไอเดียในการปรับปรุงไลบรารีนี้ โปรดดูปัญหาที่มีอยู่ ในไลบรารีนี้ก่อนสร้างปัญหาใหม่ คุณสามารถโหวตปัญหาที่มีอยู่ได้โดย คลิกปุ่มดาว
ดูข้อมูลเพิ่มเติมได้ในเอกสารประกอบของเครื่องมือติดตามปัญหา
เวอร์ชัน 1.4
เวอร์ชัน 1.4.0
30 กรกฎาคม 2025
androidx.benchmark:benchmark-*:1.4.0
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.4.0 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลงสำคัญตั้งแต่เวอร์ชัน 1.3.0
Microbenchmark
- ย้ายงาน Gradle
lockClocks
และunlockClocks
ไปไว้ในโปรเจ็กต์การเปรียบเทียบแทนที่จะอยู่ที่ระดับบนสุดเพื่อให้เป็นไปตามการแยกโปรเจ็กต์ Gradle - ปรับโครงสร้าง
BenchmarkRule
เพื่อสร้างบนโครูทีนและรองรับลักษณะการทำงานของyield()
ได้ดีขึ้น วิธีนี้จะช่วยลดความเสี่ยงของ ANR ระหว่างการเรียกใช้การทดสอบประสิทธิภาพได้อย่างมาก โดยเฉพาะการเรียกใช้ CI ที่ใช้เวลานาน หมายเหตุ: การเปรียบเทียบ UI ควรทำงานร่วมกับmeasureRepeatedOnMainThread
มาโครเบนช์มาร์ก
- เพิ่มวิธีแก้ปัญหาใน API 34 ขึ้นไปสำหรับ
CompilationMode.None()
ซึ่งอาจมีประสิทธิภาพไม่สอดคล้องกันเนื่องจาก ART จะยืนยันตอนนี้โดยคอมไพล์แอปบางส่วนหลังจากเปิดตัวครั้งแรก - ฟีเจอร์ทดลอง - ข้อมูลเชิงลึกเกี่ยวกับการเริ่มต้นสามารถไฮไลต์ปัญหาทั่วไปบางอย่างใน Macrobenchmark ของการเริ่มต้นได้โดยการส่ง
MacrobenchmarkRule(..., experimentalConfig = ExperimentalConfig(StartupInsightsConfig(isEnabled = true)))
- เพิ่ม ArtMetric ซึ่งใช้ตรวจหาการคอมไพล์ JIT และการโหลดคลาสที่ไม่ได้เพิ่มประสิทธิภาพได้ ซึ่งทั้ง 2 อย่างนี้มีประโยชน์ในการตรวจสอบการเพิ่มประสิทธิภาพโปรไฟล์พื้นฐาน
โปรไฟล์พื้นฐาน
BaselineProfileRule
จะรวบรวมโปรไฟล์สำหรับแอปแบบหลายกระบวนการแล้ว
การเปลี่ยนแปลงอื่นๆ
- เราได้แยก TraceProcessor ออกมาเป็นไลบรารีของตัวเอง (
androidx.benchmark:benchmark-traceprocessor
) เพื่อให้สามารถใช้ภายนอกเมตริกMacrobenchmark
ได้ในกรณีอื่นๆ นอกจากนี้ยังเรียกใช้ใน JVM บนเดสก์ท็อปได้ด้วยการกำหนด ServerLifecycleManager ของคุณเอง
เวอร์ชัน 1.4.0-rc01
18 มิถุนายน 2025
androidx.benchmark:benchmark-*:1.4.0-rc01
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.4.0-rc01 มีการเปลี่ยนแปลงเหล่านี้
แก้ไขข้อบกพร่อง
- เพิ่มวิธีแก้ปัญหาสำหรับรูปภาพรันไทม์ที่ทำให้
CompilationMode.None()
ไม่วัดประสิทธิภาพในกรณีที่แย่ที่สุดหลังจากทำซ้ำครั้งแรก แต่การแก้ปัญหานี้ต้องมีการหน่วงเวลา 5 วินาทีเพื่อจงใจทำให้รูปภาพรันไทม์เสียหายเมื่อเริ่มต้นชุดมาโครเบนช์มาร์กแต่ละชุด (I4a4f1)
เวอร์ชัน 1.4.0-beta02
4 มิถุนายน 2025
androidx.benchmark:benchmark-*:1.4.0-beta02
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.4.0-beta02 มีการเปลี่ยนแปลงเหล่านี้
การเปลี่ยนแปลง API
- เพิ่ม
BaselineProfileConfig.Builder
เพื่อให้เรียกใช้BaselineProfileRule.collectWithResults()
สำหรับนักพัฒนาแอป Java ได้ง่ายขึ้น (I94905)
เวอร์ชัน 1.4.0-beta01
7 พฤษภาคม 2025
androidx.benchmark:benchmark-*:1.4.0-beta01
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.4.0-beta01 มีการเปลี่ยนแปลงเหล่านี้
การเปลี่ยนแปลง API
- เพิ่มตัวแปรของตัวสร้าง
PerfettoTraceRule
ซึ่งยอมรับPerfettoConfig
(Ie53ba)
แก้ไขข้อบกพร่อง
- อัปเดต
TraceProcessor
รูปแบบลิงก์ข้อมูลเชิงลึกของสตาร์ทอัพเพื่อใช้ปลั๊กอินที่ถูกต้องและตัวคั่นที่ชัดเจนยิ่งขึ้น (:
สั้นกว่า%3A
และรองรับทั้ง 2 แบบ) (Ie18ef) - ใช้การบังคับให้หยุดเพื่อปิดกระบวนการเสมอ แม้ว่าจะรูทและปิดแอปของระบบก็ตาม แก้ไขข้อยกเว้นของแบบฟอร์ม
Expected no stdout/stderr from killall ... No such process
(Idca2c)
การมีส่วนร่วมภายนอก
- เพิ่มตัวแฮนเดิลข้อยกเว้นของพร็อกซีสำหรับ
TraceProcessorHttpServer
(I480f5)
เวอร์ชัน 1.4.0-alpha11
9 เมษายน 2025
androidx.benchmark:benchmark-*:1.4.0-alpha11
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.4.0-alpha11 มีการเปลี่ยนแปลงเหล่านี้
การเปลี่ยนแปลง API
- เปลี่ยนการหมดเวลาของอาร์กิวเมนต์ของ
TraceProcessor
: ระยะเวลาเป็น timeoutMs เพื่อให้ผู้เรียกใช้ Java ใช้งานได้ (I9fbb5) - ทำเครื่องหมายตัวสร้าง
TraceProcessor
เป็นภายใน ผู้เรียกใช้ควรใช้TraceProcessor.startServer
หรือTraceProcessor.runServer
(Ia8c5b)
แก้ไขข้อบกพร่อง
- เมื่อปิดแอปพลิเคชันด้วย
MacrobenchmarkScope.killProcess
ให้ตรวจสอบผลลัพธ์ของคำสั่งปิดเพื่อป้องกันไม่ให้เกิดข้อผิดพลาดแบบเงียบๆ และข้อผิดพลาดที่เกิดจากหมดเวลา (I84555)
การอัปเดตการขึ้นต่อกัน
- ตอนนี้ไลบรารีนี้กำหนดเป้าหมายเป็นระดับภาษา Kotlin 2.0 และต้องใช้ KGP 2.0.0 ขึ้นไป (Idb6b5)
เวอร์ชัน 1.4.0-alpha10
26 มีนาคม 2025
androidx.benchmark:benchmark-*:1.4.0-alpha10
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.4.0-alpha10 มีการเปลี่ยนแปลงเหล่านี้
การเปลี่ยนแปลง API
- เพิ่มระยะหมดเวลาเริ่มต้นสำหรับ
TraceProcessor
การโหลดเซิร์ฟเวอร์และการค้นหาเป็น 120 วินาที (จาก 60/30 วินาทีก่อนหน้านี้) และทำให้ทั้ง 2 อย่างกำหนดค่าได้ด้วยพารามิเตอร์ระยะหมดเวลาเดียว (Ifec87)
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาบางอย่างที่อาจเกิดขึ้นเมื่อทำการเปรียบเทียบหรือบันทึกโปรไฟล์ของแอปที่ไม่มี
profileinstaller
และมีBroadcastReciever
การดำเนินการนี้จะส่งผลต่อการเรียกใช้ในอุปกรณ์ที่รูทแล้วเท่านั้น (Ied308)
เวอร์ชัน 1.4.0-alpha09
12 มีนาคม 2025
androidx.benchmark:benchmark-*:1.4.0-alpha09
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.4.0-alpha09 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เพิ่ม
TraceProcessor
และ Session API ที่มีแฮนเดิลที่ปิดได้เพื่อให้ใช้งานได้ง่ายขึ้นด้วยวงจรที่กำหนดเอง นอกจากนี้ยังเป็นขั้นตอนที่ช่วยให้ใช้ Coroutine และ Java API ได้ง่ายขึ้นด้วย ฟังก์ชันส่วนขยายไปยังTraceProcessor.runServer {}
มีการทำเครื่องหมายว่าอยู่ในขั้นทดลองแล้ว เนื่องจากมีแนวโน้มที่จะย้ายและเปลี่ยนเป็นไม่ใช่เวอร์ชันทดลองในอนาคต (I358b4)
แก้ไขข้อบกพร่อง
- แก้ไขการจับภาพโปรไฟล์เกณฑ์เปรียบเทียบและเกณฑ์พื้นฐานที่ใช้ไม่ได้กับ API 36 เนื่องจากการเปลี่ยนแปลงใน
pgrep
toybox ซึ่งตอนนี้ต้องใช้-a
เพื่อพิมพ์บรรทัดคำสั่งแบบเต็ม (Idc991) - กรองการกำหนดค่าการติดตามเริ่มต้นเพื่อลดความเสี่ยงในการสูญเสียข้อมูลในการติดตามใน API ระดับใหม่กว่า (I54e8a)
- เพิ่ม
androidx.benchmark.killExistingPerfettoRecordings
อาร์กิวเมนต์การวัดผลเวอร์ชันทดลอง ซึ่งตั้งค่าเป็นfalse
เพื่ออนุญาตให้การจับภาพร่องรอย Perfetto ที่มีอยู่ก่อนหน้าดำเนินการต่อได้ โดยค่าเริ่มต้น ระบบจะปิดการบันทึกการติดตาม Perfetto ที่มีอยู่ก่อนแล้วในอุปกรณ์เพื่อป้องกันการรบกวน (I02a3c) - ตอนนี้ฟิลด์ JSON
context.osCodenameAbbreviated
จะเป็นREL
สำหรับเวอร์ชันระบบปฏิบัติการที่เผยแพร่แล้วที่ API 35 ขึ้นไป เนื่องจากแพลตฟอร์มพื้นฐานไม่รองรับชื่อรหัสที่ไม่ใช่ตัวเลขอีกต่อไป (Ib17fd) - แก้ไขข้อขัดข้องใน
FrameTimingMetric
เมื่อเกิดเฟรมที่ซิงค์ใหม่ (I7c6f4, b/394610806) - ไม่ถือว่า
Choreographer#doFrame
เป็นเฟรมสแต็กด้านบนในเทรดหลักสำหรับFrameTimingQuery
อีกต่อไป (Iee0e0, b/340206285)
เวอร์ชัน 1.4.0-alpha08
12 กุมภาพันธ์ 2025
androidx.benchmark:benchmark-*:1.4.0-alpha08
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.4.0-alpha08 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ย้าย API ส่วนขยาย
TraceProcessor.runSession()
ไปเป็นแบบทดลอง เนื่องจากมีแนวโน้มที่จะย้ายไปเป็นตัวสร้างที่ชัดเจนใน Android ในที่สุด (Ib0528, b/393640753) - การใช้งานข้อมูลเชิงลึกสำหรับสตาร์ทอัพส่วนใหญ่ตอนนี้เป็นแบบสาธารณะ/ทดลอง และย้ายไปที่
TraceProcessor
อาร์ติแฟกต์ ดูStartupInsights
(I0aa00) - เลิกใช้งาน
BenchmarkRule.runWithTimingDisabled {}
เพื่อใช้BenchmarkRule.runWithMeasurementDisabled {}
แทน ซึ่งอธิบายลักษณะการทำงานได้ชัดเจนกว่า นั่นคือระบบจะหยุดเมตริกทั้งหมดชั่วคราว นอกจากนี้ ให้แสดงคลาสซูเปอร์คลาสMicrobenchmarkScope
เนื่องจากไม่สามารถประกาศฟังก์ชันrunWithMeasurementDisabled
ซ้ำเพื่อเปิดการเข้าถึงได้เนื่องจากเป็นฟังก์ชันอินไลน์ (I9e23b, b/389149423, b/149979716) - ไลบรารีการวัดประสิทธิภาพย้ายไปที่ Kotlin 2.0 แล้ว (I9d1e0)
- นำอาร์กิวเมนต์การวัดผล
androidx.benchmark.startupProfiles.enable
ออกแล้ว ไม่มีประโยชน์อีกต่อไปเนื่องจากควบคุมได้โดยใช้includeInStartupProfile
arg ในBaselineProfileRule.collect()
(I39eb4)
แก้ไขข้อบกพร่อง
- ลดจำนวนฟังก์ชันภายในของ Microbenchmark ที่เรียกใช้ระหว่างการทำโปรไฟล์เพื่อให้ เช่น ร่องรอยของเมธอดชัดเจนยิ่งขึ้น (Ifaed8)
- การแก้ไขแบบคาดการณ์สำหรับการขัดข้อง: "หยุด [
ProcessPid(processName=perfetto, pid=...)
] ไม่สำเร็จ" ตอนนี้ Benchmark จะบันทึกข้อความแทนที่จะขัดข้องเมื่อหยุดกระบวนการ Perfetto ในเบื้องหลังไม่ได้ก่อนที่จะเรียกใช้การเปรียบเทียบ (I37d3e, b/323601788) - แก้ไข
IllegalStateExceptions
ที่มีป้ายกำกับ "Expectedpm dump-profiles
stdout" ซึ่งเกิดจากการตรวจสอบรูปแบบเอาต์พุตที่เข้มงวดเกินไป (I358dc)
เวอร์ชัน 1.4.0-alpha07
29 มกราคม 2025
androidx.benchmark:benchmark-*:1.4.0-alpha07
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.4.0-alpha07 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
BaselineProfileRule
เปิดตัวcollectWithResults(...)
API ซึ่งมีรายการเส้นทางไปยังโปรไฟล์ที่คำนวณแล้ว (I056f8)- เพิ่ม
androidx.benchmark.measureRepeatedOnMainThread.throwOnDeadline
อาร์กิวเมนต์การวัดคุม ซึ่งตั้งค่าเป็น false เพื่อปิดใช้ลักษณะการทำงานของmeasureRepeatedOnMainThread
เมื่อถึงกำหนดเวลาสำหรับการทดสอบในเครื่องได้ ไม่แนะนำให้ใช้ในกรณีอื่นๆ เนื่องจากจะเพิ่มโอกาสที่จะเกิด ANR ระหว่างการทดสอบ (Idbeec, b/353226476)
การเปลี่ยนแปลง API
- เพิ่ม
@JvmOverloads
ไปยังตัวสร้างMicrobenchmarkConfig
แล้ว (I13fd3) - ปรับโครงสร้าง
BenchmarkRule
เพื่อสร้างบนโครูทีนและรองรับลักษณะการทำงานของyield()
ได้ดีขึ้น การปรับโครงสร้างโค้ดนี้ได้นำBenchmarkState
API เวอร์ชันทดลองหลายรายการออก แต่จะมีการแทนที่ตามความจำเป็น นอกจากนี้ ยังเพิ่มrunWithMeasurementDisabled
เพื่อชี้แจงลักษณะการทำงาน (ระบบจะหยุดการวัดทั้งหมดชั่วคราว) ในอนาคต เราจะเลิกใช้งานrunWithTimingDisabled
(I19837, b/389149423, b/311242861) - ย้าย
PerfettoTraceProcessor
ไปยังTraceProcessor
ในอาร์ติแฟกต์androidx.benchmark:benchmark-traceprocessor
ใหม่ และทําให้ API ส่วนใหญ่ไม่ใช่เวอร์ชันทดลองTraceMetric
ที่กำหนดเองหรือสิ่งใดก็ตามที่อ่านจากร่องรอยจะต้องอัปเดตเป็นการนำเข้าTraceProcessor
ใหม่TraceProcessor
API ใหม่ทำงานเหมือนกับ API เก่าทุกประการ แต่เป็นไลบรารีอินเทอร์เฟซแบบสแตนด์อโลน (คล้ายกับเลเยอร์androidx.sqlite
จาก Room) ที่มีการติดตั้งใช้งานเฉพาะ Android ซึ่งสร้างขึ้นใน Macrobenchmark คุณยังใช้ Artifact ใหม่ใน JVM ได้ด้วย แต่ตอนนี้คุณจะต้องเริ่มสำเนาไบนารีTraceProcessor
ของคุณเองและเสนอพอร์ตเพื่อเชื่อมต่อ (I3a767, I62563, b/381134564)
แก้ไขข้อบกพร่อง
- แสดงข้อความแสดงข้อผิดพลาดที่ชัดเจนยิ่งขึ้นเมื่อ
MacrobenchmarkScope.startActivityAndWait
เปิดกระบวนการเป้าหมายไม่สำเร็จ (อาจเกิดจากกระบวนการเป้าหมายขัดข้อง) แทนที่จะแสดงข้อความ "ยืนยันการเปิดใช้งานกิจกรรมเสร็จสมบูรณ์ไม่ได้" ที่คลุมเครือกว่า (I3539b) - แก้ไขข้อผิดพลาดด้านไวยากรณ์หลายรายการในตัวอย่าง Kotlin และการไฮไลต์ไวยากรณ์ในตัวอย่าง Java / build.gradle หลายรายการ (Ib3808)
- เอกสารพารามิเตอร์
ArtMetric
และCaptureInfo
ที่ปรับปรุงแล้ว (I96e60)
เวอร์ชัน 1.4.0-alpha06
11 ธันวาคม 2024
androidx.benchmark:benchmark-*:1.4.0-alpha06
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.4.0-alpha06 มีการเปลี่ยนแปลงเหล่านี้
การเปลี่ยนแปลง API
- นำการใช้งาน
@Language("sql")
ในPerfettoTraceProcessor.Session.query()
ออกเนื่องจากไฮไลต์/การแยกวิเคราะห์ของ Studio ไม่ทำงาน (Idc2fa, b/377733398)
แก้ไขข้อบกพร่อง
- ตอนนี้ไลบรารีนี้ใช้คำอธิบายประกอบเกี่ยวกับค่า Null ของ JSpecify ซึ่งเป็นแบบใช้ประเภท นักพัฒนาซอฟต์แวร์ Kotlin ควรใช้อาร์กิวเมนต์คอมไพเลอร์ต่อไปนี้เพื่อบังคับใช้การใช้งานที่ถูกต้อง
-Xjspecify-annotations=strict
(นี่คือค่าเริ่มต้นที่เริ่มต้นด้วยคอมไพเลอร์ Kotlin เวอร์ชัน 2.1.0) (I46810, b/326456246) - แก้ไข
ArtMetric
เพื่อรายงานการโหลดคลาส (ไม่ใช่การเริ่มต้น) และปรับปรุงเอกสารเพื่อชี้แจงลักษณะการทำงานของรันไทม์ (I9915c) - ใน Android Multiuser ให้เรียกใช้คำสั่งในฐานะรูทเฉพาะในอุปกรณ์ที่รูทแล้วเท่านั้น (I88b44)
เวอร์ชัน 1.4.0-alpha05
13 พฤศจิกายน 2024
androidx.benchmark:benchmark-*:1.4.0-alpha05
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.4.0-alpha05 มีการเปลี่ยนแปลงเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาใน API 34 ขึ้นไปที่
CompilationMode.None()
จะมีประสิทธิภาพที่ไม่สอดคล้องกันและไม่แสดงถึงประสิทธิภาพเริ่มต้นในกรณีที่แย่ที่สุด วิธีนี้ใช้เพื่อหลีกเลี่ยงการเปลี่ยนแปลงแพลตฟอร์มที่อนุญาตให้สถานะการคอมไพล์ของ ARTverify
คอมไพล์แอปบางส่วน (มีผลกับการโหลดคลาสเท่านั้น) หลังจากเปิดตัวครั้งแรกไม่นาน (Ie48d0) - แก้ไขปัญหาที่การติดตาม (โดยเฉพาะการติดตามระยะสั้น) อาจจับภาพได้ แต่จะไม่รายงานการวัดจากเมตริก Macrobenchmark ในตัว เนื่องจากชื่อกระบวนการถูกตัดทอนภายในร่องรอย Perfetto ตอนนี้ Macrobenchmark แก้ปัญหานี้ด้วยการค้นหาชื่อแพ็กเกจที่ถูกตัดทอนในคำค้นหาในตัวทั้งหมด นอกเหนือจากชื่อแพ็กเกจที่คาดไว้ โปรดทราบว่าการติดตั้งใช้งาน
TraceMetric
ที่กำหนดเองหรือผู้เรียกใช้PerfettoSession.query
โดยตรงอื่นๆ สามารถติดตั้งใช้งานลักษณะการทำงานเดียวกันนี้ได้โดยเปลี่ยนprocess.name LIKE "$packageName"
ในการค้นหา Perfetto เป็น(process.name LIKE "$packageName" OR process.name LIKE "$(packageName.takeLast(15))")
แทน (I5bf01, b/377565760)
เวอร์ชัน 1.4.0-alpha04
30 ตุลาคม 2024
androidx.benchmark:benchmark-*:1.4.0-alpha04
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.4.0-alpha04 มีการเปลี่ยนแปลงเหล่านี้
ฟีเจอร์ใหม่
- (ทดลอง) เปิดใช้การสร้างโปรไฟล์พื้นฐานและการเปรียบเทียบประสิทธิภาพในแอปที่ติดตั้งให้กับผู้ใช้รอง เช่น แอปในอุปกรณ์ Android Auto ที่ไม่มีส่วนหัว เราได้ทดสอบการรองรับนี้ในบางสถานการณ์แล้ว แต่โปรดแจ้งให้เราทราบหากพบข้อบกพร่องในกรณีที่การรองรับนี้ใช้ไม่ได้กับคุณ (I9fcbe, b/356684617, b/373641155)
แก้ไขข้อบกพร่อง
- ตอนนี้ระบบจะลบล้าง
isProfileable
ในบิลด์การเปรียบเทียบเสมอ และจะลบล้างisDebuggable
ในบิลด์การเปรียบเทียบและnonMinified
(การจับภาพโปรไฟล์พื้นฐาน) เสมอเช่นกัน (I487fa, b/369213505) - แก้ไขการตรวจหาการคอมไพล์ในอุปกรณ์จริงบางเครื่องก่อน API 28 ซึ่งส่งผลต่อ json
context.compilationMode
รวมถึงลักษณะการทำงานของandroidx.benchmark.requireAot=true
(ซึ่งจะไม่ทิ้งข้อผิดพลาดอย่างไม่ถูกต้องอีกต่อไป) (Ic3e08, b/374362482) - ในเมตริก
CpuEventCounter
ให้ส่งข้อยกเว้นหากพบการวัดที่ไม่ถูกต้อง (เช่น instructions/cpucycles==0) (I8c503)
เวอร์ชัน 1.4.0-alpha03
16 ตุลาคม 2024
androidx.benchmark:benchmark-*:1.4.0-alpha03
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.4.0-alpha03 มีการเปลี่ยนแปลงเหล่านี้
การเปลี่ยนแปลง API
- Macrobenchmark: เพิ่ม
ArtMetric
ซึ่งใช้เพื่อตรวจสอบความครอบคลุมของโปรไฟล์หรือประสิทธิภาพทั่วไปของ Android RunTime ได้ บันทึกจำนวนและระยะเวลาทั้งหมดของ JIT, การเริ่มต้นชั้นเรียน (หากมี) และการยืนยันชั้นเรียน นอกจากนี้ ยังมีการเปลี่ยนแปลงCaptureInfo
เพื่อรวมเวอร์ชัน ART mainline ที่ไม่บังคับไว้ด้วยโดยค่าเริ่มต้น (I930f7) - เพิ่ม
coefficientOfVariation
ลงในเอาต์พุต JSON ของการเปรียบเทียบเพื่อแสดงความเสถียรในการเรียกใช้การเปรียบเทียบที่กำหนด (Ib14ea)
แก้ไขข้อบกพร่อง
- แก้ไข
CollectBaselineProfileTask
เมื่ออุปกรณ์ AVD มีช่องว่าง (Ia0225, b/371642809) - การแก้ไขข้อผิดพลาดที่อาจเกิดขึ้นจากข้อยกเว้น
StartupMode.COLD
:Package <packagename> must not be running prior to cold start!
ตอนนี้MacrobenchmarkScope.killProcess()
(รวมถึงรายการที่เรียกใช้ก่อนการวนซ้ำแต่ละครั้ง ซึ่งใช้เพื่อใช้ลักษณะการทำงานของStartupMode.COLD
) จะรอเพื่อยืนยันว่ากระบวนการของแอปหยุดทำงานทั้งหมดแล้ว (I60aa6, b/351582215) - แก้ไขปัญหาที่ข้อผิดพลาด UNLOCKED_ จะแสดงในโปรแกรมจำลองที่รูทแล้วบางโปรแกรม (Ic5117)
- ตอนนี้ไลบรารีนี้ใช้คำอธิบายประกอบเกี่ยวกับค่า Null ของ JSpecify ซึ่งเป็นแบบใช้ประเภท นักพัฒนาซอฟต์แวร์ Kotlin ควรใช้อาร์กิวเมนต์คอมไพเลอร์ต่อไปนี้เพื่อบังคับใช้การใช้งานที่ถูกต้อง
-Xjspecify-annotations=strict
(นี่คือค่าเริ่มต้นที่เริ่มต้นด้วยคอมไพเลอร์ Kotlin เวอร์ชัน 2.1.0) (I7104f, b/326456246)
เวอร์ชัน 1.4.0-alpha02
2 ตุลาคม 2024
androidx.benchmark:benchmark-*:1.4.0-alpha02
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.4.0-alpha02 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ย้ายงาน Gradle
lockClocks
และunlockClocks
ไปไว้ในโปรเจ็กต์การเปรียบเทียบแทนที่จะอยู่ที่ระดับบนสุด การเปลี่ยนแปลงนี้จำเป็นเนื่องจากไม่มีวิธีลงทะเบียนการดำเนินการเหล่านี้เป็นการดำเนินการระดับบนสุดโดยไม่ละเมิดการแยกโปรเจ็กต์ (I02b8f, b/363325823)
แก้ไขข้อบกพร่อง
BaselineProfileRule
จะรวบรวมโปรไฟล์สำหรับแอปแบบหลายกระบวนการโดยการส่งสัญญาณแต่ละกระบวนการที่กำลังทำงานที่ส่วนท้ายของบล็อกเพื่อทิ้งโปรไฟล์ หากการคอมไพล์ตามโปรไฟล์ไม่พบกระบวนการที่จะออกอากาศ การคอมไพล์จะล้มเหลว เนื่องจากไม่คาดคิดว่าจะมีข้อมูลโปรไฟล์อยู่ภายใน นอกจากนี้ ยังได้เพิ่มอาร์กิวเมนต์การวัดผลเพื่อควบคุมระยะเวลารอการทิ้งข้อมูล:androidx.benchmark.saveProfileWaitMillis
(I0f519, b/366231469)- จาก Benchmark
1.3.2
: แก้ไขปัญหาที่ Firebase Test Lab (FTL) ดึงไฟล์ผลลัพธ์ของ Baseline Profile หรือ Macrobenchmark จากปลั๊กอิน Baseline Profile Gradle ไม่ได้ (I2f678, b/285187547)
หากต้องการใช้ FTL ให้ใช้ปลั๊กอินกับโมดูลโปรไฟล์พื้นฐานในบล็อกปลั๊กอิน โดยมีสิ่งต่อไปนี้
plugins {
...
id("com.google.firebase.testlab")
}
จากนั้นกำหนดค่า Firebase Test Lab ด้วยข้อมูลต่อไปนี้
firebaseTestLab {
// Credentials for FTL service
serviceAccountCredentials.set(file("credentials.json"))
// Creates one or more managed devices to run the tests on.
managedDevices {
"ftlDeviceShiba34" {
device = "shiba"
apiLevel = 34
}
}
// Ensures the baseline profile is pulled from the device.
// Note that this will be automated as well later with aosp/3272935.
testOptions {
results {
directoriesToPull.addAll("/storage/emulated/0/Android/media/${android.namespace}")
}
}
}
นอกจากนี้ คุณต้องเพิ่มอุปกรณ์ FTL ที่สร้างขึ้นในส่วนขยายโปรไฟล์พื้นฐานด้วย โดยทำดังนี้
baselineProfile {
managedDevices += "ftlDeviceShiba34"
useConnectedDevices = false
}
เวอร์ชัน 1.4.0-alpha01
18 กันยายน 2024
androidx.benchmark:benchmark-*:1.4.0-alpha01
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.4.0-alpha01 มีการเปลี่ยนแปลงเหล่านี้
ฟีเจอร์ใหม่ - ข้อมูลเชิงลึกเกี่ยวกับการเริ่มต้นของแอป
- คุณเปิดใช้ข้อมูลเชิงลึกเกี่ยวกับการเริ่มต้นแอปเวอร์ชันแรกได้ใน Macrobenchmark (09fae38)
วิธีเปิดใช้ในการเปรียบเทียบสตาร์ทอัป
@Test
fun startup {
macrobenchmarkRule.measureRepeated(
…
packageName = "com.example.my.application.id"
metrics = listOf(StartupTimingMetric()),
iterations = 5,
startupMode = StartupMode.COLD,
compilationMode = CompilationMode.None(),
experimentalConfig = ExperimentalConfig(startupInsightsConfig = StartupInsightsConfig(isEnabled = true))
) {
scope.startActivityAndWait(...)
}
}
จากนั้นการเรียกใช้การเปรียบเทียบสตาร์ทอัพจะวิเคราะห์การติดตามเพื่อค้นหาปัญหาที่พบบ่อย และพิมพ์ปัญหาเหล่านั้นหลังจากเมตริกไปยังเอาต์พุตการทดสอบ Studio ในแท็บการเปรียบเทียบ เช่น
StartupBenchmark_startup[startup=COLD,compilationMode=None]
├── Metrics
│ ├── timeToFullDisplayMs min 1,147.2, median 1,208.8, max 1,307.4
│ └── timeToInitialDisplayMs min 1,147.2, median 1,208.8, max 1,307.4
├── App Startup Insights
│ ├── App in debuggable mode (expected: false)
│ │ └── seen in iterations: 0(true) 1(true) 2(true) 3(true) 4(true) 5(true) 6(true) 7(true) 8(true) 9(true)
│ ├── Potential CPU contention with another process (expected: < 100000000ns)
│ │ └── seen in iterations: 4(105022546ns)
│ └── Main Thread - Binder transactions blocked (expected: false)
│ └── seen in iterations: 7(true)
└── Traces
└── Iteration 0 1 2 3 4 5 6 7 8 9
ฟีเจอร์นี้ยังอยู่ระหว่างการพัฒนา โดยจะมีการปรับปรุงเอกสารประกอบและความสามารถในการขยายเพิ่มเติมในอนาคต แต่เรายินดีรับฟังความคิดเห็น
ฟีเจอร์ใหม่
- เพิ่มพร็อพเพอร์ตี้ Gradle
androidx.baselineprofile.suppressWarnings
เพื่อระงับคำเตือนเกี่ยวกับโปรไฟล์พื้นฐานทั้งหมด (314153a) - ตอนนี้เมตริก Microbench จะแสดงในร่องรอย Perfetto เป็นตัวนับ (3214854)
- เพิ่มสคริปต์ทดลองเพื่อปิดใช้ JIT (ต้องใช้การรีบูตรูท / รันไทม์) และรีเซ็ตสถานะประสิทธิภาพ/การทดสอบของอุปกรณ์ ขณะนี้ยังไม่ได้เผยแพร่เป็นงาน Gradle (7c3732b)
- เพิ่มอาร์กิวเมนต์การเปรียบเทียบเพื่อข้ามการทดสอบเมื่อเรียกใช้ในโปรแกรมจำลอง เมื่อเปิดใช้
automaticGenerationDuring
build แล้ว การเปรียบเทียบจะทริกเกอร์การสร้างโปรไฟล์พื้นฐานด้วย การดำเนินการนี้จะล้มเหลวหากใช้โปรแกรมจำลอง อาร์กิวเมนต์ใหม่skipBenchmarksOnEmulator
ช่วยให้เราข้ามการทดสอบได้แทน (0c2ddcd) - เปลี่ยนตรรกะการเปิดใช้เหตุการณ์ perf ให้ทำงานใน API 23 ขึ้นไป (2550048)
การเปลี่ยนแปลง API
- ย้ายอาร์กิวเมนต์
PerfettoConfig
ที่เป็นเวอร์ชันทดลองที่มีอยู่ไปยังออบเจ็กต์ExperimentalConfig
ใหม่MacrobenchmarkRule.measureRepeated()
แก้ไขข้อบกพร่อง
- เพิ่มจำนวนการลองอีกครั้ง
lockClocks.sh
(99e9dac) - อย่าสร้าง
nonMinified
และประเภทการสร้างการเปรียบเทียบ หากมีอยู่แล้ว เนื่องจากข้อบกพร่อง แม้ว่าจะมีประเภทบิลด์nonMinified
และการเปรียบเทียบอยู่แล้ว ระบบก็จะสร้างขึ้นใหม่ (e75f0a5) - ไม่สนใจสไลซ์ที่ไม่สิ้นสุดจากผลลัพธ์
TraceSectionMetric
(a927d20) - ปรับปรุงการตรวจสอบโปรแกรมจำลองเพื่อพิจารณาคำนำหน้า
sdk_
(1587de8) - ถือว่าแพ็กเกจที่ไม่ได้ใช้งานถูกล้างแล้วใน
FrameTimingGfxInfoMetric
(35cc79c) - แก้ไข
androidx.benchmark.cpuEventCounter
ที่สร้างค่าที่เสียหายสําหรับเหตุการณ์ที่ไม่ใช่คําสั่ง (06edd59) - แก้ไข
resumeTiming/runWithTimingDisabled
เพื่อให้เป็นไปตามลำดับความสำคัญของเมตริก และลดผลกระทบของการหยุดชั่วคราว/กลับมาทำงานต่อของเมตริกที่มีลำดับความสำคัญต่ำต่อผลลัพธ์ของเมตริกที่มีลำดับความสำคัญสูงกว่าอย่างมาก เช่น หากใช้ตัวนับประสิทธิภาพ CPU ผ่านอาร์กิวเมนต์การวัดcpuEventCounter.enable
เวลาในหน่วยนาโนวินาทีจะไม่ลดลงอย่างเห็นได้ชัดอีกต่อไปเมื่อเกิดการหยุดชั่วคราว/กลับมาทำงานต่อ (5de0968)
เวอร์ชัน 1.3
เวอร์ชัน 1.3.4
26 มีนาคม 2025
androidx.benchmark:benchmark-*:1.3.4
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.3.4 มีการเปลี่ยนแปลงเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขความไม่เข้ากันของการแยกโปรเจ็กต์ Gradle ในปลั๊กอิน Gradle ของเกณฑ์พื้นฐานการเปรียบเทียบ (b/404523257)
เวอร์ชัน 1.3.3
16 ตุลาคม 2024
androidx.benchmark:benchmark-*:1.3.3
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.3.3 มีการเปลี่ยนแปลงเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไข
CollectBaselineProfileTask
เมื่ออุปกรณ์ AVD มีช่องว่าง (Ia0225, b/371642809)
เวอร์ชัน 1.3.2
2 ตุลาคม 2024
androidx.benchmark:benchmark-*:1.3.2
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.3.2 มีการเปลี่ยนแปลงเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ Firebase Test Lab (FTL) ดึงไฟล์ผลลัพธ์ของ Baseline Profile หรือ Macrobenchmark จากปลั๊กอิน Baseline Profile Gradle ไม่ได้ (I2f678, b/285187547)
หากต้องการใช้ FTL ให้ใช้ปลั๊กอินกับโมดูลโปรไฟล์พื้นฐานในบล็อกปลั๊กอิน โดยมีสิ่งต่อไปนี้
plugins {
...
id("com.google.firebase.testlab")
}
จากนั้นกำหนดค่า Firebase Test Lab ด้วยข้อมูลต่อไปนี้
firebaseTestLab {
// Credentials for FTL service
serviceAccountCredentials.set(file("credentials.json"))
// Creates one or more managed devices to run the tests on.
managedDevices {
"ftlDeviceShiba34" {
device = "shiba"
apiLevel = 34
}
}
// Ensures the baseline profile is pulled from the device.
// Note that this will be automated as well later with aosp/3272935.
testOptions {
results {
directoriesToPull.addAll("/storage/emulated/0/Android/media/${android.namespace}")
}
}
}
นอกจากนี้ คุณต้องเพิ่มอุปกรณ์ FTL ที่สร้างขึ้นในส่วนขยายโปรไฟล์พื้นฐานด้วย โดยทำดังนี้
baselineProfile {
managedDevices += "ftlDeviceShiba34"
useConnectedDevices = false
}
เวอร์ชัน 1.3.1
18 กันยายน 2024
androidx.benchmark:benchmark-*:1.3.1
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.3.1 มีการเปลี่ยนแปลงเหล่านี้
แก้ไขข้อบกพร่อง
- เพิ่มพร็อพเพอร์ตี้ Gradle
androidx.baselineprofile.suppressWarnings
เพื่อระงับคำเตือนเกี่ยวกับโปรไฟล์พื้นฐานทั้งหมด (I7c36e, b/349646646) - แก้ไขปลั๊กอิน Gradle ของ Baseline Profile ให้ใช้
nonMinified…
และbenchmark…
ที่มีอยู่แล้วหากแอปสร้างขึ้นเองแทนการสร้าง Wrapper (Ia8934, b/361370179) - แก้ไข
java.lang.AssertionError: ERRORS (not suppressed): EMULATOR
เมื่อเปิดใช้automaticGenerationDuringBuild
ในโปรแกรมจำลอง ใช้การอาร์กิวเมนต์ใหม่เพื่อข้ามการทดสอบแทน (If3f51, b/355515798) - การลดขนาด Microbenchmark - เก็บคลาสย่อยของ
org.junit.runner.notification.RunListener
ไว้ใน ProGuard ของไลบรารีการทดสอบประสิทธิภาพ (Ic8ed5, b/354264743) - แก้ไข
TraceSectionMetric
เพื่อไม่สนใจสไลซ์ที่ไม่สิ้นสุด ก่อนหน้านี้ ระบบจะถือว่าเหตุการณ์เหล่านี้มีระยะเวลา -1 เช่น ในระหว่างการหาผลรวมหรือหาระยะเวลาขั้นต่ำ (If74b7) - แก้ไขปัญหาใน
FrameTimingGfxInfoMetric
ที่การเริ่มต้นเมตริกจะทำให้เกิดข้อขัดข้องหากกระบวนการยังไม่ได้ทำงาน (I6e412)
เวอร์ชัน 1.3.0
21 สิงหาคม 2024
androidx.benchmark:benchmark-*:1.3.0
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.3.0 มีการเปลี่ยนแปลงเหล่านี้
การเปลี่ยนแปลง Microbenchmark ตั้งแต่เวอร์ชัน 1.2.0
- การติดตามเมธอดจะเปิดอยู่โดยค่าเริ่มต้นใน Microbenchmark เมื่อเรียกใช้ในอุปกรณ์ส่วนใหญ่
- การติดตามเมธอดจะทำงานเป็นเฟสแยกต่างหากหลังจากการวัด ซึ่งช่วยให้การวัดและร่องรอยเมธอดมีความแม่นยำและสามารถส่งออกจากการเรียกใช้การเปรียบเทียบครั้งเดียวได้
- การติดตามเมธอดในระบบปฏิบัติการ Android และ ART บางเวอร์ชันจะส่งผลต่อระยะการวัดผลในภายหลัง ในเวอร์ชันเหล่านี้ การติดตามเมธอดจะปิดอยู่โดยค่าเริ่มต้น และจะมีการพิมพ์คำเตือนไปยังเอาต์พุตของ Studio
- การเปรียบเทียบเทรดหลักและ ANR
- เพิ่ม
measureRepeatedOnMainThread
สำหรับการเปรียบเทียบเธรด UI (เช่น เธรดที่โต้ตอบกับ UI ของ Compose/View) เพื่อหลีกเลี่ยง ANR เมื่อเรียกใช้เป็นเวลาหลายวินาที - ระบบจะข้ามการติดตามเมธอดหากคาดว่าจะเกินกำหนดเวลาการหลีกเลี่ยง ANR ตั้งค่า
androidx.benchmark.profiling.skipWhenDurationRisksAnr
เป็น false เพื่อปิดใช้ลักษณะการทำงานนี้ (ไม่แนะนำสำหรับการเรียกใช้ CI เนื่องจาก ANR อาจทำให้เกิดปัญหาในการเรียกใช้ 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
) ควรจะรองรับในโปรแกรมจำลอง userdebug บางตัว แต่ยังไม่ได้ทดสอบการรองรับในโปรแกรมจำลองที่มีอยู่ทั้งหมด
- ฟีเจอร์ตัวนับเหตุการณ์ CPU เวอร์ชันทดลอง (เมตริกจาก
การเปลี่ยนแปลง MACRObenchmark ตั้งแต่เวอร์ชัน 1.2.0
- การยกเครื่องการติดตามวิธีการสำหรับมาโครเบนช์มาร์ก
- ตอนนี้การติดตามเมธอดจะกำหนดขอบเขตตามระยะเวลาของ
measureBlock
และสามารถบันทึกหลายเซสชันได้หากกระบวนการเริ่มต้นหลายครั้ง - ก่อนหน้านี้ การติดตามเมธอดจะใช้ได้กับเกณฑ์มาตรฐาน
StartupMode.COLD
เท่านั้น และจะไม่บันทึกอะไรเลยสำหรับmeasureBlocks
ที่ไม่ได้รีสตาร์ทกระบวนการเป้าหมาย - การติดตามเมธอดที่แก้ไขจะล้างข้อมูลใน Macrobenchmark เพื่อให้การติดตามเมธอดได้รับการบันทึกอย่างครบถ้วนและถูกต้อง แม้ในอุปกรณ์ที่ช้ากว่า (I6349a, b/329904950)
- ตอนนี้การติดตามเมธอดจะกำหนดขอบเขตตามระยะเวลาของ
- ทิ้งโปรไฟล์ ART อย่างถูกต้องในระหว่าง
warmUp
การทำซ้ำแต่ละครั้งเมื่อกระบวนการถูกปิด เพื่อให้การวัดCompilationMode.Partial(warmup=N)
มีความแม่นยำมากขึ้น (I17923) - ข้อความแสดงความล้มเหลวในการออกอากาศของ Drop Shader
- เพิ่มคำแนะนำในการแก้ไขข้อบกพร่องลงในข้อความแสดงข้อผิดพลาดในการออกอากาศที่ใช้ดรอปเชเดอร์
- เพิ่มอาร์กิวเมนต์การวัดผล 2 รายการเพื่อลบล้างลักษณะการทำงานของการทิ้ง Shader เพื่อหลีกเลี่ยงข้อขัดข้องเมื่อแอปเปรียบเทียบประสิทธิภาพโดยไม่มี
ProfileInstaller
1.3:androidx.benchmark.dropShaders.enable=true/false
: สามารถใช้เพื่อข้ามการดรอปของ Shader ทั้งหมด (รวมถึงที่ทำในStartupMode.Cold
launches) โดยเฉพาะเมื่อใช้แอปการเปรียบเทียบที่ยังไม่ได้ใช้ profileinstaller 1.3androidx.benchmark.dropShaders.throwOnFailure=true/false
: สามารถใช้เพื่อยอมรับความล้มเหลวเมื่อพยายามทิ้งเชเดอร์ เช่น เมื่อแอปเปรียบเทียบประสิทธิภาพโดยไม่มี profileinstaller 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)
- ตอนนี้รองรับ Slice ที่สร้างโดยใช้
Trace.{begin|end}AsyncSection
แล้ว
- หมายเหตุ:
- เมตริก
- พลังงาน - เพิ่ม
PowerMetric.deviceSupportsHighPrecisionTracking
,PowerMetric.deviceBatteryHasMinimumCharge()
และPowerMetric.deviceSupportsPowerEnergy()
- เปลี่ยนชื่อ
Metric.getResult
เป็นgetMeasurements
ให้ตรงกับประเภทการคืนสินค้า - เพิ่มป้ายกำกับ log.w / exception ในการตรวจหาการเริ่มต้นทั้งหมดที่ล้มเหลว การดำเนินการนี้ไม่ได้เปลี่ยนแปลงลักษณะการทำงานปัจจุบัน (ดังนั้นข้อผิดพลาดบางอย่างจะแสดงขึ้น และข้อผิดพลาดอื่นๆ จะตรวจหาการเริ่มต้นระบบไม่สำเร็จโดยไม่มีการแจ้งเตือน) แต่จะทำให้เข้าใจได้ง่ายขึ้น โดยทั่วไปแล้ว เหตุการณ์ที่
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)
- พลังงาน - เพิ่ม
การจับภาพ Baseline Profile / การเปลี่ยนแปลงปลั๊กอิน 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 เพื่อเปิดใช้การสร้างโปรไฟล์พื้นฐานและการเปรียบเทียบเมื่อปรับแต่งประเภทบิลด์
nonMinified
หรือการเปรียบเทียบBaselineProfile
(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 โดยค่าเริ่มต้นในการเปรียบเทียบ ซึ่งจะบันทึกข้อมูล เช่น จุดติดตาม Wakelock (Icfe44, b/286551983)
- เพิ่มระยะหมดเวลาเริ่มต้นการจับภาพการติดตามเพื่อหลีกเลี่ยงข้อขัดข้องเมื่อเริ่มการติดตามในอุปกรณ์ที่ช้ากว่า (I98841, b/329145808)
- เพิ่ม API สาธารณะ
PerfettoTraceProcessor.Session.queryMetrics
API ที่มีรูปแบบ JSON, textproto และ proto binary (ยังไม่ได้ถอดรหัส) ซึ่งจะช่วยให้คุณค้นหาเมตริกที่สร้างขึ้นในTraceProcessor
(I54d7f, b/304038382) ได้ - เปิดใช้การบล็อกเริ่มต้นในบันทึกการติดตาม Perfetto เพื่อลดความเสี่ยงที่จะพลาดข้อมูลในช่วงต้นของการติดตาม รองรับเฉพาะใน API 33 ขึ้นไป (Ie6e41, b/310760059)
- เอาต์พุต JSON
- เพิ่มข้อมูลเพิ่มเติมในบริบทการเปรียบเทียบในเอาต์พุต JSON ดังนี้
context.artMainlineVersion
- เวอร์ชันจำนวนเต็มของโมดูลเมนไลน์ Art (หากมีในอุปกรณ์-1
มิฉะนั้น)context.build.id
- เท่ากับ android.os.Build.IDcontext.build.version.codename
- เท่ากับ android.os.Build.VERSION.CODENAMEcontext.build.version.abbreviatedCodename
- สอดคล้องกับตัวอักษรแรกของชื่อรหัสก่อนเปิดตัว (รวมถึงในบิลด์ที่เผยแพร่) (Ie5020)
- เพิ่มรายการ
profilerOutput
ลงในเอาต์พุต JSON เพื่อให้ใช้เครื่องมือเกี่ยวกับร่องรอยการสร้างโปรไฟล์ได้ง่ายขึ้น (เช่น Perfetto, ร่องรอยของเมธอด) (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
เวลาในหน่วยนาโนวินาทีจะไม่ลดลงอย่างเห็นได้ชัดอีกต่อไปเมื่อเกิดการหยุดชั่วคราว/กลับมาทำงานต่อ (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 เพื่อส่งชื่อแพ็กเกจเป็นอาร์กิวเมนต์ของเครื่องมือ ก่อน 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) - เพิ่ม API
BlackHole.consume()
เวอร์ชันทดลองเพื่อป้องกันการกำจัดโค้ดที่ไม่ได้ใช้ใน Microbenchmark (If6812, b/286091643) - ตอนนี้ Microbenchmark จะส่งข้อยกเว้นอย่างถูกต้องเพื่อป้องกันไม่ให้การติดตามเมธอดรบกวนการวัดผล ปัญหานี้เกิดขึ้นในอุปกรณ์บางเครื่องเมื่อมีการบังคับเปิดการติดตามเมธอด (ผ่านอาร์กิวเมนต์การวัดประสิทธิภาพหรือ
MicrobenchmarkConfig
) และหากมีการพยายามวัดผลหลังจากการติดตามเมธอด อุปกรณ์ที่ได้รับผลกระทบใช้ API 26-30 หรือ ART mainline module บางเวอร์ชันที่ได้รับผลกระทบจากการรบกวนนี้ และตรวจพบได้ขณะรันไทม์ผ่าน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 (หากมีในอุปกรณ์ หรือ -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) - เปลี่ยนการขึ้นต่อกันของมาโคร -> ทั่วไปเป็น
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 มีการเปลี่ยนแปลงเหล่านี้
แก้ไขข้อบกพร่อง
- แสดงข้อยกเว้นที่ชัดเจนยิ่งขึ้นเมื่อเมตริก Macrobench แสดงค่าเป็น 0 สำหรับการวนซ้ำทั้งหมด (Iab58f, b/314931695)
- เพิ่มกฎการแก้ปัญหาเพิ่มเติมลงในกฎ ProGuard ของ Microbenchmark รวมถึงการรองรับกฎ 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)
- ทำให้การบันทึกการติดตามเมธอดสำหรับ Macrobenchmark ง่ายขึ้นโดยกำหนดขอบเขตตามระยะเวลาของ
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, textproto และไบนารี proto (ยังไม่ได้ถอดรหัส) ซึ่งจะช่วยให้คุณค้นหาเมตริกที่สร้างไว้ใน TraceProcessor (I54d7f, b/304038382) ได้ - เพิ่ม
profilerOutput
ลงในเอาต์พุต JSON เพื่อให้ใช้เครื่องมือต่างๆ เกี่ยวกับร่องรอยการทำโปรไฟล์ได้ง่ายขึ้น (เช่น perfetto, ร่องรอยของเมธอด) (I05ddd, b/332604449) - เพิ่มแท็กพลังงานลงในการกำหนดค่า Perfetto สำหรับการเปรียบเทียบ ซึ่งจะบันทึกข้อมูล เช่น จุดติดตาม Wakelock (Icfe44, b/286551983)
- เพิ่มอาร์กิวเมนต์ inst
androidx.benchmark.profiling.skipWhenDurationRisksAnr
ซึ่งตั้งค่าเป็น false ได้เพื่อหลีกเลี่ยงการข้ามการติดตามเมธอดเมื่อระยะเวลาที่คาดไว้อาจทำให้เกิด ANR - ขอแนะนำอย่างยิ่งให้หลีกเลี่ยงในการเรียกใช้ CI - เพิ่มอาร์กิวเมนต์
androidx.benchmark.profiling.perfCompare.enable
ในการทดสอบ ตั้งค่าเป็นจริงเพื่อเรียกใช้การกำหนดเวลาการเปรียบเทียบระหว่างระยะการวัดและการสร้างโปรไฟล์ มีประโยชน์ในกรณีต่างๆ เช่น การประเมินค่าใช้จ่ายในการติดตามเมธอด (I61fb4, b/329146942)
การเปลี่ยนแปลง API
- เปลี่ยน
TraceSectionMetric.Mode
เป็นคลาสที่ปิดผนึกเพื่อเปิดใช้การขยายในอนาคตโดยไม่ทำให้คำสั่ง when (I71f7b) เสียหาย - เพิ่ม
TraceSectionMetric.Mode.Average
และ.Count
รวมถึงเรียงลำดับอาร์กิวเมนต์ใหม่เพื่อให้มีอาร์กิวเมนต์ที่ใช้กันทั่วไป (โหมด) อยู่ต้นๆ ในรายการอาร์กิวเมนต์ ซึ่งจะช่วยลดความจำเป็นในการระบุชื่อพารามิเตอร์ (Ibf0b0, b/315830077, b/322167531) - เปลี่ยนชื่อ
Metric.getResult
เป็นgetMeasurements
เพื่อให้ตรงกับประเภทการคืนสินค้า (I42595)
แก้ไขข้อบกพร่อง
- แก้ไขเพื่อให้แน่ใจว่าการเปรียบเทียบจะใช้โปรไฟล์พื้นฐานที่สร้างขึ้นเมื่อ
automaticGenerationDuringBuild
ปิดอยู่ (Ic144f, b/333024280) - แก้ไขการลบล้างพร็อพเพอร์ตี้ปลั๊กอิน Gradle เพื่อเปิดใช้การสร้างโปรไฟล์พื้นฐานและการเปรียบเทียบเมื่อปรับแต่งประเภทบิลด์
nonMinified
หรือการเปรียบเทียบBaselineProfile
(Ib8f05, b/324837887) - การติดตามเมธอดที่แก้ไขจะล้างข้อมูลใน Macrobenchmark เพื่อให้การติดตามเมธอดได้รับการบันทึกอย่างครบถ้วนและถูกต้อง แม้ในอุปกรณ์ที่ช้ากว่า (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 / exception ในการตรวจหาการเริ่มต้นทั้งหมดที่ล้มเหลว การดำเนินการนี้ไม่ได้เปลี่ยนแปลงลักษณะการทำงานปัจจุบัน (ดังนั้นข้อผิดพลาดบางอย่างจะแสดงขึ้น และข้อผิดพลาดอื่นๆ จะตรวจหาการเริ่มต้นระบบไม่สำเร็จโดยไม่มีการแจ้งเตือน) แต่จะทำให้เข้าใจได้ง่ายขึ้น โดยทั่วไปแล้ว เหตุการณ์ที่
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 }
แก้ไขข้อบกพร่อง
- แก้ไขคำเตือนการติดตามเมธอดให้อยู่คนละบรรทัดกับเอาต์พุต 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
เพื่อให้การทดสอบประสิทธิภาพของเทรดหลัก (เช่น การทดสอบที่เกี่ยวข้องกับ View หรือ 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 รายการเพื่อลบล้างลักษณะการทำงานของการทิ้ง Shader เพื่อหลีกเลี่ยงข้อขัดข้องเมื่อแอปเปรียบเทียบประสิทธิภาพโดยไม่มี
ProfileInstaller
1.3:androidx.benchmark.dropShaders.enable=true/false
: สามารถใช้เพื่อข้ามการดรอปของ Shader ทั้งหมด (รวมถึงที่ทำในStartupMode.Cold
launches) โดยเฉพาะเมื่อใช้แอปการเปรียบเทียบที่ยังไม่ได้ใช้ profileinstaller 1.3androidx.benchmark.dropShaders.throwOnFailure=true/false
: สามารถใช้เพื่อยอมรับความล้มเหลวเมื่อพยายามทิ้งเชเดอร์ เช่น เมื่อแอปเปรียบเทียบประสิทธิภาพโดยไม่มี profileinstaller 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) - ตอนนี้ Macrobenchmark จะรอ
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 must not be running prior to cold start!" เนื่องจากกระบวนการสิ้นสุดไม่สำเร็จ (I5e028)
เวอร์ชัน 1.2.3
24 มกราคม 2024
androidx.benchmark:benchmark-*:1.2.3
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.2.3 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- นำข้อยกเว้นออกจากปลั๊กอิน Gradle ของ Baseline Profile เมื่อ 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
โปรไฟล์พื้นฐาน
- ปลั๊กอิน Gradle ของ Baseline Profile ใหม่จะทำให้การบันทึกและรวม Baseline Profile ไว้ในเวิร์กโฟลว์การทดสอบและการสร้างเป็นแบบอัตโนมัติ
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 อยู่แล้ว) เพื่อการตรวจสอบที่รวดเร็วขึ้น (เช่น เมื่อสร้างการทดสอบประสิทธิภาพหรือใน Presubmit) - รองรับ
androidx.benchmark.profiling.mode=StackSampling
และMethodTracing
- เพิ่ม
androidx.benchmark.enabledRules
เพื่ออนุญาตการกรองรันไทม์ของโปรไฟล์พื้นฐานเทียบกับการทดสอบกฎ Macrobenchmark - เพิ่มอาร์กิวเมนต์
androidx.benchmark.perfettoSdkTracing.enable
เพื่อเปิดใช้การติดตามด้วย tracing-perfetto เช่น การติดตามการประกอบใหม่ของ Compose โปรดทราบว่าเมื่อใช้กับStartupMode.COLD
เวลาจะได้รับผลกระทบอย่างมากเนื่องจากระบบจะโหลดและเปิดใช้ไลบรารีการติดตามระหว่างการเริ่มต้นแอป
- รองรับอาร์กิวเมนต์การวัดประสิทธิภาพ
ข้อกำหนด
- ตอนนี้ Macrobenchmark ต้องใช้
ProfileInstaller
1.3.0 ขึ้นไปในแอปเป้าหมายเพื่อเปิดใช้การจับภาพ / รีเซ็ตโปรไฟล์ และการล้างแคชของ Shader
- ตอนนี้ Macrobenchmark ต้องใช้
API เมตริกเวอร์ชันทดลองใหม่
- เพิ่ม
TraceSectionMetric
เวอร์ชันทดลอง ซึ่งช่วยให้ดึงการจับเวลาอย่างง่ายจากบล็อกtrace("") {}
ในแอป หรือ TraceMetric เพื่อใช้ประโยชน์จากความสามารถในการค้นหาทั้งหมดของ PerfettoTraceProcessor
- เพิ่ม
PowerMetric
เวอร์ชันทดลองเพื่อบันทึกข้อมูลการใช้พลังงาน - เพิ่ม
MemoryCountersMetric
เวอร์ชันทดลองเพื่อให้นับข้อผิดพลาดของหน้าได้ - เพิ่ม API
PerfettoTraceProcessor
เวอร์ชันทดลอง ซึ่งใช้ภายในเพื่อดึงเมตริกจากร่องรอยของระบบ (หรือที่เรียกว่าร่องรอย Perfetto)
- เพิ่ม
การแก้ไข
- แก้ไขข้อขัดข้องเมื่อติดตั้งหรือแยกโปรไฟล์จากแอปที่ติดตั้งจาก APK หลายรายการ (เช่น จาก App Bundle)
- แก้ไข
FrameTimingMetric
การไม่สนใจเฟรมที่มีรหัสเฟรมไม่สอดคล้องกัน (โดยทั่วไปคือเฟรมระหว่างการกระเพื่อมใน API 31 ขึ้นไป) (I747d2, b/279088460) - แก้ไขข้อผิดพลาดในการแยกวิเคราะห์ในร่องรอยที่มีขนาดมากกว่า 64 MB (Ief831, b/269949822)
- ชี้แจงข้อผิดพลาดเมื่อกำหนดค่าอิมเมจระบบปฏิบัติการของอุปกรณ์ (โดยเฉพาะโปรแกรมจำลอง) ไม่ถูกต้องสำหรับการติดตามหรือการคอมไพล์
- ข้ามการตรวจสอบระดับแบตเตอรี่สำหรับอุปกรณ์ที่ไม่มีแบตเตอรี่ (ไมโครและมาโคร)
- ปรับปรุงเอาต์พุตไฟล์ โดยมีข้อผิดพลาดที่ชัดเจนยิ่งขึ้นสำหรับไดเรกทอรีเอาต์พุตที่ไม่ถูกต้อง และค่าเริ่มต้นที่ปลอดภัยยิ่งขึ้น
- ปรับปรุงความเสถียรของ
StartupMode.COLD
โดยการทิ้งแคช Shader อย่างสม่ำเสมอ (แสดงผ่านMacrobenchmarkScope.dropShaderCache
ด้วย) - แก้ไขการสำรองข้อมูล Leanback สำหรับ
startActivityAndWait
แล้ว
Microbenchmark
- ฟีเจอร์
- เราได้ย้ายการสร้างโปรไฟล์ไปยังระยะแยกต่างหากหลังจากเมตริกอื่นๆ เพื่อให้การทดสอบ 1 ครั้งแสดงทั้งการจับเวลาที่แม่นยำและผลลัพธ์การสร้างโปรไฟล์ได้
- API การทดสอบ
- เพิ่ม API
MicrobenchmarkConfig
เวอร์ชันทดลองสำหรับกำหนดเมตริกที่กำหนดเอง รวมถึงกำหนดค่าการติดตามและการสร้างโปรไฟล์ ใช้เพื่อบันทึกร่องรอยของเมธอด หรือบันทึก Tracepoint ได้ (แต่โปรดทราบว่าการติดตามจะมีค่าใช้จ่ายเพิ่มเติม) - เพิ่ม API เวอร์ชันทดลองสำหรับการควบคุม
BenchmarkState
แยกจากBenchmarkRule
โดยไม่ต้องใช้ JUnit - เพิ่มระเบียน
PerfettoTrace
เวอร์ชันทดลองเพื่อเปิดใช้การบันทึกการติดตาม Perfetto ด้วยการกำหนดค่าที่กำหนดเองแยกจาก API การทดสอบประสิทธิภาพ
- เพิ่ม 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 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- แก้ไขเอาต์พุตไฟล์ Benchmark เพื่อไม่ให้
BaselineProfile
การคัดลอกไฟล์ปลั๊กอินหยุดทำงาน ระบบสร้างและคัดลอกไฟล์ออกจากอุปกรณ์แล้ว แต่ได้เปลี่ยนชื่อไฟล์ดังกล่าวเพื่อให้ปลั๊กอิน Gradle ไม่เห็นไฟล์ (I8dbcc, b/303034735, b/296453339) - อธิบายข้อความแสดงข้อผิดพลาดในการโหลด
tracing-perfetto
เมื่อแทรกจากโมดูล Macrobenchmark ลงในแอปพลิเคชันเป้าหมาย
เวอร์ชัน 1.2.0-rc01
20 กันยายน 2023
androidx.benchmark:benchmark-*:1.2.0-rc01
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.2.0-rc01 มีคอมมิตเหล่านี้
แก้ไขข้อบกพร่อง
- ตอนนี้ระบบจะยกเว้น (พร้อมวิธีการแก้ไข) เมื่อการติดตาม Perfetto SDK เริ่มต้นใน Benchmark ไม่สำเร็จ (I6c878, b/286228781)
- แก้ไขข้อขัดข้องเนื่องจาก OOM เมื่อแปลงการติดตามเมธอด ART เป็นรูปแบบ perfetto (I106bd, b/296905344)
- (Macrobenchmark) ชี้แจงป้ายกำกับการติดตามเมธอดเมื่อลิงก์ในเอาต์พุตการทดสอบของ Studio และแก้ไขชื่อไฟล์การติดตามเมธอดให้ไม่ซ้ำกันในอุปกรณ์/โฮสต์ เพื่อไม่ให้ระบบเขียนทับเมื่อมีการเรียกใช้การทดสอบมากกว่า 1 รายการ (I08e65, b/285912360)
- ตรวจสอบว่าอุปกรณ์ทำงานอยู่เมื่อบันทึกโปรไฟล์พื้นฐาน (I503fc)
เวอร์ชัน 1.2.0-beta05
30 สิงหาคม 2023
androidx.benchmark:benchmark-*:1.2.0-beta05
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.2.0-beta05 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้ปลั๊กอิน Gradle ของ Baseline Profile รองรับปลั๊กอิน Android Gradle 8.3 แล้ว (aosp/2715214)
เวอร์ชัน 1.2.0-beta04
23 สิงหาคม 2023
androidx.benchmark:benchmark-*:1.2.0-beta04
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.2.0-beta04 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้ปลั๊กอิน Gradle ของ Baseline Profiles รองรับปลั๊กอิน 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) - ตอนนี้ Tracepoint ภายในของไลบรารีการเปรียบเทียบ (รวมถึงการติดตามลูป/เฟสของ Microbenchmark) จะปรากฏในโปรแกรมดูการติดตามระบบของ Studio และซ้อนอยู่ภายใต้กระบวนการที่ถูกต้องใน Perfetto (I6b2e7, b/293510459)
- นำข้อผิดพลาด NOT-PROFILEABLE ของ Macrobenchmark ใน 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
BaselineProfileRule.collectBaselineProfile()
API ได้รับการเปลี่ยนชื่อเป็น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)- เปลี่ยนอาร์กิวเมนต์
BaselineProfileRule
'sfilterPredicate
เป็นค่าที่ไม่ใช่ Null โดยมีค่าเริ่มต้นที่เทียบเท่ากันเพื่อให้ลักษณะการทำงานของตัวกรองเริ่มต้นชัดเจนยิ่งขึ้นในเอกสาร (I3816e)
แก้ไขข้อบกพร่อง
- ปิดใช้
IsolationActivity
และการติดตาม Perfetto ในdryRunMode
เพื่อปรับปรุงประสิทธิภาพอย่างมาก เนื่องจากสิ่งเหล่านี้เป็นส่วนใหญ่ของรันไทม์ (Ie4f7d) - รองรับการสุ่มตัวอย่างสแต็กการเรียกใช้ใน Macrobenchmark โดยใช้อาร์กิวเมนต์การทดสอบเครื่องมือ
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 เมกะไบต์ (Ief831, b/269949822)
- แก้ไขการสร้างโปรไฟล์พื้นฐานใน Android U ที่ล้มเหลวเนื่องจากเอาต์พุตของคำสั่ง
pm dump-profiles
แตกต่างกัน (Id1392, 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)
- เพิ่ม
TraceMetric
API เวอร์ชันทดลองใหม่สำหรับการกำหนดเมตริกที่กำหนดเองทั้งหมดตามเนื้อหาของ Perfetto Trace (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 ออก ซึ่งรวมถึง Microbenchmark และ
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 ขึ้นไป Macrobenchmark จะไม่ติดตั้งแอปพลิเคชันเป้าหมายอีกต่อไปเพื่อรีเซ็ตสถานะการคอมไพล์ เนื่องจากมีฟีเจอร์ใหม่ของแพลตฟอร์ม ก่อนหน้านี้จำเป็นต้องมีอุปกรณ์ที่รูทแล้ว หรือต้องจัดการกับสถานะแอปพลิเคชันทั้งหมด (เช่น การเข้าสู่ระบบของผู้ใช้) ที่ถูกนำออกก่อนที่จะเรียกใช้การทดสอบประสิทธิภาพแต่ละครั้ง (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 pull ของโปรไฟล์พื้นฐานคงที่ในเอาต์พุตของ Studio (I958d1, b/261781624)
- ตอนนี้ระบบจะจดจำ Arm Emulator API 33 ได้อย่างถูกต้องเมื่อพยายามเรียกใช้ Macrobenchmark และจะพิมพ์คำเตือนอย่างถูกต้อง (69133b,b/262209591)
- ข้ามการตรวจสอบระดับแบตเตอรี่ในอุปกรณ์ที่ไม่มีแบตเตอรี่ใน Macrobenchmark (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)
- แก้ไขคำสั่งเชลล์หลายรายการที่ล้มเหลวในข้อความ onerror จำเป็นต้องพิมพ์ 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 สำหรับการวัดพลังงานและกำลังไฟใน Macrobenchmark (Ife601, b/220183779) - แก้ไข
MacrobenchmarkScope.dropShaderCache()
เพื่อทิ้งแคชเชเดอร์จริงๆ การดำเนินการนี้จะนำเสียงรบกวนประมาณ 20 มิลลิวินาทีออกจากเกณฑ์มาตรฐานของStartupMode.COLD
เนื่องจากตอนนี้ระบบจะล้าง Shader อย่างสม่ำเสมอในแต่ละการวนซ้ำ ก่อนหน้านี้Partial
การคอมไพล์โดยใช้การวนซ้ำเพื่อวอร์มอัปจะรายงานตัวเลขที่เร็วอย่างไม่ถูกต้อง เนื่องจากมีแนวโน้มที่จะเกิดการแคช Shader ระหว่างการวอร์มอัปมากกว่า การแก้ไขนี้ต้องใช้อุปกรณ์ที่รูทแล้วหรือใช้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)
แก้ไขข้อบกพร่อง
- ปรับปรุงความปลอดภัยของคำสั่งเชลล์ภายในทั้งหมดด้วยการตรวจสอบเอาต์พุต/ข้อผิดพลาดทั้งหมด (I5984d, b/255402908, b/253094958)
- ระบุอุปกรณ์ในคำสั่ง
adb pull
ของโปรไฟล์พื้นฐานเพื่อให้คัดลอกคำสั่งดึงได้อย่างง่ายดายหากเชื่อมต่ออุปกรณ์หลายเครื่อง (สูงสุด 1 โปรแกรมจำลอง) (I6ac6c, b/223359380) - เพิ่มข้อผิดพลาดหากไม่ได้ตั้งค่า APK ของการทดสอบ Macrobenchmark เป็นการวัดประสิทธิภาพด้วยตนเอง ข้อผิดพลาดนี้ทำให้ไม่สามารถทำการทดสอบประสิทธิภาพระดับสูงจากภายในกระบวนการของแอปเป้าหมาย ในกระบวนการนี้ Macrobench จะคอมไพล์/หยุด/เริ่มแอปแบบเย็นไม่ได้ หรือควบคุมสิทธิ์ของตัวเองไม่ได้ (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)- การเปลี่ยนแปลงนี้ยังแก้ไขวิธีล้างโปรไฟล์จากแอปไปยังดิสก์ในอุปกรณ์ที่ไม่ได้รูทด้วย แต่ต้องอัปเดตการขึ้นต่อกันของโปรไฟล์โปรแกรมติดตั้งของแอปเป้าหมาย
- หากต้องการใช้
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
ไปยัง Macrobenchmark (พร้อมใช้งานใน Micro แล้ว) เพื่อการพัฒนาในเครื่องที่เร็วขึ้น และการตรวจสอบความถูกต้องของการทำงานอัตโนมัติของแอป (เช่น ใน Presubmit) ซึ่งจะลบล้างการทำซ้ำเป็น 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 ให้เหลือเฉพาะการเปรียบเทียบ หรือการสร้างโปรไฟล์พื้นฐานเท่านั้น ส่ง "Macrobenchmark" หรือ "BaselineProfile" เพื่อเรียกใช้การทดสอบเพียงประเภทเดียว เช่น เมื่อสร้างBaselineProfiles
ในโปรแกรมจำลองเท่านั้น รองรับรายการที่คั่นด้วยคอมมาด้วย (I756b7, b/230371561)เช่น ใน build.gradle ของ Macrobenchmark
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)
- เพิ่มความสามารถในการล้างแคช Shader ใน
MacrobenchmarkScope
(I32122) - ช่วยให้นักพัฒนาแอปกำหนดค่าการแสดงประเภทเมตริกและรายละเอียดหมวดหมู่ระบบย่อยที่ต้องการได้ (I810c9)
- ก่อนหน้านี้จะเกิด
UnsupportedOperationException
ในการทดสอบประสิทธิภาพหากเรียกใช้ในอุปกรณ์ที่ไม่รองรับ ตอนนี้ UOE จะเกิดขึ้นก็ต่อเมื่อมีการใช้เมตริกในอุปกรณ์ที่ไม่รองรับ (เช่นPowerMetric.configure
) (I5cf20, b/227229375) - เพิ่ม
TotalPowerMetric
และTotalEnergyMetric
สำหรับการวัดกำลังและพลังงานทั้งหมดในแต่ละหมวดหมู่ระบบในมาโครเบนช์มาร์ก (I3b26b, b/224557371)
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่ระบบไม่ได้รีเซ็ตวิธีการที่คอมไพล์อย่างถูกต้องระหว่างการทดสอบ Macrobenchmark แต่ละครั้งในบิลด์ที่ไม่ได้รูท แต่การดำเนินการนี้จำเป็นต้องติดตั้ง APK ใหม่ในแต่ละการทำซ้ำ ซึ่งจะล้างข้อมูลแอปพลิเคชันสำหรับ Macrobenchmark แต่ละรายการ (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
ซึ่งจะเกิดขึ้นในอุปกรณ์ Android 11 (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 Macrobenchmark ซึ่งช่วยให้คุณวัดการโต้ตอบทั้งแอป เช่น การเริ่มต้นและการเลื่อน จะช่วยให้บันทึกการติดตามและวัดส่วนการติดตามได้
การรองรับโปรไฟล์พื้นฐาน
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)ปรับปรุงความเร็วในการทำซ้ำ Macrobenchmark โดยการเพิ่มประสิทธิภาพคำสั่ง Shell ที่ใช้เบื้องหลัง (aosp/2086023, b/231323582)
รองรับอุปกรณ์ Gradle ที่มีการจัดการเมื่อสร้างโปรไฟล์พื้นฐานด้วย Macrobenchmark (aosp/2062228, b/228926421)
เวอร์ชัน 1.1.0-rc02
11 พฤษภาคม 2022
androidx.benchmark:benchmark-*:1.1.0-rc02
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.1.0-rc02 มีคอมมิตเหล่านี้
- โปรดทราบว่ารุ่นนี้มีการเปลี่ยนแปลงลักษณะการทำงาน เนื่องจากตอนนี้ระบบจะติดตั้งแอปอีกครั้งอย่างสมบูรณ์ระหว่างการทดสอบแต่ละครั้งเพื่อให้มั่นใจว่าการวัดผลจะถูกต้อง
การแก้ไขข้อบกพร่อง/การเปลี่ยนแปลงลักษณะการทำงาน
แก้ไขปัญหาที่การรีเซ็ตการคอมไพล์แอปไม่ถูกต้องระหว่างการทดสอบประสิทธิภาพมาโคร และไม่มีการรีเซ็ตเลยในการสร้างที่ไม่ได้รูท ซึ่งจะช่วยแก้ไขกรณีต่างๆ ที่การทำการทดสอบหลายครั้งจะส่งผลให้
CompilationMode
ไม่มีผลต่อการวัดผลหรือมีผลน้อยมาก ตอนนี้แอปเป้าหมายจะติดตั้งวิธีการทดสอบแต่ละวิธีอีกครั้งโดยสมบูรณ์เพื่อหลีกเลี่ยงปัญหานี้ ซึ่งจะล้างข้อมูลแอปพลิเคชันระหว่างการทดสอบ Macrobenchmark แต่ละครั้ง (I31c74, b/230665435)เนื่องจากวิธีนี้จะป้องกันไม่ให้แอปตั้งค่าสถานะก่อนการทดสอบ ตอนนี้คุณจึงข้ามการคอมไพล์ / ติดตั้งใหม่เพื่อหลีกเลี่ยงปัญหานี้ได้แล้ว เช่น คุณสามารถคอมไพล์เป้าหมายทั้งหมดด้วยคำสั่งเชลล์
cmd package compile -f -m speed <package>
แล้วข้ามขั้นตอนการคอมไพล์ของ Macrobenchmarkเช่น ใน build.gradle ของ Macrobenchmark
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)เช่น ใน build.gradle ของ Macrobenchmark
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)
- แก้ไขเมตริกการเริ่มต้นสำหรับ Macrobenchmark เมื่อใช้
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) - แก้ไขปัญหาที่ Macrobenchmarks รวบรวมเมตริกการเริ่มต้นไม่ได้เมื่อใช้
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)กรองการสร้างโปรไฟล์ที่สุ่มตัวอย่าง simpleperf เป็น
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
ลงในไลบรารีมาโครเบนช์มาร์กภายใต้ฟีเจอร์ทดลองเพื่ออนุญาตให้ตรวจหาการขาดเสียง (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() // ... } ) }
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่การติดตามโปรไฟล์ Microbenchmark จะอัปเดตไม่สำเร็จในการเรียกใช้ครั้งต่อๆ ไปเมื่อลิงก์ในเอาต์พุตของ Studio (I5ae4d, b/214917025)
- ป้องกันคำสั่งเชลล์การคอมไพล์ใน 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 Stack Sampling / Method Tracing Profile จะลิงก์อยู่ในเอาต์พุตของ 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
- เพิ่มการติดตามระบบที่มีค่าใช้จ่ายต่ำลงในเอาต์พุตของ Microbench บน Android Q (API 29 ขึ้นไป) โปรดทราบว่าขณะนี้การดำเนินการนี้ยังไม่ได้บันทึกการติดตามที่กำหนดเอง (ผ่าน API ของ
android.os.Trace
หรือandroidx.tracing
Jetpack) เพื่อหลีกเลี่ยงผลกระทบต่อผลลัพธ์ การติดตามนี้ควรมีประโยชน์ในการวินิจฉัยความไม่เสถียร โดยเฉพาะจากแหล่งที่มาภายนอกการเปรียบเทียบ (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)
- แก้ไขการขัดข้องหลายรายการในโหมดการสร้างโปรไฟล์ StackSampling ใน โปรแกรมจำลองและอุปกรณ์ที่ไม่ได้รูท (Icdbda, b/202719335)
- นำการหยุดชั่วคราว 0.5 วินาทีออกเมื่อสิ้นสุดการวนซ้ำแต่ละครั้ง - หากคุณเห็นเมตริกที่ขาดหายไปจากการเปลี่ยนแปลงนี้ โปรดรายงานข้อบกพร่อง (Iff6aa)
- ลดโอกาสที่ข้อมูลจะหลุดหายไป และลดค่าใช้จ่ายด้านหน่วยความจำจากการติดตาม (Id2544, b/199324831, b/204448861)
- ลดขนาดการติดตามลงประมาณ 40% โดยเปลี่ยนไปใช้รูปแบบที่เก็บข้อมูล sched แบบกะทัดรัด (Id5fb6, b/199324831)
- อัปเดตการใช้งานเมตริกการเริ่มต้นให้สิ้นสุดที่ สิ้นสุดของ RenderThread เสมอ ซึ่งจะมีความสอดคล้องกันมากขึ้นในแพลตฟอร์ม เวอร์ชันต่างๆ และสอดคล้องกับการวัดผลในแอปมากขึ้น (Ic6b55)
เวอร์ชัน 1.1.0-alpha11
3 พฤศจิกายน 2021
androidx.benchmark:benchmark-*:1.1.0-alpha11
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.1.0-alpha11 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ตอนนี้ Macrobenchmark มี
minSdkVersion
ของ23
แล้ว (If2655) - เพิ่ม
BaselineProfileRule
ใหม่ในเวอร์ชันทดลอง ซึ่งสามารถสร้างโปรไฟล์พื้นฐานสำหรับการเดินทางของผู้ใช้ที่สำคัญของแอป เราจะจัดทำเอกสารประกอบโดยละเอียดให้ทราบต่อไป (Ibbefa, b/203692160) - นำตัวแปรอินเทอร์เฟซ measureRepeated ออก ซึ่งเพิ่ม สำหรับผู้เรียกใช้ Java เนื่องจากทำให้เกิดความคลุมเครือในการดำเนินการ/แก้ไขเมธอด ผู้เรียกใช้ Java จะต้องส่งคืน Unit.Instance จาก measureRepeated อีกครั้ง หากคุณได้รับความไม่สะดวก โปรดรายงานข้อบกพร่อง เรา จะพิจารณาเรื่องนี้อีกครั้งในเวอร์ชันอนาคต (Ifb23e, b/204331495)
เวอร์ชัน 1.1.0-alpha10
27 ตุลาคม 2021
androidx.benchmark:benchmark-*:1.1.0-alpha10
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.1.0-alpha10 มีคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ย้อนพอร์ต StartupTimingMetric เพื่อให้ทำงานได้กับ API 23 การติดตั้งใช้งานใหม่นี้ยังจัดการ reportFullyDrawn() ได้ดียิ่งขึ้นเพื่อรอจนกว่าจะมีการแสดงเนื้อหาที่เกี่ยวข้อง (If3ac9, b/183129298)
- เพิ่ม JvmOverloads ลงในเมธอด MacrobenchmarkScope หลายรายการสำหรับผู้เรียกใช้ Java (I644fe, b/184546459)
- ระบุฟังก์ชัน MacrobenchmarkRule.measureRepeated อื่นที่ใช้
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 โดยเน้นที่ เปอร์เซ็นไทล์ของตัวอย่างหลายรายการต่อการวนซ้ำ (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
เพื่อให้แอปที่ใช้โปรไฟล์พื้นฐานเรียกใช้ MacroBenchmark โดยใช้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 parcelables อีกต่อไป (I5a6f5, b/192009149
แก้ไขข้อบกพร่อง
- ลดความรุนแรงของการตรวจหาการควบคุมอุณหภูมิ และ คำนวณค่าพื้นฐานใหม่หากตรวจพบการควบคุมอุณหภูมิบ่อยครั้ง (I7327b)
- แก้ไข FrameTimingMetric ให้ทำงานใน Android S เบต้า (Ib60cc, b/193260119)
- ใช้
EmptyActivity
เพื่อนำแอปเป้าหมายออกจากสถานะหยุดทำงานโดยบังคับเพื่อรองรับCompilationMode.BaselineProfile
ได้ดียิ่งขึ้น (Id7cac, b/192084204) - เปลี่ยนนามสกุลไฟล์การติดตามเป็น
.perfetto-trace
เพื่อให้เป็นไปตามมาตรฐานของแพลตฟอร์ม (I4c236, b/174663039) - ตอนนี้ StartupTimingMetric จะแสดงเมตริก "fullyDrawnMs" เพื่อวัดเวลาจนกว่าแอปพลิเคชันจะแสดงผลเสร็จสมบูรณ์ หากต้องการ กำหนดเมตริกนี้สำหรับแอป ให้เรียกใช้ Activity.reportFullyDrawn เมื่อ เนื้อหาเริ่มต้นพร้อมใช้งาน เช่น เมื่อโหลดรายการเริ่มต้นจาก DB หรือเครือข่าย (เมธอด 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 มีองค์ประกอบสำคัญในการเปรียบเทียบ นั่นคือ Macrobenchmark นอกเหนือจากการเปรียบเทียบที่ช่วยให้คุณวัดลูป CPU ได้แล้ว Macrobenchmark ยังช่วยให้คุณวัดการโต้ตอบทั้งแอป เช่น การเริ่มต้นและการเลื่อน รวมถึงบันทึกการติดตามได้ด้วย ดูข้อมูลเพิ่มเติมได้ที่เอกสารประกอบของไลบรารี
androidx.benchmark:benchmark-*:1.1.0-alpha02
ได้รับการเผยแพร่แล้ว เวอร์ชัน 1.1.0-alpha02 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
เพิ่มอาร์ติแฟกต์ Macrobenchmark (androidx.benchmark:benchmark-macro-junit4
และ androidx.benchmark:benchmark-macro
)
- บันทึกเมตริกประสิทธิภาพการเริ่มต้น การเลื่อน/ภาพเคลื่อนไหวจากแอปของคุณในเครื่องหรือใน CI
- บันทึกและตรวจสอบการติดตามจากภายใน Android Studio
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาเกี่ยวกับสิทธิ์ของเชลล์ด้วยไดเรกทอรีเอาต์พุตใน 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
- เมตริกการจัดสรร - ตอนนี้การเปรียบเทียบจะทำงานในระยะเพิ่มเติมหลังจากวอร์มอัปและการกำหนดเวลา โดยจะบันทึกจำนวนการจัดสรร การจัดสรรอาจทำให้เกิดปัญหาด้านประสิทธิภาพในแพลตฟอร์มเวอร์ชันเก่า (140ns ใน O กลายเป็น 8ns ใน M - วัดบน Nexus5X ที่มีการล็อกนาฬิกา) เมตริกนี้จะแสดงในเอาต์พุตของคอนโซล Android Studio รวมถึงใน
- การรองรับการสร้างโปรไฟล์ - ตอนนี้คุณสามารถบันทึกข้อมูลการสร้างโปรไฟล์สำหรับการเรียกใช้การเปรียบเทียบเพื่อตรวจสอบว่าเหตุใดโค้ดจึงอาจทำงานช้า Benchmark รองรับการบันทึกการติดตามเมธอดหรือการสุ่มตัวอย่างเมธอดจาก ART คุณตรวจสอบไฟล์เหล่านี้ได้ด้วย Profiler ใน Android Studio โดยใช้ไฟล์ > เปิด
- ตอนนี้ปลั๊กอิน Gradle สำหรับการทดสอบประสิทธิภาพมีค่าเริ่มต้นเพื่อให้ตั้งค่าได้ง่ายขึ้น ดังนี้
testBuildType
ได้รับการตั้งค่าให้เผยแพร่โดยค่าเริ่มต้นเพื่อหลีกเลี่ยงการใช้การอ้างอิงที่มีการครอบคลุมโค้ดในตัว นอกจากนี้ ระบบยังกำหนดค่า buildType ของรีลีสเป็น buildType เริ่มต้นด้วย ซึ่งจะช่วยให้ Android Studio เลือกตัวแปรบิลด์ที่ถูกต้องได้โดยอัตโนมัติเมื่อเปิดโปรเจ็กต์เป็นครั้งแรก (b/138808399)signingConfig.debug
ใช้เป็นการกำหนดค่าการลงนามเริ่มต้น (b/153583269)
** การแก้ไขข้อบกพร่อง **
- ลดค่าใช้จ่ายในการเปลี่ยนผ่านการวอร์มอัพลงอย่างมาก ซึ่งการวัดผลครั้งแรกสำหรับแต่ละเกณฑ์มาตรฐานสูงกว่าเกณฑ์อื่นๆ อย่างไม่เป็นธรรมชาติ ปัญหานี้จะเห็นได้ชัดมากขึ้นในการทดสอบประสิทธิภาพขนาดเล็กมาก (1 ไมโครวินาทีหรือน้อยกว่า) (b/142058671)
- แก้ไขข้อผิดพลาด
InstrumentationResultParser
ที่พิมพ์สำหรับเกณฑ์มาตรฐานแต่ละรายการเมื่อเรียกใช้จากบรรทัดคำสั่ง (I64988, b/154248456)
ปัญหาที่ทราบ
- บรรทัดคำสั่ง การเรียกใช้ Gradle ของ Benchmark จะไม่พิมพ์ผลลัพธ์โดยตรง คุณสามารถหลีกเลี่ยงปัญหานี้ได้โดยการเรียกใช้ผ่าน 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 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เพิ่มการติดตาม systrace ลงในการทดสอบประสิทธิภาพแล้ว
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาความไม่เสถียรของเมตริกที่ 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)
แก้ไขข้อบกพร่อง
- เพิ่มการขึ้นต่อกัน
androidx.annotation:android-experimental-lint
เพื่อให้โค้ด Java สร้างข้อผิดพลาดของ Lint ได้อย่างถูกต้องเมื่อไม่ได้ใช้ API เวอร์ชันทดลอง ซึ่งคล้ายกับที่คำอธิบายประกอบเวอร์ชันทดลองของ Kotlin มีให้สำหรับผู้เรียกใช้ Kotlin - ตอนนี้ตรวจหาการใช้งาน
additionalTestOutputDir
อาร์กิวเมนต์การวัดผลสําหรับเอาต์พุตใน Android Gradle Plugin 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
เป็นแบบสาธารณะอย่างถูกต้องแล้ว ตอนนี้การใช้ API BenchmarkState#report ที่เป็นเวอร์ชันทดลองต้องใช้คำอธิบายประกอบนี้
เวอร์ชัน 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 เป็นเวอร์ชันทดลองแล้ว
แก้ไขข้อบกพร่อง
- แก้ไขสคริปต์การล็อกนาฬิกาซึ่งจะทำงานไม่สำเร็จในอุปกรณ์ที่ไม่มีโปรแกรมอรรถประโยชน์เชลล์
cut
หรือexpr
- แก้ไขปัญหาเกี่ยวกับ
./gradlew lockClocks
ที่จะค้างในอุปกรณ์ที่รูทด้วยยูทิลิตี su เวอร์ชันเก่าซึ่งไม่รองรับแฟล็ก-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)
- เพิ่มโหมด "การทดสอบ" สำหรับการเรียกใช้ลูปการทดสอบแต่ละรายการเพียงครั้งเดียว เพื่อตรวจสอบข้อผิดพลาด/ข้อขัดข้องโดยไม่ต้องบันทึกการวัด ซึ่งอาจมีประโยชน์ เช่น ในการเรียกใช้การทดสอบประสิทธิภาพอย่างรวดเร็วใน Presubmit เพื่อตรวจสอบว่าการทดสอบไม่ล้มเหลว
การเปลี่ยนแปลง API
- โครงสร้างโมดูลมีการเปลี่ยนแปลง โดยแยกไลบรารี (b/138451391)
benchmark:benchmark-junit4
มีคลาสที่มีการอ้างอิง JUnit ได้แก่AndroidBenchmarkRunner
และBenchmarkRule
ซึ่งทั้ง 2 คลาสนี้ย้ายไปอยู่ในแพ็กเกจ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)
นำการตรวจหาการควบคุมอุณหภูมิออกแล้วจาก
BenchmarkState.reportData
API (b/132887006)
แก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่
./gradlew lockClocks
ไม่ติดในอุปกรณ์ระบบปฏิบัติการล่าสุดบางรุ่น (b/133424037) - ปิดใช้การตรวจหาการควบคุมสำหรับโปรแกรมจำลอง (b/132880807) แล้ว
เวอร์ชัน 1.0.0-alpha01
7 พฤษภาคม 2019
androidx.benchmark:benchmark:1.0.0-alpha01
ได้รับการเผยแพร่แล้ว คอมมิตที่รวมอยู่ในเวอร์ชันนี้มีให้ใช้งานที่นี่