Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(484)

Side by Side Diff: docs/profiling_content_shell_on_android.md

Issue 1309473002: WIP: Migrate Wiki content over to src/docs (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « docs/piranha_plant.md ('k') | docs/proxy_auto_config.md » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 # Introduction
2
3 Below are the instructions for setting up profiling for Content Shell on Android . This will let you generate profiles for ContentShell. This will require linux, building an userdebug Android build, and wiping the device.
4
5 ## Prepare your device.
6
7 You need an Android 4.2+ device (Galaxy Nexus, Nexus 4, 7, 10, etc.) which you d on’t mind erasing all data, rooting, and installing a userdebug build on.
8
9 ## Get and build content\_shell\_apk for Android
10 (These instructions have been carefully distilled from http://code.google.com/p/ chromium/wiki/AndroidBuildInstructions)
11
12 1. Get the code! You’ll want a second checkout as this will be android-specifi c. You know the drill: http://dev.chromium.org/developers/how-tos/get-the-code
13 1. Append this to your .gclient file: `target_os = ['android']`
14 1. Create `chromium.gyp_env` next to your .gclient file: `echo "{ 'GYP_DEFINES ': 'OS=android', }" > chromium.gyp_env`
15 1. (Note: All these scripts assume you’re using "bash" (default) as your shell .)
16 1. Sync and runhooks (be careful not to run hooks on the first sync):
17 ```
18 gclient sync --nohooks
19 . build/android/envsetup.sh
20 gclient runhooks
21 ```
22 1. No need to install any API Keys.
23 1. Install Oracle’s Java: http://goo.gl/uPRSq. Grab the appropriate x64 .bin f ile, `chmod +x`, and then execute to extract. You then move that extracted tree into /usr/lib/jvm/, rename it java-6-sun and set:
24 ```
25 export JAVA_HOME=/usr/lib/jvm/java-6-sun
26 export ANDROID_JAVA_HOME=/usr/lib/jvm/java-6-sun
27 ```
28 1. Type ‘`java -version`’ and make sure it says java version "1.6.0\_35” witho ut any mention of openjdk before proceeding.
29 1. `sudo build/install-build-deps-android.sh`
30 1. Time to build!
31 ```
32 ninja -C out/Release content_shell_apk
33 ```
34
35 ## Setup the physical device
36
37 > Plug in your device. Make sure you can talk to your device, try "`adb shell ls `"
38
39 ## Root your device and install a userdebug build
40
41 1. This may require building your own version of Android: http://source.androi d.com/source/building-devices.html
42 1. A build that works is: manta / android-4.2.2\_r1 or master / full\_ma nta-userdebug.
43
44 ## Root your device
45 1. Run `adb root`. Every time you connect your device you’ll want to run this.
46 1. If adb is not available, make sure to run “`. build/android/envsetup.sh`”
47 > If you get the error “error: device offline”, you may need to become a develo per on your device before Linux will see it. On Jellybean 4.2.1 and above this r equires going to “about phone” or “about tablet” and clicking the build number 7 times: http://androidmuscle.com/how-to-enable-usb-debugging-developer-options-o n-nexus-4-and-android-4-2-devices/
48
49 ## Run a Telemetry perf profiler
50
51 You can run any Telemetry benchmark with --profiler=perf, and it will:
52 1) Download "perf" and "perfhost"
53 2) Install on your device
54 3) Run the test
55 4) Setup symlinks to work with the --symfs parameter
56
57
58 You can also run "manual" tests with Telemetry, more information here:
59 http://www.chromium.org/developers/telemetry/profiling#TOC-Manual-Profiling---An droid
60
61 The following steps describe building "perf", which is no longer necessary if yo u use Telemetry.
62
63
64 ## Install /system/bin/perf on your device (not needed for Telemetry)
65
66 ```
67 # From inside the android source tree (not inside Chromium)
68 mmm external/linux-tools-perf/
69 adb remount # (allows you to write to the system image)
70 adb sync
71 adb shell perf top # check that perf can get samples (don’t expect symbols)
72 ```
73
74 ## Enable profiling
75 > Rebuild content\_shell\_apk with profiling enabled
76 ```
77 export GYP_DEFINES="$GYP_DEFINES profiling=1"
78 build/gyp_chromium
79 ninja -C out/Release content_shell_apk
80 ```
81 ## Install ContentShell
82 > Install with the following:
83 ```
84 build/android/adb_install_apk.py --apk out/Release/apks/ContentShell.apk --apk_p ackage org.chromium.content_shell
85 ```
86
87 ## Run ContentShell
88 > Run with the following:
89 ```
90 ./build/android/adb_run_content_shell
91 ```
92 > If content\_shell “stopped unexpectedly” use “`adb logcat`” to debug. If you see ResourceExtractor exceptions, a clean build is your solution. crbug.com/164 220
93
94 ## Setup a “symbols” directory with symbols from your build (not needed for Tele metry)
95 1. Figure out exactly what path content\_shell\_apk (or chrome, etc) installs to.
96 * On the device, navigate ContentShell to about:crash
97 ```
98 adb logcat | grep libcontent_shell_content_view.so
99 ```
100 > > You should find a path that’s something like /data/app-lib/org.chromium.cont ent\_shell-1/libcontent\_shell\_content\_view.so
101 1. Make a symbols directory
102 ```
103 mkdir symbols (this guide assumes you put this next to src/)
104 ```
105 1. Make a symlink from your symbols directory to your un-stripped content\_she ll.
106 ```
107 mkdir -p symbols/data/app-lib/org.chromium.content_shell-1 (or whatever path in app-lib you got above)
108 ln -s `pwd`/src/out/Release/lib/libcontent_shell_content_view.so `pwd`/symbols/d ata/app-lib/org.chromium.content_shell-1
109 ```
110
111 ## Install perfhost\_linux locally (not needed for Telemetry)
112
113
114 > Note: modern versions of perf may also be able to process the perf.data files from the device.
115 1. perfhost\_linux can be built from: https://android.googlesource.com/platfor m/external/linux-tools-perf/.
116 1. Place perfhost\_linux next to symbols, src, etc.
117 ```
118 chmod a+x perfhost_linux
119 ```
120
121 ## Actually record a profile on the device!
122 > Run the following:
123 ```
124 adb shell ps | grep content (look for the pid of the sandboxed_process)
125 adb shell perf record -g -p 12345 sleep 5
126 adb pull /data/perf.data
127 ```
128
129 ## Create the report
130 1. Run the following:
131 ```
132 ./perfhost_linux report -g -i perf.data --symfs symbols/
133 ```
134 1. If you don’t see chromium/webkit symbols, make sure that you built/pushed R elease, and that the symlink you created to the .so is valid!
135 1. If you have symbols, but your callstacks are nonsense, make sure you ran bu ild/gyp\_chromium after setting profiling=1, and rebuilt.
136
137 ## Add symbols for the kernel
138 1. By default, /proc/kallsyms returns 0 for all symbols, to fix this, set “/pr oc/sys/kernel/kptr\_restrict” to 0:
139 ```
140 adb shell echo “0” > /proc/sys/kernel/kptr_restrict
141 ```
142 1. See http://lwn.net/Articles/420403/ for explanation of what this does.
143 ```
144 adb pull /proc/kallsyms symbols/kallsyms
145 ```
146 1. Now add --kallsyms to your perfhost\_linux command:
147 ```
148 ./perfhost_linux report -g -i perf.data --symfs symbols/ --kallsyms=symbols/kall syms
149 ```
OLDNEW
« no previous file with comments | « docs/piranha_plant.md ('k') | docs/proxy_auto_config.md » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698