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

Unified Diff: cc/surfaces/display_scheduler_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/surfaces/display_scheduler.cc ('k') | cc/surfaces/display_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/surfaces/display_scheduler_unittest.cc
diff --git a/cc/surfaces/display_scheduler_unittest.cc b/cc/surfaces/display_scheduler_unittest.cc
index ea7a22fba5a84d9bf54d197f19a0911a4101c81e..5d6a66b6de33f71685c42c1eed4929e127d468cb 100644
--- a/cc/surfaces/display_scheduler_unittest.cc
+++ b/cc/surfaces/display_scheduler_unittest.cc
@@ -5,11 +5,13 @@
#include "cc/surfaces/display_scheduler.h"
#include "base/logging.h"
+#include "base/memory/ptr_util.h"
#include "base/test/null_task_runner.h"
#include "base/test/simple_test_tick_clock.h"
#include "base/trace_event/trace_event.h"
#include "cc/output/begin_frame_args.h"
#include "cc/surfaces/display.h"
+#include "cc/surfaces/display_begin_frame_source.h"
#include "cc/test/fake_external_begin_frame_source.h"
#include "cc/test/scheduler_test_common.h"
#include "testing/gtest/include/gtest/gtest.h"
@@ -40,13 +42,19 @@ class FakeDisplaySchedulerClient : public DisplaySchedulerClient {
int draw_and_swap_count_;
};
+// TODO(eseckler): Test with a mocked DisplayBeginFrameSource.
+// TODO(eseckler): Replace/add tests around expected child damage.
+// TODO(eseckler): Add tests for DisplayBeginFrameSource (elsewhere).
+
class TestDisplayScheduler : public DisplayScheduler {
public:
- TestDisplayScheduler(BeginFrameSource* begin_frame_source,
+ TestDisplayScheduler(DisplayBeginFrameSource* begin_frame_source,
base::SingleThreadTaskRunner* task_runner,
int max_pending_swaps)
- : DisplayScheduler(begin_frame_source, task_runner, max_pending_swaps),
- scheduler_begin_frame_deadline_count_(0) {}
+ : DisplayScheduler(task_runner, max_pending_swaps),
+ scheduler_begin_frame_deadline_count_(0) {
+ SetBeginFrameSource(begin_frame_source);
+ }
base::TimeTicks DesiredBeginFrameDeadlineTimeForTest() {
return DesiredBeginFrameDeadlineTime();
@@ -67,14 +75,22 @@ class TestDisplayScheduler : public DisplayScheduler {
int scheduler_begin_frame_deadline_count_;
};
+// TODO(eseckler): Update all these tests. Consider mocking out DisplayBFS and
+// testing it separately?
class DisplaySchedulerTest : public testing::Test {
public:
DisplaySchedulerTest()
- : fake_begin_frame_source_(0.f, false),
+ : display_begin_frame_source_(nullptr),
+ next_begin_frame_number_(BeginFrameArgs::kStartingFrameNumber),
task_runner_(new base::NullTaskRunner),
- scheduler_(&fake_begin_frame_source_,
+ scheduler_(&display_begin_frame_source_,
task_runner_.get(),
kMaxPendingSwaps) {
+ std::unique_ptr<BeginFrameSource> fake_begin_frame_source =
+ base::MakeUnique<FakeExternalBeginFrameSource>(0.f, false);
+ fake_begin_frame_source_ = static_cast<FakeExternalBeginFrameSource*>(
+ fake_begin_frame_source.get());
+ display_begin_frame_source_.SwapWrappedSource(&fake_begin_frame_source);
now_src_.Advance(base::TimeDelta::FromMicroseconds(10000));
scheduler_.SetClient(&client_);
}
@@ -87,9 +103,10 @@ class DisplaySchedulerTest : public testing::Test {
base::TimeTicks frame_time = now_src_.NowTicks();
base::TimeDelta interval = BeginFrameArgs::DefaultInterval();
base::TimeTicks deadline = frame_time + interval;
- fake_begin_frame_source_.TestOnBeginFrame(
- BeginFrameArgs::Create(BEGINFRAME_FROM_HERE, frame_time, deadline,
- interval, BeginFrameArgs::NORMAL));
+ fake_begin_frame_source_->TestOnBeginFrame(BeginFrameArgs::Create(
+ BEGINFRAME_FROM_HERE, fake_begin_frame_source_->source_id(),
+ next_begin_frame_number_++, frame_time, deadline, interval,
+ BeginFrameArgs::NORMAL));
}
protected:
@@ -97,7 +114,9 @@ class DisplaySchedulerTest : public testing::Test {
FakeDisplaySchedulerClient& client() { return client_; }
DisplayScheduler& scheduler() { return scheduler_; }
- FakeExternalBeginFrameSource fake_begin_frame_source_;
+ FakeExternalBeginFrameSource* fake_begin_frame_source_; // Not owned.
+ DisplayBeginFrameSource display_begin_frame_source_;
+ uint64_t next_begin_frame_number_;
base::SimpleTestTickClock now_src_;
scoped_refptr<base::NullTaskRunner> task_runner_;
@@ -293,15 +312,15 @@ TEST_F(DisplaySchedulerTest, VisibleWithoutDamageNoTicks) {
SurfaceId sid1(kArbitraryFrameSinkId,
LocalFrameId(1, base::UnguessableToken::Create()));
- EXPECT_EQ(0u, fake_begin_frame_source_.num_observers());
+ EXPECT_EQ(0u, fake_begin_frame_source_->num_observers());
scheduler_.SetVisible(true);
// When becoming visible, don't start listening for begin frames until there
// is some damage.
- EXPECT_EQ(0u, fake_begin_frame_source_.num_observers());
+ EXPECT_EQ(0u, fake_begin_frame_source_->num_observers());
scheduler_.SetNewRootSurface(root_surface_id);
- EXPECT_EQ(1u, fake_begin_frame_source_.num_observers());
+ EXPECT_EQ(1u, fake_begin_frame_source_->num_observers());
}
TEST_F(DisplaySchedulerTest, VisibleWithDamageTicks) {
@@ -314,10 +333,10 @@ TEST_F(DisplaySchedulerTest, VisibleWithDamageTicks) {
// When there is damage, start listening for begin frames once becoming
// visible.
- EXPECT_EQ(0u, fake_begin_frame_source_.num_observers());
+ EXPECT_EQ(0u, fake_begin_frame_source_->num_observers());
scheduler_.SetVisible(true);
- EXPECT_EQ(1u, fake_begin_frame_source_.num_observers());
+ EXPECT_EQ(1u, fake_begin_frame_source_->num_observers());
}
TEST_F(DisplaySchedulerTest, Visibility) {
@@ -328,7 +347,7 @@ TEST_F(DisplaySchedulerTest, Visibility) {
scheduler_.SetNewRootSurface(root_surface_id);
scheduler_.SetVisible(true);
- EXPECT_EQ(1u, fake_begin_frame_source_.num_observers());
+ EXPECT_EQ(1u, fake_begin_frame_source_->num_observers());
// DrawAndSwap normally.
BeginFrameForTest();
@@ -347,28 +366,28 @@ TEST_F(DisplaySchedulerTest, Visibility) {
scheduler_.SetVisible(false);
// It will stop listening for begin frames after the current deadline.
- EXPECT_EQ(1u, fake_begin_frame_source_.num_observers());
+ EXPECT_EQ(1u, fake_begin_frame_source_->num_observers());
// Deadline does not DrawAndSwap when not visible.
EXPECT_EQ(1, client_.draw_and_swap_count());
scheduler_.BeginFrameDeadlineForTest();
EXPECT_EQ(1, client_.draw_and_swap_count());
// Now it stops listening for begin frames.
- EXPECT_EQ(0u, fake_begin_frame_source_.num_observers());
+ EXPECT_EQ(0u, fake_begin_frame_source_->num_observers());
// Does not start listening for begin frames when becoming visible without
// damage.
scheduler_.SetVisible(true);
- EXPECT_EQ(0u, fake_begin_frame_source_.num_observers());
+ EXPECT_EQ(0u, fake_begin_frame_source_->num_observers());
scheduler_.SetVisible(false);
// Does not start listening for begin frames when damage arrives.
scheduler_.SurfaceDamaged(sid1);
- EXPECT_EQ(0u, fake_begin_frame_source_.num_observers());
+ EXPECT_EQ(0u, fake_begin_frame_source_->num_observers());
// But does when becoming visible with damage again.
scheduler_.SetVisible(true);
- EXPECT_EQ(1u, fake_begin_frame_source_.num_observers());
+ EXPECT_EQ(1u, fake_begin_frame_source_->num_observers());
}
TEST_F(DisplaySchedulerTest, ResizeCausesSwap) {
« no previous file with comments | « cc/surfaces/display_scheduler.cc ('k') | cc/surfaces/display_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698