Chromium Code Reviews| Index: tools/perf/benchmarks/news.py |
| diff --git a/tools/perf/benchmarks/news.py b/tools/perf/benchmarks/news.py |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..394478531e3a5214caed4113815b3e95c2e9c137 |
| --- /dev/null |
| +++ b/tools/perf/benchmarks/news.py |
| @@ -0,0 +1,93 @@ |
| +# Copyright 2016 The Chromium Authors. All rights reserved. |
| +# Use of this source code is governed by a BSD-style license that can be |
| +# found in the LICENSE file. |
| + |
| +import re |
| + |
| +from core import perf_benchmark |
| +from telemetry.timeline import chrome_trace_config |
| +from telemetry.timeline import chrome_trace_category_filter |
| +from telemetry.web_perf import timeline_based_measurement |
| +import page_sets |
| + |
| + |
| +# See tr.v.Numeric.getSummarizedScalarNumericsWithNames() |
| +# https://github.com/catapult-project/catapult/blob/master/tracing/tracing/value/numeric.html#L323 |
| +_IGNORED_MEMORY_STATS_RE = re.compile(r'_(std|count|min|sum|pct_\d{4}(_\d+)?)$') |
| + |
| +# Track only the high-level GC stats to reduce the data load on dashboard. |
| +_IGNORED_V8_STATS_RE = re.compile( |
| + r'_(idle_deadline_overrun|percentage_idle|outside_idle)') |
| +_V8_GC_HIGH_LEVEL_STATS_RE = re.compile(r'^v8-gc-(' |
| + r'full-mark-compactor_|' |
| + r'incremental-finalize_|' |
| + r'incremental-step_|' |
| + r'latency-mark-compactor_|' |
| + r'memory-mark-compactor_|' |
| + r'scavenger_|' |
| + r'gc-total_)') |
| + |
| + |
| +class _NewsBenchmark(perf_benchmark.PerfBenchmark): |
| + """Base class for news browsing benchmarks. |
| + This benchmark measures memory usage with periodic memory dumps and v8 times. |
| + See page_sets.news_stories._NewsStory for workload description. |
| + """ |
| + |
| + def CreateTimelineBasedMeasurementOptions(self): |
| + categories = [ |
| + # Disable all categories by default. |
| + '-*', |
| + # Memory categories. |
| + 'disabled-by-default-memory-infra', |
| + # V8 categories. |
| + 'blink.console', |
| + 'disabled-by-default-v8.gc', |
| + 'renderer.scheduler', |
| + 'v8', |
| + 'webkit.console', |
| + ] |
| + options = timeline_based_measurement.Options( |
| + chrome_trace_category_filter.ChromeTraceCategoryFilter( |
| + ','.join(categories))) |
| + options.config.enable_android_graphics_memtrack = True |
| + # Trigger periodic light memory dumps every 1000 ms. |
| + memory_dump_config = chrome_trace_config.MemoryDumpConfig() |
| + memory_dump_config.AddTrigger('light', 1000) |
| + options.config.chrome_trace_config.SetMemoryDumpConfig(memory_dump_config) |
| + options.SetTimelineBasedMetrics(['v8AndMemoryMetrics']) |
| + return options |
| + |
| + @classmethod |
| + def Name(cls): |
| + return 'news_%s' % cls.page_set.PLATFORM |
|
petrcermak
2016/07/12 15:30:54
Given that this benchmark focuses on V8, shouldn't
ulan
2016/07/12 17:14:48
Done. I renamed the file too.
|
| + |
| + @classmethod |
| + def ValueCanBeAddedPredicate(cls, value, is_first_result): |
| + # TODO(crbug.com/610962): Remove this stopgap when the perf dashboard |
| + # is able to cope with the data load generated by TBMv2 metrics. |
| + if 'memory:chrome' in value.name: |
| + return ('renderer_processes' in value.name and |
| + not _IGNORED_MEMORY_STATS_RE.search(value.name)) |
| + return (_V8_GC_HIGH_LEVEL_STATS_RE.search(value.name) and |
| + not _IGNORED_V8_STATS_RE.search(value.name)) |
| + |
| + @classmethod |
| + def ShouldTearDownStateAfterEachStoryRun(cls): |
| + return True |
| + |
| + |
| +class DesktopNewsBenchmark(_NewsBenchmark): |
|
nednguyen
2016/07/12 14:11:15
Ping on considering moving these benchmarks to ben
ulan
2016/07/12 14:16:22
SGTM, I'll wait for Petr's reply before moving.
An
|
| + page_set = page_sets.DesktopNewsStorySet |
| + |
| + @classmethod |
| + def ShouldDisable(cls, possible_browser): |
| + return possible_browser.platform.GetDeviceTypeName() != 'Desktop' |
| + |
| + |
| +class MobileNewsBenchmark(_NewsBenchmark): |
| + page_set = page_sets.MobileNewsStorySet |
| + |
| + @classmethod |
| + def ShouldDisable(cls, possible_browser): |
| + return possible_browser.platform.GetDeviceTypeName() == 'Desktop' |