Chrome Release Bot (LUCI) 4762b62e7d Publish DEPS for 106.0.5249.13 | 1 year ago | |
---|---|---|
.. | ||
OWNERS | 1 year ago | |
PRESUBMIT.py | 1 year ago | |
README.md | 1 year ago | |
code_pages_pss.py | 1 year ago | |
extract_resident_pages.py | 1 year ago | |
extract_resident_pages_unittest.py | 1 year ago | |
extract_symbols.py | 1 year ago | |
java_code_pages_pss.py | 1 year ago | |
parse_smaps.py | 1 year ago | |
parse_smaps_unittest.py | 1 year ago | |
process_residency.py | 1 year ago | |
run_tests | 1 year ago | |
visualize.css | 1 year ago | |
visualize.html | 1 year ago | |
visualize.js | 1 year ago |
This directory contains scripts used to assess memory usage on Android, and in
particular the memory cost of Chromium’s executable code. This is related to the
tools/cygprofile
directory.
Most (if not all) of these tools require ADB to run as root on the device. Android builds allowing this mode would need this command to execute:
$ adb root
Which must be run beforehand. In some cases, SELinux must be put in permissive mode, with the following command:
$ adb shell setenforce 0
code_pages_pss.py
Shows the Proportional Set Size of code pages for all processes of a given Chrome instance. Example for a local Chrome build:
$ tools/android/native_lib_memory/code_pages_pss.py \
--app-package com.google.android.apps.chrome \
--chrome-package com.google.android.apps.chrome
INFO:root:Processes:
com.google.android.apps.chrome_zygote
com.google.android.apps.chrome
com.google.android.apps.chrome:sandboxed_process0:org.chromium.content.app.SandboxedProcessService0:0
com.google.android.apps.chrome:privileged_process0
Total PSS from code pages = 30306kB
extract_symbols.py
This is used to visualize the impact of code ordering on a running Chrome instance.
An official Chrome build, in order for ThinLTO to be enabled. In args.gn, you need:
is_debug = false
is_component_build = false
is_official_build = true
symbol_level = 1
And to build a Chrome target, not Chromium, in order to get code ordering,
e.g. monochrome_apk
. Then, you can either use it purely to visualize code
layout, or to couple it with residency.
Run:
$ tools/android/native_lib_memory/extract_symbols.py \
--native-library libmonochrome.so \
--build-directory out/Release \
--output-directory /tmp/output \
--start-server
Will start an HTTP server on port 8000 by default, and the results are at http://127.0.0.1:8000/visualize.html.
To get residency data as well, you need to:
--log-native-library-residency
to Chrome’s command lineTo add the command line flag, and ensure that the right directory exists on the device:
$ adb shell "echo '_ --log-native-library-residency' > /data/local/tmp/chrome-command-line"
$ adb shell mkdir /data/local/tmp/chrome
To trace the device remotely, open chrome://inspect/?tracing#devices. Select
the memory-infra
category, and wait for a dump to complete. This requires a
device running at least a 4.4 kernel.
To pull the file from the device and convert it to JSON:
$ tools/android/native_lib_memory/extract_resident_pages.py \
--device-serial <DEVICE_SERIAL> \
--on-device-file-path /data/local/tmp/chrome/native-library-resident-pages.txt \
--output-directory .
Finally, the command to process the data is amended to:
$ tools/android/native_lib_memory/extract_symbols.py \
--native-library libmonochrome.so \
--build-directory out/Release \
--output-directory /tmp/output \
--residency residency.json \
--start-server