Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(11)

Side by Side Diff: tools/perf/page_sets/tough_ad_cases.py

Issue 1291513004: smoothness.scrolling_tough_ad_cases to use browser driven scrolls (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Final nits Created 5 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 # Copyright 2015 The Chromium Authors. All rights reserved. 1 # Copyright 2015 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be 2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file. 3 # found in the LICENSE file.
4 4
5 from telemetry.core import exceptions 5 from page_sets import repeatable_synthesize_scroll_gesture_shared_state
6
6 from telemetry.page import page as page_module 7 from telemetry.page import page as page_module
7 from telemetry import story 8 from telemetry import story
8 9
9 10
10 class SwiffyPage(page_module.Page): 11 class SwiffyPage(page_module.Page):
11 12
12 def __init__(self, url, page_set): 13 def __init__(self, url, page_set):
13 super(SwiffyPage, self).__init__(url=url, page_set=page_set, 14 super(SwiffyPage, self).__init__(url=url, page_set=page_set,
14 make_javascript_deterministic=False) 15 make_javascript_deterministic=False)
15 16
(...skipping 11 matching lines...) Expand all
27 'document.getElementsByTagName("head")[0].appendChild(meta);') 28 'document.getElementsByTagName("head")[0].appendChild(meta);')
28 action_runner.EvaluateJavaScript(viewport_js) 29 action_runner.EvaluateJavaScript(viewport_js)
29 30
30 def RunPageInteractions(self, action_runner): 31 def RunPageInteractions(self, action_runner):
31 with action_runner.CreateInteraction('ToughAd'): 32 with action_runner.CreateInteraction('ToughAd'):
32 action_runner.Wait(10) 33 action_runner.Wait(10)
33 34
34 35
35 class ScrollingPage(page_module.Page): 36 class ScrollingPage(page_module.Page):
36 37
37 def __init__(self, url, page_set, top_start_ratio=.5, 38 def __init__(self, url, page_set, make_javascript_deterministic=True,
38 make_javascript_deterministic=True): 39 y_scroll_distance_multiplier=0.5):
39 super(ScrollingPage, self).__init__(url=url, page_set=page_set, 40 super(ScrollingPage, self).__init__(
40 make_javascript_deterministic=make_javascript_deterministic) 41 url=url,
41 self._top_start_ratio = top_start_ratio 42 page_set=page_set,
43 make_javascript_deterministic=make_javascript_deterministic,
44 shared_page_state_class=(
45 repeatable_synthesize_scroll_gesture_shared_state.\
46 RepeatableSynthesizeScrollGestureSharedState))
47 self._y_scroll_distance_multiplier = y_scroll_distance_multiplier
42 48
43 def RunNavigateSteps(self, action_runner): 49 def RunNavigateSteps(self, action_runner):
44 # Rewrite file urls to point to the replay server instead. 50 # Rewrite file urls to point to the replay server instead.
45 if self.is_file: 51 if self.is_file:
46 url = self.file_path_url_with_scheme 52 url = self.file_path_url_with_scheme
47 url = action_runner.tab.browser.http_server.UrlOf(url[len('file://'):]) 53 url = action_runner.tab.browser.http_server.UrlOf(url[len('file://'):])
48 else: 54 else:
49 url = self._url 55 url = self._url
50 action_runner.tab.Navigate(url) 56 action_runner.tab.Navigate(url)
51 57
52 # Give the page one second to become interactive and start scrolling after 58 # Wait for the page to be scrollable. Simultaneously (to reduce latency due
53 # the timeout regardless of the document's ready state. 59 # to main thread round trips), insert a no-op touch handler on the body.
54 try: 60 # Most ads have touch handlers and we want to simulate the worst case of the
55 action_runner.tab.WaitForDocumentReadyStateToBeInteractiveOrBetter(1) 61 # user trying to scroll the page by grabbing an ad.
56 except exceptions.TimeoutException:
57 pass
58 # Wait for the document to have a body so that we can scroll.
59 # Simultaneously (to reduce latency), insert a no-op touch handler on the
60 # body. Most ads have touch handlers and we want to simulate the worst case
61 # of the user trying to scroll the page by grabbing an ad.
62 action_runner.WaitForJavaScriptCondition( 62 action_runner.WaitForJavaScriptCondition(
63 '!(document.body == null || ' 63 'document.body != null && '
64 ' document.body.addEventListener("touchstart", function() {}))') 64 'document.body.scrollHeight > window.innerHeight && '
65 '!document.body.addEventListener("touchstart", function() {})')
65 66
66 def RunPageInteractions(self, action_runner): 67 def RunPageInteractions(self, action_runner):
67 for _ in range(10): 68 action_runner.RepeatableBrowserDrivenScroll(
68 with action_runner.CreateGestureInteraction('ScrollAction', 69 y_scroll_distance_ratio=self._y_scroll_distance_multiplier,
69 repeatable=True): 70 repeat_count=9)
70 action_runner.ScrollPage(distance=500,
71 top_start_ratio=self._top_start_ratio)
72 action_runner.Wait(.25)
73 71
74 72
75 class ScrollingForbesPage(ScrollingPage): 73 class ScrollingForbesPage(ScrollingPage):
76 74
77 def __init__(self, url, page_set): 75 def __init__(self, url, page_set):
78 # forbes.com uses a strange dynamic transform on the body element, 76 # forbes.com uses a strange dynamic transform on the body element,
79 # which occasionally causes us to try scrolling from outside the 77 # which occasionally causes us to try scrolling from outside the
80 # screen. Start at the very top of the viewport to avoid this. 78 # screen. Start at the very top of the viewport to avoid this.
81 super(ScrollingForbesPage, self).__init__( 79 super(ScrollingForbesPage, self).__init__(
82 url=url, page_set=page_set, top_start_ratio=0, 80 url=url, page_set=page_set, make_javascript_deterministic=False)
83 make_javascript_deterministic=False)
84 81
85 def RunNavigateSteps(self, action_runner): 82 def RunNavigateSteps(self, action_runner):
86 super(ScrollingForbesPage, self).RunNavigateSteps(action_runner) 83 super(ScrollingForbesPage, self).RunNavigateSteps(action_runner)
87 # Wait until the interstitial banner goes away. 84 # Wait until the interstitial banner goes away.
88 action_runner.WaitForJavaScriptCondition( 85 action_runner.WaitForJavaScriptCondition(
89 'window.location.pathname.indexOf("welcome") == -1') 86 'window.location.pathname.indexOf("welcome") == -1')
90 87
91 88
92 class ToughAdCasesPageSet(story.StorySet): 89 class ToughAdCasesPageSet(story.StorySet):
93 """Pages for measuring rendering performance with advertising content.""" 90 """Pages for measuring rendering performance with advertising content."""
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
151 148
152 class ScrollingToughAdCasesPageSet(story.StorySet): 149 class ScrollingToughAdCasesPageSet(story.StorySet):
153 """Pages for measuring scrolling performance with advertising content.""" 150 """Pages for measuring scrolling performance with advertising content."""
154 151
155 def __init__(self): 152 def __init__(self):
156 super(ScrollingToughAdCasesPageSet, self).__init__( 153 super(ScrollingToughAdCasesPageSet, self).__init__(
157 archive_data_file='data/tough_ad_cases.json', 154 archive_data_file='data/tough_ad_cases.json',
158 cloud_storage_bucket=story.INTERNAL_BUCKET) 155 cloud_storage_bucket=story.INTERNAL_BUCKET)
159 156
160 self.AddStory(ScrollingPage('file://tough_ad_cases/' 157 self.AddStory(ScrollingPage('file://tough_ad_cases/'
161 'swiffy_collection.html', self, make_javascript_deterministic=False)) 158 'swiffy_collection.html', self, make_javascript_deterministic=False,
159 y_scroll_distance_multiplier=0.25))
162 self.AddStory(ScrollingPage('file://tough_ad_cases/' 160 self.AddStory(ScrollingPage('file://tough_ad_cases/'
163 'swiffy_webgl_collection.html', 161 'swiffy_webgl_collection.html',
164 self, make_javascript_deterministic=False)) 162 self, make_javascript_deterministic=False))
165 self.AddStory(ScrollingPage('http://www.latimes.com', self)) 163 self.AddStory(ScrollingPage('http://www.latimes.com', self))
166 self.AddStory(ScrollingForbesPage('http://www.forbes.com/sites/parmyolson/' 164 self.AddStory(ScrollingForbesPage('http://www.forbes.com/sites/parmyolson/'
167 '2015/07/29/jana-mobile-data-facebook-internet-org/', self)) 165 '2015/07/29/jana-mobile-data-facebook-internet-org/', self))
168 self.AddStory(ScrollingPage('http://androidcentral.com', self)) 166 self.AddStory(ScrollingPage('http://androidcentral.com', self))
169 self.AddStory(ScrollingPage('http://mashable.com', self, top_start_ratio=0)) 167 self.AddStory(ScrollingPage('http://mashable.com', self,
168 y_scroll_distance_multiplier=0.25))
170 self.AddStory(ScrollingPage('http://www.androidauthority.com/' 169 self.AddStory(ScrollingPage('http://www.androidauthority.com/'
171 'reduce-data-use-turn-on-data-compression-in-chrome-630064/', self)) 170 'reduce-data-use-turn-on-data-compression-in-chrome-630064/', self))
172 self.AddStory(ScrollingPage('http://www.cnn.com/2015/01/09/politics/' 171 self.AddStory(ScrollingPage('http://www.cnn.com/2015/01/09/politics/'
173 'nebraska-keystone-pipeline/index.html', self, top_start_ratio=0)) 172 'nebraska-keystone-pipeline/index.html', self))
174 # Disabled: crbug.com/520509 173 # Disabled: crbug.com/520509
175 #self.AddStory(ScrollingPage('http://time.com/3977891/' 174 #self.AddStory(ScrollingPage('http://time.com/3977891/'
176 # 'donald-trump-debate-republican/', self)) 175 # 'donald-trump-debate-republican/', self))
177 self.AddStory(ScrollingPage('http://www.theguardian.com/uk', self)) 176 self.AddStory(ScrollingPage('http://www.theguardian.com/uk', self))
178 self.AddStory(ScrollingPage('http://m.tmz.com', self)) 177 self.AddStory(ScrollingPage('http://m.tmz.com', self,
179 self.AddStory(ScrollingPage('http://androidpolice.com', self, 178 y_scroll_distance_multiplier=0.25))
180 top_start_ratio=0)) 179 self.AddStory(ScrollingPage('http://androidpolice.com', self))
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698