Chromium mit V8 profilen
V8’s CPU- und Heap-Profiler sind einfach aus den V8-Shells heraus zu verwenden, aber es könnte verwirrend erscheinen, wie man sie mit Chromium nutzt. Diese Seite sollte Ihnen dabei helfen.
Warum ist die Verwendung der V8-Profiler mit Chromium anders als mit den V8-Shells?
Chromium ist eine komplexe Anwendung, im Gegensatz zu den V8-Shells. Unten finden Sie eine Liste von Chromium-Funktionen, die die Profiler-Nutzung beeinflussen:
- Jeder Renderer ist ein separater Prozess (okay, nicht tatsächlich jeder, aber lassen wir dieses Detail aus), daher können sie keine gemeinsamen Logdateien verwenden;
- Die Sandbox rund um den Renderer-Prozess verhindert, dass dieser auf eine Festplatte schreiben kann;
- Die Developer Tools konfigurieren die Profiler für ihre eigenen Zwecke;
- Der Logging-Code von V8 enthält einige Optimierungen, um die Überprüfung des Logging-Status zu vereinfachen.
Wie startet man Chromium, um ein CPU-Profil zu erhalten?
So können Sie Chromium starten, um ein CPU-Profil ab dem Start des Prozesses zu erhalten:
./Chromium --no-sandbox --user-data-dir=`mktemp -d` --incognito --js-flags='--prof'
Bitte beachten Sie, dass Sie keine Profile in den Developer Tools sehen werden, da alle Daten in einer Datei und nicht in den Developer Tools protokolliert werden.
Beschreibung der Flags
--no-sandbox
deaktiviert die Renderer-Sandbox, sodass Chrome in die Logdatei schreiben kann.
--user-data-dir
wird verwendet, um ein frisches Profil zu erstellen. Nutzen Sie dies, um Caches und potenzielle Nebeneffekte von installierten Erweiterungen zu vermeiden (optional).
--incognito
wird verwendet, um zusätzliche Verschmutzungen Ihrer Ergebnisse zu verhindern (optional).
--js-flags
enthält die an V8 übergebenen Flags:
--logfile=%t.log
legt ein Namensmuster für Logdateien fest.%t
wird in die aktuelle Zeit in Millisekunden umgewandelt, sodass jeder Prozess seine eigene Logdatei erhält. Sie können Präfixe und Suffixe verwenden, wenn Sie möchten, wie z. B.:prefix-%t-suffix.log
. Standardmäßig erhält jedes Isolat eine separate Logdatei.--prof
weist V8 an, statistische Profildaten in die Logdatei zu schreiben.
Android
Chrome auf Android hat einige einzigartige Aspekte, die das Profiling etwas komplexer machen.
- Die Befehlszeile muss über
adb
geschrieben werden, bevor Chrome auf dem Gerät gestartet wird. Dadurch gehen manchmal Anführungszeichen in der Befehlszeile verloren, und es ist am besten, Argumente in--js-flags
mit einem Komma zu trennen, anstatt Leerzeichen und Anführungszeichen zu verwenden. - Der Pfad für die Logdatei muss als absoluter Pfad angegeben werden, der auf dem Android-Dateisystem beschreibbar ist.
- Aufgrund der Sandbox für Renderer-Prozesse auf Android kann der Renderer-Prozess selbst mit
--no-sandbox
nicht auf das Dateisystem schreiben. Daher muss--single-process
angegeben werden, um den Renderer im selben Prozess wie den Browser-Prozess auszuführen. - Die
.so
-Datei ist in der APK von Chrome eingebettet, was bedeutet, dass die Symbolisierung von APK-Speicheradressen in die nicht entkleidete.so
-Datei in den Builds umgewandelt werden muss.
Die folgenden Befehle aktivieren das Profiling auf Android:
./build/android/adb_chrome_public_command_line --no-sandbox --single-process --js-flags='--logfile=/storage/emulated/0/Download/%t.log,--prof'
<Schließen und Neustarten von Chrome auf dem Android-Gerät>
adb pull /storage/emulated/0/Download/<logfile>
./src/v8/tools/linux-tick-processor --apk-embedded-library=out/Release/lib.unstripped/libchrome.so --preprocess <logfile>
Hinweise
Unter Windows sollten Sie sicherstellen, dass die Erstellung der .MAP
-Datei für chrome.dll
aktiviert ist, jedoch nicht für chrome.exe
.