| # Copyright 2022 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 |
| import page_sets |
| |
| from benchmarks import loading_metrics_category |
| from telemetry import benchmark |
| from telemetry.web_perf import timeline_based_measurement |
| from telemetry.timeline import chrome_trace_category_filter |
| |
| |
| class _AdFramesBase(perf_benchmark.PerfBenchmark): |
| """ A base class for loading benchmarks into ad frames. """ |
| |
| def SetExtraBrowserOptions(self, options): |
| # --disable-background-networking causes the server to send the ads without |
| # the `supports-loading-mode: fenced-frames` header. So we allow background |
| # networking so the headers allow the page to load in a fenced frame. |
| options.disable_background_networking = False |
| |
| def CreateCoreTimelineBasedMeasurementOptions(self): |
| cat_filter = chrome_trace_category_filter.ChromeTraceCategoryFilter( |
| filter_string='disabled-by-default-histogram_samples') |
| options = timeline_based_measurement.Options(cat_filter) |
| loading_metrics_category.AugmentOptionsForLoadingMetrics(options) |
| # Enable "Memory.GPU.PeakMemoryUsage2.PageLoad" so we can measure the GPU |
| # memory used throughout the page loading tests. Include "umaMetric" as a |
| # timeline so that we can parse this UMA Histogram. |
| options.config.chrome_trace_config.EnableUMAHistograms( |
| 'PageLoad.PaintTiming.NavigationToFirstContentfulPaint', |
| 'PageLoad.Clients.FencedFrames.PaintTiming.NavigationToFirstContentfulPaint', |
| 'PageLoad.Clients.ThirdParty.Frames.NavigationToFirstContentfulPaint3') |
| |
| # Add "umaMetric" to the timeline based metrics. This does not override |
| # those added in loading_metrics_category.AugmentOptionsForLoadingMetrics. |
| options.AddTimelineBasedMetric('umaMetric') |
| options.AddTimelineBasedMetric('tbmv3:uma_metrics') |
| options.AddTimelineBasedMetric('loadingMetric') |
| |
| return options |
| |
| |
| @benchmark.Info(emails=['lbrady@google.com'], |
| component='Blink>FencedFrames', |
| documentation_url='https://tinyurl.com/fenced-frame-benchmark') |
| class FencedFrameBenchmark(_AdFramesBase): |
| """ A benchmark measuring loading performance inside MPArch fenced frames. """ |
| |
| def CreateStorySet(self, options): |
| return page_sets.FencedFramePageSet() |
| |
| @classmethod |
| def Name(cls): |
| return 'ad_frames.fencedframe' |
| |
| |
| @benchmark.Info(emails=['lbrady@google.com'], |
| component='Blink>FencedFrames', |
| documentation_url='https://tinyurl.com/fenced-frame-benchmark') |
| class IframeBenchmark(_AdFramesBase): |
| """ A benchmark measuring loading performance inside iframes. """ |
| |
| def CreateStorySet(self, options): |
| return page_sets.IframePageSet() |
| |
| @classmethod |
| def Name(cls): |
| return 'UNSCHEDULED_ad_frames.iframe' |