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

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

Issue 394113002: Tiling priorities in Android Webview. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 5 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_output_surfa ce.h" 5 #include "content/browser/android/in_process/synchronous_compositor_output_surfa ce.h"
6 6
7 #include "base/auto_reset.h" 7 #include "base/auto_reset.h"
8 #include "base/logging.h" 8 #include "base/logging.h"
9 #include "cc/output/begin_frame_args.h" 9 #include "cc/output/begin_frame_args.h"
10 #include "cc/output/compositor_frame.h" 10 #include "cc/output/compositor_frame.h"
(...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 void SynchronousCompositorOutputSurface::ReleaseHwDraw() { 155 void SynchronousCompositorOutputSurface::ReleaseHwDraw() {
156 DCHECK(CalledOnValidThread()); 156 DCHECK(CalledOnValidThread());
157 cc::OutputSurface::ReleaseGL(); 157 cc::OutputSurface::ReleaseGL();
158 } 158 }
159 159
160 scoped_ptr<cc::CompositorFrame> 160 scoped_ptr<cc::CompositorFrame>
161 SynchronousCompositorOutputSurface::DemandDrawHw( 161 SynchronousCompositorOutputSurface::DemandDrawHw(
162 gfx::Size surface_size, 162 gfx::Size surface_size,
163 const gfx::Transform& transform, 163 const gfx::Transform& transform,
164 gfx::Rect viewport, 164 gfx::Rect viewport,
165 gfx::Rect clip) { 165 gfx::Rect clip,
166 gfx::Rect external_tiling_rect,
167 gfx::Transform external_tiling_transform) {
166 DCHECK(CalledOnValidThread()); 168 DCHECK(CalledOnValidThread());
167 DCHECK(HasClient()); 169 DCHECK(HasClient());
168 DCHECK(context_provider_); 170 DCHECK(context_provider_);
169 171
170 surface_size_ = surface_size; 172 surface_size_ = surface_size;
171 InvokeComposite(transform, viewport, clip, true); 173 InvokeComposite(transform,
174 viewport,
175 clip,
176 external_tiling_rect,
177 external_tiling_transform,
178 true);
172 179
173 return frame_holder_.Pass(); 180 return frame_holder_.Pass();
174 } 181 }
175 182
176 scoped_ptr<cc::CompositorFrame> 183 scoped_ptr<cc::CompositorFrame>
177 SynchronousCompositorOutputSurface::DemandDrawSw(SkCanvas* canvas) { 184 SynchronousCompositorOutputSurface::DemandDrawSw(SkCanvas* canvas) {
178 DCHECK(CalledOnValidThread()); 185 DCHECK(CalledOnValidThread());
179 DCHECK(canvas); 186 DCHECK(canvas);
180 DCHECK(!current_sw_canvas_); 187 DCHECK(!current_sw_canvas_);
181 base::AutoReset<SkCanvas*> canvas_resetter(&current_sw_canvas_, canvas); 188 base::AutoReset<SkCanvas*> canvas_resetter(&current_sw_canvas_, canvas);
182 189
183 SkIRect canvas_clip; 190 SkIRect canvas_clip;
184 canvas->getClipDeviceBounds(&canvas_clip); 191 canvas->getClipDeviceBounds(&canvas_clip);
185 gfx::Rect clip = gfx::SkIRectToRect(canvas_clip); 192 gfx::Rect clip = gfx::SkIRectToRect(canvas_clip);
186 193
187 gfx::Transform transform(gfx::Transform::kSkipInitialization); 194 gfx::Transform transform(gfx::Transform::kSkipInitialization);
188 transform.matrix() = canvas->getTotalMatrix(); // Converts 3x3 matrix to 4x4. 195 transform.matrix() = canvas->getTotalMatrix(); // Converts 3x3 matrix to 4x4.
189 196
190 surface_size_ = gfx::Size(canvas->getDeviceSize().width(), 197 surface_size_ = gfx::Size(canvas->getDeviceSize().width(),
191 canvas->getDeviceSize().height()); 198 canvas->getDeviceSize().height());
192 199
193 InvokeComposite(transform, clip, clip, false); 200 // Resourceless software draw does not need viewport_for_tiling.
201 gfx::Rect empty;
202 InvokeComposite(transform, clip, clip, empty, gfx::Transform(), false);
194 203
195 return frame_holder_.Pass(); 204 return frame_holder_.Pass();
196 } 205 }
197 206
198 void SynchronousCompositorOutputSurface::InvokeComposite( 207 void SynchronousCompositorOutputSurface::InvokeComposite(
199 const gfx::Transform& transform, 208 const gfx::Transform& transform,
200 gfx::Rect viewport, 209 gfx::Rect viewport,
201 gfx::Rect clip, 210 gfx::Rect clip,
211 gfx::Rect external_tiling_rect,
212 gfx::Transform external_tiling_transform,
202 bool hardware_draw) { 213 bool hardware_draw) {
203 DCHECK(!invoking_composite_); 214 DCHECK(!invoking_composite_);
204 DCHECK(!frame_holder_.get()); 215 DCHECK(!frame_holder_.get());
205 base::AutoReset<bool> invoking_composite_resetter(&invoking_composite_, true); 216 base::AutoReset<bool> invoking_composite_resetter(&invoking_composite_, true);
206 217
207 gfx::Transform adjusted_transform = transform; 218 gfx::Transform adjusted_transform = transform;
208 AdjustTransform(&adjusted_transform, viewport); 219 AdjustTransform(&adjusted_transform, viewport);
209 SetExternalDrawConstraints( 220 SetExternalDrawConstraints(adjusted_transform,
210 adjusted_transform, viewport, clip, !hardware_draw); 221 viewport,
222 clip,
223 external_tiling_rect,
224 external_tiling_transform,
225 !hardware_draw);
211 SetNeedsRedrawRect(gfx::Rect(viewport.size())); 226 SetNeedsRedrawRect(gfx::Rect(viewport.size()));
212 client_->BeginFrame(cc::BeginFrameArgs::CreateForSynchronousCompositor()); 227 client_->BeginFrame(cc::BeginFrameArgs::CreateForSynchronousCompositor());
213 228
214 // After software draws (which might move the viewport arbitrarily), restore 229 // After software draws (which might move the viewport arbitrarily), restore
215 // the previous hardware viewport to allow CC's tile manager to prioritize 230 // the previous hardware viewport to allow CC's tile manager to prioritize
216 // properly. 231 // properly.
217 if (hardware_draw) { 232 if (hardware_draw) {
218 cached_hw_transform_ = adjusted_transform; 233 cached_hw_transform_ = adjusted_transform;
219 cached_hw_viewport_ = viewport; 234 cached_hw_viewport_ = viewport;
220 cached_hw_clip_ = clip; 235 cached_hw_clip_ = clip;
236 cached_hw_external_tiling_rect_ = external_tiling_rect;
237 cached_hw_external_tiling_transform_ = external_tiling_transform;
221 } else { 238 } else {
222 bool resourceless_software_draw = false; 239 bool resourceless_software_draw = false;
223 SetExternalDrawConstraints(cached_hw_transform_, 240 SetExternalDrawConstraints(cached_hw_transform_,
224 cached_hw_viewport_, 241 cached_hw_viewport_,
225 cached_hw_clip_, 242 cached_hw_clip_,
243 cached_hw_external_tiling_rect_,
244 cached_hw_external_tiling_transform_,
226 resourceless_software_draw); 245 resourceless_software_draw);
227 } 246 }
228 247
229 if (frame_holder_.get()) 248 if (frame_holder_.get())
230 client_->DidSwapBuffersComplete(); 249 client_->DidSwapBuffersComplete();
231 250
232 SynchronousCompositorOutputSurfaceDelegate* delegate = GetDelegate(); 251 SynchronousCompositorOutputSurfaceDelegate* delegate = GetDelegate();
233 if (delegate) 252 if (delegate)
234 delegate->SetContinuousInvalidate(needs_begin_frame_); 253 delegate->SetContinuousInvalidate(needs_begin_frame_);
235 } 254 }
(...skipping 19 matching lines...) Expand all
255 bool SynchronousCompositorOutputSurface::CalledOnValidThread() const { 274 bool SynchronousCompositorOutputSurface::CalledOnValidThread() const {
256 return BrowserThread::CurrentlyOn(BrowserThread::UI); 275 return BrowserThread::CurrentlyOn(BrowserThread::UI);
257 } 276 }
258 277
259 SynchronousCompositorOutputSurfaceDelegate* 278 SynchronousCompositorOutputSurfaceDelegate*
260 SynchronousCompositorOutputSurface::GetDelegate() { 279 SynchronousCompositorOutputSurface::GetDelegate() {
261 return SynchronousCompositorImpl::FromRoutingID(routing_id_); 280 return SynchronousCompositorImpl::FromRoutingID(routing_id_);
262 } 281 }
263 282
264 } // namespace content 283 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698