V8 による Chromium のプロファイル
V8 の CPU とヒーププロファイラ は V8 シェルからは簡単に使用できますが、Chromium では使用方法がわかりにくい場合があります。このページは、お手伝いするためにあります。
なぜ V8 のプロファイラを Chromium で使用する場合と V8 シェルで使用する場合は異なるのですか? #
Chromium は V8 シェルとは異なり、複雑なアプリケーションです。プロファイラ使用に影響を与える Chromium 機能を以下に示します。
- 各レンダラーは別々のプロセスです (実際にはそれぞれではありませんが、この詳細を省略しましょう) つまり、同じログファイルを共有することはできません。
- レンダラープロセスの周围に構築されたサンドボックスにより、ディスクへの書き込みができなくなります。
- 開発者ツールは、自身の目的のためにプロファイラを構成します。
- V8 のロギングコードには、ロギング状態のチェックを簡略化するために最適化がいくつか含まれています。
CPU プロファイルを取得するために Chromium を実行する方法 #
プロセスの開始から CPU プロファイルを取得するために Chromium を実行する方法を以下に示します。
./Chromium --no-sandbox --user-data-dir=`mktemp -d` --incognito --js-flags='--prof'
すべてのデータが開発者ツールではなくファイルに記録されるので、開発者ツールにプロファイルが表示されないことに注意してください。
フラグの説明 #
--no-sandbox
はレンダラーのサンドボックスを無効にして、chrome がログファイルに書き込めるようにします。
--user-data-dir
は新しいプロファイルを作成するために使用され、インストールされた拡張機能からキャッシュや潜在的な副作用を回避するために使用します (オプション)。
--incognito
は、結果の汚染をさらに防ぐために使用されます (オプション)。
--js-flags
には V8 に渡されるフラグが含まれています。
--logfile=%t.log
はログファイルの名前パターンを指定します。%t
は現在のミリ秒数に展開されるため、各プロセスは独自のログファイルを取得します。次のように、プレフィックスとサフィックスを使用することもできます。prefix-%t-suffix.log
。既定では、各アイソレートは別々のログファイルを取得します。--prof
は V8 に統計的なプロファイリング情報をログファイルに書き込むように指示します。
Android #
Android の Chrome には、プロファイルを作成するのを少し複雑にするいくつかの独自のポイントがあります。
- コマンドラインは、デバイスで Chrome を起動する前に
adb
を介して記述する必要があります。その結果、コマンドライン内の引用符が失われることがあり、空白と引用符を使用するのではなく、--js-flags
の引数をコンマで区切ることをお勧めします。 - ログファイルのパスは、Android ファイルシステムで書き込み可能な場所への絶対パスとして指定する必要があります。
- Android でレンダラープロセスに使用されるサンドボックスは、
--no-sandbox
を使用してもレンダラープロセスは引き続きファイルシステム上のファイルに書き込むことができないため、ブラウザープロセスと同じプロセスでレンダラーを実行するには--single-process
を渡す必要があります。 .so
は Chrome の APK に埋め込まれているため、記号化は APK メモリアドレスを、構築内のアンストリップ.so
ファイルに変換する必要があります。
次のコマンドは Android でプロファイリングを有効にします。
./build/android/adb_chrome_public_command_line --no-sandbox --single-process --js-flags='--logfile=/storage/emulated/0/Download/%t.log,--prof'
<Close and relaunch Chome on the Android device>
adb pull /storage/emulated/0/Download/<logfile>
./src/v8/tools/linux-tick-processor --apk-embedded-library=out/Release/lib.unstripped/libchrome.so --preprocess <logfile>
メモ #
Windows では、chrome.exe
ではなく chrome.dll
に対して .MAP
ファイルの作成をオンにするようにしてください。