เปรียบเทียบ

วัดประสิทธิภาพของโค้ดได้อย่างแม่นยำภายใน Android Studio
อัปเดตล่าสุด รุ่นที่เสถียร รุ่นที่อาจได้รับการเผยแพร่ รุ่นเบต้า เวอร์ชันอัลฟ่า
7 พฤษภาคม 2025 1.3.4 - 1.4.0-beta01 -

การประกาศทรัพยากร Dependency

หากต้องการเพิ่มทรัพยากร Dependency ของ Benchmark คุณต้องเพิ่มที่เก็บ Maven ของ Google ลงในโปรเจ็กต์ อ่านข้อมูลเพิ่มเติมในที่เก็บ Maven ของ Google

Macrobenchmark

หากต้องการใช้ Macrobenchmark ในโปรเจ็กต์ ให้เพิ่มการพึ่งพาต่อไปนี้ลงในไฟล์ build.gradle สำหรับโมดูล macrobenchmark

Groovy

dependencies {
  androidTestImplementation "androidx.benchmark:benchmark-macro-junit4:1.3.4"
}

Kotlin

dependencies {
  androidTestImplementation("androidx.benchmark:benchmark-macro-junit4:1.3.4")
}

การทดสอบประสิทธิภาพระดับไมโคร

หากต้องการใช้ Microbenchmark ในโปรเจ็กต์ ให้เพิ่มข้อกําหนดต่อไปนี้ลงในไฟล์ build.gradle ของโมดูล Microbenchmark

Groovy

dependencies {
    androidTestImplementation "androidx.benchmark:benchmark-junit4:1.3.4"
}

android {
    ...
    defaultConfig {
        ...
        testInstrumentationRunner "androidx.benchmark.junit4.AndroidBenchmarkRunner"
    }
}

Kotlin

dependencies {
    androidTestImplementation("androidx.benchmark:benchmark-junit4:1.3.4")
}

android {
    ...
    defaultConfig {
        ...
        testInstrumentationRunner = "androidx.benchmark.junit4.AndroidBenchmarkRunner"
    }
}

ไลบรารี Microbenchmark ยังมีปลั๊กอิน Gradle สำหรับใช้กับโมดูล Microbenchmark ด้วย ปลั๊กอินนี้จะตั้งค่าการกําหนดค่าบิลด์เริ่มต้นสําหรับโมดูล ตั้งค่าการคัดลอกเอาต์พุตการเปรียบเทียบไปยังโฮสต์ และระบุ งาน ./gradlew lockClocks

หากต้องการใช้ปลั๊กอิน ให้ใส่บรรทัดต่อไปนี้ในบล็อก `plugins` ในไฟล์ build.gradle ระดับบนสุด

Groovy

plugins {
  id 'androidx.benchmark' version '1.3.4' apply false
}

Kotlin

plugins {
  id("androidx.benchmark") version "1.3.4" apply false
}

จากนั้นใช้ปลั๊กอินกับไฟล์ build.gradle ของข้อบังคับ

Groovy

plugins {
  id 'androidx.benchmark'
}

Kotlin

plugins {
    id("androidx.benchmark")
}

ความคิดเห็น

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

สร้างปัญหาใหม่

ดูข้อมูลเพิ่มเติมได้ที่เอกสารประกอบของเครื่องมือติดตามปัญหา

เวอร์ชัน 1.4

เวอร์ชัน 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 ให้ตรวจสอบผลลัพธ์ของคําสั่ง kill เพื่อป้องกันไม่ให้เกิดข้อผิดพลาดแบบเงียบๆ และข้อผิดพลาดเกี่ยวกับเวลาหมด (I84555)

การอัปเดตทรัพยากร Dependency

  • ตอนนี้ไลบรารีนี้กำหนดเป้าหมายเป็นภาษา 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)

การแก้ไขข้อบกพร่อง

  • แก้ไขปัญหา 2-3 ข้อที่อาจเกิดขึ้นเมื่อทำการเปรียบเทียบหรือบันทึกโปรไฟล์ของแอปโดยไม่มี 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=...)] ไม่ได้" ตอนนี้การเปรียบเทียบจะบันทึกข้อความแทนที่จะขัดข้องเมื่อหยุดกระบวนการ Perfetto ในเบื้องหลังไม่ได้ก่อนที่จะทำการเปรียบเทียบ (I37d3e, b/323601788)
  • แก้ไข IllegalStateExceptions ที่มีป้ายกำกับ "stdout pm dump-profiles ที่คาดไว้" ซึ่งเกิดจากการตรวจสอบรูปแบบเอาต์พุตที่เข้มงวดเกินไป (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 ซึ่งสามารถตั้งค่าเป็นเท็จเพื่อปิดใช้ลักษณะการทำงาน "throw on deadline" ของ measureRepeatedOnMainThread สำหรับการทดสอบในเครื่อง ไม่แนะนํา เนื่องจากจะเพิ่มโอกาสที่จะได้รับ ANR ระหว่างการทดสอบ (Idbeec, b/353226476)

การเปลี่ยนแปลง API

  • เพิ่ม @JvmOverloads ไปยังตัวสร้าง MicrobenchmarkConfig (I13fd3)
  • ปรับโฉม BenchmarkRule ให้สร้างขึ้นจาก Coroutine และรองรับลักษณะการทำงาน 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 ซึ่งฝังอยู่ในการทดสอบแบบแมโคร คุณใช้อาร์ติแฟกต์ใหม่ใน 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)

การแก้ไขข้อบกพร่อง

  • ตอนนี้ไลบรารีนี้ใช้แอตทริบิวต์ JSpecify nullness ซึ่งเป็นการใช้ประเภท นักพัฒนาซอฟต์แวร์ Kotlin ควรใช้อาร์กิวเมนต์คอมไพเลอร์ต่อไปนี้เพื่อบังคับใช้การใช้งานที่ถูกต้อง -Xjspecify-annotations=strict (นี่เป็นค่าเริ่มต้นที่เริ่มตั้งแต่คอมไพเลอร์ Kotlin เวอร์ชัน 2.1.0) (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 ตอนนี้ 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 แบบ Headless เราได้ทดสอบการรองรับนี้ในบางสถานการณ์แล้ว แต่โปรดแจ้งให้เราทราบหากพบข้อบกพร่อง (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 (นี่เป็นค่าเริ่มต้นที่เริ่มตั้งแต่คอมไพเลอร์ 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)
  • จากการเปรียบเทียบ 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.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) ดึงไฟล์ผลลัพธ์ของโปรไฟล์พื้นฐานหรือการทดสอบประสิทธิภาพแบบแมโครจากปลั๊กอิน 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
  • การเปรียบเทียบและเอนทิตีที่ทำให้เกิดข้อขัดข้องในเธรดหลัก
    • เพิ่ม 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 บางรุ่นควรรองรับฟีเจอร์นี้ แต่ยังไม่มีการทดสอบการรองรับในโปรแกรมจำลองทั้งหมดที่มี

การเปลี่ยนแปลง MACRObenchmark ตั้งแต่เวอร์ชัน 1.2.0

  • ปรับปรุงการติดตามเมธอดสําหรับการทดสอบประสิทธิภาพแบบมาโคร
    • ตอนนี้การติดตามเมธอดจะกําหนดขอบเขตตามระยะเวลาของ measureBlock และสามารถบันทึกเซสชันหลายรายการได้หากกระบวนการเริ่มต้นหลายครั้ง
    • ก่อนหน้านี้ การติดตามเมธอดจะทํางานกับ StartupMode.COLD เบนช์มาร์กเท่านั้น และจะไม่บันทึกข้อมูลสําหรับ measureBlocks ที่ไม่ได้เริ่มกระบวนการเป้าหมายอีกครั้ง
    • แก้ไขการล้างร่องรอยเมธอดในมาโครเบนช์มาร์กเพื่อให้ระบบบันทึกร่องรอยเมธอดได้อย่างสมบูรณ์และถูกต้อง แม้ในอุปกรณ์ที่ช้ากว่า (I6349a, b/329904950)
  • วางไฟล์โปรไฟล์ ART อย่างถูกต้องระหว่างการวนซ้ำ warmUp แต่ละครั้งเมื่อมีการหยุดกระบวนการเพื่อให้การวัด CompilationMode.Partial(warmup=N) มีความแม่นยำมากขึ้น (I17923)
  • ข้อความแสดงข้อผิดพลาดในการออกอากาศ Shader
    • เพิ่มคำแนะนำในการแก้ไขข้อบกพร่องเพื่อแสดงข้อความแจ้งว่าออกอากาศชิดเดอร์ไม่สำเร็จ
    • เพิ่มอาร์กิวเมนต์เครื่องมือวัด 2 รายการสำหรับการลบล้างลักษณะการทิ้งเฉดสีเพื่อแก้ปัญหาข้อขัดข้องเมื่อทำการทดสอบประสิทธิภาพแอปโดยไม่มี ProfileInstaller 1.3
      • androidx.benchmark.dropShaders.enable=true/false : ใช้เพื่อข้ามการลดระดับ shader ทั้งหมดได้ (รวมถึงการลดระดับที่ดำเนินการในการเปิด StartupMode.Cold) โดยเฉพาะเมื่อทำการทดสอบประสิทธิภาพแอปที่ไม่ได้ใช้ ProfileInstaller 1.3
      • androidx.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.ID
      • context.build.version.codename - เท่ากับ android.os.Build.VERSION.CODENAME
      • context.build.version.abbreviatedCodename - สอดคล้องกับตัวอักษรแรกของชื่อรหัสรุ่นก่อนเปิดตัว (รวมถึงในบิลด์รุ่นที่ใช้งานจริง) (Ie5020)
    • เพิ่มรายการ profilerOutput ไปยังเอาต์พุต JSON เพื่อให้ใช้เครื่องมือเกี่ยวกับร่องรอยการโปรไฟล์ได้ง่ายขึ้น (เช่น Perfetto, ร่องรอยเมธอด) (I05ddd, b/332604449)
    • เพิ่มคำเตือนเมื่อใช้ Android Test Orchestrator ในโมดูลการเปรียบเทียบ เนื่องจากจะทำให้ระบบเขียนทับไฟล์ JSON เอาต์พุตต่อโมดูลซ้ำๆ (Ia1af6, b/286899049)
    • แสดงข้อผิดพลาดเมื่อชื่อไฟล์ยาวเกิน 200 อักขระเพื่อหลีกเลี่ยงข้อขัดข้องที่ไม่ชัดเจนเมื่อเขียนหรือประมวลผลไฟล์หลังการประมวลผล (I4a5ab)

เวอร์ชัน 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 ซึ่งสามารถตั้งค่าเป็นเท็จเพื่อหลีกเลี่ยงการข้ามการติดตามเมธอดเมื่อระยะเวลาที่คาดไว้อาจทำให้เกิด 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.3
    • androidx.benchmark.dropShaders.enable=true/false : ใช้เพื่อข้ามการลดระดับ shader ทั้งหมดได้ (รวมถึงการลดระดับที่ดำเนินการในการเปิด StartupMode.Cold) โดยเฉพาะเมื่อทำการทดสอบประสิทธิภาพแอปที่ไม่ได้ใช้ ProfileInstaller 1.3
    • androidx.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 ขึ้นไปในแอปเป้าหมายเพื่อเปิดใช้การจับภาพ / รีเซ็ตโปรไฟล์ และการล้างแคชชิดเดอร์
  • Metric API เวอร์ชันทดลองใหม่

    • เพิ่ม TraceSectionMetric เวอร์ชันทดลอง ซึ่งช่วยให้ดึงข้อมูลการจับเวลาแบบง่ายจากบล็อก trace("") {} ในแอป หรือ TraceMetric เพื่อใช้ประโยชน์จากความสามารถในการค้นหาทั้งหมดของ Perfetto TraceProcessor
    • เพิ่ม 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

เวอร์ชัน 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)
  • แก้ไขข้อขัดข้องหลายรายการในโหมดการโปรไฟล์ 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 เพื่อให้แอปที่ใช้โปรไฟล์พื้นฐานเรียกใช้การทดสอบประสิทธิภาพแบบมาโครโดยใช้ 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 Parcelable อีกต่อไป (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 มีการคอมมิตเหล่านี้

ฟีเจอร์ใหม่

การแก้ไขข้อบกพร่อง

  • ตัวอย่างโค้ด 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
  • การอุ่นเครื่องและการวนซ้ำที่รองรับ 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 ได้รับการปล่อยแล้ว คอมมิตที่รวมอยู่ในเวอร์ชันนี้ดูได้ที่นี่