Exécuter Winscope

Le traçage Winscope fait partie du framework Android. Cette page décrit les étapes nécessaires pour télécharger, compiler et exécuter localement le visualiseur de traces Winscope.

Compiler Winscope en local

Suivez ces étapes pour configurer votre PC afin d'exécuter le traceur Winscope :

  1. Téléchargez la source Android.
  2. Accédez au dossier Winscope :

    cd development/tools/winscope
    
  3. Installez les dépendances à l'aide de la commande suivante :

    npm install
    

    Pour afficher la liste des commandes disponibles, exécutez : npm run

  4. Compilez toutes les cibles de production et de test à l'aide de la commande suivante :

    npm run build:prod
    
  5. Exécutez Winscope à l'aide de la commande suivante :

    npm run start
    

Créer des parties distinctes

Vous pouvez compiler des parties individuelles de Winscope séparément à l'aide des commandes suivantes :

Commande Description
build:trace_processor Extrait et recompile la dernière version du
 trace_processor de Perfetto.
build:protos Recompile les définitions proto.

Exécuter des tests

Winscope contient des tests unitaires et de bout en bout. Pour les exécuter, utilisez npm run <command> :

Commande Description
test:unit:ci Exécute les tests unitaires dans un format moins verbeux pour le hook CI
ou de pré-commit.
test:unit:dev Exécute les tests unitaires dans un format plus détaillé pour le développement local.
Ce mode surveille les modifications et réexécute automatiquement les tests appropriés.
test:e2e Exécute les tests de bout en bout, tels que ceux du protocole inter-outils.
test:presubmit:quiet Compile tous les tests unitaires de pré-commit, les lints et les analyses de graphiques
dans un format moins verbeux pour le hook CI ou de pré-commit.
test:presubmit Compile tous les tests unitaires de pré-commit, les lints et les analyses de graphiques
dans un format plus détaillé pour le développement local.
test:all Exécute tous les tests (unitaires et de bout en bout), les lints et les analyses de graphiques
dans un format plus détaillé pour le développement
local.

Tests de bout en bout

Avant d'exécuter des tests de bout en bout, vous devez démarrer l'outil à distance et installer la version appropriée du pilote Chrome. Dans l'extrait de code suivant, la commande run test:e2e installe automatiquement le pilote Chrome.

$ npm run start
$ npm run start:remote_tool_mock
$ npm run test:e2e

Le tableau suivant répertorie les commandes nécessaires et leur description. Pour les exécuter , utilisez npm run command :

Commande Description
start:remote_tool_mock Démarre la simulation de l'outil à distance pour tester le protocole inter-outils.
install:chromedriver Installe le pilote Chrome nécessaire pour exécuter les tests de bout en bout.

Mettre à jour le mappage @IntDef

@IntDef est une annotation utilisée dans Android pour limiter les valeurs possibles d'un entier. Winscope utilise un mappage de ces annotations pour afficher le nom de la valeur au lieu de l'entier.

Si de nouvelles valeurs @IntDef sont ajoutées au framework Android, mais ne sont pas mises à jour dans Winscope, elles s'affichent sous forme de valeurs entières brutes au lieu de chaînes descriptives. Pour résoudre ce problème, mettez à jour le fichier de mappage IntDef (development/tools/winscope/src/common/intDefMapping.json).

Pour mettre à jour automatiquement le mappage @IntDef, procédez comme suit :

  1. Exécutez le script update_intdef_mappings.sh à partir du répertoire development/tools/winscope/scripts/ dans votre arborescence Android locale. Ce script déclenche le processus d'annotation qui extrait les dernières valeurs @IntDef du code et met à jour intDefMapping.json :

    cd development/tools/winscope
    ./scripts/update_intdef_mappings.sh
    
  2. Validez les modifications apportées à src/common/intDefMapping.json à l'aide de la commande git commit, puis importez-les à l'aide de la commande repo upload.

Si le script n'est pas disponible, procédez comme suit pour mettre à jour manuellement le mappage @IntDef à partir de votre répertoire racine Android ($ANDROID_BUILD_TOP) :

  1. Compilez framework-minus-apex-intdefs pour que le préprocesseur d'annotations s'exécute :

    m framework-minus-apex-intdefs
    
  2. Copiez le fichier intDefMapping.json généré dans le dépôt prebuilts :

    $ python3 -c 'import sys,json,collections; print(json.dumps(collections.OrderedDict(sorted(collections.ChainMap(*map(lambda x:json.load(open(x)), sys.argv[1:])).items())), indent=2))' $(find out/soong/.intermediates/frameworks/base -iname intDefMapping.json) > ./development/tools/winscope/src/common/intDefMapping.json
    
  3. Importez les modifications dans Winscope à l'aide de repo upload.

Autres commandes

En plus de la compilation et des tests, les scripts Winscope contiennent d'autres fonctionnalités, comme indiqué dans le tableau. Pour les exécuter, utilisez npm run command :

Commande Description
format:check Recherche les problèmes de mise en forme du code à l'aide de prettier.
format:fix Vérifie et corrige automatiquement les problèmes de mise en forme du code à l'aide de prettier.
eslint:check Recherche les problèmes de mise en forme du code à l'aide de eslint.
eslint:fix Vérifie et corrige automatiquement les problèmes de mise en forme du code à l'aide de eslint.
tslint:check Recherche les problèmes de mise en forme du code à l'aide de tslint.
tslint:fix Vérifie et corrige automatiquement les problèmes de mise en forme du code à l'aide de tslint.
deps_graph:check_cycles Analyse le code pour détecter les dépendances cycliques.

Résoudre les problèmes

Suivez ces conseils pour résoudre les problèmes :

  • Erreur ProtocolError: missing required '<FIELD>' ou TypeError: Cannot read property '<PROP>' of null

    • Cela se produit lorsque le fichier de trace a été créé avec une nouvelle définition proto contenant de nouveaux champs obligatoires.

      1. Assurez-vous d'ouvrir la trace dans la bonne version de Winscope (master, S ou R).
      2. Si vous créez le nouveau champ sur le proto, recompilez les protos dans Winscope à l'aide de npm run build:protos.

  • Certaines versions de dépendances installées sont incorrectes (la compilation échoue)

    • Rétablissez les modifications apportées à package.json et package-lock.json. Supprimez node_modules. Exécutez npm install à nouveau.
  • J'ai ajouté un champ à l'un des fichiers proto. Comment l'afficher ?

    • Winscope utilise les définitions proto à partir du moment où il a été compilé. Par conséquent, les nouveaux champs ne s'affichent pas par défaut. Pour afficher les nouveaux champs, recompilez les protos à l'aide de npm run build:protos.