Chromium Code Reviews| Index: chrome/browser/extensions/api/cast_streaming/performance_test.cc |
| diff --git a/chrome/browser/extensions/api/cast_streaming/performance_test.cc b/chrome/browser/extensions/api/cast_streaming/performance_test.cc |
| index 35e87e1985b058a7bb83c267c33b0f1aabc8e23c..1cf83d23f8b5027367fc47a7269c80279139cec7 100644 |
| --- a/chrome/browser/extensions/api/cast_streaming/performance_test.cc |
| +++ b/chrome/browser/extensions/api/cast_streaming/performance_test.cc |
| @@ -12,6 +12,7 @@ |
| #endif |
| #include "base/strings/stringprintf.h" |
| #include "base/test/trace_event_analyzer.h" |
| +#include "base/time/default_tick_clock.h" |
| #include "base/win/windows_version.h" |
| #include "chrome/browser/extensions/extension_apitest.h" |
| #include "chrome/browser/extensions/extension_service.h" |
| @@ -72,6 +73,19 @@ enum TestFlags { |
| k60fps = 1 << 5, // use 60 fps video |
| kProxyWifi = 1 << 6, // Run UDP through UDPProxy wifi profile |
| kProxyEvil = 1 << 7, // Run UDP through UDPProxy evil profile |
| + kSlowClock = 1 << 8, // Receiver clock is 10 seconds slow |
| + kFastClock = 1 << 9, // Receiver clock is 10 seconds fast |
| +}; |
| + |
| +class SkewedTickClock : public base::DefaultTickClock { |
| + public: |
| + explicit SkewedTickClock(const base::TimeDelta& delta) : delta_(delta) { |
| + } |
| + virtual base::TimeTicks NowTicks() OVERRIDE { |
| + return DefaultTickClock::NowTicks() + delta_; |
| + } |
| + private: |
| + base::TimeDelta delta_; |
| }; |
| // We log one of these for each call to OnAudioFrame/OnVideoFrame. |
| @@ -122,7 +136,7 @@ class MeanAndError { |
| true); |
| } else { |
| LOG(ERROR) << "Not enough events for " |
| - << measurement << " " << modifier << " " << trace; |
| + << measurement << modifier << " " << trace; |
| } |
| } |
| @@ -291,6 +305,10 @@ class CastV2PerformanceTest |
| suffix += "_wifi"; |
| if (HasFlag(kProxyEvil)) |
| suffix += "_evil"; |
| + if (HasFlag(kSlowClock)) |
| + suffix += "_slow"; |
| + if (HasFlag(kFastClock)) |
| + suffix += "_fast"; |
| return suffix; |
| } |
| @@ -367,7 +385,8 @@ class CastV2PerformanceTest |
| (trace_analyzer::Query::EventPhaseIs(TRACE_EVENT_PHASE_BEGIN) || |
| trace_analyzer::Query::EventPhaseIs(TRACE_EVENT_PHASE_ASYNC_BEGIN) || |
| trace_analyzer::Query::EventPhaseIs(TRACE_EVENT_PHASE_FLOW_BEGIN) || |
| - trace_analyzer::Query::EventPhaseIs(TRACE_EVENT_PHASE_INSTANT)); |
| + trace_analyzer::Query::EventPhaseIs(TRACE_EVENT_PHASE_INSTANT) || |
| + trace_analyzer::Query::EventPhaseIs(TRACE_EVENT_PHASE_COMPLETE)); |
| analyzer->FindEvents(query, events); |
| } |
| @@ -554,8 +573,16 @@ class CastV2PerformanceTest |
| // Start the in-process receiver that examines audio/video for the expected |
| // test patterns. |
| + base::TimeDelta delta = base::TimeDelta::FromSeconds(0); |
| + if (HasFlag(kFastClock)) { |
| + delta = base::TimeDelta::FromSeconds(10); |
| + } |
| + if (HasFlag(kSlowClock)) { |
| + delta = base::TimeDelta::FromSeconds(-10); |
| + } |
| scoped_refptr<media::cast::StandaloneCastEnvironment> cast_environment( |
| - new media::cast::StandaloneCastEnvironment); |
| + new media::cast::StandaloneCastEnvironment( |
| + make_scoped_ptr<base::TickClock>(new SkewedTickClock(delta)))); |
| TestPatternReceiver* const receiver = |
| new TestPatternReceiver(cast_environment, receiver_end_point); |
| receiver->Start(); |
| @@ -582,7 +609,8 @@ class CastV2PerformanceTest |
| } |
| std::string json_events; |
| - ASSERT_TRUE(tracing::BeginTracing("test_fps,mirroring,cast_perf_test")); |
| + ASSERT_TRUE(tracing::BeginTracing( |
| + "renderer_host,mirroring,cast_perf_test")); |
| const std::string page_url = base::StringPrintf( |
| "performance%d.html?port=%d", |
| getfps(), |
| @@ -601,13 +629,14 @@ class CastV2PerformanceTest |
| // Only one of these PrintResults should actually print something. |
| // The printed result will be the average time between frames in the |
| // browser window. |
| - MeanAndError sw_frame_data = AnalyzeTraceDistance(analyzer.get(), |
| - "TestFrameTickSW"); |
| - MeanAndError frame_data = AnalyzeTraceDistance(analyzer.get(), |
| - "TestFrameTickGPU"); |
| - if (frame_data.num_values == 0) { |
| - frame_data = sw_frame_data; |
| - } |
| + MeanAndError frame_data = AnalyzeTraceDistance( |
| + analyzer.get(), |
| +#ifdef OS_MACOSX |
| + "RenderWidgetHostImpl::OnCompositorSurfaceBuffersSwapped" |
| +#else |
| + "RenderWidgetHostImpl::OnSwapCompositorFrame" |
| +#endif |
|
piman
2014/04/08 22:46:03
This hardcodes the knowledge that "on mac we don't
hubbe
2014/04/08 22:58:29
Now uses a special trace event which is normally O
|
| + ); |
| EXPECT_GT(frame_data.num_values, 0UL); |
| // Lower is better. |
| frame_data.Print(test_name, |
| @@ -648,4 +677,6 @@ INSTANTIATE_TEST_CASE_P( |
| kUseGpu | k60fps, |
| kUseGpu | k24fps | kDisableVsync, |
| kUseGpu | k30fps | kProxyWifi, |
| - kUseGpu | k30fps | kProxyEvil)); |
| + kUseGpu | k30fps | kProxyEvil, |
| + kUseGpu | k30fps | kSlowClock, |
| + kUseGpu | k30fps | kFastClock)); |