| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <map> | 5 #include <map> |
| 6 #include <vector> | 6 #include <vector> |
| 7 | 7 |
| 8 #include "base/basictypes.h" | 8 #include "base/basictypes.h" |
| 9 #include "base/command_line.h" | 9 #include "base/command_line.h" |
| 10 #if defined(OS_MACOSX) | 10 #if defined(OS_MACOSX) |
| (...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 65 kUseGpu = 1 << 0, // Only execute test if --enable-gpu was given | 65 kUseGpu = 1 << 0, // Only execute test if --enable-gpu was given |
| 66 // on the command line. This is required for | 66 // on the command line. This is required for |
| 67 // tests that run on GPU. | 67 // tests that run on GPU. |
| 68 kDisableVsync = 1 << 1, // Do not limit framerate to vertical refresh. | 68 kDisableVsync = 1 << 1, // Do not limit framerate to vertical refresh. |
| 69 // when on GPU, nor to 60hz when not on GPU. | 69 // when on GPU, nor to 60hz when not on GPU. |
| 70 kSmallWindow = 1 << 2, // 1 = 800x600, 0 = 2000x1000 | 70 kSmallWindow = 1 << 2, // 1 = 800x600, 0 = 2000x1000 |
| 71 k24fps = 1 << 3, // use 24 fps video | 71 k24fps = 1 << 3, // use 24 fps video |
| 72 k30fps = 1 << 4, // use 30 fps video | 72 k30fps = 1 << 4, // use 30 fps video |
| 73 k60fps = 1 << 5, // use 60 fps video | 73 k60fps = 1 << 5, // use 60 fps video |
| 74 kProxyWifi = 1 << 6, // Run UDP through UDPProxy wifi profile | 74 kProxyWifi = 1 << 6, // Run UDP through UDPProxy wifi profile |
| 75 kProxyEvil = 1 << 7, // Run UDP through UDPProxy evil profile | 75 kProxyBad = 1 << 7, // Run UDP through UDPProxy bad profile |
| 76 kSlowClock = 1 << 8, // Receiver clock is 10 seconds slow | 76 kSlowClock = 1 << 8, // Receiver clock is 10 seconds slow |
| 77 kFastClock = 1 << 9, // Receiver clock is 10 seconds fast | 77 kFastClock = 1 << 9, // Receiver clock is 10 seconds fast |
| 78 }; | 78 }; |
| 79 | 79 |
| 80 class SkewedTickClock : public base::DefaultTickClock { | 80 class SkewedTickClock : public base::DefaultTickClock { |
| 81 public: | 81 public: |
| 82 explicit SkewedTickClock(const base::TimeDelta& delta) : delta_(delta) { | 82 explicit SkewedTickClock(const base::TimeDelta& delta) : delta_(delta) { |
| 83 } | 83 } |
| 84 virtual base::TimeTicks NowTicks() OVERRIDE { | 84 virtual base::TimeTicks NowTicks() OVERRIDE { |
| 85 return DefaultTickClock::NowTicks() + delta_; | 85 return DefaultTickClock::NowTicks() + delta_; |
| (...skipping 221 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 307 if (HasFlag(kSmallWindow)) | 307 if (HasFlag(kSmallWindow)) |
| 308 suffix += "_small"; | 308 suffix += "_small"; |
| 309 if (HasFlag(k24fps)) | 309 if (HasFlag(k24fps)) |
| 310 suffix += "_24fps"; | 310 suffix += "_24fps"; |
| 311 if (HasFlag(k30fps)) | 311 if (HasFlag(k30fps)) |
| 312 suffix += "_30fps"; | 312 suffix += "_30fps"; |
| 313 if (HasFlag(k60fps)) | 313 if (HasFlag(k60fps)) |
| 314 suffix += "_60fps"; | 314 suffix += "_60fps"; |
| 315 if (HasFlag(kProxyWifi)) | 315 if (HasFlag(kProxyWifi)) |
| 316 suffix += "_wifi"; | 316 suffix += "_wifi"; |
| 317 if (HasFlag(kProxyEvil)) | 317 if (HasFlag(kProxyBad)) |
| 318 suffix += "_evil"; | 318 suffix += "_bad"; |
| 319 if (HasFlag(kSlowClock)) | 319 if (HasFlag(kSlowClock)) |
| 320 suffix += "_slow"; | 320 suffix += "_slow"; |
| 321 if (HasFlag(kFastClock)) | 321 if (HasFlag(kFastClock)) |
| 322 suffix += "_fast"; | 322 suffix += "_fast"; |
| 323 return suffix; | 323 return suffix; |
| 324 } | 324 } |
| 325 | 325 |
| 326 int getfps() { | 326 int getfps() { |
| 327 if (HasFlag(k24fps)) | 327 if (HasFlag(k24fps)) |
| 328 return 24; | 328 return 24; |
| (...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 588 if (HasFlag(kSlowClock)) { | 588 if (HasFlag(kSlowClock)) { |
| 589 delta = base::TimeDelta::FromSeconds(-10); | 589 delta = base::TimeDelta::FromSeconds(-10); |
| 590 } | 590 } |
| 591 scoped_refptr<media::cast::StandaloneCastEnvironment> cast_environment( | 591 scoped_refptr<media::cast::StandaloneCastEnvironment> cast_environment( |
| 592 new SkewedCastEnvironment(delta)); | 592 new SkewedCastEnvironment(delta)); |
| 593 TestPatternReceiver* const receiver = | 593 TestPatternReceiver* const receiver = |
| 594 new TestPatternReceiver(cast_environment, receiver_end_point); | 594 new TestPatternReceiver(cast_environment, receiver_end_point); |
| 595 receiver->Start(); | 595 receiver->Start(); |
| 596 | 596 |
| 597 scoped_ptr<media::cast::test::UDPProxy> udp_proxy; | 597 scoped_ptr<media::cast::test::UDPProxy> udp_proxy; |
| 598 if (HasFlag(kProxyWifi) || HasFlag(kProxyEvil)) { | 598 if (HasFlag(kProxyWifi) || HasFlag(kProxyBad)) { |
| 599 net::IPEndPoint proxy_end_point = GetFreeLocalPort(); | 599 net::IPEndPoint proxy_end_point = GetFreeLocalPort(); |
| 600 if (HasFlag(kProxyWifi)) { | 600 if (HasFlag(kProxyWifi)) { |
| 601 udp_proxy = media::cast::test::UDPProxy::Create( | 601 udp_proxy = media::cast::test::UDPProxy::Create( |
| 602 proxy_end_point, | 602 proxy_end_point, |
| 603 receiver_end_point, | 603 receiver_end_point, |
| 604 media::cast::test::WifiNetwork().Pass(), | 604 media::cast::test::WifiNetwork().Pass(), |
| 605 media::cast::test::WifiNetwork().Pass(), | 605 media::cast::test::WifiNetwork().Pass(), |
| 606 NULL); | 606 NULL); |
| 607 } else if (HasFlag(kProxyEvil)) { | 607 } else if (HasFlag(kProxyBad)) { |
| 608 udp_proxy = media::cast::test::UDPProxy::Create( | 608 udp_proxy = media::cast::test::UDPProxy::Create( |
| 609 proxy_end_point, | 609 proxy_end_point, |
| 610 receiver_end_point, | 610 receiver_end_point, |
| 611 media::cast::test::EvilNetwork().Pass(), | 611 media::cast::test::BadNetwork().Pass(), |
| 612 media::cast::test::EvilNetwork().Pass(), | 612 media::cast::test::BadNetwork().Pass(), |
| 613 NULL); | 613 NULL); |
| 614 } | 614 } |
| 615 receiver_end_point = proxy_end_point; | 615 receiver_end_point = proxy_end_point; |
| 616 } | 616 } |
| 617 | 617 |
| 618 std::string json_events; | 618 std::string json_events; |
| 619 ASSERT_TRUE(tracing::BeginTracing("test_fps,mirroring,cast_perf_test")); | 619 ASSERT_TRUE(tracing::BeginTracing("test_fps,mirroring,cast_perf_test")); |
| 620 const std::string page_url = base::StringPrintf( | 620 const std::string page_url = base::StringPrintf( |
| 621 "performance%d.html?port=%d", | 621 "performance%d.html?port=%d", |
| 622 getfps(), | 622 getfps(), |
| 623 receiver_end_point.port()); | 623 receiver_end_point.port()); |
| 624 ASSERT_TRUE(RunExtensionSubtest("cast_streaming", page_url)) << message_; | 624 ASSERT_TRUE(RunExtensionSubtest("cast_streaming", page_url)) << message_; |
| 625 ASSERT_TRUE(tracing::EndTracing(&json_events)); | 625 ASSERT_TRUE(tracing::EndTracing(&json_events)); |
| 626 receiver->Stop(); | 626 receiver->Stop(); |
| 627 | 627 |
| 628 // Stop all threads, removes the need for synchronization when analyzing | 628 // Stop all threads, removes the need for synchronization when analyzing |
| 629 // the data. | 629 // the data. |
| 630 cast_environment->Shutdown(); | 630 cast_environment->Shutdown(); |
| 631 scoped_ptr<trace_analyzer::TraceAnalyzer> analyzer; | 631 scoped_ptr<trace_analyzer::TraceAnalyzer> analyzer; |
| 632 analyzer.reset(trace_analyzer::TraceAnalyzer::Create(json_events)); | 632 analyzer.reset(trace_analyzer::TraceAnalyzer::Create(json_events)); |
| 633 analyzer->AssociateAsyncBeginEndEvents(); | 633 analyzer->AssociateAsyncBeginEndEvents(); |
| 634 | 634 |
| 635 MeanAndError frame_data = AnalyzeTraceDistance( | 635 MeanAndError frame_data = AnalyzeTraceDistance( |
| 636 analyzer.get(), | 636 analyzer.get(), |
| 637 TRACE_DISABLED_BY_DEFAULT("OnSwapCompositorFrame")); | 637 "OnSwapCompositorFrame"); |
| 638 |
| 638 EXPECT_GT(frame_data.num_values, 0UL); | 639 EXPECT_GT(frame_data.num_values, 0UL); |
| 639 // Lower is better. | 640 // Lower is better. |
| 640 frame_data.Print(test_name, | 641 frame_data.Print(test_name, |
| 641 GetSuffixForTestFlags(), | 642 GetSuffixForTestFlags(), |
| 642 "time_between_frames", | 643 "time_between_frames", |
| 643 "ms"); | 644 "ms"); |
| 644 | 645 |
| 645 // This prints out the average time between capture events. | 646 // This prints out the average time between capture events. |
| 646 // As the capture frame rate is capped at 30fps, this score | 647 // As the capture frame rate is capped at 30fps, this score |
| 647 // cannot get any better than (lower) 33.33 ms. | 648 // cannot get any better than (lower) 33.33 ms. |
| (...skipping 21 matching lines...) Expand all Loading... |
| 669 // (it's a prefix for the generated test cases) | 670 // (it's a prefix for the generated test cases) |
| 670 INSTANTIATE_TEST_CASE_P( | 671 INSTANTIATE_TEST_CASE_P( |
| 671 , | 672 , |
| 672 CastV2PerformanceTest, | 673 CastV2PerformanceTest, |
| 673 testing::Values( | 674 testing::Values( |
| 674 kUseGpu | k24fps, | 675 kUseGpu | k24fps, |
| 675 kUseGpu | k30fps, | 676 kUseGpu | k30fps, |
| 676 kUseGpu | k60fps, | 677 kUseGpu | k60fps, |
| 677 kUseGpu | k24fps | kDisableVsync, | 678 kUseGpu | k24fps | kDisableVsync, |
| 678 kUseGpu | k30fps | kProxyWifi, | 679 kUseGpu | k30fps | kProxyWifi, |
| 679 kUseGpu | k30fps | kProxyEvil, | 680 kUseGpu | k30fps | kProxyBad, |
| 680 kUseGpu | k30fps | kSlowClock, | 681 kUseGpu | k30fps | kSlowClock, |
| 681 kUseGpu | k30fps | kFastClock)); | 682 kUseGpu | k30fps | kFastClock)); |
| OLD | NEW |