Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 page_sets import repeatable_synthesize_scroll_gesture_shared_state | |
| 6 | |
| 5 from telemetry.core import exceptions | 7 from telemetry.core import exceptions |
| 6 from telemetry.page import page as page_module | 8 from telemetry.page import page as page_module |
| 9 from telemetry.web_perf import timeline_interaction_record | |
| 7 from telemetry import story | 10 from telemetry import story |
| 8 | 11 |
| 9 | 12 |
| 10 class SwiffyPage(page_module.Page): | 13 class SwiffyPage(page_module.Page): |
| 11 | 14 |
| 12 def __init__(self, url, page_set): | 15 def __init__(self, url, page_set): |
| 13 super(SwiffyPage, self).__init__(url=url, page_set=page_set, | 16 super(SwiffyPage, self).__init__(url=url, page_set=page_set, |
| 14 make_javascript_deterministic=False) | 17 make_javascript_deterministic=False) |
| 15 | 18 |
| 16 def RunNavigateSteps(self, action_runner): | 19 def RunNavigateSteps(self, action_runner): |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 29 | 32 |
| 30 def RunPageInteractions(self, action_runner): | 33 def RunPageInteractions(self, action_runner): |
| 31 with action_runner.CreateInteraction('ToughAd'): | 34 with action_runner.CreateInteraction('ToughAd'): |
| 32 action_runner.Wait(10) | 35 action_runner.Wait(10) |
| 33 | 36 |
| 34 | 37 |
| 35 class ScrollingPage(page_module.Page): | 38 class ScrollingPage(page_module.Page): |
| 36 | 39 |
| 37 def __init__(self, url, page_set, top_start_ratio=.5, | 40 def __init__(self, url, page_set, top_start_ratio=.5, |
| 38 make_javascript_deterministic=True): | 41 make_javascript_deterministic=True): |
| 39 super(ScrollingPage, self).__init__(url=url, page_set=page_set, | 42 super(ScrollingPage, self).__init__( |
| 40 make_javascript_deterministic=make_javascript_deterministic) | 43 url=url, |
| 44 page_set=page_set, | |
| 45 make_javascript_deterministic=make_javascript_deterministic, | |
| 46 shared_page_state_class=( | |
| 47 repeatable_synthesize_scroll_gesture_shared_state.\ | |
| 48 RepeatableSynthesizeScrollGestureSharedState)) | |
| 41 self._top_start_ratio = top_start_ratio | 49 self._top_start_ratio = top_start_ratio |
| 50 self._scroll_multiplier = 2 | |
|
Sami
2015/08/18 15:06:46
Could you make this a named parameter?
alex clarke (OOO till 29th)
2015/08/19 11:42:20
Done.
| |
| 51 print "ScrollingPage" | |
|
Sami
2015/08/18 15:06:46
Probably want to leave these out :)
alex clarke (OOO till 29th)
2015/08/19 11:42:20
Done.
| |
| 42 | 52 |
| 43 def RunNavigateSteps(self, action_runner): | 53 def RunNavigateSteps(self, action_runner): |
| 44 # Rewrite file urls to point to the replay server instead. | 54 # Rewrite file urls to point to the replay server instead. |
| 45 if self.is_file: | 55 if self.is_file: |
| 46 url = self.file_path_url_with_scheme | 56 url = self.file_path_url_with_scheme |
| 47 url = action_runner.tab.browser.http_server.UrlOf(url[len('file://'):]) | 57 url = action_runner.tab.browser.http_server.UrlOf(url[len('file://'):]) |
| 48 else: | 58 else: |
| 49 url = self._url | 59 url = self._url |
| 50 action_runner.tab.Navigate(url) | 60 action_runner.tab.Navigate(url) |
| 51 | 61 |
| 52 # Give the page one second to become interactive and start scrolling after | 62 # Give the page one second to become interactive and start scrolling after |
| 53 # the timeout regardless of the document's ready state. | 63 # the timeout regardless of the document's ready state. |
| 54 try: | 64 try: |
| 55 action_runner.tab.WaitForDocumentReadyStateToBeInteractiveOrBetter(1) | 65 action_runner.tab.WaitForDocumentReadyStateToBeInteractiveOrBetter(1) |
| 56 except exceptions.TimeoutException: | 66 except exceptions.TimeoutException: |
| 57 pass | 67 pass |
| 58 # Make sure we have a body element to scroll. | 68 # Make sure we have a body element to scroll. |
| 59 action_runner.WaitForJavaScriptCondition('document.body !== null') | 69 action_runner.WaitForJavaScriptCondition('document.body !== null') |
| 60 | 70 |
| 61 def RunPageInteractions(self, action_runner): | 71 def RunPageInteractions(self, action_runner): |
| 62 for _ in range(10): | 72 # Get the dimensions of the screen. |
|
Sami
2015/08/18 15:06:46
This is another round trip through the main thread
alex clarke (OOO till 29th)
2015/08/19 11:42:20
Done.
| |
| 63 with action_runner.CreateGestureInteraction('ScrollAction', | 73 js_result = action_runner.EvaluateJavaScript( |
| 64 repeatable=True): | 74 'window.screen.availWidth + "," + window.screen.availHeight') |
| 65 action_runner.ScrollPage(distance=500, | 75 screensize = [int(n) for n in js_result.split(',')] |
| 66 top_start_ratio=self._top_start_ratio) | 76 quarter_screen_height = screensize[1] / 4 |
| 67 action_runner.Wait(.25) | |
| 68 | 77 |
| 78 # Set up a browser driven repeating scroll. The delay between the scrolls | |
| 79 # should be unaffected by render thread responsivness (or lack there of). | |
| 80 flags = [timeline_interaction_record.REPEATABLE] | |
|
Sami
2015/08/18 15:06:46
Could you make this into a new Action instance (wi
alex clarke (OOO till 29th)
2015/08/19 11:42:20
Seems like a lot of boilerplate, I'm not sure I'm
Sami
2015/08/19 11:54:46
The idea was that we could use this in all page se
| |
| 81 scroll_params = { | |
| 82 'x': screensize[0] / 2, | |
| 83 'y': 3 * quarter_screen_height, | |
| 84 'xDistance': 0, | |
| 85 'yDistance': -quarter_screen_height * self._scroll_multiplier, | |
| 86 'preventFling': True, | |
| 87 'repeatCount': 9, | |
| 88 'repeatDelayMs': 250, | |
| 89 'interactionMarkerName': | |
| 90 timeline_interaction_record.GetJavaScriptMarker( | |
| 91 'Gesture_ScrollAction', flags), | |
| 92 } | |
| 93 action_runner.tab.SynthesizeScrollGesture(scroll_params) | |
|
Sami
2015/08/18 15:06:46
Two blank lines here please.
alex clarke (OOO till 29th)
2015/08/19 11:42:20
Done.
| |
| 69 | 94 |
| 70 class ScrollingForbesPage(ScrollingPage): | 95 class ScrollingForbesPage(ScrollingPage): |
| 71 | 96 |
| 72 def __init__(self, url, page_set): | 97 def __init__(self, url, page_set): |
| 73 # forbes.com uses a strange dynamic transform on the body element, | 98 # forbes.com uses a strange dynamic transform on the body element, |
| 74 # which occasionally causes us to try scrolling from outside the | 99 # which occasionally causes us to try scrolling from outside the |
| 75 # screen. Start at the very top of the viewport to avoid this. | 100 # screen. Start at the very top of the viewport to avoid this. |
| 76 super(ScrollingForbesPage, self).__init__( | 101 super(ScrollingForbesPage, self).__init__( |
| 77 url=url, page_set=page_set, top_start_ratio=0, | 102 url=url, page_set=page_set, top_start_ratio=0, |
| 78 make_javascript_deterministic=False) | 103 make_javascript_deterministic=False) |
| 79 | 104 |
| 80 def RunNavigateSteps(self, action_runner): | 105 def RunNavigateSteps(self, action_runner): |
| 81 super(ScrollingForbesPage, self).RunNavigateSteps(action_runner) | 106 super(ScrollingForbesPage, self).RunNavigateSteps(action_runner) |
| 82 # Wait until the interstitial banner goes away. | 107 # Wait until the interstitial banner goes away. |
| 83 action_runner.WaitForJavaScriptCondition( | 108 action_runner.WaitForJavaScriptCondition( |
| 84 'window.location.pathname.indexOf("welcome") == -1') | 109 'window.location.pathname.indexOf("welcome") == -1') |
| 85 # Make sure we have a body element to scroll. | 110 # Make sure we have a body element to scroll. |
| 86 action_runner.WaitForJavaScriptCondition('document.body !== null') | 111 action_runner.WaitForJavaScriptCondition('document.body !== null') |
| 87 | 112 |
| 88 | 113 |
| 114 class ScrollingTmzPage(ScrollingPage): | |
| 115 | |
| 116 def __init__(self, url, page_set): | |
| 117 # The TMZ page can take a while to be scrollable. | |
| 118 super(ScrollingTmzPage, self).__init__( | |
| 119 url=url, page_set=page_set, top_start_ratio=0, | |
| 120 make_javascript_deterministic=False) | |
| 121 # The TMZ page is shorter than the others. | |
| 122 self._scroll_multiplier = 1 | |
| 123 | |
| 124 def RunNavigateSteps(self, action_runner): | |
| 125 super(ScrollingTmzPage, self).RunNavigateSteps(action_runner) | |
| 126 # Wait for the page to be scrollable. | |
| 127 action_runner.WaitForJavaScriptCondition( | |
| 128 'document.body.scrollHeight > window.screen.height') | |
| 129 | |
| 130 | |
| 89 class ToughAdCasesPageSet(story.StorySet): | 131 class ToughAdCasesPageSet(story.StorySet): |
| 90 """Pages for measuring rendering performance with advertising content.""" | 132 """Pages for measuring rendering performance with advertising content.""" |
| 91 | 133 |
| 92 def __init__(self): | 134 def __init__(self): |
| 93 super(ToughAdCasesPageSet, self).__init__( | 135 super(ToughAdCasesPageSet, self).__init__( |
| 94 archive_data_file='data/tough_ad_cases.json', | 136 archive_data_file='data/tough_ad_cases.json', |
| 95 cloud_storage_bucket=story.INTERNAL_BUCKET) | 137 cloud_storage_bucket=story.INTERNAL_BUCKET) |
| 96 | 138 |
| 97 base_url = 'http://localhost:8000' | 139 base_url = 'http://localhost:8000' |
| 98 | 140 |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 131 '2015/07/29/jana-mobile-data-facebook-internet-org/', self)) | 173 '2015/07/29/jana-mobile-data-facebook-internet-org/', self)) |
| 132 self.AddStory(ScrollingPage('http://androidcentral.com', self)) | 174 self.AddStory(ScrollingPage('http://androidcentral.com', self)) |
| 133 self.AddStory(ScrollingPage('http://mashable.com', self, top_start_ratio=0)) | 175 self.AddStory(ScrollingPage('http://mashable.com', self, top_start_ratio=0)) |
| 134 self.AddStory(ScrollingPage('http://www.androidauthority.com/' | 176 self.AddStory(ScrollingPage('http://www.androidauthority.com/' |
| 135 'reduce-data-use-turn-on-data-compression-in-chrome-630064/', self)) | 177 'reduce-data-use-turn-on-data-compression-in-chrome-630064/', self)) |
| 136 self.AddStory(ScrollingPage('http://www.cnn.com/2015/01/09/politics/' | 178 self.AddStory(ScrollingPage('http://www.cnn.com/2015/01/09/politics/' |
| 137 'nebraska-keystone-pipeline/index.html', self, top_start_ratio=0)) | 179 'nebraska-keystone-pipeline/index.html', self, top_start_ratio=0)) |
| 138 self.AddStory(ScrollingPage('http://time.com/3977891/' | 180 self.AddStory(ScrollingPage('http://time.com/3977891/' |
| 139 'donald-trump-debate-republican/', self)) | 181 'donald-trump-debate-republican/', self)) |
| 140 self.AddStory(ScrollingPage('http://www.theguardian.com/uk', self)) | 182 self.AddStory(ScrollingPage('http://www.theguardian.com/uk', self)) |
| 141 self.AddStory(ScrollingPage('http://m.tmz.com', self)) | 183 self.AddStory(ScrollingTmzPage('http://m.tmz.com', self)) |
| 142 self.AddStory(ScrollingPage('http://androidpolice.com', self, | 184 self.AddStory(ScrollingPage('http://androidpolice.com', self, |
| 143 top_start_ratio=0)) | 185 top_start_ratio=0)) |
| OLD | NEW |