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

Side by Side Diff: cc/surfaces/referenced_surface_tracker_unittest.cc

Issue 2632273003: Move ReferencedSurfaceTracker into GpuCompositorFrameSink. (Closed)
Patch Set: Change ReferencedSurfaceTracker. Created 3 years, 11 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2017 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "cc/surfaces/referenced_surface_tracker.h"
6
7 #include <memory>
8
9 #include "base/logging.h"
10 #include "base/macros.h"
11 #include "base/memory/ptr_util.h"
12 #include "cc/surfaces/frame_sink_id.h"
13 #include "cc/surfaces/surface_id.h"
14 #include "cc/surfaces/surface_reference.h"
15 #include "testing/gmock/include/gmock/gmock.h"
16 #include "testing/gtest/include/gtest/gtest.h"
17
18 using testing::ElementsAre;
19 using testing::IsEmpty;
20 using testing::SizeIs;
21
22 namespace cc {
23 namespace test {
24 namespace {
25
26 constexpr FrameSinkId kParentFrameSink(2, 1);
27 constexpr FrameSinkId kChildFrameSink1(65563, 1);
28 constexpr FrameSinkId kChildFrameSink2(65564, 1);
29
30 std::vector<SurfaceId> empty_surface_ids() {
31 return std::vector<SurfaceId>();
32 }
33
34 SurfaceId MakeSurfaceId(const FrameSinkId& frame_sink_id, uint32_t local_id) {
35 return SurfaceId(
36 frame_sink_id,
37 LocalFrameId(local_id, base::UnguessableToken::Deserialize(0, 1u)));
38 }
39
40 } // namespace
41
42 class ReferencedSurfaceTrackerTest : public testing::Test {
43 public:
44 ReferencedSurfaceTrackerTest() {}
45 ~ReferencedSurfaceTrackerTest() override {}
46
47 ReferencedSurfaceTracker& tracker() { return *tracker_; }
48
49 // testing::Test:
50 void SetUp() override {
51 testing::Test::SetUp();
52 tracker_ = base::MakeUnique<ReferencedSurfaceTracker>(kParentFrameSink);
53 }
54
55 void TearDown() override { tracker_.reset(); }
56
57 private:
58 std::unique_ptr<ReferencedSurfaceTracker> tracker_;
59
60 DISALLOW_COPY_AND_ASSIGN(ReferencedSurfaceTrackerTest);
61 };
62
63 TEST_F(ReferencedSurfaceTrackerTest, SetCurrentSurfaceId) {
64 const SurfaceId parent_id = MakeSurfaceId(kParentFrameSink, 1);
65
66 // Initially current_surface_id() should be invalid.
67 EXPECT_FALSE(tracker().current_surface_id().is_valid());
68
69 // After setting current SurfaceId then current_surface_id() should be valid.
70 tracker().UpdateReferences(parent_id.local_frame_id(), empty_surface_ids());
71 EXPECT_EQ(parent_id, tracker().current_surface_id());
72 }
73
74 TEST_F(ReferencedSurfaceTrackerTest, RefSurface) {
75 const SurfaceId parent_id = MakeSurfaceId(kParentFrameSink, 1);
76 const SurfaceId child_id1 = MakeSurfaceId(kChildFrameSink1, 1);
77 const SurfaceReference reference(parent_id, child_id1);
78
79 // First frame has a reference to |child_id1|, check that reference is added.
80 tracker().UpdateReferences(parent_id.local_frame_id(), {child_id1});
81 EXPECT_THAT(tracker().references_to_add(), ElementsAre(reference));
82 EXPECT_THAT(tracker().references_to_remove(), IsEmpty());
83 }
84
85 TEST_F(ReferencedSurfaceTrackerTest, NoChangeToReferences) {
86 const SurfaceId parent_id = MakeSurfaceId(kParentFrameSink, 1);
87 const SurfaceId child_id1 = MakeSurfaceId(kChildFrameSink1, 1);
88 const SurfaceReference reference(parent_id, child_id1);
89
90 // First frame has a reference to |child_id1|, check that reference is added.
91 tracker().UpdateReferences(parent_id.local_frame_id(), {child_id1});
92 EXPECT_THAT(tracker().references_to_remove(), IsEmpty());
93 EXPECT_THAT(tracker().references_to_add(), ElementsAre(reference));
94
95 // Second frame has same reference, check that no references are added or
96 // removed.
97 tracker().UpdateReferences(parent_id.local_frame_id(), {child_id1});
98 EXPECT_THAT(tracker().references_to_remove(), IsEmpty());
99 EXPECT_THAT(tracker().references_to_add(), IsEmpty());
100 }
101
102 TEST_F(ReferencedSurfaceTrackerTest, UnrefSurface) {
103 const SurfaceId parent_id = MakeSurfaceId(kParentFrameSink, 1);
104 const SurfaceId child_id1 = MakeSurfaceId(kChildFrameSink1, 1);
105 const SurfaceReference reference(parent_id, child_id1);
106
107 tracker().UpdateReferences(parent_id.local_frame_id(), {child_id1});
108
109 // Second frame no longer references |child_id1|, check that reference to is
110 // removed.
111 tracker().UpdateReferences(parent_id.local_frame_id(), empty_surface_ids());
112 EXPECT_THAT(tracker().references_to_add(), IsEmpty());
113 EXPECT_THAT(tracker().references_to_remove(), ElementsAre(reference));
114 }
115
116 TEST_F(ReferencedSurfaceTrackerTest, RefNewSurfaceForFrameSink) {
117 const SurfaceId parent_id = MakeSurfaceId(kParentFrameSink, 1);
118 const SurfaceId child_id1_first = MakeSurfaceId(kChildFrameSink1, 1);
119 const SurfaceId child_id1_second = MakeSurfaceId(kChildFrameSink1, 2);
120 const SurfaceReference reference_first(parent_id, child_id1_first);
121 const SurfaceReference reference_second(parent_id, child_id1_second);
122
123 // First frame has reference to |child_id1_first|.
124 tracker().UpdateReferences(parent_id.local_frame_id(), {child_id1_first});
125 EXPECT_THAT(tracker().references_to_add(), ElementsAre(reference_first));
126
127 // Second frame has reference to |child_id1_second| which has the same
128 // FrameSinkId but different LocalFrameId. Check that first reference is
129 // removed and second reference is added.
130 tracker().UpdateReferences(parent_id.local_frame_id(), {child_id1_second});
131 EXPECT_THAT(tracker().references_to_remove(), ElementsAre(reference_first));
132 EXPECT_THAT(tracker().references_to_add(), ElementsAre(reference_second));
133 }
134
135 TEST_F(ReferencedSurfaceTrackerTest, UpdateParentSurfaceId) {
136 const SurfaceId parent_id_first = MakeSurfaceId(kParentFrameSink, 1);
137 const SurfaceId parent_id_second = MakeSurfaceId(kParentFrameSink, 2);
138 const SurfaceId child_id1 = MakeSurfaceId(kChildFrameSink1, 1);
139 const SurfaceReference reference(parent_id_second, child_id1);
140
141 // First frame references |child_id1|.
142 tracker().UpdateReferences(parent_id_first.local_frame_id(), {child_id1});
143 EXPECT_THAT(tracker().references_to_add(), SizeIs(1));
144
145 // Second frame still reference |child_id1| but the parent SurfaceId has
146 // changed. The new parent SurfaceId should have a reference added to
147 // |child_id1|.
148 tracker().UpdateReferences(parent_id_second.local_frame_id(), {child_id1});
149 EXPECT_THAT(tracker().references_to_add(), ElementsAre(reference));
150 EXPECT_THAT(tracker().references_to_remove(), IsEmpty());
151 }
152
153 TEST_F(ReferencedSurfaceTrackerTest, RefTwoThenUnrefOneSurface) {
154 const SurfaceId parent_id = MakeSurfaceId(kParentFrameSink, 1);
155 const SurfaceId child_id1 = MakeSurfaceId(kChildFrameSink1, 1);
156 const SurfaceId child_id2 = MakeSurfaceId(kChildFrameSink2, 2);
157 const SurfaceReference reference1(parent_id, child_id1);
158 const SurfaceReference reference2(parent_id, child_id2);
159
160 // First frame references both surfaces.
161 tracker().UpdateReferences(parent_id.local_frame_id(),
162 {child_id1, child_id2});
163 EXPECT_THAT(tracker().references_to_add(),
164 ElementsAre(reference1, reference2));
165
166 // Second frame references only |child_id2|, check that reference to
167 // |child_id1| is removed.
168 tracker().UpdateReferences(parent_id.local_frame_id(), {child_id2});
169 EXPECT_THAT(tracker().references_to_remove(), ElementsAre(reference1));
170 EXPECT_THAT(tracker().references_to_add(), IsEmpty());
171 }
172
173 } // namespace test
174 } // namespace cc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698