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

Side by Side Diff: content/browser/android/in_process/synchronous_compositor_impl.cc

Issue 1769913003: sync compositor: Add output_surface_id (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: fix nit in test Created 4 years, 9 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
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "content/browser/android/in_process/synchronous_compositor_impl.h" 5 #include "content/browser/android/in_process/synchronous_compositor_impl.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/auto_reset.h" 9 #include "base/auto_reset.h"
10 #include "base/bind.h" 10 #include "base/bind.h"
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
143 synchronous_input_handler_proxy_->SetOnlySynchronouslyAnimateRootFlings( 143 synchronous_input_handler_proxy_->SetOnlySynchronouslyAnimateRootFlings(
144 nullptr); 144 nullptr);
145 145
146 synchronous_input_handler_proxy_ = nullptr; 146 synchronous_input_handler_proxy_ = nullptr;
147 begin_frame_source_ = nullptr; 147 begin_frame_source_ = nullptr;
148 output_surface_ = nullptr; 148 output_surface_ = nullptr;
149 // Don't propogate this signal from one renderer to the next. 149 // Don't propogate this signal from one renderer to the next.
150 need_animate_input_ = false; 150 need_animate_input_ = false;
151 } 151 }
152 152
153 scoped_ptr<cc::CompositorFrame> SynchronousCompositorImpl::DemandDrawHw( 153 SynchronousCompositor::Frame SynchronousCompositorImpl::DemandDrawHw(
154 const gfx::Size& surface_size, 154 const gfx::Size& surface_size,
155 const gfx::Transform& transform, 155 const gfx::Transform& transform,
156 const gfx::Rect& viewport, 156 const gfx::Rect& viewport,
157 const gfx::Rect& clip, 157 const gfx::Rect& clip,
158 const gfx::Rect& viewport_rect_for_tile_priority, 158 const gfx::Rect& viewport_rect_for_tile_priority,
159 const gfx::Transform& transform_for_tile_priority) { 159 const gfx::Transform& transform_for_tile_priority) {
160 DCHECK(CalledOnValidThread()); 160 DCHECK(CalledOnValidThread());
161 DCHECK(output_surface_); 161 DCHECK(output_surface_);
162 DCHECK(begin_frame_source_); 162 DCHECK(begin_frame_source_);
163 DCHECK(!frame_holder_); 163 DCHECK(!frame_holder_.frame);
164 164
165 output_surface_->DemandDrawHw(surface_size, transform, viewport, clip, 165 output_surface_->DemandDrawHw(surface_size, transform, viewport, clip,
166 viewport_rect_for_tile_priority, 166 viewport_rect_for_tile_priority,
167 transform_for_tile_priority); 167 transform_for_tile_priority);
168 168
169 if (frame_holder_) 169 if (frame_holder_.frame)
170 UpdateFrameMetaData(frame_holder_->metadata); 170 UpdateFrameMetaData(frame_holder_.frame->metadata);
171 171
172 return std::move(frame_holder_); 172 return std::move(frame_holder_);
173 } 173 }
174 174
175 void SynchronousCompositorImpl::ReturnResources( 175 void SynchronousCompositorImpl::ReturnResources(
176 uint32_t output_surface_id,
176 const cc::CompositorFrameAck& frame_ack) { 177 const cc::CompositorFrameAck& frame_ack) {
177 DCHECK(CalledOnValidThread()); 178 DCHECK(CalledOnValidThread());
178 output_surface_->ReturnResources(frame_ack); 179 output_surface_->ReturnResources(output_surface_id, frame_ack);
179 } 180 }
180 181
181 bool SynchronousCompositorImpl::DemandDrawSw(SkCanvas* canvas) { 182 bool SynchronousCompositorImpl::DemandDrawSw(SkCanvas* canvas) {
182 DCHECK(CalledOnValidThread()); 183 DCHECK(CalledOnValidThread());
183 DCHECK(output_surface_); 184 DCHECK(output_surface_);
184 DCHECK(begin_frame_source_); 185 DCHECK(begin_frame_source_);
185 DCHECK(!frame_holder_); 186 DCHECK(!frame_holder_.frame);
186 187
187 output_surface_->DemandDrawSw(canvas); 188 output_surface_->DemandDrawSw(canvas);
188 189
189 bool success = !!frame_holder_; 190 bool success = !!frame_holder_.frame;
190 if (frame_holder_) { 191 if (frame_holder_.frame) {
191 UpdateFrameMetaData(frame_holder_->metadata); 192 UpdateFrameMetaData(frame_holder_.frame->metadata);
192 frame_holder_.reset(); 193 frame_holder_.frame.reset();
193 } 194 }
194 195
195 return success; 196 return success;
196 } 197 }
197 198
198 void SynchronousCompositorImpl::SwapBuffers(cc::CompositorFrame* frame) { 199 void SynchronousCompositorImpl::SwapBuffers(uint32_t output_surface_id,
199 DCHECK(!frame_holder_); 200 cc::CompositorFrame* frame) {
200 frame_holder_.reset(new cc::CompositorFrame); 201 DCHECK(!frame_holder_.frame);
201 frame->AssignTo(frame_holder_.get()); 202 frame_holder_.output_surface_id = output_surface_id;
203 frame_holder_.frame.reset(new cc::CompositorFrame);
204 frame->AssignTo(frame_holder_.frame.get());
202 } 205 }
203 206
204 void SynchronousCompositorImpl::UpdateFrameMetaData( 207 void SynchronousCompositorImpl::UpdateFrameMetaData(
205 const cc::CompositorFrameMetadata& frame_metadata) { 208 const cc::CompositorFrameMetadata& frame_metadata) {
206 rwhva_->SynchronousFrameMetadata(frame_metadata); 209 rwhva_->SynchronousFrameMetadata(frame_metadata);
207 DeliverMessages(); 210 DeliverMessages();
208 } 211 }
209 212
210 void SynchronousCompositorImpl::SetMemoryPolicy(size_t bytes_limit) { 213 void SynchronousCompositorImpl::SetMemoryPolicy(size_t bytes_limit) {
211 DCHECK(CalledOnValidThread()); 214 DCHECK(CalledOnValidThread());
(...skipping 154 matching lines...) Expand 10 before | Expand all | Expand 10 after
366 } 369 }
367 } 370 }
368 371
369 // Not using base::NonThreadSafe as we want to enforce a more exacting threading 372 // Not using base::NonThreadSafe as we want to enforce a more exacting threading
370 // requirement: SynchronousCompositorImpl() must only be used on the UI thread. 373 // requirement: SynchronousCompositorImpl() must only be used on the UI thread.
371 bool SynchronousCompositorImpl::CalledOnValidThread() const { 374 bool SynchronousCompositorImpl::CalledOnValidThread() const {
372 return BrowserThread::CurrentlyOn(BrowserThread::UI); 375 return BrowserThread::CurrentlyOn(BrowserThread::UI);
373 } 376 }
374 377
375 } // namespace content 378 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698