Chromium Code Reviews| 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() |