blob: a0c6b294067b7c8faa6d3bd5fa3a6ab21ad84ea3 [file] [log] [blame]
# Copyright 2015 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 page_sets import android_screen_restoration_shared_state
from page_sets.rendering import rendering_story
from page_sets.rendering import story_tags
from page_sets.system_health import platforms
class KeyIdlePowerPage(rendering_story.RenderingStory):
ABSTRACT_STORY = True
SUPPORTED_PLATFORMS = platforms.MOBILE_ONLY
TAGS = [story_tags.KEY_IDLE_POWER]
TURN_SCREEN_OFF = True
DURATION_SECONDS = 20
def __init__(self,
page_set,
shared_page_state_class=(android_screen_restoration_shared_state
.AndroidScreenRestorationSharedState),
name_suffix='',
extra_browser_args=None):
super(KeyIdlePowerPage, self).__init__(
page_set=page_set,
shared_page_state_class=shared_page_state_class,
name_suffix=name_suffix,
extra_browser_args=['--report-silk-details','--disable-top-sites'])
def RunNavigateSteps(self, action_runner):
super(KeyIdlePowerPage, self).RunNavigateSteps(action_runner)
action_runner.Wait(2)
if self.TURN_SCREEN_OFF:
action_runner.tab.browser.platform.android_action_runner.TurnScreenOff()
# We're not interested in tracking activity that occurs immediately after
# the screen is turned off. Several seconds should be enough time for the
# browser to "settle down" into an idle state.
action_runner.Wait(2)
def RunPageInteractions(self, action_runner):
# The page interaction is simply waiting in an idle state.
with action_runner.CreateInteraction('IdleWaiting'):
action_runner.Wait(self.DURATION_SECONDS)
# Why: Ensure minimal activity for static, empty pages in the foreground.
class BlankIdlePowerPage(KeyIdlePowerPage):
BASE_NAME = 'idle_power_blank'
URL = 'file://../key_idle_power_cases/blank.html'
TURN_SCREEN_OFF = False
# Why: Ensure animated GIFs aren't processed when Chrome is backgrounded.
class AnimatedGifIdlePowerPage(KeyIdlePowerPage):
BASE_NAME = 'idle_power_animated_gif'
URL = 'file://../key_idle_power_cases/animated-gif.html'
# Why: Ensure CSS animations aren't processed when Chrome is backgrounded.
class CssAnimationIdlePowerPage(KeyIdlePowerPage):
BASE_NAME = 'idle_power_css_animation'
URL = 'file://../key_idle_power_cases/css-animation.html'
# Why: Ensure rAF is suppressed when Chrome is backgrounded.
class RequestAnimationIdlePowerPage(KeyIdlePowerPage):
BASE_NAME = 'idle_power_request_animation_frame'
URL = 'file://../key_idle_power_cases/request-animation-frame.html'
# Why: Ensure setTimeout is throttled when Chrome is backgrounded.
class SetTimeoutIdlePowerPage(KeyIdlePowerPage):
BASE_NAME = 'idle_power_set_timetout'
URL = 'file://../key_idle_power_cases/set-timeout.html'
# Why: Ensure that activity strictly diminishes the longer the idle time.
class SetTimeoutLongIdlePowerPage(KeyIdlePowerPage):
BASE_NAME = 'idle_power_set_timeout_long'
URL = 'file://../key_idle_power_cases/set-timeout.html'
# 90 seconds ensures the capture of activity after the 60-second
# PowerMonitor suspend signal.
DURATION_SECONDS = 90