| Index: base/timer_unittest.cc
|
| diff --git a/base/timer_unittest.cc b/base/timer_unittest.cc
|
| deleted file mode 100644
|
| index 71058c40b0583c17cb5a06f749272b44fb1b0b0e..0000000000000000000000000000000000000000
|
| --- a/base/timer_unittest.cc
|
| +++ /dev/null
|
| @@ -1,235 +0,0 @@
|
| -// Copyright 2003-2009 Google Inc.
|
| -//
|
| -// Licensed under the Apache License, Version 2.0 (the "License");
|
| -// you may not use this file except in compliance with the License.
|
| -// You may obtain a copy of the License at
|
| -//
|
| -// http://www.apache.org/licenses/LICENSE-2.0
|
| -//
|
| -// Unless required by applicable law or agreed to in writing, software
|
| -// distributed under the License is distributed on an "AS IS" BASIS,
|
| -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
| -// See the License for the specific language governing permissions and
|
| -// limitations under the License.
|
| -// ========================================================================
|
| -//
|
| -// Timer unittest
|
| -
|
| -#include <cmath>
|
| -#include "omaha/base/time.h"
|
| -#include "omaha/base/timer.h"
|
| -#include "omaha/testing/unit_test.h"
|
| -
|
| -namespace omaha {
|
| -
|
| -// The accuracy of the unit test measurements is expected to be within 50 ms.
|
| -// The error varies depending on how the unit test process gets scheduled.
|
| -// The timer test is prone to failing when run by Pulse. Consider diabling the
|
| -// test completely.
|
| -const int kErrorMs = 50;
|
| -
|
| -// The tests that use the Timer class are flaky (see warning in timer.h),
|
| -// and Timer isn't used in production Omaha code, so we leave out everything
|
| -// but the LowResTimer test.
|
| -// TODO(omaha): Is there a better way to do this? Maybe not run on build system?
|
| -#if 0
|
| -
|
| -class TimerTest : public testing::Test {
|
| - protected:
|
| - // Set up a test so that we can measure the same time interval using the
|
| - // low and high resolution timers. If the difference between them is too
|
| - // big then we consider that the high resolution time is busted and we
|
| - // stop running the unit tests.
|
| - // The high resolution timer may have undefined behavior, see the header
|
| - // file for more comments.
|
| - static void SetUpTestCase() {
|
| - const int kSleepMs = 100;
|
| - const int kDiffMs = 1;
|
| - LowResTimer t(false);
|
| - Timer u(false);
|
| - t.Start();
|
| - u.Start();
|
| - ::Sleep(kSleepMs);
|
| - busted_ = abs(t.GetMilliseconds()- u.GetMilliseconds()) >= kErrorMs;
|
| - }
|
| -
|
| - void PrintError() {
|
| - // This is going to print "Test Foo is busted but passed."
|
| - printf("is busted but ");
|
| - }
|
| -
|
| - static bool busted_;
|
| -};
|
| -
|
| -bool TimerTest::busted_ = false;
|
| -
|
| -#endif // #if 0
|
| -
|
| -TEST(TimerTest, LowResTimer) {
|
| - // This test was flaky on the build machine.
|
| - // TODO(omaha): Is this still the case? Can we improve the test?
|
| - if (omaha::IsBuildSystem()) {
|
| - return;
|
| - }
|
| -
|
| - LowResTimer t(false);
|
| -
|
| - const int kSleep1 = 100;
|
| - t.Start();
|
| - ::Sleep(kSleep1);
|
| - uint32 elapsedMs = t.Stop();
|
| -
|
| - // For the first run of the timer the elapsed value must be equal to
|
| - // the timer interval.
|
| - EXPECT_EQ(elapsedMs, t.GetMilliseconds());
|
| -
|
| - // About 100 ms now.
|
| - EXPECT_NEAR(kSleep1, elapsedMs, kErrorMs);
|
| -
|
| - // Test the accessors of different time units.
|
| - EXPECT_DOUBLE_EQ(t.GetSeconds() * 1000, t.GetMilliseconds());
|
| -
|
| - const int kSleep2 = 10;
|
| - t.Start();
|
| - ::Sleep(kSleep2);
|
| - elapsedMs = t.Stop();
|
| - EXPECT_NEAR(kSleep2, elapsedMs, kErrorMs);
|
| -
|
| - // About 110 ms now.
|
| - EXPECT_NEAR(kSleep1 + kSleep2, t.GetMilliseconds(), 2 * kErrorMs);
|
| -
|
| - const int kSleep3 = 50;
|
| - t.Start();
|
| - ::Sleep(kSleep3);
|
| - elapsedMs = t.Stop();
|
| - EXPECT_NEAR(kSleep3, elapsedMs, kErrorMs);
|
| -
|
| - // About 160 ms now.
|
| - EXPECT_NEAR(kSleep1 + kSleep2 + kSleep3, t.GetMilliseconds(), 3 * kErrorMs);
|
| -
|
| - t.Reset();
|
| - EXPECT_EQ(0, t.GetMilliseconds());
|
| -}
|
| -
|
| -// Tests disabled, see comment at top of file.
|
| -#if 0
|
| -// Test that values from RTDSC change quickly.
|
| -TEST_F(TimerTest, RTDSC) {
|
| - uint32 last = 0;
|
| - for (int i = 0; i < 10; ++i) {
|
| - uint64 counter = Timer::GetRdtscCounter();
|
| - uint32 a = *(reinterpret_cast<uint32 *>(&counter));
|
| - ASSERT_NE(a, last);
|
| - last = a;
|
| - }
|
| -}
|
| -
|
| -// Compare everything as ms units for uniformity.
|
| -
|
| -TEST_F(TimerTest, Timer) {
|
| - if (busted_) {
|
| - PrintError();
|
| - return;
|
| - }
|
| -
|
| - Timer t(false);
|
| -
|
| - const int kSleep1 = 100;
|
| - t.Start();
|
| - ::Sleep(kSleep1);
|
| - time64 elapsed = t.Stop();
|
| -
|
| - // For the first run of the timer the elapsed value must be equal to
|
| - // the timer interval.
|
| - EXPECT_DOUBLE_EQ(t.PerfCountToNanoSeconds(elapsed) / 1000000,
|
| - t.GetNanoseconds() / 1000000);
|
| -
|
| - // About 100 ms now.
|
| - EXPECT_NEAR(kSleep1, t.PerfCountToNanoSeconds(elapsed) / 1000000, kErrorMs);
|
| -
|
| - // Test the accessors of different time units.
|
| - EXPECT_DOUBLE_EQ(t.GetSeconds() * 1000, t.GetMilliseconds());
|
| - EXPECT_DOUBLE_EQ(t.GetMilliseconds() * 1000, t.GetMicroseconds());
|
| - EXPECT_DOUBLE_EQ(t.GetMicroseconds() * 1000, t.GetNanoseconds());
|
| -
|
| - EXPECT_NEAR(t.Get100Nanoseconds() * 100.0, t.GetNanoseconds(), 100);
|
| -
|
| - const int kSleep2 = 10;
|
| - t.Start();
|
| - ::Sleep(kSleep2);
|
| - elapsed = t.Stop();
|
| - EXPECT_NEAR(kSleep2, t.PerfCountToNanoSeconds(elapsed) / 1000000, kErrorMs);
|
| -
|
| - // About 110 ms now.
|
| - EXPECT_NEAR(kSleep1 + kSleep2, t.GetMilliseconds(), 2 * kErrorMs);
|
| -
|
| - const int kSleep3 = 50;
|
| - t.Start();
|
| - ::Sleep(kSleep3);
|
| - elapsed = t.Stop();
|
| - EXPECT_NEAR(kSleep3, t.PerfCountToNanoSeconds(elapsed) / 1000000, kErrorMs);
|
| -
|
| - // About 160 ms now.
|
| - EXPECT_NEAR(kSleep1 + kSleep2 + kSleep3, t.GetMilliseconds(), 3 * kErrorMs);
|
| -
|
| - t.Reset();
|
| - EXPECT_DOUBLE_EQ(0, t.GetMilliseconds());
|
| -}
|
| -
|
| -TEST_F(TimerTest, TimerSplit) {
|
| - if (busted_) {
|
| - PrintError();
|
| - return;
|
| - }
|
| -
|
| - const int kSleep1 = 50;
|
| - const int kSleep2 = 125;
|
| - const int kSleep3 = 25;
|
| -
|
| - double split1(0), split2(0), split3(0);
|
| - double elapsed1(0), elapsed2(0);
|
| -
|
| - Timer t(false);
|
| - t.Start();
|
| - ::Sleep(kSleep1);
|
| - t.Split(&split1, &elapsed1);
|
| - EXPECT_NEAR(split1, kSleep1, kErrorMs);
|
| - EXPECT_NEAR(elapsed1, kSleep1, kErrorMs);
|
| - EXPECT_DOUBLE_EQ(split1, elapsed1);
|
| -
|
| - ::Sleep(kSleep2);
|
| - t.Split(&split2, &elapsed2);
|
| - EXPECT_NEAR(split2, kSleep2, kErrorMs);
|
| - EXPECT_DOUBLE_EQ(split1 + split2, elapsed2);
|
| -
|
| - ::Sleep(kSleep3);
|
| - t.Split(&split3, NULL);
|
| - t.Stop();
|
| - EXPECT_NEAR(split3, kSleep3, kErrorMs);
|
| - EXPECT_NEAR(split1 + split2 + split3, t.GetMilliseconds(), kErrorMs);
|
| -}
|
| -
|
| -// Time QueryPerformanceCounter
|
| -TEST_F(TimerTest, QueryPerformanceCounter) {
|
| - if (busted_) {
|
| - PrintError();
|
| - return;
|
| - }
|
| -
|
| - Timer t(false);
|
| - t.Start();
|
| -
|
| - const int kIterations = 100;
|
| - LARGE_INTEGER count = {0};
|
| - for (int i = 0; i < kIterations; i++) {
|
| - ASSERT_TRUE(::QueryPerformanceCounter(&count));
|
| - }
|
| -
|
| - t.Stop();
|
| -
|
| - // Expect the call to take anywhere up to 1000 nano seconds.
|
| - EXPECT_NEAR(t.GetNanoseconds() / kIterations, 500, 500);
|
| -}
|
| -#endif // #if 0
|
| -
|
| -} // namespace omaha
|
|
|