| Index: content/renderer/android/synchronous_compositor_output_surface.cc
|
| diff --git a/content/renderer/android/synchronous_compositor_output_surface.cc b/content/renderer/android/synchronous_compositor_output_surface.cc
|
| index b572e28a791a22cfb77c494af494d94c07620008..7a43135273f9577ad6c779062ceb235b3bddb77e 100644
|
| --- a/content/renderer/android/synchronous_compositor_output_surface.cc
|
| +++ b/content/renderer/android/synchronous_compositor_output_surface.cc
|
| @@ -71,7 +71,6 @@ SynchronousCompositorOutputSurface::SynchronousCompositorOutputSurface(
|
| registry_(registry),
|
| registered_(false),
|
| sync_client_(nullptr),
|
| - next_hardware_draw_needs_damage_(false),
|
| current_sw_canvas_(nullptr),
|
| memory_policy_(0u),
|
| frame_swap_message_queue_(frame_swap_message_queue) {
|
| @@ -144,8 +143,9 @@ SynchronousCompositorOutputSurface::DemandDrawHw(
|
| DCHECK(context_provider_.get());
|
|
|
| surface_size_ = surface_size;
|
| - InvokeComposite(transform, viewport, clip, viewport_rect_for_tile_priority,
|
| - transform_for_tile_priority, true);
|
| + client_->SetExternalDrawConstraints(viewport_rect_for_tile_priority,
|
| + transform_for_tile_priority);
|
| + InvokeComposite(transform, viewport, clip, false);
|
|
|
| return frame_holder_.Pass();
|
| }
|
| @@ -167,16 +167,7 @@ SynchronousCompositorOutputSurface::DemandDrawSw(SkCanvas* canvas) {
|
|
|
| surface_size_ = gfx::Size(canvas->getDeviceSize().width(),
|
| canvas->getDeviceSize().height());
|
| -
|
| - // Pass in the cached hw viewport and transform for tile priority to avoid
|
| - // tile thrashing when the WebView is alternating between hardware and
|
| - // software draws.
|
| - InvokeComposite(transform,
|
| - clip,
|
| - clip,
|
| - cached_hw_viewport_rect_for_tile_priority_,
|
| - cached_hw_transform_for_tile_priority_,
|
| - false);
|
| + InvokeComposite(transform, clip, clip, true);
|
|
|
| return frame_holder_.Pass();
|
| }
|
| @@ -185,45 +176,20 @@ void SynchronousCompositorOutputSurface::InvokeComposite(
|
| const gfx::Transform& transform,
|
| gfx::Rect viewport,
|
| gfx::Rect clip,
|
| - gfx::Rect viewport_rect_for_tile_priority,
|
| - gfx::Transform transform_for_tile_priority,
|
| - bool hardware_draw) {
|
| + bool software_draw) {
|
| DCHECK(!frame_holder_.get());
|
|
|
| gfx::Transform adjusted_transform = transform;
|
| adjusted_transform.matrix().postTranslate(-viewport.x(), -viewport.y(), 0);
|
| - SetExternalDrawConstraints(adjusted_transform, viewport, clip,
|
| - viewport_rect_for_tile_priority,
|
| - transform_for_tile_priority, !hardware_draw);
|
| - if (!hardware_draw || next_hardware_draw_needs_damage_) {
|
| - next_hardware_draw_needs_damage_ = false;
|
| + if (software_draw) {
|
| SetNeedsRedrawRect(gfx::Rect(viewport.size()));
|
| }
|
|
|
| - client_->OnDraw();
|
| -
|
| - // After software draws (which might move the viewport arbitrarily), restore
|
| - // the previous hardware viewport to allow CC's tile manager to prioritize
|
| - // properly.
|
| - if (hardware_draw) {
|
| - cached_hw_transform_ = adjusted_transform;
|
| - cached_hw_viewport_ = viewport;
|
| - cached_hw_clip_ = clip;
|
| - cached_hw_viewport_rect_for_tile_priority_ =
|
| - viewport_rect_for_tile_priority;
|
| - cached_hw_transform_for_tile_priority_ = transform_for_tile_priority;
|
| - } else {
|
| - bool resourceless_software_draw = false;
|
| - SetExternalDrawConstraints(cached_hw_transform_,
|
| - cached_hw_viewport_,
|
| - cached_hw_clip_,
|
| - cached_hw_viewport_rect_for_tile_priority_,
|
| - cached_hw_transform_for_tile_priority_,
|
| - resourceless_software_draw);
|
| - // This draw may have reset all damage, which would lead to subsequent
|
| - // incorrect hardware draw, so explicitly set damage for next hardware
|
| - // draw as well.
|
| - next_hardware_draw_needs_damage_ = true;
|
| + client_->OnDraw(adjusted_transform, viewport, clip, software_draw);
|
| +
|
| + // TODO(boliu): move this comment.
|
| + if (software_draw) {
|
| + // next_hardware_draw_needs_damage_ = true;
|
| }
|
|
|
| if (frame_holder_.get())
|
|
|