Classe de desempenho

Uma classe de desempenho é um padrão introduzido no Android 12. Uma classe de desempenho define um conjunto de funcionalidades do dispositivo que vão além dos requisitos do valor de referência do Android.

Cada versão do Android tem a própria classe de desempenho correspondente, que é definida no Documento de definição de compatibilidade (CDD) do Android da versão. O conjunto de teste de compatibilidade (CTS) do Android verifica os requisitos do CDD.

Cada dispositivo Android declara a classe de desempenho a que oferece suporte. Os desenvolvedores podem conferir a classe de desempenho do dispositivo durante a execução e fornecer experiências melhoradas que aproveitam ao máximo os recursos do aparelho.

Para descobrir o nível da classe de desempenho de um dispositivo, use a biblioteca Core Performance do Jetpack. Ela informa a classe de desempenho de mídia do dispositivo conforme declarada nas informações da versão do build ou com base nos dados do Google Play Services.

Comece adicionando uma dependência para os módulos relevantes no arquivo do 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);
  }
}

Em seguida, você pode extrair a propriedade mediaPerformanceClass para adaptar a experiência do app com base nos recursos do 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.
    }
  }
}

As classes de desempenho vão ser compatíveis com versões futuras. Um dispositivo pode ser atualizado para uma versão mais recente da plataforma sem precisar atualizar a própria classe de desempenho. Por exemplo, um dispositivo que inicialmente oferece suporte à classe de desempenho 12 pode fazer upgrade para o Android 13 e continuar a oferecer suporte à classe 12 caso não atenda aos requisitos da classe 13. Isso significa que uma classe de desempenho oferece uma maneira de agrupar dispositivos sem depender de uma versão específica do Android.

Figura 1. Os dispositivos podem fazer upgrade de versões do Android e continuar informando que têm suporte à classe original.

Classe de desempenho 14

A classe de desempenho 14 se baseia nos requisitos introduzidos na classe de desempenho 13. Confira os requisitos específicos da classe de desempenho no CDD do Android. Além do aumento dos requisitos para itens da classe de desempenho 13, o CDD especifica requisitos nestas áreas:

Mídia

  • Suporte a efeitos de granulação em decodificadores de hardware AV1
  • Perfil de referência do AVIF
  • Desempenho do codificador AV1
  • Codecs de vídeo HDR
  • Formato de cor RGBA_1010102
  • Amostra de textura YUV
  • Qualidade da codificação de vídeo
  • Mixagem de áudio multicanal

Câmera

  • Extensão do Modo noturno
  • Câmera principal compatível com HDR
  • Modo de cena da detecção facial

Genérico

  • Sobreposições de hardware
  • Tela HDR

Classe de desempenho 13

A classe de desempenho 13 baseia-se nos requisitos introduzidos na classe de desempenho 12. Confira os requisitos específicos da classe de desempenho no CDD do Android. Além do aumento dos requisitos para itens da classe de desempenho 12, o CDD especifica requisitos nestas áreas:

Mídia

  • Decodificador de hardware AV1
  • Decodificadores de hardware seguros
  • Latência de inicialização do decodificador
  • Latência de áudio de ida e volta
  • Fones de ouvido com fio e dispositivos de áudio USB
  • Dispositivos MIDI
  • Ambiente de execução confiável e protegido por hardware

Câmera

  • Estabilização da visualização
  • Gravação em câmera lenta
  • Proporção de zoom mínima para câmera Ultra grande angular
  • Câmera simultânea
  • Lógica com várias câmeras
  • Caso de uso de streaming

Classe de desempenho 12

A classe de desempenho 12 se concentra nos casos de uso de mídia. Confira os requisitos específicos da classe de desempenho no CDD do Android. Ele especifica os requisitos destas áreas:

Mídia

  • Sessões simultâneas de codec de vídeo
  • Latência de inicialização do codificador
  • Queda do frame do decodificador
  • Qualidade da codificação

Câmera

  • Resolução e frame rate
  • Latências de inicialização e captura
  • FULL ou um nível de hardware melhor
  • A origem do carimbo de data/hora está em tempo real
  • Recurso RAW

Genérico

  • Memória
  • Performance de leitura e gravação
  • Resolução da tela
  • Densidade da tela

Classe de desempenho 11

A classe de desempenho 11 inclui um subconjunto dos requisitos para a classe de desempenho 12, permitindo que os desenvolvedores ofereçam uma experiência personalizada em dispositivos anteriores, mas ainda altamente funcionais. Confira os requisitos específicos da classe de desempenho no CDD do Android.