chromium/tools/perf/contrib/vr_benchmarks/webvr_sample_pages.py

# 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 contrib.vr_benchmarks.vr_sample_page import VrSamplePage
from contrib.vr_benchmarks.vr_story_set import VrStorySet


class WebVrSamplePage(VrSamplePage):

  def __init__(self, page_set, url_parameters, sample_page,
      extra_browser_args=None,):
    super(WebVrSamplePage, self).__init__(
        sample_page=sample_page,
        page_set=page_set,
        url_parameters=url_parameters,
        extra_browser_args=extra_browser_args)

  def RunPageInteractions(self, action_runner):
    action_runner.TapElement(selector='canvas[id="webgl-canvas"]')
    action_runner.MeasureMemory(True)
    # We don't want to be in VR or on a page with a WebGL canvas at the end of
    # the test, as this generates unnecessary heat while the trace data is being
    # processed, so navigate to a blank page if we're on a platform that cares
    # about the heat generation.
    if self._shared_page_state.ShouldNavigateToBlankPageBeforeFinishing():
      action_runner.Navigate("about:blank")


class WebVrSamplePageSet(VrStorySet):
  """A page set using the official WebVR sample with settings tweaked."""

  def __init__(self, use_fake_pose_tracker=True):
    super(WebVrSamplePageSet, self).__init__(
        use_fake_pose_tracker=use_fake_pose_tracker)

    # Test cases that use the synthetic cube field page
    cube_test_cases = [
      # Standard sample app with no changes
      ['canvasClickPresents=1', 'renderScale=1'],
      # Increased render scale
      ['canvasClickPresents=1', 'renderScale=1.5'],
      # Default render scale, increased load
      ['canvasClickPresents=1', 'renderScale=1', 'heavyGpu=1', 'cubeScale=0.2',
          'workTime=5'],
      # Further increased load
      ['canvasClickPresents=1', 'renderScale=1', 'heavyGpu=1', 'cubeScale=0.3',
          'workTime=10'],
      # Absurd load for fill-rate testing
      ['canvasClickPresents=1', 'renderScale=1.6', 'heavyGpu=1',
          'cubeScale=0.3', 'workTime=4'],
    ]

    for url_parameters in cube_test_cases:
      # Standard set of pages with defaults
      self.AddStory(WebVrSamplePage(self, url_parameters, 'test-slow-render'))
      # Set of pages with standardized render size
      self.AddStory(WebVrSamplePage(self, url_parameters + ['standardSize=1'],
          'test-slow-render'))

    # Test cases that use the 360 video page
    video_test_cases = [
      # Test using the default, low resolution video
      ['canvasClickPresents=1'],
    ]

    for url_parameters in video_test_cases:
      self.AddStory(WebVrSamplePage(self, url_parameters, 'XX-360-video'))