Commit 92cb822d authored by Amy Qiu's avatar Amy Qiu Committed by Commit Bot

Merge key_desktop_move_cases into rendering.desktop

Refactor the key_desktop_move_cases page set and merge it into the
rendering.desktop page set.

Bug: 760553
Change-Id: Ib604085a2e3fcd83dc23ef36b4b7bf58a00b8ddb
Reviewed-on: https://chromium-review.googlesource.com/1066174
Commit-Queue: Amy Qiu <amyqiu@google.com>
Reviewed-by: default avatarNed Nguyen <nednguyen@google.com>
Cr-Commit-Position: refs/heads/master@{#562059}
parent 1efb28fb
...@@ -13,7 +13,6 @@ from telemetry import story as story_module ...@@ -13,7 +13,6 @@ from telemetry import story as story_module
class RenderingDesktop(perf_benchmark.PerfBenchmark): class RenderingDesktop(perf_benchmark.PerfBenchmark):
test = rendering.Rendering test = rendering.Rendering
page_set = page_sets.RenderingDesktopPageSet
SUPPORTED_PLATFORMS = [story_module.expectations.ALL_DESKTOP] SUPPORTED_PLATFORMS = [story_module.expectations.ALL_DESKTOP]
@classmethod @classmethod
...@@ -27,6 +26,9 @@ class RenderingDesktop(perf_benchmark.PerfBenchmark): ...@@ -27,6 +26,9 @@ class RenderingDesktop(perf_benchmark.PerfBenchmark):
'This is useful for analysing scrolling behaviour ' 'This is useful for analysing scrolling behaviour '
'with tools such as perf.') 'with tools such as perf.')
def CreateStorySet(self, options):
return page_sets.RenderingStorySet(platform='desktop')
@benchmark.Owner(emails=['sadrul@chromium.org', 'vmiura@chromium.org']) @benchmark.Owner(emails=['sadrul@chromium.org', 'vmiura@chromium.org'])
class RenderingMobile(perf_benchmark.PerfBenchmark): class RenderingMobile(perf_benchmark.PerfBenchmark):
......
...@@ -124,6 +124,8 @@ crbug.com/762165 [ Win ] rendering.desktop/google_plus [ Skip ] ...@@ -124,6 +124,8 @@ crbug.com/762165 [ Win ] rendering.desktop/google_plus [ Skip ]
crbug.com/762165 [ Win ] rendering.desktop/google_image_search [ Skip ] crbug.com/762165 [ Win ] rendering.desktop/google_image_search [ Skip ]
crbug.com/762165 [ Win ] rendering.desktop/google_docs [ Skip ] crbug.com/762165 [ Win ] rendering.desktop/google_docs [ Skip ]
crbug.com/841931 [ Win ] rendering.desktop/gmail [ Skip ] crbug.com/841931 [ Win ] rendering.desktop/gmail [ Skip ]
crbug.com/750131 [ Win ] rendering.desktop/gmail_move [ Skip ]
crbug.com/770904 [ Mac ] rendering.desktop/gmail_move [ Skip ]
# Benchmark: rendering.mobile # Benchmark: rendering.mobile
crbug.com/667432 [ All ] rendering.mobile/amazon_desktop [ Skip ] crbug.com/667432 [ All ] rendering.mobile/amazon_desktop [ Skip ]
...@@ -165,8 +167,8 @@ crbug.com/822925 [ Android_Webview ] smoothness.gpu_rasterization.top_25_smooth/ ...@@ -165,8 +167,8 @@ crbug.com/822925 [ Android_Webview ] smoothness.gpu_rasterization.top_25_smooth/
crbug.com/822925 [ Android_Webview ] smoothness.gpu_rasterization.tough_pinch_zoom_cases/http://games.yahoo.com [ Skip ] crbug.com/822925 [ Android_Webview ] smoothness.gpu_rasterization.tough_pinch_zoom_cases/http://games.yahoo.com [ Skip ]
# Benchmark: smoothness.key_desktop_move_cases # Benchmark: smoothness.key_desktop_move_cases
crbug.com/750131 [ Win ] smoothness.key_desktop_move_cases/https://mail.google.com/mail/ [ Skip ] crbug.com/750131 [ Win ] smoothness.key_desktop_move_cases/gmail_move [ Skip ]
crbug.com/770904 [ Mac ] smoothness.key_desktop_move_cases/https://mail.google.com/mail/ [ Skip ] crbug.com/770904 [ Mac ] smoothness.key_desktop_move_cases/gmail_move [ Skip ]
# Benchmark: smoothness.key_mobile_sites_smooth # Benchmark: smoothness.key_mobile_sites_smooth
crbug.com/756119 [ All ] smoothness.key_mobile_sites_smooth/digg [ Skip ] crbug.com/756119 [ All ] smoothness.key_mobile_sites_smooth/digg [ Skip ]
......
{ {
"archives": { "archives": {
"Maps": { "maps_move": {
"DEFAULT": "key_desktop_move_cases_000.wprgo" "DEFAULT": "key_desktop_move_cases_000.wprgo"
}, },
"https://mail.google.com/mail/": { "gmail_move": {
"DEFAULT": "key_desktop_move_cases_002.wprgo" "DEFAULT": "key_desktop_move_cases_002.wprgo"
} }
}, },
"description": "Describes the Web Page Replay archives for a story set. Don't edit by hand! Use record_wpr for updating.", "description": "Describes the Web Page Replay archives for a story set. Don't edit by hand! Use record_wpr for updating.",
"platform_specific": true "platform_specific": true
} }
\ No newline at end of file
...@@ -77,6 +77,12 @@ ...@@ -77,6 +77,12 @@
}, },
"google_image_search": { "google_image_search": {
"DEFAULT": "top_25_007.wprgo" "DEFAULT": "top_25_007.wprgo"
},
"maps_move": {
"DEFAULT": "key_desktop_move_cases_000.wprgo"
},
"gmail_move": {
"DEFAULT": "key_desktop_move_cases_002.wprgo"
} }
}, },
"description": "Describes the Web Page Replay archives for a story set. Don't edit by hand! Use record_wpr for updating.", "description": "Describes the Web Page Replay archives for a story set. Don't edit by hand! Use record_wpr for updating.",
......
# Copyright 2018 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.
""" This package contains page sets related to rendering"""
# Copyright 2015 The Chromium Authors. All rights reserved. # Copyright 2015 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be # Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file. # found in the LICENSE file.
from telemetry.page import page as page_module
from telemetry.page import shared_page_state from telemetry.page import shared_page_state
from telemetry import story from telemetry import story
from page_sets.login_helpers import google_login from page_sets.login_helpers import google_login
from page_sets.rendering import rendering_story
from page_sets.system_health import platforms
class KeyDesktopMoveCasesPage(page_module.Page): class KeyDesktopMoveCasesPage(rendering_story.RenderingStory):
"""Abstract base class for key desktop move cases pages."""
ABSTRACT_STORY = True
SUPPORTED_PLATFORMS = platforms.DESKTOP_ONLY
def __init__(self, url, page_set, name=''): def __init__(self,
if name == '': page_set,
name = url shared_page_state_class,
name_suffix='',
extra_browser_args=None):
super(KeyDesktopMoveCasesPage, self).__init__( super(KeyDesktopMoveCasesPage, self).__init__(
url=url, page_set=page_set, name=name, page_set=page_set,
shared_page_state_class=shared_page_state.SharedDesktopPageState) shared_page_state_class=shared_page_state_class,
name_suffix=name_suffix,
extra_browser_args=extra_browser_args)
class GmailMouseScrollPage(KeyDesktopMoveCasesPage): class GmailMouseScrollPage(KeyDesktopMoveCasesPage):
""" Why: productivity, top google properties """ """ Why: productivity, top google properties """
BASE_NAME = 'gmail_move'
def __init__(self, page_set): URL = 'https://mail.google.com/mail/'
def __init__(self,
page_set,
shared_page_state_class=shared_page_state.SharedDesktopPageState,
name_suffix='',
extra_browser_args=None):
super(GmailMouseScrollPage, self).__init__( super(GmailMouseScrollPage, self).__init__(
url='https://mail.google.com/mail/', page_set=page_set,
page_set=page_set) shared_page_state_class=shared_page_state_class,
name_suffix=name_suffix,
extra_browser_args=extra_browser_args
)
self.scrollable_element_function = ''' self.scrollable_element_function = '''
function(callback) { function(callback) {
...@@ -85,14 +101,20 @@ class GmailMouseScrollPage(KeyDesktopMoveCasesPage): ...@@ -85,14 +101,20 @@ class GmailMouseScrollPage(KeyDesktopMoveCasesPage):
class GoogleMapsPage(KeyDesktopMoveCasesPage): class GoogleMapsPage(KeyDesktopMoveCasesPage):
""" Why: productivity, top google properties; Supports drag gestures """ """ Why: productivity, top google properties; Supports drag gestures """
BASE_NAME = 'maps_move'
def __init__(self, page_set): URL = 'https://www.google.co.uk/maps/@51.5043968,-0.1526806'
def __init__(self,
page_set,
shared_page_state_class=shared_page_state.SharedDesktopPageState,
name_suffix='',
extra_browser_args=None):
super(GoogleMapsPage, self).__init__( super(GoogleMapsPage, self).__init__(
url='https://www.google.co.uk/maps/@51.5043968,-0.1526806',
page_set=page_set, page_set=page_set,
name='Maps') shared_page_state_class=shared_page_state_class,
name_suffix=name_suffix,
extra_browser_args=extra_browser_args)
def RunNavigateSteps(self, action_runner): def RunNavigateSteps(self, action_runner):
super(GoogleMapsPage, self).RunNavigateSteps(action_runner) super(GoogleMapsPage, self).RunNavigateSteps(action_runner)
...@@ -116,7 +138,7 @@ class KeyDesktopMoveCasesPageSet(story.StorySet): ...@@ -116,7 +138,7 @@ class KeyDesktopMoveCasesPageSet(story.StorySet):
def __init__(self): def __init__(self):
super(KeyDesktopMoveCasesPageSet, self).__init__( super(KeyDesktopMoveCasesPageSet, self).__init__(
archive_data_file='data/key_desktop_move_cases.json', archive_data_file='../data/key_desktop_move_cases.json',
cloud_storage_bucket=story.PARTNER_BUCKET) cloud_storage_bucket=story.PARTNER_BUCKET)
self.AddStory(GmailMouseScrollPage(self)) self.AddStory(GmailMouseScrollPage(self))
......
# Copyright 2018 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 os
from page_sets.rendering import rendering_story
from page_sets.rendering import story_tags
from page_sets.system_health import platforms
from telemetry import story
from telemetry.page import shared_page_state
from py_utils import discover
class RenderingStorySet(story.StorySet):
"""Stories related to rendering."""
def __init__(self, platform, scroll_forever=False):
super(RenderingStorySet, self).__init__(
archive_data_file=('../data/rendering_%s.json' % platform),
cloud_storage_bucket=story.PARTNER_BUCKET)
assert platform in platforms.ALL_PLATFORMS
if platform == platforms.MOBILE:
shared_page_state_class = shared_page_state.SharedMobilePageState
elif platform == platforms.DESKTOP:
shared_page_state_class = shared_page_state.SharedDesktopPageState
else:
shared_page_state_class = shared_page_state.SharedPageState
self.scroll_forever = scroll_forever
for story_class in _IterAllRenderingStoryClasses():
if (story_class.ABSTRACT_STORY or
platform not in story_class.SUPPORTED_PLATFORMS):
continue
self.AddStory(story_class(
page_set=self,
shared_page_state_class=shared_page_state_class))
if (platform == platforms.MOBILE and
story_class.TAGS and
story_tags.GPU_RASTERIZATION in story_class.TAGS):
self.AddStory(story_class(
page_set=self,
shared_page_state_class=shared_page_state_class,
name_suffix='_desktop_gpu_raster',
extra_browser_args=['--force-gpu-rasterization']))
if (platform == platforms.MOBILE and
story_class.TAGS and
story_tags.SYNC_SCROLL in story_class.TAGS):
self.AddStory(story_class(
page_set=self,
shared_page_state_class=shared_page_state_class,
name_suffix='_sync_scroll',
extra_browser_args=['--disable-threaded-scrolling']))
class DesktopRenderingStorySet(RenderingStorySet):
"""Desktop stories related to rendering.
Note: This story set is only intended to be used for recording stories via
tools/perf/record_wpr. If you would like to use it in a benchmark, please use
the generic RenderingStorySet class instead (you'll need to override the
CreateStorySet method of your benchmark).
"""
def __init__(self):
super(DesktopRenderingStorySet, self).__init__(platform='desktop')
def _IterAllRenderingStoryClasses():
start_dir = os.path.dirname(os.path.abspath(__file__))
# Sort the classes by their names so that their order is stable and
# deterministic.
for _, cls in sorted(discover.DiscoverClasses(
start_dir=start_dir,
top_level_dir=os.path.dirname(start_dir),
base_class=rendering_story.RenderingStory).iteritems()):
yield cls
# Copyright 2018 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.rendering import story_tags
from page_sets.system_health import platforms
from telemetry.page import page
class _MetaRenderingStory(type):
"""Metaclass for RenderingStory."""
@property
def ABSTRACT_STORY(cls):
"""Class field marking whether the class is abstract.
If true, the page will NOT be instantiated and added to a Rendering
page set. This field is NOT inherited by subclasses (that's why it's
defined on the metaclass).
"""
return cls.__dict__.get('ABSTRACT_STORY', False)
class RenderingStory(page.Page):
"""Abstract base class for Rendering user stories."""
__metaclass__ = _MetaRenderingStory
BASE_NAME = NotImplemented
URL = NotImplemented
ABSTRACT_STORY = True
SUPPORTED_PLATFORMS = platforms.ALL_PLATFORMS
TAGS = None
PLATFORM_SPECIFIC = False
def __init__(self,
page_set,
shared_page_state_class,
name_suffix='',
extra_browser_args=None):
tags = []
if self.TAGS:
for t in self.TAGS:
assert t in story_tags.ALL_TAGS
tags.append(t.name)
super(RenderingStory, self).__init__(
page_set=page_set,
name=self.BASE_NAME + name_suffix,
url=self.URL,
tags=tags,
platform_specific=self.PLATFORM_SPECIFIC,
shared_page_state_class=shared_page_state_class,
extra_browser_args=extra_browser_args)
# Copyright 2018 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 collections
Tag = collections.namedtuple('Tag', ['name', 'description'])
# Below are tags that describe various aspect of rendering stories.
# A story can have multiple tags. All the tags should be nouns.
GPU_RASTERIZATION = Tag(
'gpu_rasterization', 'Story tests performance with GPU rasterization.')
SYNC_SCROLL = Tag(
'sync_scroll', 'Story tests rendering with synchronous scrolling.')
def _ExtractAllTags():
all_tag_names = set()
all_tags = []
# Collect all the tags defined in this module. Also assert that there is no
# duplicate tag names.
for obj in globals().values():
if isinstance(obj, Tag):
all_tags.append(obj)
assert obj.name not in all_tag_names, 'Duplicate tag name: %s' % obj.name
all_tag_names.add(obj.name)
return all_tags
ALL_TAGS = _ExtractAllTags()
# Copyright 2018 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.login_helpers import google_login
from page_sets.rendering import rendering_story
from page_sets.rendering import story_tags
class TopRealWorldPage(rendering_story.RenderingStory):
ABSTRACT_STORY = True
TAGS = [story_tags.GPU_RASTERIZATION]
def __init__(self,
page_set,
shared_page_state_class,
name_suffix='',
extra_browser_args=None):
super(TopRealWorldPage, 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):
action_runner.Wait(1)
with action_runner.CreateGestureInteraction('ScrollAction'):
action_runner.ScrollPage()
if self.story_set.scroll_forever:
while True:
action_runner.ScrollPage(direction='up')
action_runner.ScrollPage(direction='down')
class GoogleWebSearchPage(TopRealWorldPage):
""" Why: top google property; a google tab is often open """
BASE_NAME = 'google_web_search'
URL = 'https://www.google.com/#hl=en&q=barack+obama'
def __init__(self,
page_set,
shared_page_state_class=shared_page_state.SharedPageState,
name_suffix='',
extra_browser_args=None):
super(GoogleWebSearchPage, 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 RunNavigateSteps(self, action_runner):
super(GoogleWebSearchPage, self).RunNavigateSteps(action_runner)
action_runner.WaitForElement(text='Next')
class GoogleImageSearchPage(TopRealWorldPage):
""" Why: tough image case; top google properties """
BASE_NAME = 'google_image_search'
URL = 'https://www.google.com/search?q=cats&tbm=isch'
def __init__(self,
page_set,
shared_page_state_class=shared_page_state.SharedPageState,
name_suffix='',
extra_browser_args=None):
super(GoogleImageSearchPage, 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 RunNavigateSteps(self, action_runner):
google_login.LoginGoogleAccount(action_runner, 'googletest')
super(GoogleImageSearchPage, self).RunNavigateSteps(action_runner)
class GmailPage(TopRealWorldPage):
""" Why: productivity, top google properties """
ABSTRACT_STORY = True
URL = 'https://mail.google.com/mail/'
def __init__(self,
page_set,
shared_page_state_class=shared_page_state.SharedPageState,
name_suffix='',
extra_browser_args=None):
super(GmailPage, 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 RunNavigateSteps(self, action_runner):
google_login.LoginGoogleAccount(action_runner, 'googletest')
super(GmailPage, self).RunNavigateSteps(action_runner)
action_runner.WaitForJavaScriptCondition(
'window.gmonkey !== undefined &&'
'document.getElementById("gb") !== null')
class GoogleCalendarPage(TopRealWorldPage):
""" Why: productivity, top google properties """
ABSTRACT_STORY = True
URL='https://www.google.com/calendar/'
def __init__(self,
page_set,
shared_page_state_class=shared_page_state.SharedPageState,
name_suffix='',
extra_browser_args=None):
super(GoogleCalendarPage, 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 RunNavigateSteps(self, action_runner):
google_login.LoginGoogleAccount(action_runner, 'googletest')
super(GoogleCalendarPage, self).RunNavigateSteps(action_runner)
action_runner.Wait(2)
action_runner.WaitForElement('div[class~="navForward"]')
action_runner.ExecuteJavaScript("""
(function() {
var elem = document.createElement('meta');
elem.name='viewport';
elem.content='initial-scale=1';
document.body.appendChild(elem);
})();""")
action_runner.Wait(1)
class GoogleDocPage(TopRealWorldPage):
""" Why: productivity, top google properties; Sample doc in the link """
ABSTRACT_STORY = True
# pylint: disable=line-too-long
URL = 'https://docs.google.com/document/d/1X-IKNjtEnx-WW5JIKRLsyhz5sbsat3mfTpAPUSX3_s4/view'
def __init__(self,
page_set,
shared_page_state_class=shared_page_state.SharedPageState,
name_suffix='',
extra_browser_args=None):
super(GoogleDocPage, 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 RunNavigateSteps(self, action_runner):
google_login.LoginGoogleAccount(action_runner, 'googletest')
super(GoogleDocPage, self).RunNavigateSteps(action_runner)
action_runner.Wait(2)
action_runner.WaitForJavaScriptCondition(
'document.getElementsByClassName("kix-appview-editor").length')
class GooglePlusPage(TopRealWorldPage):
""" Why: social; top google property; Public profile; infinite scrolls """
BASE_NAME = 'google_plus'
URL = 'https://plus.google.com/110031535020051778989/posts'
def __init__(self,
page_set,
shared_page_state_class=shared_page_state.SharedPageState,
name_suffix='',
extra_browser_args=None):
super(GooglePlusPage, 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 RunNavigateSteps(self, action_runner):
google_login.LoginGoogleAccount(action_runner, 'googletest')
super(GooglePlusPage, self).RunNavigateSteps(action_runner)
action_runner.WaitForElement(text='Home')
class YoutubePage(TopRealWorldPage):
""" Why: #3 (Alexa global) """
BASE_NAME = 'youtube'
URL = 'http://www.youtube.com'
def __init__(self,
page_set,
shared_page_state_class=shared_page_state.SharedPageState,
name_suffix='',
extra_browser_args=None):
super(YoutubePage, 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 RunNavigateSteps(self, action_runner):
google_login.LoginGoogleAccount(action_runner, 'googletest')
super(YoutubePage, self).RunNavigateSteps(action_runner)
action_runner.Wait(2)
class BlogspotPage(TopRealWorldPage):
""" Why: #11 (Alexa global), google property; some blogger layouts have
infinite scroll but more interesting """
BASE_NAME = 'blogspot'
URL = 'http://googlewebmastercentral.blogspot.com/'
def __init__(self,
page_set,
shared_page_state_class=shared_page_state.SharedPageState,
name_suffix='',
extra_browser_args=None):
super(BlogspotPage, 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 RunNavigateSteps(self, action_runner):
super(BlogspotPage, self).RunNavigateSteps(action_runner)
action_runner.WaitForElement(text='accessibility')
class WordpressPage(TopRealWorldPage):
""" Why: #18 (Alexa global), Picked an interesting post """
BASE_NAME = 'wordpress'
# pylint: disable=line-too-long
URL = 'http://en.blog.wordpress.com/2012/09/04/freshly-pressed-editors-picks-for-august-2012/'
def __init__(self,
page_set,
shared_page_state_class=shared_page_state.SharedPageState,
name_suffix='',
extra_browser_args=None):
super(WordpressPage, 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 RunNavigateSteps(self, action_runner):
super(WordpressPage, self).RunNavigateSteps(action_runner)
action_runner.WaitForElement(
# pylint: disable=line-too-long
'a[href="http://en.blog.wordpress.com/2012/08/30/new-themes-able-and-sight/"]'
)
class FacebookPage(TopRealWorldPage):
""" Why: top social,Public profile """
BASE_NAME = 'facebook'
URL = 'https://www.facebook.com/barackobama'
def __init__(self,
page_set,
shared_page_state_class=shared_page_state.SharedPageState,
name_suffix='',
extra_browser_args=None):
super(FacebookPage, 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 RunNavigateSteps(self, action_runner):
super(FacebookPage, self).RunNavigateSteps(action_runner)
action_runner.WaitForElement(text='Videos')
class LinkedinPage(TopRealWorldPage):
""" Why: #12 (Alexa global), Public profile. """
BASE_NAME = 'linkedin'
URL = 'http://www.linkedin.com/in/linustorvalds'
def __init__(self,
page_set,
shared_page_state_class=shared_page_state.SharedPageState,
name_suffix='',
extra_browser_args=None):
super(LinkedinPage, self).__init__(
page_set=page_set,
shared_page_state_class=shared_page_state_class,
name_suffix=name_suffix,
extra_browser_args=extra_browser_args)
class WikipediaPage(TopRealWorldPage):
""" Why: #6 (Alexa) most visited worldwide,Picked an interesting page. """
BASE_NAME = 'wikipedia'
URL = 'http://en.wikipedia.org/wiki/Wikipedia'
def __init__(self,
page_set,
shared_page_state_class=shared_page_state.SharedPageState,
name_suffix='',
extra_browser_args=None):
super(WikipediaPage, self).__init__(
page_set=page_set,
shared_page_state_class=shared_page_state_class,
name_suffix=name_suffix,
extra_browser_args=extra_browser_args)
class TwitterPage(TopRealWorldPage):
""" Why: #8 (Alexa global),Picked an interesting page """
BASE_NAME = 'twitter'
URL = 'https://twitter.com/katyperry'
def __init__(self,
page_set,
shared_page_state_class=shared_page_state.SharedPageState,
name_suffix='',
extra_browser_args=None):
super(TwitterPage, 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 RunNavigateSteps(self, action_runner):
super(TwitterPage, self).RunNavigateSteps(action_runner)
action_runner.Wait(2)
class PinterestPage(TopRealWorldPage):
""" Why: #37 (Alexa global) """
BASE_NAME = 'pinterest'
URL = 'http://pinterest.com'
def __init__(self,
page_set,
shared_page_state_class=shared_page_state.SharedPageState,
name_suffix='',
extra_browser_args=None):
super(PinterestPage, self).__init__(
page_set=page_set,
shared_page_state_class=shared_page_state_class,
name_suffix=name_suffix,
extra_browser_args=extra_browser_args)
class ESPNPage(TopRealWorldPage):
""" Why: #1 sports """
ABSTRACT_STORY = True
URL = 'http://espn.go.com'
def __init__(self,
page_set,
shared_page_state_class=shared_page_state.SharedPageState,
name_suffix='',
extra_browser_args=None):
super(ESPNPage, self).__init__(
page_set=page_set,
shared_page_state_class=shared_page_state_class,
name_suffix=name_suffix,
extra_browser_args=extra_browser_args)
class WeatherPage(TopRealWorldPage):
""" Why: #7 (Alexa news); #27 total time spent, picked interesting page. """
BASE_NAME = 'weather.com'
URL = 'http://www.weather.com/weather/right-now/Mountain+View+CA+94043'
def __init__(self,
page_set,
shared_page_state_class=shared_page_state.SharedPageState,
name_suffix='',
extra_browser_args=None):
super(WeatherPage, self).__init__(
page_set=page_set,
shared_page_state_class=shared_page_state_class,
name_suffix=name_suffix,
extra_browser_args=extra_browser_args)
class YahooGamesPage(TopRealWorldPage):
""" Why: #1 games according to Alexa (with actual games in it) """
BASE_NAME = 'yahoo_games'
URL = 'http://games.yahoo.com'
def __init__(self,
page_set,
shared_page_state_class=shared_page_state.SharedPageState,
name_suffix='',
extra_browser_args=None):
super(YahooGamesPage, 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 RunNavigateSteps(self, action_runner):
super(YahooGamesPage, self).RunNavigateSteps(action_runner)
action_runner.Wait(2)
class GmailSmoothPage(GmailPage):
""" Why: productivity, top google properties """
BASE_NAME = 'gmail'
def RunPageInteractions(self, action_runner):
action_runner.ExecuteJavaScript("""
gmonkey.load('2.0', function(api) {
window.__scrollableElementForTelemetry = api.getScrollableElement();
});""")
action_runner.WaitForJavaScriptCondition(
'window.__scrollableElementForTelemetry != null')
action_runner.Wait(1)
with action_runner.CreateGestureInteraction('ScrollAction'):
action_runner.ScrollElement(
element_function='window.__scrollableElementForTelemetry')
if self.story_set.scroll_forever:
while True:
action_runner.ScrollElement(
direction='up',
element_function='window.__scrollableElementForTelemetry')
action_runner.ScrollElement(
direction='down',
element_function='window.__scrollableElementForTelemetry')
class GoogleCalendarSmoothPage(GoogleCalendarPage):
""" Why: productivity, top google properties """
BASE_NAME='google_calendar'
def RunPageInteractions(self, action_runner):
action_runner.Wait(1)
with action_runner.CreateGestureInteraction('ScrollAction'):
action_runner.ScrollElement(selector='#scrolltimedeventswk')
if self.story_set.scroll_forever:
while True:
action_runner.ScrollElement(
direction='up', selector='#scrolltimedeventswk')
action_runner.ScrollElement(
direction='down', selector='#scrolltimedeventswk')
class GoogleDocSmoothPage(GoogleDocPage):
""" Why: productivity, top google properties; Sample doc in the link """
BASE_NAME='google_docs'
def RunPageInteractions(self, action_runner):
action_runner.Wait(1)
with action_runner.CreateGestureInteraction('ScrollAction'):
action_runner.ScrollElement(selector='.kix-appview-editor')
if self.story_set.scroll_forever:
while True:
action_runner.ScrollElement(
direction='up', selector='.kix-appview-editor')
action_runner.ScrollElement(
direction='down', selector='.kix-appview-editor')
class ESPNSmoothPage(ESPNPage):
""" Why: #1 sports """
BASE_NAME='espn'
def RunPageInteractions(self, action_runner):
action_runner.Wait(1)
with action_runner.CreateGestureInteraction('ScrollAction'):
action_runner.ScrollPage(left_start_ratio=0.1)
if self.story_set.scroll_forever:
while True:
action_runner.ScrollPage(direction='up', left_start_ratio=0.1)
action_runner.ScrollPage(direction='down', left_start_ratio=0.1)
class YahooNewsPage(TopRealWorldPage):
"""Why: #1 news worldwide (Alexa global)"""
BASE_NAME = 'yahoo_news'
URL = 'http://news.yahoo.com'
class CNNNewsPage(TopRealWorldPage):
"""Why: #2 news worldwide"""
BASE_NAME = 'cnn'
URL = 'http://www.cnn.com'
class AmazonPage(TopRealWorldPage):
# Why: #1 world commerce website by visits; #3 commerce in the US by
# time spent
BASE_NAME = 'amazon'
URL = 'http://www.amazon.com'
class EbayPage(TopRealWorldPage):
# Why: #1 commerce website by time spent by users in US
BASE_NAME = 'ebay'
URL = 'http://www.ebay.com'
class BookingPage(TopRealWorldPage):
# Why: #1 Alexa recreation
BASE_NAME = 'booking.com'
URL = 'http://booking.com'
class YahooAnswersPage(TopRealWorldPage):
# Why: #1 Alexa reference
BASE_NAME = 'yahoo_answers'
URL = 'http://answers.yahoo.com'
class YahooSportsPage(TopRealWorldPage):
# Why: #1 Alexa sports
BASE_NAME = 'yahoo_sports'
URL = 'http://sports.yahoo.com/'
class TechCrunchPage(TopRealWorldPage):
# Why: top tech blog
BASE_NAME = 'techcrunch'
URL = 'http://techcrunch.com'
# Copyright 2018 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 telemetry import story
from page_sets import top_25_smooth
class _SharedPageState(shared_page_state.SharedDesktopPageState):
pass
class RenderingDesktopPageSet(story.StorySet):
""" Page set for measuring rendering performance on desktop. """
def __init__(self, scroll_forever=False):
super(RenderingDesktopPageSet, self).__init__(
archive_data_file='data/rendering_desktop.json',
cloud_storage_bucket=story.PARTNER_BUCKET)
self.scroll_forever = scroll_forever
top_25_smooth.AddPagesToPageSet(
page_set=self,
shared_page_state_class=_SharedPageState)
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment