| Index: cc/surfaces/surface_manager_unittest.cc
|
| diff --git a/cc/surfaces/surface_manager_unittest.cc b/cc/surfaces/surface_manager_unittest.cc
|
| index 07047fdbb8d9fa132407cd32709885fcb18f78d3..4dbce5d094e3112a1f38c2f19d8f2594cb8fa7a2 100644
|
| --- a/cc/surfaces/surface_manager_unittest.cc
|
| +++ b/cc/surfaces/surface_manager_unittest.cc
|
| @@ -7,6 +7,8 @@
|
| #include "cc/scheduler/begin_frame_source.h"
|
| #include "cc/surfaces/frame_sink_manager_client.h"
|
| #include "cc/surfaces/surface_manager.h"
|
| +#include "cc/test/begin_frame_source_test.h"
|
| +#include "cc/test/fake_external_begin_frame_source.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| namespace cc {
|
| @@ -113,6 +115,65 @@ TEST_F(SurfaceManagerTest, SingleClients) {
|
| EXPECT_EQ(nullptr, client.source());
|
| }
|
|
|
| +// This test verifies that a PrimaryBeginFrameSource will receive BeginFrames
|
| +// from the first BeginFrameSource registered. If that BeginFrameSource goes
|
| +// away then it will receive BeginFrames from the second BeginFrameSource.
|
| +TEST_F(SurfaceManagerTest, PrimaryBeginFrameSource) {
|
| + // This PrimaryBeginFrameSource should track the first BeginFrameSource
|
| + // registered with the SurfaceManager.
|
| + testing::NiceMock<MockBeginFrameObserver> obs;
|
| + BeginFrameSource* begin_frame_source = manager_.GetPrimaryBeginFrameSource();
|
| + begin_frame_source->AddObserver(&obs);
|
| +
|
| + FakeFrameSinkManagerClient root1(FrameSinkId(1, 1), &manager_);
|
| + std::unique_ptr<FakeExternalBeginFrameSource> external_source1 =
|
| + base::MakeUnique<FakeExternalBeginFrameSource>(60.f, false);
|
| + manager_.RegisterBeginFrameSource(external_source1.get(),
|
| + root1.frame_sink_id());
|
| +
|
| + FakeFrameSinkManagerClient root2(FrameSinkId(2, 2), &manager_);
|
| + std::unique_ptr<FakeExternalBeginFrameSource> external_source2 =
|
| + base::MakeUnique<FakeExternalBeginFrameSource>(60.f, false);
|
| + manager_.RegisterBeginFrameSource(external_source2.get(),
|
| + root2.frame_sink_id());
|
| +
|
| + BeginFrameArgs args =
|
| + CreateBeginFrameArgsForTesting(BEGINFRAME_FROM_HERE, 0, 1);
|
| +
|
| + // Ticking |external_source2| does not propagate to |begin_frame_source|.
|
| + {
|
| + EXPECT_CALL(obs, OnBeginFrame(args)).Times(0);
|
| + external_source2->TestOnBeginFrame(args);
|
| + testing::Mock::VerifyAndClearExpectations(&obs);
|
| + }
|
| +
|
| + // Ticking |external_source1| does propagate to |begin_frame_source| and
|
| + // |obs|.
|
| + {
|
| + EXPECT_CALL(obs, OnBeginFrame(testing::_)).Times(1);
|
| + external_source1->TestOnBeginFrame(args);
|
| + testing::Mock::VerifyAndClearExpectations(&obs);
|
| + }
|
| +
|
| + // Getting rid of |external_source1| means those BeginFrames will not
|
| + // propagate. Instead, |external_source2|'s BeginFrames will propagate
|
| + // to |begin_frame_source|.
|
| + {
|
| + manager_.UnregisterBeginFrameSource(external_source1.get());
|
| + EXPECT_CALL(obs, OnBeginFrame(testing::_)).Times(0);
|
| + external_source1->TestOnBeginFrame(args);
|
| + testing::Mock::VerifyAndClearExpectations(&obs);
|
| +
|
| + EXPECT_CALL(obs, OnBeginFrame(testing::_)).Times(1);
|
| + external_source2->TestOnBeginFrame(args);
|
| + testing::Mock::VerifyAndClearExpectations(&obs);
|
| + }
|
| +
|
| + // Tear down
|
| + manager_.UnregisterBeginFrameSource(external_source2.get());
|
| + begin_frame_source->RemoveObserver(&obs);
|
| +}
|
| +
|
| TEST_F(SurfaceManagerTest, MultipleDisplays) {
|
| StubBeginFrameSource root1_source;
|
| StubBeginFrameSource root2_source;
|
|
|