Descripción general de Android Performance Tuner (nativo)

En este tema, se describe cómo integrar Android Performance Tuner, también conocido como la biblioteca de Tuning Fork, para registrar y subir datos de latencia de fotogramas de motores de juegos nativos (C y C++).

Para el motor de juegos de Unity, consulta la guía de Unity.

Fondo

Un componente fundamental de la experiencia de juego es el rendimiento del renderizado. Este rendimiento es el resultado de las siguientes dos entradas:

  • Velocidad de fotogramas: frecuencia con la que se traza un fotograma
  • Configuración de calidad gráfica: grado de fidelidad al que se presenta un fotograma, lo que incluye tanto la fidelidad de simulación como los gráficos

En materia de juegos, un buen rendimiento de renderizado se define como aquel que logra lo siguiente:

  • Entregar una velocidad de fotogramas estable y coherente (es decir, el porcentaje de fotogramas que se renderizan a la frecuencia deseada)
  • Renderizar fotogramas con la mayor frecuencia posible y, al mismo tiempo, mantener la estabilidad (por lo general, será de 30 o 60 FPS, según el tipo de juego)
  • Maximizar el nivel de detalle para cada usuario según el tamaño y la densidad de su pantalla, y lograr una velocidad de fotogramas estable y deseable

La biblioteca de Android Frame Pacing limita gran parte de la variación de la latencia de fotogramas, lo que proporciona una velocidad de fotogramas estable para los juegos. La variación restante se debe al nivel de detalle que se muestra durante ciertas escenas del juego y a las capacidades gráficas del dispositivo. Con Android Performance Tuner, puedes identificar los momentos del juego en los que la latencia de fotogramas fue más lenta o más rápida que el objetivo y correlacionar estos problemas y oportunidades con lo siguiente:

  • Determinada configuración de calidad
  • Escenas del juego específicas
  • Modelos o especificaciones de dispositivos

Cómo registrar y subir datos

La biblioteca de Tuning Fork depende de que la biblioteca de Android Frame Pacing llame a una de las funciones de marca en cada fotograma. En la biblioteca, se agrega esta información de marca a histogramas, que luego se suben periódicamente a Google Play a través de un extremo HTTP. Cada marca se registra como asociada con una etiqueta de marca y una anotación, cuyas definiciones debes especificar en un archivo de búfer de protocolo.

Etiquetas de marca

Una etiqueta de marca indica el lugar del fotograma del cual proviene la marca y es un número entero que se debe pasar a cada llamada a función de marca. La biblioteca de Android Frame Pacing usa un conjunto predefinido de etiquetas de marca, definidas en swappy_common.h. Si no usas esta biblioteca, puedes definir tus propias etiquetas de marca.

Anotaciones

Las anotaciones proporcionan información contextual sobre lo que está haciendo tu juego cuando se registra una marca. Por ejemplo, una anotación podría identificar cualquiera de los siguientes elementos:

  • El nivel actual del juego
  • La presencia en pantalla de un "jefe"
  • Cualquier otra información relevante sobre el estado del juego

Las anotaciones se definen mediante el mensaje de búfer de protocolo com.google.tuningfork.Annotation. Para establecer la anotación actual, pasa una serialización del mensaje que definiste en TuningFork_setCurrentAnnotation(). Todos los datos de marcas posteriores se asociarán con esta anotación hasta que se establezca otra. El siguiente es un ejemplo de definición de un proto para las anotaciones:

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

Parámetros de fidelidad

Los parámetros de fidelidad influyen en el rendimiento y el realismo de los gráficos de tu juego, lo que incluye el nivel de detalle de redes en malla, la resolución de texturas y el método de suavizado de contorno. Al igual que las anotaciones, los parámetros de fidelidad se definen con el mensaje de búfer de protocolo com.google.tuningfork.FidelityParams. El siguiente es un ejemplo de definición de un proto para los parámetros de fidelidad:

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;
}

En la inicialización de Tuning Fork, se pasa una serialización de los parámetros que usa el juego. Puedes cambiar estos parámetros si, por ejemplo, el usuario cambia la configuración de procesamiento del juego y los datos subidos posteriores se asocian con los parámetros nuevos.

Para que Google Play comprenda las anotaciones y los parámetros de fidelidad que definas, el archivo de búfer de protocolo que contiene estas definiciones debe empaquetarse en el APK del juego, junto con la configuración de inicialización. También debes proporcionar valores predeterminados para las combinaciones comunes de parámetros de fidelidad de tu APK a fin de que se segmenten tus datos con base en ellos en la IU de Google Play. Para obtener más información, consulta Cómo definir los niveles de calidad.

Sobrecarga de memoria y CPU

Toda la memoria que usa la biblioteca de Tuning Fork se asigna durante la inicialización a fin de evitar sorpresas durante el juego. El tamaño de los datos depende de la cantidad de etiquetas de marca, de anotaciones posibles y de buckets de cada histograma. Es un múltiplo de estas cantidades por cuatro bytes para cada bucket. También hay dos copias de todos los histogramas para permitir el envío en un modo de doble búfer.

El envío se produce en un subproceso independiente y no bloquea las llamadas de marcas. Si no hay una conexión de carga disponible, el envío quedará en una fila para realizar la carga en otro momento.

Hay poca sobrecarga de procesamiento en la llamada a una función de marca, simplemente calcula un índice en el arreglo de los depósitos de histogramas y aumenta el recuento de valores enteros.

Cómo integrar la biblioteca de Tuning Fork

Esta guía de integración se divide en dos partes. En la primera parte, se describe cómo ejecutar una prueba de extremo a extremo por medio de una app de demostración y Google Play Console. En la segunda parte, se describe cómo integrar la biblioteca de Tuning Fork en tu cadena de herramientas y cómo usar las funciones que proporciona la biblioteca. Haz clic en el vínculo Siguiente más abajo para comenzar.