Clase de rendimiento

La clase de rendimiento es un estándar que se introdujo por primera vez en Android 12. Una clase de rendimiento define un conjunto de capacidades del dispositivo que va más allá de los requisitos del modelo de referencia de Android.

Cada versión de Android tiene su propia clase de rendimiento correspondiente, que se define en el documento de definición de compatibilidad de Android (CDD) de la versión. El conjunto de pruebas de compatibilidad (CTS) de Android verifica los requisitos del CDD.

Cada dispositivo Android declara la clase de rendimiento que admite. Los desarrolladores pueden encontrar la clase de rendimiento del dispositivo en el tiempo de ejecución y ofrecer experiencias mejoradas que aprovechen al máximo las capacidades del dispositivo.

Para encontrar el nivel de clase de rendimiento de un dispositivo, usa la biblioteca de Core Performance de Jetpack. Esta biblioteca informa la clase de rendimiento del contenido multimedia del dispositivo como se declara en la información de la versión de compilación o se basa en los datos de los Servicios de Google Play.

Comienza por agregar una dependencia para los módulos relevantes en tu archivo de Gradle:

Kotlin

// Implementation of Jetpack Core library.
implementation("androidx.core:core-ktx:1.12.0")
// Enable APIs to query for device-reported performance class.
implementation("androidx.core:core-performance:1.0.0")
// Enable APIs to query Google Play Services for performance class.
implementation("androidx.core:core-performance-play-services:1.0.0")

Groovy

// Implementation of Jetpack Core library.
implementation 'androidx.core:core-ktx:1.12.0'
// Enable APIs to query for device-reported performance class.
implementation 'androidx.core:core-performance:1.0.0'
// Enable APIs to query Google Play Services for performance class.
implementation 'androidx.core:core-performance-play-services:1.0.0'

Then, create an instance of a DevicePerformance implementation, such as PlayServicesDevicePerformance, in the onCreate() lifecycle event of your Application. This should only be done once in your app.

Kotlin

import androidx.core.performance.play.services.PlayServicesDevicePerformance

class MyApplication : Application() {
  lateinit var devicePerformance: DevicePerformance

  override fun onCreate() {
    // Use a class derived from the DevicePerformance interface
    devicePerformance = PlayServicesDevicePerformance(applicationContext)
  }
}

Java

import androidx.core.performance.play.services.PlayServicesDevicePerformance;

class MyApplication extends Application {
  DevicePerformance devicePerformance;

  @Override
  public void onCreate() {
    // Use a class derived from the DevicePerformance interface
    devicePerformance = new PlayServicesDevicePerformance(applicationContext);
  }
}

Luego, puedes recuperar la propiedad mediaPerformanceClass para adaptar la experiencia de tu app en función de las capacidades del dispositivo:

Kotlin

class MyActivity : Activity() {
  private lateinit var devicePerformance: DevicePerformance
  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    // Note: Good app architecture is to use a dependency framework. See
    // https://developer.android.com/training/dependency-injection for more
    // information.
    devicePerformance = (application as MyApplication).devicePerformance
  }

  override fun onResume() {
    super.onResume()
    when {
      devicePerformance.mediaPerformanceClass >= Build.VERSION_CODES.TIRAMISU -> {
        // Performance class level 13 and later.
        // Provide the most premium experience for the highest performing devices.
      }
      devicePerformance.mediaPerformanceClass == Build.VERSION_CODES.S -> {
        // Performance class level 12.
        // Provide a high quality experience.
      }
      else -> {
        // Performance class level 11 or undefined.
        // Remove extras to keep experience functional.
      }
    }
  }
}

Java

class MyActivity extends Activity {
  private DevicePerformance devicePerformance;
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    // Note: Good app architecture is to use a dependency framework. See
    // https://developer.android.com/training/dependency-injection for more
    // information.
    devicePerformance = ((MyApplication) getApplication()).devicePerformance;
  }

  @Override
  public void onResume() {
    super.onResume();
    if (devicePerformance.getMediaPerformanceClass() >= Build.VERSION_CODES.TIRAMISU) {
      // Performance class level 13 and later.
      // Provide the most premium experience for the highest performing devices.
    } else if (devicePerformance.getMediaPerformanceClass() == Build.VERSION_CODES.S) {
      // Performance class level 12.
      // Provide a high quality experience.
    } else {
      // Performance class level 11 or undefined.
      // Remove extras to keep experience functional.
    }
  }
}

Las clases de rendimiento son compatibles con versiones futuras. Un dispositivo puede actualizarse a una versión más reciente de la plataforma sin cambiar su clase de rendimiento. Por ejemplo, un dispositivo que, en un principio, admite la clase 12 de rendimiento puede actualizarse a Android 13 y continuar informando que es compatible con la clase 12 si no cumple con los requisitos de la clase 13. Es decir, una clase de rendimiento brinda una manera de agrupar dispositivos sin depender de una versión particular de Android.

Figura 1: Los dispositivos pueden actualizar las versiones de Android y continuar informando que admiten la clase que admitían originalmente.

Clase 14 de rendimiento

La clase 14 de rendimiento se basa en los requisitos ingresados en la clase 13 de rendimiento. Los requisitos específicos de la clase de rendimiento se publican en el CDD de Android. Además de los requisitos adicionales para los elementos de la clase de rendimiento 13, el CDD especifica requisitos en las siguientes áreas:

Contenido multimedia

  • Compatibilidad con el efecto de grano de película en decodificadores de hardware de AV1
  • Perfil de Baseline de AVIF
  • Rendimiento del codificador AV1
  • Códecs de video HDR
  • Formato de color RGBA_1010102
  • Muestreo de texturas YUV
  • Calidad de codificación de video
  • Mezcla de audio multicanal

Cámara

  • Extensión Modo nocturno
  • Cámara principal compatible con HDR
  • Modo panorámico de detección de rostro

Genérico

  • Superposiciones de hardware
  • Pantalla HDR

Clase 13 de rendimiento

La clase 13 de rendimiento se basa en los requisitos ingresados en la clase 12 de rendimiento. Los requisitos específicos de la clase de rendimiento se publican en el CDD de Android. Además de los requisitos adicionales para los elementos de la clase de rendimiento 12, el CDD especifica requisitos en las siguientes áreas:

Contenido multimedia

  • Decodificador de hardware de AV1
  • Decodificadores de hardware seguros
  • Latencia de inicialización del decodificador
  • Latencia de audio de ida y vuelta
  • Auriculares con cable y dispositivos de audio USB
  • Dispositivos MIDI
  • Entorno de ejecución confiable respaldado por hardware

Cámara

  • Estabilización de versión preliminar
  • Grabación en cámara lenta
  • Relación de zoom mínima para cámaras con ultra gran angular
  • Cámara simultánea
  • Multicámara lógica
  • Caso práctico de transmisión

Clase 12 de rendimiento

La clase 12 de rendimiento se enfoca en casos de uso de contenido multimedia. Los requisitos específicos de la clase de rendimiento se publican en el CDD de Android. El CDD especifica los requisitos en las siguientes áreas:

Contenido multimedia

  • Sesiones simultáneas de códecs de video
  • Latencia de inicialización del codificador
  • Pérdida de fotogramas del decodificador
  • Calidad de codificación

Cámara

  • Resolución y velocidad de fotogramas
  • Latencias de inicio y captura
  • FULL o un nivel de hardware superior
  • La fuente de la marca de tiempo es en tiempo real
  • Función RAW

Genérico

  • Memoria
  • Rendimiento de lectura y escritura
  • Resolución de pantalla
  • Densidad de pantalla

Clase 11 de rendimiento

La clase 11 de rendimiento incluye un subconjunto de requisitos de la clase 12, lo que permite a los desarrolladores proporcionar una experiencia personalizada en dispositivos más antiguos pero que mantienen una capacidad alta. Los requisitos específicos de la clase de rendimiento se publican en el CDD de Android.