| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include <stddef.h> | 5 #include <stddef.h> |
| 6 | 6 |
| 7 #include <unordered_map> | 7 #include <unordered_map> |
| 8 #include <vector> | 8 #include <vector> |
| 9 | 9 |
| 10 #include "base/memory/ptr_util.h" | 10 #include "base/memory/ptr_util.h" |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 51 .SubmitCompositorFrame(local_frame_id, CompositorFrame(), | 51 .SubmitCompositorFrame(local_frame_id, CompositorFrame(), |
| 52 SurfaceFactory::DrawCallback()); | 52 SurfaceFactory::DrawCallback()); |
| 53 return SurfaceId(frame_sink_id, local_frame_id); | 53 return SurfaceId(frame_sink_id, local_frame_id); |
| 54 } | 54 } |
| 55 | 55 |
| 56 // Destroy Surface with |surface_id|. | 56 // Destroy Surface with |surface_id|. |
| 57 void DestroySurface(const SurfaceId& surface_id) { | 57 void DestroySurface(const SurfaceId& surface_id) { |
| 58 GetFactory(surface_id.frame_sink_id()).EvictSurface(); | 58 GetFactory(surface_id.frame_sink_id()).EvictSurface(); |
| 59 } | 59 } |
| 60 | 60 |
| 61 protected: | |
| 62 SurfaceFactory& GetFactory(const FrameSinkId& frame_sink_id) { | 61 SurfaceFactory& GetFactory(const FrameSinkId& frame_sink_id) { |
| 63 auto& factory_ptr = factories_[frame_sink_id]; | 62 auto& factory_ptr = factories_[frame_sink_id]; |
| 64 if (!factory_ptr) | 63 if (!factory_ptr) |
| 65 factory_ptr = base::MakeUnique<SurfaceFactory>(frame_sink_id, | 64 factory_ptr = base::MakeUnique<SurfaceFactory>(frame_sink_id, |
| 66 manager_.get(), &client_); | 65 manager_.get(), &client_); |
| 67 return *factory_ptr; | 66 return *factory_ptr; |
| 68 } | 67 } |
| 69 | 68 |
| 70 // testing::Test: | 69 void RemoveSurfaceReference(const SurfaceId& parent_id, |
| 71 void SetUp() override { | 70 const SurfaceId& child_id) { |
| 72 // Start each test with a fresh SurfaceManager instance. | 71 manager_->RemoveSurfaceReferences({SurfaceReference(parent_id, child_id)}); |
| 73 manager_ = base::MakeUnique<SurfaceManager>( | |
| 74 SurfaceManager::LifetimeType::REFERENCES); | |
| 75 } | |
| 76 void TearDown() override { | |
| 77 for (auto& factory : factories_) | |
| 78 factory.second->EvictSurface(); | |
| 79 factories_.clear(); | |
| 80 manager_.reset(); | |
| 81 } | 72 } |
| 82 | 73 |
| 83 // Returns all the references where |surface_id| is the parent. | 74 // Returns all the references where |surface_id| is the parent. |
| 84 const SurfaceManager::SurfaceIdSet& GetReferencesFrom( | 75 const SurfaceManager::SurfaceIdSet& GetReferencesFrom( |
| 85 const SurfaceId& surface_id) { | 76 const SurfaceId& surface_id) { |
| 86 return manager().parent_to_child_refs_[surface_id]; | 77 return manager().parent_to_child_refs_[surface_id]; |
| 87 } | 78 } |
| 88 | 79 |
| 89 // Returns all the references where |surface_id| is the child. | 80 // Returns all the references where |surface_id| is the child. |
| 90 const SurfaceManager::SurfaceIdSet& GetReferencesFor( | 81 const SurfaceManager::SurfaceIdSet& GetReferencesFor( |
| (...skipping 15 matching lines...) Expand all Loading... |
| 106 // converts the map to a vector. | 97 // converts the map to a vector. |
| 107 std::vector<SurfaceId> GetAllTempReferences() { | 98 std::vector<SurfaceId> GetAllTempReferences() { |
| 108 std::vector<SurfaceId> temp_references; | 99 std::vector<SurfaceId> temp_references; |
| 109 for (auto& map_entry : manager().temp_references_) { | 100 for (auto& map_entry : manager().temp_references_) { |
| 110 for (auto local_frame_id : map_entry.second) | 101 for (auto local_frame_id : map_entry.second) |
| 111 temp_references.push_back(SurfaceId(map_entry.first, local_frame_id)); | 102 temp_references.push_back(SurfaceId(map_entry.first, local_frame_id)); |
| 112 } | 103 } |
| 113 return temp_references; | 104 return temp_references; |
| 114 } | 105 } |
| 115 | 106 |
| 107 protected: |
| 108 // testing::Test: |
| 109 void SetUp() override { |
| 110 // Start each test with a fresh SurfaceManager instance. |
| 111 manager_ = base::MakeUnique<SurfaceManager>( |
| 112 SurfaceManager::LifetimeType::REFERENCES); |
| 113 } |
| 114 void TearDown() override { |
| 115 for (auto& factory : factories_) |
| 116 factory.second->EvictSurface(); |
| 117 factories_.clear(); |
| 118 manager_.reset(); |
| 119 } |
| 120 |
| 116 std::unordered_map<FrameSinkId, | 121 std::unordered_map<FrameSinkId, |
| 117 std::unique_ptr<SurfaceFactory>, | 122 std::unique_ptr<SurfaceFactory>, |
| 118 FrameSinkIdHash> | 123 FrameSinkIdHash> |
| 119 factories_; | 124 factories_; |
| 120 std::unique_ptr<SurfaceManager> manager_; | 125 std::unique_ptr<SurfaceManager> manager_; |
| 121 StubSurfaceFactoryClient client_; | 126 StubSurfaceFactoryClient client_; |
| 122 }; | 127 }; |
| 123 | 128 |
| 124 TEST_F(SurfaceManagerRefTest, AddReference) { | 129 TEST_F(SurfaceManagerRefTest, AddReference) { |
| 125 SurfaceId id1 = CreateSurface(kFrameSink1, 1); | 130 SurfaceId id1 = CreateSurface(kFrameSink1, 1); |
| 126 manager().AddSurfaceReference(manager().GetRootSurfaceId(), id1); | 131 manager().AddSurfaceReference(manager().GetRootSurfaceId(), id1); |
| 127 | 132 |
| 128 EXPECT_THAT(GetReferencesFor(id1), | 133 EXPECT_THAT(GetReferencesFor(id1), |
| 129 UnorderedElementsAre(manager().GetRootSurfaceId())); | 134 UnorderedElementsAre(manager().GetRootSurfaceId())); |
| 130 EXPECT_THAT(GetReferencesFrom(id1), IsEmpty()); | 135 EXPECT_THAT(GetReferencesFrom(id1), IsEmpty()); |
| 131 } | 136 } |
| 132 | 137 |
| 133 TEST_F(SurfaceManagerRefTest, AddRemoveReference) { | 138 TEST_F(SurfaceManagerRefTest, AddRemoveReference) { |
| 134 SurfaceId id1 = CreateSurface(kFrameSink1, 1); | 139 SurfaceId id1 = CreateSurface(kFrameSink1, 1); |
| 135 SurfaceId id2 = CreateSurface(kFrameSink2, 1); | 140 SurfaceId id2 = CreateSurface(kFrameSink2, 1); |
| 136 manager().AddSurfaceReference(manager().GetRootSurfaceId(), id1); | 141 manager().AddSurfaceReference(manager().GetRootSurfaceId(), id1); |
| 137 manager().AddSurfaceReference(id1, id2); | 142 manager().AddSurfaceReference(id1, id2); |
| 138 | 143 |
| 139 EXPECT_THAT(GetReferencesFor(id1), | 144 EXPECT_THAT(GetReferencesFor(id1), |
| 140 UnorderedElementsAre(manager().GetRootSurfaceId())); | 145 UnorderedElementsAre(manager().GetRootSurfaceId())); |
| 141 EXPECT_THAT(GetReferencesFor(id2), UnorderedElementsAre(id1)); | 146 EXPECT_THAT(GetReferencesFor(id2), UnorderedElementsAre(id1)); |
| 142 EXPECT_THAT(GetReferencesFrom(id1), UnorderedElementsAre(id2)); | 147 EXPECT_THAT(GetReferencesFrom(id1), UnorderedElementsAre(id2)); |
| 143 EXPECT_THAT(GetReferencesFrom(id2), IsEmpty()); | 148 EXPECT_THAT(GetReferencesFrom(id2), IsEmpty()); |
| 144 | 149 |
| 145 manager().RemoveSurfaceReference(id1, id2); | 150 RemoveSurfaceReference(id1, id2); |
| 146 EXPECT_THAT(GetReferencesFor(id1), SizeIs(1)); | 151 EXPECT_THAT(GetReferencesFor(id1), SizeIs(1)); |
| 147 EXPECT_THAT(GetReferencesFor(id2), IsEmpty()); | 152 EXPECT_THAT(GetReferencesFor(id2), IsEmpty()); |
| 148 EXPECT_THAT(GetReferencesFrom(id1), IsEmpty()); | 153 EXPECT_THAT(GetReferencesFrom(id1), IsEmpty()); |
| 149 EXPECT_THAT(GetReferencesFrom(id2), IsEmpty()); | 154 EXPECT_THAT(GetReferencesFrom(id2), IsEmpty()); |
| 150 } | 155 } |
| 151 | 156 |
| 152 TEST_F(SurfaceManagerRefTest, NewSurfaceFromFrameSink) { | 157 TEST_F(SurfaceManagerRefTest, NewSurfaceFromFrameSink) { |
| 153 SurfaceId id1 = CreateSurface(kFrameSink1, 1); | 158 SurfaceId id1 = CreateSurface(kFrameSink1, 1); |
| 154 SurfaceId id2 = CreateSurface(kFrameSink2, 1); | 159 SurfaceId id2 = CreateSurface(kFrameSink2, 1); |
| 155 SurfaceId id3 = CreateSurface(kFrameSink3, 1); | 160 SurfaceId id3 = CreateSurface(kFrameSink3, 1); |
| 156 | 161 |
| 157 manager().AddSurfaceReference(manager().GetRootSurfaceId(), id1); | 162 manager().AddSurfaceReference(manager().GetRootSurfaceId(), id1); |
| 158 manager().AddSurfaceReference(id1, id2); | 163 manager().AddSurfaceReference(id1, id2); |
| 159 manager().AddSurfaceReference(id2, id3); | 164 manager().AddSurfaceReference(id2, id3); |
| 160 | 165 |
| 161 // |kFramesink2| received a CompositorFrame with a new size, so it destroys | 166 // |kFramesink2| received a CompositorFrame with a new size, so it destroys |
| 162 // |id2| and creates |id2_next|. No reference have been removed yet. | 167 // |id2| and creates |id2_next|. No reference have been removed yet. |
| 163 SurfaceId id2_next = CreateSurface(kFrameSink2, 2); | 168 SurfaceId id2_next = CreateSurface(kFrameSink2, 2); |
| 164 EXPECT_NE(nullptr, manager().GetSurfaceForId(id2)); | 169 EXPECT_NE(nullptr, manager().GetSurfaceForId(id2)); |
| 165 EXPECT_NE(nullptr, manager().GetSurfaceForId(id2_next)); | 170 EXPECT_NE(nullptr, manager().GetSurfaceForId(id2_next)); |
| 166 | 171 |
| 167 // Add references to and from |id2_next|. | 172 // Add references to and from |id2_next|. |
| 168 manager().AddSurfaceReference(id1, id2_next); | 173 manager().AddSurfaceReference(id1, id2_next); |
| 169 manager().AddSurfaceReference(id2_next, id3); | 174 manager().AddSurfaceReference(id2_next, id3); |
| 170 EXPECT_THAT(GetReferencesFor(id2), UnorderedElementsAre(id1)); | 175 EXPECT_THAT(GetReferencesFor(id2), UnorderedElementsAre(id1)); |
| 171 EXPECT_THAT(GetReferencesFor(id2_next), UnorderedElementsAre(id1)); | 176 EXPECT_THAT(GetReferencesFor(id2_next), UnorderedElementsAre(id1)); |
| 172 EXPECT_THAT(GetReferencesFor(id3), UnorderedElementsAre(id2, id2_next)); | 177 EXPECT_THAT(GetReferencesFor(id3), UnorderedElementsAre(id2, id2_next)); |
| 173 | 178 |
| 174 manager().RemoveSurfaceReference(id1, id2); | 179 RemoveSurfaceReference(id1, id2); |
| 175 EXPECT_THAT(GetReferencesFor(id2), IsEmpty()); | 180 EXPECT_THAT(GetReferencesFor(id2), IsEmpty()); |
| 176 EXPECT_THAT(GetReferencesFor(id2_next), UnorderedElementsAre(id1)); | 181 EXPECT_THAT(GetReferencesFor(id2_next), UnorderedElementsAre(id1)); |
| 177 EXPECT_THAT(GetReferencesFor(id3), UnorderedElementsAre(id2_next)); | 182 EXPECT_THAT(GetReferencesFor(id3), UnorderedElementsAre(id2_next)); |
| 178 | 183 |
| 179 // |id2| should be deleted during GC but other surfaces shouldn't. | 184 // |id2| should be deleted during GC but other surfaces shouldn't. |
| 180 EXPECT_EQ(nullptr, manager().GetSurfaceForId(id2)); | 185 EXPECT_EQ(nullptr, manager().GetSurfaceForId(id2)); |
| 181 EXPECT_NE(nullptr, manager().GetSurfaceForId(id2_next)); | 186 EXPECT_NE(nullptr, manager().GetSurfaceForId(id2_next)); |
| 182 EXPECT_NE(nullptr, manager().GetSurfaceForId(id3)); | 187 EXPECT_NE(nullptr, manager().GetSurfaceForId(id3)); |
| 183 } | 188 } |
| 184 | 189 |
| 185 TEST_F(SurfaceManagerRefTest, ReferenceCycleGetsDeleted) { | 190 TEST_F(SurfaceManagerRefTest, ReferenceCycleGetsDeleted) { |
| 186 SurfaceId id1 = CreateSurface(kFrameSink1, 1); | 191 SurfaceId id1 = CreateSurface(kFrameSink1, 1); |
| 187 SurfaceId id2 = CreateSurface(kFrameSink2, 1); | 192 SurfaceId id2 = CreateSurface(kFrameSink2, 1); |
| 188 SurfaceId id3 = CreateSurface(kFrameSink3, 1); | 193 SurfaceId id3 = CreateSurface(kFrameSink3, 1); |
| 189 | 194 |
| 190 manager().AddSurfaceReference(manager().GetRootSurfaceId(), id1); | 195 manager().AddSurfaceReference(manager().GetRootSurfaceId(), id1); |
| 191 manager().AddSurfaceReference(id1, id2); | 196 manager().AddSurfaceReference(id1, id2); |
| 192 manager().AddSurfaceReference(id2, id3); | 197 manager().AddSurfaceReference(id2, id3); |
| 193 | 198 |
| 194 // This reference forms a cycle between id2 and id3. | 199 // This reference forms a cycle between id2 and id3. |
| 195 manager().AddSurfaceReference(id3, id2); | 200 manager().AddSurfaceReference(id3, id2); |
| 196 | 201 |
| 197 DestroySurface(id3); | 202 DestroySurface(id3); |
| 198 DestroySurface(id2); | 203 DestroySurface(id2); |
| 199 DestroySurface(id1); | 204 DestroySurface(id1); |
| 200 | 205 |
| 201 manager().RemoveSurfaceReference(manager().GetRootSurfaceId(), id1); | 206 RemoveSurfaceReference(manager().GetRootSurfaceId(), id1); |
| 202 | 207 |
| 203 // Removing the reference from the root to id1 should allow all three surfaces | 208 // Removing the reference from the root to id1 should allow all three surfaces |
| 204 // to be deleted during GC even with a cycle between 2 and 3. | 209 // to be deleted during GC even with a cycle between 2 and 3. |
| 205 EXPECT_EQ(nullptr, manager().GetSurfaceForId(id1)); | 210 EXPECT_EQ(nullptr, manager().GetSurfaceForId(id1)); |
| 206 EXPECT_EQ(nullptr, manager().GetSurfaceForId(id2)); | 211 EXPECT_EQ(nullptr, manager().GetSurfaceForId(id2)); |
| 207 EXPECT_EQ(nullptr, manager().GetSurfaceForId(id3)); | 212 EXPECT_EQ(nullptr, manager().GetSurfaceForId(id3)); |
| 208 } | 213 } |
| 209 | 214 |
| 210 TEST_F(SurfaceManagerRefTest, CheckGC) { | 215 TEST_F(SurfaceManagerRefTest, CheckGC) { |
| 211 SurfaceId id1 = CreateSurface(kFrameSink1, 1); | 216 SurfaceId id1 = CreateSurface(kFrameSink1, 1); |
| 212 SurfaceId id2 = CreateSurface(kFrameSink2, 1); | 217 SurfaceId id2 = CreateSurface(kFrameSink2, 1); |
| 213 | 218 |
| 214 manager().AddSurfaceReference(manager().GetRootSurfaceId(), id1); | 219 manager().AddSurfaceReference(manager().GetRootSurfaceId(), id1); |
| 215 manager().AddSurfaceReference(id1, id2); | 220 manager().AddSurfaceReference(id1, id2); |
| 216 | 221 |
| 217 EXPECT_NE(nullptr, manager().GetSurfaceForId(id1)); | 222 EXPECT_NE(nullptr, manager().GetSurfaceForId(id1)); |
| 218 EXPECT_NE(nullptr, manager().GetSurfaceForId(id2)); | 223 EXPECT_NE(nullptr, manager().GetSurfaceForId(id2)); |
| 219 | 224 |
| 220 // Destroying the surfaces shouldn't delete them yet, since there is still an | 225 // Destroying the surfaces shouldn't delete them yet, since there is still an |
| 221 // active reference on all surfaces. | 226 // active reference on all surfaces. |
| 222 DestroySurface(id1); | 227 DestroySurface(id1); |
| 223 DestroySurface(id2); | 228 DestroySurface(id2); |
| 224 EXPECT_NE(nullptr, manager().GetSurfaceForId(id1)); | 229 EXPECT_NE(nullptr, manager().GetSurfaceForId(id1)); |
| 225 EXPECT_NE(nullptr, manager().GetSurfaceForId(id2)); | 230 EXPECT_NE(nullptr, manager().GetSurfaceForId(id2)); |
| 226 | 231 |
| 227 // Should delete |id2| when the only reference to it is removed. | 232 // Should delete |id2| when the only reference to it is removed. |
| 228 manager().RemoveSurfaceReference(id1, id2); | 233 RemoveSurfaceReference(id1, id2); |
| 229 EXPECT_EQ(nullptr, manager().GetSurfaceForId(id2)); | 234 EXPECT_EQ(nullptr, manager().GetSurfaceForId(id2)); |
| 230 | 235 |
| 231 // Should delete |id1| when the only reference to it is removed. | 236 // Should delete |id1| when the only reference to it is removed. |
| 232 manager().RemoveSurfaceReference(manager().GetRootSurfaceId(), id1); | 237 RemoveSurfaceReference(manager().GetRootSurfaceId(), id1); |
| 233 EXPECT_EQ(nullptr, manager().GetSurfaceForId(id1)); | 238 EXPECT_EQ(nullptr, manager().GetSurfaceForId(id1)); |
| 234 } | 239 } |
| 235 | 240 |
| 236 TEST_F(SurfaceManagerRefTest, CheckGCRecusiveFull) { | 241 TEST_F(SurfaceManagerRefTest, CheckGCRecusiveFull) { |
| 237 SurfaceId id1 = CreateSurface(kFrameSink1, 1); | 242 SurfaceId id1 = CreateSurface(kFrameSink1, 1); |
| 238 SurfaceId id2 = CreateSurface(kFrameSink2, 1); | 243 SurfaceId id2 = CreateSurface(kFrameSink2, 1); |
| 239 SurfaceId id3 = CreateSurface(kFrameSink3, 1); | 244 SurfaceId id3 = CreateSurface(kFrameSink3, 1); |
| 240 | 245 |
| 241 manager().AddSurfaceReference(manager().GetRootSurfaceId(), id1); | 246 manager().AddSurfaceReference(manager().GetRootSurfaceId(), id1); |
| 242 manager().AddSurfaceReference(id1, id2); | 247 manager().AddSurfaceReference(id1, id2); |
| 243 manager().AddSurfaceReference(id2, id3); | 248 manager().AddSurfaceReference(id2, id3); |
| 244 | 249 |
| 245 DestroySurface(id3); | 250 DestroySurface(id3); |
| 246 DestroySurface(id2); | 251 DestroySurface(id2); |
| 247 DestroySurface(id1); | 252 DestroySurface(id1); |
| 248 | 253 |
| 249 // Destroying the surfaces shouldn't delete them yet, since there is still an | 254 // Destroying the surfaces shouldn't delete them yet, since there is still an |
| 250 // active reference on all surfaces. | 255 // active reference on all surfaces. |
| 251 EXPECT_NE(nullptr, manager().GetSurfaceForId(id3)); | 256 EXPECT_NE(nullptr, manager().GetSurfaceForId(id3)); |
| 252 EXPECT_NE(nullptr, manager().GetSurfaceForId(id2)); | 257 EXPECT_NE(nullptr, manager().GetSurfaceForId(id2)); |
| 253 EXPECT_NE(nullptr, manager().GetSurfaceForId(id1)); | 258 EXPECT_NE(nullptr, manager().GetSurfaceForId(id1)); |
| 254 | 259 |
| 255 manager().RemoveSurfaceReference(manager().GetRootSurfaceId(), id1); | 260 RemoveSurfaceReference(manager().GetRootSurfaceId(), id1); |
| 256 | 261 |
| 257 // Removing the reference from the root to id1 should allow all three surfaces | 262 // Removing the reference from the root to id1 should allow all three surfaces |
| 258 // to be deleted during GC. | 263 // to be deleted during GC. |
| 259 EXPECT_EQ(nullptr, manager().GetSurfaceForId(id1)); | 264 EXPECT_EQ(nullptr, manager().GetSurfaceForId(id1)); |
| 260 EXPECT_EQ(nullptr, manager().GetSurfaceForId(id2)); | 265 EXPECT_EQ(nullptr, manager().GetSurfaceForId(id2)); |
| 261 EXPECT_EQ(nullptr, manager().GetSurfaceForId(id3)); | 266 EXPECT_EQ(nullptr, manager().GetSurfaceForId(id3)); |
| 262 } | 267 } |
| 263 | 268 |
| 264 TEST_F(SurfaceManagerRefTest, TryAddReferenceToBadSurface) { | 269 TEST_F(SurfaceManagerRefTest, TryAddReferenceToBadSurface) { |
| 265 // Not creating an accompanying Surface and SurfaceFactory. | 270 // Not creating an accompanying Surface and SurfaceFactory. |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 302 // The temporary reference to |id1| must still exist. | 307 // The temporary reference to |id1| must still exist. |
| 303 EXPECT_THAT(GetReferencesFor(id1), SizeIs(1)); | 308 EXPECT_THAT(GetReferencesFor(id1), SizeIs(1)); |
| 304 } | 309 } |
| 305 | 310 |
| 306 TEST_F(SurfaceManagerRefTest, TryRemoveBadReference) { | 311 TEST_F(SurfaceManagerRefTest, TryRemoveBadReference) { |
| 307 SurfaceId id1 = CreateSurface(kFrameSink1, 1); | 312 SurfaceId id1 = CreateSurface(kFrameSink1, 1); |
| 308 SurfaceId id2 = CreateSurface(kFrameSink2, 1); | 313 SurfaceId id2 = CreateSurface(kFrameSink2, 1); |
| 309 | 314 |
| 310 // Removing non-existent reference should be ignored. | 315 // Removing non-existent reference should be ignored. |
| 311 manager().AddSurfaceReference(id1, id2); | 316 manager().AddSurfaceReference(id1, id2); |
| 312 manager().RemoveSurfaceReference(id2, id1); | 317 RemoveSurfaceReference(id2, id1); |
| 313 EXPECT_THAT(GetReferencesFrom(id1), SizeIs(1)); | 318 EXPECT_THAT(GetReferencesFrom(id1), SizeIs(1)); |
| 314 EXPECT_THAT(GetReferencesFor(id2), SizeIs(1)); | 319 EXPECT_THAT(GetReferencesFor(id2), SizeIs(1)); |
| 315 } | 320 } |
| 316 | 321 |
| 317 TEST_F(SurfaceManagerRefTest, AddSurfaceThenReference) { | 322 TEST_F(SurfaceManagerRefTest, AddSurfaceThenReference) { |
| 318 // Create a new surface. | 323 // Create a new surface. |
| 319 const SurfaceId surface_id = CreateSurface(kFrameSink2, 1); | 324 const SurfaceId surface_id = CreateSurface(kFrameSink2, 1); |
| 320 | 325 |
| 321 // A temporary reference must be added to |surface_id|. | 326 // A temporary reference must be added to |surface_id|. |
| 322 EXPECT_THAT(GetAllTempReferences(), ElementsAre(surface_id)); | 327 EXPECT_THAT(GetAllTempReferences(), ElementsAre(surface_id)); |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 428 // reference should be removed. The temporary reference for |surface_id2| | 433 // reference should be removed. The temporary reference for |surface_id2| |
| 429 // should remain. A temporary reference must be added for |parent_id|. | 434 // should remain. A temporary reference must be added for |parent_id|. |
| 430 EXPECT_THAT(GetAllTempReferences(), | 435 EXPECT_THAT(GetAllTempReferences(), |
| 431 UnorderedElementsAre(parent_id, surface_id2)); | 436 UnorderedElementsAre(parent_id, surface_id2)); |
| 432 EXPECT_THAT(GetReferencesFromRoot(), | 437 EXPECT_THAT(GetReferencesFromRoot(), |
| 433 UnorderedElementsAre(parent_id, surface_id2)); | 438 UnorderedElementsAre(parent_id, surface_id2)); |
| 434 EXPECT_THAT(GetReferencesFrom(parent_id), ElementsAre(surface_id1)); | 439 EXPECT_THAT(GetReferencesFrom(parent_id), ElementsAre(surface_id1)); |
| 435 } | 440 } |
| 436 | 441 |
| 437 } // namespace cc | 442 } // namespace cc |
| OLD | NEW |