| OLD | NEW |
| 1 # Copyright 2014 The Chromium Authors. All rights reserved. | 1 # Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 # Use of this source code is governed by a BSD-style license that can be | 2 # Use of this source code is governed by a BSD-style license that can be |
| 3 # found in the LICENSE file. | 3 # found in the LICENSE file. |
| 4 | 4 |
| 5 import logging | 5 import logging |
| 6 import optparse | 6 import optparse |
| 7 import os | 7 import os |
| 8 import random | 8 import random |
| 9 import sys | 9 import sys |
| 10 import time | 10 import time |
| 11 | 11 |
| 12 from telemetry import decorators | |
| 13 from telemetry import page as page_module | 12 from telemetry import page as page_module |
| 14 from telemetry.core import exceptions | 13 from telemetry.core import exceptions |
| 15 from telemetry.core import util | 14 from telemetry.core import util |
| 16 from telemetry.core import wpr_modes | 15 from telemetry.core import wpr_modes |
| 17 from telemetry.page import page_set as page_set_module | 16 from telemetry.page import page_set as page_set_module |
| 18 from telemetry.page import page_test | 17 from telemetry.page import page_test |
| 19 from telemetry.page.actions import page_action | 18 from telemetry.page.actions import page_action |
| 20 from telemetry.results import results_options | 19 from telemetry.results import results_options |
| 21 from telemetry.user_story import user_story_filter | 20 from telemetry.user_story import user_story_filter |
| 22 from telemetry.util import cloud_storage | 21 from telemetry.util import cloud_storage |
| 23 from telemetry.util import exception_formatter | |
| 24 from telemetry.value import failure | 22 from telemetry.value import failure |
| 25 from telemetry.value import skip | 23 from telemetry.value import skip |
| 26 | 24 |
| 27 | 25 |
| 28 class ArchiveError(Exception): | 26 class ArchiveError(Exception): |
| 29 pass | 27 pass |
| 30 | 28 |
| 31 | 29 |
| 32 def AddCommandLineArgs(parser): | 30 def AddCommandLineArgs(parser): |
| 33 user_story_filter.UserStoryFilter.AddCommandLineArgs(parser) | 31 user_story_filter.UserStoryFilter.AddCommandLineArgs(parser) |
| (...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 120 has_existing_exception = sys.exc_info() is not None | 118 has_existing_exception = sys.exc_info() is not None |
| 121 try: | 119 try: |
| 122 state.DidRunUserStory(results) | 120 state.DidRunUserStory(results) |
| 123 except Exception: | 121 except Exception: |
| 124 if not has_existing_exception: | 122 if not has_existing_exception: |
| 125 raise | 123 raise |
| 126 # Print current exception and propagate existing exception. | 124 # Print current exception and propagate existing exception. |
| 127 exception_formatter.PrintFormattedException( | 125 exception_formatter.PrintFormattedException( |
| 128 msg='Exception from DidRunUserStory: ') | 126 msg='Exception from DidRunUserStory: ') |
| 129 | 127 |
| 130 @decorators.Cache | |
| 131 def _UpdateUserStoryArchivesIfChanged(user_story_set): | |
| 132 # Scan every serving directory for .sha1 files | |
| 133 # and download them from Cloud Storage. Assume all data is public. | |
| 134 all_serving_dirs = user_story_set.serving_dirs.copy() | |
| 135 # Add individual page dirs to all serving dirs. | |
| 136 for user_story in user_story_set: | |
| 137 if isinstance(user_story, page_module.Page) and user_story.is_file: | |
| 138 all_serving_dirs.add(user_story.serving_dir) | |
| 139 # Scan all serving dirs. | |
| 140 for serving_dir in all_serving_dirs: | |
| 141 if os.path.splitdrive(serving_dir)[1] == '/': | |
| 142 raise ValueError('Trying to serve root directory from HTTP server.') | |
| 143 for dirpath, _, filenames in os.walk(serving_dir): | |
| 144 for filename in filenames: | |
| 145 path, extension = os.path.splitext( | |
| 146 os.path.join(dirpath, filename)) | |
| 147 if extension != '.sha1': | |
| 148 continue | |
| 149 cloud_storage.GetIfChanged(path, user_story_set.bucket) | |
| 150 | |
| 151 | |
| 152 class UserStoryGroup(object): | 128 class UserStoryGroup(object): |
| 153 def __init__(self, shared_user_story_state_class): | 129 def __init__(self, shared_user_story_state_class): |
| 154 self._shared_user_story_state_class = shared_user_story_state_class | 130 self._shared_user_story_state_class = shared_user_story_state_class |
| 155 self._user_stories = [] | 131 self._user_stories = [] |
| 156 | 132 |
| 157 @property | 133 @property |
| 158 def shared_user_story_state_class(self): | 134 def shared_user_story_state_class(self): |
| 159 return self._shared_user_story_state_class | 135 return self._shared_user_story_state_class |
| 160 | 136 |
| 161 @property | 137 @property |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 206 """ | 182 """ |
| 207 # TODO(slamm): Remove special-case for PageTest. https://crbug.com/440101 | 183 # TODO(slamm): Remove special-case for PageTest. https://crbug.com/440101 |
| 208 if isinstance(test, page_test.PageTest): | 184 if isinstance(test, page_test.PageTest): |
| 209 test.ValidatePageSet(user_story_set) | 185 test.ValidatePageSet(user_story_set) |
| 210 | 186 |
| 211 # Reorder page set based on options. | 187 # Reorder page set based on options. |
| 212 user_stories = _ShuffleAndFilterUserStorySet(user_story_set, finder_options) | 188 user_stories = _ShuffleAndFilterUserStorySet(user_story_set, finder_options) |
| 213 | 189 |
| 214 if (not finder_options.use_live_sites and user_story_set.bucket and | 190 if (not finder_options.use_live_sites and user_story_set.bucket and |
| 215 finder_options.browser_options.wpr_mode != wpr_modes.WPR_RECORD): | 191 finder_options.browser_options.wpr_mode != wpr_modes.WPR_RECORD): |
| 216 _UpdateUserStoryArchivesIfChanged(user_story_set) | 192 serving_dirs = user_story_set.serving_dirs |
| 193 for directory in serving_dirs: |
| 194 cloud_storage.GetFilesInDirectoryIfChanged(directory, |
| 195 user_story_set.bucket) |
| 217 if not _UpdateAndCheckArchives( | 196 if not _UpdateAndCheckArchives( |
| 218 user_story_set.archive_data_file, user_story_set.wpr_archive_info, | 197 user_story_set.archive_data_file, user_story_set.wpr_archive_info, |
| 219 user_stories): | 198 user_stories): |
| 220 return | 199 return |
| 221 | 200 |
| 222 # TODO(slamm): Remove special-case for PageTest. https://crbug.com/440101 | 201 # TODO(slamm): Remove special-case for PageTest. https://crbug.com/440101 |
| 223 if isinstance(test, page_test.PageTest): | 202 if isinstance(test, page_test.PageTest): |
| 224 for user_story in list(user_stories): | 203 for user_story in list(user_stories): |
| 225 if not test.CanRunForPage(user_story): | 204 if not test.CanRunForPage(user_story): |
| 226 results.WillRunPage(user_story) | 205 results.WillRunPage(user_story) |
| (...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 395 logging.warning('Device is thermally throttled before running ' | 374 logging.warning('Device is thermally throttled before running ' |
| 396 'performance tests, results will vary.') | 375 'performance tests, results will vary.') |
| 397 | 376 |
| 398 | 377 |
| 399 def _CheckThermalThrottling(platform): | 378 def _CheckThermalThrottling(platform): |
| 400 if not platform.CanMonitorThermalThrottling(): | 379 if not platform.CanMonitorThermalThrottling(): |
| 401 return | 380 return |
| 402 if platform.HasBeenThermallyThrottled(): | 381 if platform.HasBeenThermallyThrottled(): |
| 403 logging.warning('Device has been thermally throttled during ' | 382 logging.warning('Device has been thermally throttled during ' |
| 404 'performance tests, results will vary.') | 383 'performance tests, results will vary.') |
| OLD | NEW |