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

Side by Side Diff: cc/test/test_compositor_frame_sink.cc

Issue 2506883002: Revert of Remove SurfaceFactory::Create and SurfaceFactory::Destroy (Closed)
Patch Set: Created 4 years, 1 month 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/surfaces_pixeltest.cc ('k') | components/exo/surface.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 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 "cc/test/test_compositor_frame_sink.h" 5 #include "cc/test/test_compositor_frame_sink.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 #include <utility> 8 #include <utility>
9 9
10 #include "cc/output/begin_frame_args.h" 10 #include "cc/output/begin_frame_args.h"
(...skipping 93 matching lines...) Expand 10 before | Expand all | Expand 10 after
104 display_->renderer_for_testing()->SetEnlargePassTextureAmountForTesting( 104 display_->renderer_for_testing()->SetEnlargePassTextureAmountForTesting(
105 enlarge_pass_texture_amount_); 105 enlarge_pass_texture_amount_);
106 display_->SetVisible(true); 106 display_->SetVisible(true);
107 bound_ = true; 107 bound_ = true;
108 return true; 108 return true;
109 } 109 }
110 110
111 void TestCompositorFrameSink::DetachFromClient() { 111 void TestCompositorFrameSink::DetachFromClient() {
112 // Some tests make BindToClient fail on purpose. ^__^ 112 // Some tests make BindToClient fail on purpose. ^__^
113 if (bound_) { 113 if (bound_) {
114 surface_factory_->EvictSurface(); 114 if (delegated_local_frame_id_.is_valid())
115 surface_factory_->Destroy(delegated_local_frame_id_);
115 surface_manager_->UnregisterSurfaceFactoryClient(frame_sink_id_); 116 surface_manager_->UnregisterSurfaceFactoryClient(frame_sink_id_);
116 surface_manager_->InvalidateFrameSinkId(frame_sink_id_); 117 surface_manager_->InvalidateFrameSinkId(frame_sink_id_);
117 display_ = nullptr; 118 display_ = nullptr;
118 bound_ = false; 119 bound_ = false;
119 } 120 }
120 surface_factory_ = nullptr; 121 surface_factory_ = nullptr;
121 surface_id_allocator_ = nullptr; 122 surface_id_allocator_ = nullptr;
122 surface_manager_ = nullptr; 123 surface_manager_ = nullptr;
123 test_client_ = nullptr; 124 test_client_ = nullptr;
124 CompositorFrameSink::DetachFromClient(); 125 CompositorFrameSink::DetachFromClient();
125 } 126 }
126 127
127 void TestCompositorFrameSink::SubmitCompositorFrame(CompositorFrame frame) { 128 void TestCompositorFrameSink::SubmitCompositorFrame(CompositorFrame frame) {
128 test_client_->DisplayReceivedCompositorFrame(frame); 129 test_client_->DisplayReceivedCompositorFrame(frame);
129 130
130 if (!delegated_local_frame_id_.is_valid()) { 131 if (!delegated_local_frame_id_.is_valid()) {
131 delegated_local_frame_id_ = surface_id_allocator_->GenerateId(); 132 delegated_local_frame_id_ = surface_id_allocator_->GenerateId();
133 surface_factory_->Create(delegated_local_frame_id_);
132 } 134 }
133 display_->SetLocalFrameId(delegated_local_frame_id_, 135 display_->SetLocalFrameId(delegated_local_frame_id_,
134 frame.metadata.device_scale_factor); 136 frame.metadata.device_scale_factor);
135 137
136 gfx::Size frame_size = frame.render_pass_list.back()->output_rect.size(); 138 gfx::Size frame_size = frame.render_pass_list.back()->output_rect.size();
137 display_->Resize(frame_size); 139 display_->Resize(frame_size);
138 140
139 bool synchronous = !display_->has_scheduler(); 141 bool synchronous = !display_->has_scheduler();
140 142
141 SurfaceFactory::DrawCallback draw_callback; 143 SurfaceFactory::DrawCallback draw_callback;
142 if (!synchronous) { 144 if (!synchronous) {
143 // For async draws, we use a callback tell when it is done, but for sync 145 // For async draws, we use a callback tell when it is done, but for sync
144 // draws we don't need one. Unretained is safe here because the callback 146 // draws we don't need one. Unretained is safe here because the callback
145 // will be run when |surface_factory_| is destroyed which is owned by this 147 // will be run when |surface_factory_| is destroyed which is owned by this
146 // class. 148 // class.
147 draw_callback = base::Bind(&TestCompositorFrameSink::DidDrawCallback, 149 draw_callback = base::Bind(&TestCompositorFrameSink::DidDrawCallback,
148 base::Unretained(this)); 150 base::Unretained(this));
149 } 151 }
150 152
151 surface_factory_->SubmitCompositorFrame(delegated_local_frame_id_, 153 surface_factory_->SubmitCompositorFrame(delegated_local_frame_id_,
152 std::move(frame), draw_callback); 154 std::move(frame), draw_callback);
153 155
154 for (std::unique_ptr<CopyOutputRequest>& copy_request : copy_requests_) { 156 for (std::unique_ptr<CopyOutputRequest>& copy_request : copy_requests_) {
155 surface_factory_->RequestCopyOfSurface(std::move(copy_request)); 157 surface_factory_->RequestCopyOfSurface(delegated_local_frame_id_,
158 std::move(copy_request));
156 } 159 }
157 copy_requests_.clear(); 160 copy_requests_.clear();
158 161
159 if (synchronous) { 162 if (synchronous) {
160 display_->DrawAndSwap(); 163 display_->DrawAndSwap();
161 // Post this to get a new stack frame so that we exit this function before 164 // Post this to get a new stack frame so that we exit this function before
162 // calling the client to tell it that it is done. 165 // calling the client to tell it that it is done.
163 task_runner_->PostTask(FROM_HERE, 166 task_runner_->PostTask(FROM_HERE,
164 base::Bind(&TestCompositorFrameSink::DidDrawCallback, 167 base::Bind(&TestCompositorFrameSink::DidDrawCallback,
165 weak_ptr_factory_.GetWeakPtr())); 168 weak_ptr_factory_.GetWeakPtr()));
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
199 bool will_draw_and_swap, 202 bool will_draw_and_swap,
200 const RenderPassList& render_passes) { 203 const RenderPassList& render_passes) {
201 test_client_->DisplayWillDrawAndSwap(will_draw_and_swap, render_passes); 204 test_client_->DisplayWillDrawAndSwap(will_draw_and_swap, render_passes);
202 } 205 }
203 206
204 void TestCompositorFrameSink::DisplayDidDrawAndSwap() { 207 void TestCompositorFrameSink::DisplayDidDrawAndSwap() {
205 test_client_->DisplayDidDrawAndSwap(); 208 test_client_->DisplayDidDrawAndSwap();
206 } 209 }
207 210
208 } // namespace cc 211 } // namespace cc
OLDNEW
« no previous file with comments | « cc/surfaces/surfaces_pixeltest.cc ('k') | components/exo/surface.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698