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 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 và do đó ảnh hưởng lớn đến hiệu suất của ứng dụng, nhưng cũng mang lại cho bạn hình ảnh về điều gì đang xảy ra, những chức năng được gọi và tần suất chúng sẽ được gọi.
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 bạn theo dõi hệ thống có chứa quá trình kết hợp lại, bạn có thể tự động thấy 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:
Hình 2. Android Studio – Bắt đầu phân tích tài nguyên Nhấp vào CPU process (Tiến trình CPU)
Hình 3. Trình phân tích tài nguyên trong Android Studio – 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ình 4. Các tuỳ chọn về dấu vết – Dấu vết hệ thống 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.
Hình 5. Theo dấu hệ thống 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:
Hình 6. Biểu đồ hình ngọn lửa
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ể là 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 Compose đầy đủ của chúng tôi. Ngoài ra, các chuỗi theo dõi này cũng không bị làm rối mã nguồn để có thể xuất hiện trong như được trình bày trước đó. Trình biên dịch Compose chèn chúng vào tất cả bắt đầu từ phiên bản 1.3.0.
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
Để lập hồ sơ chính xác, giống như với bất kỳ kiểm thử hiệu suất nào, bạn cần thực hiện
ứng dụng profileable
và non-debuggable
theo Ứng dụng có thể phân tích.
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 được điều này, bạn có để thực hiện các bước mà Android Studio thường tự động thực hiện cho bạn.
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
- Chạy ứng dụng và chuẩn bị phần mà bạn muốn theo dõi.
Bật tính năng theo dõi trong ứng dụng bằng cách phát đi một thông báo.
# 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 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 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, 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 kết hợp bằng Macrobenchmark, bạn cần:
Thêm các phần phụ thuộc bổ sung này vào mô-đun thử nghiệm 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. Kiểm tra khả năng đo lường Macrobenchmark đối số để biết thêm thông tin về Macrobenchmark đối số đo lường.
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 thông qua sự cố công cụ theo dõi.