Tổng quan về Android Performance Tuner (gốc)

Chủ đề này mô tả cách tích hợp Android Performance Tuner, còn gọi là thư viện Tuning Fork, để ghi lại và tải dữ liệu thời gian kết xuất khung hình lên từ các công cụ phát triển trò chơi (C và C++) gốc.

Đối với công cụ phát triển trò chơi Unity, hãy xem hướng dẫn dành cho Unity.

Thông tin khái quát

Hiệu suất kết xuất là một thành phần chính của trải nghiệm trò chơi. Hiệu suất kết xuất là kết quả của hai đầu vào sau:

  • Tốc độ khung hình: Tần suất vẽ khung.
  • Chế độ cài đặt chất lượng đồ hoạ: Độ trung thực khi hiện một khung hình, bao gồm cả độ chân thực mô phỏng cũng như đồ hoạ.

Đối với trò chơi, hiệu suất kết xuất tốt được định nghĩa như sau:

  • Cung cấp tốc độ khung hình (tức là tỷ lệ phần trăm số khung hình kết xuất ở tần suất mong muốn) ổn định, nhất quán.
  • Kết xuất khung hình ở tần suất cao nhất có thể trong khi vẫn duy trì độ ổn định, thường là 30 hoặc 60 FPS, tuỳ thuộc vào loại trò chơi.
  • Tối đa hoá mức độ chi tiết cho người dùng dựa trên kích thước và mật độ màn hình của họ trong khi vẫn đạt được tốc độ khung hình ổn định, mong muốn.

Thư viện Android Frame Pacing hạn chế phần lớn sự biến động về thời gian kết xuất khung hình, mang lại tốc độ khung hình ổn định cho trò chơi. Sự biến động còn lại về thời gian kết xuất khung hình là do mức độ chi tiết được hiển thị ở một số cảnh trong trò chơi và các chức năng đồ hoạ của thiết bị. Sử dụng Android Performance Tuner, bạn có thể xác định số lần trong khi chơi trò chơi khi thời gian kết xuất khung hình chậm hoặc nhanh hơn thời gian mục tiêu, đồng thời liên hệ tương quan những vấn đề và cơ hội này với:

  • Chế độ cài đặt chất lượng cụ thể
  • Cảnh cụ thể trong trò chơi
  • Mẫu thiết bị hoặc thông số kỹ thuật cụ thể của thiết bị

Ghi lại và tải dữ liệu lên

Thư viện Tuning Fork dựa vào một trong các hàm đánh dấu nhịp độ khung hình được thư viện Android Frame Pacing gọi trong từng khung hình. Trong thư viện, thông tin đánh dấu nhịp độ khung hình này được tổng hợp thành biểu đồ và sau đó được tải lên Google Play định kỳ thông qua một điểm cuối HTTP. Mỗi kim đánh dấu nhịp độ khung hình được ghi lại là được liên kết với một khoá xác định xuất phát điểm và một chú giải, với các định nghĩa mà bạn chỉ định trong tệp vùng đệm giao thức.

Khoá xác định xuất phát điểm

Khoá xác định xuất phát điểm cho biết vị trí mà kim đánh dấu nhịp độ khung hình xuất hiện trong khung và là một số nguyên phải được truyền vào mỗi lệnh gọi hàm đánh dấu nhịp độ khung hình. Thư viện Android Frame Pacing sử dụng một bộ khoá xác định xuất phát điểm được xác định sẵn trong swappy_common.h. Bạn cũng có thể xác định khoá xác định xuất phát điểm của riêng mình nếu không sử dụng thư viện Frame Pacing.

Chú giải

Chú giải cung cấp thông tin theo bối cảnh về hoạt động của trò chơi khi một kim đánh dấu nhịp độ khung hình được ghi lại. Chẳng hạn, chú giải có thể xác định bất kỳ nội dung nào sau đây:

  • Cấp độ trò chơi hiện tại
  • Một "trùm lớn" đang xuất hiện trên màn hình
  • Mọi thông tin khác về trạng thái trò chơi có liên quan

Chú giải được xác định bằng thông báo vùng đệm giao thức com.google.tuningfork.Annotation. Để đặt chú giải hiện tại, bạn truyền một chuỗi tuần tự của thông báo mà bạn đã xác định vào TuningFork_setCurrentAnnotation(). Sau đó, tất cả dữ liệu đánh dấu nhịp độ khung hình tiếp theo được liên kết với chú giải này cho đến khi bạn đặt chú giải khác. Sau đây là ví dụ về định nghĩa nguyên mẫu cho chú giải:

import "tuningfork.proto"
enum Level {
  INVALID_LEVEL = 0;
  Level_1 = 1;
  Level_2 = 2;
  Level_3 = 3;
}
message Annotation {
  optional Level level = 1;
}

Thông số về độ chân thực

Thông số về độ chân thực sẽ ảnh hưởng đến hiệu suất và độ trung thực đồ hoạ của trò chơi, chẳng hạn như độ chi tiết của lưới, độ phân giải của hoạ tiết và phương thức khử răng cưa. Giống như chú giải, thông số về độ chân thực được xác định bằng thông báo vùng đệm giao thức com.google.tuningfork.FidelityParams. Sau đây là ví dụ về định nghĩa nguyên mẫu cho các thông số về độ chân thực:

import "tuningfork.proto"
message FidelityParams {
  int32 texture_quality_level = 1;
  int32 shadow_resolution = 2;
  float terrain_details_percent = 3;
  int32 post_processing_effects_level = 4;
}

Khi khởi động Tuning Fork, bạn truyền một chuỗi tuần tự của các thông số mà trò chơi sử dụng. Ví dụ: bạn có thể thay đổi các thông số này nếu người dùng thay đổi các tuỳ chọn cài đặt kết xuất trò chơi và dữ liệu được tải lên tiếp theo của bạn được liên kết với các thông số mới.

Để Google Play hiểu được các chú giải và thông số về độ chân thực mà bạn xác định, tệp vùng đệm giao thức chứa các định nghĩa này phải được gói trong APK của trò chơi, cùng với chế độ cài đặt khởi động. Bạn cũng cần cung cấp giá trị mặc định cho các tổ hợp thông số về độ chân thực phổ biến trong APK để phân khúc dựa trên dữ liệu trong giao diện người dùng Google Play. Để biết thêm thông tin, hãy xem phần Xác định mức chất lượng.

Bộ nhớ và mức hao tổn CPU

Tất cả bộ nhớ mà thư viện Tuning Fork sử dụng đều được phân bổ khi khởi động để tránh gây bất ngờ trong khi chơi. Dung lượng dữ liệu phụ thuộc vào số khoá xác định xuất phát điểm, số chú giải có thể xuất hiện và số bộ chứa trong mỗi biểu đồ; dung lượng dữ liệu là bội số của tất cả giá trị nêu trên nhân với bốn byte cho từng bộ chứa. Ngoài ra, còn có hai bản sao của tất cả biểu đồ để cho phép gửi theo kiểu đệm đôi.

Việc gửi dữ liệu xảy ra trên một luồng riêng biệt và không chặn các lệnh gọi hàm đánh dấu nhịp độ khung hình. Nếu không có kết nối tải lên, nội dung gửi sẽ được xếp hàng để tải lên sau đó.

Lệnh gọi hàm đánh dấu nhịp độ khung hình có mức hao tổn xử lý rất thấp: chỉ đơn giản là tính toán một chỉ mục vào mảng bộ chứa biểu đồ và tăng số lượng số nguyên.

Tích hợp thư viện Tuning Fork

Tài liệu hướng dẫn về tích hợp này chia làm hai phần. Phần đầu mô tả cách kiểm thử toàn diện bằng cách sử dụng ứng dụng minh hoạ và Google Play Console. Phần sau mô tả cách tích hợp thư viện Tuning Fork vào chuỗi công cụ và cách sử dụng các hàm mà thư viện cung cấp. Hãy nhấp vào đường liên kết Tiếp theo bên dưới để bắt đầu.