Skip to content
master
Switch branches/tags
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
 
 

Simpleperf for gecko apps

Scripting to make simpleperf profiling of Gecko-based Android Apps easier

You will need to use:

  • either a GeckoView-based vehicle from Mozilla that is both released (i.e., has had its full symbols published to https://symbols.mozilla.org -- generally, Nightly, Beta, or Release) and has been debug signed (i.e., has been processed by debug_sign_apk.sh in this repository);
  • or your own geckoview_example built from source, i.e., one built with ./mach build ./mach android install-geckoview_example

This is because simpleperf requires the unstripped shared objects which are not part of the published Android packages directly.

Setup

  • Clone simpleperf:

  • Add the helper scripts to your clone of the repo

  • Modify perf_record.sh to refer to the correct android-ndk path for your workspace and to the correct $TOPOBJDIR (if building locally).

  • If you are targetting a non-debuggable Mozilla-released vehicle, debug sign your APK using debug_sign_apk.sh.

Running

  • run perf_record.sh

    • This will start simpleperf and then wait for geckoview_example to be started manually.
    • In perf_record.sh there are alternative codepaths commented out that will launch geckoview_example first and then start profiling
  • Once the capture is complete, simpleperf will copy libraries for debug info from, in order of preference:

    1. Your $TOPOBJDIR (if that environment variable is set)
    2. Mozilla's symbol server at https://symbols.mozilla.org (if you're using https://github.com/ncalexan/simpleperf/tree/mozilla-symbols) using
    3. The device itself -- although these libraries will be unstripped.
    • simpleperf requires the libraries to be in a specific folder relative to the data file. e.g binary_cache/data/app/org.mozilla.geckoview_example-1/lib/arm/libxul.so
    • Depending on the device and app you may need to manually copy the unstripped libs to the correct binary_cache folder, e.g. binary_cache/data/app/org.mozilla.fenix.debug-cGBgD0-yu6fZrNrmK2DHpw==/lib/arm
    • You can ensure that they are unstripped by running file on them, e.g. file binary_cache/data/app/org.mozilla.geckoview_example-1/lib/arm/libxul.so
  • You can then run python report_html.py to generate the html report

  • There are additional scripts which can be useful such as the report.py or report_sample.py.

    • Note that these scripts require you to explicitly set the symbol path.
    • e.g. python report.py --sort dso --symfs binary_cache or python report_sample.py --symfs binary_cache

Exporting to firefox profiler format

Notes

  • The script perf_record_extended.sh has been added which also provides options to capture applink, fenix, and other variations
  • Simpleperf is a rich tool with many more options, described here
  • From the simpleperf tooling: "app_profiler.py isn't supported on Android < N, please switch to use simpleperf binary directly."

About

Scripting to make simpleperf profiling of geckoview_example easier

Resources

Releases

No releases published

Packages

No packages published