Index: tools/perf/page_sets/tough_ad_cases.py |
diff --git a/tools/perf/page_sets/tough_ad_cases.py b/tools/perf/page_sets/tough_ad_cases.py |
index 969296cdbccd2c5e3775914595fb1a274c544128..a944397d25fc9da099ba5f2ad84acfaf0588a7cb 100644 |
--- a/tools/perf/page_sets/tough_ad_cases.py |
+++ b/tools/perf/page_sets/tough_ad_cases.py |
@@ -2,7 +2,8 @@ |
# Use of this source code is governed by a BSD-style license that can be |
# found in the LICENSE file. |
-from telemetry.core import exceptions |
+from page_sets import repeatable_synthesize_scroll_gesture_shared_state |
+ |
from telemetry.page import page as page_module |
from telemetry import story |
@@ -34,11 +35,16 @@ class SwiffyPage(page_module.Page): |
class ScrollingPage(page_module.Page): |
- def __init__(self, url, page_set, top_start_ratio=.5, |
- make_javascript_deterministic=True): |
- super(ScrollingPage, self).__init__(url=url, page_set=page_set, |
- make_javascript_deterministic=make_javascript_deterministic) |
- self._top_start_ratio = top_start_ratio |
+ def __init__(self, url, page_set, make_javascript_deterministic=True, |
+ y_scroll_distance_multiplier=0.5): |
+ super(ScrollingPage, self).__init__( |
+ url=url, |
+ page_set=page_set, |
+ make_javascript_deterministic=make_javascript_deterministic, |
+ shared_page_state_class=( |
+ repeatable_synthesize_scroll_gesture_shared_state.\ |
+ RepeatableSynthesizeScrollGestureSharedState)) |
+ self._y_scroll_distance_multiplier = y_scroll_distance_multiplier |
def RunNavigateSteps(self, action_runner): |
# Rewrite file urls to point to the replay server instead. |
@@ -49,27 +55,19 @@ class ScrollingPage(page_module.Page): |
url = self._url |
action_runner.tab.Navigate(url) |
- # Give the page one second to become interactive and start scrolling after |
- # the timeout regardless of the document's ready state. |
- try: |
- action_runner.tab.WaitForDocumentReadyStateToBeInteractiveOrBetter(1) |
- except exceptions.TimeoutException: |
- pass |
- # Wait for the document to have a body so that we can scroll. |
- # Simultaneously (to reduce latency), insert a no-op touch handler on the |
- # body. Most ads have touch handlers and we want to simulate the worst case |
- # of the user trying to scroll the page by grabbing an ad. |
+ # Wait for the page to be scrollable. Simultaneously (to reduce latency due |
+ # to main thread round trips), insert a no-op touch handler on the body. |
+ # Most ads have touch handlers and we want to simulate the worst case of the |
+ # user trying to scroll the page by grabbing an ad. |
action_runner.WaitForJavaScriptCondition( |
- '!(document.body == null || ' |
- ' document.body.addEventListener("touchstart", function() {}))') |
+ 'document.body != null && ' |
+ 'document.body.scrollHeight > window.innerHeight && ' |
+ '!document.body.addEventListener("touchstart", function() {})') |
def RunPageInteractions(self, action_runner): |
- for _ in range(10): |
- with action_runner.CreateGestureInteraction('ScrollAction', |
- repeatable=True): |
- action_runner.ScrollPage(distance=500, |
- top_start_ratio=self._top_start_ratio) |
- action_runner.Wait(.25) |
+ action_runner.RepeatableBrowserDrivenScroll( |
+ y_scroll_distance_ratio=self._y_scroll_distance_multiplier, |
+ repeat_count=9) |
class ScrollingForbesPage(ScrollingPage): |
@@ -79,8 +77,7 @@ class ScrollingForbesPage(ScrollingPage): |
# which occasionally causes us to try scrolling from outside the |
# screen. Start at the very top of the viewport to avoid this. |
super(ScrollingForbesPage, self).__init__( |
- url=url, page_set=page_set, top_start_ratio=0, |
- make_javascript_deterministic=False) |
+ url=url, page_set=page_set, make_javascript_deterministic=False) |
def RunNavigateSteps(self, action_runner): |
super(ScrollingForbesPage, self).RunNavigateSteps(action_runner) |
@@ -158,7 +155,8 @@ class ScrollingToughAdCasesPageSet(story.StorySet): |
cloud_storage_bucket=story.INTERNAL_BUCKET) |
self.AddStory(ScrollingPage('file://tough_ad_cases/' |
- 'swiffy_collection.html', self, make_javascript_deterministic=False)) |
+ 'swiffy_collection.html', self, make_javascript_deterministic=False, |
+ y_scroll_distance_multiplier=0.25)) |
self.AddStory(ScrollingPage('file://tough_ad_cases/' |
'swiffy_webgl_collection.html', |
self, make_javascript_deterministic=False)) |
@@ -166,15 +164,16 @@ class ScrollingToughAdCasesPageSet(story.StorySet): |
self.AddStory(ScrollingForbesPage('http://www.forbes.com/sites/parmyolson/' |
'2015/07/29/jana-mobile-data-facebook-internet-org/', self)) |
self.AddStory(ScrollingPage('http://androidcentral.com', self)) |
- self.AddStory(ScrollingPage('http://mashable.com', self, top_start_ratio=0)) |
+ self.AddStory(ScrollingPage('http://mashable.com', self, |
+ y_scroll_distance_multiplier=0.25)) |
self.AddStory(ScrollingPage('http://www.androidauthority.com/' |
'reduce-data-use-turn-on-data-compression-in-chrome-630064/', self)) |
self.AddStory(ScrollingPage('http://www.cnn.com/2015/01/09/politics/' |
- 'nebraska-keystone-pipeline/index.html', self, top_start_ratio=0)) |
+ 'nebraska-keystone-pipeline/index.html', self)) |
# Disabled: crbug.com/520509 |
#self.AddStory(ScrollingPage('http://time.com/3977891/' |
# 'donald-trump-debate-republican/', self)) |
self.AddStory(ScrollingPage('http://www.theguardian.com/uk', self)) |
- self.AddStory(ScrollingPage('http://m.tmz.com', self)) |
- self.AddStory(ScrollingPage('http://androidpolice.com', self, |
- top_start_ratio=0)) |
+ self.AddStory(ScrollingPage('http://m.tmz.com', self, |
+ y_scroll_distance_multiplier=0.25)) |
+ self.AddStory(ScrollingPage('http://androidpolice.com', self)) |