GPU Rendering BenchmarksChromium has some GPU Rendering Benchmarks which use the Telemetry framework. The smoothness test loads a set of 25 very common web pages, uses Telemetry to scroll them, and then measures some performance metrics.To run the test, you first need to check out the full Chromium source, and a Chrome OS Test Image. cd chromium/src tools/perf/run_measurement --browser=cros-chrome-guest --remote=${remote_ip} smoothness tools/perf/page_sets/top_25.json --allow-live-sites For the Google and Facebook site tests, you can to provide credentials in a ~/.telemetry-credentials file: cp tools/telemetry/examples/credentials_example.json ~/.telemetry-credentials vi ~/.telemetry-credentials Add Google and Facebook credentials, but the example file format has a bug: there should be a ',' between the "google" and "facebook" blocks. The previous example tested using live sites. There are times where it is preferable to test using pre-cached site data. Telemetry lets you do that using a "web page replay" tool which captures a snapshot of a set of webpages (.wpr). Several such snapshots have already been captured, such as the "top_25" test set which we are running here. Since the page contents are copyright of the respective web page owners, however, they are not available as part of the publicly available chromium source tree. However, if you have access to the Chrome (src-internal) tree, you can check out the repository containing test data and run the test withough "--allow-live-sites": # Prerequisite: To access the pre-recorded page sets, first set up a chrome src-internal password if not already set. cd chromium/src/tools/perf git clone https://chrome-internal.googlesource.com/chrome/tools/perf/data cd chromium/src tools/perf/run_measurement --browser=cros-chrome-guest --remote=${remote_ip} smoothness tools/perf/page_sets/top_25.json run_measurement , is useful for running arbitrary measurements on different page sets. However, the performance bots run their benchmarks, using the run_benchmark script. The equivalent benchmark to the above rrun_measurement example is:cd src/tools/perf ./run_benchmark run --browser=cros-chrome-guest --remote=${remote_ip} smoothness_top25 The scripts run_benchmark /run_measurement both launch the python script test_runner.py , which in turn starts up a local webpagereplay.py server.Beware that the webpagereplay.py will fail to start if /etc/resolv.conf contains the line "nameserver 127.0.0.1":webpagereplay.ReplayNotStartedError: Web Page Replay failed to start. Log output: dnsproxy.DnsProxyException: Invalid nameserver: 127.0.0.1 (causes an infinte loop) This can happen when running on a laptop running Ubuntu 12.04+, since by default Ubuntu 12.04 uses the resolvconf which uses a local dnsmasq server to do actual dns resolution. Thus, the nameserver in /etc/resov.conf will be 127.0.0.1. To temporarily work around this, first fetch the real dns nameserver using nm-tool , and use this value to manually update the nameserver entry in /etc/resolv.conf . Note that any manual changes to /etc/resolv.conf will get overwritten by the system at boot - or whenever resolvconf gets run.Testing without VsyncIn /sbin/session_manager_setup.sh , add the following to the chrome parameter list: --disable-gpu-vsync Experimental WebGL autotestsWebGLManyPlanetsDeep./run_remote_tests.sh --board=${board} --remote=${remote_ip} graphics_WebGLManyPlanetsDeep Example results on mali 2013-wk20 w/ kernel/chromeos-3.4: graphics_WebGLManyPlanetsDeep/graphics_WebGLManyPlanetsDeep avg_fps 42.5563759729 graphics_WebGLManyPlanetsDeep/graphics_WebGLManyPlanetsDeep avg_render_time 0.00651348182884 Example results on mali 2012-wk45 w/ kernel/chromeos-3.4: graphics_WebGLManyPlanetsDeep/graphics_WebGLManyPlanetsDeep avg_fps 59.1172358698 graphics_WebGLManyPlanetsDeep/graphics_WebGLManyPlanetsDeep avg_render_time 0.00622212837838 WebGLAquarium./run_remote_tests.sh --board=${board} --remote=${remote_ip} graphics_WebGLAquarium mali-2012_wk45 on 3.4 on daisy @ CPU=1.4 MHz GPU=533MHz graphics_WebGLAquarium/graphics_WebGLAquarium avg_fps_0001_fishes 34.7671616056 graphics_WebGLAquarium/graphics_WebGLAquarium avg_fps_0010_fishes 38.0083871349 graphics_WebGLAquarium/graphics_WebGLAquarium avg_fps_0050_fishes 36.1185803129 graphics_WebGLAquarium/graphics_WebGLAquarium avg_fps_0100_fishes 33.5180697395 graphics_WebGLAquarium/graphics_WebGLAquarium avg_fps_0250_fishes 29.4186162358 graphics_WebGLAquarium/graphics_WebGLAquarium avg_fps_0500_fishes 21.4609046677 graphics_WebGLAquarium/graphics_WebGLAquarium avg_fps_1000_fishes 14.0662410091 graphics_WebGLAquarium/graphics_WebGLAquarium avg_render_time_0001_fishes 0.0115492735466 graphics_WebGLAquarium/graphics_WebGLAquarium avg_render_time_0010_fishes 0.0120682393055 graphics_WebGLAquarium/graphics_WebGLAquarium avg_render_time_0050_fishes 0.0137373693937 graphics_WebGLAquarium/graphics_WebGLAquarium avg_render_time_0100_fishes 0.0159920819915 graphics_WebGLAquarium/graphics_WebGLAquarium avg_render_time_0250_fishes 0.0222824848304 graphics_WebGLAquarium/graphics_WebGLAquarium avg_render_time_0500_fishes 0.0312746594998 graphics_WebGLAquarium/graphics_WebGLAquarium avg_render_time_1000_fishes 0.0478747122113 mali-2013_wk20 on 3.4 on daisy @ CPU=1.4 MHz GPU=533MHz graphics_WebGLAquarium/graphics_WebGLAquarium avg_fps_0001_fishes 26.237068422 graphics_WebGLAquarium/graphics_WebGLAquarium avg_fps_0010_fishes 28.0702920668 graphics_WebGLAquarium/graphics_WebGLAquarium avg_fps_0050_fishes 27.0979309871 graphics_WebGLAquarium/graphics_WebGLAquarium avg_fps_0100_fishes 26.2101456206 graphics_WebGLAquarium/graphics_WebGLAquarium avg_fps_0250_fishes 23.3153728582 graphics_WebGLAquarium/graphics_WebGLAquarium avg_fps_0500_fishes 21.0018305341 graphics_WebGLAquarium/graphics_WebGLAquarium avg_fps_1000_fishes 15.375419297 graphics_WebGLAquarium/graphics_WebGLAquarium avg_render_time_0001_fishes 0.0117292154996 graphics_WebGLAquarium/graphics_WebGLAquarium avg_render_time_0010_fishes 0.0115656813221 graphics_WebGLAquarium/graphics_WebGLAquarium avg_render_time_0050_fishes 0.0134754876296 graphics_WebGLAquarium/graphics_WebGLAquarium avg_render_time_0100_fishes 0.0157825582097 graphics_WebGLAquarium/graphics_WebGLAquarium avg_render_time_0250_fishes 0.0217831682377 graphics_WebGLAquarium/graphics_WebGLAquarium avg_render_time_0500_fishes 0.0322741695138 graphics_WebGLAquarium/graphics_WebGLAquarium avg_render_time_1000_fishes 0.0508704025854 Restoring OOBE to make Telemetry happyTelemetry gets confused if it cannot figure how to log in to the machine. This can happen, for instance, if you've logged in as another user and telemetry can't find the OOBE (Out Of Box Experience). To fix this, try restoring the oobe: sudo pkill -9 chrome && rm -rf /home/chronos/Local\ State /home/chronos/.oobe_completed && restart ui Enable tracing in mali-ddk
chmod a+wx /sys chmod a+wx /sys/kernel chmod a+wx /sys/kernel/debug chmod a+wx /sys/kernel/debug/tracing/ chmod a+wx /sys/kernel/debug/tracing/trace_marker
Then include cros/cros_tracing.h in any files with functions you want to trace and add: CROS_TRACE_ENABLE(); CROS_TRACE_BLOCK("trace block title"); Using valgrind on the gpu-processChromium OS includes an ebuild for valgrind.So you can just gmerge it to your target: gmerge valgrind Then you just do valgrind myprog .For the gpu process, you need to pass a flag to chrome to give it the gpu launcher. Add the following in in session_manager_setup.sh --gpu-launcher="usr/bin/valgrind --trace-children=yes --error-limit=no" |
Chromium OS >