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

Side by Side Diff: tools/telemetry/telemetry/page/actions/seek.py

Issue 19482009: Telemetry media Seek action and metrics. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 5 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 | Annotate | Revision Log
OLDNEW
(Empty)
1 # Copyright (c) 2013 The Chromium Authors. All rights reserved.
2 # Use of this source code is governed by a BSD-style license that can be
3 # found in the LICENSE file.
4
5 """A Telemetry page_action that performs the "seek" action on media elements.
6
7 Action attributes are:
8 - seek_time: The media time to seek to. Test fails if not provided.
9 - selector: If no selector is defined then the action attempts to seek the first
10 media element on the page. If 'all' then seek all media elements.
11 - log_seek_time: If true the seek time is recorded, otherwise media measurement
12 will not be aware of the seek action. Used to perform multiple
13 seeks. Default true.
14 - wait_for_seeked: If true forces the action to wait for seeked event to fire.
15 Default false.
16 - wait_timeout: Timeout to wait for seeked event. Only valid with
17 wait_for_seeked=true
18 """
19
20 import os
21
22 from telemetry.core import exceptions
23 from telemetry.core import util
24 from telemetry.page.actions import page_action
25
26
27 class SeekAction(page_action.PageAction):
28 def __init__(self, attributes=None):
29 super(SeekAction, self).__init__(attributes)
30
31 def WillRunAction(self, page, tab):
32 """Load the media metrics JS code prior to running the action."""
33 with open(os.path.join(os.path.dirname(__file__), 'seek.js')) as f:
34 js = f.read()
35 tab.ExecuteJavaScript(js)
36
37 def RunAction(self, page, tab, previous_action):
38 try:
39 if not hasattr(self, 'seek_time'):
dtu 2013/07/20 01:20:56 assert this instead of raising PageActionFailed.
shadi 2013/07/22 19:18:31 Done.
40 raise page_action.PageActionFailed('Seek time is missing in the action')
41 selector = self.selector if hasattr(self, 'selector') else ''
42 log_seek = self.log_seek if hasattr(self, 'log_seek') else True
43 tab.ExecuteJavaScript('window.__seekMedia(\'%s\', \'%s\', \'%s\');' %
dtu 2013/07/20 01:20:56 " in place of \'
shadi 2013/07/22 19:18:31 Done.
44 (selector, self.seek_time, log_seek))
45 timeout = self.wait_timeout if hasattr(self, 'wait_timeout') else 60
46 # Check if we need to wait for 'seeked' event to fire.
47 if hasattr(self, 'wait_for_seeked') and self.wait_for_seeked:
48 self.WaitForEvent(tab, selector, 'seeked', timeout)
49 except exceptions.EvaluateException:
50 raise page_action.PageActionFailed('Cannot seek media element(s) with '
51 'selector = %s.' % selector)
52
53 def WaitForEvent(self, tab, selector, event_name, timeout):
54 """Halts seek action until the selector's event is fired."""
55 util.WaitFor(lambda: self.HasEventCompleted(tab, selector, event_name),
56 timeout=timeout, poll_interval=0.5)
57
58 def HasEventCompleted(self, tab, selector, event_name):
59 return tab.EvaluateJavaScript(
60 'window.__hasEventCompleted(\'%s\', \'%s\');' % (selector, event_name))
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698