La traccia Winscope fa parte del framework Android. Questa pagina descrive i passaggi necessari per scaricare, compilare ed eseguire il visualizzatore di tracce Winscope in locale.
Creare Winscope in locale
Per configurare il PC per l'esecuzione di Winscope Tracer:
- Scarica l'origine di Android.
Vai alla cartella Winscope:
cd development/tools/winscopeInstalla le dipendenze utilizzando:
npm installPer visualizzare un elenco dei comandi disponibili, esegui:
npm runCrea tutti i target di produzione e di test utilizzando:
npm run build:prodEsegui Winscope utilizzando:
npm run start
Creare parti separate
Puoi creare singole parti di Winscope separatamente utilizzando i seguenti comandi:
| Comando | Descrizione |
|---|---|
build:trace_processor |
Estrae e ricompila l'ultima versione ditrace_processor di Perfetto. |
build:protos |
Ricompila le definizioni proto. |
Eseguire i test
Winscope contiene test unitari ed end-to-end. Per eseguirli, utilizza npm run
<command>:
| Comando | Descrizione |
|---|---|
test:unit:ci |
Esegue i test unitari in un formato meno dettagliato per CI o per il presubmit hook. |
test:unit:dev |
Esegue i test delle unità in un formato più dettagliato per lo sviluppo locale. Questa modalità monitora le modifiche e riesegue automaticamente i test corretti. |
test:e2e |
Esegue i test end-to-end, ad esempio quelli per il protocollo cross-tool. |
test:presubmit:quiet |
Crea tutti i test unitari pre-invio, i linter e l'analisi del grafico in un formato meno dettagliato per CI o hook pre-invio. |
test:presubmit |
Crea tutti i test unitari pre-invio, i linter e l'analisi del grafico in un formato più dettagliato per lo sviluppo locale. |
test:all |
Esegue tutti i test (unità e end-to-end), i linter e l'analisi del grafico in un formato più dettagliato per lo sviluppo locale. |
Test end-to-end
Prima di eseguire i test end-to-end, devi avviare lo strumento remoto e installare la
versione corretta del driver Chrome. Nel seguente snippet di codice, il comando
run test:e2e installa automaticamente il driver di Chrome.
$ npm run start
$ npm run start:remote_tool_mock
$ npm run test:e2e
La tabella seguente elenca i comandi necessari e le relative descrizioni. Per eseguirli,
utilizza npm run command:
| Comando | Descrizione |
|---|---|
start:remote_tool_mock |
Avvia la simulazione dello strumento remoto per testare il protocollo tra strumenti. |
install:chromedriver |
Installa il driver di Chrome necessario per eseguire test end-to-end. |
Aggiorna la mappatura @IntDef
@IntDef è un'annotazione utilizzata in Android per limitare i possibili valori di un
numero intero. Winscope utilizza una mappatura di queste annotazioni per visualizzare il nome del
valore anziché l'intero.
Se vengono aggiunti nuovi valori @IntDef al framework Android ma non aggiornati in
Winscope, vengono visualizzati come valori interi non elaborati anziché come stringhe
descrittive. Per risolvere il problema, aggiorna il file di mapping IntDef
(development/tools/winscope/src/common/intDefMapping.json).
Per aggiornare automaticamente il mapping di @IntDef:
Esegui lo script
update_intdef_mappings.shdalla directorydevelopment/tools/winscope/scripts/nell'albero Android locale. Questo script attiva il processo di annotazione che estrae i valori@IntDefpiù recenti dal codice e aggiornaintDefMapping.json:cd development/tools/winscope ./scripts/update_intdef_mappings.shEsegui il commit delle modifiche a
src/common/intDefMapping.jsonutilizzando il comandogit commite caricale utilizzando il comandorepo upload.
Se lo script non è disponibile, segui questi passaggi per aggiornare manualmente il mapping di @IntDef
dalla directory principale di Android ($ANDROID_BUILD_TOP):
Crea
framework-minus-apex-intdefsper l'esecuzione del preprocessor delle annotazioni:m framework-minus-apex-intdefsCopia il file
intDefMapping.jsongenerato nel repository precompilati:$ 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.jsonCarica le modifiche in Winscope utilizzando
repo upload.
Altri comandi
Oltre alla compilazione e ai test, gli script Winscope contengono altre funzionalità, come
mostrato nella tabella. Per eseguirli, utilizza npm run command:
| Comando | Descrizione |
|---|---|
format:check |
Verifica la presenza di problemi di formattazione del codice utilizzando prettier. |
format:fix |
Controlla e corregge automaticamente i problemi di formattazione del codice utilizzando prettier. |
eslint:check |
Verifica la presenza di problemi di formattazione del codice utilizzando eslint. |
eslint:fix |
Controlla e corregge automaticamente i problemi di formattazione del codice utilizzando eslint. |
tslint:check |
Verifica la presenza di problemi di formattazione del codice utilizzando tslint. |
tslint:fix |
Controlla e corregge automaticamente i problemi di formattazione del codice utilizzando tslint. |
deps_graph:check_cycles |
Analizza il codice per rilevare dipendenze cicliche. |
Risoluzione dei problemi
Per la risoluzione dei problemi, segui questi suggerimenti:
Errore
ProtocolError: missing required '<FIELD>'oTypeError: Cannot read property '<PROP>' of nullCiò si verifica quando il file di traccia è stato creato con una nuova definizione proto, contenente nuovi campi obbligatori.
- Assicurati di aprire la traccia nella versione corretta di Winscope (master, S o R).
Se crei il nuovo campo nel proto, ricompila i proto in Winscope utilizzando
npm run build:protos.
Alcune versioni delle dipendenze installate non sono corrette (la build non riesce)
- Ripristina le modifiche a
package.jsonepackage-lock.json. Rimuovinode_modules. Esegui di nuovonpm install.
- Ripristina le modifiche a
Ho aggiunto un nuovo campo a uno dei file proto. Come faccio a visualizzarlo?
- Winscope utilizza le definizioni proto del momento della compilazione, quindi i nuovi
campi non vengono visualizzati per impostazione predefinita. Per visualizzare i nuovi campi, ricompila i proto
utilizzando
npm run build:protos.
- Winscope utilizza le definizioni proto del momento della compilazione, quindi i nuovi
campi non vengono visualizzati per impostazione predefinita. Per visualizzare i nuovi campi, ricompila i proto
utilizzando