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

Unified Diff: cc/CCDelayBasedTimeSourceTest.cpp

Issue 10956006: Convert CC scheduler logic to use base::TimeTicks/Delta instead of doubles (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebased Created 8 years, 3 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « cc/CCDelayBasedTimeSource.cpp ('k') | cc/CCFrameRateController.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/CCDelayBasedTimeSourceTest.cpp
diff --git a/cc/CCDelayBasedTimeSourceTest.cpp b/cc/CCDelayBasedTimeSourceTest.cpp
index a709583b67d04d755a6f77f731bd50daa6d3c4a5..a8c876872e915fbbc80e29e3fe3a3716b38fc389 100644
--- a/cc/CCDelayBasedTimeSourceTest.cpp
+++ b/cc/CCDelayBasedTimeSourceTest.cpp
@@ -17,19 +17,23 @@ using namespace WebKitTests;
namespace {
+base::TimeDelta interval()
+{
+ return base::TimeDelta::FromMicroseconds(base::Time::kMicrosecondsPerSecond / 60);
+}
+
TEST(CCDelayBasedTimeSourceTest, TaskPostedAndTickCalled)
{
FakeCCThread thread;
FakeCCTimeSourceClient client;
- RefPtr<FakeCCDelayBasedTimeSource> timer = FakeCCDelayBasedTimeSource::create(1.0 / 60.0, &thread);
+ RefPtr<FakeCCDelayBasedTimeSource> timer = FakeCCDelayBasedTimeSource::create(interval(), &thread);
timer->setClient(&client);
- timer->setMonotonicTimeNow(0);
timer->setActive(true);
EXPECT_TRUE(timer->active());
EXPECT_TRUE(thread.hasPendingTask());
- timer->setMonotonicTimeNow(0.016);
+ timer->setNow(timer->now() + base::TimeDelta::FromMilliseconds(16));
thread.runPendingTask();
EXPECT_TRUE(timer->active());
EXPECT_TRUE(client.tickCalled());
@@ -39,7 +43,7 @@ TEST(CCDelayBasedTimeSource, TickNotCalledWithTaskPosted)
{
FakeCCThread thread;
FakeCCTimeSourceClient client;
- RefPtr<FakeCCDelayBasedTimeSource> timer = FakeCCDelayBasedTimeSource::create(1.0 / 60.0, &thread);
+ RefPtr<FakeCCDelayBasedTimeSource> timer = FakeCCDelayBasedTimeSource::create(interval(), &thread);
timer->setClient(&client);
timer->setActive(true);
EXPECT_TRUE(thread.hasPendingTask());
@@ -52,7 +56,7 @@ TEST(CCDelayBasedTimeSource, StartTwiceEnqueuesOneTask)
{
FakeCCThread thread;
FakeCCTimeSourceClient client;
- RefPtr<FakeCCDelayBasedTimeSource> timer = FakeCCDelayBasedTimeSource::create(1.0 / 60.0, &thread);
+ RefPtr<FakeCCDelayBasedTimeSource> timer = FakeCCDelayBasedTimeSource::create(interval(), &thread);
timer->setClient(&client);
timer->setActive(true);
EXPECT_TRUE(thread.hasPendingTask());
@@ -65,7 +69,7 @@ TEST(CCDelayBasedTimeSource, StartWhenRunningDoesntTick)
{
FakeCCThread thread;
FakeCCTimeSourceClient client;
- RefPtr<FakeCCDelayBasedTimeSource> timer = FakeCCDelayBasedTimeSource::create(1.0 / 60.0, &thread);
+ RefPtr<FakeCCDelayBasedTimeSource> timer = FakeCCDelayBasedTimeSource::create(interval(), &thread);
timer->setClient(&client);
timer->setActive(true);
thread.runPendingTask();
@@ -80,8 +84,7 @@ TEST(CCDelayBasedTimeSource, NextDelaySaneWhenExactlyOnRequestedTime)
{
FakeCCThread thread;
FakeCCTimeSourceClient client;
- double interval = 1.0 / 60.0;
- RefPtr<FakeCCDelayBasedTimeSource> timer = FakeCCDelayBasedTimeSource::create(interval, &thread);
+ RefPtr<FakeCCDelayBasedTimeSource> timer = FakeCCDelayBasedTimeSource::create(interval(), &thread);
timer->setClient(&client);
timer->setActive(true);
// Run the first task, as that activates the timer and picks up a timebase.
@@ -89,7 +92,7 @@ TEST(CCDelayBasedTimeSource, NextDelaySaneWhenExactlyOnRequestedTime)
EXPECT_EQ(16, thread.pendingDelayMs());
- timer->setMonotonicTimeNow(interval);
+ timer->setNow(timer->now() + interval());
thread.runPendingTask();
EXPECT_EQ(16, thread.pendingDelayMs());
@@ -101,8 +104,7 @@ TEST(CCDelayBasedTimeSource, NextDelaySaneWhenSlightlyAfterRequestedTime)
{
FakeCCThread thread;
FakeCCTimeSourceClient client;
- double interval = 1.0 / 60.0;
- RefPtr<FakeCCDelayBasedTimeSource> timer = FakeCCDelayBasedTimeSource::create(interval, &thread);
+ RefPtr<FakeCCDelayBasedTimeSource> timer = FakeCCDelayBasedTimeSource::create(interval(), &thread);
timer->setClient(&client);
timer->setActive(true);
// Run the first task, as that activates the timer and picks up a timebase.
@@ -110,7 +112,7 @@ TEST(CCDelayBasedTimeSource, NextDelaySaneWhenSlightlyAfterRequestedTime)
EXPECT_EQ(16, thread.pendingDelayMs());
- timer->setMonotonicTimeNow(interval + 0.0000001);
+ timer->setNow(timer->now() + interval() + base::TimeDelta::FromMicroseconds(1));
thread.runPendingTask();
EXPECT_EQ(16, thread.pendingDelayMs());
@@ -122,8 +124,7 @@ TEST(CCDelayBasedTimeSource, NextDelaySaneWhenExactlyTwiceAfterRequestedTime)
{
FakeCCThread thread;
FakeCCTimeSourceClient client;
- double interval = 1.0 / 60.0;
- RefPtr<FakeCCDelayBasedTimeSource> timer = FakeCCDelayBasedTimeSource::create(interval, &thread);
+ RefPtr<FakeCCDelayBasedTimeSource> timer = FakeCCDelayBasedTimeSource::create(interval(), &thread);
timer->setClient(&client);
timer->setActive(true);
// Run the first task, as that activates the timer and picks up a timebase.
@@ -131,7 +132,7 @@ TEST(CCDelayBasedTimeSource, NextDelaySaneWhenExactlyTwiceAfterRequestedTime)
EXPECT_EQ(16, thread.pendingDelayMs());
- timer->setMonotonicTimeNow(2*interval);
+ timer->setNow(timer->now() + 2 * interval());
thread.runPendingTask();
EXPECT_EQ(16, thread.pendingDelayMs());
@@ -143,8 +144,7 @@ TEST(CCDelayBasedTimeSource, NextDelaySaneWhenSlightlyAfterTwiceRequestedTime)
{
FakeCCThread thread;
FakeCCTimeSourceClient client;
- double interval = 1.0 / 60.0;
- RefPtr<FakeCCDelayBasedTimeSource> timer = FakeCCDelayBasedTimeSource::create(interval, &thread);
+ RefPtr<FakeCCDelayBasedTimeSource> timer = FakeCCDelayBasedTimeSource::create(interval(), &thread);
timer->setClient(&client);
timer->setActive(true);
// Run the first task, as that activates the timer and picks up a timebase.
@@ -152,7 +152,7 @@ TEST(CCDelayBasedTimeSource, NextDelaySaneWhenSlightlyAfterTwiceRequestedTime)
EXPECT_EQ(16, thread.pendingDelayMs());
- timer->setMonotonicTimeNow(2*interval + 0.0000001);
+ timer->setNow(timer->now() + 2 * interval() + base::TimeDelta::FromMicroseconds(1));
thread.runPendingTask();
EXPECT_EQ(16, thread.pendingDelayMs());
@@ -164,8 +164,7 @@ TEST(CCDelayBasedTimeSource, NextDelaySaneWhenHalfAfterRequestedTime)
{
FakeCCThread thread;
FakeCCTimeSourceClient client;
- double interval = 1.0 / 60.0;
- RefPtr<FakeCCDelayBasedTimeSource> timer = FakeCCDelayBasedTimeSource::create(interval, &thread);
+ RefPtr<FakeCCDelayBasedTimeSource> timer = FakeCCDelayBasedTimeSource::create(interval(), &thread);
timer->setClient(&client);
timer->setActive(true);
// Run the first task, as that activates the timer and picks up a timebase.
@@ -173,7 +172,7 @@ TEST(CCDelayBasedTimeSource, NextDelaySaneWhenHalfAfterRequestedTime)
EXPECT_EQ(16, thread.pendingDelayMs());
- timer->setMonotonicTimeNow(interval + interval * 0.5);
+ timer->setNow(timer->now() + interval() + base::TimeDelta::FromMilliseconds(8));
thread.runPendingTask();
EXPECT_EQ(8, thread.pendingDelayMs());
@@ -185,8 +184,7 @@ TEST(CCDelayBasedTimeSource, SaneHandlingOfJitteryTimebase)
{
FakeCCThread thread;
FakeCCTimeSourceClient client;
- double interval = 1.0 / 60.0;
- RefPtr<FakeCCDelayBasedTimeSource> timer = FakeCCDelayBasedTimeSource::create(interval, &thread);
+ RefPtr<FakeCCDelayBasedTimeSource> timer = FakeCCDelayBasedTimeSource::create(interval(), &thread);
timer->setClient(&client);
timer->setActive(true);
// Run the first task, as that activates the timer and picks up a timebase.
@@ -195,27 +193,26 @@ TEST(CCDelayBasedTimeSource, SaneHandlingOfJitteryTimebase)
EXPECT_EQ(16, thread.pendingDelayMs());
// Jitter timebase ~1ms late
- timer->setTimebaseAndInterval(interval + 0.001, interval);
- timer->setMonotonicTimeNow(interval);
+ timer->setNow(timer->now() + interval());
+ timer->setTimebaseAndInterval(timer->now() + base::TimeDelta::FromMilliseconds(1), interval());
thread.runPendingTask();
// Without double tick prevention, pendingDelayMs would be 1.
EXPECT_EQ(17, thread.pendingDelayMs());
// Jitter timebase ~1ms early
- timer->setTimebaseAndInterval(interval * 2 - 0.001, interval);
- timer->setMonotonicTimeNow(interval * 2);
+ timer->setNow(timer->now() + interval());
+ timer->setTimebaseAndInterval(timer->now() - base::TimeDelta::FromMilliseconds(1), interval());
thread.runPendingTask();
EXPECT_EQ(15, thread.pendingDelayMs());
}
-TEST(CCDelayBasedTimeSource, HanldlesSignificantTimebaseChangesImmediately)
+TEST(CCDelayBasedTimeSource, HandlesSignificantTimebaseChangesImmediately)
{
FakeCCThread thread;
FakeCCTimeSourceClient client;
- double interval = 1.0 / 60.0;
- RefPtr<FakeCCDelayBasedTimeSource> timer = FakeCCDelayBasedTimeSource::create(interval, &thread);
+ RefPtr<FakeCCDelayBasedTimeSource> timer = FakeCCDelayBasedTimeSource::create(interval(), &thread);
timer->setClient(&client);
timer->setActive(true);
// Run the first task, as that activates the timer and picks up a timebase.
@@ -224,28 +221,29 @@ TEST(CCDelayBasedTimeSource, HanldlesSignificantTimebaseChangesImmediately)
EXPECT_EQ(16, thread.pendingDelayMs());
// Tick, then shift timebase by +7ms.
- timer->setMonotonicTimeNow(interval);
+ timer->setNow(timer->now() + interval());
thread.runPendingTask();
EXPECT_EQ(16, thread.pendingDelayMs());
client.reset();
thread.runPendingTaskOnOverwrite(true);
- timer->setTimebaseAndInterval(interval + 0.0070001, interval);
+ base::TimeDelta jitter = base::TimeDelta::FromMilliseconds(7) + base::TimeDelta::FromMicroseconds(1);
+ timer->setTimebaseAndInterval(timer->now() + jitter, interval());
thread.runPendingTaskOnOverwrite(false);
EXPECT_FALSE(client.tickCalled()); // Make sure pending tasks were canceled.
EXPECT_EQ(7, thread.pendingDelayMs());
// Tick, then shift timebase by -7ms.
- timer->setMonotonicTimeNow(interval + 0.0070001);
+ timer->setNow(timer->now() + jitter);
thread.runPendingTask();
EXPECT_EQ(16, thread.pendingDelayMs());
client.reset();
thread.runPendingTaskOnOverwrite(true);
- timer->setTimebaseAndInterval(interval, interval);
+ timer->setTimebaseAndInterval(base::TimeTicks() + interval(), interval());
thread.runPendingTaskOnOverwrite(false);
EXPECT_FALSE(client.tickCalled()); // Make sure pending tasks were canceled.
@@ -256,8 +254,7 @@ TEST(CCDelayBasedTimeSource, HanldlesSignificantIntervalChangesImmediately)
{
FakeCCThread thread;
FakeCCTimeSourceClient client;
- double interval = 1.0 / 60.0;
- RefPtr<FakeCCDelayBasedTimeSource> timer = FakeCCDelayBasedTimeSource::create(interval, &thread);
+ RefPtr<FakeCCDelayBasedTimeSource> timer = FakeCCDelayBasedTimeSource::create(interval(), &thread);
timer->setClient(&client);
timer->setActive(true);
// Run the first task, as that activates the timer and picks up a timebase.
@@ -266,28 +263,28 @@ TEST(CCDelayBasedTimeSource, HanldlesSignificantIntervalChangesImmediately)
EXPECT_EQ(16, thread.pendingDelayMs());
// Tick, then double the interval.
- timer->setMonotonicTimeNow(interval);
+ timer->setNow(timer->now() + interval());
thread.runPendingTask();
EXPECT_EQ(16, thread.pendingDelayMs());
client.reset();
thread.runPendingTaskOnOverwrite(true);
- timer->setTimebaseAndInterval(interval, interval * 2);
+ timer->setTimebaseAndInterval(base::TimeTicks() + interval(), interval() * 2);
thread.runPendingTaskOnOverwrite(false);
EXPECT_FALSE(client.tickCalled()); // Make sure pending tasks were canceled.
EXPECT_EQ(33, thread.pendingDelayMs());
// Tick, then halve the interval.
- timer->setMonotonicTimeNow(interval * 3);
+ timer->setNow(timer->now() + interval() * 2);
thread.runPendingTask();
EXPECT_EQ(33, thread.pendingDelayMs());
client.reset();
thread.runPendingTaskOnOverwrite(true);
- timer->setTimebaseAndInterval(interval * 3, interval);
+ timer->setTimebaseAndInterval(base::TimeTicks() + interval() * 3, interval());
thread.runPendingTaskOnOverwrite(false);
EXPECT_FALSE(client.tickCalled()); // Make sure pending tasks were canceled.
@@ -296,11 +293,11 @@ TEST(CCDelayBasedTimeSource, HanldlesSignificantIntervalChangesImmediately)
TEST(CCDelayBasedTimeSourceTest, AchievesTargetRateWithNoNoise)
{
- int numIterations = 1000;
+ int numIterations = 10;
FakeCCThread thread;
FakeCCTimeSourceClient client;
- RefPtr<FakeCCDelayBasedTimeSource> timer = FakeCCDelayBasedTimeSource::create(1.0 / 60.0, &thread);
+ RefPtr<FakeCCDelayBasedTimeSource> timer = FakeCCDelayBasedTimeSource::create(interval(), &thread);
timer->setClient(&client);
timer->setActive(true);
@@ -312,8 +309,7 @@ TEST(CCDelayBasedTimeSourceTest, AchievesTargetRateWithNoNoise)
totalFrameTime += delayMs / 1000.0;
// Run the callback exactly when asked
- double now = timer->monotonicTimeNow() + delayMs / 1000.0;
- timer->setMonotonicTimeNow(now);
+ timer->setNow(timer->now() + base::TimeDelta::FromMilliseconds(delayMs));
thread.runPendingTask();
}
double averageInterval = totalFrameTime / static_cast<double>(numIterations);
@@ -324,7 +320,7 @@ TEST(CCDelayBasedTimeSource, TestDeactivateWhilePending)
{
FakeCCThread thread;
FakeCCTimeSourceClient client;
- RefPtr<FakeCCDelayBasedTimeSource> timer = FakeCCDelayBasedTimeSource::create(1.0 / 60.0, &thread);
+ RefPtr<FakeCCDelayBasedTimeSource> timer = FakeCCDelayBasedTimeSource::create(interval(), &thread);
timer->setClient(&client);
timer->setActive(true); // Should post a task.
timer->setActive(false);
@@ -336,12 +332,11 @@ TEST(CCDelayBasedTimeSource, TestDeactivateAndReactivateBeforeNextTickTime)
{
FakeCCThread thread;
FakeCCTimeSourceClient client;
- RefPtr<FakeCCDelayBasedTimeSource> timer = FakeCCDelayBasedTimeSource::create(1.0 / 60.0, &thread);
+ RefPtr<FakeCCDelayBasedTimeSource> timer = FakeCCDelayBasedTimeSource::create(interval(), &thread);
timer->setClient(&client);
// Should run the activate task, and pick up a new timebase.
timer->setActive(true);
- timer->setMonotonicTimeNow(0);
thread.runPendingTask();
// Stop the timer
@@ -352,7 +347,7 @@ TEST(CCDelayBasedTimeSource, TestDeactivateAndReactivateBeforeNextTickTime)
// Start the timer again, but before the next tick time the timer previously
// planned on using. That same tick time should still be targeted.
- timer->setMonotonicTimeNow(0.004);
+ timer->setNow(timer->now() + base::TimeDelta::FromMilliseconds(4));
timer->setActive(true);
EXPECT_EQ(12, thread.pendingDelayMs());
}
@@ -361,12 +356,11 @@ TEST(CCDelayBasedTimeSource, TestDeactivateAndReactivateAfterNextTickTime)
{
FakeCCThread thread;
FakeCCTimeSourceClient client;
- RefPtr<FakeCCDelayBasedTimeSource> timer = FakeCCDelayBasedTimeSource::create(1.0 / 60.0, &thread);
+ RefPtr<FakeCCDelayBasedTimeSource> timer = FakeCCDelayBasedTimeSource::create(interval(), &thread);
timer->setClient(&client);
// Should run the activate task, and pick up a new timebase.
timer->setActive(true);
- timer->setMonotonicTimeNow(0);
thread.runPendingTask();
// Stop the timer
@@ -377,7 +371,7 @@ TEST(CCDelayBasedTimeSource, TestDeactivateAndReactivateAfterNextTickTime)
// Start the timer again, but before the next tick time the timer previously
// planned on using. That same tick time should still be targeted.
- timer->setMonotonicTimeNow(0.02);
+ timer->setNow(timer->now() + base::TimeDelta::FromMilliseconds(20));
timer->setActive(true);
EXPECT_EQ(13, thread.pendingDelayMs());
}
« no previous file with comments | « cc/CCDelayBasedTimeSource.cpp ('k') | cc/CCFrameRateController.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698