Chromium Code Reviews| Index: base/debug/trace_event_synthetic_delay_unittest.cc |
| diff --git a/base/debug/trace_event_synthetic_delay_unittest.cc b/base/debug/trace_event_synthetic_delay_unittest.cc |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..5f7903596411438609e3a0102dcd7c9ec27a6290 |
| --- /dev/null |
| +++ b/base/debug/trace_event_synthetic_delay_unittest.cc |
| @@ -0,0 +1,115 @@ |
| +// Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#include "base/debug/trace_event_synthetic_delay.h" |
| + |
| +#include "testing/gtest/include/gtest/gtest.h" |
| + |
| +namespace base { |
| +namespace debug { |
| +namespace { |
| + |
| +const int kTargetDurationMs = 100; |
| + |
| +} // namespace |
| + |
| +class TraceEventSyntheticDelayTest : public testing::Test, |
| + public TraceEventSyntheticDelayClock { |
| + public: |
| + TraceEventSyntheticDelayTest() {} |
| + |
| + // TraceEventSyntheticDelayClock implementation. |
| + virtual base::TimeTicks Now() OVERRIDE { |
| + AdvanceTime(base::TimeDelta::FromMilliseconds(kTargetDurationMs / 5)); |
| + return now_; |
| + } |
| + |
| + TraceEventSyntheticDelay* ConfigureDelay(const char* name) { |
| + TraceEventSyntheticDelay* delay = TraceEventSyntheticDelay::Lookup(name); |
| + delay->SetClock(this); |
| + delay->SetTargetDuration( |
| + base::TimeDelta::FromMilliseconds(kTargetDurationMs)); |
| + return delay; |
| + } |
| + |
| + void AdvanceTime(base::TimeDelta delta) { now_ += delta; } |
| + |
| + int TestFunction() { |
| + base::TimeTicks start = Now(); |
| + { TRACE_EVENT_SYNTHETIC_DELAY("test.Delay"); } |
| + return (Now() - start).InMilliseconds(); |
| + } |
| + |
| + int AsyncTestFunctionActivate() { |
| + base::TimeTicks start = Now(); |
| + { TRACE_EVENT_SYNTHETIC_DELAY_ACTIVATE("test.AsyncDelay"); } |
| + return (Now() - start).InMilliseconds(); |
| + } |
| + |
| + int AsyncTestFunctionApply() { |
| + base::TimeTicks start = Now(); |
| + { TRACE_EVENT_SYNTHETIC_DELAY_APPLY("test.AsyncDelay"); } |
| + return (Now() - start).InMilliseconds(); |
| + } |
| + |
| + private: |
| + base::TimeTicks now_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(TraceEventSyntheticDelayTest); |
| +}; |
| + |
| +TEST_F(TraceEventSyntheticDelayTest, StaticDelay) { |
| + TraceEventSyntheticDelay* delay = ConfigureDelay("test.Delay"); |
| + delay->SetMode(TraceEventSyntheticDelay::STATIC); |
| + EXPECT_GE(TestFunction(), kTargetDurationMs); |
| +} |
| + |
| +TEST_F(TraceEventSyntheticDelayTest, OneShotDelay) { |
| + TraceEventSyntheticDelay* delay = ConfigureDelay("test.Delay"); |
| + delay->SetMode(TraceEventSyntheticDelay::ONE_SHOT); |
| + EXPECT_GE(TestFunction(), kTargetDurationMs); |
| + EXPECT_LT(TestFunction(), kTargetDurationMs); |
| + |
| + delay->SetTargetDuration( |
| + base::TimeDelta::FromMilliseconds(kTargetDurationMs)); |
| + EXPECT_GE(TestFunction(), kTargetDurationMs); |
| +} |
| + |
| +TEST_F(TraceEventSyntheticDelayTest, AlternatingDelay) { |
| + TraceEventSyntheticDelay* delay = ConfigureDelay("test.Delay"); |
| + delay->SetMode(TraceEventSyntheticDelay::ALTERNATING); |
| + EXPECT_GE(TestFunction(), kTargetDurationMs); |
| + EXPECT_LT(TestFunction(), kTargetDurationMs); |
|
brianderson
2013/11/26 02:48:34
EXPECT_EQ(TestFunction(), 0)?
|
| + EXPECT_GE(TestFunction(), kTargetDurationMs); |
| + EXPECT_LT(TestFunction(), kTargetDurationMs); |
| +} |
| + |
| +TEST_F(TraceEventSyntheticDelayTest, AsyncDelay) { |
| + ConfigureDelay("test.AsyncDelay"); |
| + EXPECT_LT(AsyncTestFunctionActivate(), kTargetDurationMs); |
| + EXPECT_GE(AsyncTestFunctionApply(), kTargetDurationMs / 2); |
| +} |
| + |
| +TEST_F(TraceEventSyntheticDelayTest, AsyncDelayExceeded) { |
| + ConfigureDelay("test.AsyncDelay"); |
| + EXPECT_LT(AsyncTestFunctionActivate(), kTargetDurationMs); |
| + AdvanceTime(base::TimeDelta::FromMilliseconds(kTargetDurationMs)); |
| + EXPECT_LT(AsyncTestFunctionApply(), kTargetDurationMs); |
| +} |
| + |
| +TEST_F(TraceEventSyntheticDelayTest, AsyncDelayNoActivation) { |
| + ConfigureDelay("test.AsyncDelay"); |
| + EXPECT_LT(AsyncTestFunctionApply(), kTargetDurationMs); |
| +} |
| + |
| +TEST_F(TraceEventSyntheticDelayTest, AsyncDelayMultipleActivations) { |
| + ConfigureDelay("test.AsyncDelay"); |
| + EXPECT_LT(AsyncTestFunctionActivate(), kTargetDurationMs); |
| + AdvanceTime(base::TimeDelta::FromMilliseconds(kTargetDurationMs)); |
| + EXPECT_LT(AsyncTestFunctionActivate(), kTargetDurationMs); |
| + EXPECT_LT(AsyncTestFunctionApply(), kTargetDurationMs); |
| +} |
| + |
| +} // namespace debug |
| +} // namespace base |