Trực quan hoá hồ sơ trong giao diện người dùng Perfetto

Sau khi truy xuất hồ sơ từ thiết bị thử nghiệm hoặc tải hồ sơ xuống từ phần phụ trợ, bạn có thể mở tệp trong giao diện người dùng Perfetto để kiểm tra dòng thời gian, trạng thái luồng và biểu đồ lưu giữ bộ nhớ. Trang này mô tả cách điều hướng dấu vết hệ thống đã loại bỏ thông tin nhạy cảm và tệp báo lỗi khối xếp Java được ghi lại bằng ProfilingManager.

Trực quan hoá dấu vết hệ thống

Mở tệp .perfetto-trace trong giao diện người dùng Perfetto để kiểm tra hoạt động của CPU và luồng theo thời gian.

Dòng thời gian của dấu vết hệ thống đã được loại bỏ thông tin nhạy cảm trong giao diện người dùng Perfetto
Hình 1. Ví dụ về dấu vết đã được loại bỏ thông tin nhạy cảm.

Để bảo vệ quyền riêng tư của người dùng, ProfilingManager sẽ loại bỏ dấu vết hệ thống bằng cách kết hợp hoạt động của CPU từ tất cả các quy trình khác vào một kênh OtherProcesses duy nhất. Việc kiểm tra kênh kết hợp này vẫn cho phép bạn xác định xem tình trạng chậm trong ứng dụng là do điểm tắc nghẽn nội bộ hay do tải tổng thể của thiết bị.

Hình 2 nêu bật các phần chính của dấu vết hệ thống đã được loại bỏ thông tin nhạy cảm:

Các phần được đánh số của dấu vết hệ thống đã được loại bỏ thông tin nhạy cảm trong giao diện người dùng Perfetto
Hình 2. Các phần của một dấu vết đã được loại bỏ thông tin nhạy cảm.
  1. Danh sách CPU: Hiển thị tất cả bộ xử lý có trên thiết bị của bạn.
  2. Tác vụ CPU: Cho biết các luồng mà mỗi CPU đang thực thi.
  3. Chế độ xem các quy trình khác: Cho thấy tài nguyên CPU mà các quy trình khác sử dụng.
  4. Process View (Chế độ xem quy trình): Cho thấy quy trình của ứng dụng.
  5. Chế độ xem luồng: Cho thấy các luồng đang chạy trong quy trình và trạng thái luồng (Có thể chạy (R), Đang chạy (R), Đang ngủ (S), Ngủ không gián đoạn (D)), liên kết trực tiếp với Trạng thái quy trình Linux.
  6. Lát cắt dấu vết: Phần này cho thấy chú thích dấu vết do nhà phát triển ứng dụng hoặc khung thêm vào. Các chú thích này bao gồm các phép tính giữa Trace.beginSection và Trace.endSection.

Để biết thêm thông tin về giao diện người dùng Perfetto và hình ảnh trực quan của dấu vết, hãy xem tài liệu về Perfetto.

Trực quan hoá tệp báo lỗi vùng nhớ Java

Sau khi bạn ghi lại tệp báo lỗi Java bằng PROFILING_TYPE_JAVA_HEAP_DUMP, hãy mở tệp .perfetto-java-heap-dump thu được trong giao diện người dùng Perfetto để xác định lỗi rò rỉ bộ nhớ hoặc tối ưu hoá mức sử dụng bộ nhớ. Trong Trình khám phá tệp báo lỗi khối nhớ, bạn có thể khám phá biểu đồ khối nhớ, kiểm tra biểu đồ hình ngọn lửa về kích thước đối tượng tích luỹ, cũng như duyệt xem các lớp, đối tượng và đối tượng chi phối, như trong Hình 3.

Trình khám phá Heapdump trên giao diện người dùng Perfetto cho thấy biểu đồ dạng ngọn lửa về kích thước đối tượng vùng nhớ khối xếp Java.
Hình 3. Biểu đồ hình ngọn lửa của tệp báo lỗi vùng nhớ Java trong giao diện người dùng Perfetto.

Sự khác biệt giữa tệp báo lỗi vùng nhớ khối xếp của ProfilingManager và tệp báo lỗi HPROF

Không giống như tệp báo lỗi .hprof tiêu chuẩn (chẳng hạn như tệp được ghi lại bằng Debug.dumpHprofData hoặc trong Android Studio), ProfilingManager ghi lại tệp báo lỗi ART của Perfetto (.perfetto-java-heap-dump). Thay vì báo lỗi nội dung bộ nhớ thô, ProfilingManager ghi lại biểu đồ giữ lại đối tượng và siêu dữ liệu về kích thước trong khi bỏ qua dữ liệu thô được lưu trữ bên trong đối tượng:

  • Dữ liệu được thu thập:
    • Lớp và kiểu: Tên lớp, hệ phân cấp lớp cấp cao, trình tải lớp, kích thước thực thể và kiểu tham chiếu (chẳng hạn như lớp thông thường, mảng, chuỗi hoặc tham chiếu yếu, mềm, hoàn thiện và ảo).
    • Thực thể và kích thước đối tượng: Kích thước nông của mỗi đối tượng (self_size), vùng nhớ khối xếp của đối tượng (HEAP_TYPE_APP, HEAP_TYPE_ZYGOTE hoặc HEAP_TYPE_BOOT_IMAGE) và bộ nhớ gốc liên kết được đăng ký thông qua NativeAllocationRegistry.
    • Tham chiếu và gốc GC: Gốc thu gom rác (chẳng hạn như JNI toàn cục và cục bộ, khung ngăn xếp Java và đối tượng luồng) và chuỗi tham chiếu cấp trường cho biết đối tượng nào giữ lại đối tượng khác và thông qua tên trường nào.
    • Chọn siêu dữ liệu về kích thước: Siêu dữ liệu không nhạy cảm cho các loại khung cụ thể, chẳng hạn như kích thước Bitmap (mWidth và mHeight).
  • Nội dung bị bỏ qua: Giá trị trường gốc thực tế, nội dung ký tự String và tải trọng mảng thô (byte[], char[] và các mảng gốc khác). Việc bỏ qua nội dung đối tượng thô sẽ bảo vệ quyền riêng tư của người dùng trên các thiết bị chính thức và giúp tệp báo lỗi nhỏ hơn đáng kể.

Các bước tiếp theo

Ngoài việc kiểm tra trực quan trong giao diện người dùng Perfetto, bạn có thể truy vấn hồ sơ bằng PerfettoSQL, phân tích hàng loạt dấu vết hoặc phân tích hồ sơ bằng AI.