Index: tools/skp/webpages_playback.py |
diff --git a/tools/skp/webpages_playback.py b/tools/skp/webpages_playback.py |
index a3bff696da3c7d1bd3f8ad099f561d9543d8f115..0f81613658ef995fe179459ff562abef3e4fa0ba 100644 |
--- a/tools/skp/webpages_playback.py |
+++ b/tools/skp/webpages_playback.py |
@@ -115,11 +115,24 @@ GS_FINE_GRAINED_ACL_LIST = [ |
gs_utils.GSUtils.Permission.READ), |
] |
+# Path to Chromium's page sets. |
+CHROMIUM_PAGE_SETS_PATH = os.path.join('tools', 'perf', 'page_sets') |
+ |
+# Dictionary of supported Chromium page sets to their file prefixes. |
+CHROMIUM_PAGE_SETS_TO_PREFIX = { |
+ # 'key_mobile_sites_smooth.py': 'keymobi', |
+ # TODO(rmistry): Uncomment the below after it is verified that the above |
+ # works. |
+ # 'top_25_smooth.py': 'top25desk', |
+} |
+ |
+ |
def remove_prefix(s, prefix): |
if s.startswith(prefix): |
return s[len(prefix):] |
return s |
+ |
class SkPicturePlayback(object): |
"""Class that archives or replays webpages and creates SKPs.""" |
@@ -128,6 +141,8 @@ class SkPicturePlayback(object): |
assert parse_options.browser_executable, 'Must specify --browser_executable' |
self._browser_executable = parse_options.browser_executable |
+ self._chrome_page_sets_path = os.path.join(parse_options.chrome_src_path, |
+ CHROMIUM_PAGE_SETS_PATH) |
self._all_page_sets_specified = parse_options.page_sets == 'all' |
self._page_sets = self._ParsePageSets(parse_options.page_sets) |
@@ -163,6 +178,10 @@ class SkPicturePlayback(object): |
for page_set in os.listdir(page_sets_dir) |
if not os.path.isdir(os.path.join(page_sets_dir, page_set)) and |
page_set.endswith('.py')] |
+ chromium_ps = [ |
+ os.path.join(self._chrome_page_sets_path, cr_page_set) |
+ for cr_page_set in CHROMIUM_PAGE_SETS_TO_PREFIX] |
+ ps.extend(chromium_ps) |
elif '*' in page_sets: |
# Explode and return the glob. |
ps = glob.glob(page_sets) |
@@ -171,6 +190,10 @@ class SkPicturePlayback(object): |
ps.sort() |
return ps |
+ def _IsChromiumPageSet(self, page_set): |
+ """Returns true if the specified page set is a Chromium page set.""" |
+ return page_set.startswith(self._chrome_page_sets_path) |
+ |
def Run(self): |
"""Run the SkPicturePlayback BuildStep.""" |
@@ -217,7 +240,9 @@ class SkPicturePlayback(object): |
wpr_data_file = page_set.split(os.path.sep)[-1].split('.')[0] + '_000.wpr' |
page_set_dir = os.path.dirname(page_set) |
- if self._record: |
+ if self._IsChromiumPageSet(page_set): |
+ print 'Using Chromium\'s captured archives for Chromium\'s page sets.' |
+ elif self._record: |
# Create an archive of the specified webpages if '--record=True' is |
# specified. |
record_wpr_cmd = ( |
@@ -347,28 +372,42 @@ class SkPicturePlayback(object): |
return 0 |
+ def _GetSkiaSkpFileName(self, page_set): |
+ """Returns the SKP file name for Skia page sets.""" |
+ # /path/to/skia_yahooanswers_desktop.py -> skia_yahooanswers_desktop.py |
+ ps_filename = os.path.basename(page_set) |
+ # skia_yahooanswers_desktop.py -> skia_yahooanswers_desktop |
+ ps_basename, _ = os.path.splitext(ps_filename) |
+ # skia_yahooanswers_desktop -> skia, yahooanswers, desktop |
+ _, page_name, device = ps_basename.split('_') |
+ basename = '%s_%s' % (DEVICE_TO_PLATFORM_PREFIX[device], page_name) |
+ return basename[:MAX_SKP_BASE_NAME_LEN] + '.skp' |
+ |
+ def _GetChromiumSkpFileName(self, page_set, site): |
+ """Returns the SKP file name for Chromium page sets.""" |
+ # /path/to/http___mobile_news_sandbox_pt0 -> http___mobile_news_sandbox_pt0 |
+ _, webpage = os.path.split(site) |
+ # http___mobile_news_sandbox_pt0 -> mobile_news_sandbox_pt0 |
+ webpage = webpage.lstrip('http___').lstrip('https___') |
+ # /path/to/skia_yahooanswers_desktop.py -> skia_yahooanswers_desktop.py |
+ ps_filename = os.path.basename(page_set) |
+ # http___mobile_news_sandbox -> pagesetprefix_http___mobile_news_sandbox |
+ basename = '%s_%s' % (CHROMIUM_PAGE_SETS_TO_PREFIX[ps_filename], webpage) |
+ return basename[:MAX_SKP_BASE_NAME_LEN] + '.skp' |
+ |
def _RenameSkpFiles(self, page_set): |
"""Rename generated SKP files into more descriptive names. |
Look into the subdirectory of TMP_SKP_DIR and find the most interesting |
.skp in there to be this page_set's representative .skp. |
""" |
- # Here's where we're assuming there's one page per pageset. |
- # If there were more than one, we'd overwrite filename below. |
- |
- # /path/to/skia_yahooanswers_desktop.json -> skia_yahooanswers_desktop.json |
- _, ps_filename = os.path.split(page_set) |
- # skia_yahooanswers_desktop.json -> skia_yahooanswers_desktop |
- ps_basename, _ = os.path.splitext(ps_filename) |
- # skia_yahooanswers_desktop -> skia, yahooanswers, desktop |
- _, page_name, device = ps_basename.split('_') |
- |
- basename = '%s_%s' % (DEVICE_TO_PLATFORM_PREFIX[device], page_name) |
- filename = basename[:MAX_SKP_BASE_NAME_LEN] + '.skp' |
- |
subdirs = glob.glob(os.path.join(TMP_SKP_DIR, '*')) |
- assert len(subdirs) == 1 |
for site in subdirs: |
+ if self._IsChromiumPageSet(page_set): |
+ filename = self._GetChromiumSkpFileName(page_set, site) |
+ else: |
+ filename = self._GetSkiaSkpFileName(page_set) |
+ |
# We choose the largest .skp as the most likely to be interesting. |
largest_skp = max(glob.glob(os.path.join(site, '*.skp')), |
key=lambda path: os.stat(path).st_size) |
@@ -423,7 +462,7 @@ class DataStore: |
class GoogleStorageDataStore(DataStore): |
def __init__(self, data_store_url): |
self._data_store_url = data_store_url |
- self._bucket = remove_prefix(self._data_store_url.lstrip(), |
+ self._bucket = remove_prefix(self._data_store_url.lstrip(), |
gs_utils.GS_PREFIX) |
self.gs = gs_utils.GSUtils() |
def target_name(self): |