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

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: better fix Created 6 years, 4 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 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
158 void SynchronousCompositorOutputSurface::ReleaseHwDraw() { 158 void SynchronousCompositorOutputSurface::ReleaseHwDraw() {
159 DCHECK(CalledOnValidThread()); 159 DCHECK(CalledOnValidThread());
160 cc::OutputSurface::ReleaseGL(); 160 cc::OutputSurface::ReleaseGL();
161 } 161 }
162 162
163 scoped_ptr<cc::CompositorFrame> 163 scoped_ptr<cc::CompositorFrame>
164 SynchronousCompositorOutputSurface::DemandDrawHw( 164 SynchronousCompositorOutputSurface::DemandDrawHw(
165 gfx::Size surface_size, 165 gfx::Size surface_size,
166 const gfx::Transform& transform, 166 const gfx::Transform& transform,
167 gfx::Rect viewport, 167 gfx::Rect viewport,
168 gfx::Rect clip) { 168 gfx::Rect clip,
169 gfx::Rect viewport_rect_for_tile_priority,
170 const gfx::Transform& transform_for_tile_priority) {
169 DCHECK(CalledOnValidThread()); 171 DCHECK(CalledOnValidThread());
170 DCHECK(HasClient()); 172 DCHECK(HasClient());
171 DCHECK(context_provider_); 173 DCHECK(context_provider_);
172 174
173 surface_size_ = surface_size; 175 surface_size_ = surface_size;
174 InvokeComposite(transform, viewport, clip, true); 176 InvokeComposite(transform,
177 viewport,
178 clip,
179 viewport_rect_for_tile_priority,
180 transform_for_tile_priority,
181 true);
175 182
176 return frame_holder_.Pass(); 183 return frame_holder_.Pass();
177 } 184 }
178 185
179 scoped_ptr<cc::CompositorFrame> 186 scoped_ptr<cc::CompositorFrame>
180 SynchronousCompositorOutputSurface::DemandDrawSw(SkCanvas* canvas) { 187 SynchronousCompositorOutputSurface::DemandDrawSw(SkCanvas* canvas) {
181 DCHECK(CalledOnValidThread()); 188 DCHECK(CalledOnValidThread());
182 DCHECK(canvas); 189 DCHECK(canvas);
183 DCHECK(!current_sw_canvas_); 190 DCHECK(!current_sw_canvas_);
184 base::AutoReset<SkCanvas*> canvas_resetter(&current_sw_canvas_, canvas); 191 base::AutoReset<SkCanvas*> canvas_resetter(&current_sw_canvas_, canvas);
185 192
186 SkIRect canvas_clip; 193 SkIRect canvas_clip;
187 canvas->getClipDeviceBounds(&canvas_clip); 194 canvas->getClipDeviceBounds(&canvas_clip);
188 gfx::Rect clip = gfx::SkIRectToRect(canvas_clip); 195 gfx::Rect clip = gfx::SkIRectToRect(canvas_clip);
189 196
190 gfx::Transform transform(gfx::Transform::kSkipInitialization); 197 gfx::Transform transform(gfx::Transform::kSkipInitialization);
191 transform.matrix() = canvas->getTotalMatrix(); // Converts 3x3 matrix to 4x4. 198 transform.matrix() = canvas->getTotalMatrix(); // Converts 3x3 matrix to 4x4.
192 199
193 surface_size_ = gfx::Size(canvas->getDeviceSize().width(), 200 surface_size_ = gfx::Size(canvas->getDeviceSize().width(),
194 canvas->getDeviceSize().height()); 201 canvas->getDeviceSize().height());
195 202
196 InvokeComposite(transform, clip, clip, false); 203 // Resourceless software draw does not need viewport_for_tiling.
204 gfx::Rect empty;
205 InvokeComposite(transform, clip, clip, empty, gfx::Transform(), false);
197 206
198 return frame_holder_.Pass(); 207 return frame_holder_.Pass();
199 } 208 }
200 209
201 void SynchronousCompositorOutputSurface::InvokeComposite( 210 void SynchronousCompositorOutputSurface::InvokeComposite(
202 const gfx::Transform& transform, 211 const gfx::Transform& transform,
203 gfx::Rect viewport, 212 gfx::Rect viewport,
204 gfx::Rect clip, 213 gfx::Rect clip,
214 gfx::Rect viewport_rect_for_tile_priority,
215 gfx::Transform transform_for_tile_priority,
205 bool hardware_draw) { 216 bool hardware_draw) {
206 DCHECK(!invoking_composite_); 217 DCHECK(!invoking_composite_);
207 DCHECK(!frame_holder_.get()); 218 DCHECK(!frame_holder_.get());
208 base::AutoReset<bool> invoking_composite_resetter(&invoking_composite_, true); 219 base::AutoReset<bool> invoking_composite_resetter(&invoking_composite_, true);
209 220
210 gfx::Transform adjusted_transform = transform; 221 gfx::Transform adjusted_transform = transform;
211 AdjustTransform(&adjusted_transform, viewport); 222 AdjustTransform(&adjusted_transform, viewport);
212 SetExternalDrawConstraints( 223 SetExternalDrawConstraints(adjusted_transform,
213 adjusted_transform, viewport, clip, !hardware_draw); 224 viewport,
225 clip,
226 viewport_rect_for_tile_priority,
227 transform_for_tile_priority,
228 !hardware_draw);
214 SetNeedsRedrawRect(gfx::Rect(viewport.size())); 229 SetNeedsRedrawRect(gfx::Rect(viewport.size()));
215 client_->BeginFrame(cc::BeginFrameArgs::CreateForSynchronousCompositor()); 230 client_->BeginFrame(cc::BeginFrameArgs::CreateForSynchronousCompositor());
216 231
217 // After software draws (which might move the viewport arbitrarily), restore 232 // After software draws (which might move the viewport arbitrarily), restore
218 // the previous hardware viewport to allow CC's tile manager to prioritize 233 // the previous hardware viewport to allow CC's tile manager to prioritize
219 // properly. 234 // properly.
220 if (hardware_draw) { 235 if (hardware_draw) {
221 cached_hw_transform_ = adjusted_transform; 236 cached_hw_transform_ = adjusted_transform;
222 cached_hw_viewport_ = viewport; 237 cached_hw_viewport_ = viewport;
223 cached_hw_clip_ = clip; 238 cached_hw_clip_ = clip;
239 cached_hw_viewport_rect_for_tile_priority_ =
240 viewport_rect_for_tile_priority;
241 cached_hw_transform_for_tile_priority_ = transform_for_tile_priority;
224 } else { 242 } else {
225 bool resourceless_software_draw = false; 243 bool resourceless_software_draw = false;
226 SetExternalDrawConstraints(cached_hw_transform_, 244 SetExternalDrawConstraints(cached_hw_transform_,
227 cached_hw_viewport_, 245 cached_hw_viewport_,
228 cached_hw_clip_, 246 cached_hw_clip_,
247 cached_hw_viewport_rect_for_tile_priority_,
248 cached_hw_transform_for_tile_priority_,
229 resourceless_software_draw); 249 resourceless_software_draw);
230 } 250 }
231 251
232 if (frame_holder_.get()) 252 if (frame_holder_.get())
233 client_->DidSwapBuffersComplete(); 253 client_->DidSwapBuffersComplete();
234 254
235 SynchronousCompositorOutputSurfaceDelegate* delegate = GetDelegate(); 255 SynchronousCompositorOutputSurfaceDelegate* delegate = GetDelegate();
236 if (delegate) 256 if (delegate)
237 delegate->SetContinuousInvalidate(needs_begin_frame_); 257 delegate->SetContinuousInvalidate(needs_begin_frame_);
238 } 258 }
(...skipping 27 matching lines...) Expand all
266 bool SynchronousCompositorOutputSurface::CalledOnValidThread() const { 286 bool SynchronousCompositorOutputSurface::CalledOnValidThread() const {
267 return BrowserThread::CurrentlyOn(BrowserThread::UI); 287 return BrowserThread::CurrentlyOn(BrowserThread::UI);
268 } 288 }
269 289
270 SynchronousCompositorOutputSurfaceDelegate* 290 SynchronousCompositorOutputSurfaceDelegate*
271 SynchronousCompositorOutputSurface::GetDelegate() { 291 SynchronousCompositorOutputSurface::GetDelegate() {
272 return SynchronousCompositorImpl::FromRoutingID(routing_id_); 292 return SynchronousCompositorImpl::FromRoutingID(routing_id_);
273 } 293 }
274 294
275 } // namespace content 295 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698