Sử dụng thư viện Macrobenchmark để thử nghiệm các trường hợp sử dụng lớn hơn trong ứng dụng của bạn,
bao gồm cả việc khởi động ứng dụng và các thao tác giao diện người dùng phức tạp, chẳng hạn như cuộn
RecyclerView
hoặc chạy ảnh động. Nếu bạn muốn thử nghiệm các khu vực nhỏ hơn trong mã của mình, hãy tham khảo Thư viện Điểm chuẩn vĩ mô.
Thư viện sẽ cung cấp các kết quả đo điểm chuẩn cho cả bảng điều khiển của Android Studio và tệp JSON chứa nhiều thông tin chi tiết hơn. Lớp này cũng cung cấp các tệp theo dõi mà bạn có thể tải và phân tích trong Android Studio.
Bạn cũng có thể sử dụng thư viện Macrobenchmark trong môi trường tích hợp liên tục (CI) như mô tả trong bài viết Chạy điểm chuẩn trong tính năng Tích hợp liên tục.
Thiết lập dự án
Bạn nên sử dụng Macrobenchmark với phiên bản Android Studio mới nhất (Bumblebee 2021.1.1 trở lên), vì có các tính năng mới trong phiên bản đó của IDE tích hợp với Macrobenchmark.
Thiết lập mô-đun Macrobenchmark
Điểm chuẩn vĩ mô cần một mô-đun
com.android.test
, tách biệt với mã ứng dụng của bạn, chịu trách nhiệm chạy các thử nghiệm
đo lường ứng dụng của bạn.
Bumblebee (hoặc mới hơn)
Trong Android Studio Bumblebee 2021.1.1, một mẫu có sẵn để đơn giản hóa quá trình thiết lập mô-đun Macrobenchmark. Mẫu mô-đun đo điểm chuẩn sẽ tự động tạo mô-đun trong dự án của bạn để đo lường ứng dụng do một mô-đun ứng dụng tạo, bao gồm cả điểm chuẩn khởi động mẫu.
Để tạo mẫu mô-đun mới và tạo mô-đun mới, hãy làm như sau:
Nhấp chuột phải vào dự án hoặc mô-đun của bạn trong bảng Dự án trong Android Studio và nhấp vào Mới > Mô-đun.
Chọn Điểm chuẩn từ ngăn Mẫu.
Bạn có thể tùy chỉnh ứng dụng mục tiêu (ứng dụng sẽ được đo điểm chuẩn), cũng như tên gói và mô-đun cho mô-đun macrobenchmark mới.
Nhấp vào Hoàn tất.
Arctic Fox
Trong Arctic Fox, bạn sẽ tạo một mô-đun thư viện và chuyển đổi mô-đun đó thành một mô-đun thử nghiệm.
- Nhấp chuột phải vào dự án hoặc mô-đun của bạn trong bảng Dự án trong Android Studio và nhấp vào Mới > Mô-đun.
- Chọn Thư viện Android trong ngăn Mẫu.
- Nhập
macrobenchmark
cho tên mô-đun. - Đặt SDK tối thiểu thành API 23: Android M
- Nhấp vào Hoàn tất.
Sửa đổi tệp Gradle
Tùy chỉnh build.gradle
của mô-đun Macrobenchmark như sau:
- Thay đổi plugin từ
com.android.library
thànhcom.android.test
.apply plugin 'com.android.test'
- Thêm các thuộc tính mô-đun thử nghiệm bắt buộc khác trong khối
android {}
:Groovy
android { // ... // Note that your module name may have different name targetProjectPath = ":app" // Enable the benchmark to run separately from the app process experimentalProperties["android.experimental.self-instrumenting"] = true buildTypes { // declare a build type to match the target app's build type benchmark { debuggable = true signingConfig = debug.signingConfig } } }
Kotlin
android { // ... // Note that your module name may have different name targetProjectPath = ":app" // Enable the benchmark to run separately from the app process experimentalProperties["android.experimental.self-instrumenting"] = true buildTypes { // declare a build type to match the target app's build type create("benchmark") { isDebuggable = true signingConfig = signingConfigs.getByName("debug") } } }
- Thay đổi tất cả các phần phụ thuộc tên
testImplementation
hoặcandroidTestImplementation
thànhimplementation
. - Thêm phần phụ thuộc vào thư viện Macrobenchmark:
implementation 'androidx.benchmark:benchmark-macro-junit4:1.1.0-beta03'
- Chỉ cho phép kiểu dựng
benchmark
của mô-đun này. Sau khốiandroid{}
, nhưng trước khốidependencies{}
, thêm:Groovy
androidComponents { beforeVariants(selector().all()) { // enable only the benchmark buildType, since we only want to measure close to release performance enabled = buildType == 'benchmark' } }
Kotlin
androidComponents { beforeVariants { // enable only the benchmark buildType, since we only want to measure close to release performance it.enable = it.buildType == "benchmark" } }
- Đơn giản hóa cấu trúc thư mục.
Trong mô-đun
com.android.test
, chỉ có một thư mục nguồn, cho tất cả thử nghiệm. Xóa các thư mục nguồn khác, bao gồmsrc/test
vàsrc/androidTest
, vì các thư mục này không được sử dụng.
Thiết lập ứng dụng
Để đo điểm chuẩn cho một ứng dụng (gọi là mục tiêu của điểm chuẩn vĩ mô), ứng dụng đó phải
là profileable
để có thể đọc thông tin theo dõi chi tiết. Bật tính năng này
trong thẻ <application>
trên AndroidManifest.xml
của ứng dụng.
<!-- enable profiling by macrobenchmark -->
<profileable
android:shell="true"
tools:targetApi="q" />
Định cấu hình ứng dụng đo điểm chuẩn càng gần phiên bản phát hành (hoặc phiên bản chính thức)
càng tốt. Thiết lập ứng dụng này là không thể gỡ lỗi và nên bật tính năng giảm kích thước để cải thiện hiệu suất. Bạn thường làm điều này bằng cách tạo một bản sao của biến thể
phát hành, biến thể này hoạt động theo cách tương tự, nhưng được ký cục bộ bằng các khóa gỡ lỗi.
Ngoài ra, bạn có thể dùng initWith
để hướng dẫn Gradle thực hiện việc này cho bạn:
Groovy
buildTypes { release { minifyEnabled true shrinkResources true proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } benchmark { initWith buildTypes.release signingConfig signingConfigs.debug
Kotlin
buildTypes { getByName("release") { isMinifyEnabled = true isShrinkResources = true proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt")) } create("benchmark") { initWith(getByName("release")) signingConfig = signingConfigs.getByName("debug") } }
Thực hiện đồng bộ hóa Gradle, mở bảng điều khiển Tạo các biến thể ở bên trái, và chọn biến thể điểm chuẩn của cả ứng dụng và mô-đun Macrobenchmark. Điều này đảm bảo việc chạy điểm chuẩn sẽ xây dựng và thử nghiệm đúng biến thể của ứng dụng của bạn:
Thiết lập ứng dụng nhiều mô-đun
Nếu ứng dụng của bạn có nhiều mô-đun Gradle, bạn cần đảm bảo tập lệnh bản dựng
sẽ biết biến thể bản dựng nào cần biên dịch. Nếu không có tùy chọn này, bản dựng
benchmark
mới được thêm vào sẽ khiến bản dựng này không hoạt động và cung cấp thông báo lỗi sau:
> Could not resolve project :shared.
Required by:
project :app
> No matching variant of project :shared was found.
Bạn có thể khắc phục vấn đề này bằng cách thêm thuộc tính matchingFallbacks
vào
loại bản dựng benchmark
của các mô-đun :macrobenchmark
và :app
. Phần còn lại của
các mô-đun Gradle có thể có cấu hình giống như trước đây.
Groovy
benchmark { initWith buildTypes.release signingConfig signingConfigs.debug matchingFallbacks = ['release'] }
Kotlin
create("benchmark") { initWith(getByName("release")) signingConfig = signingConfigs.getByName("debug") matchingFallbacks += listOf('release') }
Khi chọn các biến thể bản dựng trong dự án, hãy chọn benchmark
cho :app
và
:macrobenchmark
mô-đun, còn release
cho mọi mô-đun khác mà bạn có trong ứng dụng, như bạn thấy trong phần hình ảnh sau:
Để biết thêm thông tin, hãy xem quản lý phần phụ thuộc dựa trên biến thể.
Tạo loại macrobenchmark
Quy trình kiểm tra điểm chuẩn được cung cấp thông qua API quy tắc MacrobenchmarkRule
JUnit4 trong thư viện Macrobenchmark. Phương thức này chứa phương thức measureRepeated
cho phép bạn chỉ định các điều kiện khác nhau về cách chạy và đo điểm chuẩn ứng dụng mục tiêu.
Bạn cần ít nhất chỉ định packageName
của ứng dụng mục tiêu,
metrics
nội dung bạn muốn đo lường và số iterations
điểm chuẩn sẽ chạy.
Kotlin
@LargeTest @RunWith(AndroidJUnit4::class) class SampleStartupBenchmark { @get:Rule val benchmarkRule = MacrobenchmarkRule() @Test fun startup() = benchmarkRule.measureRepeated( packageName = TARGET_PACKAGE, metrics = listOf(StartupTimingMetric()), iterations = 5, setupBlock = { // Press home button before each run to ensure the starting activity isn't visible. pressHome() } ) { // starts default launch activity startActivityAndWait() } }
Java
@LargeTest @RunWith(AndroidJUnit4.class) public class SampleStartupBenchmark { @Rule public MacrobenchmarkRule benchmarkRule = new MacrobenchmarkRule(); @Test public void startup() { benchmarkRule.measureRepeated( /* packageName */ TARGET_PACKAGE, /* metrics */ Arrays.asList(new StartupTimingMetric()), /* iterations */ 5, /* measureBlock */ scope -> { // starts default launch activity scope.startActivityAndWait(); return Unit.INSTANCE; } ); } }
Để biết mọi tùy chọn về cách tùy chỉnh điểm chuẩn, hãy xem Tùy chỉnh điểm chuẩn.
Chạy điểm chuẩn
Chạy thử nghiệm từ trong Android Studio để đo lường hiệu suất của ứng dụng
trên thiết bị của bạn. Bạn có thể chạy các điểm chuẩn giống như cách bạn chạy bất kỳ
@Test
nào khác bằng cách sử dụng hành động máng xối bên cạnh lớp học hoặc phương thức kiểm tra,
như được hiển thị trong hình ảnh sau đây.
Bạn cũng có thể chạy tất cả các điểm chuẩn trong một mô-đun Gradle từ dòng lệnh bằng cách thực thi lệnh connectedCheck:
./gradlew :macrobenchmark:connectedCheck
Hoặc để chạy một thử nghiệm đơn lẻ:
./gradlew :macrobenchmark:connectedCheck -P android.testInstrumentationRunnerArguments.class=com.example.macrobenchmark.startup.SampleStartupBenchmark#startup
Hãy xem mục Đo điểm chuẩn trong CI để biết thông tin về cách chạy và theo dõi điểm chuẩn trong quá trình tích hợp liên tục.
Kết quả điểm chuẩn
Sau khi chạy thành công điểm chuẩn, các chỉ số được hiển thị trực tiếp trong Android Studio và cũng là kết quả để sử dụng CI trong tệp JSON. Mỗi lần lặp được đo đều thu được một dấu vết hệ thống riêng biệt. Bạn có thể mở các dấu vết kết quả này bằng cách nhấp vào một trong các đường liên kết trong ngăn Kết quả kiểm tra, như hiển thị trong hình ảnh sau.
Khi dấu vết được tải, Android Studio sẽ nhắc bạn chọn quy trình để phân tích. Phần để chọn được điền sẵn bằng quy trình ứng dụng mục tiêu:
Sau khi tệp theo dõi được tải, Studio sẽ hiển thị kết quả trong công cụ trình phân tích tài nguyên CPU:
Truy cập các tệp theo dõi theo cách thủ công
Nếu bạn đang sử dụng phiên bản Android Studio cũ (trước Arctic Fox 2020.3.1) hoặc muốn sử dụng công cụ Perfetto để phân tích tệp theo dõi, thì có các bước bổ sung cần thực hiện. Perfetto cho phép bạn kiểm tra tất cả các quá trình diễn ra trên thiết bị trong quá trình theo dõi, trong khi trình phân tích tài nguyên CPU của Android Studio giới hạn việc kiểm tra một quy trình duy nhất.
Nếu bạn gọi các thử nghiệm từ Android Studio hoặc sử dụng dòng lệnh Gradle, các tệp theo dõi sẽ tự động được sao chép từ thiết bị này sang máy chủ lưu trữ. Những thông tin này được ghi trên máy chủ lưu trữ tại:
project_root/module/build/outputs/connected_android_test_additional_output/debugAndroidTest/connected/device_id/TrivialStartupBenchmark_startup[mode=COLD]_iter002.perfetto-trace
Sau khi đã có tệp theo dõi trên hệ thống lưu trữ của mình, bạn có thể mở tệp đó trong Android Studio bằng Tệp > Mở trong trình đơn. Thao tác này sẽ hiển thị chế độ xem công cụ phân tích tài liệu trong mục trước.
Lỗi cấu hình
Nếu ứng dụng được định cấu hình sai (có thể gỡ lỗi hoặc không thể định cấu hình), Macrobenchmark sẽ trả về lỗi thay vì báo cáo phép đo không chính xác hoặc không đầy đủ.
Bạn có thể chặn các lỗi này bằng đối số androidx.benchmark.suppressErrors
.
Lỗi cũng được tạo ra khi cố gắng đo lường trình mô phỏng hoặc trên thiết bị pin yếu, vì điều này có thể ảnh hưởng đến khả năng hoạt động cốt lõi và tốc độ xung nhịp.
Tùy chỉnh điểm chuẩn
Hàm measureRepeated
chấp nhận nhiều thông số ảnh hưởng đến
các chỉ số mà thư viện đã thu thập, cách ứng dụng của bạn bắt đầu và
được biên dịch, hoặc số lần lặp lại mà điểm chuẩn sẽ chạy.
Ghi lại chỉ số
Chỉ số là loại thông tin chính được lấy từ các điểm chuẩn của bạn.
Các tùy chọn hiện có là StartupTimingMetric
, FrameTimingMetric
và
TraceSectionMetric
. Để xem thêm thông tin về các chỉ số đó, hãy xem trang Ghi lại các chỉ số.
Cải thiện dữ liệu theo dõi bằng các sự kiện tùy chỉnh
Bạn có thể sử dụng phương pháp này để đo lường sự kiện theo dõi tùy chỉnh cho ứng dụng của mình, là các sự kiện hiển thị cùng với phần còn lại của báo cáo theo dõi và có thể giúp chỉ ra các sự cố cụ thể cho ứng dụng của bạn. Để tìm hiểu thêm về cách tạo sự kiện theo dõi tùy chỉnh, hãy xem hướng dẫn Xác định sự kiện tùy chỉnh.
Chế độ biên dịch
Các điểm chuẩn vĩ mô có thể chỉ định một Chế độ biên dịch. xác định lượng ứng dụng cần được tổng hợp trước từ mã DEX (định dạng mã byte trong một APK) thành mã máy (tương tự như trước được biên dịch C++).
Theo mặc định, điểm chuẩn macro được chạy bằng CompilationMode.DEFAULT
, sẽ cài đặt Hồ sơ cơ sở (nếu có) trên Android 7 (API cấp 24) trở lên. Nếu bạn đang sử dụng Android 6 (API cấp 23) trở xuống, thì chế độ biên dịch
sẽ tổng hợp APK dưới dạng hoạt động mặc định của hệ thống.
Bạn có thể cài đặt Hồ sơ cơ sở nếu ứng dụng đích chứa cả Hồ sơ cơ sở và thư viện ProfileInstaller
.
Trên Android 7 trở lên, bạn có thể tùy chỉnh CompilationMode
để ảnh hưởng đến
số lượng quá trình tổng hợp trước trên thiết bị nhằm bắt chước các cấp độ khác nhau của quá trình biên dịch Ahead Of Time
(AOT) hoặc lưu vào bộ nhớ đệm JIT. Hãy xem CompilationMode.Full
,
CompilationMode.Partial
và CompilationMode.None
.
Chức năng này được xây dựng dựa trên lệnh biên dịch ART. Mỗi điểm chuẩn xóa dữ liệu hồ sơ trước khi bắt đầu, để đảm bảo mức độ can thiệp giữa các điểm chuẩn.
Chế độ khởi động
Để bắt đầu một hoạt động, bạn có thể chuyển sang chế độ khởi động được xác định trước (một trong
COLD
, WARM
hoặc HOT
). Thông số này thay đổi cách hoạt động
chạy và trạng thái của quá trình khi bắt đầu thử nghiệm.
Để tìm hiểu thêm về các hình thức khởi động, hãy xem tài liệu về cách khởi động Android Vitals
Mẫu
Một dự án mẫu có sẵn như một phần kho lưu trữ mẫu android/hiệu suất trên GitHub.
Cung cấp phản hồi
Để báo cáo vấn đề hoặc gửi yêu cầu về tính năng cho Jetpack Macrobenchmark, hãy xem trình theo dõi vấn đề công khai.