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

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

Issue 16854013: Telemetry media_measurement plus play action and tests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 6 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 "play" action on media elements.
6
7 Media elements can be specified by a selector attribute. If no selector is
8 defined then then the action attempts to play the first video element or audio
9 element on the page. A selector can also be 'all' to play all media elements.
10
11 Other attributes to use are: wait_for_playing and wait_for_ended, which forces
12 the action to wait untill playing and ended events get fired respectively.
13 """
14
15 import os
16
17 from telemetry.core import exceptions
18 from telemetry.core import util
19 from telemetry.page.actions import page_action
20
21
22 class PlayAction(page_action.PageAction):
23 def __init__(self, attributes=None):
24 super(PlayAction, self).__init__(attributes)
25
26 def WillRunAction(self, page, tab):
27 """Load the media metrics JS code prior to running the action."""
28 deps_found = tab.EvaluateJavaScript('window.__mediaRecorders != undefined')
29 if not deps_found:
scherkus (not reviewing) 2013/06/14 20:50:45 extra space after not
shadi 2013/06/17 19:13:59 Done. Nice catch, gpylint did not catch it.
30 with open(
31 # TODO(shadi): Find or define a global path to src/tools in Telemetry.
32 os.path.join(os.path.dirname(__file__), '..', '..', '..', '..',
33 'perf', 'perf_tools', 'media_metrics.js')) as f:
34 js = f.read()
35 tab.ExecuteJavaScript(js)
36
37 def RunAction(self, page, tab, previous_action):
38 try:
39 selector = self.selector if hasattr(self, 'selector') else ''
40 tab.ExecuteJavaScript('window.__playMedia(\'%s\');' % selector)
41 # Check if we need to wait for 'playing' event to fire.
42 if hasattr(self, 'wait_for_playing') and self.wait_for_playing:
43 self.WaitForEvent(tab, selector, 'playing')
44 # Check if we need to wait for 'ended' event to fire.
45 if hasattr(self, 'wait_for_ended') and self.wait_for_ended:
46 self.WaitForEvent(tab, selector, 'ended')
47 except exceptions.EvaluateException:
48 raise page_action.PageActionFailed('Cannot play media element(s) with '
49 'selector = %s.' % selector)
50
51 def WaitForEvent(self, tab, selector, event_name):
52 """Halts play action untill the selector's event is fired."""
scherkus (not reviewing) 2013/06/14 20:50:45 s/untill/until/
shadi 2013/06/17 19:13:59 Done.
53 # TODO(shadi): add action attribute to control timeout for videos that take
54 # longer than 60 secs to end.
55 util.WaitFor(lambda: self.HasEventCompleted(tab, selector, event_name),
56 timeout=60, 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