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

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

Issue 2880023002: cc::SurfaceDependencyTracker should not crash when a Display goes away (Closed)
Patch Set: Fix LayerTreeHostImpl unit tests Created 3 years, 6 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/surface_manager_unittest.cc ('k') | cc/test/begin_frame_source_test.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2017 The Chromium Authors. All rights reserved. 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 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 "base/containers/flat_set.h" 5 #include "base/containers/flat_set.h"
6 #include "cc/surfaces/compositor_frame_sink_support.h" 6 #include "cc/surfaces/compositor_frame_sink_support.h"
7 #include "cc/surfaces/surface_id.h" 7 #include "cc/surfaces/surface_id.h"
8 #include "cc/surfaces/surface_manager.h" 8 #include "cc/surfaces/surface_manager.h"
9 #include "cc/surfaces/surface_observer.h" 9 #include "cc/surfaces/surface_observer.h"
10 #include "cc/test/begin_frame_args_test.h" 10 #include "cc/test/begin_frame_args_test.h"
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
100 FakeExternalBeginFrameSource* begin_frame_source() { 100 FakeExternalBeginFrameSource* begin_frame_source() {
101 return begin_frame_source_.get(); 101 return begin_frame_source_.get();
102 } 102 }
103 103
104 // testing::Test: 104 // testing::Test:
105 void SetUp() override { 105 void SetUp() override {
106 testing::Test::SetUp(); 106 testing::Test::SetUp();
107 107
108 begin_frame_source_ = 108 begin_frame_source_ =
109 base::MakeUnique<FakeExternalBeginFrameSource>(0.f, false); 109 base::MakeUnique<FakeExternalBeginFrameSource>(0.f, false);
110 surface_manager_.SetDependencyTracker( 110 dependency_tracker_ = base::MakeUnique<SurfaceDependencyTracker>(
111 base::MakeUnique<SurfaceDependencyTracker>(&surface_manager_, 111 &surface_manager_, begin_frame_source_.get());
112 begin_frame_source_.get())); 112 surface_manager_.SetDependencyTracker(dependency_tracker_.get());
113 surface_manager_.AddObserver(this); 113 surface_manager_.AddObserver(this);
114 supports_.push_back(CompositorFrameSinkSupport::Create( 114 supports_.push_back(CompositorFrameSinkSupport::Create(
115 &support_client_, &surface_manager_, kDisplayFrameSink, kIsRoot, 115 &support_client_, &surface_manager_, kDisplayFrameSink, kIsRoot,
116 kHandlesFrameSinkIdInvalidation, kNeedsSyncPoints)); 116 kHandlesFrameSinkIdInvalidation, kNeedsSyncPoints));
117 supports_.push_back(CompositorFrameSinkSupport::Create( 117 supports_.push_back(CompositorFrameSinkSupport::Create(
118 &support_client_, &surface_manager_, kParentFrameSink, kIsChildRoot, 118 &support_client_, &surface_manager_, kParentFrameSink, kIsChildRoot,
119 kHandlesFrameSinkIdInvalidation, kNeedsSyncPoints)); 119 kHandlesFrameSinkIdInvalidation, kNeedsSyncPoints));
120 supports_.push_back(CompositorFrameSinkSupport::Create( 120 supports_.push_back(CompositorFrameSinkSupport::Create(
121 &support_client_, &surface_manager_, kChildFrameSink1, kIsChildRoot, 121 &support_client_, &surface_manager_, kChildFrameSink1, kIsChildRoot,
122 kHandlesFrameSinkIdInvalidation, kNeedsSyncPoints)); 122 kHandlesFrameSinkIdInvalidation, kNeedsSyncPoints));
123 supports_.push_back(CompositorFrameSinkSupport::Create( 123 supports_.push_back(CompositorFrameSinkSupport::Create(
124 &support_client_, &surface_manager_, kChildFrameSink2, kIsChildRoot, 124 &support_client_, &surface_manager_, kChildFrameSink2, kIsChildRoot,
125 kHandlesFrameSinkIdInvalidation, kNeedsSyncPoints)); 125 kHandlesFrameSinkIdInvalidation, kNeedsSyncPoints));
126 126
127 // Normally, the BeginFrameSource would be registered by the Display. We 127 // Normally, the BeginFrameSource would be registered by the Display. We
128 // register it here so that BeginFrames are received by the display support, 128 // register it here so that BeginFrames are received by the display support,
129 // for use in the PassesOnBeginFrameAcks test. Other supports do not receive 129 // for use in the PassesOnBeginFrameAcks test. Other supports do not receive
130 // BeginFrames, since the frame sink hierarchy is not set up in this test. 130 // BeginFrames, since the frame sink hierarchy is not set up in this test.
131 surface_manager_.RegisterBeginFrameSource(begin_frame_source_.get(), 131 surface_manager_.RegisterBeginFrameSource(begin_frame_source_.get(),
132 kDisplayFrameSink); 132 kDisplayFrameSink);
133 } 133 }
134 134
135 void TearDown() override { 135 void TearDown() override {
136 surface_manager_.RemoveObserver(this); 136 surface_manager_.RemoveObserver(this);
137 surface_manager_.SetDependencyTracker(nullptr); 137 surface_manager_.SetDependencyTracker(nullptr);
138 surface_manager_.UnregisterBeginFrameSource(begin_frame_source_.get()); 138 surface_manager_.UnregisterBeginFrameSource(begin_frame_source_.get());
139 139
140 dependency_tracker_.reset();
141
140 // SurfaceDependencyTracker depends on this BeginFrameSource and so it must 142 // SurfaceDependencyTracker depends on this BeginFrameSource and so it must
141 // be destroyed AFTER the dependency tracker is destroyed. 143 // be destroyed AFTER the dependency tracker is destroyed.
142 begin_frame_source_.reset(); 144 begin_frame_source_.reset();
143 145
144 supports_.clear(); 146 supports_.clear();
145 147
146 damaged_surfaces_.clear(); 148 damaged_surfaces_.clear();
147 } 149 }
148 150
149 bool IsSurfaceDamaged(const SurfaceId& surface_id) const { 151 bool IsSurfaceDamaged(const SurfaceId& surface_id) const {
150 return damaged_surfaces_.count(surface_id) > 0; 152 return damaged_surfaces_.count(surface_id) > 0;
151 } 153 }
152 154
153 // SurfaceObserver implementation: 155 // SurfaceObserver implementation:
154 void OnSurfaceCreated(const SurfaceInfo& surface_info) override {} 156 void OnSurfaceCreated(const SurfaceInfo& surface_info) override {}
155 void OnSurfaceDamaged(const SurfaceId& surface_id, bool* changed) override { 157 void OnSurfaceDamaged(const SurfaceId& surface_id, bool* changed) override {
156 damaged_surfaces_.insert(surface_id); 158 damaged_surfaces_.insert(surface_id);
157 } 159 }
158 void OnSurfaceDiscarded(const SurfaceId& surface_id) override {} 160 void OnSurfaceDiscarded(const SurfaceId& surface_id) override {}
159 161
160 protected: 162 protected:
161 testing::NiceMock<MockCompositorFrameSinkSupportClient> support_client_; 163 testing::NiceMock<MockCompositorFrameSinkSupportClient> support_client_;
162 164
163 private: 165 private:
164 base::flat_set<SurfaceId> damaged_surfaces_; 166 base::flat_set<SurfaceId> damaged_surfaces_;
165 SurfaceManager surface_manager_; 167 SurfaceManager surface_manager_;
166 std::unique_ptr<FakeExternalBeginFrameSource> begin_frame_source_; 168 std::unique_ptr<FakeExternalBeginFrameSource> begin_frame_source_;
169 std::unique_ptr<SurfaceDependencyTracker> dependency_tracker_;
167 std::vector<std::unique_ptr<CompositorFrameSinkSupport>> supports_; 170 std::vector<std::unique_ptr<CompositorFrameSinkSupport>> supports_;
168 171
169 DISALLOW_COPY_AND_ASSIGN(SurfaceSynchronizationTest); 172 DISALLOW_COPY_AND_ASSIGN(SurfaceSynchronizationTest);
170 }; 173 };
171 174
172 // The display root surface should have a surface reference from the top-level 175 // The display root surface should have a surface reference from the top-level
173 // root added/removed when a CompositorFrame is submitted with a new SurfaceId. 176 // root added/removed when a CompositorFrame is submitted with a new SurfaceId.
174 TEST_F(SurfaceSynchronizationTest, RootSurfaceReceivesReferences) { 177 TEST_F(SurfaceSynchronizationTest, RootSurfaceReceivesReferences) {
175 const SurfaceId display_id_first = MakeSurfaceId(kDisplayFrameSink, 1); 178 const SurfaceId display_id_first = MakeSurfaceId(kDisplayFrameSink, 1);
176 const SurfaceId display_id_second = MakeSurfaceId(kDisplayFrameSink, 2); 179 const SurfaceId display_id_second = MakeSurfaceId(kDisplayFrameSink, 2);
(...skipping 1205 matching lines...) Expand 10 before | Expand all | Expand 10 after
1382 DidReceiveCompositorFrameAck(Eq(returned_resources2))); 1385 DidReceiveCompositorFrameAck(Eq(returned_resources2)));
1383 child_support1().SubmitCompositorFrame( 1386 child_support1().SubmitCompositorFrame(
1384 child_id1.local_surface_id(), 1387 child_id1.local_surface_id(),
1385 MakeCompositorFrame(empty_surface_ids(), empty_surface_ids(), 1388 MakeCompositorFrame(empty_surface_ids(), empty_surface_ids(),
1386 {resource2})); 1389 {resource2}));
1387 testing::Mock::VerifyAndClearExpectations(&support_client_); 1390 testing::Mock::VerifyAndClearExpectations(&support_client_);
1388 } 1391 }
1389 1392
1390 } // namespace test 1393 } // namespace test
1391 } // namespace cc 1394 } // namespace cc
OLDNEW
« no previous file with comments | « cc/surfaces/surface_manager_unittest.cc ('k') | cc/test/begin_frame_source_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698