เปรียบเทียบ
อัปเดตล่าสุด | รุ่นที่เสถียร | รุ่นที่อาจได้รับการเผยแพร่ | รุ่นเบต้า | เวอร์ชันอัลฟ่า |
---|---|---|---|---|
11 ธันวาคม 2024 | 1.3.3 | - | - | 1.4.0-alpha06 |
การประกาศทรัพยากร Dependency
หากต้องการเพิ่มทรัพยากร Dependency ของ Benchmark คุณต้องเพิ่มที่เก็บ Maven ของ Google ลงในโปรเจ็กต์ อ่านข้อมูลเพิ่มเติมในที่เก็บ Maven ของ Google
Macrobenchmark
หากต้องการใช้ Macrobenchmark ในโปรเจ็กต์ ให้เพิ่มการพึ่งพาต่อไปนี้ลงในไฟล์ build.gradle
สำหรับโมดูล macrobenchmark
ดึงดูด
dependencies { androidTestImplementation "androidx.benchmark:benchmark-macro-junit4:1.3.0" }
Kotlin
dependencies { androidTestImplementation("androidx.benchmark:benchmark-macro-junit4:1.3.0") }
การทดสอบประสิทธิภาพระดับไมโคร
หากต้องการใช้ Microbenchmark ในโปรเจ็กต์ ให้เพิ่มข้อกําหนดต่อไปนี้ลงในไฟล์ build.gradle
ของโมดูล Microbenchmark
ดึงดูด
dependencies { androidTestImplementation "androidx.benchmark:benchmark-junit4:1.3.0" } android { ... defaultConfig { ... testInstrumentationRunner "androidx.benchmark.junit4.AndroidBenchmarkRunner" } }
Kotlin
dependencies { androidTestImplementation("androidx.benchmark:benchmark-junit4:1.3.0") } android { ... defaultConfig { ... testInstrumentationRunner = "androidx.benchmark.junit4.AndroidBenchmarkRunner" } }
ไลบรารี Microbenchmark มีปลั๊กอิน Gradle สำหรับใช้กับโมดูล Microbenchmark อีกด้วย
ปลั๊กอินนี้ตั้งค่าเริ่มต้นการกำหนดค่าบิลด์สำหรับโมดูล ซึ่งตั้งค่า
สำเนาเอาต์พุตเปรียบเทียบไปยังโฮสต์
และให้
./gradlew lockClocks
งาน
หากต้องการใช้ปลั๊กอิน ให้ใส่บรรทัดต่อไปนี้ในบล็อก "ปลั๊กอิน" ในระดับบนสุด
build.gradle
ไฟล์:
ดึงดูด
plugins { id 'androidx.benchmark' version '1.3.0' apply false }
Kotlin
plugins { id("androidx.benchmark") version "1.3.0" apply false }
จากนั้นใช้ปลั๊กอินกับไฟล์ build.gradle
ของโมดูลการเปรียบเทียบ
ดึงดูด
plugins { id 'androidx.benchmark' }
Kotlin
plugins { id("androidx.benchmark") }
ความคิดเห็น
ความคิดเห็นของคุณช่วยปรับปรุง Jetpack ได้ โปรดแจ้งให้เราทราบหากพบปัญหาใหม่หรือมีแนวคิดในการปรับปรุงคลังนี้ โปรดดูปัญหาที่มีอยู่ในคลังนี้ก่อนสร้างปัญหาใหม่ คุณสามารถเพิ่มการโหวตให้กับปัญหาที่มีอยู่ได้โดยคลิกปุ่มดาว
ดูข้อมูลเพิ่มเติมในเอกสารประกอบของเครื่องมือติดตามปัญหา
เวอร์ชัน 1.4
เวอร์ชัน 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)
การแก้ไขข้อบกพร่อง
- ตอนนี้ไลบรารีนี้ใช้แอตทริบิวต์ JSpecify nullness ซึ่งเป็นการใช้ประเภท นักพัฒนาซอฟต์แวร์ Kotlin ควรใช้อาร์กิวเมนต์คอมไพเลอร์ต่อไปนี้เพื่อบังคับใช้การใช้งานที่ถูกต้อง
-Xjspecify-annotations=strict
,-Xtype-enhancement-improvements-strict-mode
(I46810, b/326456246) - แก้ไข
ArtMetric
เพื่อรายงานการโหลดคลาส (ไม่ใช่ init) และปรับปรุงเอกสารเพื่อชี้แจงลักษณะการทํางานรันไทม์ (I9915c) - ใน Android แบบผู้ใช้หลายคน ให้เรียกใช้คำสั่งในฐานะรูทในอุปกรณ์ที่รูทเท่านั้น (I88b44)
เวอร์ชัน 1.4.0-alpha05
13 พฤศจิกายน 2024
androidx.benchmark:benchmark-*:1.4.0-alpha05
ได้รับการปล่อยแล้ว เวอร์ชัน 1.4.0-alpha05 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาใน API 34 ขึ้นไปที่
CompilationMode.None()
จะมีประสิทธิภาพที่ไม่สอดคล้องกัน ซึ่งไม่ได้แสดงถึงประสิทธิภาพเริ่มต้นที่เลวร้ายที่สุด ซึ่งจะช่วยแก้ปัญหาการเปลี่ยนแปลงแพลตฟอร์มที่อนุญาตให้สถานะการคอมไพล์verify
ของ ART คอมไพล์แอปบางส่วน (ส่งผลต่อเฉพาะการโหลดคลาส) ไม่นานหลังจากเปิดใช้งานครั้งแรก (Ie48d0) - แก้ไขปัญหาที่ระบบอาจบันทึกเทรซ (โดยเฉพาะเทรซสั้นๆ) ที่จะไม่รายงานการวัดผลจากเมตริกการทดสอบประสิทธิภาพแบบรวมอยู่ในระบบ เนื่องจากชื่อกระบวนการถูกตัดภายในเทรซ Perfetto ตอนนี้การทดสอบประสิทธิภาพแบบมาโครจะแก้ปัญหานี้โดยมองหาชื่อแพ็กเกจที่ถูกตัดในคําค้นหาในตัวทั้งหมด นอกเหนือจากชื่อแพ็กเกจที่คาดไว้ โปรดทราบว่าการใช้งาน
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
- การทดสอบประสิทธิภาพแบบมาโคร: เพิ่ม
ArtMetric
ซึ่งสามารถใช้ตรวจสอบความครอบคลุมของโปรไฟล์หรือประสิทธิภาพทั่วไปของรันไทม์ Android บันทึกจำนวนและระยะเวลาทั้งหมดของ JIT, การสร้างชั้นเรียน (หากมี) และการตรวจสอบชั้นเรียน นอกจากนี้ การเปลี่ยนแปลงCaptureInfo
ให้มีเวอร์ชัน ART หลักที่ไม่บังคับพร้อมกับเวอร์ชันเริ่มต้น (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)
- ตอนนี้ไลบรารีนี้ใช้แอตทริบิวต์ JSpecify nullness ซึ่งเป็นการใช้ประเภท นักพัฒนาซอฟต์แวร์ Kotlin ควรใช้อาร์กิวเมนต์คอมไพเลอร์ต่อไปนี้เพื่อบังคับใช้การใช้งานที่ถูกต้อง
-Xjspecify-annotations=strict
,-Xtype-enhancement-improvements-strict-mode
(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) - จากการเปรียบเทียบ
1.3.2
: แก้ไข Firebase Test Lab (FTL) ไม่สามารถดึงไฟล์ผลลัพธ์ของโปรไฟล์พื้นฐานหรือการเปรียบเทียบแบบแมโครจากปลั๊กอิน 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) - ตอนนี้เมตริกการทดสอบประสิทธิภาพแบบละเอียดจะแสดงในการติดตามของ Perfetto เป็นเคาน์เตอร์ (3214854)
- เพิ่มสคริปต์ทดลองสำหรับการปิดใช้ JIT (ต้องใช้สิทธิ์รูท / รีสตาร์ทรันไทม์) และรีเซ็ตสถานะประสิทธิภาพ/การทดสอบของอุปกรณ์ ขณะนี้ยังไม่มีการเผยแพร่เป็นงาน Gradle (7c3732b)
- เพิ่มอาร์กิวเมนต์การเปรียบเทียบเพื่อข้ามการทดสอบเมื่อทำงานบนโปรแกรมจำลอง เมื่อเปิดใช้รุ่น
automaticGenerationDuring
ไว้ ข้อมูลเปรียบเทียบจะทริกเกอร์การสร้างโปรไฟล์พื้นฐานด้วย การดำเนินการนี้จะดำเนินการไม่สำเร็จหากใช้โปรแกรมจำลอง เมื่อใช้อาร์กิวเมนต์ใหม่skipBenchmarksOnEmulator
เราจะข้ามการทดสอบได้ (0c2ddcd) - เปลี่ยนตรรกะการเปิดใช้เหตุการณ์ประสิทธิภาพให้ทํางานใน API 23 ขึ้นไป (2550048)
การเปลี่ยนแปลง API
- ย้ายอาร์กิวเมนต์
PerfettoConfig
ที่มีอยู่ซึ่งทดสอบกับMacrobenchmarkRule.measureRepeated()
ไปยังออบเจ็กต์ExperimentalConfig
ใหม่
การแก้ไขข้อบกพร่อง
- เพิ่มจำนวนการลองอีกครั้ง
lockClocks.sh
(99e9dac) - อย่าสร้าง
nonMinified
และประเภทบิลด์การเปรียบเทียบหากมีอยู่แล้ว เนื่องจากข้อบกพร่อง ระบบจะสร้างประเภทบิลด์nonMinified
และ Benchmark ขึ้นมาใหม่แม้ว่าจะมีอยู่แล้วก็ตาม (e75f0a5) - ละเว้นส่วนที่ไม่มีจุดสิ้นสุดจากผลการค้นหา
TraceSectionMetric
(a927d20) - ปรับปรุงการตรวจสอบโปรแกรมจำลองให้พิจารณาคำนำหน้า
sdk_
(1587de8) - ถือว่าแพ็กเกจที่ไม่ได้ทำงานนั้นล้างข้อมูลแล้วใน
FrameTimingGfxInfoMetric
(35cc79c) - แก้ไข
androidx.benchmark.cpuEventCounter
ที่สร้างค่าที่เสียหายสําหรับเหตุการณ์ที่ไม่ใช่คำสั่ง (06edd59) - แก้ไข
resumeTiming/runWithTimingDisabled
ให้เป็นไปตามลําดับความสําคัญของเมตริก และลดผลกระทบของการหยุด/เริ่มเมตริกที่มีลําดับความสําคัญต่ำกว่าต่อผลลัพธ์ของเมตริกที่มีลําดับความสําคัญสูงกว่าอย่างมีนัยสําคัญ เช่น หากใช้ตัวนับประสิทธิภาพของ CPU ผ่านอาร์กิวเมนต์เครื่องมือวัดcpuEventCounter.enable
ระบบจะไม่ลด timeNs อย่างมีนัยสำคัญอีกต่อไปเมื่อมีการหยุดชั่วคราว/กลับมาทำงานต่อ (5de0968)
เวอร์ชัน 1.3
เวอร์ชัน 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) ดึงไฟล์ผลลัพธ์ของโปรไฟล์พื้นฐานหรือการทดสอบประสิทธิภาพแบบแมโครจากปลั๊กอิน 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 ของโปรไฟล์พื้นฐานให้ใช้
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 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลงการทดสอบประสิทธิภาพระดับไมโครตั้งแต่เวอร์ชัน 1.2.0
- การติดตามเมธอดจะเปิดอยู่โดยค่าเริ่มต้นในไมโครเบนช์มาร์กเมื่อทำงานในอุปกรณ์ส่วนใหญ่
- การติดตามเมธอดจะทํางานเป็นระยะที่แยกต่างหากหลังจากการวัดผล ซึ่งจะช่วยให้ทั้งการวัดผลและการติดตามเมธอดแสดงผลได้อย่างถูกต้องจากการเรียกใช้การทดสอบประสิทธิภาพครั้งเดียว
- การติดตามเมธอดในระบบปฏิบัติการ Android และ ART บางเวอร์ชันจะส่งผลต่อระยะการวัดผลในภายหลัง เวอร์ชันเหล่านี้จะปิดการติดตามเมธอดไว้โดยค่าเริ่มต้นและระบบจะพิมพ์คําเตือนไปยังเอาต์พุตของ Studio
- การเปรียบเทียบและ ANR ของเธรดหลัก
- เพิ่ม
measureRepeatedOnMainThread
สำหรับการทดสอบประสิทธิภาพของเธรด UI (เช่น การโต้ตอบกับ UI ของ Compose/View) เพื่อหลีกเลี่ยง ANR เมื่อทำงานเป็นเวลาหลายวินาที - ระบบจะข้ามการติดตามเมธอดหากคาดว่าจะเกินกำหนดเวลาในการหลีกเลี่ยง ANR ตั้งค่า
androidx.benchmark.profiling.skipWhenDurationRisksAnr
เป็นเท็จเพื่อปิดใช้ลักษณะการทำงานนี้ (ไม่แนะนําสําหรับการเรียกใช้ 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
ที่ไม่ได้เริ่มกระบวนการเป้าหมายอีกครั้ง - แก้ไขการล้างร่องรอยเมธอดในมาโครเบนช์มาร์กเพื่อให้ระบบบันทึกร่องรอยเมธอดได้อย่างสมบูรณ์และถูกต้อง แม้ในอุปกรณ์ที่ช้ากว่า (I6349a, b/329904950)
- ตอนนี้การติดตามเมธอดจะกําหนดขอบเขตตามระยะเวลาของ
- วางไฟล์โปรไฟล์ ART อย่างถูกต้องระหว่างการวนซ้ำ
warmUp
แต่ละครั้งเมื่อมีการหยุดกระบวนการเพื่อให้การวัดCompilationMode.Partial(warmup=N)
มีความแม่นยำมากขึ้น (I17923) - ข้อความแสดงข้อผิดพลาดในการออกอากาศ Shader
- เพิ่มคำแนะนำในการแก้ไขข้อบกพร่องเพื่อแสดงข้อความแจ้งว่าออกอากาศชิดเดอร์ไม่สำเร็จ
- เพิ่มอาร์กิวเมนต์เครื่องมือวัด 2 รายการสำหรับการลบล้างลักษณะการทิ้งโปรแกรมเปลี่ยนสีเพื่อแก้ปัญหาข้อขัดข้องเมื่อทำการทดสอบประสิทธิภาพแอปโดยไม่มี
ProfileInstaller
1.3androidx.benchmark.dropShaders.enable=true/false
: ใช้เพื่อข้ามการลดระดับ shader ทั้งหมดได้ (รวมถึงการลดระดับที่ดำเนินการในการเปิดStartupMode.Cold
) โดยเฉพาะเมื่อทำการทดสอบประสิทธิภาพแอปที่ไม่ได้ใช้ ProfileInstaller 1.3androidx.benchmark.dropShaders.throwOnFailure=true/false
: ใช้เพื่อยอมรับความล้มเหลวเมื่อพยายามวางเฉดสี เช่น เมื่อทำการทดสอบประสิทธิภาพแอปโดยไม่มี ProfileInstaller 1.3 (I4f573)
- เพิ่มตัวแปร
MacrobenchmarkRule#measureRepeated
เวอร์ชันทดลองซึ่งใช้PerfettoConfig
ที่กําหนดเองสําหรับการบันทึกร่องรอย Perfetto ที่กําหนดเองได้อย่างเต็มที่ โปรดทราบว่าการกําหนดค่าที่ไม่ถูกต้องอาจทําให้คลาสเมตริกในตัวใช้งานไม่ได้ (Idfd3d, b/309841164, b/304038384) - ยกเลิกงาน dexopt เบื้องหลังก่อนเรียกใช้การทดสอบประสิทธิภาพแบบมาโครเพื่อลดการรบกวน (I989ed)
- ตอนนี้การทดสอบประสิทธิภาพแบบมาโครจะรอ 1 วินาทีเพื่อให้แอปพลิเคชันเป้าหมายล้างโปรไฟล์ ART (ก่อนหน้านี้รอ 500 มิลลิวินาที) (I85a50, b/316082056)
- การปรับโฉม TraceSectionMetric
- หมายเหตุ: การเปลี่ยนแปลง
TraceSectionMetric
ด้านล่างอาจส่งผลต่อเอาต์พุตในการใช้งาน CI และอาจทําให้เกิดความต่อเนื่องไม่สอดคล้องกันหรือทำให้การแยกวิเคราะห์หยุดชะงัก - ตอนนี้ผลรวมเป็นค่าเริ่มต้นแล้ว เนื่องจากการใช้งานส่วนใหญ่ของเมตริกนี้ใช้กับเหตุการณ์ที่ซ้ำกัน และ "ครั้งแรก" จะทิ้งข้อมูลในกรณีเหล่านี้
- เปลี่ยนให้ปรับแต่งได้มากขึ้นและมีโหมดให้เลือกมากขึ้น
- ตอนนี้ชื่อโหมดจะฝังอยู่ในชื่อเอาต์พุตเมตริก (ใน Studio และ JSON)
- ตอนนี้รองรับข้อมูลพร็อพเพอร์ตี้ที่สร้างขึ้นโดยใช้
Trace.{begin|end}AsyncSection
แล้ว
- หมายเหตุ: การเปลี่ยนแปลง
- เมตริก
- เพิ่ม
PowerMetric.deviceSupportsHighPrecisionTracking
,PowerMetric.deviceBatteryHasMinimumCharge()
และPowerMetric.deviceSupportsPowerEnergy()
แล้ว - เปลี่ยนชื่อ
Metric.getResult
เป็นgetMeasurements
เพื่อให้ตรงกับประเภทผลลัพธ์ - เพิ่มป้ายกำกับ log.w / 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)
- เพิ่ม
การเปลี่ยนแปลงการบันทึกโปรไฟล์พื้นฐาน / ปลั๊กอิน 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) - แก้ไขการลบล้างพร็อพเพอร์ตี้ของปลั๊กอิน
BaselineProfile
gradle เพื่อเปิดใช้การสร้างโปรไฟล์พื้นฐานและการเปรียบเทียบประสิทธิภาพเมื่อปรับแต่งnonMinified
หรือประเภทบิลด์การเปรียบเทียบประสิทธิภาพ (Ib8f05, b/324837887) - แก้ไขการรวมโปรไฟล์พื้นฐานของไลบรารีใน AAR ก่อน AGP 8.3.0-alpha15 (I1d2af, b/313992099)
- แก้ไข URL เอาต์พุตของโปรไฟล์พื้นฐานและโปรไฟล์เริ่มต้นเมื่อสิ้นสุดงานการสร้าง (I802e5, b/313976958)
การเปลี่ยนแปลงที่สำคัญอื่นๆ นับตั้งแต่เวอร์ชัน 1.2.0
- การบันทึกการติดตาม
- ลดข้อผิดพลาด EXITCODE 2 เมื่อเริ่ม Perfetto จากข้อผิดพลาดเป็นคําเตือนที่บันทึกไว้
- เปิดใช้การติดตาม AIDL โดยค่าเริ่มต้นในการเปรียบเทียบประสิทธิภาพ(ต้องใช้ API 28) (Ia0af2, b/341852305)
- เปิดใช้การติดตามแท็ก Porter โดยค่าเริ่มต้นในการเปรียบเทียบ ซึ่งจะบันทึกข้อมูล เช่น จุดติดตาม Wakelock (Icfe44, b/286551983)
- เพิ่มระยะหมดเวลาของจุดเริ่มต้นการบันทึกการติดตามเพื่อหลีกเลี่ยงข้อขัดข้องเมื่อเริ่มการติดตามในอุปกรณ์ที่ช้ากว่า (I98841, b/329145808)
- เพิ่ม API
PerfettoTraceProcessor.Session.queryMetrics
สาธารณะที่มีรูปแบบ JSON, textproto และ proto แบบไบนารี (ไม่ได้ถอดรหัส) ซึ่งช่วยให้คุณค้นหาเมตริกที่สร้างไว้ใน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
ระบบจะไม่ลด timeNs อย่างมีนัยสำคัญอีกต่อไปเมื่อมีการหยุดชั่วคราว/กลับมาทำงานต่อ (I39c2e, b/286306579, b/307445225) - ลดโอกาสที่การสุ่มตัวอย่างสแต็กจะทําให้
measureRepeatedOnMainThread
หมดเวลาโดยอัตโนมัติในชุดข้อความหลักด้วยการย้าย Conversion การสุ่มตัวอย่างสแต็กออกจากชุดข้อความหลัก (I487a8, b/342237318) - นำการระบุการเข้าถึง API ของแพลตฟอร์มใหม่ด้วยตนเองออกแล้ว เนื่องจากการดำเนินการนี้จะดำเนินการโดยอัตโนมัติผ่านการจําลอง API เมื่อใช้ R8 กับ AGP 7.3 ขึ้นไป (เช่น R8 เวอร์ชัน 3.3) และสำหรับบิลด์ทั้งหมดเมื่อใช้ AGP 8.1 ขึ้นไป (เช่น D8 เวอร์ชัน 8.1) เราขอแนะนำให้ลูกค้าที่ไม่ได้ใช้ AGP อัปเดตเป็น D8 เวอร์ชัน 8.1 ขึ้นไป ดูบทความนี้สำหรับรายละเอียดเพิ่มเติม (I9496c, b/345472586)
- เพิ่มการตรวจสอบเวอร์ชัน agp เพื่อส่งชื่อแพ็กเกจเป็นอาร์กิวเมนต์ instr เวอร์ชันก่อนหน้า AGP 8.4.0 ไม่สามารถส่งชื่อแพ็กเกจแอปเป้าหมายไปยังแอปเครื่องมือวัดผลผ่านอาร์กิวเมนต์เครื่องมือวัดผลได้ (0c72a3f)
เวอร์ชัน 1.3.0-beta02
10 กรกฎาคม 2024
androidx.benchmark:benchmark-*:1.3.0-beta02
ได้รับการปล่อยแล้ว เวอร์ชัน 1.3.0-beta02 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- จัดการ EXITCODE
2
อย่างราบรื่นเมื่อเริ่ม Perfetto เพื่อบันทึกคําเตือน แต่ดําเนินการต่อ
เวอร์ชัน 1.3.0-beta01
12 มิถุนายน 2024
androidx.benchmark:benchmark-*:1.3.0-beta01
ได้รับการปล่อยแล้ว เวอร์ชัน 1.3.0-beta01 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เปลี่ยนชื่อ
MethodTracing.affectsMeasurementOnThisDevice
เป็นAFFECTS_MEASUREMENT_ON_THIS_DEVICE
เพื่อให้สอดคล้องกัน (I1bdfa) - เพิ่ม
BlackHole.consume()
api เวอร์ชันทดลองเพื่อป้องกันการกำจัดโค้ดที่ตายแล้วในไมโครเบนช์มาร์ก (If6812, b/286091643) - ตอนนี้การทดสอบประสิทธิภาพระดับไมโครจะแสดงผลอย่างถูกต้องเพื่อป้องกันไม่ให้การติดตามเมธอดรบกวนการวัด ปัญหานี้เกิดขึ้นในอุปกรณ์บางรุ่นเมื่อเปิดการติดตามเมธอดไว้ (ผ่านอาร์กิวเมนต์เครื่องมือวัดหรือ
MicrobenchmarkConfig
) และหากมีการพยายามวัดผลหลังจากการติดตามเมธอด อุปกรณ์ที่ได้รับผลกระทบจะใช้งาน API 26-30 หรือโมดูลหลักของ ART บางเวอร์ชันที่ได้รับผลกระทบจากการรบกวนนี้ และสามารถตรวจพบได้เมื่อรันไทม์ผ่านProfilerConfig.MethodTracing.affectsMeasurementOnThisDevice
(Iafb92, b/303660864)
การแก้ไขข้อบกพร่อง
- เพิ่มเวอร์ชัน agp สูงสุดที่แนะนำเป็น 9.0.0-alpha01 (I5bbb0)
- เพิ่มโหมดการคอมไพล์ลงในบริบทการเปรียบเทียบ (If5612, b/325512900)
- เปิดใช้การติดตาม AIDL โดยค่าเริ่มต้น (ต้องใช้ API 28) (Ia0af2, b/341852305)
- เพิ่มข้อมูลเพิ่มเติมในบริบทการเปรียบเทียบในเอาต์พุต JSON
context.artMainlineVersion
- เวอร์ชันจำนวนเต็มของโมดูลเมนไลน์ Art (หากมีในอุปกรณ์ หากไม่มีจะเป็น -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) - เปลี่ยน macro->common dependency เป็น
api()
เพื่อให้ใช้งานได้ง่ายขึ้น เช่นPerfettoTrace
และPerfettoConfig
(Icdae3, b/341851833) - ตรวจสอบว่างาน
mergeArtProfile
และmergeStartupProfile
รอการสร้างโปรไฟล์พื้นฐานเสมอ (I623d6, b/343086054) - พิจารณาสถานะการเปิดใช้ตัวแปรเมื่อตัดสินใจว่าจะเปิดใช้ตัวแปรหรือไม่ (I5d19e, b/343249144)
- เพิ่มการหมดเวลาเริ่มต้นเริ่มต้นสำหรับโปรแกรมประมวลผลร่องรอยของ Perfetto (I87e8c, b/329145808)
เวอร์ชัน 1.3.0-alpha05
14 พฤษภาคม 2024
androidx.benchmark:benchmark-*:1.3.0-alpha05
ได้รับการปล่อยแล้ว เวอร์ชัน 1.3.0-alpha05 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แสดงข้อยกเว้นที่ชัดเจนขึ้นเมื่อเมตริก macrobench แสดงผลเป็นค่า 0 สำหรับการวนซ้ำทั้งหมด (Iab58f, b/314931695)
- เพิ่มกฎการแก้ปัญหาเพิ่มเติมลงในกฎ ProGuard ของ microbench ซึ่งรวมถึงการรองรับกฎ Listener และคำเตือน / ข้อผิดพลาดอื่นๆ ที่พบ (I14d8f, b/329126308, b/339085669)
- การติดตามเมธอดจะทํางานเป็นระยะที่แยกต่างหากระหว่างการทดสอบประสิทธิภาพแบบมาโคร และจะไม่ส่งผลต่อการวัดอีกต่อไป (If9a50, b/285912360, b/336588271)
- เพิ่มคำแนะนำการแก้ไขข้อบกพร่องเพิ่มเติมเพื่อแสดงข้อความแจ้งว่าออกอากาศชิลด์ไม่สำเร็จ (I5efa6, b/325502725)
เวอร์ชัน 1.3.0-alpha04
1 พฤษภาคม 2024
androidx.benchmark:benchmark-*:1.3.0-alpha04
ได้รับการปล่อยแล้ว เวอร์ชัน 1.3.0-alpha04 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เพิ่มตัวแปร
MacrobenchmarkRule#measureRepeated
เวอร์ชันทดลองซึ่งใช้PerfettoConfig
ที่กําหนดเองสําหรับการบันทึกร่องรอย Perfetto ที่กําหนดเองได้อย่างเต็มที่ โปรดทราบว่าการกําหนดค่าที่ไม่ถูกต้องอาจทําให้คลาสเมตริกในตัวใช้งานไม่ได้ (Idfd3d, b/309841164, b/304038384) - เปลี่ยนชื่อ
PowerMetric.deviceSupportsPowerEnergy
เป็นPowerMetric.deviceSupportsHighPrecisionTracking
เพื่อให้ชัดเจน (I5b82f) - เพิ่ม
PowerMetric.deviceBatteryHasMinimumCharge()
และPowerMetric.deviceSupportsPowerEnergy()
เพื่อเปิดใช้การเปลี่ยนหรือข้ามการเปรียบเทียบตามความสามารถในการวัดพลังงานของอุปกรณ์ (I6a591, b/322121218)
การแก้ไขข้อบกพร่อง
- เพิ่มการเปรียบเทียบกับโปรไฟล์พื้นฐานก่อนหน้า (I824c8, b/269484510)
- เพิ่ม DSL เพื่อปิดใช้คำเตือน (Ic4deb, b/331237001)
- เปลี่ยนข้อยกเว้นในบันทึกข้อมูลเมื่อปิดใช้ตัวแปรการเปรียบเทียบ (I8a517, b/332772491)
- ลดความซับซ้อนในการบันทึกการติดตามเมธอดสําหรับการทดสอบประสิทธิภาพแบบมาโครโดยกําหนดขอบเขตให้อยู่ในช่วงของ
measureBlock()
จริง ก่อนหน้านี้ เครื่องมือจะเริ่มต้นเมื่อเปิดกระบวนการเป้าหมายและรองรับเฉพาะการเริ่มต้นแบบ Cold Start (Iee85a, b/300651094) - หลีกเลี่ยงข้อขัดข้องเมื่อตัวประมวลผลการติดตามของ Perfetto เริ่มทำงานช้า (I98841, b/329145808)
เวอร์ชัน 1.3.0-alpha03
17 เมษายน 2024
androidx.benchmark:benchmark-*:1.3.0-alpha03
ได้รับการปล่อยแล้ว เวอร์ชัน 1.3.0-alpha03 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เพิ่ม API
PerfettoTraceProcessor.Session.queryMetrics
สาธารณะที่มีรูปแบบ 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 - เพิ่มอาร์กิวเมนต์ inst ทดลอง
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) - แก้ไขการลบล้างพร็อพเพอร์ตี้ของปลั๊กอิน
BaselineProfile
gradle เพื่อเปิดใช้การสร้างโปรไฟล์พื้นฐานและการเปรียบเทียบประสิทธิภาพเมื่อปรับแต่งnonMinified
หรือประเภทบิลด์การเปรียบเทียบประสิทธิภาพ (Ib8f05, b/324837887) - แก้ไขการล้างร่องรอยเมธอดในมาโครเบนช์มาร์กเพื่อให้ระบบบันทึกร่องรอยเมธอดได้อย่างสมบูรณ์และถูกต้อง แม้ในอุปกรณ์ที่ช้ากว่า (I6349a, b/329904950)
- เปิดใช้การบล็อกการเริ่มต้นในบันทึกการติดตาม Perfetto เพื่อลดความเสี่ยงที่ข้อมูลจะหายไปในช่วงเริ่มต้นการติดตาม รองรับใน API ระดับ 33 ขึ้นไปเท่านั้น (Ie6e41, b/310760059)
- เพิ่มคำเตือนเมื่อใช้ Android Test Orchestrator ในโมดูลการเปรียบเทียบ เนื่องจากจะทำให้มีการเขียนทับไฟล์ JSON ของเอาต์พุตต่อโมดูลซ้ำๆ (Ia1af6, b/286899049)
- ใช้ "," (คอมมา) เป็นตัวคั่นพันเพื่อให้เอาต์พุตของ Studio สอดคล้องกันโดยไม่คำนึงถึงภาษาของอุปกรณ์ (I3e921, b/313496656)
- ขณะนี้
TraceSectionMetric
รองรับข้อมูลพร็อพเพอร์ตี้ที่สร้างขึ้นโดยใช้Trace.{begin|end}AsyncSection
(I91b32, b/300434906) - เพิ่มป้ายกำกับ log.w / exception ลงในการตรวจหาที่เริ่มต้นไม่สำเร็จทั้งหมด ซึ่งจะไม่เปลี่ยนลักษณะการทำงานปัจจุบัน (จึงจะแสดงข้อผิดพลาดบางอย่างและอื่นๆ ไม่สามารถตรวจหาการเริ่มต้นระบบได้) เพียงแต่ทำให้เข้าใจได้ง่ายขึ้น โดยทั่วไปแล้ว รายการที่
Log.w()
และรายงานเมตริกการเริ่มต้นไม่สําเร็จคือรายการที่ไม่มีเหตุการณ์ที่ไม่ใช่เฟรม ระบบจะแสดงข้อยกเว้นเมื่อตรวจพบการเริ่มต้น ยกเว้นข้อมูลเวลาเฟรม (จากส่วน UI/RT) (Id240f, b/329145809) - ยกเลิกงาน dexopt เบื้องหลังก่อนเรียกใช้การทดสอบประสิทธิภาพแบบมาโครเพื่อลดการรบกวน (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 แบบทดลองในไมโครเบนช์ผ่านกฎ Proguard ที่ฝังไว้ โปรดทราบว่าการรองรับนี้ยังอยู่ในช่วงทดลอง และต้องใช้ AGP 8.3 สำหรับการลดขนาดการทดสอบโมดูลไลบรารี ใช้คำสั่งต่อไปนี้เพื่อเปิดใช้การย่อขนาด/การเพิ่มประสิทธิภาพ R8 ใน
build.gradle
ของโมดูลการเปรียบเทียบ ซึ่งควรทำให้ประสิทธิภาพเพิ่มขึ้นอย่างมาก ทั้งนี้ขึ้นอยู่กับปริมาณงาน (I738a3, b/184378053)android { buildTypes.release.androidTest.enableMinification = true }
การแก้ไขข้อบกพร่อง
- แก้ไขคำเตือนการติดตามเมธอดให้อยู่คนละบรรทัดกับเอาต์พุตการทดสอบประสิทธิภาพระดับไมโคร (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
เพื่อให้การเปรียบเทียบประสิทธิภาพของเธรดหลัก (เช่น การเปรียบเทียบที่ทำงานกับ Views หรือ UI ของ Compose) หลีกเลี่ยงการเรียกใช้ ANR ได้ โดยเฉพาะในช่วงที่มีชุดทดสอบจำนวนมากใน CI (I5c86d) - เพิ่ม
FrameTimingGfxInfoMetric
ซึ่งเป็นการใช้งานFrameTimingMetric
ทางเลือกเวอร์ชันทดลองที่มีการวัดผลมาจากแพลตฟอร์มโดยตรง ไม่ใช่ดึงมาจากการติดตามของ Perfetto (I457cb, b/322232828) - เพิ่มความสามารถในการถ่ายโอนโปรไฟล์ ART ในระหว่างการทำซ้ำ
warmUp
แต่ละครั้ง (I17923) - การเปลี่ยนแปลงหลายอย่างใน
TraceSectionMetric
API- เพิ่ม
Mode.Min
,Mode.Max
- เพิ่มอาร์กิวเมนต์ป้ายกํากับเพื่อลบล้างชื่อส่วนเป็นป้ายกํากับเมตริก
- เพิ่มชื่อโหมดลงในเอาต์พุตเพื่อชี้แจงความหมายของเมตริก
- เปลี่ยนค่าเริ่มต้นเป็นผลรวม เนื่องจากการใช้งานส่วนใหญ่ของเมตริกนี้ใช้กับเหตุการณ์ที่ซ้ำกัน โปรดทราบว่าการเปลี่ยนแปลงนี้ในการใช้งาน CI อาจทําให้เกิดความต่อเนื่องกันไม่ได้ หรือทําให้การแยกวิเคราะห์หยุดชะงัก (Ic1e82, b/301892382, b/301955938)
- เพิ่ม
การแก้ไขข้อบกพร่อง
- ปรับปรุงข้อความแสดงข้อผิดพลาดในปลั๊กอิน Gradle ของโปรไฟล์พื้นฐานเมื่อไม่มีอุปกรณ์ที่มีการจัดการที่ระบุ (Idea2b, b/313803289)
- แก้ไขการรวมโปรไฟล์พื้นฐานของไลบรารีใน AAR ก่อน AGP 8.3.0-alpha15 (I1d2af, b/313992099)
- แก้ไข URL เอาต์พุตของโปรไฟล์พื้นฐานและโปรไฟล์เริ่มต้นเมื่อสิ้นสุดงานการสร้าง (I802e5, b/313976958)
- ปรับการหมดเวลาของแหล่งข้อมูลเพื่อพยายามแก้ไข
java.lang.IllegalStateException: Failed to stop [ProcessPid(processName=perfetto, pid=...)]
(I8dc7d, b/323601788) - เพิ่มอาร์กิวเมนต์เครื่องมือวัด 2 รายการสำหรับการลบล้างลักษณะการทิ้งเฉดสีเพื่อแก้ปัญหาข้อขัดข้องเมื่อทำการทดสอบประสิทธิภาพแอปโดยไม่มี
ProfileInstaller
1.3androidx.benchmark.dropShaders.enable=true/false
: ใช้เพื่อข้ามการลดระดับ shader ทั้งหมดได้ (รวมถึงการลดระดับที่ดำเนินการในการเปิดStartupMode.Cold
) โดยเฉพาะเมื่อทำการทดสอบประสิทธิภาพแอปที่ไม่ได้ใช้ 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
เพื่อปิดแอปที่ไม่ใช่แอประบบ เช่น System UI หรือ Launcher (I5e028) - ตอนนี้การทดสอบประสิทธิภาพแบบมาโครจะรอ
1 second
เพื่อให้แอปพลิเคชันเป้าหมายล้างโปรไฟล์ ART (ก่อนหน้านี้จะรอ500 ms
) (I85a50, b/316082056) - ปรับปรุงข้อผิดพลาด
FrameTimingMetric
เมื่อระบบไม่สร้างเฟรม และแสดงลิงก์เพื่อติดตามเสมอเมื่อแยกวิเคราะห์เมตริกไม่สําเร็จเพื่อช่วยในการวินิจฉัยปัญหา (I956b9) - แก้ไขข้อขัดข้องใน
FrameTimingMetric
ที่ไม่สามารถแยกวิเคราะห์รหัสเฟรม โดยเฉพาะในอุปกรณ์ OEM บางรุ่น (Ia24bc, b/303823815, b/306235276) - ลดความเข้มงวดในการตรวจสอบใน
FrameMetrics
และเพิ่มรายละเอียดในข้อความแสดงข้อผิดพลาด (Iadede)
เวอร์ชัน 1.2
เวอร์ชัน 1.2.4
17 เมษายน 2024
androidx.benchmark:benchmark-*:1.2.4
ได้รับการปล่อยแล้ว เวอร์ชัน 1.2.4 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขการตั้งค่า srcset ของโปรไฟล์พื้นฐานในตัวแปรการเปรียบเทียบไม่ได้ รวมถึงแก้ไข
automaticGenerationDuringBuild
ในไลบรารีที่ทําให้เกิดการขึ้นต่อกันแบบเวียนกลับ (I28ab7, b/333024280) - ใช้
am force-stop
เพื่อปิดแอปที่ไม่ใช่แอประบบ เช่น System UI หรือ Launcher การแก้ไขนี้จะช่วยแก้ปัญหาการขัดข้องของStartupMode.COLD
จากการที่ "แพ็กเกจ $package ต้องไม่ทำงานก่อนการเริ่มต้นแบบ Cold Start" เนื่องจากการฆ่ากระบวนการไม่สำเร็จ (I5e028)
เวอร์ชัน 1.2.3
24 มกราคม 2024
androidx.benchmark:benchmark-*:1.2.3
ได้รับการปล่อยแล้ว เวอร์ชัน 1.2.3 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- นำข้อยกเว้นออกจากปลั๊กอิน Gradle ของโปรไฟล์พื้นฐานเมื่อ AGP เวอร์ชันเป็น 8.3.0 ขึ้นไป
- แก้ไขการรวมโปรไฟล์พื้นฐานของไลบรารีใน AAR ก่อน AGP 8.3.0-alpha15
เวอร์ชัน 1.2.2
1 ธันวาคม 2023
androidx.benchmark:benchmark-*:1.2.2
ได้รับการปล่อยแล้ว เวอร์ชัน 1.2.2 มีคอมมิตเหล่านี้
โปรไฟล์พื้นฐาน
- บันทึกการดำเนินการจะแสดงเส้นทางไฟล์เอาต์พุตของโปรไฟล์พื้นฐานเป็น URI ของไฟล์ในเครื่อง (aosp/2843918, aosp/2853665, b/313976958)
เวอร์ชัน 1.2.1
15 พฤศจิกายน 2023
androidx.benchmark:benchmark-*:1.2.1
ได้รับการปล่อยแล้ว เวอร์ชัน 1.2.1 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ปรับปรุงข้อความแสดงข้อผิดพลาดเมื่อผู้ใช้ปิดใช้ตัวแปรทดสอบ (b/307478189)
- เพิ่มพร็อพเพอร์ตี้เพื่อรองรับการผสานรวมการทดสอบ AS (b/309805233), (b/309116324)
เวอร์ชัน 1.2.0
18 ตุลาคม 2023
androidx.benchmark:benchmark-*:1.2.0
ได้รับการปล่อยแล้ว เวอร์ชัน 1.2.0 มีคอมมิตเหล่านี้
การเปลี่ยนแปลงที่สําคัญตั้งแต่เวอร์ชัน 1.1.0
โปรไฟล์พื้นฐาน
- ปลั๊กอิน Gradle ของโปรไฟล์พื้นฐานใหม่จะบันทึกและรวมโปรไฟล์พื้นฐานไว้ในเวิร์กโฟลว์การทดสอบและการสร้างโดยอัตโนมัติ
BaselineProfileRule.collect
เวอร์ชันนี้เสถียรแล้ว ซึ่งเป็นเวอร์ชันที่ปรับปรุงและเรียบง่ายกว่าBaselineProfileRule.collectBaselineProfile
API เวอร์ชันทดลองก่อนหน้านี้- เพียงระบุ
packageName
แล้วเพิ่มยอดดาวน์โหลดแอป
- เพียงระบุ
- สำหรับไลบรารีที่สร้างโปรไฟล์พื้นฐาน ตอนนี้คุณสามารถกรองกฎที่สร้างขึ้นได้ในโค้ด (อาร์กิวเมนต์
BaselineProfileRule.collect
) หรือจะกรองในปลั๊กอิน Gradle ที่ง่ายกว่านั้นก็ได้ - การแก้ไข
- แก้ไขการเก็บรวบรวมโปรไฟล์พื้นฐานใน Android U+ (Id1392, b/277645214)
Macrobenchmark
- คอมไพล์
- ตอนนี้การทดสอบประสิทธิภาพแบบมาโครจะรีเซ็ตสถานะการคอมไพล์อย่างถูกต้องทั้งหมดสําหรับการคอมไพล์แต่ละครั้ง ซึ่งจําเป็นต้องติดตั้ง APK อีกครั้งก่อน Android 14 เราจึงขอแนะนําอย่างยิ่งให้ทำการทดสอบประสิทธิภาพใน Android 14 ขึ้นไปหากต้องการเก็บสถานะ (เช่น การเข้าสู่ระบบของผู้ใช้) ไว้ในสิ่งที่จะวัด
- นอกจากนี้ คุณยังแก้ปัญหานี้ได้โดยการควบคุมการคอมไพล์แอปแยกต่างหาก และข้ามการคอมไพล์ด้วย
CompilationMode.Ignore()
หรืออาร์กิวเมนต์การทดสอบ
อาร์กิวเมนต์ของเครื่องมือวัด
- รองรับอาร์กิวเมนต์เครื่องมือวัดประสิทธิภาพ
androidx.benchmark.dryRunMode.enable
(มีอยู่แล้วใน Microbenchmark) เพื่อให้การเรียกใช้การตรวจสอบเร็วขึ้น (เช่น เมื่อสร้างการเปรียบเทียบประสิทธิภาพหรือในขั้นตอนการส่งก่อน) - รองรับ
androidx.benchmark.profiling.mode=StackSampling
และMethodTracing
- เพิ่ม
androidx.benchmark.enabledRules
เพื่ออนุญาตให้การกรองรันไทม์ใช้โปรไฟล์พื้นฐานเทียบกับการทดสอบกฎการทดสอบประสิทธิภาพแบบแมโคร - เพิ่มอาร์กิวเมนต์
androidx.benchmark.perfettoSdkTracing.enable
เพื่อเปิดใช้การติดตามด้วย tracing-perfetto เช่น การติดตามการคอมโพสิชันใหม่ โปรดทราบว่าเมื่อใช้กับStartupMode.COLD
ระบบจะใช้เวลาในการโหลดและเปิดใช้ไลบรารีการติดตามอย่างมีนัยสําคัญในระหว่างการเริ่มต้นแอป
- รองรับอาร์กิวเมนต์เครื่องมือวัดประสิทธิภาพ
ข้อกำหนด
- ตอนนี้ Macrobenchmark ต้องใช้
ProfileInstaller
1.3.0 ขึ้นไปในแอปเป้าหมายเพื่อเปิดใช้การจับภาพ / รีเซ็ตโปรไฟล์ และการล้างแคชชิลด์
- ตอนนี้ Macrobenchmark ต้องใช้
Metric API เวอร์ชันทดลองใหม่
- เพิ่ม
TraceSectionMetric
เวอร์ชันทดลอง ซึ่งช่วยให้ดึงข้อมูลการจับเวลาแบบง่ายจากบล็อกtrace("") {}
ในแอป หรือ TraceMetric เพื่อใช้ประโยชน์จากความสามารถในการค้นหาทั้งหมดของ PerfettoTraceProcessor
- เพิ่ม
PowerMetric
เวอร์ชันทดลองเพื่อบันทึกข้อมูลการใช้พลังงาน - เพิ่ม
MemoryCountersMetric
เวอร์ชันทดลองเพื่อนับข้อผิดพลาดของหน้า - เพิ่ม
PerfettoTraceProcessor
API เวอร์ชันทดลอง ซึ่งใช้ภายในเพื่อดึงข้อมูลเมตริกจากร่องรอยของระบบ (หรือที่เรียกว่าร่องรอย Perfetto)
- เพิ่ม
การแก้ไข
- แก้ไขข้อขัดข้องเมื่อติดตั้งหรือดึงข้อมูลโปรไฟล์จากแอปที่ติดตั้งจาก APK หลายรายการ (เช่น จาก App Bundle)
- แก้ไข
FrameTimingMetric
การละเว้นเฟรมที่มีรหัสเฟรมไม่สอดคล้องกัน (โดยทั่วไปคือเฟรมระหว่างช่วงการกระเพื่อมของ API 31 ขึ้นไป) (I747d2, b/279088460) - แก้ไขข้อผิดพลาดในการแยกวิเคราะห์ร่องรอยที่มีขนาดใหญ่กว่า 64 MB (Ief831, b/269949822)
- อธิบายข้อผิดพลาดเมื่อภาพระบบปฏิบัติการของอุปกรณ์ (โดยเฉพาะโปรแกรมจำลอง) ไม่ได้กําหนดค่าการติดตามหรือการคอมไพล์อย่างไม่ถูกต้อง
- ข้ามการตรวจสอบระดับแบตเตอรี่สำหรับอุปกรณ์ที่ไม่มีแบตเตอรี่ (ไมโครและมาโคร)
- ปรับปรุงเอาต์พุตไฟล์ให้แสดงข้อผิดพลาดที่ชัดเจนยิ่งขึ้นสำหรับไดเรกทอรีเอาต์พุตที่ไม่ถูกต้อง รวมถึงค่าเริ่มต้นที่ปลอดภัยยิ่งขึ้น
- ปรับปรุงความเสถียรของ
StartupMode.COLD
ด้วยการทิ้งแคชโปรแกรมวาดภาพอย่างต่อเนื่อง (แสดงผ่านMacrobenchmarkScope.dropShaderCache
ด้วย) - แก้ไขการแสดงผลสำรองแบบ Leanback สำหรับ
startActivityAndWait
แล้ว
การทดสอบประสิทธิภาพระดับไมโคร
- ฟีเจอร์
- เราได้ย้ายการโปรไฟล์ไปยังระยะที่แยกต่างหากหลังเมตริกอื่นๆ เพื่อให้การทดสอบ 1 ครั้งแสดงทั้งเวลาและผลการโปรไฟล์ที่แม่นยำ
- API การทดสอบ
- เพิ่ม
MicrobenchmarkConfig
API เวอร์ชันทดลองสําหรับการกําหนดเมตริกที่กําหนดเอง รวมถึงการกําหนดค่าการติดตามและการสร้างโปรไฟล์ ใช้เพื่อบันทึกการติดตามเมธอดหรือบันทึกจุดติดตาม (แต่ระวังค่าใช้จ่ายในการติดตาม) - เพิ่ม API เวอร์ชันทดลองสำหรับการควบคุม
BenchmarkState
แยกจากBenchmarkRule
โดยไม่ใช้ JUnit - เพิ่มระเบียน
PerfettoTrace
เวอร์ชันทดลองเพื่อบันทึกร่องรอย Perfetto ด้วยการกําหนดค่าที่กําหนดเองแยกจาก API การเปรียบเทียบ
- เพิ่ม
- การแก้ไข
- วิธีแก้ปัญหาช่องว่างนำหน้าขาดหายไปในเอาต์พุตการทดสอบประสิทธิภาพของ Android Studio
- แก้ปัญหาที่การพิมพ์คำเตือนในเอาต์พุตการเปรียบเทียบประสิทธิภาพของ Android Studio ไม่สำเร็จ
- แก้ไขข้อขัดข้องของ
SampledProfiling
ใน Android 13 (API 33) ขึ้นไป - ปรับปรุงประสิทธิภาพของ
dryRunMode
อย่างมากด้วยการข้ามIsolationActivity
และการติดตาม Perfetto (โหมดการทําการจำลองเร็วขึ้นสูงสุด 10 เท่าในระบบปฏิบัติการเวอร์ชันเก่า)
เวอร์ชัน 1.2.0-rc02
6 ตุลาคม 2023
androidx.benchmark:benchmark-*:1.2.0-rc02
ได้รับการปล่อยแล้ว เวอร์ชัน 1.2.0-rc02 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขเอาต์พุตไฟล์การเปรียบเทียบเพื่อให้การคัดลอกไฟล์ปลั๊กอิน
BaselineProfile
ทำงานได้อีกครั้ง ระบบสร้างและคัดลอกไฟล์ออกจากอุปกรณ์แล้ว แต่ได้เปลี่ยนชื่อไฟล์ดังกล่าวเพื่อไม่ให้ปลั๊กอิน Gradle เห็น (I8dbcc, b/303034735, b/296453339) - ชี้แจงข้อความแสดงข้อผิดพลาดในการโหลด
tracing-perfetto
เมื่อแทรกจากโมดูลการทดสอบประสิทธิภาพแบบมาโครลงในแอปพลิเคชันเป้าหมาย
เวอร์ชัน 1.2.0-rc01
20 กันยายน 2023
androidx.benchmark:benchmark-*:1.2.0-rc01
ได้รับการปล่อยแล้ว เวอร์ชัน 1.2.0-rc01 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- ตอนนี้ระบบจะแสดงข้อยกเว้น (พร้อมวิธีการแก้ไข) เมื่อการติดตาม Perfetto SDK เริ่มต้นไม่สําเร็จในข้อมูลการเปรียบเทียบ (I6c878, b/286228781)
- แก้ไขข้อขัดข้อง OOM เมื่อแปลงการติดตามเมธอด ART -> รูปแบบ Perfetto (I106bd, b/296905344)
- (การทดสอบประสิทธิภาพแบบมาโคร) ชี้แจงป้ายกำกับการติดตามเมธอดเมื่อลิงก์ในเอาต์พุตการทดสอบของ Studio และแก้ไขชื่อไฟล์การติดตามเมธอดให้ไม่ซ้ำกันในอุปกรณ์/โฮสต์ เพื่อไม่ให้มีการเขียนทับเมื่อมีการเรียกใช้การทดสอบประสิทธิภาพมากกว่า 1 รายการ (I08e65, b/285912360)
- ตรวจสอบว่าอุปกรณ์ทำงานอยู่เมื่อจับภาพโปรไฟล์พื้นฐาน (I503fc)
เวอร์ชัน 1.2.0-beta05
30 สิงหาคม 2023
androidx.benchmark:benchmark-*:1.2.0-beta05
ได้รับการปล่อยแล้ว เวอร์ชัน 1.2.0-beta05 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้ปลั๊กอิน Gradle ของโปรไฟล์พื้นฐานรองรับปลั๊กอิน Android Gradle เวอร์ชัน 8.3 แล้ว (aosp/2715214)
เวอร์ชัน 1.2.0-beta04
23 สิงหาคม 2023
androidx.benchmark:benchmark-*:1.2.0-beta04
ได้รับการปล่อยแล้ว เวอร์ชัน 1.2.0-beta04 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- ตอนนี้ปลั๊กอิน Gradle ของโปรไฟล์พื้นฐานรองรับปลั๊กอิน Android Gradle เวอร์ชัน 8.3 แล้ว (aosp/2715214)
การแก้ไขข้อบกพร่อง
- แก้ไขการเขียน / การย้าย และการดึงไฟล์ (โดยเฉพาะไฟล์จากการทดสอบที่มีพารามิเตอร์) ที่ไม่สําเร็จโดยการทำให้ชื่อไฟล์เอาต์พุตถูกต้องยิ่งขึ้น หลีกเลี่ยงการใช้ "=" และ ":" ในชื่อไฟล์เอาต์พุต (I759d8)
เวอร์ชัน 1.2.0-beta03
9 สิงหาคม 2023
androidx.benchmark:benchmark-*:1.2.0-beta03
ได้รับการปล่อยแล้ว เวอร์ชัน 1.2.0-beta03 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เพิ่มอาร์กิวเมนต์เพื่อกรอง
TraceSectionMetric
เฉพาะแพ็กเกจเป้าหมาย ซึ่งเปิดอยู่โดยค่าเริ่มต้น (Ia219b, b/292208786)
การแก้ไขข้อบกพร่อง
- เปลี่ยนชื่ออาร์กิวเมนต์เครื่องมือวัด
fullTracing.enable
เป็นperfettoSdkTracing.enable
เพื่อให้สอดคล้องกับชื่ออาร์ติแฟกต์และการอ้างอิงอื่นๆfullTracing.enable
จะยังคงทำงานเป็นทางเลือกสำรองต่อไป (I7cc00) - ตอนนี้จุดติดตามภายในของไลบรารีการเปรียบเทียบประสิทธิภาพ (รวมถึงการติดตามรอบ/ระยะของไมโครการเปรียบเทียบประสิทธิภาพ) จะปรากฏในเครื่องมือดูการติดตามระบบของ Studio และซ้อนอยู่ภายใต้กระบวนการที่ถูกต้องใน Perfetto (I6b2e7, b/293510459)
- นำข้อผิดพลาด "ไม่สามารถทำโปรไฟล์ได้" ของ 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 เมื่อระบบปฏิบัติการได้รับการกําหนดค่าการติดตามไม่ถูกต้อง ตามที่เพิ่งได้รับการแก้ไขในโปรแกรมจําลอง ARM64 ของ API 26/28 (I0a328, b/282191686)
- เพิ่มรายละเอียดเกี่ยวกับการรีเซ็ตการคอมไพล์ไม่สำเร็จเพื่อแนะนำให้อัปเดตโปรแกรมจำลอง เนื่องจากโปรแกรมจำลองบางตัวแก้ไขปัญหานี้ไปเมื่อเร็วๆ นี้ (I8c815, b/282191686)
- เปลี่ยน
androidx.test.uiautomator:uiautomator:2.2.0
เป็นapi
แทนการอ้างอิง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) - โปรไฟล์การทดสอบประสิทธิภาพแบบไมโครเบนช์มาร์กย้ายไปอยู่ในระยะที่แยกต่างหาก จึงเกิดขึ้นตามลำดับหลังการวัดผลแทนที่จะมาแทนที่การวัดผล ตอนนี้ส่วนการติดตาม
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 จะสร้างโปรไฟล์พื้นฐานที่เสถียรเสมอ ระบบได้นำcollectStableBaselineProfile
API ออกแล้วและควรใช้collectBaselineProfile
แทน (I17262, b/281078707)- เปลี่ยนอาร์กิวเมนต์
filterPredicate
ของBaselineProfileRule
เป็นค่าที่ไม่ใช่ Null พร้อมค่าเริ่มต้นที่เทียบเท่าเพื่อให้ลักษณะการทํางานของตัวกรองเริ่มต้นชัดเจนขึ้นในเอกสาร (I3816e)
การแก้ไขข้อบกพร่อง
- ปิดใช้การติดตาม
IsolationActivity
และ Perfetto ในdryRunMode
เพื่อปรับปรุงประสิทธิภาพให้ดียิ่งขึ้น เนื่องจากเป็นรันไทม์ส่วนใหญ่ (Ie4f7d) - รองรับการสุ่มตัวอย่างสแต็กการเรียกใช้ในการทดสอบประสิทธิภาพแบบมาโครโดยใช้อาร์กิวเมนต์การทดสอบเครื่องมือวัด
androidx.benchmark.profiling.mode=StackSampling
และandroidx.benchmark.profiling.sampleFrequency
(I1d13b, b/282188489) - แก้ไขข้อขัดข้องเมื่อวางชิเดอร์ใน Android U (API 34) รวมถึงในโปรแกรมจำลอง (I031ca, b/274314544)
เวอร์ชัน 1.2.0-alpha14
3 พฤษภาคม 2023
androidx.benchmark:benchmark-*:1.2.0-alpha14
ได้รับการปล่อยแล้ว เวอร์ชัน 1.2.0-alpha14 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไข
FrameTimingMetric
การละเว้นเฟรมที่มีรหัสเฟรมไม่สอดคล้อง ซึ่งจะทำให้ภาพเคลื่อนไหวบางรายการในแพลตฟอร์มเวอร์ชันล่าสุด (API 31 ขึ้นไป) ละเว้นเฟรมจำนวนมากขณะที่RenderThread
แสดงภาพเคลื่อนไหว (เช่น ระหว่างที่มีภาพเคลื่อนไหว) (I747d2, b/279088460) - แก้ไขการแยกวิเคราะห์โปรแกรมประมวลผลร่องรอยสําหรับร่องรอยที่มีขนาดใหญ่กว่า 64 MB (Ief831, b/269949822)
- แก้ไขการสร้างโปรไฟล์พื้นฐานใน Android U ไม่สำเร็จเนื่องจากผลลัพธ์ของคำสั่ง
pm dump-profiles
แตกต่างกัน (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 (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 ของโปรไฟล์พื้นฐานในเอาต์พุตของ Studio (I958d1, b/261781624)
- ตอนนี้ระบบจะจดจำ Arm emulator api 33 ได้อย่างถูกต้องเมื่อพยายามเรียกใช้การทดสอบประสิทธิภาพแบบมาโคร และจะพิมพ์คำเตือนอย่างถูกต้อง (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)
- แก้ไขคำสั่งเชลล์หลายรายการที่ไม่สำเร็จเมื่อเกิดข้อผิดพลาด พิมพ์ 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 ของ ProfileInstaller ซึ่งยังไม่ได้เผยแพร่ (I5c728, b/258619948) หากต้องการแก้ปัญหาใน profileinstaller:1.3.0-alpha02
ให้เพิ่มรายการต่อไปนี้ลงใน AndroidManifest.xml ของแอปพลิเคชัน (ไม่ใช่ของข้อมูลเปรียบเทียบ)
<!-- workaround bug in profileinstaller 1.3.0-alpha02, remove when updating to alpha03+ -->
<receiver
android:name="androidx.profileinstaller.ProfileInstallReceiver"
android:permission="android.permission.DUMP"
android:exported="true">
<intent-filter>
<action android:name="androidx.profileinstaller.action.BENCHMARK_OPERATION" />
</intent-filter>
</receiver>
เวอร์ชัน 1.2.0-alpha07
9 พฤศจิกายน 2022
androidx.benchmark:benchmark-*:1.2.0-alpha07
ได้รับการปล่อยแล้ว เวอร์ชัน 1.2.0-alpha07 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เพิ่ม
PowerMetric
API สําหรับการวัดพลังงานและกำลังไฟฟ้าในมาโครเบนช์มาร์ก (Ife601, b/220183779) - แก้ไข
MacrobenchmarkScope.dropShaderCache()
เพื่อวางแคชโปรแกรมเปลี่ยนสี ซึ่งจะช่วยลดข้อผิดพลาดประมาณ 20 มิลลิวินาทีจากการทดสอบประสิทธิภาพStartupMode.COLD
เนื่องจากตอนนี้ระบบจะล้างโปรแกรมเปลี่ยนสีอย่างสม่ำเสมอในแต่ละรอบ ก่อนหน้านี้ การคอมไพล์Partial
โดยใช้การทำซ้ำเพื่ออุ่นเครื่องจะรายงานตัวเลขที่เร็วอย่างไม่ถูกต้อง เนื่องจากแคชชิดเดอร์มีแนวโน้มที่จะเกิดขึ้นในระหว่างการอุ่นเครื่อง การแก้ไขนี้ต้องใช้อุปกรณ์ที่รูทหรือใช้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 ทดสอบการวัดประสิทธิภาพแบบแมโครเป็นเครื่องมือวัดผลด้วยตนเอง ข้อผิดพลาดนี้ทําให้ทำการทดสอบประสิทธิภาพแบบมาโครจากภายในกระบวนการของแอปเป้าหมายไม่ได้ ในระหว่างดำเนินการ macrobench จะคอมไพล์/ฆ่า/เริ่มแอปแบบ Cold Start หรือควบคุมสิทธิ์ของตนเองไม่ได้ (I4279b)
- แก้ไขปัญหาใน
measureRepeated()
ที่StartupMode.COLD
ไม่หยุดกระบวนการเป้าหมายหลังจากsetupBlock
ตอนนี้setupBlock
การโต้ตอบกับแอปจะไม่ทำให้กระบวนการของแอปทำงานอยู่และเป็นการวัดการเริ่มต้นแบบ Cold Start ที่ไม่ถูกต้อง (I8ebb7)
เวอร์ชัน 1.2.0-alpha06
24 ตุลาคม 2022
androidx.benchmark:benchmark-*:1.2.0-alpha06
ได้รับการปล่อยแล้ว เวอร์ชัน 1.2.0-alpha06 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
BaselineProfileRule
ไม่จำเป็นต้องมีสิทธิ์เข้าถึงระดับรูทใน Android 13 (API 33) อีกต่อไป และไม่ใช่เวอร์ชันทดลองอีกต่อไป (Ie0a7d, b/250083467, b/253094958)- การเปลี่ยนแปลงนี้ยังแก้ไขวิธีล้างโปรไฟล์จากแอปลงในดิสก์บนอุปกรณ์ที่ไม่ได้รูทด้วย แต่ต้องอัปเดต Dependency ของ ProfileInstaller ของแอปเป้าหมาย
- หากต้องการใช้
BaselineProfileRule
หรือCompilationMode.Partial(warmupIterations)
ในอุปกรณ์ที่ไม่ได้รูท คุณต้องอัปเดตแอปเป้าหมายให้ใช้androidx.profileinstaller.profileinstaller:1.3.0-alpha01
ด้วย ซึ่งจะช่วยให้ล้างโปรไฟล์ลงในดิสก์ได้อย่างถูกต้องเพื่อให้คอมไพล์/ดึงข้อมูลได้
การแก้ไขข้อบกพร่อง
- แก้ไขข้อขัดข้องของ
SampledProfiling
ใน API 33 ขึ้นไป (I40743, b/236109374)
เวอร์ชัน 1.2.0-alpha05
5 ตุลาคม 2022
androidx.benchmark:benchmark-*:1.2.0-alpha05
ได้รับการปล่อยแล้ว เวอร์ชัน 1.2.0-alpha05 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไขรายละเอียดเฟรมในเครื่องมือดูการติดตามระบบของ Studio สําหรับการติดตามที่บันทึกไว้เพื่อเปรียบเทียบประสิทธิภาพ (I3f3ae, b/239677443)
- แก้ไข
FrameTimingMetric
ในรายการFrameOverrun
ว่าต้องใช้ API ระดับ 31 แทน 29 (I716dd, b/220702554) - ตั้งค่าการวนซ้ำใน
BaselineProfileRule
และแสดงข้อผิดพลาดอย่างชัดเจนหากไม่ได้ติดตั้งแพ็กเกจเป้าหมาย (ทำไปแล้วสำหรับ MacrobenchmarkRule) (Ic09a3, b/227991471)
เวอร์ชัน 1.2.0-alpha04
21 กันยายน 2022
androidx.benchmark:benchmark-*:1.2.0-alpha04
ได้รับการปล่อยแล้ว เวอร์ชัน 1.2.0-alpha04 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
เพิ่มการรองรับ
dryRunMode.enable
อาร์กิวเมนต์เครื่องมือวัดผลในมาโครเบนช์มาร์ก (มีให้ใช้งานในไมโครอยู่แล้ว) เพื่อการพัฒนาในเครื่องที่เร็วขึ้น และการตรวจสอบการทำงานอัตโนมัติของแอป (เช่น ในการตรวจสอบก่อนส่ง) ซึ่งจะลบล้างจำนวนรอบเป็น 1, ข้ามการคอมไพล์, ระงับข้อผิดพลาดในการกําหนดค่าทั้งหมด และปิดใช้เอาต์พุตไฟล์ .json ของการวัด (Ib51b4, b/175149857)ในบรรทัดคำสั่ง Gradle ให้ทำดังนี้
./gradlew macrobenchmark:cC -P android.testInstrumentationRunnerArguments.androidx.benchmark.dryRunMode.enable=true
ใน build.gradle
android { defaultConfig { testInstrumentationRunnerArgument 'androidx.benchmark.dryRunMode.enable', 'true' } }
การแก้ไขข้อบกพร่อง
- แก้ไข
StartupTimingMetric
เพื่อไม่จําเป็นต้องเปิดใช้งานกิจกรรมที่วัดผลผ่านMacrobenchmarkScope.startActivityAndWait()
อีกต่อไป ซึ่งหมายความว่าเมตริกจะตรวจพบการเปิดจากแหล่งที่มาต่างๆ เช่น การแจ้งเตือน,Context.startActivity()
, การนําทางตามกิจกรรมในแอป หรือคําสั่งเชลล์ (Ia2de6, b/245414235) - แก้ไขข้อบกพร่องที่
startActivityAndWait
จะหมดเวลาขณะรอการเปิดตัวให้เสร็จสมบูรณ์ในโปรแกรมจำลองโดยการลดความเข้มงวดในการตรวจจับเฟรม (Ibe2c6, b/244594339, b/228946895)
เวอร์ชัน 1.2.0-alpha03
7 กันยายน 2022
androidx.benchmark:benchmark-*:1.2.0-alpha03
ได้รับการปล่อยแล้ว เวอร์ชัน 1.2.0-alpha03 มีคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เพิ่ม API เวอร์ชันทดลองสำหรับการใช้
BenchmarkState
อย่างอิสระแยกจากBenchmarkRule
/JUnit4
(Id478f, b/228489614)
การแก้ไขข้อบกพร่อง
- เพิ่ม Leanback สำรองสำหรับ
startActivityAndWait
(01ed77, b/242899915)
เวอร์ชัน 1.2.0-alpha02
24 สิงหาคม 2022
androidx.benchmark:benchmark-*:1.2.0-alpha02
ได้รับการปล่อยแล้ว เวอร์ชัน 1.2.0-alpha02 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- ค่าเริ่มต้นคือ
am force stop
สำหรับMacrobenchmarkScope.killProcess()
แม้ว่าจะรูทแล้วก็ตาม ยกเว้นระหว่างการสร้างโปรไฟล์พื้นฐาน ซึ่งสามารถลบล้างได้ด้วยอาร์กิวเมนต์บูลีน (ไม่บังคับ) (02cce9, b/241214097)
การแก้ไขข้อบกพร่อง
- รองรับการสร้างโปรไฟล์พื้นฐานสําหรับแอประบบ (I900b8, b/241214097)
- รองรับการตรวจสอบเมตริกพลังงาน ODPM ในอุปกรณ์ที่ไม่ได้รูท (a38c78, b/229623230)
เวอร์ชัน 1.2.0-alpha01
27 กรกฎาคม 2022
androidx.benchmark:benchmark-*:1.2.0-alpha01
ได้รับการปล่อยแล้ว เวอร์ชัน 1.2.0-alpha01 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- คอมโพเนนต์ tracing-perfetto-common ใหม่ที่ช่วยให้เครื่องมือเปิดใช้การติดตาม Perfetto SDK ในแอปที่แสดง (I2cc7f)
เพิ่มอาร์กิวเมนต์เครื่องมือวัด
androidx.benchmark.enabledRules
เพื่อเปิดใช้การกรองการเรียกใช้การทดสอบประสิทธิภาพแบบแมโครให้เหลือเฉพาะการทดสอบประสิทธิภาพ หรือการสร้างโปรไฟล์พื้นฐานเท่านั้น ส่ง "Macrobenchmark" หรือ "BaselineProfile" เพื่อเรียกใช้การทดสอบเพียงประเภทเดียว เช่น เมื่อสร้างBaselineProfiles
ในโปรแกรมจำลองเท่านั้น ระบบรองรับรายการที่คั่นด้วยคอมมาด้วย (I756b7, b/230371561)เช่น ใน 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)
- เพิ่มความสามารถในการล้างแคชเชดเดอร์ใน
MacrobenchmarkScope
(I32122) - ช่วยให้นักพัฒนาแอปกำหนดค่าการแสดงประเภทเมตริกและรายละเอียดหมวดหมู่ระบบย่อยที่ต้องการได้ (I810c9)
- ก่อนหน้านี้ระบบจะแสดง
UnsupportedOperationException
ในการทดสอบประสิทธิภาพหากทํางานในอุปกรณ์ที่ไม่รองรับ ตอนนี้ UOE จะแสดงขึ้นก็ต่อเมื่อมีการใช้เมตริกในอุปกรณ์ที่ไม่รองรับ (เช่นPowerMetric.configure
) (I5cf20, b/227229375) - เพิ่ม
TotalPowerMetric
และTotalEnergyMetric
สำหรับวัดกำลังไฟฟ้าและพลังงานทั้งหมดในแต่ละหมวดหมู่ของระบบในข้อมูลการทดสอบประสิทธิภาพแบบแมโคร (I3b26b, b/224557371)
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่การรีเซ็ตเมธอดที่คอมไพล์แล้วไม่ถูกต้องระหว่างการทดสอบประสิทธิภาพแบบมาโครแต่ละครั้งในบิลด์ที่ไม่ได้รูท แต่วิธีนี้จำเป็นต้องติดตั้ง APK อีกครั้งทุกครั้งที่ดำเนินการซ้ำ ซึ่งจะล้างข้อมูลแอปพลิเคชันสำหรับแต่ละการทดสอบประสิทธิภาพแบบแมโคร (I31c74, b/230665435)
- แก้ไขข้อขัดข้องในการบันทึกการติดตามใน API 21/22 (If7fd6, b/227509388, b/227510293, b/227512788)
- ปรับปรุงการตรวจหาการเริ่มกิจกรรมจนเสร็จสมบูรณ์เพื่อแก้ไขข้อยกเว้น "อ่านเมตริกไม่ได้" ในมาโครการทดสอบประสิทธิภาพการเริ่มต้น (Ia517c)
เวอร์ชัน 1.1.1
เวอร์ชัน 1.1.1
9 พฤศจิกายน 2022
androidx.benchmark:benchmark-*:1.1.1
ได้รับการปล่อยแล้ว เวอร์ชัน 1.1.1 มีคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- แก้ไข
android.system.ErrnoException: open failed: EACCES
ซึ่งจะเกิดขึ้นในอุปกรณ์ Android11 (API 30 ขึ้นไป) บางรุ่น การแก้ไขนี้เป็นการคัดสรรจาก1.2.0-alpha01
(aosp/2072249)
เวอร์ชัน 1.1.0
เวอร์ชัน 1.1.0
15 มิถุนายน 2022
androidx.benchmark:benchmark-*:1.1.0
ได้รับการปล่อยแล้ว เวอร์ชัน 1.1.0 มีคอมมิตเหล่านี้
- เวอร์ชันนี้เหมือนกับ
androidx.benchmark:benchmark-*:1.1.0-rc03
การเปลี่ยนแปลงที่สําคัญตั้งแต่เวอร์ชัน 1.0.0
การรองรับการทดสอบประสิทธิภาพแบบมาโครของ Jetpack ซึ่งช่วยให้คุณวัดการโต้ตอบทั้งแอปได้ เช่น การเริ่มต้นและการเลื่อน จะช่วยให้คุณบันทึกร่องรอยและวัดส่วนร่องรอยได้
รองรับโปรไฟล์พื้นฐาน
CompilationMode.Partial
เพื่อวัดประสิทธิภาพของโปรไฟล์พื้นฐาน@BaselineProfileRule
เพื่อสร้างโปรไฟล์พื้นฐานโดยอัตโนมัติสําหรับเส้นทางของผู้ใช้ที่สําคัญ
การรองรับเมตริกการจัดสรรและการโปรไฟล์ระหว่างการเรียกใช้การทดสอบประสิทธิภาพระดับไมโคร
เวอร์ชัน 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 ที่มีการจัดการเมื่อสร้างโปรไฟล์พื้นฐานด้วยการทดสอบประสิทธิภาพแบบมาโคร (aosp/2062228, b/228926421)
เวอร์ชัน 1.1.0-rc02
11 พฤษภาคม 2022
androidx.benchmark:benchmark-*:1.1.0-rc02
ได้รับการปล่อยแล้ว เวอร์ชัน 1.1.0-rc02 มีการคอมมิตเหล่านี้
- โปรดทราบว่ารุ่นนี้มีการเปลี่ยนแปลงลักษณะการทํางาน เนื่องจากตอนนี้ระบบจะติดตั้งแอปใหม่ทั้งหมดระหว่างการเปรียบเทียบแต่ละครั้งเพื่อให้การวัดผลถูกต้องแม่นยำ
การแก้ไขข้อบกพร่อง/การเปลี่ยนแปลงลักษณะการทำงาน
แก้ไขปัญหาที่การคอมไพล์แอปไม่ได้รีเซ็ตอย่างถูกต้องระหว่างการทดสอบประสิทธิภาพแบบมาโคร และไม่ได้รีเซ็ตเลยในบิลด์ที่ไม่ได้รูท วิธีนี้ช่วยแก้ไขได้หลายกรณีที่การทดสอบหลายครั้งส่งผลให้
CompilationMode
ส่งผลต่อค่าการวัดเพียงเล็กน้อยหรือไม่ส่งผลเลย วิธีแก้ปัญหานี้คือแอปเป้าหมายจะติดตั้งวิธีการทดสอบแต่ละรายการอีกครั้งโดยสมบูรณ์ ซึ่งจะล้างข้อมูลแอปพลิเคชันระหว่างการทดสอบแบบมาโครแต่ละครั้ง (I31c74, b/230665435)เนื่องจากการดำเนินการนี้ป้องกันไม่ให้แอปตั้งค่าสถานะก่อนการทดสอบ คุณจึงข้ามการคอมไพล์ / การติดตั้งอีกครั้งเพื่อแก้ปัญหานี้ได้ เช่น คุณสามารถคอมไพล์เป้าหมายอย่างสมบูรณ์ด้วยคำสั่งเชลล์
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)
- แก้ไขเมตริกการเริ่มต้นสําหรับการทดสอบประสิทธิภาพแบบมาโครเมื่อใช้
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
ลงในคลังการทดสอบประสิทธิภาพแบบมาโครภายใต้ Flag การทดสอบเพื่อให้ตรวจจับเสียงที่เล่นไม่ทันได้ (Ib5972) BaselineProfileRule
ไม่รับบล็อกsetup
อีกต่อไปเนื่องจากบล็อกนี้ทำงานเหมือนกับprofileBlock
(Ic7dfe, b/215536447)เช่น
@Test fun collectBaselineProfile() { baselineRule.collectBaselineProfile( packageName = PACKAGE_NAME, setupBlock = { startActivityAndWait() }, profileBlock = { // ... } ) }
@Test fun collectBaselineProfile() { baselineRule.collectBaselineProfile( packageName = PACKAGE_NAME, profileBlock = { startActivityAndWait() // ... } ) }
การแก้ไขข้อบกพร่อง
- แก้ไขปัญหาที่การติดตามโปรไฟล์ไมโครเบนช์จะอัปเดตไม่สำเร็จในการเรียกใช้ครั้งต่อๆ ไปเมื่อลิงก์ไว้ในเอาต์พุตของ Studio (I5ae4d, b/214917025)
- ป้องกันไม่ให้ใช้คำสั่ง Shell คอมไพล์ใน API 23 (Ice380)
- เปลี่ยนชื่อ
FrameCpuTime
->FrameDurationCpu
,FrameUiTime
->FrameDurationUi
เพื่อชี้แจงว่าค่าเหล่านี้คือระยะเวลา ไม่ใช่การประทับเวลา และเพื่อให้ตรงกับคำนำหน้า (I0eba3, b/216337830)
เวอร์ชัน 1.1.0-beta02
26 มกราคม 2022
androidx.benchmark:benchmark-*:1.1.0-beta02
ได้รับการปล่อยแล้ว เวอร์ชัน 1.1.0-beta02 มีการคอมมิตเหล่านี้
การแก้ไขข้อบกพร่อง
- ตอนนี้ผลลัพธ์ของโปรไฟล์การติดตามเมธอด / การสุ่มตัวอย่างสแต็กการวัดประสิทธิภาพระดับไมโครเบนช์มาร์กจะลิงก์อยู่ในเอาต์พุตของ 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
เป็น Enumeration เพื่อความชัดเจน (Id67ea)
เวอร์ชัน 1.1.0-alpha13
15 ธันวาคม 2021
androidx.benchmark:benchmark-*:1.1.0-alpha13
ได้รับการปล่อยแล้ว เวอร์ชัน 1.1.0-alpha13 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เพิ่มการติดตามระบบที่มีค่าใช้จ่ายต่ำลงในเอาต์พุตการทดสอบประสิทธิภาพแบบไมโครเบนช์ใน Android Q (API 29 ขึ้นไป) โปรดทราบว่าขณะนี้การติดตามนี้ไม่ได้บันทึกการติดตามที่กำหนดเอง (ผ่าน
android.os.Trace
หรือandroidx.tracing
Jetpack API) เพื่อไม่ให้ส่งผลต่อผลลัพธ์ การติดตามนี้ควรมีประโยชน์ในการวินิจฉัยความไม่เสถียร โดยเฉพาะอย่างยิ่งจากแหล่งที่มาภายนอกการเปรียบเทียบ (I298be, b/205636583, b/145598917) - อธิบาย
CompilationModes
เป็น 3 คลาส ได้แก่ Full, None, Partial ก่อนหน้านี้ ไฟล์เหล่านี้มีการตั้งชื่อไม่สอดคล้องกันตามอาร์กิวเมนต์การคอมไพล์ (ซึ่งตอนนี้เราถือว่าเป็นรายละเอียดการใช้งาน) และฟีเจอร์ วิธีนี้ช่วยให้เห็นข้อดีข้อเสีย ชุดค่าผสมที่เป็นไปได้ และลักษณะการทํางานของแพลตฟอร์มแต่ละเวอร์ชันได้ชัดเจนขึ้น (I3d7bf, b/207132597) - ตอนนี้การตั้งค่าและการวัดจะอยู่ในคู่ตามลําดับเสมอ ตอนนี้คุณค้นหาชื่อแพ็กเกจและการวนซ้ำได้แล้ว (แม้ว่าการวนซ้ำอาจเป็น
null
ในบางสถานการณ์การอุ่นเครื่อง) (Id3b68, b/208357448, b/208369635)
การแก้ไขข้อบกพร่อง
- แก้ไข
CompilationMode.Speed
ที่ระบบประมวลผลเป็นNone
อย่างไม่ถูกต้อง (I01137)
เวอร์ชัน 1.1.0-alpha12
17 พฤศจิกายน 2021
androidx.benchmark:benchmark-*:1.1.0-alpha12
ได้รับการปล่อยแล้ว เวอร์ชัน 1.1.0-alpha12 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
- เพิ่ม TraceSectionMetric เวอร์ชันทดลองสําหรับการวัดเวลาตามการติดตามที่กําหนดเอง (I99db1, b/204572664)
การแก้ไขข้อบกพร่อง
- ปลุกอุปกรณ์ในแต่ละรอบเพื่อให้แน่ใจว่าทดสอบ UI ได้ - ต้องปิดใช้หน้าจอล็อก (Ibfa28, b/180963442)
- แก้ไขข้อขัดข้องหลายรายการในโหมดโปรไฟล์การเรียกใช้สแต็กในโปรแกรมจำลองและอุปกรณ์ที่ไม่ได้รูท (Icdbda, b/202719335)
- นำการหยุดพัก 0.5 วินาทีที่สิ้นสุดการวนซ้ำแต่ละครั้งออก หากคุณเห็นว่าเมตริกหายไปหลังจากการเปลี่ยนแปลงนี้ โปรดรายงานข้อบกพร่อง (Iff6aa)
- ลดโอกาสที่ข้อมูลจะหายไปและลดค่าใช้จ่ายเพิ่มเติมของหน่วยความจําจากการติดตาม (Id2544, b/199324831, b/204448861)
- ลดขนาดการติดตามลงประมาณ 40% ด้วยการเปลี่ยนไปใช้รูปแบบพื้นที่เก็บข้อมูลแบบกะทัดรัด (Id5fb6, b/199324831)
- อัปเดตการใช้งานเมตริกการเริ่มต้นระบบให้สิ้นสุดที่ตอนจบของ 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
เพื่อให้แอปที่ใช้โปรไฟล์พื้นฐานเรียกใช้การทดสอบประสิทธิภาพแบบมาโครโดยใช้CompilationMode.BaselineProfile
ได้ง่ายขึ้น (I42657, b/196074999) หมายเหตุ: ต้องมีการอัปเดตเป็นandroidx.profileinstaller:profileinstaller:1.1.0-alpha04
ขึ้นไปด้วย - ตอนนี้การเปรียบเทียบ
StartupMode.COLD
+CompilationMode.None
มีความเสถียรมากขึ้น (I770cd, b/196074999)
เวอร์ชัน 1.1.0-alpha06
18 สิงหาคม 2021
androidx.benchmark:benchmark-*:1.1.0-alpha06
ได้รับการปล่อยแล้ว เวอร์ชัน 1.1.0-alpha06 มีการคอมมิตเหล่านี้
การเปลี่ยนแปลง API
- เพิ่มอาร์กิวเมนต์เครื่องมือวัด
androidx.benchmark.iterations
เพื่ออนุญาตให้ลบล้างจำนวนการทำซ้ำด้วยตนเองเมื่อทดสอบ/โปรไฟล์ในเครื่อง (6188be, b/194137879)
การแก้ไขข้อบกพร่อง
- เปลี่ยนไปใช้ Simpleperf เป็นเครื่องมือวิเคราะห์ข้อมูลการเรียกใช้แบบสุ่มตัวอย่างเริ่มต้นใน API ระดับ 29 ขึ้นไป (Ic4b34, b/158303822)
ปัญหาที่ทราบ
CompilationMode.BaselineProfile
ยังอยู่ระหว่างการพัฒนา โปรดหลีกเลี่ยงการใช้เมตริกนี้เพื่อพิจารณาคุณภาพของโปรไฟล์ในตอนนี้
เวอร์ชัน 1.1.0-alpha05
4 สิงหาคม 2021
androidx.benchmark:benchmark-*:1.1.0-alpha05
ได้รับการปล่อยแล้ว เวอร์ชัน 1.1.0-alpha05 มีการคอมมิตเหล่านี้
1.1.0-alpha04
ถูกยกเลิกก่อนการเผยแพร่เนื่องจากข้อขัดข้องที่เกิดขึ้นเป็นพักๆ b/193827052
การเปลี่ยนแปลง API
- เปลี่ยน startActivityAndWait เพื่อเรียกใช้การเริ่มผ่าน
am start
ซึ่งจะลดเวลาในการวัดผลแต่ละรอบลงประมาณ 5 วินาที แต่จะไม่รองรับการแยกส่วน Intent อีกต่อไป (I5a6f5, b/192009149
การแก้ไขข้อบกพร่อง
- ลดความรุนแรงในการตรวจหาการจำกัดความร้อน และคำนวณเส้นฐานอีกครั้งหากตรวจพบการจำกัดความร้อนบ่อยครั้ง (I7327b)
- แก้ไข FrameTimingMetric ให้ทํางานใน Android S เบต้า (Ib60cc, b/193260119)
- ใช้
EmptyActivity
เพื่อนำแอปเป้าหมายออกจากสถานะ "หยุดทำงานโดยบังคับ" เพื่อให้รองรับCompilationMode.BaselineProfile
ได้ดียิ่งขึ้น (Id7cac, b/192084204) - เปลี่ยนนามสกุลไฟล์ติดตามเป็น
.perfetto-trace
เพื่อให้ตรงกับมาตรฐานแพลตฟอร์ม (I4c236, b/174663039) - ตอนนี้ StartupTimingMetric จะแสดงผลเมตริก "fullyDrawnMs" เพื่อวัดเวลาจนกว่าแอปพลิเคชันจะแสดงผลเสร็จสมบูรณ์ หากต้องการกําหนดเมตริกนี้สําหรับแอป ให้เรียกใช้ Activity.reportFullyDrawn เมื่อเนื้อหาเริ่มต้นพร้อมใช้งาน เช่น เมื่อรายการในรายการเริ่มต้นโหลดจาก DB หรือเครือข่าย (เมธอด reportFullyDrawn พร้อมใช้งานโดยไม่มีการตรวจสอบเวอร์ชันบิลด์ใน ComponentActivity) โปรดทราบว่าการทดสอบต้องทํางานนานพอที่จะบันทึกเมตริก (startActivityAndWait จะไม่รอให้ reportFullyDrawn) (If1141, b/179176560)
- ลดต้นทุนในการเพิ่มข้อมูลเมตาของ UI ต่อท้ายการติดตามได้มากกว่า 50 ms (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
ใหม่เพื่อรองรับโปรไฟล์ที่ติดตั้งโดยใช้ไลบรารี ProfileInstaller ของ Jetpack (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 ได้ การเปรียบเทียบแบบมาโครยังช่วยให้คุณวัดการโต้ตอบทั้งแอป เช่น การเริ่มต้นและการเลื่อน และบันทึกร่องรอยได้ ดูข้อมูลเพิ่มเติมได้ที่เอกสารประกอบของไลบรารี
androidx.benchmark:benchmark-*:1.1.0-alpha02
ได้รับการปล่อยแล้ว เวอร์ชัน 1.1.0-alpha02 มีการคอมมิตเหล่านี้
ฟีเจอร์ใหม่
เพิ่มอาร์ติแฟกต์การทดสอบประสิทธิภาพแบบมาโคร (androidx.benchmark:benchmark-macro-junit4
และ androidx.benchmark:benchmark-macro
)
- บันทึกเมตริกประสิทธิภาพการเริ่มต้น การสไลด์/ภาพเคลื่อนไหวจากแอปของคุณ ทั้งแบบภายในหรือใน CI
- บันทึกและตรวจสอบร่องรอยจากภายใน Android Studio
การแก้ไขข้อบกพร่อง
- วิธีแก้ปัญหาสิทธิ์เชลล์กับไดเรกทอรีเอาต์พุตใน Android 12 (หมายเหตุ - อาจต้องอัปเดต Android Gradle Plugin เป็น 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 และ
- การรองรับการโปรไฟล์ - ตอนนี้คุณสามารถบันทึกข้อมูลการโปรไฟล์สำหรับการเรียกใช้การเปรียบเทียบเพื่อตรวจสอบสาเหตุที่โค้ดทำงานช้าได้แล้ว การเปรียบเทียบประสิทธิภาพรองรับการบันทึกการติดตามเมธอดหรือการสุ่มตัวอย่างเมธอดจาก ART คุณสามารถตรวจสอบไฟล์เหล่านี้ด้วยเครื่องมือวิเคราะห์โปรไฟล์ภายใน Android Studio โดยใช้ไฟล์ > เปิด
- ตอนนี้ปลั๊กอิน Gradle ของ Benchmark มีค่าเริ่มต้นสำหรับการตั้งค่าที่ง่ายขึ้น ดังนี้
testBuildType
มีการตั้งค่าเป็นรุ่นโดยค่าเริ่มต้น เพื่อหลีกเลี่ยงการใช้การพึ่งพาที่มีการตรวจสอบโค้ดในตัว ระบบจะกำหนดค่า buildType ของรุ่นเป็น buildType เริ่มต้นด้วย ซึ่งจะช่วยให้ Android Studio เลือกตัวแปรการสร้างที่ถูกต้องโดยอัตโนมัติเมื่อเปิดโปรเจ็กต์เป็นครั้งแรก (b/138808399)signingConfig.debug
ใช้เป็นการกำหนดค่าการรับรองเริ่มต้น (b/153583269)
** การแก้ไขข้อบกพร่อง **
- ลดค่าใช้จ่ายเพิ่มเติมในการเปลี่ยนผ่านช่วงเริ่มต้นอย่างมีนัยสําคัญ ซึ่งการวัดผลครั้งแรกของข้อมูลเปรียบเทียบแต่ละรายการจะสูงกว่ารายการอื่นๆ อย่างผิดธรรมชาติ ปัญหานี้เห็นได้ชัดมากขึ้นในเบนช์มาร์กที่มีค่าน้อยมาก (1 ไมโครวินาทีหรือน้อยกว่า) (b/142058671)
- แก้ไขข้อผิดพลาด
InstrumentationResultParser
ที่พิมพ์สำหรับแต่ละการเปรียบเทียบเมื่อเรียกใช้จากบรรทัดคำสั่ง (I64988, b/154248456)
ปัญหาที่ทราบ
- การเรียกใช้ Benchmark ของ gradle ในบรรทัดคำสั่งจะไม่แสดงผลลัพธ์โดยตรง คุณสามารถแก้ปัญหานี้ได้โดยเรียกใช้ผ่าน Studio หรือแยกวิเคราะห์ไฟล์เอาต์พุต JSON เพื่อดูผลลัพธ์
- การรายงานการเปรียบเทียบประสิทธิภาพดึงรายงานจากอุปกรณ์ที่ติดตั้งแอปซึ่งมี applicationId ที่ลงท้ายด้วย "android" หรือ "download" (ไม่คำนึงถึงตัวพิมพ์เล็กและตัวพิมพ์ใหญ่) ไม่ได้ ผู้ใช้ที่พบปัญหานี้ควรอัปเกรดปลั๊กอิน Android Gradle เป็น 4.2-alpha01 ขึ้นไป
เวอร์ชัน 1.0.0
เวอร์ชันการเปรียบเทียบ 1.0.0
20 พฤศจิกายน 2019
androidx.benchmark:benchmark-common:1.0.0
, androidx.benchmark:benchmark-gradle-plugin:1.0.0
และ androidx.benchmark:benchmark-junit4:1.0.0
เผยแพร่โดยไม่มีการเปลี่ยนแปลงจาก 1.0.0-rc01 เวอร์ชัน 1.0.0 มีคอมมิตเหล่านี้
ฟีเจอร์หลักของ 1.0.0
ไลบรารีการเปรียบเทียบประสิทธิภาพช่วยให้คุณเขียนการเปรียบเทียบประสิทธิภาพของโค้ดแอปและรับผลลัพธ์ได้อย่างรวดเร็ว
ซึ่งจะช่วยป้องกันปัญหาเกี่ยวกับการกำหนดค่าบิลด์และรันไทม์ รวมถึงทำให้ประสิทธิภาพของอุปกรณ์คงที่เพื่อให้การวัดผลถูกต้องและสอดคล้องกัน เรียกใช้การเปรียบเทียบประสิทธิภาพใน Android Studio โดยตรง หรือใน Continuous Integration เพื่อสังเกตประสิทธิภาพของโค้ดเมื่อเวลาผ่านไปและป้องกันไม่ให้ประสิทธิภาพลดลง
ฟีเจอร์หลักๆ มีดังนี้
- การทำให้นาฬิกาเสถียร
- การจัดลําดับความสําคัญของชุดข้อความอัตโนมัติ
- การรองรับการทดสอบประสิทธิภาพ UI เช่น ในตัวอย่าง RecyclerView
- การทำ Warmup และการวนซ้ำที่รองรับ 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
เป็นแบบสาธารณะอย่างถูกต้องแล้ว ตอนนี้การใช้ BenchmarkState#report API เวอร์ชันทดลองต้องใช้คำอธิบายประกอบนี้
เวอร์ชัน 1.0.0-alpha05
5 กันยายน 2019
androidx.benchmark:benchmark-common:1.0.0-alpha05
, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha05
และ androidx.benchmark:benchmark-junit4:1.0.0-alpha05
เผยแพร่แล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
การเปลี่ยนแปลง API
- ตอนนี้
BenchmarkState.reportData
API มีสถานะเป็นเวอร์ชันทดลอง
แก้ไขข้อบกพร่อง
- แก้ไขสคริปต์การล็อกนาฬิกา ซึ่งจะดำเนินการไม่สำเร็จในอุปกรณ์ที่ไม่มียูทิลิตีเชลล์
cut
หรือexpr
- แก้ไขปัญหาเกี่ยวกับงาน
./gradlew lockClocks
ที่จะค้างบนอุปกรณ์ที่รูทด้วยยูทิลิตี su เวอร์ชันเก่าซึ่งไม่รองรับ Flag-c
เวอร์ชัน 1.0.0-alpha04
7 สิงหาคม 2019
androidx.benchmark:benchmark-common:1.0.0-alpha04
, androidx.benchmark:benchmark-gradle-plugin:1.0.0-alpha04
และ androidx.benchmark:benchmark-junit4:1.0.0-alpha04
เผยแพร่แล้ว ดูคอมมิตที่รวมอยู่ในเวอร์ชันนี้ได้ที่นี่
นอกจากนี้ เรายังได้เพิ่มเอกสารประกอบใหม่เกี่ยวกับวิธีใช้ไลบรารีการเปรียบเทียบประสิทธิภาพโดยไม่ต้องใช้ Gradle ทั้งสำหรับการใช้งานกับระบบการบิลด์ต่างๆ (เช่น Bazel หรือ Buck) และเมื่อเรียกใช้ใน CI ดูข้อมูลเพิ่มเติมได้ที่สร้างการเปรียบเทียบโดยไม่ต้องใช้ Gradle และเรียกใช้การเปรียบเทียบในการผสานรวมอย่างต่อเนื่อง
ฟีเจอร์ใหม่
- ปลั๊กอิน Gradle
- ตอนนี้จะปิดใช้การครอบคลุมการทดสอบโดยอัตโนมัติ และตั้งค่า
AndroidBenchmarkRunner
โดยค่าเริ่มต้น (b/138374050) - เพิ่มการรองรับการคัดลอกข้อมูลแบบใหม่ตาม AGP เมื่อทำการทดสอบประสิทธิภาพและเมื่อใช้ AGP 3.6 ขึ้นไป
- ตอนนี้จะปิดใช้การครอบคลุมการทดสอบโดยอัตโนมัติ และตั้งค่า
- การเพิ่มรูปแบบ JSON
- เอาต์พุตเวลาการเรียกใช้การทดสอบการเปรียบเทียบทั้งหมด (b/133147694)
- ตอนนี้การเปรียบเทียบ
@Parameterized
ที่ใช้สตริงชื่อ (เช่น@Parameters(name = "size={0},depth={1}")
) จะแสดงชื่อและค่าพารามิเตอร์ต่อการเปรียบเทียบในเอาต์พุต JSON (b/132578772)
- โหมดการทดสอบ (b/138785848)
- เพิ่มโหมด "การทดสอบเสมือนจริง" เพื่อเรียกใช้การทดสอบประสิทธิภาพแต่ละรอบเพียงครั้งเดียว เพื่อตรวจหาข้อผิดพลาด/ข้อขัดข้องโดยไม่บันทึกการวัด ซึ่งอาจมีประโยชน์ เช่น สำหรับการเรียกใช้การเปรียบเทียบอย่างรวดเร็วในขั้นตอนการส่งก่อนเพื่อตรวจสอบว่าไม่มีปัญหา
การเปลี่ยนแปลง API
- โครงสร้างโมดูลมีการเปลี่ยนแปลง โดยจะแยกคลัง (b/138451391)
benchmark:benchmark-junit4
มีคลาสที่ต้องพึ่งพา JUnit ได้แก่AndroidBenchmarkRunner
และBenchmarkRule
ซึ่งทั้ง 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 อื่นๆ ซึ่งก็คือ เวอร์ชันเสถียร (มีข้อยกเว้นที่พบได้น้อยมาก) 1 ครั้งในรุ่นเบต้า และแก้ไขในรุ่นสุดท้าย โดยจะมีเพียงการเพิ่มเติมในรุ่นย่อยและการเปลี่ยนแปลง/การนำออกในรุ่นหลัก
การเปลี่ยนแปลง 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
ได้รับการปล่อยแล้ว คอมมิตที่รวมอยู่ในเวอร์ชันนี้ดูได้ที่นี่