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

Side by Side Diff: base/time_unittest.cc

Issue 10257020: Add interface to system trace clock. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: consolidate high res clock unit test code Created 8 years, 7 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 | Annotate | Revision Log
« no previous file with comments | « base/time_posix.cc ('k') | base/time_win.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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.h" 5 #include "base/time.h"
6 6
7 #include <time.h> 7 #include <time.h>
8 8
9 #include "base/compiler_specific.h" 9 #include "base/compiler_specific.h"
10 #include "base/threading/platform_thread.h" 10 #include "base/threading/platform_thread.h"
(...skipping 446 matching lines...) Expand 10 before | Expand all | Expand 10 after
457 // 457 //
458 // Unfortunately, our InMilliseconds() function truncates 458 // Unfortunately, our InMilliseconds() function truncates
459 // rather than rounds. We should consider fixing this 459 // rather than rounds. We should consider fixing this
460 // so that our averages come out better. 460 // so that our averages come out better.
461 EXPECT_GE(delta.InMilliseconds(), 9); 461 EXPECT_GE(delta.InMilliseconds(), 9);
462 EXPECT_GE(delta.InMicroseconds(), 9000); 462 EXPECT_GE(delta.InMicroseconds(), 9000);
463 EXPECT_EQ(delta.InSeconds(), 0); 463 EXPECT_EQ(delta.InSeconds(), 0);
464 } 464 }
465 } 465 }
466 466
467 TEST(TimeTicks, HighResNow) { 467 static void HighResClockTest(TimeTicks (*GetTicks)()) {
468 #if defined(OS_WIN) 468 #if defined(OS_WIN)
469 // HighResNow doesn't work on some systems. Since the product still works 469 // HighResNow doesn't work on some systems. Since the product still works
470 // even if it doesn't work, it makes this entire test questionable. 470 // even if it doesn't work, it makes this entire test questionable.
471 if (!TimeTicks::IsHighResClockWorking()) 471 if (!TimeTicks::IsHighResClockWorking())
472 return; 472 return;
473 #endif 473 #endif
474 474
475 // Why do we loop here? 475 // Why do we loop here?
476 // We're trying to measure that intervals increment in a VERY small amount 476 // We're trying to measure that intervals increment in a VERY small amount
477 // of time -- less than 15ms. Unfortunately, if we happen to have a 477 // of time -- less than 15ms. Unfortunately, if we happen to have a
478 // context switch in the middle of our test, the context switch could easily 478 // context switch in the middle of our test, the context switch could easily
479 // exceed our limit. So, we iterate on this several times. As long as we're 479 // exceed our limit. So, we iterate on this several times. As long as we're
480 // able to detect the fine-granularity timers at least once, then the test 480 // able to detect the fine-granularity timers at least once, then the test
481 // has succeeded. 481 // has succeeded.
482 482
483 const int kTargetGranularityUs = 15000; // 15ms 483 const int kTargetGranularityUs = 15000; // 15ms
484 484
485 bool success = false; 485 bool success = false;
486 int retries = 100; // Arbitrary. 486 int retries = 100; // Arbitrary.
487 TimeDelta delta; 487 TimeDelta delta;
488 while (!success && retries--) { 488 while (!success && retries--) {
489 TimeTicks ticks_start = TimeTicks::HighResNow(); 489 TimeTicks ticks_start = GetTicks();
490 // Loop until we can detect that the clock has changed. Non-HighRes timers 490 // Loop until we can detect that the clock has changed. Non-HighRes timers
491 // will increment in chunks, e.g. 15ms. By spinning until we see a clock 491 // will increment in chunks, e.g. 15ms. By spinning until we see a clock
492 // change, we detect the minimum time between measurements. 492 // change, we detect the minimum time between measurements.
493 do { 493 do {
494 delta = TimeTicks::HighResNow() - ticks_start; 494 delta = GetTicks() - ticks_start;
495 } while (delta.InMilliseconds() == 0); 495 } while (delta.InMilliseconds() == 0);
496 496
497 if (delta.InMicroseconds() <= kTargetGranularityUs) 497 if (delta.InMicroseconds() <= kTargetGranularityUs)
498 success = true; 498 success = true;
499 } 499 }
500 500
501 // In high resolution mode, we expect to see the clock increment 501 // In high resolution mode, we expect to see the clock increment
502 // in intervals less than 15ms. 502 // in intervals less than 15ms.
503 EXPECT_TRUE(success); 503 EXPECT_TRUE(success);
504 } 504 }
505 505
506 TEST(TimeTicks, HighResNow) {
507 HighResClockTest(&TimeTicks::HighResNow);
508 }
509
510 TEST(TimeTicks, NowFromSystemTraceTime) {
511 // Re-use HighResNow test for now since clock properties are identical.
512 HighResClockTest(&TimeTicks::NowFromSystemTraceTime);
513 }
514
506 TEST(TimeDelta, FromAndIn) { 515 TEST(TimeDelta, FromAndIn) {
507 EXPECT_TRUE(TimeDelta::FromDays(2) == TimeDelta::FromHours(48)); 516 EXPECT_TRUE(TimeDelta::FromDays(2) == TimeDelta::FromHours(48));
508 EXPECT_TRUE(TimeDelta::FromHours(3) == TimeDelta::FromMinutes(180)); 517 EXPECT_TRUE(TimeDelta::FromHours(3) == TimeDelta::FromMinutes(180));
509 EXPECT_TRUE(TimeDelta::FromMinutes(2) == TimeDelta::FromSeconds(120)); 518 EXPECT_TRUE(TimeDelta::FromMinutes(2) == TimeDelta::FromSeconds(120));
510 EXPECT_TRUE(TimeDelta::FromSeconds(2) == TimeDelta::FromMilliseconds(2000)); 519 EXPECT_TRUE(TimeDelta::FromSeconds(2) == TimeDelta::FromMilliseconds(2000));
511 EXPECT_TRUE(TimeDelta::FromMilliseconds(2) == 520 EXPECT_TRUE(TimeDelta::FromMilliseconds(2) ==
512 TimeDelta::FromMicroseconds(2000)); 521 TimeDelta::FromMicroseconds(2000));
513 EXPECT_EQ(13, TimeDelta::FromDays(13).InDays()); 522 EXPECT_EQ(13, TimeDelta::FromDays(13).InDays());
514 EXPECT_EQ(13, TimeDelta::FromHours(13).InHours()); 523 EXPECT_EQ(13, TimeDelta::FromHours(13).InHours());
515 EXPECT_EQ(13, TimeDelta::FromMinutes(13).InMinutes()); 524 EXPECT_EQ(13, TimeDelta::FromMinutes(13).InMinutes());
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
554 exploded.minute = 0; 563 exploded.minute = 0;
555 exploded.second = 0; 564 exploded.second = 0;
556 exploded.millisecond = 0; 565 exploded.millisecond = 0;
557 Time t = Time::FromUTCExploded(exploded); 566 Time t = Time::FromUTCExploded(exploded);
558 // Unix 1970 epoch. 567 // Unix 1970 epoch.
559 EXPECT_EQ(GG_INT64_C(11644473600000000), t.ToInternalValue()); 568 EXPECT_EQ(GG_INT64_C(11644473600000000), t.ToInternalValue());
560 569
561 // We can't test 1601 epoch, since the system time functions on Linux 570 // We can't test 1601 epoch, since the system time functions on Linux
562 // only compute years starting from 1900. 571 // only compute years starting from 1900.
563 } 572 }
OLDNEW
« no previous file with comments | « base/time_posix.cc ('k') | base/time_win.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698