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

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

Issue 2632273003: Move ReferencedSurfaceTracker into GpuCompositorFrameSink. (Closed)
Patch Set: Fix iterator invalidation. 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
« no previous file with comments | « cc/surfaces/referenced_surface_tracker.cc ('k') | components/exo/compositor_frame_sink.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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::UnorderedElementsAre;
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(), UnorderedElementsAre(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(), UnorderedElementsAre(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(),
114 UnorderedElementsAre(reference));
115 }
116
117 TEST_F(ReferencedSurfaceTrackerTest, RefNewSurfaceForFrameSink) {
118 const SurfaceId parent_id = MakeSurfaceId(kParentFrameSink, 1);
119 const SurfaceId child_id1_first = MakeSurfaceId(kChildFrameSink1, 1);
120 const SurfaceId child_id1_second = MakeSurfaceId(kChildFrameSink1, 2);
121 const SurfaceReference reference_first(parent_id, child_id1_first);
122 const SurfaceReference reference_second(parent_id, child_id1_second);
123
124 // First frame has reference to |child_id1_first|.
125 tracker().UpdateReferences(parent_id.local_frame_id(), {child_id1_first});
126 EXPECT_THAT(tracker().references_to_add(),
127 UnorderedElementsAre(reference_first));
128
129 // Second frame has reference to |child_id1_second| which has the same
130 // FrameSinkId but different LocalFrameId. Check that first reference is
131 // removed and second reference is added.
132 tracker().UpdateReferences(parent_id.local_frame_id(), {child_id1_second});
133 EXPECT_THAT(tracker().references_to_remove(),
134 UnorderedElementsAre(reference_first));
135 EXPECT_THAT(tracker().references_to_add(),
136 UnorderedElementsAre(reference_second));
137 }
138
139 TEST_F(ReferencedSurfaceTrackerTest, UpdateParentSurfaceId) {
140 const SurfaceId parent_id_first = MakeSurfaceId(kParentFrameSink, 1);
141 const SurfaceId parent_id_second = MakeSurfaceId(kParentFrameSink, 2);
142 const SurfaceId child_id1 = MakeSurfaceId(kChildFrameSink1, 1);
143 const SurfaceReference reference(parent_id_second, child_id1);
144
145 // First frame references |child_id1|.
146 tracker().UpdateReferences(parent_id_first.local_frame_id(), {child_id1});
147 EXPECT_THAT(tracker().references_to_add(), SizeIs(1));
148
149 // Second frame still reference |child_id1| but the parent SurfaceId has
150 // changed. The new parent SurfaceId should have a reference added to
151 // |child_id1|.
152 tracker().UpdateReferences(parent_id_second.local_frame_id(), {child_id1});
153 EXPECT_THAT(tracker().references_to_add(), UnorderedElementsAre(reference));
154 EXPECT_THAT(tracker().references_to_remove(), IsEmpty());
155 }
156
157 TEST_F(ReferencedSurfaceTrackerTest, RefTwoThenUnrefOneSurface) {
158 const SurfaceId parent_id = MakeSurfaceId(kParentFrameSink, 1);
159 const SurfaceId child_id1 = MakeSurfaceId(kChildFrameSink1, 1);
160 const SurfaceId child_id2 = MakeSurfaceId(kChildFrameSink2, 2);
161 const SurfaceReference reference1(parent_id, child_id1);
162 const SurfaceReference reference2(parent_id, child_id2);
163
164 // First frame references both surfaces.
165 tracker().UpdateReferences(parent_id.local_frame_id(),
166 {child_id1, child_id2});
167 EXPECT_THAT(tracker().references_to_add(),
168 UnorderedElementsAre(reference1, reference2));
169
170 // Second frame references only |child_id2|, check that reference to
171 // |child_id1| is removed.
172 tracker().UpdateReferences(parent_id.local_frame_id(), {child_id2});
173 EXPECT_THAT(tracker().references_to_remove(),
174 UnorderedElementsAre(reference1));
175 EXPECT_THAT(tracker().references_to_add(), IsEmpty());
176 }
177
178 } // namespace test
179 } // namespace cc
OLDNEW
« no previous file with comments | « cc/surfaces/referenced_surface_tracker.cc ('k') | components/exo/compositor_frame_sink.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698