| OLD | NEW |
| 1 #!/usr/bin/python | 1 #!/usr/bin/python |
| 2 # Copyright (c) 2011 The Chromium Authors. All rights reserved. | 2 # Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 3 # Use of this source code is governed by a BSD-style license that can be | 3 # Use of this source code is governed by a BSD-style license that can be |
| 4 # found in the LICENSE file. | 4 # found in the LICENSE file. |
| 5 | 5 |
| 6 """Basic pyauto performance tests. | 6 """Basic pyauto performance tests. |
| 7 | 7 |
| 8 For tests that need to be run for multiple iterations (e.g., so that average | 8 For tests that need to be run for multiple iterations (e.g., so that average |
| 9 and standard deviation values can be reported), the default number of iterations | 9 and standard deviation values can be reported), the default number of iterations |
| 10 run for each of these tests is specified by |_DEFAULT_NUM_ITERATIONS|. | 10 run for each of these tests is specified by |_DEFAULT_NUM_ITERATIONS|. |
| (...skipping 23 matching lines...) Expand all Loading... |
| 34 import threading | 34 import threading |
| 35 import time | 35 import time |
| 36 import timeit | 36 import timeit |
| 37 import urllib | 37 import urllib |
| 38 import urllib2 | 38 import urllib2 |
| 39 import urlparse | 39 import urlparse |
| 40 | 40 |
| 41 import pyauto_functional # Must be imported before pyauto. | 41 import pyauto_functional # Must be imported before pyauto. |
| 42 import pyauto | 42 import pyauto |
| 43 | 43 |
| 44 from netflix import NetflixTestHelper |
| 44 import perf_snapshot | 45 import perf_snapshot |
| 45 import pyauto_utils | 46 import pyauto_utils |
| 46 import test_utils | 47 import test_utils |
| 47 from youtube import YoutubeTestHelper | 48 from youtube import YoutubeTestHelper |
| 48 | 49 |
| 49 | 50 |
| 50 class BasePerfTest(pyauto.PyUITest): | 51 class BasePerfTest(pyauto.PyUITest): |
| 51 """Base class for performance tests.""" | 52 """Base class for performance tests.""" |
| 52 | 53 |
| 53 _DEFAULT_NUM_ITERATIONS = 50 | 54 _DEFAULT_NUM_ITERATIONS = 50 |
| (...skipping 476 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 530 def _RunSingleDocsTabOpen(): | 531 def _RunSingleDocsTabOpen(): |
| 531 self._AppendTab('http://docs.google.com') | 532 self._AppendTab('http://docs.google.com') |
| 532 self.assertTrue(self.WaitUntil(_SubstringExistsOnPage, timeout=120, | 533 self.assertTrue(self.WaitUntil(_SubstringExistsOnPage, timeout=120, |
| 533 expect_retval='true', retry_sleep=0.10), | 534 expect_retval='true', retry_sleep=0.10), |
| 534 msg='Timed out waiting for expected Docs string.') | 535 msg='Timed out waiting for expected Docs string.') |
| 535 | 536 |
| 536 self._LoginToGoogleAccount() | 537 self._LoginToGoogleAccount() |
| 537 self._RunNewTabTest('NewTabDocs', _RunSingleDocsTabOpen) | 538 self._RunNewTabTest('NewTabDocs', _RunSingleDocsTabOpen) |
| 538 | 539 |
| 539 | 540 |
| 541 class NetflixPerfTest(BasePerfTest, NetflixTestHelper): |
| 542 """Test Netflix video performance.""" |
| 543 |
| 544 def __init__(self, methodName='runTest', **kwargs): |
| 545 pyauto.PyUITest.__init__(self, methodName, **kwargs) |
| 546 NetflixTestHelper.__init__(self, self) |
| 547 |
| 548 def tearDown(self): |
| 549 self._SignOut() |
| 550 pyauto.PyUITest.tearDown(self) |
| 551 |
| 552 def testNetflixDroppedFrames(self): |
| 553 """Measures the Netflix video dropped frames/second. Runs for 60 secs.""" |
| 554 self._LoginAndStartPlaying() |
| 555 # Ignore first 10 seconds of video playing so we get smooth videoplayback. |
| 556 time.sleep(10) |
| 557 init_dropped_frames = self._GetVideoDroppedFrames() |
| 558 dropped_frames = [] |
| 559 prev_dropped_frames = 0 |
| 560 for _ in xrange(60): |
| 561 # Ignoring initial dropped frames of first 10 seconds. |
| 562 total_dropped_frames = self._GetVideoDroppedFrames() - init_dropped_frames |
| 563 dropped_frames.append(total_dropped_frames - prev_dropped_frames) |
| 564 prev_dropped_frames = total_dropped_frames |
| 565 # Play the video for some time. |
| 566 time.sleep(1) |
| 567 self._PrintSummaryResults('NetflixDroppedFrames', dropped_frames, 'frames') |
| 568 |
| 569 def testNetflixCPU(self): |
| 570 """Measures the Netflix video CPU usage. Runs for 60 seconds.""" |
| 571 self._LoginAndStartPlaying() |
| 572 # Ignore first 10 seconds of video playing so we get smooth videoplayback. |
| 573 time.sleep(10) |
| 574 init_dropped_frames = self._GetVideoDroppedFrames() |
| 575 init_video_frames = self._GetVideoFrames() |
| 576 cpu_usage_start = self._GetCPUUsage() |
| 577 total_shown_frames = 0 |
| 578 # Play the video for some time. |
| 579 time.sleep(60) |
| 580 total_video_frames = self._GetVideoFrames() - init_video_frames |
| 581 total_dropped_frames = self._GetVideoDroppedFrames() - init_dropped_frames |
| 582 cpu_usage_end = self._GetCPUUsage() |
| 583 fraction_non_idle_time = \ |
| 584 self._GetFractionNonIdleCPUTime(cpu_usage_start, cpu_usage_end) |
| 585 # Counting extrapolation for utilization to play the video. |
| 586 extrapolation_value = fraction_non_idle_time * \ |
| 587 (total_video_frames + total_dropped_frames) / total_video_frames |
| 588 logging.info('Netflix CPU extrapolation: %.2f' % extrapolation_value) |
| 589 self._OutputPerfGraphValue('extrapolation_NetflixCPUExtrapolation', |
| 590 extrapolation_value) |
| 591 |
| 592 |
| 540 class YoutubePerfTest(BasePerfTest, YoutubeTestHelper): | 593 class YoutubePerfTest(BasePerfTest, YoutubeTestHelper): |
| 541 """Test Youtube video performance.""" | 594 """Test Youtube video performance.""" |
| 542 | 595 |
| 543 def __init__(self, methodName='runTest', **kwargs): | 596 def __init__(self, methodName='runTest', **kwargs): |
| 544 pyauto.PyUITest.__init__(self, methodName, **kwargs) | 597 pyauto.PyUITest.__init__(self, methodName, **kwargs) |
| 545 YoutubeTestHelper.__init__(self, self) | 598 YoutubeTestHelper.__init__(self, self) |
| 546 | 599 |
| 547 def _VerifyVideoTotalBytes(self): | 600 def _VerifyVideoTotalBytes(self): |
| 548 """Returns true if video total bytes information is available.""" | 601 """Returns true if video total bytes information is available.""" |
| 549 return self.GetVideoTotalBytes() > 0 | 602 return self.GetVideoTotalBytes() > 0 |
| (...skipping 21 matching lines...) Expand all Loading... |
| 571 self.PauseVideo() | 624 self.PauseVideo() |
| 572 # Wait for the video to finish loading. | 625 # Wait for the video to finish loading. |
| 573 while total_video_bytes > loaded_video_bytes: | 626 while total_video_bytes > loaded_video_bytes: |
| 574 loaded_video_bytes = self.GetVideoLoadedBytes() | 627 loaded_video_bytes = self.GetVideoLoadedBytes() |
| 575 time.sleep(1) | 628 time.sleep(1) |
| 576 self.PlayVideo() | 629 self.PlayVideo() |
| 577 # Ignore first 10 seconds of video playing so we get smooth videoplayback. | 630 # Ignore first 10 seconds of video playing so we get smooth videoplayback. |
| 578 time.sleep(10) | 631 time.sleep(10) |
| 579 | 632 |
| 580 def testYoutubeDroppedFrames(self): | 633 def testYoutubeDroppedFrames(self): |
| 581 """Measures the Youtube video dropped frames. Runs for 60 secs.""" | 634 """Measures the Youtube video dropped frames/second. Runs for 60 secs.""" |
| 582 self.StartVideoForPerformance() | 635 self.StartVideoForPerformance() |
| 583 init_dropped_frames = self.GetVideoDroppedFrames() | 636 init_dropped_frames = self.GetVideoDroppedFrames() |
| 584 total_dropped_frames = 0 | 637 total_dropped_frames = 0 |
| 585 dropped_fps = [] | 638 dropped_fps = [] |
| 586 for _ in xrange(60): | 639 for _ in xrange(60): |
| 587 frames = self.GetVideoDroppedFrames() - init_dropped_frames | 640 frames = self.GetVideoDroppedFrames() - init_dropped_frames |
| 588 current_dropped_frames = frames - total_dropped_frames | 641 current_dropped_frames = frames - total_dropped_frames |
| 589 dropped_fps.append(current_dropped_frames) | 642 dropped_fps.append(current_dropped_frames) |
| 590 total_dropped_frames = frames | 643 total_dropped_frames = frames |
| 591 # Play the video for some time | 644 # Play the video for some time |
| (...skipping 752 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1344 """Identifies the port number to which the server is currently bound. | 1397 """Identifies the port number to which the server is currently bound. |
| 1345 | 1398 |
| 1346 Returns: | 1399 Returns: |
| 1347 The numeric port number to which the server is currently bound. | 1400 The numeric port number to which the server is currently bound. |
| 1348 """ | 1401 """ |
| 1349 return self._server.server_address[1] | 1402 return self._server.server_address[1] |
| 1350 | 1403 |
| 1351 | 1404 |
| 1352 if __name__ == '__main__': | 1405 if __name__ == '__main__': |
| 1353 pyauto_functional.Main() | 1406 pyauto_functional.Main() |
| OLD | NEW |