Winscope ausführen

Winscope-Tracing ist Teil des Android-Frameworks. Auf dieser Seite wird beschrieben, wie Sie den Winscope-Trace-Viewer lokal herunterladen, erstellen und ausführen.

Winscope lokal erstellen

So richten Sie Ihren PC für die Ausführung des Winscope-Tracers ein:

  1. Android-Quellcode herunterladen
  2. Rufen Sie den Winscope-Ordner auf:

    cd development/tools/winscope
    
  3. Installieren Sie die Abhängigkeiten mit folgendem Befehl:

    npm install
    

    Führen Sie den folgenden Befehl aus, um eine Liste der verfügbaren Befehle aufzurufen: npm run

  4. Erstellen Sie alle Produktions- und Testziele mit folgendem Befehl:

    npm run build:prod
    
  5. Führen Sie Winscope mit folgendem Befehl aus:

    npm run start
    

Separate Teile erstellen

Mit den folgenden Befehlen können Sie einzelne Teile von Winscope separat erstellen:

Befehl Beschreibung
build:trace_processor Checkt die neueste Version von
Perfettotrace_processoraus und erstellt sie neu.
build:protos Kompiliert die Proto-Definitionen neu.

Tests ausführen

Winscope enthält Unit- und End-to-End-Tests. Verwenden Sie npm run <command>, um sie auszuführen:

Befehl Beschreibung
test:unit:ci Führt die Einheitentests in einem weniger ausführlichen Format für CI
oder den Vorabtest-Hook aus.
test:unit:dev Führt die Einheitentests in einem ausführlicheren Format für die lokale Entwicklung aus.
In diesem Modus wird auf Änderungen gewartet und
die richtigen Tests werden automatisch noch einmal ausgeführt.
test:e2e Führt die End-to-End-Tests aus, z. B. für das
-Protokoll für die toolübergreifende Zusammenarbeit.
test:presubmit:quiet Erstellt alle Vorabtest-Unit-Tests, Linter und die Graph
-Analyse in einem weniger ausführlichen Format für CI- oder Vorabtest-
-Hooks.
test:presubmit Erstellt alle Presubmit-Einheitentests, Linter und die Graph
-Analyse in einem ausführlicheren Format für die lokale
-Entwicklung.
test:all Führt alle Tests (Unit- und End-to-End-Tests), Linter und die
-Grafikanalyse in einem ausführlicheren Format für die lokale
-Entwicklung aus.

End-to-End-Tests

Bevor Sie End-to-End-Tests ausführen, müssen Sie das Remote-Tool starten und die richtige Version des Chrome-Treibers installieren. Im folgenden Code-Snippet wird der Chrome-Treiber mit dem Befehl run test:e2e automatisch installiert.

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

In der folgenden Tabelle sind die erforderlichen Befehle und ihre Beschreibungen aufgeführt. So führen Sie sie mit npm run command aus:

Befehl Beschreibung
start:remote_tool_mock Startet den Mock für das Remote-Tool zum Testen des Tool-übergreifenden Protokolls.
install:chromedriver Installiert den Chrome-Treiber, der zum Ausführen von End-to-End-Tests erforderlich ist.

@IntDef-Zuordnung aktualisieren

@IntDef ist eine Annotation, die in Android verwendet wird, um die möglichen Werte einer Ganzzahl einzuschränken. Winscope verwendet eine Zuordnung dieser Anmerkungen, um anstelle der Ganzzahl den Namen des Werts anzuzeigen.

So aktualisieren Sie die @IntDef-Zuordnung:

  1. Erstellen Sie :framework-minus-apex-intdefs, damit der Annotations-Vorprozessor ausgeführt werden kann:

    mp :framework-minus-apex-intdefs
    
  2. Kopieren Sie die generierte Datei intDefMapping.json in das Prebuilts-Repository:

    $ 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. Laden Sie die Änderungen in Winscope mit repo upload hoch.

Weitere Befehle

Neben Build- und Testfunktionen enthalten Winscope-Skripts auch andere Funktionen, wie in der Tabelle dargestellt. Verwenden Sie npm run command, um sie auszuführen:

Befehl Beschreibung
format:check Prüft mit prettier auf Probleme bei der Codeformatierung.
format:fix Überprüft und behebt Probleme mit der Codeformatierung mithilfe von prettier automatisch.
eslint:check Prüft mit eslint auf Probleme bei der Codeformatierung.
eslint:fix Überprüft und behebt Probleme mit der Codeformatierung mithilfe von eslint automatisch.
tslint:check Prüft mit tslint auf Probleme bei der Codeformatierung.
tslint:fix Überprüft und behebt Probleme mit der Codeformatierung mithilfe von tslint automatisch.
deps_graph:check_cycles Analysiert den Code auf zyklische Abhängigkeiten.

Fehlerbehebung

Folgende Tipps können bei der Fehlerbehebung hilfreich sein:

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

    • Dieser Fehler tritt auf, wenn die Tracedatei mit einer neuen Proto-Definition erstellt wurde, die neue erforderliche Felder enthält.

      1. Achten Sie darauf, dass Sie den Trace in der richtigen Winscope-Version (Master, S oder R) öffnen.
      2. Wenn Sie das neue Feld im Proto erstellen, kompilieren Sie die Protos in Winscope mit npm run build:protos neu.

  • Einige installierte Abhängigkeitsversionen sind falsch (Build schlägt fehl)

    • Machen Sie die Änderungen an package.json und package-lock.json rückgängig. Entfernen Sie node_modules. Führen Sie npm install noch einmal aus.
  • Ich habe einer der Proto-Dateien ein neues Feld hinzugefügt. Wie wird sie angezeigt?

    • Winscope verwendet die Proto-Definitionen aus der Kompilierungszeit. Neue Felder werden daher nicht standardmäßig angezeigt. Wenn Sie neue Felder anzeigen möchten, erstellen Sie die Protos mit npm run build:protos neu.