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

Unified Diff: cc/scheduler/begin_frame_source_unittest.cc

Issue 2527283003: cc: Introduce BeginFrame sequence numbers and acknowledgements.
Patch Set: Address Brian's comments. Created 4 years 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/scheduler/begin_frame_source.cc ('k') | cc/scheduler/scheduler.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/scheduler/begin_frame_source_unittest.cc
diff --git a/cc/scheduler/begin_frame_source_unittest.cc b/cc/scheduler/begin_frame_source_unittest.cc
index b50c4b91ce510a5444ba5912f090adca3dec176c..879936575113ad09678fac9c5a64882f02e2a779 100644
--- a/cc/scheduler/begin_frame_source_unittest.cc
+++ b/cc/scheduler/begin_frame_source_unittest.cc
@@ -53,24 +53,29 @@ TEST_F(BackToBackBeginFrameSourceTest, AddObserverSendsBeginFrame) {
EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
source_->AddObserver(obs_.get());
EXPECT_TRUE(task_runner_->HasPendingTasks());
- EXPECT_BEGIN_FRAME_USED(*obs_, 1000, 1000 + kDeadline, kInterval);
+ EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 1, 1000,
+ 1000 + kDeadline, kInterval);
task_runner_->RunPendingTasks();
- EXPECT_BEGIN_FRAME_USED(*obs_, 1100, 1100 + kDeadline, kInterval);
+ EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 2, 1100,
+ 1100 + kDeadline, kInterval);
now_src_->Advance(base::TimeDelta::FromMicroseconds(100));
- source_->DidFinishFrame(obs_.get(), 0);
+ source_->DidFinishFrame(obs_.get(),
+ BeginFrameAck(source_->source_id(), 1, 1, 0, true));
task_runner_->RunPendingTasks();
}
TEST_F(BackToBackBeginFrameSourceTest,
- DidFinishFrameThenRemoveObserverProducesNoFrame) {
+ RemoveObserverThenDidFinishFrameProducesNoFrame) {
EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
source_->AddObserver(obs_.get());
- EXPECT_BEGIN_FRAME_USED(*obs_, 1000, 1000 + kDeadline, kInterval);
+ EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 1, 1000,
+ 1000 + kDeadline, kInterval);
task_runner_->RunPendingTasks();
source_->RemoveObserver(obs_.get());
- source_->DidFinishFrame(obs_.get(), 0);
+ source_->DidFinishFrame(obs_.get(),
+ BeginFrameAck(source_->source_id(), 1, 1, 0, true));
// Verify no BeginFrame is sent to |obs_|. There is a pending task in the
// task_runner_ as a BeginFrame was posted, but it gets aborted since |obs_|
@@ -80,14 +85,16 @@ TEST_F(BackToBackBeginFrameSourceTest,
}
TEST_F(BackToBackBeginFrameSourceTest,
- RemoveObserverThenDidFinishFrameProducesNoFrame) {
+ DidFinishFrameThenRemoveObserverProducesNoFrame) {
EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
source_->AddObserver(obs_.get());
- EXPECT_BEGIN_FRAME_USED(*obs_, 1000, 1000 + kDeadline, kInterval);
+ EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 1, 1000,
+ 1000 + kDeadline, kInterval);
task_runner_->RunPendingTasks();
now_src_->Advance(base::TimeDelta::FromMicroseconds(100));
- source_->DidFinishFrame(obs_.get(), 0);
+ source_->DidFinishFrame(obs_.get(),
+ BeginFrameAck(source_->source_id(), 1, 1, 0, true));
source_->RemoveObserver(obs_.get());
EXPECT_TRUE(task_runner_->HasPendingTasks());
@@ -98,7 +105,8 @@ TEST_F(BackToBackBeginFrameSourceTest,
TogglingObserverThenDidFinishFrameProducesCorrectFrame) {
EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
source_->AddObserver(obs_.get());
- EXPECT_BEGIN_FRAME_USED(*obs_, 1000, 1000 + kDeadline, kInterval);
+ EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 1, 1000,
+ 1000 + kDeadline, kInterval);
task_runner_->RunPendingTasks();
now_src_->Advance(base::TimeDelta::FromMicroseconds(100));
@@ -109,12 +117,14 @@ TEST_F(BackToBackBeginFrameSourceTest,
source_->AddObserver(obs_.get());
now_src_->Advance(base::TimeDelta::FromMicroseconds(10));
- source_->DidFinishFrame(obs_.get(), 0);
+ source_->DidFinishFrame(obs_.get(),
+ BeginFrameAck(source_->source_id(), 1, 1, 0, true));
now_src_->Advance(base::TimeDelta::FromMicroseconds(10));
// The begin frame is posted at the time when the observer was added,
// so it ignores changes to "now" afterward.
- EXPECT_BEGIN_FRAME_USED(*obs_, 1110, 1110 + kDeadline, kInterval);
+ EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 2, 1110,
+ 1110 + kDeadline, kInterval);
EXPECT_TRUE(task_runner_->HasPendingTasks());
task_runner_->RunPendingTasks();
}
@@ -123,11 +133,13 @@ TEST_F(BackToBackBeginFrameSourceTest,
DidFinishFrameThenTogglingObserverProducesCorrectFrame) {
EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
source_->AddObserver(obs_.get());
- EXPECT_BEGIN_FRAME_USED(*obs_, 1000, 1000 + kDeadline, kInterval);
+ EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 1, 1000,
+ 1000 + kDeadline, kInterval);
task_runner_->RunPendingTasks();
now_src_->Advance(base::TimeDelta::FromMicroseconds(100));
- source_->DidFinishFrame(obs_.get(), 0);
+ source_->DidFinishFrame(obs_.get(),
+ BeginFrameAck(source_->source_id(), 1, 1, 0, true));
now_src_->Advance(base::TimeDelta::FromMicroseconds(10));
source_->RemoveObserver(obs_.get());
@@ -139,7 +151,8 @@ TEST_F(BackToBackBeginFrameSourceTest,
now_src_->Advance(base::TimeDelta::FromMicroseconds(10));
// Ticks at the time at which the observer was added, ignoring the
// last change to "now".
- EXPECT_BEGIN_FRAME_USED(*obs_, 1120, 1120 + kDeadline, kInterval);
+ EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 2, 1120,
+ 1120 + kDeadline, kInterval);
EXPECT_TRUE(task_runner_->HasPendingTasks());
task_runner_->RunPendingTasks();
}
@@ -148,14 +161,16 @@ TEST_F(BackToBackBeginFrameSourceTest, DidFinishFrameNoObserver) {
EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
source_->AddObserver(obs_.get());
source_->RemoveObserver(obs_.get());
- source_->DidFinishFrame(obs_.get(), 0);
+ source_->DidFinishFrame(obs_.get(),
+ BeginFrameAck(source_->source_id(), 1, 1, 0, true));
EXPECT_FALSE(task_runner_->RunPendingTasks());
}
TEST_F(BackToBackBeginFrameSourceTest, DidFinishFrameRemainingFrames) {
EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
source_->AddObserver(obs_.get());
- EXPECT_BEGIN_FRAME_USED(*obs_, 1000, 1000 + kDeadline, kInterval);
+ EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 1, 1000,
+ 1000 + kDeadline, kInterval);
// Runs the pending begin frame.
task_runner_->RunPendingTasks();
// While running the begin frame, the next frame was cancelled, this
@@ -165,15 +180,20 @@ TEST_F(BackToBackBeginFrameSourceTest, DidFinishFrameRemainingFrames) {
now_src_->Advance(base::TimeDelta::FromMicroseconds(100));
- source_->DidFinishFrame(obs_.get(), 3);
+ source_->DidFinishFrame(obs_.get(),
+ BeginFrameAck(source_->source_id(), 1, 1, 3, true));
EXPECT_FALSE(task_runner_->HasPendingTasks());
- source_->DidFinishFrame(obs_.get(), 2);
+ source_->DidFinishFrame(obs_.get(),
+ BeginFrameAck(source_->source_id(), 1, 1, 2, true));
EXPECT_FALSE(task_runner_->HasPendingTasks());
- source_->DidFinishFrame(obs_.get(), 1);
+ source_->DidFinishFrame(obs_.get(),
+ BeginFrameAck(source_->source_id(), 1, 1, 1, true));
EXPECT_FALSE(task_runner_->HasPendingTasks());
- EXPECT_BEGIN_FRAME_USED(*obs_, 1100, 1100 + kDeadline, kInterval);
- source_->DidFinishFrame(obs_.get(), 0);
+ EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 2, 1100,
+ 1100 + kDeadline, kInterval);
+ source_->DidFinishFrame(obs_.get(),
+ BeginFrameAck(source_->source_id(), 1, 1, 0, true));
EXPECT_EQ(base::TimeDelta(), task_runner_->DelayToNextTaskTime());
task_runner_->RunPendingTasks();
}
@@ -181,36 +201,48 @@ TEST_F(BackToBackBeginFrameSourceTest, DidFinishFrameRemainingFrames) {
TEST_F(BackToBackBeginFrameSourceTest, DidFinishFrameMultipleCallsIdempotent) {
EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
source_->AddObserver(obs_.get());
- EXPECT_BEGIN_FRAME_USED(*obs_, 1000, 1000 + kDeadline, kInterval);
+ EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 1, 1000,
+ 1000 + kDeadline, kInterval);
task_runner_->RunPendingTasks();
now_src_->Advance(base::TimeDelta::FromMicroseconds(100));
- source_->DidFinishFrame(obs_.get(), 0);
- source_->DidFinishFrame(obs_.get(), 0);
- source_->DidFinishFrame(obs_.get(), 0);
- EXPECT_BEGIN_FRAME_USED(*obs_, 1100, 1100 + kDeadline, kInterval);
+ source_->DidFinishFrame(obs_.get(),
+ BeginFrameAck(source_->source_id(), 1, 1, 0, true));
+ source_->DidFinishFrame(obs_.get(),
+ BeginFrameAck(source_->source_id(), 1, 1, 0, true));
+ source_->DidFinishFrame(obs_.get(),
+ BeginFrameAck(source_->source_id(), 1, 1, 0, true));
+ EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 2, 1100,
+ 1100 + kDeadline, kInterval);
task_runner_->RunPendingTasks();
now_src_->Advance(base::TimeDelta::FromMicroseconds(100));
- source_->DidFinishFrame(obs_.get(), 0);
- source_->DidFinishFrame(obs_.get(), 0);
- source_->DidFinishFrame(obs_.get(), 0);
- EXPECT_BEGIN_FRAME_USED(*obs_, 1200, 1200 + kDeadline, kInterval);
+ source_->DidFinishFrame(obs_.get(),
+ BeginFrameAck(source_->source_id(), 2, 2, 0, true));
+ source_->DidFinishFrame(obs_.get(),
+ BeginFrameAck(source_->source_id(), 2, 2, 0, true));
+ source_->DidFinishFrame(obs_.get(),
+ BeginFrameAck(source_->source_id(), 2, 2, 0, true));
+ EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 3, 1200,
+ 1200 + kDeadline, kInterval);
task_runner_->RunPendingTasks();
}
TEST_F(BackToBackBeginFrameSourceTest, DelayInPostedTaskProducesCorrectFrame) {
EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
source_->AddObserver(obs_.get());
- EXPECT_BEGIN_FRAME_USED(*obs_, 1000, 1000 + kDeadline, kInterval);
+ EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 1, 1000,
+ 1000 + kDeadline, kInterval);
task_runner_->RunPendingTasks();
now_src_->Advance(base::TimeDelta::FromMicroseconds(100));
- source_->DidFinishFrame(obs_.get(), 0);
+ source_->DidFinishFrame(obs_.get(),
+ BeginFrameAck(source_->source_id(), 1, 1, 0, true));
now_src_->Advance(base::TimeDelta::FromMicroseconds(50));
// Ticks at the time the last frame finished, so ignores the last change to
// "now".
- EXPECT_BEGIN_FRAME_USED(*obs_, 1100, 1100 + kDeadline, kInterval);
+ EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 2, 1100,
+ 1100 + kDeadline, kInterval);
EXPECT_TRUE(task_runner_->HasPendingTasks());
task_runner_->RunPendingTasks();
@@ -224,20 +256,28 @@ TEST_F(BackToBackBeginFrameSourceTest, MultipleObserversSynchronized) {
EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs2, false);
source_->AddObserver(&obs2);
- EXPECT_BEGIN_FRAME_USED(obs1, 1000, 1000 + kDeadline, kInterval);
- EXPECT_BEGIN_FRAME_USED(obs2, 1000, 1000 + kDeadline, kInterval);
+ EXPECT_BEGIN_FRAME_USED(obs1, source_->source_id(), 1, 1000, 1000 + kDeadline,
+ kInterval);
+ EXPECT_BEGIN_FRAME_USED(obs2, source_->source_id(), 1, 1000, 1000 + kDeadline,
+ kInterval);
task_runner_->RunPendingTasks();
now_src_->Advance(base::TimeDelta::FromMicroseconds(100));
- source_->DidFinishFrame(&obs1, 0);
- source_->DidFinishFrame(&obs2, 0);
- EXPECT_BEGIN_FRAME_USED(obs1, 1100, 1100 + kDeadline, kInterval);
- EXPECT_BEGIN_FRAME_USED(obs2, 1100, 1100 + kDeadline, kInterval);
+ source_->DidFinishFrame(&obs1,
+ BeginFrameAck(source_->source_id(), 1, 1, 0, true));
+ source_->DidFinishFrame(&obs2,
+ BeginFrameAck(source_->source_id(), 1, 1, 0, true));
+ EXPECT_BEGIN_FRAME_USED(obs1, source_->source_id(), 2, 1100, 1100 + kDeadline,
+ kInterval);
+ EXPECT_BEGIN_FRAME_USED(obs2, source_->source_id(), 2, 1100, 1100 + kDeadline,
+ kInterval);
task_runner_->RunPendingTasks();
now_src_->Advance(base::TimeDelta::FromMicroseconds(100));
- source_->DidFinishFrame(&obs1, 0);
- source_->DidFinishFrame(&obs2, 0);
+ source_->DidFinishFrame(&obs1,
+ BeginFrameAck(source_->source_id(), 2, 2, 0, true));
+ source_->DidFinishFrame(&obs2,
+ BeginFrameAck(source_->source_id(), 2, 2, 0, true));
EXPECT_TRUE(task_runner_->HasPendingTasks());
source_->RemoveObserver(&obs1);
source_->RemoveObserver(&obs2);
@@ -249,32 +289,40 @@ TEST_F(BackToBackBeginFrameSourceTest, MultipleObserversInterleaved) {
EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs1, false);
source_->AddObserver(&obs1);
- EXPECT_BEGIN_FRAME_USED(obs1, 1000, 1000 + kDeadline, kInterval);
+ EXPECT_BEGIN_FRAME_USED(obs1, source_->source_id(), 1, 1000, 1000 + kDeadline,
+ kInterval);
task_runner_->RunPendingTasks();
now_src_->Advance(base::TimeDelta::FromMicroseconds(100));
EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs2, false);
source_->AddObserver(&obs2);
- EXPECT_BEGIN_FRAME_USED(obs2, 1100, 1100 + kDeadline, kInterval);
+ EXPECT_BEGIN_FRAME_USED(obs2, source_->source_id(), 2, 1100, 1100 + kDeadline,
+ kInterval);
task_runner_->RunPendingTasks();
now_src_->Advance(base::TimeDelta::FromMicroseconds(100));
- source_->DidFinishFrame(&obs1, 0);
- EXPECT_BEGIN_FRAME_USED(obs1, 1200, 1200 + kDeadline, kInterval);
+ source_->DidFinishFrame(&obs1,
+ BeginFrameAck(source_->source_id(), 1, 1, 0, true));
+ EXPECT_BEGIN_FRAME_USED(obs1, source_->source_id(), 3, 1200, 1200 + kDeadline,
+ kInterval);
task_runner_->RunPendingTasks();
- source_->DidFinishFrame(&obs1, 0);
+ source_->DidFinishFrame(&obs1,
+ BeginFrameAck(source_->source_id(), 3, 3, 0, true));
source_->RemoveObserver(&obs1);
// Finishing the frame for |obs1| posts a begin frame task, which will be
// aborted since |obs1| is removed. Clear that from the task runner.
task_runner_->RunPendingTasks();
now_src_->Advance(base::TimeDelta::FromMicroseconds(100));
- source_->DidFinishFrame(&obs2, 0);
- EXPECT_BEGIN_FRAME_USED(obs2, 1300, 1300 + kDeadline, kInterval);
+ source_->DidFinishFrame(&obs2,
+ BeginFrameAck(source_->source_id(), 2, 2, 0, true));
+ EXPECT_BEGIN_FRAME_USED(obs2, source_->source_id(), 4, 1300, 1300 + kDeadline,
+ kInterval);
task_runner_->RunPendingTasks();
- source_->DidFinishFrame(&obs2, 0);
+ source_->DidFinishFrame(&obs2,
+ BeginFrameAck(source_->source_id(), 4, 4, 0, true));
source_->RemoveObserver(&obs2);
}
@@ -285,30 +333,40 @@ TEST_F(BackToBackBeginFrameSourceTest, MultipleObserversAtOnce) {
EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs2, false);
source_->AddObserver(&obs1);
source_->AddObserver(&obs2);
- EXPECT_BEGIN_FRAME_USED(obs1, 1000, 1000 + kDeadline, kInterval);
- EXPECT_BEGIN_FRAME_USED(obs2, 1000, 1000 + kDeadline, kInterval);
+ EXPECT_BEGIN_FRAME_USED(obs1, source_->source_id(), 1, 1000, 1000 + kDeadline,
+ kInterval);
+ EXPECT_BEGIN_FRAME_USED(obs2, source_->source_id(), 1, 1000, 1000 + kDeadline,
+ kInterval);
task_runner_->RunPendingTasks();
// |obs1| finishes first.
now_src_->Advance(base::TimeDelta::FromMicroseconds(100));
- source_->DidFinishFrame(&obs1, 0);
+ source_->DidFinishFrame(&obs1,
+ BeginFrameAck(source_->source_id(), 1, 1, 0, true));
// |obs2| finishes also, before getting to the newly posted begin frame.
now_src_->Advance(base::TimeDelta::FromMicroseconds(100));
- source_->DidFinishFrame(&obs2, 0);
+ source_->DidFinishFrame(&obs2,
+ BeginFrameAck(source_->source_id(), 1, 1, 0, true));
// Because the begin frame source already ticked when |obs1| finished,
// we see it as the frame time for both observers.
- EXPECT_BEGIN_FRAME_USED(obs1, 1100, 1100 + kDeadline, kInterval);
- EXPECT_BEGIN_FRAME_USED(obs2, 1100, 1100 + kDeadline, kInterval);
+ EXPECT_BEGIN_FRAME_USED(obs1, source_->source_id(), 2, 1100, 1100 + kDeadline,
+ kInterval);
+ EXPECT_BEGIN_FRAME_USED(obs2, source_->source_id(), 2, 1100, 1100 + kDeadline,
+ kInterval);
task_runner_->RunPendingTasks();
- source_->DidFinishFrame(&obs1, 0);
+ source_->DidFinishFrame(&obs1,
+ BeginFrameAck(source_->source_id(), 2, 2, 0, true));
source_->RemoveObserver(&obs1);
- source_->DidFinishFrame(&obs2, 0);
+ source_->DidFinishFrame(&obs2,
+ BeginFrameAck(source_->source_id(), 2, 2, 0, true));
source_->RemoveObserver(&obs2);
}
+// TODO(eseckler): Tests for BeginFrame numbering in BackToBackBFS.
+
// DelayBasedBeginFrameSource testing ------------------------------------------
class DelayBasedBeginFrameSourceTest : public ::testing::Test {
public:
@@ -337,18 +395,20 @@ TEST_F(DelayBasedBeginFrameSourceTest,
AddObserverCallsOnBeginFrameWithMissedTick) {
now_src_->Advance(base::TimeDelta::FromMicroseconds(9010));
EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
- EXPECT_BEGIN_FRAME_USED_MISSED(*obs_, 10000, 20000, 10000);
+ EXPECT_BEGIN_FRAME_USED_MISSED(*obs_, source_->source_id(), 1, 10000, 20000,
+ 10000);
source_->AddObserver(obs_.get()); // Should cause the last tick to be sent
// No tasks should need to be run for this to occur.
}
TEST_F(DelayBasedBeginFrameSourceTest, AddObserverCallsCausesOnBeginFrame) {
EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
- EXPECT_BEGIN_FRAME_USED_MISSED(*obs_, 0, 10000, 10000);
+ EXPECT_BEGIN_FRAME_USED_MISSED(*obs_, source_->source_id(), 1, 0, 10000,
+ 10000);
source_->AddObserver(obs_.get());
EXPECT_EQ(10000, task_runner_->NextTaskTime().ToInternalValue());
- EXPECT_BEGIN_FRAME_USED(*obs_, 10000, 20000, 10000);
+ EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 2, 10000, 20000, 10000);
now_src_->Advance(base::TimeDelta::FromMicroseconds(9010));
task_runner_->RunPendingTasks();
}
@@ -357,11 +417,12 @@ TEST_F(DelayBasedBeginFrameSourceTest, BasicOperation) {
task_runner_->SetAutoAdvanceNowToPendingTasks(true);
EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
- EXPECT_BEGIN_FRAME_USED_MISSED(*obs_, 0, 10000, 10000);
+ EXPECT_BEGIN_FRAME_USED_MISSED(*obs_, source_->source_id(), 1, 0, 10000,
+ 10000);
source_->AddObserver(obs_.get());
- EXPECT_BEGIN_FRAME_USED(*obs_, 10000, 20000, 10000);
- EXPECT_BEGIN_FRAME_USED(*obs_, 20000, 30000, 10000);
- EXPECT_BEGIN_FRAME_USED(*obs_, 30000, 40000, 10000);
+ EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 2, 10000, 20000, 10000);
+ EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 3, 20000, 30000, 10000);
+ EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 4, 30000, 40000, 10000);
task_runner_->RunUntilTime(base::TimeTicks::FromInternalValue(30001));
source_->RemoveObserver(obs_.get());
@@ -372,21 +433,22 @@ TEST_F(DelayBasedBeginFrameSourceTest, BasicOperation) {
TEST_F(DelayBasedBeginFrameSourceTest, VSyncChanges) {
task_runner_->SetAutoAdvanceNowToPendingTasks(true);
EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
- EXPECT_BEGIN_FRAME_USED_MISSED(*obs_, 0, 10000, 10000);
+ EXPECT_BEGIN_FRAME_USED_MISSED(*obs_, source_->source_id(), 1, 0, 10000,
+ 10000);
source_->AddObserver(obs_.get());
- EXPECT_BEGIN_FRAME_USED(*obs_, 10000, 20000, 10000);
- EXPECT_BEGIN_FRAME_USED(*obs_, 20000, 30000, 10000);
- EXPECT_BEGIN_FRAME_USED(*obs_, 30000, 40000, 10000);
+ EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 2, 10000, 20000, 10000);
+ EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 3, 20000, 30000, 10000);
+ EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 4, 30000, 40000, 10000);
task_runner_->RunUntilTime(base::TimeTicks::FromInternalValue(30001));
// Update the vsync information
source_->OnUpdateVSyncParameters(base::TimeTicks::FromInternalValue(27500),
base::TimeDelta::FromMicroseconds(10001));
- EXPECT_BEGIN_FRAME_USED(*obs_, 40000, 47502, 10001);
- EXPECT_BEGIN_FRAME_USED(*obs_, 47502, 57503, 10001);
- EXPECT_BEGIN_FRAME_USED(*obs_, 57503, 67504, 10001);
+ EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 5, 40000, 47502, 10001);
+ EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 6, 47502, 57503, 10001);
+ EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 7, 57503, 67504, 10001);
task_runner_->RunUntilTime(base::TimeTicks::FromInternalValue(60000));
}
@@ -395,25 +457,26 @@ TEST_F(DelayBasedBeginFrameSourceTest, AuthoritativeVSyncChanges) {
source_->OnUpdateVSyncParameters(base::TimeTicks::FromInternalValue(500),
base::TimeDelta::FromMicroseconds(10000));
EXPECT_BEGIN_FRAME_SOURCE_PAUSED(*obs_, false);
- EXPECT_BEGIN_FRAME_USED_MISSED(*obs_, 500, 10500, 10000);
+ EXPECT_BEGIN_FRAME_USED_MISSED(*obs_, source_->source_id(), 1, 500, 10500,
+ 10000);
source_->AddObserver(obs_.get());
- EXPECT_BEGIN_FRAME_USED(*obs_, 10500, 20500, 10000);
- EXPECT_BEGIN_FRAME_USED(*obs_, 20500, 30500, 10000);
+ EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 2, 10500, 20500, 10000);
+ EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 3, 20500, 30500, 10000);
task_runner_->RunUntilTime(base::TimeTicks::FromInternalValue(20501));
// This will keep the same timebase, so 500, 9999
source_->SetAuthoritativeVSyncInterval(
base::TimeDelta::FromMicroseconds(9999));
- EXPECT_BEGIN_FRAME_USED(*obs_, 30500, 40496, 9999);
- EXPECT_BEGIN_FRAME_USED(*obs_, 40496, 50495, 9999);
+ EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 4, 30500, 40496, 9999);
+ EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 5, 40496, 50495, 9999);
task_runner_->RunUntilTime(base::TimeTicks::FromInternalValue(40497));
// Change the vsync params, but the new interval will be ignored.
source_->OnUpdateVSyncParameters(base::TimeTicks::FromInternalValue(400),
base::TimeDelta::FromMicroseconds(1));
- EXPECT_BEGIN_FRAME_USED(*obs_, 50495, 60394, 9999);
- EXPECT_BEGIN_FRAME_USED(*obs_, 60394, 70393, 9999);
+ EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 6, 50495, 60394, 9999);
+ EXPECT_BEGIN_FRAME_USED(*obs_, source_->source_id(), 7, 60394, 70393, 9999);
task_runner_->RunUntilTime(base::TimeTicks::FromInternalValue(60395));
}
@@ -423,25 +486,27 @@ TEST_F(DelayBasedBeginFrameSourceTest, MultipleObservers) {
// now_src_ starts off at 1000.
task_runner_->RunForPeriod(base::TimeDelta::FromMicroseconds(9010));
EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs1, false);
- EXPECT_BEGIN_FRAME_USED_MISSED(obs1, 10000, 20000, 10000);
+ EXPECT_BEGIN_FRAME_USED_MISSED(obs1, source_->source_id(), 1, 10000, 20000,
+ 10000);
source_->AddObserver(&obs1); // Should cause the last tick to be sent
// No tasks should need to be run for this to occur.
- EXPECT_BEGIN_FRAME_USED(obs1, 20000, 30000, 10000);
+ EXPECT_BEGIN_FRAME_USED(obs1, source_->source_id(), 2, 20000, 30000, 10000);
task_runner_->RunForPeriod(base::TimeDelta::FromMicroseconds(10000));
EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs2, false);
- EXPECT_BEGIN_FRAME_USED_MISSED(obs2, 20000, 30000, 10000);
+ EXPECT_BEGIN_FRAME_USED_MISSED(obs2, source_->source_id(), 2, 20000, 30000,
+ 10000);
source_->AddObserver(&obs2); // Should cause the last tick to be sent
// No tasks should need to be run for this to occur.
- EXPECT_BEGIN_FRAME_USED(obs1, 30000, 40000, 10000);
- EXPECT_BEGIN_FRAME_USED(obs2, 30000, 40000, 10000);
+ EXPECT_BEGIN_FRAME_USED(obs1, source_->source_id(), 3, 30000, 40000, 10000);
+ EXPECT_BEGIN_FRAME_USED(obs2, source_->source_id(), 3, 30000, 40000, 10000);
task_runner_->RunForPeriod(base::TimeDelta::FromMicroseconds(10000));
source_->RemoveObserver(&obs1);
- EXPECT_BEGIN_FRAME_USED(obs2, 40000, 50000, 10000);
+ EXPECT_BEGIN_FRAME_USED(obs2, source_->source_id(), 4, 40000, 50000, 10000);
task_runner_->RunForPeriod(base::TimeDelta::FromMicroseconds(10000));
source_->RemoveObserver(&obs2);
@@ -453,7 +518,7 @@ TEST_F(DelayBasedBeginFrameSourceTest, DoubleTick) {
StrictMock<MockBeginFrameObserver> obs;
EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs, false);
- EXPECT_BEGIN_FRAME_USED_MISSED(obs, 0, 10000, 10000);
+ EXPECT_BEGIN_FRAME_USED_MISSED(obs, source_->source_id(), 1, 0, 10000, 10000);
source_->AddObserver(&obs);
source_->OnUpdateVSyncParameters(base::TimeTicks::FromInternalValue(5000),
@@ -467,7 +532,7 @@ TEST_F(DelayBasedBeginFrameSourceTest, DoubleTick) {
source_->OnUpdateVSyncParameters(base::TimeTicks::FromInternalValue(10000),
base::TimeDelta::FromInternalValue(10000));
now_src_->Advance(base::TimeDelta::FromInternalValue(5000));
- EXPECT_BEGIN_FRAME_USED(obs, 10000, 20000, 10000);
+ EXPECT_BEGIN_FRAME_USED(obs, source_->source_id(), 2, 10000, 20000, 10000);
task_runner_->RunPendingTasks();
}
@@ -475,7 +540,7 @@ TEST_F(DelayBasedBeginFrameSourceTest, DoubleTickMissedFrame) {
StrictMock<MockBeginFrameObserver> obs;
EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs, false);
- EXPECT_BEGIN_FRAME_USED_MISSED(obs, 0, 10000, 10000);
+ EXPECT_BEGIN_FRAME_USED_MISSED(obs, source_->source_id(), 1, 0, 10000, 10000);
source_->AddObserver(&obs);
source_->RemoveObserver(&obs);
@@ -493,10 +558,21 @@ TEST_F(DelayBasedBeginFrameSourceTest, DoubleTickMissedFrame) {
base::TimeDelta::FromInternalValue(10000));
now_src_->Advance(base::TimeDelta::FromInternalValue(5000));
EXPECT_BEGIN_FRAME_SOURCE_PAUSED(obs, false);
- EXPECT_BEGIN_FRAME_USED_MISSED(obs, 10000, 20000, 10000);
+ EXPECT_BEGIN_FRAME_USED_MISSED(obs, source_->source_id(), 3, 10000, 20000,
+ 10000);
source_->AddObserver(&obs);
source_->RemoveObserver(&obs);
}
+// TODO(eseckler): Tests for source ids.
+
+// TODO(eseckler): Tests for BeginFrame numbering in DelayBasedBeginFrameSource.
+
+// TODO(eseckler): Tests for BeginFrameObserverAckTracker.
+
+// TODO(eseckler): Tests for ExternalBeginFrameSource (especially client calls).
+
+// TODO(eseckler): Tests for DelegatingBeginFrameSource.
+
} // namespace
} // namespace cc
« no previous file with comments | « cc/scheduler/begin_frame_source.cc ('k') | cc/scheduler/scheduler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698