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

Unified Diff: base/idletimer_unittest.cc

Issue 9261: Update idle timer test to use longer intervals.... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 12 years, 1 month 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/idletimer_unittest.cc
===================================================================
--- base/idletimer_unittest.cc (revision 4457)
+++ base/idletimer_unittest.cc (working copy)
@@ -10,6 +10,13 @@
using base::TimeDelta;
using base::IdleTimer;
+
+// If the timers fire too quickly, it can be tricky to make timer tests
+// reliable on all buildbots. This constant sets a minimum timer delta where
+// we expect that we should be able to reliably count timers without problems
+// due to slight clock/scheduling variances.
+const int kSafeTestIntervalMs = 500;
+
namespace {
// We Mock the GetLastInputInfo function to return
@@ -27,7 +34,7 @@
class TestIdleTask : public IdleTimer {
public:
TestIdleTask(bool repeat)
- : IdleTimer(TimeDelta::FromMilliseconds(100), repeat),
+ : IdleTimer(TimeDelta::FromMilliseconds(kSafeTestIntervalMs), repeat),
idle_counter_(0) {
set_idle_time_source(MockIdleTimeSource);
}
@@ -72,7 +79,7 @@
// then will not fire again unless it goes non-idle first.
TEST_F(IdleTimerTest, NoRepeatIdle) {
- // Create an IdleTimer, which should fire once after 100ms.
+ // Create an IdleTimer, which should fire once after 500ms.
// Create a Quit timer which will fire after 1s.
// Verify that we fired exactly once.
@@ -81,7 +88,8 @@
TestFinishedTask finish_task;
base::OneShotTimer<TestFinishedTask> timer;
- timer.Start(TimeDelta::FromSeconds(1), &finish_task, &TestFinishedTask::Run);
+ timer.Start(TimeDelta::FromMilliseconds(2 * kSafeTestIntervalMs),
+ &finish_task, &TestFinishedTask::Run);
test_task.Start();
MessageLoop::current()->Run();
@@ -90,9 +98,9 @@
}
TEST_F(IdleTimerTest, NoRepeatFlipIdleOnce) {
- // Create an IdleTimer, which should fire once after 100ms.
- // Create a Quit timer which will fire after 1s.
- // Create a timer to reset once, idle after 500ms.
+ // Create an IdleTimer, which should fire once after 500ms.
+ // Create a Quit timer which will fire after 5s.
+ // Create a timer to reset once, idle after 2s.
// Verify that we fired exactly twice.
mock_timer_started = Time::Now();
@@ -102,11 +110,11 @@
ResetIdleTask reset_task;
base::OneShotTimer<TestFinishedTask> t1;
- t1.Start(TimeDelta::FromMilliseconds(1000), &finish_task,
+ t1.Start(TimeDelta::FromMilliseconds(10 * kSafeTestIntervalMs), &finish_task,
&TestFinishedTask::Run);
base::OneShotTimer<ResetIdleTask> t2;
- t2.Start(TimeDelta::FromMilliseconds(500), &reset_task,
+ t2.Start(TimeDelta::FromMilliseconds(4 * kSafeTestIntervalMs), &reset_task,
&ResetIdleTask::Run);
test_task.Start();
@@ -116,8 +124,8 @@
}
TEST_F(IdleTimerTest, NoRepeatNotIdle) {
- // Create an IdleTimer, which should fire once after 100ms.
- // Create a Quit timer which will fire after 1s.
+ // Create an IdleTimer, which should fire once after 500ms.
+ // Create a Quit timer which will fire after 5s.
// Create a timer to reset idle every 50ms.
// Verify that we never fired.
@@ -128,7 +136,7 @@
ResetIdleTask reset_task;
base::OneShotTimer<TestFinishedTask> t;
- t.Start(TimeDelta::FromMilliseconds(1000), &finish_task,
+ t.Start(TimeDelta::FromMilliseconds(10 * kSafeTestIntervalMs), &finish_task,
&TestFinishedTask::Run);
base::RepeatingTimer<ResetIdleTask> reset_timer;
@@ -151,34 +159,33 @@
// firing over and over.
TEST_F(IdleTimerTest, Repeat) {
- // Create an IdleTimer, which should fire repeatedly after 100ms.
- // Create a Quit timer which will fire after 1.05s.
- // Verify that we fired 10 times.
+ // Create an IdleTimer, which should fire repeatedly after 500ms.
+ // Create a Quit timer which will fire after 1.5s.
+ // Verify that we fired 2-3 times.
mock_timer_started = Time::Now();
TestIdleTask test_task(true);
TestFinishedTask finish_task;
base::OneShotTimer<TestFinishedTask> t;
- t.Start(TimeDelta::FromMilliseconds(1050), &finish_task,
+ t.Start(TimeDelta::FromMilliseconds(kSafeTestIntervalMs * 3), &finish_task,
&TestFinishedTask::Run);
test_task.Start();
MessageLoop::current()->Run();
- // In a perfect world, the idle_counter should be 10. However,
- // since timers aren't guaranteed to fire perfectly, this can
- // be less. Just expect more than 5 and no more than 10.
- EXPECT_GT(test_task.get_idle_counter(), 5);
- EXPECT_LE(test_task.get_idle_counter(), 10);
+ // In a perfect world, the idle_counter should be 2. However,
+ // due to timer 'slop', accept 2 or 3.
+ EXPECT_GE(test_task.get_idle_counter(), 2);
+ EXPECT_LE(test_task.get_idle_counter(), 3);
}
// TODO(darin): http://code.google.com/p/chromium/issues/detail?id=3780
-TEST_F(IdleTimerTest, DISABLED_RepeatIdleReset) {
- // Create an IdleTimer, which should fire repeatedly after 100ms.
- // Create a Quit timer which will fire after 1s.
- // Create a reset timer, which fires after 550ms
- // Verify that we fired 9 times.
+TEST_F(IdleTimerTest, RepeatIdleReset) {
+ // Create an IdleTimer, which should fire repeatedly after 500ms.
+ // Create a Quit timer which will fire after 5s.
+ // Create a reset timer, which fires after 2500ms
+ // Verify that we fired 8-10 times.
mock_timer_started = Time::Now();
TestIdleTask test_task(true);
@@ -186,11 +193,11 @@
TestFinishedTask finish_task;
base::OneShotTimer<TestFinishedTask> t1;
- t1.Start(TimeDelta::FromMilliseconds(1000), &finish_task,
+ t1.Start(TimeDelta::FromMilliseconds(10 * kSafeTestIntervalMs), &finish_task,
&TestFinishedTask::Run);
base::OneShotTimer<ResetIdleTask> t2;
- t2.Start(TimeDelta::FromMilliseconds(550), &reset_task,
+ t2.Start(TimeDelta::FromMilliseconds(5 * kSafeTestIntervalMs), &reset_task,
&ResetIdleTask::Run);
test_task.Start();
@@ -198,14 +205,14 @@
// In a perfect world, the idle_counter should be 9. However,
// since timers aren't guaranteed to fire perfectly, this can
- // be less. Just expect more than 5 and no more than 9.
- EXPECT_GT(test_task.get_idle_counter(), 5);
- EXPECT_LE(test_task.get_idle_counter(), 9);
+ // be less. Accept 8-10.
+ EXPECT_GE(test_task.get_idle_counter(), 8);
+ EXPECT_LE(test_task.get_idle_counter(), 10);
}
TEST_F(IdleTimerTest, RepeatNotIdle) {
- // Create an IdleTimer, which should fire repeatedly after 100ms.
- // Create a Quit timer which will fire after 1s.
+ // Create an IdleTimer, which should fire repeatedly after 500ms.
+ // Create a Quit timer which will fire after 4s.
// Create a timer to reset idle every 50ms.
// Verify that we never fired.
@@ -216,7 +223,7 @@
ResetIdleTask reset_task;
base::OneShotTimer<TestFinishedTask> t;
- t.Start(TimeDelta::FromMilliseconds(1000), &finish_task,
+ t.Start(TimeDelta::FromMilliseconds(8 * kSafeTestIntervalMs), &finish_task,
&TestFinishedTask::Run);
base::RepeatingTimer<ResetIdleTask> reset_timer;
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698