| # Copyright 2017 The Chromium Authors |
| # Use of this source code is governed by a BSD-style license that can be |
| # found in the LICENSE file. |
| |
| from core import perf_benchmark |
| |
| from contrib.cluster_telemetry import ct_benchmarks_util |
| from contrib.cluster_telemetry import page_set |
| from contrib.cluster_telemetry import repaint_helpers |
| from contrib.cluster_telemetry import screenshot |
| |
| class ScreenshotCT(perf_benchmark.PerfBenchmark): |
| """Captures PNG screenshots of web pages for Cluster Telemetry. Screenshots |
| written to local file with path-safe urls of pages as filenames. Cluster |
| Telemetry is then used for aggregation and analysis.""" |
| |
| @classmethod |
| def Name(cls): |
| return 'screenshot_ct' |
| |
| @classmethod |
| def AddBenchmarkCommandLineArgs(cls, parser): |
| ct_benchmarks_util.AddBenchmarkCommandLineArgs(parser) |
| parser.add_argument('--png-outdir', |
| help='Output directory for the PNG files') |
| parser.add_argument('--wait-time', |
| type=float, |
| default=0, |
| help='Wait time before the benchmark is started') |
| parser.add_argument('--dc-detect', |
| action='store_true', |
| default=False, |
| help=('Detects dynamic content by marking' |
| 'pixels that were not consistent across multiple ' |
| 'screenshots with cyan')) |
| parser.add_argument( |
| '--dc-wait-time', |
| type=float, |
| default=1, |
| help=('Wait time in between screenshots. Only applicable ' |
| 'if dc_detect flag is true.')) |
| parser.add_argument( |
| '--dc-extra-screenshots', |
| type=int, |
| default=1, |
| help=('Number of extra screenshots taken to detect ' |
| 'dynamic content. Only applicable if dc_detect flag is ' |
| 'true.')) |
| parser.add_argument( |
| '--dc-threshold', |
| type=float, |
| default=0.5, |
| help=('Maximum tolerable percentage of dynamic content ' |
| 'pixels. Raises an exception if percentage of dynamic ' |
| 'content is beyond this threshold. Only applicable if ' |
| 'dc_detect flag is true.')) |
| |
| @classmethod |
| def ProcessCommandLineArgs(cls, parser, args): |
| ct_benchmarks_util.ValidateCommandLineArgs(parser, args) |
| if not args.png_outdir: |
| parser.error('Please specify --png-outdir') |
| |
| def CreatePageTest(self, options): |
| return screenshot.Screenshot(options.png_outdir, options.wait_time, |
| options.dc_detect, options.dc_wait_time, options.dc_extra_screenshots, |
| options.dc_threshold) |
| |
| def CreateStorySet(self, options): |
| return page_set.CTPageSet( |
| options.urls_list, options.user_agent, options.archive_data_file, |
| run_page_interaction_callback=repaint_helpers.WaitThenRepaint) |