Перейти к основному содержимому

Профилирование Chromium с использованием V8

Профайлеры процессора и памяти V8 легко использовать с оболочками V8, но может быть неочевидно, как использовать их с Chromium. Эта страница поможет вам в этом.

Почему использование профайлеров V8 с Chromium отличается от их использования с оболочками V8?

Chromium — сложное приложение, в отличие от оболочек V8. Ниже перечислены особенности Chromium, которые влияют на использование профайлеров:

  • каждый рендерер является отдельным процессом (ну ладно, не каждый, но опустим эту деталь), поэтому они не могут использовать общий файл логов;
  • песочница, построенная вокруг процесса рендерера, не позволяет ему записывать данные на диск;
  • инструменты разработчика настраивают профайлеры для своих собственных целей;
  • код логирования V8 содержит некоторые оптимизации, упрощающие проверку состояния логирования.

Как запустить Chromium, чтобы получить профилирование процессора?

Вот как запустить 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

Chrome на Android имеет ряд уникальных моментов, усложняющих процесс профилирования.

  • Командная строка должна быть записана через adb перед запуском Chrome на устройстве. В результате кавычки в командной строке иногда теряются, поэтому лучше разделять аргументы в --js-flags запятыми, а не пробелами и кавычками.
  • Путь к файлу логов должен быть указан как абсолютный путь к доступному для записи месту на файловой системе Android.
  • Песочница, используемая для процессов рендеринга на Android, означает, что даже с --no-sandbox процесс рендеринга не может записывать файлы на файловую систему, следовательно, необходимо задать --single-process, чтобы выполнить процесс рендеринга в том же процессе, что и процесс браузера.
  • .so встроена в APK Chrome, что означает необходимость преобразования адресов памяти из APK в файле .so, который не был обрезан, в сборках.

Следующие команды включают профилирование на Android:

./build/android/adb_chrome_public_command_line --no-sandbox --single-process --js-flags='--logfile=/storage/emulated/0/Download/%t.log,--prof'
<Закройте и перезапустите Chrome на устройстве Android>
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 обязательно включите создание файлов .MAP для chrome.dll, но не для chrome.exe.