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:
- Android-Quellcode herunterladen
Rufen Sie den Winscope-Ordner auf:
cd development/tools/winscopeInstallieren Sie die Abhängigkeiten mit folgendem Befehl:
npm installFühren Sie den folgenden Befehl aus, um eine Liste der verfügbaren Befehle aufzurufen:
npm runErstellen Sie alle Produktions- und Testziele mit folgendem Befehl:
npm run build:prodFü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 Perfetto trace_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 Presubmit-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. Verwenden Sie npm run command, um sie auszuführen:
| 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:
Erstellen Sie
:framework-minus-apex-intdefs, damit der Annotations-Vorprozessor ausgeführt werden kann:mp :framework-minus-apex-intdefsKopieren Sie die generierte Datei
intDefMapping.jsonin 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.jsonLaden Sie die Änderungen in Winscope mit
repo uploadhoch.
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 mit prettier. |
eslint:check |
Prüft mit eslint auf Probleme bei der Codeformatierung. |
eslint:fix |
Überprüft und behebt Probleme mit der Codeformatierung mit eslint. |
tslint:check |
Prüft mit tslint auf Probleme bei der Codeformatierung. |
tslint:fix |
Überprüft und behebt Probleme mit der Codeformatierung mit tslint. |
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>'oderTypeError: Cannot read property '<PROP>' of nullDieser Fehler tritt auf, wenn die Tracedatei mit einer neuen Proto-Definition erstellt wurde, die neue erforderliche Felder enthält.
- Achten Sie darauf, dass Sie den Trace in der richtigen Winscope-Version (Master, S oder R) öffnen.
Wenn Sie das neue Feld im Proto erstellen, kompilieren Sie die Protos in Winscope mit
npm run build:protosneu.
Einige installierte Abhängigkeitsversionen sind falsch (Build schlägt fehl)
- Machen Sie die Änderungen an
package.jsonundpackage-lock.jsonrückgängig. Entfernen Sienode_modules. Führen Sienpm installnoch einmal aus.
- Machen Sie die Änderungen an
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:protosneu.
- 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