Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 485 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 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, NowFromSystemTraceTime) { | |
| 507 #if defined(OS_WIN) | |
| 508 // HighResNow doesn't work on some systems. Since the product still works | |
| 509 // even if it doesn't work, it makes this entire test questionable. | |
| 510 if (!TimeTicks::IsHighResClockWorking()) | |
| 511 return; | |
| 512 #endif | |
| 513 | |
| 514 // Why do we loop here? | |
| 515 // We're trying to measure that intervals increment in a VERY small amount | |
| 516 // of time -- less than 15ms. Unfortunately, if we happen to have a | |
| 517 // context switch in the middle of our test, the context switch could easily | |
| 518 // exceed our limit. So, we iterate on this several times. As long as we're | |
| 519 // able to detect the fine-granularity timers at least once, then the test | |
| 520 // has succeeded. | |
| 521 | |
| 522 const int kTargetGranularityUs = 15000; // 15ms | |
|
jar (doing other things)
2012/04/27 22:50:18
Ordinary system clocks can be set to run faster th
Sam Leffler
2012/04/27 22:56:07
This is c&p of the HighRes test; I did not write t
jar (doing other things)
2012/04/30 22:05:57
I see now. I read this as new code, and made comm
Sam Leffler
2012/04/30 22:47:58
Done.
| |
| 523 | |
| 524 bool success = false; | |
| 525 int retries = 100; // Arbitrary. | |
|
jar (doing other things)
2012/04/27 22:50:18
100 sounds plausible.... but it is always nice to
Sam Leffler
2012/04/27 22:56:07
I don't see the HighRes test failing so think this
| |
| 526 TimeDelta delta; | |
| 527 while (!success && retries--) { | |
| 528 TimeTicks ticks_start = TimeTicks::NowFromSystemTraceTime(); | |
| 529 // Loop until we can detect that the clock has changed. Non-HighRes timers | |
| 530 // will increment in chunks, e.g. 15ms. By spinning until we see a clock | |
| 531 // change, we detect the minimum time between measurements. | |
| 532 do { | |
| 533 delta = TimeTicks::NowFromSystemTraceTime() - ticks_start; | |
| 534 } while (delta.InMilliseconds() == 0); | |
|
jar (doing other things)
2012/04/27 22:50:18
Why don't you look for any change? Why does the m
Sam Leffler
2012/04/27 22:56:07
Again, this is just the existing HighRes test; if
| |
| 535 | |
| 536 if (delta.InMicroseconds() <= kTargetGranularityUs) | |
| 537 success = true; | |
| 538 } | |
| 539 | |
| 540 // In high resolution mode, we expect to see the clock increment | |
| 541 // in intervals less than 15ms. | |
| 542 EXPECT_TRUE(success); | |
| 543 } | |
| 544 | |
| 506 TEST(TimeDelta, FromAndIn) { | 545 TEST(TimeDelta, FromAndIn) { |
| 507 EXPECT_TRUE(TimeDelta::FromDays(2) == TimeDelta::FromHours(48)); | 546 EXPECT_TRUE(TimeDelta::FromDays(2) == TimeDelta::FromHours(48)); |
| 508 EXPECT_TRUE(TimeDelta::FromHours(3) == TimeDelta::FromMinutes(180)); | 547 EXPECT_TRUE(TimeDelta::FromHours(3) == TimeDelta::FromMinutes(180)); |
| 509 EXPECT_TRUE(TimeDelta::FromMinutes(2) == TimeDelta::FromSeconds(120)); | 548 EXPECT_TRUE(TimeDelta::FromMinutes(2) == TimeDelta::FromSeconds(120)); |
| 510 EXPECT_TRUE(TimeDelta::FromSeconds(2) == TimeDelta::FromMilliseconds(2000)); | 549 EXPECT_TRUE(TimeDelta::FromSeconds(2) == TimeDelta::FromMilliseconds(2000)); |
| 511 EXPECT_TRUE(TimeDelta::FromMilliseconds(2) == | 550 EXPECT_TRUE(TimeDelta::FromMilliseconds(2) == |
| 512 TimeDelta::FromMicroseconds(2000)); | 551 TimeDelta::FromMicroseconds(2000)); |
| 513 EXPECT_EQ(13, TimeDelta::FromDays(13).InDays()); | 552 EXPECT_EQ(13, TimeDelta::FromDays(13).InDays()); |
| 514 EXPECT_EQ(13, TimeDelta::FromHours(13).InHours()); | 553 EXPECT_EQ(13, TimeDelta::FromHours(13).InHours()); |
| 515 EXPECT_EQ(13, TimeDelta::FromMinutes(13).InMinutes()); | 554 EXPECT_EQ(13, TimeDelta::FromMinutes(13).InMinutes()); |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 554 exploded.minute = 0; | 593 exploded.minute = 0; |
| 555 exploded.second = 0; | 594 exploded.second = 0; |
| 556 exploded.millisecond = 0; | 595 exploded.millisecond = 0; |
| 557 Time t = Time::FromUTCExploded(exploded); | 596 Time t = Time::FromUTCExploded(exploded); |
| 558 // Unix 1970 epoch. | 597 // Unix 1970 epoch. |
| 559 EXPECT_EQ(GG_INT64_C(11644473600000000), t.ToInternalValue()); | 598 EXPECT_EQ(GG_INT64_C(11644473600000000), t.ToInternalValue()); |
| 560 | 599 |
| 561 // We can't test 1601 epoch, since the system time functions on Linux | 600 // We can't test 1601 epoch, since the system time functions on Linux |
| 562 // only compute years starting from 1900. | 601 // only compute years starting from 1900. |
| 563 } | 602 } |
| OLD | NEW |