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 le lecteur de trace Winscope en local.
Compiler Winscope en local
Pour configurer votre PC afin d'exécuter le traceur Winscope, procédez comme suit :
- Téléchargez la source Android.
Accédez au dossier Winscope :
cd development/tools/winscopeInstallez les dépendances à l'aide de la commande suivante :
npm installPour afficher la liste des commandes disponibles, exécutez :
npm runCompilez toutes les cibles de production et de test à l'aide de la commande suivante :
npm run build:prodExécutez Winscope à l'aide de :
npm run start
Créer des parties distinctes
Vous pouvez créer 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 d'outil à distance pour tester le protocole inter-outils. |
install:chromedriver |
Installe le pilote Chrome nécessaire à l'exécution des 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.
Pour mettre à jour le mappage @IntDef :
Compilez
:framework-minus-apex-intdefspour que le préprocesseur d'annotations s'exécute :mp :framework-minus-apex-intdefsCopiez le fichier
intDefMapping.jsongénéré dans le dépôt de composants précompilés :$ 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.jsonImportez 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. |
Dépannage
Suivez ces conseils de dépannage :
Erreur
ProtocolError: missing required '<FIELD>'ouTypeError: Cannot read property '<PROP>' of nullCela se produit lorsque le fichier de trace a été créé avec une nouvelle définition proto contenant de nouveaux champs obligatoires.
- Assurez-vous d'ouvrir la trace dans la bonne version de Winscope (master, S ou R).
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 (échec de la compilation)
- Rétablissez les modifications apportées à
package.jsonetpackage-lock.json. Supprimeznode_modules. Exécuteznpm installà nouveau.
- Rétablissez les modifications apportées à
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 n'apparaissent pas par défaut. Pour afficher les nouveaux champs, reconstruisez les protos à l'aide de
npm run build:protos.
- Winscope utilise les définitions proto à partir du moment où il a été compilé. Par conséquent, les nouveaux champs n'apparaissent pas par défaut. Pour afficher les nouveaux champs, reconstruisez les protos à l'aide de