Classe de performance

La classe de performance est un standard introduit dans Android 12. Elle définit un ensemble de fonctionnalités de l'appareil qui va au-delà des exigences de base d'Android.

Chaque version d'Android dispose de sa propre classe de performance, qui est définie dans le document de définition de compatibilité (CDD) Android. L'outil Compatibility Test Suite (CTS) Android vérifie les exigences liées au CDD.

Chaque appareil Android déclare la classe de performance prise en charge. Les développeurs peuvent découvrir la classe de performance de l'appareil au moment de l'exécution et proposer des expériences améliorées qui exploitent pleinement ses fonctionnalités.

Pour découvrir le niveau de performance d'un appareil, utilisez la bibliothèque Jetpack Core Performance. Cette bibliothèque indique la classe de performance multimédia de l'appareil telle qu'indiquée dans les informations sur la version de build ou en fonction des données des services Google Play.

Commencez par ajouter une dépendance pour les modules pertinents dans votre fichier 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-beta02")
// Enable APIs to query Google Play Services for performance class.
implementation("androidx.core:core-performance-play-services:1.0.0-beta02")

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-beta02'
// Enable APIs to query Google Play Services for performance class.
implementation 'androidx.core:core-performance-play-services:1.0.0-beta02'

Ensuite, créez une instance d'une implémentation DevicePerformance, telle que PlayServicesDevicePerformance, dans l'événement de cycle de vie onCreate() de votre Application : Cette opération ne doit être effectuée qu'une seule fois dans votre application.

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

Vous pouvez ensuite récupérer la propriété mediaPerformanceClass pour personnaliser l'expérience de votre application selon les fonctionnalités de l'appareil :

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

Les classes de performances sont rétrocompatibles. Un appareil peut passer à une version plus récente sans mettre à jour sa classe de performance. Par exemple, un appareil qui est initialement compatible avec la classe de performance 12 peut passer à Android 13 et continuer à signaler qu'il accepte la classe 12 s'il ne répond pas aux exigences de la classe 13. Une classe de performance permet donc de regrouper des appareils sans dépendre d'une version spécifique d'Android.

Figure 1. Les appareils peuvent mettre à niveau leur version d'Android et continuer à signaler qu'ils prennent en charge la classe qu'ils prenaient en charge à l'origine.

Classe de performance 14

La classe de performance 14 s'appuie sur les exigences de la classe de performance 13. Les exigences spécifiques de la classe de performance sont publiées dans le CDD Android. En plus des exigences accrues liées aux éléments de la classe de performance 13, le CDD spécifie de nouvelles exigences dans les domaines suivants :

Multimédia

  • Prise en charge de l'effet film grain dans les décodeurs matériels AV1
  • Profil de référence AVIF
  • Performances de l'encodeur AV1
  • Codecs vidéo HDR
  • Format de couleurs RGBA_1010102
  • Échantillonnage de texture YUV
  • Qualité d'encodage vidéo
  • Mélangeur audio multicanal

Appareil photo

  • Extension mode Nuit
  • Appareil photo principal compatible HDR
  • Mode Scène avec détection des visages

Générique

  • Superpositions matérielles
  • Écran HDR

Classe de performance 13

La classe de performance 13 s'appuie sur les exigences de la classe de performance 12. Les exigences spécifiques de la classe de performance sont publiées dans le CDD Android. En plus des exigences accrues liées aux éléments de la classe de performance 12, le CDD spécifie de nouvelles exigences dans les domaines suivants :

Multimédia

  • Décodeur matériel AV1
  • Décodeurs matériels sécurisés
  • Latence d'initialisation du décodeur
  • Latence audio aller-retour
  • Casques filaires et périphériques audio USB
  • Appareils MIDI
  • Environnement d'exécution sécurisé basé sur le matériel

Appareil photo

  • Stabilisation de l'aperçu
  • Enregistrement au ralenti
  • Taux de zoom minimal pour les caméras ultra grand angle
  • Caméra simultanée
  • Multicaméra logique
  • Cas d'utilisation des flux

Classe de performance 12

La classe de performance 12 est axée sur les cas d'utilisation multimédia. Les exigences spécifiques de la classe de performance sont publiées dans le CDD Android. Le CDD spécifie les exigences dans les domaines suivants :

Multimédia

  • Sessions simultanées de codec vidéo
  • Latence d'initialisation de l'encodeur
  • Abandons de trame du décodeur
  • Qualité d'encodage

Appareil photo

  • Résolution et fréquence d'images
  • Latences de démarrage et de capture
  • FULL ou niveau de matériel supérieur
  • Source d'horodatage en temps réel
  • Capacité RAW

Générique

  • Mémoire
  • Performances de lecture et d'écriture
  • Résolution d'écran
  • Densité d'écran

Classe de performance 11

La classe de performance 11 comprend un sous-ensemble des exigences de la classe de performance 12 et permet aux développeurs d'offrir une expérience personnalisée sur des appareils anciens, mais toujours hautement performants. Les exigences spécifiques de la classe de performance sont publiées dans le CDD Android.