Kiểm tra tốc độ kết xuất GPU và tình trạng vẽ nhiều lần

Android cung cấp một số tùy chọn dành cho nhà phát triển trên thiết bị giúp bạn hình dung nơi ứng dụng của bạn có thể gặp sự cố khi kết xuất giao diện người dùng, chẳng hạn như thực hiện tác vụ hiển thị nhiều hơn mức cần thiết, hoặc thực thi các hoạt động GPU và các luồng chạy trong thời gian dài. Trang này mô tả cách gỡ lỗi GPU vẽ nhiều lần và định cấu hình kết xuất GPU.

Để tìm hiểu thêm về các tùy chọn dành cho nhà phát triển trên thiết bị, bao gồm cả cách bật những tùy chọn này, vui lòng đọc bài viết Định cấu hình các tùy chọn cho nhà phát triển trên thiết bị.

Tốc độ kết xuất phân tích GPU

Công cụ kết xuất phân tích GPU hiển thị dưới dạng biểu đồ cuộn, cho biết thời gian cần thiết để hiển thị các khung của cửa sổ giao diện người dùng so với điểm chuẩn là 16,67 mili giây cho mỗi khung hình.

Trên các GPU kém hiệu năng hơn, tỷ lệ lấp đầy có sẵn (tốc độ mà GPU có thể lấp đầy vùng đệm khung) có thể khá thấp. Khi số pixel cần thiết để vẽ một khung tăng lên, GPU có thể mất nhiều thời gian hơn để xử lý các lệnh mới và yêu cầu phần còn lại của hệ thống đợi cho đến khi có thể bắt kịp. Công cụ phân tích giúp bạn xác định thời điểm GPU bị quá tải khi đang cố gắng vẽ các pixel hoặc gồng gánh tình trạng vẽ nhiều lần.

Bật trình phân tích

Trước khi bắt đầu, hãy đảm bảo bạn đang sử dụng thiết bị chạy Android 4.1 (API cấp 16) trở lên và phải bật các tùy chọn dành cho nhà phát triển. Để bắt đầu phân tích kết xuất GPU của thiết bị trong khi dùng ứng dụng, hãy làm như sau:

  1. Trên thiết bị, hãy chuyển đến phần Cài đặt rồi nhấn vào Tùy chọn dành cho nhà phát triển.
  2. Trong phần Giám sát, hãy chọn Kết xuất phân tích GPU hoặc Kết xuất phân tích HWUI, tùy thuộc vào phiên bản Android đang chạy trên thiết bị.
  3. Trong hộp thoại kết xuất phân tích GPU, chọn Trên màn hình dưới dạng thanh để phủ các biểu đồ trên màn hình của thiết bị.
  4. Mở ứng dụng mà bạn muốn phân tích định cấu hình.

Kiểm tra kết quả đầu ra

Trong hình ảnh phóng to của biểu đồ kết xuất phân tích GPU như ở hình 1, bạn có thể thấy phần được tô màu như trên Android 6.0 (API cấp 23).

Hình 1. Biểu đồ kết xuất GPU có cấu hình mở rộng.

Dưới đây là một vài điều cần lưu ý về kết quả đầu ra:

  • Đối với mỗi ứng dụng hiển thị, công cụ sẽ hiển thị một biểu đồ.
  • Mỗi thanh dọc dọc theo trục ngang đại diện cho một khung, và chiều cao của mỗi thanh dọc biểu thị lượng thời gian khung hình đã kết xuất (tính bằng mili giây).
  • Đường kẻ ngang màu xanh lục biểu thị 16,67 mili giây. Để đạt được 60 khung hình/giây, thanh dọc cho mỗi khung hình phải nằm dưới dòng này. Bất cứ khi nào một thanh vượt quá giới hạn này, các ảnh động có thể bị tạm dừng.
  • Công cụ này làm nổi bật các khung vượt quá ngưỡng 16,67 mili giây bằng cách làm cho thanh tương ứng rộng hơn và giảm độ trong suốt.
  • Mỗi thanh có các thành phần màu liên kết với một vùng hiển thị trong quy trình kết xuất. Số lượng thành phần sẽ khác nhau tùy theo cấp độ API của thiết bị.

Bảng dưới đây cung cấp thông tin mô tả về từng phân đoạn của thanh dọc trong dữ liệu đầu ra của trình phân tích khi sử dụng thiết bị chạy Android 6.0 trở lên.

Thành phần của thanhVùng hiển thị kết xuấtMô tả
Hoán đổi vùng đệm Thể hiện thời gian CPU chờ GPU hoàn thành. Nếu thanh này cao, điều đó có nghĩa là ứng dụng đang thực hiện quá nhiều chức năng trên GPU.
Sự cố về lệnh Thể hiện thời gian mà các trình kết xuất đồ họa 2D của Android tạo lệnh cho OpenGL để vẽ và vẽ lại danh sách hiển thị. Chiều cao của thanh này tỷ lệ thuận với tổng thời gian cần thiết để thực thi mỗi danh sách hiển thị. Nhiều danh sách hiển thị hơn sẽ tương đương với thanh màu đỏ cao hơn.
Đồng bộ hóa và tải lên Biểu thị thời gian cần để tải thông tin bitmap lên GPU. Một phân đoạn lớn cho thấy ứng dụng sẽ mất nhiều thời gian để tải một lượng lớn nội dung đồ họa.
Vẽ Thể hiện thời gian dùng để tạo và cập nhật danh sách hiển thị của chế độ xem. Nếu phần này của thanh cao, bạn sẽ thấy nhiều bản vẽ có chế độ xem tùy chỉnh, hoặc nhiều thao tác trong các phương thức onDraw.
Đo lường/Bố cục Biểu thị lượng thời gian dành cho các lệnh gọi lại onLayoutonMeasurement trong hệ phân cấp chế độ xem. Một phân đoạn lớn cho biết hệ thống phân cấp chế độ xem mất nhiều thời gian để xử lý.
Xử lý dữ liệu đầu vào và ảnh động Thể hiện khoảng thời gian cần thiết để đánh giá tất cả các ảnh động đã chạy cho khung đó và xử lý tất cả các lệnh gọi lại của dữ liệu đầu vào. Nếu phân khúc này có quy mô lớn, thì có thể là một trình tạo ảnh động tùy chỉnh hoặc phương thức gọi lại của dữ liệu đầu vào đang dành quá nhiều thời gian xử lý. Liên kết chế độ xem trong quá trình cuộn, chẳng hạn như RecyclerView.Adapter.onBindViewHolder(), cũng thường xảy ra trong phân đoạn này và là một nguyên nhân phổ biến hơn cho thấy tốc độ chậm trong phân đoạn này.
Thời gian khác/Độ trễ VSync Thể hiện thời gian mà ứng dụng dành cho các thao tác thực thi giữa hai khung hình liên tiếp. Đó có thể là một chỉ báo về việc có quá nhiều quá trình xử lý đang diễn ra trong luồng giao diện người dùng nên có thể bị giảm tải sang một luồng khác.

Bảng 1. Thanh thành phần trong Android 6.0 trở lên.

Các phiên bản Android từ 4.0 (API cấp 14) đến 5.0 (API cấp 21) có các phân khúc màu xanh dương, tím, đỏ và cam. Các phiên bản Android dưới 4.0 chỉ có các thành phần màu xanh lam, đỏ và cam. Bảng sau đây cho thấy các thanh thành phần trong Android 4.0 và 5.0.

Thành phần của thanhVùng hiển thị kết xuấtMô tả
Quy trình Thể hiện thời gian CPU chờ GPU hoàn thành. Nếu thanh này cao, điều đó có nghĩa là ứng dụng đang thực hiện quá nhiều chức năng trên GPU.
Thực thi Thể hiện thời gian mà các trình kết xuất đồ họa 2D của Android tạo lệnh cho OpenGL để vẽ và vẽ lại danh sách hiển thị. Chiều cao của thanh này tỷ lệ thuận với tổng thời gian cần thiết để thực thi mỗi danh sách hiển thị. Nhiều danh sách hiển thị hơn sẽ tương đương với thanh màu đỏ cao hơn.
XFer Biểu thị thời gian cần để tải thông tin bitmap lên GPU. Một phân đoạn lớn cho thấy ứng dụng sẽ mất nhiều thời gian để tải một lượng lớn nội dung đồ họa. Phân khúc này không hiển thị trên các thiết bị chạy Android 4.0 trở xuống.
Cập nhật Thể hiện thời gian dùng để tạo và cập nhật danh sách hiển thị của chế độ xem. Nếu phần này của thanh cao, bạn sẽ thấy nhiều bản vẽ có chế độ xem tùy chỉnh, hoặc nhiều thao tác trong các phương thức onDraw.

Bảng 2. Thanh thành phần trong Android 4.0 và 5.0.

Để biết thêm thông tin chi tiết về cách diễn giải thông tin do công cụ phân tích cung cấp, vui lòng đọc bài viết Phân tích bằng tính năng kết xuất phân tích GPU.

Lưu ý: Mặc dù công cụ này có tên là Kết xuất phân tích GPU, nhưng tất cả các quy trình được giám sát thực sự đều diễn ra trong CPU. Quá trình kết xuất diễn ra bằng cách gửi lệnh tới GPU, GPU sau đó hiển thị màn hình không đồng bộ. Trong một số trường hợp nhất định, GPU có thể phải làm quá nhiều việc và CPU sẽ phải đợi trước khi có thể gửi các lệnh mới. Khi điều này xảy ra, bạn sẽ thấy các thanh màu cam và màu đỏ tăng đột biến, và lệnh gửi sẽ bị chặn cho đến khi có thêm chỗ trên hàng đợi lệnh GPU.

Trực quan hoá tình trạng GPU vẽ nhiều lần

Một tính năng khác trong các tùy chọn dành cho nhà phát triển giúp bạn xác định tình trạng vẽ nhiều lần bằng cách mã hóa màu cho giao diện người dùng. Tình trạng vẽ nhiều lần xảy ra khi ứng dụng của bạn vẽ cùng một pixel nhiều hơn một lần trong cùng một khung. Hình ảnh này cho thấy nơi ứng dụng của bạn có thể đang thực hiện hoạt động kết xuất nhiều hơn mức cần thiết. Đây có thể là vấn đề về hiệu suất do nỗ lực tăng cường GPU để kết xuất các pixel không hiển thị với người dùng. Vì vậy, bạn nên khắc phục sự kiện vẽ nhiều lần bất cứ khi nào có thể.

Nếu bạn chưa làm điều này, hãy bật các tùy chọn dành cho nhà phát triển. Sau đó, để hình dung mức vẽ nhiều lần trên thiết bị của bạn, hãy xử lý như sau:

  1. Trên thiết bị, hãy chuyển đến phần Cài đặt và nhấn vào Tùy chọn dành cho nhà phát triển.
  2. Di chuyển xuống phần Hiển thị tăng tốc phần cứng rồi chọn Gỡ lỗi GPU vẽ nhiều lần.
  3. Trong hộp thoại Gỡ lỗi GPU vẽ nhiều lần, hãy chọn Hiển thị khu vực vẽ nhiều lần.

Android tô màu các phần tử giao diện người dùng để xác định số lần vẽ nhiều lần như sau:

  • Màu thực: Không vẽ nhiều lần
  • Màu xanh dương: Vẽ quá 1 lần
  • Màu xanh lục: Vẽ quá 2 lần
  • Màu hồng: Vẽ quá 3 lần
  • Màu đỏ: Vẽ quá 4 lần trở lên

Hình 2. Một ứng dụng xuất hiện bình thường (trái), và xuất hiện khi đã bật GPU vẽ nhiều lần (phải)

Lưu ý những màu này mang tính bán trong suốt nên màu chính xác mà bạn thấy trên màn hình sẽ tùy thuộc vào nội dung của giao diện người dùng.

Giờ khi bạn đã có thể nhận biết vị trí xảy ra tình trạng vẽ nhiều lần trong bố cục, vui lòng đọc bài viết cách giảm tình trạng vẽ nhiều lần.

Hãy nhớ việc vẽ quá nhiều là không thể tránh khỏi. Khi bạn điều chỉnh giao diện người dùng của ứng dụng, hãy cố gắng xem một hình ảnh trực quan cho thấy hầu hết các màu thực, hoặc chỉ vẽ quá 1 lần (màu xanh dương).

Hình 3. Ví dụ về một ứng dụng có quá nhiều lần vẽ (trái) và tình trạng vẽ quá nhiều lần (phải)