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

Unified Diff: functional/perf.py

Issue 8548002: Adding CPU performance test for Youtube video (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/chrome/test/
Patch Set: '' Created 9 years, 1 month 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
Index: functional/perf.py
===================================================================
--- functional/perf.py (revision 109125)
+++ functional/perf.py (working copy)
@@ -22,6 +22,7 @@
"""
import BaseHTTPServer
+import commands
import logging
import math
import os
@@ -497,32 +498,87 @@
pyauto.PyUITest.__init__(self, methodName, **kwargs)
YoutubeTestHelper.__init__(self, self)
- def testYoutubeDroppedFrames(self):
- """Measures the Youtube video dropped frames. Runs for 60 secs."""
+ def GetCPUUsage(self):
+ """Returns the CPU usage"""
Nirnimesh 2011/11/15 02:13:50 Mention that it get's machine's CPU usage (as oppo
rohitbm 2011/11/15 03:10:50 Done.
+ cpu = commands.getoutput("grep \"cpu \" /proc/stat").split()
Nirnimesh 2011/11/15 02:13:50 use ' for the outer quote. Then you don't need to
Nirnimesh 2011/11/15 02:13:50 Why grep? Why not read the first line (in python)
rohitbm 2011/11/15 03:10:50 Reading /proc/stat file.
rohitbm 2011/11/15 03:10:50 Done.
+ dict = {'user':int(cpu[1]), 'nice':int(cpu[2]), 'system':int(cpu[3]),
Nirnimesh 2011/11/15 02:13:50 nit: put space after :
rohitbm 2011/11/15 03:10:50 Done.
+ 'idle':int(cpu[4])}
+ return dict
Nirnimesh 2011/11/15 02:13:50 merge with previous line. Get rid of |dict| retur
rohitbm 2011/11/15 03:10:50 Done.
+
+ def VerifyVideoTotalBytes(self):
+ """Returns true if video total bytes information is available"""
+ return self.GetVideoTotalBytes() > 0
+
+ def VerifyVideoLoadedBytes(self):
+ """Returns true if video loaded bytes information is available"""
+ return self.GetVideoLoadedBytes() > 0
+
+ def StartVideoForPerformance(self):
+ """Start the test video with all required buffering"""
self.PlayVideoAndAssert()
self.ExecuteJavascript("""
ytplayer.setPlaybackQuality('hd720');
window.domAutomationController.send('');
""")
+ self.AssertPlayingState()
+ self.assertTrue(
+ self.WaitUntil(self.VerifyVideoTotalBytes, expect_retval=True),
+ msg='Failed to get video total bytes information.')
+ self.assertTrue(
+ self.WaitUntil(self.VerifyVideoLoadedBytes, expect_retval=True),
+ msg='Failed to get video loaded bytes information')
+ loaded_video_bytes = self.GetVideoLoadedBytes()
+ total_video_bytes = self.GetVideoTotalBytes()
+ self.PauseVideo()
+ count = 0
+ while total_video_bytes > loaded_video_bytes:
+ loaded_video_bytes = self.GetVideoLoadedBytes()
+ time.sleep(1)
+ count = count + 1
+ # Ignoring first 10 seconds of video so we get smooth video playing.
+ self.PlayVideo()
+ for _ in xrange(10):
krisr 2011/11/15 00:42:42 can we replace this with sleep(10)?
Nirnimesh 2011/11/15 02:13:50 What's this sleep for? Add comments
rohitbm 2011/11/15 03:10:50 Done.
rohitbm 2011/11/15 03:10:50 Done.
+ time.sleep(1)
+
+ def testYoutubeDroppedFrames(self):
+ """Measures the Youtube video dropped frames. Runs for 60 secs."""
+ self.StartVideoForPerformance()
+ init_dropped_frames = self.GetVideoDroppedFrames()
total_dropped_frames = 0
dropped_fps = []
- youtube_apis = self.GetPrivateInfo()['youtube_api']
- youtube_debug_text = youtube_apis['GetDebugText']
for _ in xrange(60):
- video_data = self.ExecuteJavascript(
- 'window.domAutomationController.send(%s);' % youtube_debug_text)
- # Video data returns total dropped frames so far, so calculating
- # the dropped frames for the last second.
- matched = re.search('droppedFrames=([\d\.]+)', video_data)
- if matched:
- frames = int(matched.group(1))
+ frames = self.GetVideoDroppedFrames() - init_dropped_frames
current_dropped_frames = frames - total_dropped_frames
dropped_fps.append(current_dropped_frames)
total_dropped_frames = frames
time.sleep(1)
self._PrintSummaryResults('YoutubeDroppedFrames', dropped_fps, 'frames')
+ def testYoutubeCPU(self):
+ """Measure the Youtube video CPU usage. Runs for 60 seconds."""
ilja 2011/11/14 05:14:07 Measures the Youtube video CPU usage (between 0 an
rohitbm 2011/11/15 03:10:50 Done. We found that few high motion videos's perfo
+ self.StartVideoForPerformance()
+ init_dropped_frames = self.GetVideoDroppedFrames()
+ cpu_usage1 = self.GetCPUUsage()
+ total_shown_frames = 0
+ for _ in xrange(60):
+ total_shown_frames = total_shown_frames + self.GetVideoFrames()
+ time.sleep(1)
Nirnimesh 2011/11/15 02:13:50 mention why you're sleeping. # Play the video for
rohitbm 2011/11/15 03:10:50 Done.
+ total_dropped_frames = self.GetVideoDroppedFrames() - init_dropped_frames
+ cpu_usage2 = self.GetCPUUsage()
+
+ x2 = cpu_usage2['user'] + cpu_usage2['nice'] + cpu_usage2['system']
+ x1 = cpu_usage1['user'] + cpu_usage1['nice'] + cpu_usage1['system']
+ y2 = cpu_usage2['user'] + cpu_usage2['nice'] + \
+ cpu_usage2['system'] + cpu_usage2['idle']
+ y1 = cpu_usage1['user'] + cpu_usage1['nice'] + \
+ cpu_usage1['system'] + cpu_usage1['idle']
+ total_frames = total_shown_frames + total_dropped_frames
+ # Counting extrapolation for utilization to play the video
+ self._PrintSummaryResults('YoutubeCPUExtrapolation',
+ [((float(x2) - x1) / (y2 - y1)) * total_frames/total_shown_frames],
+ 'extrapolation')
+
class FileUploadDownloadTest(BasePerfTest):
"""Tests that involve measuring performance of upload and download."""
« no previous file with comments | « data/media/youtube.html ('k') | functional/youtube.py » ('j') | functional/youtube.py » ('J')

Powered by Google App Engine
This is Rietveld 408576698