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

Unified Diff: cc/layers/surface_layer_unittest.cc

Issue 2830983004: Replace TestSurfaceReferenceFactory in surface_layer_unittests.cc with a mock implementation (Closed)
Patch Set: Remove VerifyAndClearExpectations Created 3 years, 8 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 | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cc/layers/surface_layer_unittest.cc
diff --git a/cc/layers/surface_layer_unittest.cc b/cc/layers/surface_layer_unittest.cc
index 0ee4e8365008bb523c6fb02da258eb9eed5637c0..4c354a7a5f6100ddd6a008a9972d3b2b2ab9aaab 100644
--- a/cc/layers/surface_layer_unittest.cc
+++ b/cc/layers/surface_layer_unittest.cc
@@ -32,6 +32,9 @@
namespace cc {
namespace {
+using testing::_;
+using testing::Eq;
+
static constexpr FrameSinkId kArbitraryFrameSinkId(1, 1);
class SurfaceLayerTest : public testing::Test {
@@ -63,33 +66,20 @@ class SurfaceLayerTest : public testing::Test {
FakeLayerTreeHostImpl host_impl_;
};
-class TestSurfaceReferenceFactory : public SequenceSurfaceReferenceFactory {
- protected:
- void SatisfySequence(const SurfaceSequence& seq) const override {
- *out_seq_ = seq;
- }
-
- void RequireSequence(const SurfaceId& id,
- const SurfaceSequence& seq) const override {
- *out_id_ = id;
- out_set_->insert(seq);
- }
-
+class MockSurfaceReferenceFactory : public SequenceSurfaceReferenceFactory {
public:
- TestSurfaceReferenceFactory(SurfaceSequence* out_seq,
- SurfaceId* out_id,
- std::set<SurfaceSequence>* out_set)
- : out_seq_(out_seq), out_id_(out_id), out_set_(out_set) {}
+ MockSurfaceReferenceFactory() {}
+
+ // SequenceSurfaceReferenceFactory implementation.
+ MOCK_CONST_METHOD1(SatisfySequence, void(const SurfaceSequence&));
+ MOCK_CONST_METHOD2(RequireSequence,
+ void(const SurfaceId&, const SurfaceSequence&));
protected:
- ~TestSurfaceReferenceFactory() override = default;
+ ~MockSurfaceReferenceFactory() override = default;
private:
- SurfaceSequence* out_seq_;
- SurfaceId* out_id_;
- std::set<SurfaceSequence>* out_set_;
-
- DISALLOW_COPY_AND_ASSIGN(TestSurfaceReferenceFactory);
+ DISALLOW_COPY_AND_ASSIGN(MockSurfaceReferenceFactory);
};
// Check that one surface can be referenced by multiple LayerTreeHosts, and
@@ -97,17 +87,26 @@ class TestSurfaceReferenceFactory : public SequenceSurfaceReferenceFactory {
TEST_F(SurfaceLayerTest, MultipleFramesOneSurface) {
const base::UnguessableToken kArbitraryToken =
base::UnguessableToken::Create();
- SurfaceSequence blank_change; // Receives sequence if commit doesn't happen.
-
- SurfaceId required_id;
- std::set<SurfaceSequence> required_seq;
- scoped_refptr<SurfaceReferenceFactory> ref_factory =
- new TestSurfaceReferenceFactory(&blank_change, &required_id,
- &required_seq);
- auto layer = SurfaceLayer::Create(ref_factory);
- SurfaceInfo info(
+ const SurfaceInfo info(
SurfaceId(kArbitraryFrameSinkId, LocalSurfaceId(1, kArbitraryToken)), 1.f,
gfx::Size(1, 1));
+ const SurfaceSequence expected_seq1(FrameSinkId(1, 1), 1u);
+ const SurfaceSequence expected_seq2(FrameSinkId(2, 2), 1u);
+ const SurfaceId expected_id(kArbitraryFrameSinkId,
+ LocalSurfaceId(1, kArbitraryToken));
+
+ scoped_refptr<MockSurfaceReferenceFactory> ref_factory =
+ new testing::StrictMock<MockSurfaceReferenceFactory>();
+
+ // We are going to set up the SurfaceLayers and LayerTreeHosts. Each layer
+ // will require a sequence and no sequence should be satisfied for now.
+ EXPECT_CALL(*ref_factory, RequireSequence(Eq(expected_id), Eq(expected_seq1)))
+ .Times(1);
+ EXPECT_CALL(*ref_factory, RequireSequence(Eq(expected_id), Eq(expected_seq2)))
+ .Times(1);
+ EXPECT_CALL(*ref_factory, SatisfySequence(_)).Times(0);
+
+ auto layer = SurfaceLayer::Create(ref_factory);
layer->SetPrimarySurfaceInfo(info);
layer_tree_host_->GetSurfaceSequenceGenerator()->set_frame_sink_id(
FrameSinkId(1, 1));
@@ -117,57 +116,40 @@ TEST_F(SurfaceLayerTest, MultipleFramesOneSurface) {
std::unique_ptr<FakeLayerTreeHost> layer_tree_host2 =
FakeLayerTreeHost::Create(&fake_client_, &task_graph_runner_,
animation_host2.get());
- auto layer2 = SurfaceLayer::Create(std::move(ref_factory));
+ auto layer2 = SurfaceLayer::Create(ref_factory);
layer2->SetPrimarySurfaceInfo(info);
layer_tree_host2->GetSurfaceSequenceGenerator()->set_frame_sink_id(
FrameSinkId(2, 2));
layer_tree_host2->SetRootLayer(layer2);
- // Layers haven't been removed, so no sequence should be satisfied.
- EXPECT_FALSE(blank_change.is_valid());
-
- SurfaceSequence expected1(FrameSinkId(1, 1), 1u);
- SurfaceSequence expected2(FrameSinkId(2, 2), 1u);
+ testing::Mock::VerifyAndClearExpectations(ref_factory.get());
+ // Destroy the second LayerTreeHost. The sequence generated by its
+ // SurfaceLayer must be satisfied and no new sequences must be required.
+ EXPECT_CALL(*ref_factory, SatisfySequence(Eq(expected_seq2))).Times(1);
layer_tree_host2->SetRootLayer(nullptr);
layer_tree_host2.reset();
animation_host2 = nullptr;
-
- // Layer was removed so sequence from second LayerTreeHost should be
- // satisfied.
base::RunLoop().RunUntilIdle();
- EXPECT_TRUE(blank_change == expected2);
-
- // Set of sequences that need to be satisfied should include sequences from
- // both trees.
- EXPECT_TRUE(required_id == SurfaceId(kArbitraryFrameSinkId,
- LocalSurfaceId(1, kArbitraryToken)));
- EXPECT_EQ(2u, required_seq.size());
- EXPECT_TRUE(required_seq.count(expected1));
- EXPECT_TRUE(required_seq.count(expected2));
+ testing::Mock::VerifyAndClearExpectations(ref_factory.get());
+ // Destroy the first LayerTreeHost. The sequence generated by its
+ // SurfaceLayer must be satisfied and no new sequences must be required.
+ EXPECT_CALL(*ref_factory, SatisfySequence(expected_seq1)).Times(1);
+ EXPECT_CALL(*ref_factory, RequireSequence(_, _)).Times(0);
layer_tree_host_->SetRootLayer(nullptr);
layer_tree_host_.reset();
-
- // Layer was removed so sequence from first LayerTreeHost should be
- // satisfied.
base::RunLoop().RunUntilIdle();
- EXPECT_TRUE(blank_change == expected1);
-
- // No more SurfaceSequences should have been generated that need to have be
- // satisfied.
- EXPECT_EQ(2u, required_seq.size());
+ testing::Mock::VerifyAndClearExpectations(ref_factory.get());
}
// This test verifies that the primary and fallback SurfaceInfo are pushed
// across from SurfaceLayer to SurfaceLayerImpl.
TEST_F(SurfaceLayerTest, SurfaceInfoPushProperties) {
- SurfaceSequence blank_change;
- SurfaceId required_id;
- std::set<SurfaceSequence> required_sequences;
+ // We use a nice mock here because we are not really interested in calls to
+ // MockSurfaceReferenceFactory and we don't want warnings printed.
scoped_refptr<SurfaceReferenceFactory> ref_factory =
- new TestSurfaceReferenceFactory(&blank_change, &required_id,
- &required_sequences);
+ new testing::NiceMock<MockSurfaceReferenceFactory>();
scoped_refptr<SurfaceLayer> layer = SurfaceLayer::Create(ref_factory);
layer_tree_host_->SetRootLayer(layer);
@@ -208,24 +190,34 @@ class SurfaceLayerSwapPromise : public LayerTreeTest {
void BeginTest() override {
layer_tree_host()->GetSurfaceSequenceGenerator()->set_frame_sink_id(
FrameSinkId(1, 1));
- layer_ = SurfaceLayer::Create(new TestSurfaceReferenceFactory(
- &satisfied_sequence_, &required_id_, &required_set_));
+ ref_factory_ = new testing::StrictMock<MockSurfaceReferenceFactory>();
+
+ // Create a SurfaceLayer but don't add it to the tree yet. No sequence
+ // should be required / satisfied.
+ EXPECT_CALL(*ref_factory_, SatisfySequence(_)).Times(0);
+ EXPECT_CALL(*ref_factory_, RequireSequence(_, _)).Times(0);
+ layer_ = SurfaceLayer::Create(ref_factory_);
SurfaceInfo info(
SurfaceId(kArbitraryFrameSinkId, LocalSurfaceId(1, kArbitraryToken)),
1.f, gfx::Size(1, 1));
layer_->SetPrimarySurfaceInfo(info);
-
- // Layer hasn't been added to tree so no SurfaceSequence generated yet.
- EXPECT_EQ(0u, required_set_.size());
-
+ testing::Mock::VerifyAndClearExpectations(ref_factory_.get());
+
+ // Add the layer to the tree. A sequence must be required.
+ SurfaceSequence expected_seq(kArbitraryFrameSinkId, 1u);
+ SurfaceId expected_id(kArbitraryFrameSinkId,
+ LocalSurfaceId(1, kArbitraryToken));
+ EXPECT_CALL(*ref_factory_, SatisfySequence(_)).Times(0);
+ EXPECT_CALL(*ref_factory_,
+ RequireSequence(Eq(expected_id), Eq(expected_seq)))
+ .Times(1);
layer_tree_host()->SetRootLayer(layer_);
+ testing::Mock::VerifyAndClearExpectations(ref_factory_.get());
- // Should have SurfaceSequence from first tree.
- SurfaceSequence expected(kArbitraryFrameSinkId, 1u);
- EXPECT_TRUE(required_id_ == SurfaceId(kArbitraryFrameSinkId,
- LocalSurfaceId(1, kArbitraryToken)));
- EXPECT_EQ(1u, required_set_.size());
- EXPECT_TRUE(required_set_.count(expected));
+ // By the end of the test, the required sequence must be satisfied and no
+ // more sequence must be required.
+ EXPECT_CALL(*ref_factory_, SatisfySequence(Eq(expected_seq))).Times(1);
+ EXPECT_CALL(*ref_factory_, RequireSequence(_, _)).Times(0);
gfx::Size bounds(100, 100);
layer_tree_host()->SetViewportSize(bounds);
@@ -245,15 +237,15 @@ class SurfaceLayerSwapPromise : public LayerTreeTest {
base::Unretained(this)));
}
+ void AfterTest() override {}
+
protected:
int commit_count_;
bool sequence_was_satisfied_;
scoped_refptr<SurfaceLayer> layer_;
scoped_refptr<Layer> blank_layer_;
- SurfaceSequence satisfied_sequence_;
+ scoped_refptr<MockSurfaceReferenceFactory> ref_factory_;
- SurfaceId required_id_;
- std::set<SurfaceSequence> required_set_;
const base::UnguessableToken kArbitraryToken =
base::UnguessableToken::Create();
};
@@ -276,14 +268,6 @@ class SurfaceLayerSwapPromiseWithDraw : public SurfaceLayerSwapPromise {
break;
}
}
-
- void AfterTest() override {
- EXPECT_TRUE(required_id_ == SurfaceId(kArbitraryFrameSinkId,
- LocalSurfaceId(1, kArbitraryToken)));
- EXPECT_EQ(1u, required_set_.size());
- EXPECT_TRUE(satisfied_sequence_ ==
- SurfaceSequence(kArbitraryFrameSinkId, 1u));
- }
};
SINGLE_AND_MULTI_THREAD_TEST_F(SurfaceLayerSwapPromiseWithDraw);
@@ -315,14 +299,6 @@ class SurfaceLayerSwapPromiseWithoutDraw : public SurfaceLayerSwapPromise {
break;
}
}
-
- void AfterTest() override {
- EXPECT_TRUE(required_id_ == SurfaceId(kArbitraryFrameSinkId,
- LocalSurfaceId(1, kArbitraryToken)));
- EXPECT_EQ(1u, required_set_.size());
- EXPECT_TRUE(satisfied_sequence_ ==
- SurfaceSequence(kArbitraryFrameSinkId, 1u));
- }
};
MULTI_THREAD_TEST_F(SurfaceLayerSwapPromiseWithoutDraw);
« 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