Với thư viện Jetpack Microbenchmark, bạn có thể đo điểm chuẩn mã gốc Android (Kotlin hoặc Java) trong Android Studio. Thư viện này xử lý khởi động, đo lường hiệu quả hoạt động mã và số lượng phân bổ, đồng thời cung cấp kết quả đo điểm chuẩn cho cả bảng điều khiển Android Studio lẫn một tệp JSON chứa thêm nhiều thông tin chi tiết.
Bạn nên phân tích mã trước khi viết một điểm chuẩn. Cách này giúp bạn tìm ra các thao tác tốn kém đáng tối ưu hoá. Đồng thời cũng có thể cho biết lý do các thao tác làm việc chậm bằng cách hiện những gì đang xảy ra trong khi chạy, chẳng hạn như chạy trên luồng có mức độ ưu tiên thấp, chuyển sang chế độ ngủ do quyền truy cập ổ đĩa hoặc bất ngờ gọi vào một hàm tốn kém như giải mã bitmap.
Điểm chuẩn vi mô có ích nhất đối với hoạt động CPU chạy nhiều lần trong ứng dụng, hay còn gọi là đường dẫn mã nóng. Ví dụ điển hình là RecyclerView
cuộn với từng mục lần lượt được hiển thị, chuyển đổi hoặc xử lý dữ liệu và sử dụng liên tục các đoạn mã khác.
Tuy nhiên, các loại mã khác sẽ khó đo lường bằng thư viện Điểm chuẩn vi mô hơn. Vì điểm chuẩn chạy trong một vòng lặp, nên bất kỳ mã nào không chạy thường xuyên hoặc khi được gọi nhiều lần sẽ hoạt động khác có thể không phù hợp để đo điểm chuẩn.
Để tìm hiểu cách sử dụng thư viện trong môi trường Tích hợp liên tục (CI), hãy xem bài viết Chạy trình đo điểm chuẩn trong môi trường Tích hợp liên tục.
Tránh đo lường bộ nhớ đệm
Tìm cách tránh chỉ đo lường mỗi một bộ nhớ đệm. Ví dụ: điểm chuẩn bố cục của khung nhìn tuỳ chỉnh có thể chỉ đo lường hiệu năng bộ nhớ đệm. Để tránh trường hợp này, bạn có thể truyền các tham số bố cục khác nhau trong mỗi vòng lặp. Tuy vậy, trong các trường hợp khác, chẳng hạn như khi đo lường hiệu năng của hệ thống tệp, thao tác này có thể gây nhiều khó khăn vì hệ điều hành sẽ lưu vào bộ nhớ đệm hệ thống tệp khi ở trong vòng lặp.
Đạt điểm chuẩn nhất quán
Xung nhịp trên thiết bị di động thay đổi một cách linh hoạt từ trạng thái cao để tăng hiệu năng sang trạng thái thấp nhằm tiết kiệm pin hoặc khi thiết bị nóng lên. Các xung nhịp khác nhau này có thể khiến số điểm chuẩn thay đổi rất lớn, vì vậy, thư viện sẽ cung cấp các phương pháp để xử lý.
Khoá xung nhịp (yêu cầu thiết bị đã can thiệp hệ thống)
Khoá xung nhịp là cách tốt nhất để đạt hiệu năng ổn định. Phương pháp này đảm bảo xung nhịp không đạt mức quá cao để thiết bị nóng lên hoặc quá thấp khi điểm chuẩn không tận dụng toàn bộ CPU. Bạn có thể áp dụng phương pháp này với một tác vụ của Gradle (gradlew lockClocks
) hoặc theo cách thủ công trong CI. Mặc dù đây là cách tốt nhất để đảm bảo hiệu suất ổn định, nhưng cách này không được hỗ trợ trên hầu hết các thiết bị do yêu cầu có một thiết bị chạy Android đã bị can thiệp vào hệ thống.
Chế độ hiệu suất cao bền vững
Window.setSustainedPerformanceMode()
là một tính năng được các thiết bị hỗ trợ, cho phép một ứng dụng chọn tần suất CPU tối đa thấp. Khi chạy trên các thiết bị được hỗ trợ, thư viện Microbenchmark (Điểm chuẩn vi mô) sẽ sử dụng tổ hợp API này đồng thời khởi chạy hoạt động của riêng mình để ngăn điều tiết nhiệt và ổn định kết quả.
Tính năng này được bật theo mặc định bằng testInstrumentationRunner
do trình bổ trợ Android cho Gradle thiết lập. Nếu muốn sử dụng trình chạy tuỳ chỉnh, bạn có thể thêm lớp con AndroidBenchmarkRunner
và sử dụng nó làm testInstrumentationRunner
.
Trình chạy này khởi chạy một hoạt động mờ, toàn màn hình để đảm bảo trình đo điểm chuẩn chạy ở nền trước cũng như không có bất kỳ ứng dụng nào khác đang vẽ.
Tạm dừng thực thi tự động
Nếu bạn không sử dụng tính năng khoá xung nhịp hoặc duy trì hiệu năng ổn định thì thư viện sẽ tự động phát hiện điều tiết nhiệt. Khi được bật, điểm chuẩn nội bộ chạy định kỳ để xác định thời điểm nhiệt độ thiết bị cao đến mức giảm hiệu năng CPU. Khi phát hiện hiệu năng CPU đang giảm, thư viện sẽ tạm dừng quá trình thực thi để thiết bị nguội bớt, sau đó chạy lại điểm chuẩn hiện tại.
Biên dịch AOT
Các phép đo điểm chuẩn vi mô phức tạp có thể mất nhiều thời gian để ổn định và
tình trạng ổn định rất khó phát hiện. Để đo lường một cách nhất quán và nhanh chóng
tốc độ lặp lại là những ưu tiên hàng đầu, trình bổ trợ androidx.benchmark
hoàn toàn
biên dịch APK microbenchmark theo mặc định, tương tự như
CompilationMode.Full
trong Macrobenchmark. Hành vi này yêu cầu Điểm chuẩn
1.3.0-beta01+
và Trình bổ trợ Android cho Gradle 8.4.0+
. Bạn có thể chọn không áp dụng
bằng cách đặt androidx.benchmark.forceaotcompilation=false
trong
gradle.properties
.
Mẫu
Hãy xem các mẫu sau trong kho lưu trữ GitHub:
Tài nguyên khác
Gửi ý kiến phản hồi
Để báo cáo vấn đề hoặc gửi yêu cầu về tính năng khi sử dụng tính năng đo điểm chuẩn, hãy xem công cụ theo dõi lỗi công khai.
Đề xuất cho bạn
- Lưu ý: văn bản có đường liên kết sẽ hiện khi JavaScript tắt
- Đo điểm chuẩn của ứng dụng
- Tạo Hồ sơ cơ sở {:#creating-profile-rules}
- Thư viện JankStats