Khi kiểm thử quá trình tích hợp ProfilingManager trên máy, các yêu cầu có thể bị điều tiết theo giới hạn tốc độ hoặc dấu vết nền có thể không hoạt động khi kiểm thử điều kiện kích hoạt. Sử dụng các lệnh adb trên trang này để tắt tính năng điều tiết, lấy hồ sơ, giữ lại dấu vết chưa được loại bỏ, kích hoạt tính năng chụp và kiểm tra trạng thái dịch vụ trên thiết bị thử nghiệm.
Tắt trình giới hạn tốc độ
Để tắt bộ giới hạn tốc độ hệ thống và quy trình ứng dụng cho các yêu cầu requestProfiling trong quá trình kiểm thử cục bộ, hãy chạy lệnh device_config sau:
adb shell device_config put profiling_testing rate_limiter.disabled true
Khi bạn thử nghiệm xong, hãy đặt lại cờ:
adb shell device_config delete profiling_testing rate_limiter.disabled
Kéo hồ sơ bằng ADB
Để kiểm tra hồ sơ đã loại bỏ thông tin nhạy cảm trên thiết bị có quyền truy cập thư mục gốc, hãy chạy adb
pull với đường dẫn do getResultFilePath trả về:
# Pull a profile
adb pull /data/user/0/<com.example.myapp>/files/profiling/<profile-file-name>
Giữ lại kết quả tạm thời và chưa được biên tập
Khi kiểm thử việc lập hồ sơ trên máy, bạn có thể giữ lại kết quả trong thư mục tạm thời tại /data/misc/perfetto-traces/profiling/. Việc so sánh dấu vết hệ thống chưa được loại bỏ thông tin nhạy cảm với dấu vết hệ thống đã được loại bỏ thông tin nhạy cảm sẽ giúp bạn hiểu được dữ liệu nào bị loại bỏ trong quá trình loại bỏ thông tin nhạy cảm.
Cách lưu giữ kết quả tạm thời và chưa được loại bỏ thông tin nhạy cảm phụ thuộc vào phiên bản Android mà thiết bị của bạn chạy:
Android 16 (cấp độ API 36) trở lên: Bạn có thể giữ lại cả kết quả chưa được loại bỏ thông tin nhạy cảm (nếu có) và kết quả đã được loại bỏ thông tin nhạy cảm trong thư mục tạm thời. Thư mục này đã được mở rộng trong Android 16 để có thể truy cập bằng
adb pulltrên mọi loại bản dựng mà không cần quyền truy cập thư mục gốc (trong khi Android 15 yêu cầu quyền truy cập thư mục gốc để đọc/data/misc/perfetto-traces/profiling/). Để ngăn hệ thống xoá kết quả tạm thời, hãy chạy lệnh sau:adb shell device_config put profiling_testing delete_temporary_results.disabled trueAndroid 15 (cấp độ API 35): Trong thư mục tạm thời, bạn chỉ có thể giữ lại kết quả chưa được loại bỏ thông tin nhạy cảm. Bạn chỉ có thể truy cập vào kết quả này qua
adbtrên các bản dựng có quyền truy cập thư mục gốc. (Ứng dụng của bạn vẫn nhận được hồ sơ đã loại bỏ thông tin nhạy cảm trong thư mục/data/user/0/<app>/files/profiling/của chính ứng dụng đó. Mã ứng dụng của bạn có thể đọc hoặc sao chép hồ sơ này trên mọi bản dựng, mặc dù việc lấy trực tiếp từ/data/user/0/...bằngadb pullyêu cầu quyền truy cập thư mục gốc hoặcadb shell run-as <app>trên một bản dựng có thể gỡ lỗi.) Để ngăn hệ thống xoá dấu vết chưa được loại bỏ, hãy chạy lệnh sau:adb shell device_config put profiling_testing delete_unredacted_trace.disabled true
Sau khi thu thập hồ sơ, hãy lấy tệp được giữ lại từ thư mục tạm thời:
# Pull a retained redacted profile (Android 16 and higher)
adb pull /data/misc/perfetto-traces/profiling/<trace-name>.<profile-type-ext>
# Pull an unredacted system trace
adb pull /data/misc/perfetto-traces/profiling/<trace-name>.perfetto-trace-unredacted
Trong các lệnh này, <trace-name> là tên tệp cơ sở (không có đuôi) từ đường dẫn do ProfilingResult.getResultFilePath trả về và bản sao dấu vết hệ thống chưa được loại bỏ thông tin nhạy cảm sẽ thêm -unredacted vào đuôi .perfetto-trace. Để biết thông tin chi tiết về cấu trúc tên tệp và các giá trị <profile-type-ext>, hãy xem phần Vị trí tệp và định dạng đặt tên.
adb shell device_config delete profiling_testing delete_temporary_results.disabled
adb shell device_config delete profiling_testing delete_unredacted_trace.disabled
Buộc bật dấu vết nền để thử nghiệm điều kiện kích hoạt
Vì dấu vết nền của hệ thống chạy theo khoảng thời gian ngẫu nhiên trong môi trường thực tế, nên việc kiểm thử phân tích tài nguyên dựa trên điều kiện kích hoạt trên thiết bị có thể gặp khó khăn. Để buộc hệ thống chạy dấu vết nền liên tục và bỏ qua bộ giới hạn tốc độ ở cấp hệ thống cho các điều kiện kích hoạt của ứng dụng, hãy đặt system_triggered_profiling.testing_package_name:
adb shell device_config put profiling_testing system_triggered_profiling.testing_package_name <com.example.myapp>
Mọi thời gian đợi cho mỗi điều kiện kích hoạt được định cấu hình bằng setRateLimitingPeriodHours vẫn áp dụng. Vì chế độ này chạy liên tục cho đến khi bạn xoá, nên hãy xoá cờ khi bạn kiểm thử xong:
adb shell device_config delete profiling_testing system_triggered_profiling.testing_package_name
Các lệnh gỡ lỗi hữu ích
Trên Android 16 (cấp độ API 36) trở lên có phiên bản mô-đun Profiling gần đây, bạn có thể sử dụng công cụ cmd profiling_service qua adb để bật tính năng ghi nhật ký chi tiết, kích hoạt bộ sưu tập hồ sơ theo yêu cầu và kiểm thử điều kiện kích hoạt ngay từ dòng lệnh.
Bật tính năng ghi nhật ký gỡ lỗi chi tiết
Để bật nhật ký ProfilingService chi tiết trong logcat và chẩn đoán việc xử lý cũng như phân phối yêu cầu, hãy chạy lệnh sau:
adb shell cmd profiling_service enable-logs true
Yêu cầu thu thập hồ sơ theo yêu cầu
Để bắt đầu thu thập hồ sơ ngay lập tức cho một gói cụ thể từ dòng lệnh, hãy chạy lệnh sau:
adb shell cmd profiling_service request-profiling <profiling_type> <com.example.myapp> [--user <user_id>] [--duration <duration_ms>] [--sources <sources>]
Trong lệnh này, <profiling_type> là giá trị hằng số nguyên từ ProfilingManager (1 cho tệp báo lỗi Java, 2 cho hồ sơ ảnh chụp nhanh của vùng nhớ khối xếp, 3 cho mẫu ngăn xếp hoặc 4 cho dấu vết hệ thống). Tiến trình của ứng dụng mục tiêu phải đang chạy cho hồ sơ bộ nhớ và ngăn xếp, yêu cầu phải tuân theo bộ giới hạn tốc độ trừ phi bị tắt và ProfilingResult đã hoàn tất chỉ được phân phối cho trình nghe chung đã đăng ký với registerForAllProfilingResults.
Đăng ký và mô phỏng điều kiện kích hoạt
Để đăng ký một điều kiện kích hoạt hoặc kích hoạt một sự kiện kích hoạt mô phỏng cho một gói và xác minh việc xử lý lệnh gọi lại điều kiện kích hoạt, hãy chạy các lệnh sau:
adb shell cmd profiling_service add-trigger <trigger_type> <com.example.myapp> [--user <user_id>]
adb shell cmd profiling_service trigger <trigger_type> <com.example.myapp> [--user <user_id>]
Trong các lệnh này, <trigger_type> là giá trị hằng số nguyên từ ProfilingTrigger (ví dụ: 1 cho TRIGGER_TYPE_APP_FULLY_DRAWN, 2 cho TRIGGER_TYPE_ANR hoặc 7 cho TRIGGER_TYPE_OOM). Việc chạy add-trigger sẽ đăng ký điều kiện kích hoạt với thời gian hồi chiêu là 0 giờ, ghi đè mọi lượt đăng ký hiện có cho loại điều kiện kích hoạt đó. Để mô phỏng các điều kiện kích hoạt lưu ảnh chụp nhanh của dấu vết nền (chẳng hạn như 1 hoặc 2), bạn cần có một dấu vết nền đang hoạt động (xem phần Buộc bật dấu vết nền để kiểm thử điều kiện kích hoạt).
Thu thập trạng thái tổng thể của ProfilingManager
Trên Android 16 (cấp độ API 36) trở lên có phiên bản mô-đun Profiling gần đây, bạn có thể chạy dumpsys đối với profiling_service để chẩn đoán vấn đề và kiểm tra trạng thái hiện tại của ProfilingManager:
adb shell dumpsys profiling_service
Kết quả của dumpsys profiling_service chỉ nhằm mục đích cung cấp thông tin và gỡ lỗi, đồng thời định dạng của kết quả này có thể thay đổi. Báo cáo này cung cấp thông tin tổng quan nhanh về trạng thái nội bộ của dịch vụ, bao gồm:
- Trạng thái giới hạn tốc độ và điều tiết đang hoạt động.
- Cấu hình thiết bị đang hoạt động.
- Trình kích hoạt ứng dụng đã đăng ký và thời gian chờ giới hạn số lượng yêu cầu.
- Phiên phân tích tài nguyên đang hoạt động và trong hàng đợi.
- Các yêu cầu lập hồ sơ, sự kiện kích hoạt và sự kiện phân phối kết quả gần đây.