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 sys | 8 import sys |
9 import time | 9 import time |
10 | 10 |
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
165 'allow_mixed_story_states.' % ( | 165 'allow_mixed_story_states.' % ( |
166 story_groups[-1].shared_state_class, | 166 story_groups[-1].shared_state_class, |
167 story.shared_state_class)) | 167 story.shared_state_class)) |
168 story_groups.append( | 168 story_groups.append( |
169 StoryGroup(story.shared_state_class)) | 169 StoryGroup(story.shared_state_class)) |
170 story_groups[-1].AddStory(story) | 170 story_groups[-1].AddStory(story) |
171 return story_groups | 171 return story_groups |
172 | 172 |
173 | 173 |
174 def Run(test, story_set, finder_options, results, max_failures=None, | 174 def Run(test, story_set, finder_options, results, max_failures=None, |
175 should_tear_down_state_after_each_story_run=False): | 175 tear_down_after_story=False, tear_down_after_story_set=False): |
176 """Runs a given test against a given page_set with the given options. | 176 """Runs a given test against a given page_set with the given options. |
177 | 177 |
178 Stop execution for unexpected exceptions such as KeyboardInterrupt. | 178 Stop execution for unexpected exceptions such as KeyboardInterrupt. |
179 We "white list" certain exceptions for which the story runner | 179 We "white list" certain exceptions for which the story runner |
180 can continue running the remaining stories. | 180 can continue running the remaining stories. |
181 """ | 181 """ |
182 # Filter page set based on options. | 182 # Filter page set based on options. |
183 stories = filter(story_module.StoryFilter.IsSelected, story_set) | 183 stories = filter(story_module.StoryFilter.IsSelected, story_set) |
184 | 184 |
185 if (not finder_options.use_live_sites and | 185 if (not finder_options.use_live_sites and |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
240 try: | 240 try: |
241 if state: | 241 if state: |
242 _CheckThermalThrottling(state.platform) | 242 _CheckThermalThrottling(state.platform) |
243 results.DidRunPage(story) | 243 results.DidRunPage(story) |
244 except Exception: | 244 except Exception: |
245 if not has_existing_exception: | 245 if not has_existing_exception: |
246 raise | 246 raise |
247 # Print current exception and propagate existing exception. | 247 # Print current exception and propagate existing exception. |
248 exception_formatter.PrintFormattedException( | 248 exception_formatter.PrintFormattedException( |
249 msg='Exception from result processing:') | 249 msg='Exception from result processing:') |
250 if state and should_tear_down_state_after_each_story_run: | 250 if state and tear_down_after_story: |
251 state.TearDownState() | 251 state.TearDownState() |
252 state = None | 252 state = None |
253 if (effective_max_failures is not None and | 253 if (effective_max_failures is not None and |
254 len(results.failures) > effective_max_failures): | 254 len(results.failures) > effective_max_failures): |
255 logging.error('Too many failures. Aborting.') | 255 logging.error('Too many failures. Aborting.') |
256 return | 256 return |
| 257 if state and tear_down_after_story_set: |
| 258 state.TearDownState() |
| 259 state = None |
257 finally: | 260 finally: |
258 if state: | 261 if state: |
259 has_existing_exception = sys.exc_info() != (None, None, None) | 262 has_existing_exception = sys.exc_info() != (None, None, None) |
260 try: | 263 try: |
261 state.TearDownState() | 264 state.TearDownState() |
262 except Exception: | 265 except Exception: |
263 if not has_existing_exception: | 266 if not has_existing_exception: |
264 raise | 267 raise |
265 # Print current exception and propagate existing exception. | 268 # Print current exception and propagate existing exception. |
266 exception_formatter.PrintFormattedException( | 269 exception_formatter.PrintFormattedException( |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
303 raise Exception( | 306 raise Exception( |
304 'PageTest must be used with StorySet containing only ' | 307 'PageTest must be used with StorySet containing only ' |
305 'telemetry.page.Page stories.') | 308 'telemetry.page.Page stories.') |
306 | 309 |
307 benchmark_metadata = benchmark.GetMetadata() | 310 benchmark_metadata = benchmark.GetMetadata() |
308 with results_options.CreateResults( | 311 with results_options.CreateResults( |
309 benchmark_metadata, finder_options, | 312 benchmark_metadata, finder_options, |
310 benchmark.ValueCanBeAddedPredicate) as results: | 313 benchmark.ValueCanBeAddedPredicate) as results: |
311 try: | 314 try: |
312 Run(pt, stories, finder_options, results, benchmark.max_failures, | 315 Run(pt, stories, finder_options, results, benchmark.max_failures, |
313 benchmark.ShouldTearDownStateAfterEachStoryRun()) | 316 benchmark.ShouldTearDownStateAfterEachStoryRun(), |
| 317 benchmark.ShouldTearDownStateAfterEachStorySetRun()) |
314 return_code = min(254, len(results.failures)) | 318 return_code = min(254, len(results.failures)) |
315 except Exception: | 319 except Exception: |
316 exception_formatter.PrintFormattedException() | 320 exception_formatter.PrintFormattedException() |
317 return_code = 255 | 321 return_code = 255 |
318 | 322 |
319 try: | 323 try: |
320 bucket = cloud_storage.BUCKET_ALIASES[finder_options.upload_bucket] | 324 bucket = cloud_storage.BUCKET_ALIASES[finder_options.upload_bucket] |
321 if finder_options.upload_results: | 325 if finder_options.upload_results: |
322 results.UploadTraceFilesToCloud(bucket) | 326 results.UploadTraceFilesToCloud(bucket) |
323 results.UploadProfilingFilesToCloud(bucket) | 327 results.UploadProfilingFilesToCloud(bucket) |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
403 logging.warning('Device is thermally throttled before running ' | 407 logging.warning('Device is thermally throttled before running ' |
404 'performance tests, results will vary.') | 408 'performance tests, results will vary.') |
405 | 409 |
406 | 410 |
407 def _CheckThermalThrottling(platform): | 411 def _CheckThermalThrottling(platform): |
408 if not platform.CanMonitorThermalThrottling(): | 412 if not platform.CanMonitorThermalThrottling(): |
409 return | 413 return |
410 if platform.HasBeenThermallyThrottled(): | 414 if platform.HasBeenThermallyThrottled(): |
411 logging.warning('Device has been thermally throttled during ' | 415 logging.warning('Device has been thermally throttled during ' |
412 'performance tests, results will vary.') | 416 'performance tests, results will vary.') |
OLD | NEW |