Esegui Winscope

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:

  1. Scarica l'origine di Android.
  2. Vai alla cartella Winscope:

    cd development/tools/winscope
    
  3. Installa le dipendenze utilizzando:

    npm install
    

    Per visualizzare un elenco dei comandi disponibili, esegui: npm run

  4. Crea tutti i target di produzione e di test utilizzando:

    npm run build:prod
    
  5. Esegui 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 di
trace_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:

  1. Esegui lo script update_intdef_mappings.sh dalla directory development/tools/winscope/scripts/ nell'albero Android locale. Questo script attiva il processo di annotazione che estrae i valori @IntDef più recenti dal codice e aggiorna intDefMapping.json:

    cd development/tools/winscope
    ./scripts/update_intdef_mappings.sh
    
  2. Esegui il commit delle modifiche a src/common/intDefMapping.json utilizzando il comando git commit e caricale utilizzando il comando repo upload.

Se lo script non è disponibile, segui questi passaggi per aggiornare manualmente il mapping di @IntDef dalla directory principale di Android ($ANDROID_BUILD_TOP):

  1. Crea framework-minus-apex-intdefs per l'esecuzione del preprocessor delle annotazioni:

    m framework-minus-apex-intdefs
    
  2. Copia il file intDefMapping.json generato 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.json
    
  3. Carica 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>' o TypeError: Cannot read property '<PROP>' of null

    • Ciò si verifica quando il file di traccia è stato creato con una nuova definizione proto, contenente nuovi campi obbligatori.

      1. Assicurati di aprire la traccia nella versione corretta di Winscope (master, S o R).
      2. 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.json e package-lock.json. Rimuovi node_modules. Esegui di nuovo npm install.
  • 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.