Các khái niệm và cách triển khai Jetpack Compose
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 chỉ số này được chuyển đến hàm measureRepeated dưới dạng List, cho phép bạn chỉ định nhiều chỉ số được đo lường cùng một lúc. Bạn phải có ít nhất một loại chỉ số để chạy điểm chuẩn.
Đoạn mã sau đây chỉ ra thời gian kết xuất khung hình và chỉ số của mục dấu vết tuỳ chỉnh:
Kotlin
benchmarkRule.measureRepeated(
packageName = TARGET_PACKAGE,
metrics = listOf(
FrameTimingMetric(),
TraceSectionMetric("RV CreateView"),
TraceSectionMetric("RV OnBindView"),
),
iterations = 5,
// ...
)
Java
benchmarkRule.measureRepeated(
TARGET_PACKAGE, // packageName
Arrays.asList( // metrics
new StartupTimingMetric(),
new TraceSectionMetric("RV CreateView"),
new TraceSectionMetric("RV OnBindView"),
),
5, // Iterations
// ...
);
Trong ví dụ này, RV CreateView và RV OnBindView là mã nhận dạng của các khối có thể theo dõi được xác định trong RecyclerView. Mã nguồn cho phương thức createViewHolder() là một ví dụ về cách bạn có thể xác định các khối có thể theo dõi trong mã của riêng mình.
StartupTimingMetric, TraceSectionMetric và FrameTimingMetric sẽ được đề cập chi tiết ở phần sau của tài liệu này. Để biết danh sách đầy đủ các chỉ số, hãy xem các lớp con của Metric.
Kết quả đo điểm chuẩn được xuất sang Android Studio, như minh hoạ trong hình 1. Nếu bạn xác định nhiều chỉ số, thì tất cả các chỉ số đó sẽ được kết hợp với nhau trong dữ liệu đầu ra.
TraceSectionMetric và FrameTimingMetric.StartupTimingMetric
StartupTimingMetric thu thập các chỉ số về thời gian khởi động ứng dụng bằng các giá trị sau:
timeToInitialDisplayMs: Khoảng thời gian từ khi hệ thống nhận được ý định khởi chạy cho đến khi kết xuất khung hình đầu tiên củaActivityđích.timeToFullDisplayMs: Khoảng thời gian từ khi hệ thống nhận được ý định khởi chạy cho đến khi ứng dụng báo cáo là đã hiển thị đầy đủ bằng phương thứcreportFullyDrawn(). Quá trình đo lường sẽ dừng khi hoàn tất quá trình kết xuất khung đầu tiên sau (hoặc có chứa) lệnh gọireportFullyDrawn(). Thông tin đo lường này có thể không có trên Android 10 (cấp độ API 29) trở xuống.
StartupTimingMetric cho ra các giá trị tối thiểu, trung vị và tối đa từ các vòng lặp khởi động. Để đánh giá mức độ cải thiện khi khởi động, hãy luôn tập trung vào các giá trị trung vị, vì các giá trị này cung cấp số liệu ước tính chính xác nhất về thời gian khởi động thông thường của người dùng. Để biết thêm thông tin về những yếu tố cấu thành thời gian khởi động ứng dụng, hãy xem bài viết Thời gian khởi động ứng dụng.
StartupTimingMetric.FrameTimingMetric
FrameTimingMetric ghi lại thông tin thời gian từ các khung do một điểm chuẩn tạo ra, chẳng hạn như thao tác cuộn hoặc ảnh động, đồng thời cho ra các giá trị sau:
frameOverrunMs: khoảng thời gian lỡ thời hạn của một khung hình cụ thể. Số dương cho biết khung hình bị rớt kèm theo hiện tượng giật hoặc kết xuất gián đoạn quan sát được. Số âm cho biết một khung hình hoàn thành nhanh hơn thời hạn phần cứng của hệ thống con bao nhiêu. Lưu ý: Chỉ số này chỉ có trên Android 12 (API cấp 31) trở lên.frameDurationCpuMs: khoảng thời gian cần thiết để tạo khung hình trên CPU ở cả luồng giao diện người dùng vàRenderThread.
Các thông tin đo lường này được thu thập trong phạm vi phân phối: phân vị thứ 50, 90, 95 và 99.
Để biết thêm thông tin về cách xác định và cải thiện khung hình bị chậm, hãy xem phần Kết xuất chậm.
FrameTimingMetric.TraceSectionMetric
TraceSectionMetric ghi lại số lần một phần dấu vết cụ thể xuất hiện và khoảng thời gian tuyệt đối cần thiết để thực thi. Đối với tính năng theo dõi thời gian, công cụ này sẽ xuất ra thời gian tối thiểu, trung vị và tối đa tính bằng mili giây.
Phần dấu vết mục tiêu được xác định bằng lệnh gọi hàm trace(sectionName) hoặc ranh giới khối cấp thấp giữa Trace.beginSection(sectionName) và Trace.endSection() hay các biến thể không đồng bộ của chúng. Lớp này luôn chọn thực thể đầu tiên của phần dấu vết được thu thập trong quá trình đo lường. Theo mặc định, lớp này chỉ đưa ra các phần dấu vết từ gói; để bao gồm các quy trình bên ngoài gói của bạn, hãy đặt targetPackageOnly =
false.
Để biết thêm thông tin về tính năng theo dõi, hãy xem bài viết Tổng quan về tính năng theo dõi hệ thống và Xác định sự kiện tuỳ chỉnh.
TraceSectionMetric.Đề xuất cho bạn
- Lưu ý: văn bản có đường liên kết sẽ hiện khi JavaScript tắt
- Tạo hồ sơ cơ sở {:#creating-profile-rules}
- Viết một Macrobenchmark
- Phân tích và tối ưu hoá quá trình khởi động ứng dụng {:#app-startup-analysis-optimization}