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

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

Issue 2610063007: Separate client surface reference tracking from FrameGenerator. (Closed)
Patch Set: Rebase. 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/embedded_surface_tracker.cc ('k') | services/ui/ws/frame_generator.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/embedded_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 kEmbeddedFrameSink(65563, 1);
28
29 SurfaceId MakeSurfaceId(const FrameSinkId& frame_sink_id, uint32_t local_id) {
30 return SurfaceId(
31 frame_sink_id,
32 LocalFrameId(local_id, base::UnguessableToken::Deserialize(0, 1u)));
33 }
34
35 } // namespace
36
37 class EmbeddedSurfaceTrackerTest : public testing::Test {
38 public:
39 EmbeddedSurfaceTrackerTest() {}
40 ~EmbeddedSurfaceTrackerTest() override {}
41
42 EmbeddedSurfaceTracker& tracker() { return *tracker_; }
43
44 // Returns references to add without clearing them.
45 const std::vector<SurfaceReference>& peek_to_add() {
46 return tracker_->references_to_add_;
47 }
48
49 // Returns references to remove without clearing them.
50 const std::vector<SurfaceReference>& peek_to_remove() {
51 return tracker_->references_to_remove_;
52 }
53
54 // testing::Test:
55 void SetUp() override {
56 testing::Test::SetUp();
57 tracker_ = base::MakeUnique<EmbeddedSurfaceTracker>();
58 }
59
60 void TearDown() override { tracker_.reset(); }
61
62 private:
63 std::unique_ptr<EmbeddedSurfaceTracker> tracker_;
64
65 DISALLOW_COPY_AND_ASSIGN(EmbeddedSurfaceTrackerTest);
66 };
67
68 TEST_F(EmbeddedSurfaceTrackerTest, SetCurrentSurfaceId) {
69 const SurfaceId parent_id = MakeSurfaceId(kParentFrameSink, 1);
70
71 // Initially HasValidSurfaceId() should be false.
72 EXPECT_FALSE(tracker().HasValidSurfaceId());
73
74 // After setting current SurfaceId then HasValidSurfaceId() should be true.
75 tracker().SetCurrentSurfaceId(parent_id);
76 EXPECT_TRUE(tracker().HasValidSurfaceId());
77 EXPECT_EQ(parent_id, tracker().current_surface_id());
78 }
79
80 TEST_F(EmbeddedSurfaceTrackerTest, EmbedSurface) {
81 const SurfaceId parent_id = MakeSurfaceId(kParentFrameSink, 1);
82 const SurfaceId embedded_id = MakeSurfaceId(kEmbeddedFrameSink, 1);
83 const SurfaceReference reference(parent_id, embedded_id);
84
85 // Set parent surface id then embed another surface. The tracker should have a
86 // reference to add from parent surface to embedded surface.
87 tracker().SetCurrentSurfaceId(parent_id);
88 EXPECT_TRUE(tracker().EmbedSurface(embedded_id));
89 EXPECT_THAT(peek_to_add(), ElementsAre(reference));
90
91 // Getting the references to add should return the correct reference and empty
92 // the reference the add.
93 EXPECT_THAT(tracker().GetReferencesToAdd(), ElementsAre(reference));
94 EXPECT_THAT(peek_to_add(), IsEmpty());
95 }
96
97 TEST_F(EmbeddedSurfaceTrackerTest, EmbedNewSurfaceForFrameSink) {
98 const SurfaceId parent_id = MakeSurfaceId(kParentFrameSink, 1);
99 const SurfaceId embedded_id_first = MakeSurfaceId(kEmbeddedFrameSink, 1);
100 const SurfaceId embedded_id_second = MakeSurfaceId(kEmbeddedFrameSink, 2);
101 const SurfaceReference reference_first(parent_id, embedded_id_first);
102 const SurfaceReference reference_second(parent_id, embedded_id_second);
103
104 // Embed a surface and add references.
105 tracker().SetCurrentSurfaceId(parent_id);
106 EXPECT_TRUE(tracker().EmbedSurface(embedded_id_first));
107 EXPECT_THAT(tracker().GetReferencesToAdd(), ElementsAre(reference_first));
108
109 // Embed a newer surface with the same FrameSinkId as the first embedded
110 // surface. The first reference should be in the list to remove and the new
111 // reference in the last to add.
112 EXPECT_FALSE(tracker().EmbedSurface(embedded_id_second));
113 EXPECT_THAT(peek_to_remove(), ElementsAre(reference_first));
114 EXPECT_THAT(peek_to_add(), ElementsAre(reference_second));
115 }
116
117 TEST_F(EmbeddedSurfaceTrackerTest, UnembedSurface) {
118 const SurfaceId parent_id = MakeSurfaceId(kParentFrameSink, 1);
119 const SurfaceId embedded_id = MakeSurfaceId(kEmbeddedFrameSink, 1);
120 const SurfaceReference reference(parent_id, embedded_id);
121
122 tracker().SetCurrentSurfaceId(parent_id);
123 tracker().EmbedSurface(embedded_id);
124 EXPECT_THAT(tracker().GetReferencesToAdd(), ElementsAre(reference));
125 EXPECT_THAT(peek_to_remove(), IsEmpty());
126
127 // Unembed the surface. The reference should be in the list to remove.
128 tracker().UnembedSurface(embedded_id.frame_sink_id());
129 EXPECT_THAT(peek_to_remove(), ElementsAre(reference));
130
131 // Getting the references to remove should return the correct reference and
132 // empty the reference the remove.
133 EXPECT_THAT(tracker().GetReferencesToRemove(), ElementsAre(reference));
134 EXPECT_THAT(peek_to_remove(), IsEmpty());
135 }
136
137 TEST_F(EmbeddedSurfaceTrackerTest, EmbedSurfaceBeforeSetCurrentSurfaceId) {
138 const SurfaceId parent_id = MakeSurfaceId(kParentFrameSink, 1);
139 const SurfaceId embedded_id = MakeSurfaceId(kEmbeddedFrameSink, 1);
140 const SurfaceReference reference(parent_id, embedded_id);
141
142 // Embed a surface before the parent id is set. There should be no references
143 // to add because we don't know the parent id yet.
144 tracker().EmbedSurface(embedded_id);
145 EXPECT_THAT(peek_to_add(), IsEmpty());
146
147 // Set the parent id, this should add a reference to add to the embedded
148 // surface.
149 tracker().SetCurrentSurfaceId(parent_id);
150 EXPECT_THAT(peek_to_add(), ElementsAre(reference));
151 }
152
153 TEST_F(EmbeddedSurfaceTrackerTest, UpdateCurrentSurfaceId) {
154 const SurfaceId parent_id_first = MakeSurfaceId(kParentFrameSink, 1);
155 const SurfaceId parent_id_second = MakeSurfaceId(kParentFrameSink, 2);
156 const SurfaceId embedded_id = MakeSurfaceId(kEmbeddedFrameSink, 1);
157 const SurfaceReference reference(parent_id_second, embedded_id);
158
159 // Set parent id and embed a surface.
160 tracker().SetCurrentSurfaceId(parent_id_first);
161 tracker().EmbedSurface(embedded_id);
162 EXPECT_THAT(tracker().GetReferencesToAdd(), SizeIs(1));
163
164 // Update the current parent id. There should be a reference to add from the
165 // new parent id to the embedded surface.
166 tracker().SetCurrentSurfaceId(parent_id_second);
167 EXPECT_THAT(peek_to_add(), ElementsAre(reference));
168 }
169
170 TEST_F(EmbeddedSurfaceTrackerTest, UpdateCurrentSurfaceIdBeforeAdding) {
171 const SurfaceId parent_id_first = MakeSurfaceId(kParentFrameSink, 1);
172 const SurfaceId parent_id_second = MakeSurfaceId(kParentFrameSink, 2);
173 const SurfaceId embedded_id = MakeSurfaceId(kEmbeddedFrameSink, 1);
174 const SurfaceReference reference_first(parent_id_first, embedded_id);
175 const SurfaceReference reference_second(parent_id_second, embedded_id);
176
177 // Set parent id and embed a surface. There should be a reference to add from
178 // the parent to embedded surface.
179 tracker().SetCurrentSurfaceId(parent_id_first);
180 tracker().EmbedSurface(embedded_id);
181 EXPECT_THAT(peek_to_add(), ElementsAre(reference_first));
182
183 // Update the parent id before sending IPC to add references. There should be
184 // a reference to add from the new parent id to the embedded surface and the
185 // previous reference to add was deleted.
186 tracker().SetCurrentSurfaceId(parent_id_second);
187 EXPECT_THAT(peek_to_add(), ElementsAre(reference_second));
188 EXPECT_THAT(tracker().GetReferencesToAdd(), ElementsAre(reference_second));
189 }
190
191 } // namespace test
192 } // namespace cc
OLDNEW
« no previous file with comments | « cc/surfaces/embedded_surface_tracker.cc ('k') | services/ui/ws/frame_generator.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698