Thông thường, dấu vết là nguồn thông tin hữu ích nhất trong bước đầu xem xét vấn đề về hiệu suất. Thông qua các dấu vết, bạn có thể xây dựng giả thuyết xem vấn đề đó là gì và nên bắt đầu xem xét ở đâu.
Có 2 cấp độ theo dấu được hỗ trợ trên Android: theo dấu hệ thống và theo dấu phương thức.
Vì tính năng theo dõi hệ thống chỉ theo dõi các khu vực được đánh dấu cụ thể để theo dõi, nên tính năng này có mức hao tổn thấp và không ảnh hưởng nhiều đến hiệu suất của ứng dụng. Theo dấu hệ thống là công cụ tuyệt vời để biết các phần cụ thể trong mã của bạn mất bao lâu để chạy.
Tính năng tìm dấu vết phương thức theo dõi mọi lệnh gọi hàm trong ứng dụng của bạn. Việc này rất tốn kém nên ảnh hưởng đáng kể đến hiệu suất của ứng dụng. Tuy nhiên, tính năng này sẽ cung cấp cho bạn thông tin tổng quan về điều gì đang xảy ra, các hàm được gọi và tần suất gọi các hàm đó.
Theo mặc định, dấu vết hệ thống không bao gồm các hàm có khả năng kết hợp riêng lẻ. Các hàm này chỉ có trong dấu vết phương thức.
Chúng tôi hiện đang thử nghiệm chức năng theo dấu hệ thống mới để hiển thị các hàm có khả năng kết hợp bên trong dấu vết hệ thống. Chức năng này mang lại cho bạn mức độ xâm nhập thấp của cấp độ theo dấu hệ thống, cùng với mức độ chi tiết cao của cấp độ theo dấu phương thức trong đối tượng kết hợp.
Thiết lập để theo dấu đối tượng kết hợp
Để dùng thử tính năng theo dấu đối tượng kết hợp lại, bạn cần cập nhật tối thiểu lên các phiên bản sau:
- Android Studio Flamingo
- Giao diện người dùng Compose: 1.3.0
- Trình biên dịch Compose: 1.3.0
Thiết bị hoặc trình mô phỏng bạn dùng để chạy giả lập cũng phải có cấp độ API tối thiểu là 30.
Ngoài ra, bạn cần thêm một phần phụ thuộc mới trên tính năng Theo dõi thời gian chạy trong Compose:
implementation("androidx.compose.runtime:runtime-tracing:1.0.0-beta01")
Với phần phụ thuộc này, khi lấy dấu vết hệ thống có chứa quá trình kết hợp lại, bạn có thể tự động xem được các hàm có khả năng kết hợp.
Lấy dấu vết hệ thống
Để lấy dấu vết hệ thống và xem hoạt động theo dấu đối tượng kết hợp lại mới, hãy làm theo các bước sau:
Mở trình phân tích tài nguyên:
Nhấp vào CPU timeline (Tiến trình CPU)
Điều hướng ứng dụng của bạn đến giao diện người dùng mà bạn muốn theo dấu, sau đó chọn System Trace (Dấu vết hệ thống) và Record (Ghi)
Hãy dùng ứng dụng của bạn để kích hoạt quá trình kết hợp lại và dừng ghi. Sau khi dấu vết được xử lý và xuất hiện, bạn có thể nhìn thấy các thành phần kết hợp trong dấu vết kết hợp lại. Bạn có thể sử dụng bàn phím và chuột để thu phóng và kéo xung quanh dấu vết. Nếu bạn chưa quen với cách điều hướng dấu vết, hãy xem tài liệu Ghi dấu vết.
Nhấp đúp vào một thành phần kết hợp trong biểu đồ để chuyển đến mã nguồn của thành phần đó.
Bạn cũng có thể xem các thành phần kết hợp trong Biểu đồ hình ngọn lửa cùng với tệp và số dòng:
Chú ý
Mức hao tổn kích thước APK
Tuy chúng tôi muốn giảm tối đa có thể mức hao tổn của tính năng này, nhưng kích thước tệp APK sẽ tăng lên đối với các ứng dụng trong Compose xuất phát từ các chuỗi theo dấu mà trình biên dịch Compose nhúng vào tệp APK. Mức tăng kích thước này có thể tương đối nhỏ nếu ứng dụng của bạn không sử dụng nhiều Compose hoặc lớn hơn đối với các ứng dụng Compose hoàn chỉnh. Ngoài ra, các chuỗi theo dấu này cũng không bị xáo trộn để có thể xuất hiện trong các công cụ theo dấu, như trình bày ở trên. Kể từ phiên bản 1.3.0, trình biên dịch Compose sẽ chèn các chuỗi này vào tất cả ứng dụng.
Bạn có thể xoá các chuỗi theo dấu trong bản dựng chính thức bằng cách thêm quy tắc Proguard sau:
-assumenosideeffects public class androidx.compose.runtime.ComposerKt {
boolean isTraceInProgress();
void traceEventStart(int,int,int,java.lang.String);
void traceEventStart(int,java.lang.String);
void traceEventEnd();
}
Các hàm này có thể thay đổi trong tương lai, nhưng mọi thay đổi sẽ được đề cập trong ghi chú phát hành của Compose.
Hãy lưu ý rằng việc giữ lại các hàm đó làm tiêu tốn kích thước tệp APK, nhưng giúp đảm bảo rằng tệp APK đang được phân tích tài nguyên sẽ giống với tệp APK mà người dùng ứng dụng chạy.
Căn thời gian chính xác
Cũng giống như với mọi thử nghiệm về hiệu suất, để phân tích tài nguyên chính xác, bạn phải làm cho ứng dụng profileable
và non-debuggable
theo Các ứng dụng có thể phân tích tài nguyên.
Ghi lại dấu vết từ thiết bị đầu cuối
Bạn có thể ghi lại dấu vết đối tượng kết hợp qua thiết bị đầu cuối. Để làm như vậy, bạn phải thực hiện các bước mà Android Studio thường thực hiện cho bạn một cách tự động.
Thêm phần phụ thuộc
Trước tiên, hãy thêm các phần phụ thuộc bổ sung vào ứng dụng.
implementation("androidx.tracing:tracing-perfetto:1.0.0")
implementation("androidx.tracing:tracing-perfetto-binary:1.0.0")
Tạo lệnh ghi
- Tạo lệnh ghi bằng cách tạo trong Perfetto.
Thêm phần nguồn dữ liệu
track_event
theo cách thủ công như ví dụ sau:adb shell perfetto \ -c - --txt \ -o /data/misc/perfetto-traces/trace \ <<EOF buffers: { size_kb: 63488 fill_policy: RING_BUFFER } buffers: { size_kb: 2048 fill_policy: RING_BUFFER } data_sources: { config { name: "track_event" } } duration_ms: 10000 flush_period_ms: 30000 incremental_state_config { clear_period_ms: 5000 } EOF
Ghi lại dấu vết
- Khởi chạy ứng dụng và chuẩn bị phần bạn muốn theo dõi.
Bật tính năng theo dấu trong ứng dụng bằng cách truyền tin.
# set app package variable, e.g. com.google.samples.apps.nowinandroid.debug # can be found through `adb shell ps -ef` or `adb shell cmd package list packages` package=<your app process> # issue a broadcast to enable tracing adb shell am broadcast \ -a androidx.tracing.perfetto.action.ENABLE_TRACING \ $package/androidx.tracing.perfetto.TracingReceiver
Bắt đầu lệnh ghi mà bạn đã tạo trước đó.
Mở dấu vết
adb pull <location>
dấu vết từ thiết bị (vị trí được chỉ định trong lệnh ghi).Mở trong Perfetto.
Ghi lại dấu vết bằng Jetpack Macrobenchmark
Bạn có thể đo lường hiệu suất bằng Jetpack Macrobenchmark, vốn cung cấp dấu vết dưới dạng kết quả. Để bật tính năng theo dõi thành phần bằng macrobenchmark, bạn cần:
Thêm các phần phụ thuộc bổ sung này vào mô-đun kiểm thử Macrobenchmark:
implementation("androidx.tracing:tracing-perfetto:1.0.0") implementation("androidx.tracing:tracing-perfetto-binary:1.0.0")
Thêm đối số đo lường
androidx.benchmark.fullTracing.enable=true
trước khi chạy phép đo điểm chuẩn. Hãy xem phần Đối số đo lường Macrobenchmark để biết thêm thông tin về đối số đo lường Macrobenchmark.
Phản hồi
Chúng tôi rất mong nhận được ý kiến phản hồi của bạn về tính năng này, mọi lỗi bạn phát hiện được và mọi yêu cầu bạn có. Bạn có thể gửi ý kiến phản hồi cho chúng tôi qua công cụ theo dõi lỗi.