Commit 69e9e42e authored by Matthew Cary's avatar Matthew Cary Committed by Commit Bot

Orderfile: options to save and reuse profile data.

Adds --pregenerated-profiles and --profile-save-dir to
orderfile_generator_backend.py. These allow for precise comparisons
between different versions of profile processing, that are not affected
by variations in the symbols seen during device profiling.

Bug: 869997
Change-Id: I9dd734a77ea4a738e22f20f095e76879e71f3c0c
Reviewed-on: https://chromium-review.googlesource.com/1162179
Commit-Queue: Matthew Cary <mattcary@chromium.org>
Reviewed-by: default avatarEgor Pasko <pasko@chromium.org>
Cr-Commit-Position: refs/heads/master@{#582258}
parent 34b8b1f3
......@@ -17,6 +17,7 @@ Example usage:
import argparse
import hashlib
import json
import glob
import logging
import os
import re
......@@ -447,6 +448,14 @@ class OrderfileGenerator(object):
self._profiler = profile_android_startup.AndroidProfileTool(
output_directory, host_profile_dir, use_wpr, urls, simulate_user,
device=options.device)
if options.pregenerated_profiles:
self._profiler.SetPregeneratedProfiles(
glob.glob(options.pregenerated_profiles))
else:
assert not options.pregenerated_profiles, (
'--pregenerated-profiles cannot be used with --skip-profile')
assert not options.profile_save_dir, (
'--profile-save-dir cannot be used with --skip-profile')
self._output_data = {}
self._step_recorder = StepRecorder(options.buildbot)
......@@ -491,6 +500,7 @@ class OrderfileGenerator(object):
if self._options.system_health_orderfile:
files = self._profiler.CollectSystemHealthProfile(
self._compiler.chrome_apk)
self._MaybeSaveProfile(files)
try:
self._ProcessPhasedOrderfile(files)
except Exception:
......@@ -545,6 +555,7 @@ class OrderfileGenerator(object):
files = self._profiler.CollectProfile(
self._compiler.chrome_apk,
constants.PACKAGE_INFO['chrome'])
self._MaybeSaveProfile(files)
self._step_recorder.BeginStep('Process profile')
assert os.path.exists(self._compiler.lib_chrome_so)
offsets = process_profiles.GetReachedOffsetsFromDumpFiles(
......@@ -574,6 +585,13 @@ class OrderfileGenerator(object):
self._SaveForDebuggingWithOverwrite(self._compiler.lib_chrome_so)
raise
def _MaybeSaveProfile(self, files):
if self._options.profile_save_dir:
logging.info('Saving profiles to %s', self._options.profile_save_dir)
for f in files:
shutil.copy(f, self._options.profile_save_dir)
logging.info('Saved profile %s', f)
def _DeleteTempFiles(self):
"""Deletes intermediate step output files."""
print 'Delete %s' % (
......@@ -826,6 +844,14 @@ def CreateArgumentParser():
parser.add_argument('--manual-objdir', default=None, type=str,
help=('Root of object file directory corresponding to '
'--manual-symbol-offsets.'))
parser.add_argument('--pregenerated-profiles', default=None, type=str,
help=('Pregenerated profiles to use instead of running '
'profile step. Cannot be used with '
'--skip-profiles.'))
parser.add_argument('--profile-save-dir', default=None, type=str,
help=('Directory to save any profiles created. These can '
'be used with --pregenerated-profiles. Cannot be '
'used with --skip-profiles.'))
profile_android_startup.AddProfileCollectionArguments(parser)
return parser
......
......@@ -215,6 +215,18 @@ class AndroidProfileTool(object):
self._urls = urls
self._simulate_user = simulate_user
self._SetUpDevice()
self._pregenerated_profiles = None
def SetPregeneratedProfiles(self, files):
"""Set pregenerated profiles.
The pregenerated files will be returned as profile data instead of running
an actual profiling step.
Args:
files: ([str]) List of pregenerated files.
"""
self._pregenerated_profiles = files
def RunCygprofileTests(self):
"""Run the cygprofile unit tests suite on the device.
......@@ -248,6 +260,10 @@ class AndroidProfileTool(object):
Raises:
NoProfileDataError: No data was found on the device.
"""
if self._pregenerated_profiles:
logging.info('Using pregenerated profiles instead of running profile')
logging.info('Profile files: %s', '\n'.join(self._pregenerated_profiles))
return self._pregenerated_profiles
self._Install(apk)
try:
changer = self._SetChromeFlags(package_info)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment