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. Cần 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
, FrameTimingMetric
và PowerMetric
được đề cập chi tiết ở phần sau của tài liệu này.
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 động 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 động 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 (API cấp 29) trở xuố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
.Cải thiện độ chính xác về thời gian khởi động
Hai chỉ số chính giúp đo lường thời gian khởi động ứng dụng là thời gian hiển thị khung hình đầu tiên (TTID) và thời gian hiển thị khung hình đầu tiên với nội dung đầy đủ (TTFD). TTID là thời gian cần thiết để hiển thị khung hình đầu tiên trên giao diện người dùng của ứng dụng. TTFD cũng bao gồm thời gian để hiển thị mọi nội dung tải không đồng bộ sau khi khung hình đầu tiên hiển thị.
TTFD được báo cáo sau khi phương thức reportFullyDrawn()
của ComponentActivity
được gọi. Nếu reportFullyDrawn()
không được gọi, thì TTID sẽ được báo cáo.
Bạn có thể cần phải trì hoãn thời điểm reportFullyDrawn()
được gọi cho đến khi quá trình tải không đồng bộ hoàn tất. Ví dụ: nếu giao diện người dùng chứa một danh sách động, chẳng hạn như danh sách RecyclerView
hoặc danh sách lazy, thì có thể danh sách này sẽ được điền bằng một tác vụ trong nền (hoàn tất sau khi danh sách này hiển thị lần đầu và do đó, chính là thời điểm sau khi giao diện người dùng được đánh dấu là đã được vẽ đầy đủ). Trong những trường hợp như vậy, hoạt động điền danh sách không được đưa vào quy trình đo điểm chuẩn.
Để đưa hoạt động điền danh sách vào khoảng thời gian đo điểm chuẩn, hãy lấy FullyDrawnReporter
bằng cách sử dụng getFullyDrawnReporter()
và thêm một trình báo cáo vào đó trong mã ứng dụng của bạn. Bạn phải loại bỏ trình báo cáo khi tác vụ trong nền hoàn tất hoạt động điền danh sách.
FullyDrawnReporter
sẽ không gọi phương thức reportFullyDrawn()
cho đến khi mọi trình báo cáo đã thêm được loại bỏ. Nếu bạn thêm một trình báo cáo cho đến khi tiến trình nền hoàn tất, thời gian này cũng sẽ bao gồm cả khoảng thời gian cần thiết để điền danh sách trong dữ liệu về thời gian khởi động. Điều này không làm thay đổi hành vi của ứng dụng đối với người dùng nhưng cho phép dữ liệu về thời gian khởi động bao gồm cả thời gian cần thiết để điền danh sách.
Nếu ứng dụng của bạn dùng Jetpack Compose, thì bạn có thể sử dụng các API sau để biểu thị trạng thái đã hiển thị đầy đủ:
ReportDrawn
: cho biết thành phần kết hợp của bạn đã sẵn sàng tương tác ngay lập tức.ReportDrawnWhen
: sử dụng một thuộc tính, chẳng hạn nhưlist.count > 0
, để cho biết thời điểm thành phần kết hợp của bạn đã sẵn sàng tương tác.ReportDrawnAfter
: sử dụng phương thức tạm ngưng sau khi hoàn tất để cho biết thành phần kết hợp đã sẵn sàng tương tác.
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 và có 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 nhanh hơn thời hạn bao nhiêu. Lưu ý: Giá trị 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 chậm, hãy xem phần Kết xuất chậm.

FrameTimingMetric
.TraceSectionMetric
TraceSectionMetric
thu thập số lần một phần dấu vết khớp với các sectionName
được cung cấp và khoảng thời gian cần thiết. Đối với thời gian, công cụ này sẽ xuất ra thời gian tối thiểu, trung bình và tối đa tính bằng mili giây. Phần dấu vết được xác định bằng lệnh gọi hàm trace(sectionName)
hoặc mã giữa Trace.beginSection(sectionName)
và Trace.endSection()
hay các biến thể không đồng bộ của chúng. Thuộc tính này luôn chọn bản sao đầ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, tệ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
.PowerMetric
PowerMetric
ghi lại sự thay đổi về điện năng hoặc năng lượng trong khoảng thời gian kiểm thử đối với danh mục công suất được cung cấp.
Mỗi danh mục đã chọn được chia nhỏ thành các thành phần con có thể đo lường, còn các danh mục không được chọn sẽ được thêm vào chỉ số "unselected" (bỏ chọn).
Các chỉ số này đo lường mức tiêu thụ trên toàn hệ thống, chứ không phải mức tiêu thụ trên cơ sở từng ứng dụng, đồng thời chỉ áp dụng cho Pixel 6, Pixel 6 Pro và các thiết bị mới hơn:
power<category>Uw
: mức tiêu thụ điện năng trong khoảng thời gian kiểm thử theo danh mục này.energy<category>Uws
: mức năng lượng được truyền trên mỗi đơn vị thời gian trong khoảng thời gian kiểm thử theo danh mục này.
Có các danh mục sau:
CPU
DISPLAY
GPU
GPS
MEMORY
MACHINE_LEARNING
NETWORK
UNCATEGORIZED
Với một số danh mục, như CPU
, bạn có thể khó tách riêng công việc do các quy trình khác thực hiện khỏi công việc do ứng dụng của bạn thực hiện. Để giảm thiểu khả năng gây nhiễu này, hãy xoá hoặc hạn chế các ứng dụng và tài khoản không cần thiết.

PowerMetric
.Đề 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}