Trong Android vitals, phiên bị chậm là phiên có hơn 25% số khung hình bị chậm. Khung hình được xem là chậm khi không xuất hiện trong vòng chưa đầy 50 mili giây sau khung hình trước đó (tương đương 20 khung hình/giây). Android vitals cũng báo cáo chỉ số Phiên bị chậm thứ hai với mục tiêu là 34 mili giây (tương đương 30 khung hình/giây). Khi sử dụng trang Phiên bị chậm, bạn có thể nắm rõ hiệu suất tốc độ khung hình của trò chơi; hiệu suất này ảnh hưởng đến sự mượt mà và linh hoạt của trò chơi theo cảm nhận của người dùng.
Trong lúc đó, Play sẽ bắt đầu chuyển hướng người dùng khỏi những trò chơi không thể đạt được 20 khung hình/giây trên điện thoại của họ. Xin lưu ý rằng Android vitals chỉ bắt đầu theo dõi tốc độ khung hình sau khi trò chơi của bạn chạy được một phút.
Hãy truy cập vào Trung tâm trợ giúp của chúng tôi để biết thêm thông tin chi tiết về chỉ số này.
Cách đo lường FPS và phát hiện khung hình chậm
Lệnh dumpsys SurfaceFlinger --timestats của Android cung cấp FPS trung bình và biểu đồ tần suất thời gian hiện tại đến hiện tại cho tất cả các lớp đang được kết xuất. Thời gian trình chiếu đến trình chiếu của một khung hình là khoảng thời gian giữa khung hình hiện tại và khung hình trước đó được vẽ. Hãy làm theo các bước sau để sử dụng lệnh thu thập FPS của trò chơi:
Chạy lệnh bằng cờ
enablevàclearđể bắt đầu thu thập thông tin:adb shell dumpsys SurfaceFlinger --timestats -clear -enableKhi trò chơi đã chạy đủ lâu, hãy chạy lại lệnh bằng cờ
dumpđể kết xuất thông tin:adb shell dumpsys SurfaceFlinger --timestats -dumpThông tin được kết xuất cung cấp tổng số khung hình và biểu đồ
presentToPresentcho tất cả các lớp do SurfaceFlinger kết xuất. Bạn phải tìm phần trò chơi của mình bằng cách lọc dựa trênlayerName:layerName = SurfaceView[com.google.test/com.devrel.MainActivity]@0(BLAST)#132833Bạn có thể tính tốc độ khung hình chậm của phiên dựa trên thông tin của từng lớp.
Ví dụ: tỷ lệ phần trăm khung hình chậm 20 khung hình/giây = (tổng giá trị từ 54 mili giây đến 1000 mili giây)/totalFrames x 100
totalFrames = 274 ... presentToPresent histogram: 0ms=0 1ms=0 2ms=0 3ms=0 4ms=0 5ms=0 6ms=0 7ms=0 8ms=0 9ms=0 10ms=0 11ms=0 12ms=0 13ms=0 14ms=0 15ms=0 16ms=1 17ms=0 18ms=0 19ms=0 20ms=0 21ms=0 22ms=0 23ms=0 24ms=0 25ms=0 26ms=0 27ms=0 28ms=0 29ms=0 30ms=0 31ms=0 32ms=0 33ms=269 34ms=0 36ms=0 38ms=0 40ms=0 42ms=0 44ms=0 46ms=0 48ms=0 50ms=1 54ms=0 58ms=0 62ms=0 66ms=0 70ms=1 74ms=0 78ms=0 82ms=0 86ms=0 90ms=0 94ms=0 98ms=0 102ms=0 106ms=0 110ms=0 114ms=0 118ms=0 122ms=0 126ms=0 130ms=0 134ms=0 138ms=0 142ms=0 146ms=0 150ms=0 200ms=0 250ms=0 300ms=0 350ms=0 400ms=0 450ms=0 500ms=0 550ms=0 600ms=0 650ms=0 700ms=0 750ms=0 800ms=0 850ms=0 900ms=0 950ms=0 1000ms=0FPS trung bình của mỗi lớp cũng được hiển thị trong tệp kết xuất:
... averageFPS = 30.179 ...Sau khi thu thập tất cả thông tin, hãy tắt timestats bằng cách sử dụng cờ
disable:adb shell dumpsys SurfaceFlinger --timestats -disable
Nguyên nhân và giải pháp cho khung hình chậm
Có nhiều lý do khiến một khung hình có thể hiển thị hoặc kết xuất lâu hơn trên màn hình so với mục tiêu của bạn. Trò chơi của bạn có thể bị ràng buộc bởi CPU hoặc GPU, thiết bị có thể bị quá nhiệt và kích hoạt trạng thái điều tiết nhiệt hoặc có thể không khớp giữa tốc độ khung hình của trò chơi và tốc độ làm mới màn hình của thiết bị.
Sử dụng Android Frame Pacing (Swappy), Vulkan và ADPF để giải quyết những vấn đề này và cải thiện hiệu suất của trò chơi.
Swappy là gì?
Thư viện Android Frame Pacing (còn gọi là Swappy) là một phần của thư viện AGDK. Swappy giúp các trò chơi OpenGL và Vulkan đạt được khả năng kết xuất hình ảnh mượt mà và tốc độ khung hình chính xác trên Android.
Tốc độ khung hình là sự đồng bộ hoá vòng lặp logic trò chơi và kết xuất đồ hoạ với hệ thống hiển thị phụ của hệ điều hành và phần cứng hiển thị cơ bản. Hệ thống hiển thị phụ của Android được thiết kế để tránh bất thường về mặt hình ảnh (còn gọi là xé hình) có thể xảy ra khi phần cứng hiển thị chuyển sang một khung mới một phần thông qua bản cập nhật. Để tránh hiển thị những bất thường này, hệ thống hiển thị phụ sẽ làm như sau:
- Đệm các khung hình trước đây trong nội bộ.
- Phát hiện khung hình gửi chậm.
- Lặp lại quá trình hiển thị các khung hình trước đây khi phát hiện thấy khung hình trễ.
Tìm hiểu cách Mir 2 sử dụng Swappy để giảm tỷ lệ phiên chậm từ 40% xuống còn 10%.
Cách sử dụng Swappy trong các dự án gốc
Hãy xem các hướng dẫn sau để tích hợp thư viện Android Frame Pacing vào trò chơi của bạn:
- Tích hợp Android Frame Pacing vào trình kết xuất OpenGL
- Tích hợp Android Frame Pacing vào trình kết xuất Vulkan
Cách sử dụng Swappy trong công cụ phát triển trò chơi Unity
Unity đã tích hợp Android Frame Pacing vào công cụ của họ. Để bật tính năng này trong Unity 2019.2 trở lên, hãy chọn hộp đánh dấu Optimized Frame Pacing (Tốc độ khung hình tối ưu) trong Project Settings (Cài đặt dự án) > Player (Trình phát) > Settings (Cài đặt) cho Android > Resolution and Presentation (Độ phân giải và bản trình bày):
Ngoài ra, hãy bật tuỳ chọn Tốc độ khung hình được tối ưu hoá theo cách có lập trình trong mã logic để cho phép Unity phân phối đều các khung hình nhằm giảm sự khác biệt về tốc độ khung hình, giúp trò chơi mượt mà hơn.
Cách sử dụng Swappy trong công cụ phát triển trò chơi Unreal
Unreal phiên bản 4.25 trở lên có tích hợp Thư viện tốc độ khung hình Android. Đây là một phần của Android Game Development Kit. Bài viết Tốc độ khung hình trên thiết bị di động giải thích cách bật Thư viện tốc độ khung hình trên Android và cách kiểm soát tốc độ khung hình qua mã C++.
Vulkan là gì?
Vulkan là API đồ hoạ 3D hiện đại cho nhiều nền tảng, được thiết kế để giảm thiểu sự trừu tượng giữa phần cứng đồ hoạ của thiết bị và trò chơi của bạn. Vulkan là API đồ hoạ chính cấp thấp trên Android thay cho OpenGL ES. OpenGL ES vẫn được hỗ trợ trên Android, nhưng không còn trong quá trình phát triển tính năng đang hoạt động.
So với OpenGL ES, Vulkan có các ưu điểm sau:
- Kiến trúc hiệu quả hơn với mức hao tổn CPU thấp hơn trong trình điều khiển đồ hoạ
- Các chiến lược tối ưu hoá mới giúp cải thiện hiệu suất của CPU
- Các tính năng đồ hoạ mới không có trong OpenGL ES, chẳng hạn như API không giới hạn (bindless) và dò tia
Cách sử dụng Vulkan trong các dự án Android gốc
Lớp học lập trình Làm quen với Vulkan trên Android hướng dẫn bạn cách thiết lập quy trình kết xuất Vulkan, sau đó kết xuất một hình tam giác xoay, có hoạ tiết trên màn hình. Sử dụng lớp học lập trình để tìm hiểu cách kết xuất đồ hoạ trò chơi.
Cách sử dụng Vulkan trong công cụ phát triển trò chơi Unity
Để bật tính năng tự động chọn thiết bị trên Unity, hãy làm theo các bước để định cấu hình Auto Graphics API.
Ngoài ra, bạn có thể bật Vulkan theo cách thủ công bằng cách tắt Auto Graphics API (API đồ hoạ tự động) và đặt Vulkan ở mức ưu tiên cao nhất trong danh sách Graphics APIs (API đồ hoạ). Nếu bạn đang sử dụng phiên bản Unity 2021.1 trở xuống, đây là cách duy nhất để sử dụng Vulkan.
Sử dụng trình bổ trợ công cụ VkQuality Unity để đưa ra đề xuất về API đồ hoạ cho trò chơi của bạn khi khởi chạy trên các thiết bị cụ thể.
Cách sử dụng Vulkan trong công cụ phát triển trò chơi Unreal
Để bật API đồ hoạ Vulkan, hãy chuyển đến phần Project Settings > Platforms > Android > Build (Cài đặt dự án > Nền tảng > Android > Bản dựng) rồi chọn Support Vulkan (Hỗ trợ Vulkan). Khi bạn chọn cả Support Vulkan (Hỗ trợ Vulkan) và Support OpenGL ES3.2 (Hỗ trợ OpenGL ES3.2), Unreal sẽ sử dụng Vulkan theo mặc định. Nếu thiết bị không hỗ trợ Vulkan, Unreal sẽ quay lại sử dụng OpenGL ES 3.2.
Nếu đang sử dụng các tính năng cụ thể của Vulkan được biết là hoạt động không tốt trên một số thiết bị, bạn có thể tuỳ chỉnh tệp BaseDeviceProfile.ini để loại trừ các thiết bị đó. Để tìm hiểu cách tuỳ chỉnh BaseDeviceProfile.ini, hãy xem bài viết Tuỳ chỉnh hồ sơ thiết bị và khả năng mở rộng cho Android. Vì trình điều khiển thiết bị mới có thể khắc phục các thiết bị không tốt đã biết trước đó, hãy luôn cập nhật tệp BaseDeviceProfile.ini để nhận được tất cả các tính năng tối ưu hoá.
ADPF là gì?
Khung hiệu suất động Android (ADPF) tối ưu hoá trò chơi dựa trên các tính năng động giúp quản lý nhiệt, CPU và GPU trên Android. Dù trọng tâm là trò chơi, nhưng bạn cũng có thể sử dụng các tính năng này cho các ứng dụng khác nặng về hiệu suất.
ADPF là một tập hợp API cho phép các trò chơi và ứng dụng cần nhiều hiệu suất tương tác trực tiếp hơn với hệ thống nguồn điện và nhiệt của thiết bị Android. Với những API này, bạn có thể theo dõi hành vi động trên hệ thống Android và tối ưu hoá hiệu suất trò chơi ở mức ổn định mà không gây quá nhiệt cho thiết bị.
Sau đây là các tính năng chính của ADPF:
- API Nhiệt: Theo dõi trạng thái nhiệt của thiết bị để ứng dụng có thể chủ động điều chỉnh khối lượng công việc trước khi thiết bị trở nên không ổn định.
- CPU Performance Hint API: Đưa ra gợi ý về hiệu suất cho phép Android chọn chế độ cài đặt hiệu suất phù hợp (ví dụ: điểm hoạt động hoặc nhân xử lý của CPU) cho khối lượng công việc.
- Game Mode API và Game State API: Cho phép tối ưu hoá lối chơi bằng cách ưu tiên các đặc điểm về hiệu suất hoặc thời lượng pin, dựa trên chế độ cài đặt của người dùng và cấu hình dành riêng cho trò chơi.
- Chế độ hiệu suất cố định: Bật chế độ hiệu suất cố định trên một thiết bị trong quá trình đo điểm chuẩn để nhận các số liệu đo lường không bị thay đổi bởi tính năng xung nhịp CPU động.
- Chế độ tiết kiệm điện năng: Cho phiên biết rằng các luồng trong Phiên gợi ý hiệu suất có thể được lên lịch một cách an toàn để ưu tiên tiết kiệm điện năng hơn hiệu suất. Có trong Android 15 (cấp độ API 35).
Cách sử dụng ADPF trong các dự án Android gốc
Lớp học lập trình Tích hợp các tính năng về Khả năng thích ứng vào Trò chơi gốc hướng dẫn bạn tích hợp các tính năng của ADPF vào trò chơi theo các bước mà bạn có thể thực hiện theo tốc độ của riêng mình. Khi kết thúc lớp học lập trình, bạn sẽ tích hợp được các tính năng sau:
- API Nhiệt: Theo dõi tình trạng nhiệt của thiết bị và phản ứng trước khi thiết bị rơi vào trạng thái điều tiết nhiệt.
- Game Mode API: Tìm hiểu lựa chọn ưu tiên của người chơi về việc tối ưu hoá (tối đa hoá hiệu suất hoặc tiết kiệm pin) và điều chỉnh cho phù hợp.
- Game State API: Cho hệ thống biết trạng thái của trò chơi (đang tải, đang chơi, giao diện người dùng, v.v.) để hệ thống có thể điều chỉnh tài nguyên cho phù hợp (tăng cường I/O hoặc CPU, GPU, v.v.).
- Performance Hint API: Cho hệ thống biết mô hình phân luồng và khối lượng công việc của bạn để hệ thống có thể phân bổ tài nguyên cho phù hợp.
Cách sử dụng ADPF trong công cụ phát triển trò chơi Unity
Hiệu suất thích ứng của Unity là một công cụ dành cho các nhà phát triển trò chơi muốn tối ưu hoá trò chơi của họ trên thiết bị di động, đặc biệt là cho hệ sinh thái Android đa dạng. Hiệu suất thích ứng cho phép trò chơi của bạn thích ứng với hiệu suất và đặc điểm nhiệt của thiết bị trong thời gian thực, đảm bảo trải nghiệm chơi trò chơi mượt mà và hiệu quả.
Nhà cung cấp Hiệu suất thích ứng Android hướng dẫn bạn các bước triển khai ADPF trong Unity. Hãy xem thêm bài viết Hiệu suất thích ứng của ADPF Unity và nhà cung cấp Android.
Cách sử dụng ADPF trong công cụ phát triển trò chơi Unreal
- Tải trình bổ trợ xuống.
- Sao chép trình bổ trợ vào thư mục trình bổ trợ của dự án.
- Bật trình bổ trợ ADPF Unreal Engine trong trình chỉnh sửa Unreal.
- Chạy lại trình chỉnh sửa Unreal.
- Tạo bản dựng và chuẩn bị trò chơi.
Trình bổ trợ Khung hiệu suất động Android (ADPF) cho Unreal Engine mang lại hiệu suất ổn định và ngăn chặn tình trạng điều tiết nhiệt. Tải trình bổ trợ xuống qua GitHub. Trình bổ trợ này thay đổi các tính năng bằng cách đặt giá trị bảng điều khiển Unreal. Để biết thêm thông tin, hãy xem bài viết Trình bổ trợ ADPF cho Unreal Engine.