blob: f5f39ac877b59c63c8dd60654daeafe785659efe [file] [log] [blame]
# Copyright 2014 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.
from telemetry.page import shared_page_state
from page_sets.rendering import rendering_story
from page_sets.rendering import story_tags
class ToughSchedulingPage(rendering_story.RenderingStory):
ABSTRACT_STORY = True
TAGS = [story_tags.TOUGH_SCHEDULING]
def __init__(self,
page_set,
shared_page_state_class=shared_page_state.SharedMobilePageState,
name_suffix='',
extra_browser_args=None):
super(ToughSchedulingPage, self).__init__(
page_set=page_set,
shared_page_state_class=shared_page_state_class,
name_suffix=name_suffix,
extra_browser_args=extra_browser_args)
def RunPageInteractions(self, action_runner):
with action_runner.CreateGestureInteraction('ScrollAction'):
action_runner.ScrollPage()
class TouchDraggingPage(ToughSchedulingPage):
"""Why: Simple JS touch dragging."""
BASE_NAME = 'simple_touch_drag'
URL = 'file://../tough_scheduling_cases/simple_touch_drag.html'
def RunPageInteractions(self, action_runner):
with action_runner.CreateGestureInteraction('ScrollAction'):
action_runner.ScrollElement(
selector='#card',
use_touch=True,
direction='up',
speed_in_pixels_per_second=150,
distance=400)
class SimpleTextPage(ToughSchedulingPage):
""" Why: Simple scrolling baseline"""
BASE_NAME = 'simple_text_page'
URL = 'file://../tough_scheduling_cases/simple_text_page.html'
class TouchHandlerScrollingPage(ToughSchedulingPage):
""" Why: Touch handler scrolling baseline"""
BASE_NAME = 'touch_handler_scrolling'
URL = 'file://../tough_scheduling_cases/touch_handler_scrolling.html'
class RafScrollingPage(ToughSchedulingPage):
""" Why: requestAnimationFrame scrolling baseline"""
BASE_NAME = 'raf'
URL = 'file://../tough_scheduling_cases/raf.html'
TAGS = ToughSchedulingPage.TAGS + [story_tags.REPRESENTATIVE_MAC_DESKTOP]
class RafCanvasScrollingPage(ToughSchedulingPage):
""" Why: Test canvas blocking behavior"""
BASE_NAME = 'raf_canvas'
URL = 'file://../tough_scheduling_cases/raf_canvas.html'
class RafAnimationScrollingPage(ToughSchedulingPage):
""" Why: Test a requestAnimationFrame with concurrent CSS animation"""
BASE_NAME = 'raf_animation'
URL = 'file://../tough_scheduling_cases/raf_animation.html'
class RafTouchAnimationScrollingPage(ToughSchedulingPage):
""" Why: Stress test for the scheduler"""
BASE_NAME = 'raf_touch_animation'
URL = 'file://../tough_scheduling_cases/raf_touch_animation.html'
class SynchronizedScrollOffsetPage(ToughSchedulingPage):
"""Why: For measuring the latency of scroll-synchronized effects."""
BASE_NAME = 'sync_scroll_offset'
URL = 'file://../tough_scheduling_cases/sync_scroll_offset.html'
def RunPageInteractions(self, action_runner):
with action_runner.CreateGestureInteraction('ScrollBounceAction'):
action_runner.ScrollBouncePage()
class SecondBatchJsPage(ToughSchedulingPage):
"""Why: For testing dynamically loading a large batch of Javascript and
running a part of it in response to user input.
"""
ABSTRACT_STORY = True
def RunPageInteractions(self, action_runner):
# Do a dummy tap to warm up the synthetic tap code path.
action_runner.TapElement(selector='div[id="spinner"]')
# Begin the action immediately because we want the page to update smoothly
# even while resources are being loaded.
action_runner.WaitForJavaScriptCondition('window.__ready !== undefined')
with action_runner.CreateGestureInteraction('LoadAction'):
action_runner.ExecuteJavaScript('kickOffLoading()')
action_runner.WaitForJavaScriptCondition('window.__ready')
# Click one second after the resources have finished loading.
action_runner.Wait(1)
action_runner.TapElement(selector='input[id="run"]')
# Wait for the test to complete.
action_runner.WaitForJavaScriptCondition('window.__finished')
class SecondBatchLightJsPage(SecondBatchJsPage):
BASE_NAME = 'second_batch_js_light'
URL = 'file://../tough_scheduling_cases/second_batch_js.html?light'
TAGS = SecondBatchJsPage.TAGS + [story_tags.REPRESENTATIVE_WIN_DESKTOP]
class SecondBatchJsMediumPage(SecondBatchJsPage):
BASE_NAME = 'second_batch_js_medium'
URL = 'file://../tough_scheduling_cases/second_batch_js.html?medium'
class SecondBatchJsHeavyPage(SecondBatchJsPage):
BASE_NAME = 'second_batch_js_heavy'
URL = 'file://../tough_scheduling_cases/second_batch_js.html?heavy'