Phiên bị chậm (chỉ áp dụng cho trò chơi)

Phiên bị chậm là một chỉ số mới của Android vitals trong Google Play Console. Chậm phiên là phiên trong đó hơn 25% số khung hình bị chậm. Một khung là chậm nếu không được trình bày sau khung hình trước dưới 50 mili giây (tương đương 20 khung hình/giây). Android vitals cũng báo cáo 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 Phiên bị chậm, bạn có thể biết được hiệu suất tốc độ khung hình của trò chơi, từ đó ảnh hưởng đến giúp trò chơi mượt mà và linh hoạt.

Trong khi đó, 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. 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. về chỉ số này.

Đồ hoạ giống như biểu đồ hình tròn cho biết số khung hình chậm và số khung hình không chậm.
Hình 1. Phiên bị chậm trong Android vitals.

Cách đo khung hình trên giây 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 đồ thời gian hiển thị để trình bày cho tất cả các lớp đang được kết xuất. Thời gian từ hiện tại đến hiện tại của một khung hình là khoảng thời gian giữa khung hiện tại và khung trước đang được vẽ. Sau đây là cách sử dụng lệnh để thu thập FPS của trò chơi:

  1. Chạy lệnh có cờ enableclear để bắt đầu thu thập của bạn:

    adb shell dumpsys SurfaceFlinger --timestats -clear -enable
    
  2. Khi trò chơi đã chơi đủ lâu, hãy chạy lại lệnh với gắn cờ dump để kết xuất thông tin:

    adb shell dumpsys SurfaceFlinger --timestats -dump
    

    Thông tin đã kết xuất cung cấp tổng số khung hình và biểu đồ hàmTrình bày cho tất cả các lớp được kết xuất bằng SurfaceFlinger. Bạn phải tìm thấy phần trò chơi của bạn bằng cách lọc dựa trên layerName:

    layerName = SurfaceView[com.google.test/com.devrel.MainActivity]@0(BLAST)#132833
    

    Tốc độ khung hình chậm của phiên có thể được tính toá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) / tổng số khung hình x 100

    totalFrames = 274
    ...
    presentToPresent histogram is as below:
    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=0
    

    FPS 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
    ...
    
  3. Sau khi thu thập tất cả thông tin, bạn nên tắt thống kê thời gian bằng cách sử dụng cờ disable:

    adb shell dumpsys SurfaceFlinger --timestats -disable
    

Nguyên nhân và cách khắc phục khung hình chậm

Có nhiều lý do khiến một khung hình có thể hiển thị hoặc hiển thị lâu hơn trên màn hình so với mục tiêu của nhà phát triển. Trò chơi có thể bị ràng buộc bởi CPU/GPU. Hoặc thiết bị đang quá nóng và kích hoạt trạng thái nhiệt được điều tiết. Hoặc không khớp tốc độ khung hình của trò chơi và màn hình của thiết bị tốc độ làm mới.

Sử dụng Android Frame Pacing (Swappy) (Tốc độ khung hình Android (Swappy)), VulkanADPF sang 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 được gọi là Swappy) là một phần của Thư viện AGDK. Swappy hỗ trợ các trò chơi OpenGL và Vulkan đạt được khả năng kết xuất 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á logic và vòng lặp kết xuất của trò chơi 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ệ điều hành Android hệ thống hiển thị con được thiết kế để tránh các cấu phần phần mềm hình ảnh (còn gọi là hiện tượng xé hình) có thể xảy ra khi phần cứng hiển thị chuyển sang một phần khung hình mới thông qua một bản cập nhật. Để tránh những cấu phần phần mềm này, hệ thống màn hình phụ sẽ 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ễ

Cách sử dụng Swappy trong Dự án gốc

Hãy xem các hướng dẫn sau để tích hợp thư viện Android Frame Pacing (Tốc độ khung hình Android) vào trò chơi của bạn:

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 tính năng trong Unity 2019.2 hoặc cao hơn, hãy đánh dấu vào hộp Optimize Frame Pacing (Tốc độ khung hình tối ưu hoá) trong phần Cài đặt dự án > Trình phát > Cài đặt dành cho Android > Cách giải quyết và trình bày:

Hộp thoại cài đặt dự án.
Hình 2. Bật Frame Pacing (Tốc độ khung hình) trong Unity Engine.

Ngoài ra, hãy bật tuỳ chọn Tốc độ khung hình được tối ưu hoá theo phương thức lập trình trong mã logic để cho phép Unity đồng đều phân phối khung hình để tốc độ khung hình ít bị chênh lệch hơn, qua đó mang lại trải nghiệm 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 4.25 trở lên tích hợp Thư viện Android Frame Pacing. Đâ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 Android Frame Pacing Library (Thư viện tốc độ khung hình) 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 liên kết 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 của bạn rồi kết xuất tam giác xoay có kết cấu trên màn hình. Sử dụng lớp học lập trình này để 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.

Hộp thoại cài đặt dự án.
Hình 3. Bật Unity 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, và đặt Vulkan vào mức độ ưu tiên cao nhất trong danh sách Graphics API (API Đồ hoạ). Nếu bạn sử dụng Unity 2021.1 hoặc phiên bản trước đó, đây là cách duy nhất để sử dụng Vulkan.

Hộp thoại cài đặt dự án.
Hình 4. Chọn Vulkan làm API Đồ hoạ chính trong Unity theo cách thủ công.

Sử dụng trình bổ trợ công cụ Unity VkQuality để đưa ra đề xuất về thời điểm khởi chạy API đồ hoạ cho trò chơi của bạn 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 trên Unreal

Để bật API đồ hoạ Vulkan, hãy chuyển đến phần Cài đặt dự án > Nền tảng > Android > Build (Bản dựng) rồi chọn Support Vulkan (Hỗ trợ Vulkan). Khi bạn chọn cả hai tuỳ chọn Hỗ trợ VulkanHỗ trợ OpenGL ES3.2, Unreal 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.

Hộp thoại cài đặt dự án.
Hình 5. Bật Vulkan trong Unreal Engine.

Nếu bạn đang sử dụng các tính năng Vulkan cụ thể được xác định là hoạt động kém một số thiết bị nhất định, bạn có thể tuỳ chỉnh tệp BaseDeviceProfile.ini để loại trừ các thiết bị đó. Hãy tham khảo bài viết Tuỳ chỉnh hồ sơ thiết bị và khả năng mở rộng quy mô dành cho Android để tìm hiểu cách tuỳ chỉnh BaseDeviceProfile.ini. Vì trình điều khiển thiết bị mới có thể khắc phục sự cố trước đó thiết bị xấu đã biết, hãy cập nhật tệp BaseDeviceProfile.ini để nhận tất cả các biện pháp 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. Tập trung vào trò chơi, nhưng bạn cũng có thể sử dụng các tính năng cho các ứng dụng dùng nhiều 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. Bằng các 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 của trò chơi ở mức bền vững mà không khiến thiết bị bị quá nhiệt.

Sau đây là các tính năng chính của ADPF:

  • Thermal API (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.
  • API Gợi ý về hiệu suất CPU: Đư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 điều hành CPU hoặc lõi) cho khối lượng công việc.
  • Game Mode API (API Chế độ trò chơi) và Game State API (API Trạng thái trò chơi): Bật tính năng 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 các chế độ cài đặt của người dùng và các 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 thiết bị trong quá trình đo điểm chuẩn để nhận được các số liệu đo lường không bị thay đổi bởi xung nhịp CPU động.
  • Chế độ hiệu suất năng lượng: Cho phiên biết rằng bạn có thể lên lịch một cách an toàn cho các luồng trong Phiên Gợi ý về hiệu suất để ưu tiên hiệu suất điện năng hơn là hiệu suất. Có trong Android 15 (API leve 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 của trò chơi với các bước mà bạn có thể làm theo theo tốc độ của riêng mình. Ở cuối lớp học lập trình này, bạn sẽ tích hợp 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ị chuyển sang trạng thái điều tiết nhiệt.
  • Game Mode API: Hiểu lựa chọn ưu tiên về việc tối ưu hoá của người chơi (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 (API Trạng thái trò chơi): Cho hệ thống biết trạng thái trò chơi (tải, chơi, giao diện người dùng, v.v.) và hệ thống có thể điều chỉnh tài nguyên cho phù hợp (tăng I/O hoặc CPU, GPU, v.v.).
  • API Gợi ý về hiệu suất: Cho hệ thống biết mô hình phân luồng cũng như khối lượng công việc của bạn để hệ thống có thể phân bổ tài nguyên 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 dành cho các nhà phát triển trò chơi đang tìm cách tối ưu hoá trò chơi của họ trên thiết bị di động, đặc biệt là đối với hệ sinh thái Android đa dạng. Tính năng Hiệu suất thích ứng sẽ bật trò chơi của bạn sao cho phù hợp với hiệu suất và đặc điểm nhiệt của thiết bị theo theo 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 Android Hiệu suất thích ứng hướng dẫn bạn các bước triển khai ADPF trong Unity.

Hộp thoại cài đặt dự án.
Hình 6. Tích hợp ADPF trong Unity Engine.

Cách sử dụng ADPF trong công cụ phát triển trò chơi trên Unreal

Hộp thoại cài đặt dự án.
Hình 7. Tích hợp ADPF trong Unreal Engine.
  1. Tải trình bổ trợ xuống
  2. Sao chép trình bổ trợ vào thư mục trình bổ trợ dự án
  3. Bật trình bổ trợ ADPF Unreal Engine trong trình chỉnh sửa Unreal
  4. Chạy lại trình chỉnh sửa Unreal
  5. Xây dựng và nấu ăn trò chơi

Trình bổ trợ Khung hiệu suất động Android(ADPF) cho Unreal Engine cung cấp hiệu suất ổn định và ngăn tình trạng điều tiết nhiệt. Tải trình bổ trợ xuống trên GitHub. Trình bổ trợ này thay đổi các tính năng bằng cách cài đặt Giá trị không thực trên bảng điều khiển.