Systrace — qu’est-ce que c’est, outil de traçage système Android

Auteur : IT Sectr Publié le : 2026-03-31 Temps de lecture : 9 min

Systrace est un outil de traçage système Android qui collecte des données sur le noyau Linux, le CPU, le GPU et tous les processus système sur une courte période. Contrairement à Traceview, qui se concentre sur les méthodes au sein de l’application, Systrace montre l’image système : charge de chaque cœur de CPU, fonctionnement de SurfaceFlinger, appels Binder et cycles GC. Selon Google, 2024, l’outil est indispensable pour diagnostiquer les images perdues, les collectes de déchets fréquentes et les anomalies dans le thread UI.

Points clés

  • Systrace — un outil de traçage système bas niveau pour Android, fonctionnant via atrace/ftrace
  • Les traces contiennent des données CPU, GPU, threads, SurfaceFlinger et Binder pour une période allant jusqu’à 60 secondes
  • L’analyse permet de voir la cause exacte des images perdues et des blocages du thread UI
  • Intégration avec Android Studio et la ligne de commande pour une capture flexible et l’automatisation
  • Perfetto — le successeur de Systrace sur Android 12+, utilisant un format protobuf commun

Qu’est-ce que Systrace

Systrace est un utilitaire en ligne de commande du SDK Android qui capture et fusionne les données de plusieurs sources de traçage du noyau (ftrace) et de l’espace utilisateur (atrace) en un seul rapport HTML. L’outil est apparu dans Android 4.1 (Jelly Bean) en remplacement de l’ancien utilitaire traceview pour le profilage système et est resté longtemps l’outil standard de diagnostic des performances sur la plateforme Android.

Architecture de Systrace

Systrace repose sur ftrace — un mécanisme de traçage du noyau Linux disponible dans Android depuis la version 4.1. Au démarrage de Systrace, il active les catégories de trace spécifiées : sched (planificateur de tâches), freq (fréquence CPU), idle (états inactifs), workq (files d’attente de travail), binder, gfx et autres. Les données sont collectées dans le tampon circulaire du noyau et, après l’arrêt, fusionnées en un seul fichier trace.html pouvant être ouvert dans n’importe quel navigateur.

Systrace dans le contexte d’Android Studio

À partir d’Android Studio 3.1, Systrace est intégré au CPU Profiler. En mode « Trace System Calls », le profileur lance Systrace sur l’appareil connecté et affiche les résultats directement dans la fenêtre d’Android Studio. Cela élimine la nécessité de travailler avec la ligne de commande pour les cas de base tout en conservant toutes les fonctionnalités — toutes les catégories de trace, le filtrage et la chronologie interactive. Les performances de l’appareil pendant le traçage diminuent de manière insignifiante car ftrace est conçu pour une surcharge minimale.

Comment fonctionne Systrace

Systrace utilise deux mécanismes de collecte de données : ftrace au niveau du noyau pour les événements système et atrace dans l’espace utilisateur pour les marqueurs spécifiques à Android. ftrace enregistre les changements de contexte (sched_switch), les changements de fréquence CPU (cpu_frequency), les interruptions (irq_handler_entry) et d’autres événements. atrace ajoute des marqueurs du framework Android — le début et la fin du rendu des images, les appels SurfaceFlinger et les transactions Binder.

Pipeline de rendu des images dans Systrace

La fonctionnalité clé de Systrace est la visualisation du pipeline de rendu de chaque image : application → BufferQueue → SurfaceFlinger → HWC (compositeur) → Écran. Si un retard survient à une étape, Systrace montre la cause exacte : l’application n’a pas préparé le tampon à temps, SurfaceFlinger attendait VSync ou HWC n’a pas pu composer les couches. Le cycle de vie de l’image sur la chronologie est codé par couleur selon le statut : vert (à temps), jaune (retardé), rouge (perdu). Cette visualisation est l’outil principal pour optimiser les performances de l’interface utilisateur.

Catégories de trace

Systrace prend en charge plus de 20 catégories de trace, chacune comprenant un ensemble d’événements associés. Les catégories importantes incluent : gfx (rendu graphique), input (traitement des entrées), view (système View), webview (WebView), power (consommation énergétique), hal (couche d’abstraction matérielle). Pour le profilage de jeux, la catégorie gfx avec les détails des commandes GPU via AGI (Android GPU Inspector) est utile.

Fonctionnalités clés de Systrace

Systrace offre un ensemble unique de capacités pour Android qui ne sont pas disponibles dans d’autres profileurs : chronologie système, métriques au niveau du noyau et détection automatique des problèmes.

Chronologie interactive

Le rapport HTML de Systrace contient une chronologie multicouche où chaque voie correspond à un processus ou un thread. Vous pouvez zoomer avant et arrière sur l’échelle de temps, cliquer sur les événements pour voir les détails (durée, processus initiateur, arguments supplémentaires). Le codage couleur facilite la navigation rapide : blocs verts — processus en cours, bleus — en attente, oranges — interruption, blancs — inactif.

Messages d’alerte

Systrace analyse automatiquement la trace et affiche des messages d’alerte indiquant les zones problématiques. Par exemple : « Buffer underrun — SurfaceFlinger n’a pas reçu le tampon avant VSync » ou « Long Binder transaction — 42 ms dans le thread Binder_1 ». Chaque alerte contient un lien vers la section correspondante de la chronologie et une recommandation de correction. Cela économise des heures d’analyse manuelle et est l’une des principales raisons d’utiliser Systrace plutôt que la journalisation manuelle.

Méthode Trace.beginSection

Les développeurs peuvent ajouter des marqueurs personnalisés à la trace Systrace via l’API Trace.beginSection et Trace.endSection. Cela permet de suivre l’exécution de sections de code critiques directement sur la chronologie système — par exemple, marquer le début et la fin du chargement de données ou du calcul de mise en page. Les marqueurs apparaissent comme des blocs séparés sur la voie de l’application et sont visibles aux côtés des événements système.

CatégorieDonnéesUtilisation typique
schedChangements de contexte, états inactifsBlocages de thread, contention
gfxVSync, préparation du tampon, HWCChutes d’images, jank
binderTransactions Binder, latenceRetards IPC, appels distants
freqFréquence CPU, gouverneur d’échelleThrottling, consommation énergétique
gfx + AGICommandes GPU, shadersPerformances de jeu

Comment exécuter Systrace

L’exécution de Systrace est possible de deux manières : via le CPU Profiler d’Android Studio (mode « Trace System Calls ») ou via la ligne de commande à l’aide du script Python systrace.py du dossier platform-tools. Chaque méthode a ses propres cas d’utilisation.

Exécution via Android Studio

Connectez l’appareil, ouvrez le Profiler (View → Tool Windows → Profiler), sélectionnez votre processus, allez dans l’onglet CPU, sélectionnez le mode « Trace System Calls » et cliquez sur Record. Après 5–30 secondes, cliquez sur Stop — Android Studio lancera Systrace sur l’appareil, attendra la fin et chargera le résultat. Limitation : l’enregistrement n’est possible que lorsque le Profiler est ouvert, ce qui est peu pratique pour les scénarios longs ou l’automatisation.

Exécution à partir de la ligne de commande

Pour un contrôle plus flexible, utilisez le script systrace.py. Spécifiez les catégories de trace, la durée et le nom du fichier de sortie. Exemple : capture des données gfx, input et sched pendant 10 secondes. L’exécution nécessite Python 2.7+ et un appareil connecté avec le débogage USB activé. Sur Android 12+, Systrace est remplacé par Perfetto — la commande reste la même, mais le script redirige les appels vers perfetto.

bash
# Exécution de base de systrace pendant 10 secondes
$ python systrace.py \
    --time=10 \
    -o trace.html \
    gfx input sched

# Catégorie gfx uniquement pour l’analyse UI
$ python systrace.py \
    --time=5 \
    -t gfx \
    -o ui_trace.html

Configuration de marqueurs personnalisés dans le code

Pour que votre code apparaisse sur la chronologie Systrace, encadrez la section critique avec Trace.beginSection / Trace.endSection. Il est important que beginSection et endSection soient strictement appariés — sinon Systrace affichera une chronologie incorrecte. En Kotlin, il est pratique d’utiliser une extension inline pour garantir la fermeture de la section même en cas d’exception.

kotlin
import android.os.Trace

fun traceSection(name: String, block: () -> Unit) {
    Trace.beginSection(name)
    try {
        block()
    } finally {
        Trace.endSection()
    }
}

// Utilisation dans le code
traceSection("load_screen_data") {
    fetchData()
    updateUI()
}

Lecture du rapport HTML de Systrace

Le rapport Systrace est un fichier HTML autonome qui peut être ouvert dans Chrome, Edge ou Firefox. Il contient une chronologie interactive, un panneau de sélection de processus, une liste de messages d’alerte et des métriques clés (taux d’images, utilisation CPU, transactions Binder). Comprendre la structure du rapport est une compétence clé pour un profilage efficace.

Chronologie et navigation

La chronologie affiche le temps de gauche à droite. Chaque processus et thread est une voie séparée. Les touches W/S permettent de zoomer avant/arrière, A/D de se déplacer dans le temps. Sélectionnez une zone avec la souris pour zoomer sur une section. Les lignes VSync montrent les limites des images (toutes les 16,6 ms à 60 FPS). Si un cycle de rendu complet ne tient pas entre deux lignes VSync — l’image est perdue. Faites attention à la voie SurfaceFlinger : si elle est occupée longtemps (bloc orange), la composition des couches ralentit le rendu global.

Analyse des messages d’alerte

Le panneau Alertes sur le côté gauche du rapport contient les problèmes détectés automatiquement. Chaque alerte est cliquable — en cliquant, la chronologie se déplace vers le moment problématique. Les alertes les plus courantes : « Long Sync » (synchronisation longue de thread), « Scheduling Delay » (retard du planificateur), « Buffer Overrun » (débordement du tampon SurfaceFlinger). Si une alerte affiche une valeur d’environ 100 ms pour Scheduling Delay, cela indique directement que le thread UI attendait le CPU en raison d’une charge de fond — les calculs lourds doivent être déplacés vers un Worker Thread.

Cycle de vie des images et jank

Pour analyser les images perdues, activez les voies SurfaceFlinger et app.gfx. Chaque image est affichée sous forme de rectangle : vert (≤16 ms), jaune (16–32 ms), rouge (>32 ms). Si vous voyez un rectangle rouge sur la voie de l’application, cliquez dessus — Systrace montrera quelle méthode spécifique (ou appel système) a dépassé la limite. Selon Google (Android Performance Patterns, 2023), 70 % des problèmes de jank sont causés par un onBindViewHolder lent ou un GC fréquent.

Systrace vs Perfetto : transition vers le nouveau format

Perfetto est le successeur de Systrace, introduit par Google dans Android 9 (Pie) en tant qu’outil expérimental et devenu la solution principale à partir d’Android 12. Perfetto utilise un format de données protobuf moderne, prend en charge les longues sessions (des heures au lieu de secondes) et dispose d’une interface Web pour visualiser les traces. Examinons les principales différences entre les deux systèmes.

CritèreSystracePerfetto
FormatRapport HTML (trace.html)Protobuf (.trace / .perfetto-trace)
DuréeJusqu’à 60 secondesHeures, gigaoctets de données
InterfaceHTML intégréInterface Web (ui.perfetto.dev)
CatégoriesFixes (ftrace + atrace)Extensibles (requêtes SQL sur la trace)
MobilitéAndroid uniquementAndroid, Linux, Chrome, Windows

Malgré la transition vers Perfetto, les compétences en Systrace restent pertinentes : sur les appareils fonctionnant sous Android 11 et inférieur, il est utilisé par défaut, et Perfetto maintient une compatibilité ascendante avec les catégories Systrace. Dans le CPU Profiler d’Android Studio, Perfetto est utilisé pour les nouveaux appareils et Systrace pour les anciens — de manière transparente pour l’utilisateur. Pour CI/CD, Perfetto est recommandé car son format peut être automatiquement traité via Python et SQL.

Exemples d’utilisation de Systrace

Pour maîtriser pratiquement Systrace, considérons deux scénarios : trouver la cause des images perdues lors du défilement et diagnostiquer les GC fréquents qui bloquent le thread UI.

Recherche de jank lors du défilement RecyclerView

Exécutez Systrace avec la catégorie gfx pendant 10 secondes, faites défiler la liste dans l’application. Dans le rapport, trouvez les sections avec des images rouges. Cliquez sur l’image problématique et regardez la voie de l’application — s’il y a un bloc « inflateLayout » ou « onBindViewHolder » de plus de 16 ms, le problème vient du gonflage de la mise en page ou de la liaison de données. Solution : optimisez la mise en page (réduisez les ViewGroup profonds, ViewStub), déchargez le chargement d’images vers Glide avec onAttachedToWindow.

Diagnostic du débit GC

Systrace avec les catégories freq et sched permet de voir à quelle fréquence les cycles GC préemptent le thread UI. Trouvez la voie de l’application sur la chronologie — si vous voyez des blocs périodiques de 20–50 ms nommés « Concurrent GC », le ramasse-miettes s’exécute trop fréquemment. Ajoutez la catégorie « dalvik » pour une analyse détaillée. Solution : convertissez Bitmap en ByteBuffer, utilisez un pool d’objets (ObjectPool) pour les allocations fréquentes, réduisez la fragmentation du tas via les arguments ART.

bash
# Exécution avec catégories pour analyse UI + GC
$ python systrace.py \
    --time=15 \
    -o gc_analysis.html \
    gfx sched dalvik freq

# Capture avec durée de 30 secondes pour test reproductible
$ python systrace.py \
    --time=30 \
    --app=com.example.app \
    -o app_trace.html

Questions fréquentes

Peut-on exécuter Systrace sans droits root ?

Oui, l’exécution de Systrace ne nécessite pas d’accès root. L’outil utilise atrace, disponible sur tout appareil avec le débogage USB activé. Certaines catégories (power, freq) peuvent nécessiter une signature système, mais les principales (gfx, sched, input) fonctionnent sur tous les appareils.

Quelle est la taille maximale du fichier de trace ?

La limite de 60 secondes est liée à la capacité du tampon circulaire ftrace — lors d’un enregistrement long, le tampon est écrasé. Perfetto supprime cette limitation : vous pouvez enregistrer pendant des heures et obtenir des traces allant jusqu’à plusieurs gigaoctets via un transfert USB ou un streaming sur disque.

Pourquoi les données de mon application n’apparaissent-elles pas dans le rapport HTML ?

Causes possibles : l’application n’est pas en mode débogable, le flag android:debuggable=« true » n’est pas défini dans le manifeste, ou une version release est utilisée. Vérifiez également que vous avez spécifié --app=com.example.app dans les catégories — sinon Systrace ne capture que les processus système.

Comment ajouter un marqueur personnalisé à Systrace depuis du code natif ?

Pour C++, utilisez ATRACE_BEGIN et ATRACE_END de la bibliothèque libcutils. Incluez le fichier d’en-tête et encadrez la section souhaitée. Le marqueur apparaîtra dans Systrace sur la voie de votre processus, ce qui est particulièrement utile pour analyser les moteurs de jeu (Unity, Unreal).

Que utiliser à la place de Systrace sur Android 12+ ?

Sur Android 12 et supérieur, utilisez Perfetto. Installez l’agent perfetto sur l’appareil via ADB, lancez l’enregistrement au format JSON. Pour une visualisation rapide, utilisez l’interface Web de Perfetto (ui.perfetto.dev), et pour CI — l’export en ligne de commande avec TraceProcessor en Python.

Résumé

  • Systrace — un traceur système Android fonctionnant au niveau du noyau via ftrace et atrace
  • Affiche la charge CPU, GPU, SurfaceFlinger et les transactions Binder sur une chronologie unifiée
  • Le rapport HTML contient des messages d’alerte automatiques avec identification des problèmes et recommandations
  • Lancement via Android Studio Profiler ou ligne de commande avec systrace.py
  • Le thread UI est critique : chaque image doit tenir dans 16,6 ms pour 60 FPS
  • Sur Android 12+, Systrace est remplacé par Perfetto avec prise en charge des longues sessions et des requêtes SQL
  • Il est recommandé de combiner Systrace et Traceview pour le profilage système + application

Nous développerons une application mobile clé en main

IT Sectr crée des applications iOS et Android pour les startups et les entreprises depuis 2017. Nous vous conseillerons et vous proposerons la meilleure solution.

Discuter du projet

Lisez aussi