Generating PGO Profiles

Normally devs don't need to worry about this and can use the default profile for official builds. The default profile can be fetched by adding "checkout_pgo_profiles": True to custom_vars in the gclient config and running gclient runhooks.

To produce an executable built with a custom PGO profile:

  • Produce the instrumented executable using the following gn args:

    chrome_pgo_phase = 1
    enable_resource_allowlist_generation = false
    is_official_build = true
    symbol_level = 0
    use_goma = true
    
  • Run representative benchmarks to produce profiles

    • vpython tools/perf/run_benchmark system_health.common_desktop --assert-gpu-compositing --run-abridged-story-set --browser=exact --browser-executable=out/path/to/chrome
    • vpython tools/perf/run_benchmark speedometer2 --assert-gpu-compositing --browser=exact --browser-executable=out/path/to/chrome
    • This will produce *.profraw files in the current working directory
  • Merge the profiling data

    • Get the llvm-profdata tool by adding "checkout_clang_coverage_tools": True, to custom_vars in the gclient config and running gclient runhooks.
    • Run third_party/llvm-build/Release+Asserts/bin/llvm-profdata merge *.profraw -o chrome.profdata
  • Produce the final PGO'd executable with the following gn args:

    enable_resource_allowlist_generation = false
    is_official_build = true
    symbol_level = 0
    use_goma = true
    pgo_data_path = {path-to-the-profile}