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

Unified Diff: chrome/test/functional/webrtc_call.py

Issue 11155015: Implemented basic WebRTC Mem/CPU measurements. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 2 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/test/functional/webrtc_call.py
diff --git a/chrome/test/functional/webrtc_call.py b/chrome/test/functional/webrtc_call.py
index fe3a6141fbe2c1c8184c21cca4f7a2a7ff42f0a2..ce13837872744ef36c8c665e384e8b16906ea4a3 100755
--- a/chrome/test/functional/webrtc_call.py
+++ b/chrome/test/functional/webrtc_call.py
@@ -3,11 +3,14 @@
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
+import psutil
kjellander_chromium 2012/10/15 21:19:21 psutil sorts after os.
phoglund_chromium 2012/10/16 21:27:08 Done.
import os
import subprocess
+# Note: pyauto_functional must come before pyauto.
import pyauto_functional
import pyauto
+import pyauto_utils
import webrtc_test_base
@@ -35,7 +38,7 @@ class WebrtcCallTest(webrtc_test_base.WebrtcTestBase):
pyauto.PyUITest.tearDown(self)
self.assertEquals('', self.CheckErrorsAndCrashes())
- def _SimpleWebrtcCall(self, test_page):
+ def _SimpleWebrtcCall(self):
"""Tests we can call and hang up with WebRTC.
This test exercises pretty much the whole happy-case for the WebRTC
@@ -43,40 +46,49 @@ class WebrtcCallTest(webrtc_test_base.WebrtcTestBase):
defined at http://dev.w3.org/2011/webrtc/editor/webrtc.html. The API is
still evolving.
- The test will load the supplied HTML file, which in turn will load different
- javascript files depending on which version of the signaling protocol
- we are running.
- The supplied HTML file will be loaded in two tabs and tell the web
- pages to start up WebRTC, which will acquire video and audio devices on the
- system. This will launch a dialog in Chrome which we click past using the
- automation controller. Then, we will order both tabs to connect the server,
- which will make the two tabs aware of each other. Once that is done we order
- one tab to call the other.
+ Assuming two tabs are loaded using self._LoadPageInTwoTabs, the test will
+ acquire video and audio devices on the system. This will launch a dialog in
+ Chrome which we click past using the automation controller. Then, we will
+ order both tabs to connect the peerconnection server, which will make the
+ two tabs aware of each other. Once that is done we order one tab to call
+ the other.
We make sure that the javascript tells us that the call succeeded, lets it
run for a while and try to hang up the call after that. We verify video is
playing by using the video detector.
"""
- self._SetupCall(test_page)
+ self._SetupCall()
# The hang-up will automatically propagate to the second tab.
self.HangUp(from_tab_with_index=0)
self.WaitUntilHangUpVerified(tab_index=1)
- self.Disconnect(tab_index=0)
- self.Disconnect(tab_index=1)
-
# Ensure we didn't miss any errors.
self.AssertNoFailures(tab_index=0)
self.AssertNoFailures(tab_index=1)
+ self.Disconnect(tab_index=0)
+ self.Disconnect(tab_index=1)
+
def testSimpleWebrtcJsep00Call(self):
kjellander_chromium 2012/10/15 21:19:21 Maybe it's time to drop the 00 version before it g
phoglund_chromium 2012/10/16 21:27:08 Not sure if I should remove it or leave it in, run
"""Uses a draft of the PeerConnection API, using JSEP00."""
- self._SimpleWebrtcCall('webrtc_jsep00_test.html')
+ self._LoadPageInTwoTabs('webrtc_jsep00_test.html')
+ self._SimpleWebrtcCall()
def testSimpleWebrtcJsep01Call(self):
"""Uses a draft of the PeerConnection API, using JSEP01."""
- self._SimpleWebrtcCall('webrtc_jsep01_test.html')
+ self._LoadPageInTwoTabs('webrtc_jsep01_test.html')
+
+ # Prepare CPU measurements.
+ renderer_process = self._GetChromeRendererProcess(tab_index=0)
+ renderer_process.get_cpu_percent()
+
+ self._SimpleWebrtcCall()
+
+ cpu_usage = renderer_process.get_cpu_percent(interval=0)
+ mem_usage_mb = renderer_process.get_memory_info()[0] / 1024 / 1024
+ pyauto_utils.PrintPerfResult('cpu', 'jsep01_call', cpu_usage, '%')
+ pyauto_utils.PrintPerfResult('memory', 'jsep01_call', mem_usage_mb, 'MB')
def testLocalPreview(self):
"""Brings up a local preview and ensures video is playing.
@@ -123,7 +135,8 @@ class WebrtcCallTest(webrtc_test_base.WebrtcTestBase):
# feature is implemented.
# TODO(perkj): Verify that audio is muted.
- self._SetupCall('webrtc_jsep01_test.html')
+ self._LoadPageInTwoTabs('webrtc_jsep01_test.html')
+ self._SetupCall()
select_video_function = 'function(local) { return local.videoTracks[0]; }'
self.assertEquals('ok-video-toggled-to-false', self.ExecuteJavascript(
'toggleLocalStream(' + select_video_function + ', "video")',
@@ -146,11 +159,16 @@ class WebrtcCallTest(webrtc_test_base.WebrtcTestBase):
tab_index=1))
self._WaitForVideo(tab_index=1, expect_playing=True)
- def _SetupCall(self, test_page):
+ def _LoadPageInTwoTabs(self, test_page):
url = self.GetFileURLForDataPath('webrtc', test_page)
self.NavigateToURL(url)
self.AppendTab(pyauto.GURL(url))
+ def _SetupCall(self):
+ """Gets user media and establishes a call.
+
+ Assumes that two tabs are already opened with a suitable test page.
+ """
self.assertEquals('ok-got-stream', self.GetUserMedia(tab_index=0))
self.assertEquals('ok-got-stream', self.GetUserMedia(tab_index=1))
self.Connect('user_1', tab_index=0)
@@ -180,6 +198,14 @@ class WebrtcCallTest(webrtc_test_base.WebrtcTestBase):
msg= 'Timed out while waiting for isVideoPlaying to ' +
'return ' + expect_retval + '.')
+ def _GetChromeRendererProcess(self, tab_index):
+ """Returns the Chrome renderer process."""
kjellander_chromium 2012/10/15 21:19:21 Add something about what you get back and what it'
phoglund_chromium 2012/10/16 21:27:08 Done.
+ tab_info = self.GetBrowserInfo()['windows'][0]['tabs'][tab_index]
+ renderer_id = tab_info['renderer_pid']
+ if not renderer_id:
+ self.fail('Can not find the tab renderer process.')
+ return psutil.Process(renderer_id)
+
if __name__ == '__main__':
pyauto_functional.Main()
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698