Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(39)

Side by Side Diff: base/time/time_unittest.cc

Issue 797893003: [Windows] One TimeTicks clock: efficient/reliable high-res, with low-res fallback. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 "base/time/time.h" 5 #include "base/time/time.h"
6 6
7 #include <time.h> 7 #include <time.h>
8 8
9 #include <limits>
9 #include <string> 10 #include <string>
10 11
11 #include "base/compiler_specific.h" 12 #include "base/compiler_specific.h"
12 #include "base/logging.h" 13 #include "base/logging.h"
13 #include "base/strings/stringprintf.h" 14 #include "base/strings/stringprintf.h"
14 #include "base/threading/platform_thread.h" 15 #include "base/threading/platform_thread.h"
15 #include "build/build_config.h" 16 #include "build/build_config.h"
16 #include "testing/gtest/include/gtest/gtest.h" 17 #include "testing/gtest/include/gtest/gtest.h"
17 18
18 namespace base { 19 namespace base {
(...skipping 616 matching lines...) Expand 10 before | Expand all | Expand 10 after
635 // Unfortunately, our InMilliseconds() function truncates 636 // Unfortunately, our InMilliseconds() function truncates
636 // rather than rounds. We should consider fixing this 637 // rather than rounds. We should consider fixing this
637 // so that our averages come out better. 638 // so that our averages come out better.
638 EXPECT_GE(delta.InMilliseconds(), 9); 639 EXPECT_GE(delta.InMilliseconds(), 9);
639 EXPECT_GE(delta.InMicroseconds(), 9000); 640 EXPECT_GE(delta.InMicroseconds(), 9000);
640 EXPECT_EQ(delta.InSeconds(), 0); 641 EXPECT_EQ(delta.InSeconds(), 0);
641 } 642 }
642 } 643 }
643 644
644 static void HighResClockTest(TimeTicks (*GetTicks)()) { 645 static void HighResClockTest(TimeTicks (*GetTicks)()) {
645 #if defined(OS_WIN)
646 // HighResNow doesn't work on some systems. Since the product still works 646 // HighResNow doesn't work on some systems. Since the product still works
647 // even if it doesn't work, it makes this entire test questionable. 647 // even if it doesn't work, it makes this entire test questionable.
648 if (!TimeTicks::IsHighResClockWorking()) 648 if (!TimeTicks::IsHighResolution())
649 return; 649 return;
650 #endif
651 650
652 // Why do we loop here? 651 // Why do we loop here?
653 // We're trying to measure that intervals increment in a VERY small amount 652 // We're trying to measure that intervals increment in a VERY small amount
654 // of time -- less than 15ms. Unfortunately, if we happen to have a 653 // of time -- less than 15ms. Unfortunately, if we happen to have a
655 // context switch in the middle of our test, the context switch could easily 654 // context switch in the middle of our test, the context switch could easily
656 // exceed our limit. So, we iterate on this several times. As long as we're 655 // exceed our limit. So, we iterate on this several times. As long as we're
657 // able to detect the fine-granularity timers at least once, then the test 656 // able to detect the fine-granularity timers at least once, then the test
658 // has succeeded. 657 // has succeeded.
659 658
660 const int kTargetGranularityUs = 15000; // 15ms 659 const int kTargetGranularityUs = 15000; // 15ms
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
785 784
786 // We could define this separately for Time, TimeTicks and TimeDelta but the 785 // We could define this separately for Time, TimeTicks and TimeDelta but the
787 // definitions would be identical anyway. 786 // definitions would be identical anyway.
788 template <class Any> 787 template <class Any>
789 std::string AnyToString(Any any) { 788 std::string AnyToString(Any any) {
790 std::ostringstream oss; 789 std::ostringstream oss;
791 oss << any; 790 oss << any;
792 return oss.str(); 791 return oss.str();
793 } 792 }
794 793
794 TEST(TimeDelta, Magnitude) {
795 const int64 zero = 0;
796 EXPECT_EQ(TimeDelta::FromMicroseconds(zero),
797 TimeDelta::FromMicroseconds(zero).magnitude());
798
799 const int64 one = 1;
800 const int64 negative_one = -1;
801 EXPECT_EQ(TimeDelta::FromMicroseconds(one),
802 TimeDelta::FromMicroseconds(one).magnitude());
803 EXPECT_EQ(TimeDelta::FromMicroseconds(one),
804 TimeDelta::FromMicroseconds(negative_one).magnitude());
805
806 const int64 max_int64_minus_one = std::numeric_limits<int64>::max() - 1;
807 const int64 min_int64_plus_two = std::numeric_limits<int64>::min() + 2;
808 EXPECT_EQ(TimeDelta::FromMicroseconds(max_int64_minus_one),
809 TimeDelta::FromMicroseconds(max_int64_minus_one).magnitude());
810 EXPECT_EQ(TimeDelta::FromMicroseconds(max_int64_minus_one),
811 TimeDelta::FromMicroseconds(min_int64_plus_two).magnitude());
812 }
813
795 TEST(TimeDeltaLogging, DCheckEqCompiles) { 814 TEST(TimeDeltaLogging, DCheckEqCompiles) {
796 DCHECK_EQ(TimeDelta(), TimeDelta()); 815 DCHECK_EQ(TimeDelta(), TimeDelta());
797 } 816 }
798 817
799 TEST(TimeDeltaLogging, EmptyIsZero) { 818 TEST(TimeDeltaLogging, EmptyIsZero) {
800 TimeDelta zero; 819 TimeDelta zero;
801 EXPECT_EQ("0s", AnyToString(zero)); 820 EXPECT_EQ("0s", AnyToString(zero));
802 } 821 }
803 822
804 TEST(TimeDeltaLogging, FiveHundredMs) { 823 TEST(TimeDeltaLogging, FiveHundredMs) {
(...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after
872 891
873 TEST(TimeTicksLogging, DoesNotMakeStreamBad) { 892 TEST(TimeTicksLogging, DoesNotMakeStreamBad) {
874 std::ostringstream oss; 893 std::ostringstream oss;
875 oss << TimeTicks(); 894 oss << TimeTicks();
876 EXPECT_TRUE(oss.good()); 895 EXPECT_TRUE(oss.good());
877 } 896 }
878 897
879 } // namespace 898 } // namespace
880 899
881 } // namespace base 900 } // namespace base
OLDNEW
« no previous file with comments | « base/time/time_posix.cc ('k') | base/time/time_win.cc » ('j') | base/time/time_win.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698