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 |