| // Copyright 2014 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "android_webview/browser/parent_compositor_draw_constraints.h" |
| |
| #include "android_webview/browser/child_frame.h" |
| |
| namespace android_webview { |
| |
| ParentCompositorDrawConstraints::ParentCompositorDrawConstraints() |
| : is_layer(false), surface_rect_empty(true) {} |
| |
| ParentCompositorDrawConstraints::ParentCompositorDrawConstraints( |
| bool is_layer, |
| const gfx::Transform& transform, |
| bool surface_rect_empty) |
| : is_layer(is_layer), |
| transform(transform), |
| surface_rect_empty(surface_rect_empty) {} |
| |
| bool ParentCompositorDrawConstraints::NeedUpdate( |
| const ChildFrame& frame) const { |
| if (is_layer != frame.is_layer || |
| transform != frame.transform_for_tile_priority) { |
| return true; |
| } |
| |
| // Viewport for tile priority does not depend on surface rect in this case. |
| if (frame.offscreen_pre_raster || is_layer) |
| return false; |
| |
| // Workaround for corner case. See crbug.com/417479. |
| return frame.viewport_rect_for_tile_priority_empty && !surface_rect_empty; |
| } |
| |
| bool ParentCompositorDrawConstraints::operator==( |
| const ParentCompositorDrawConstraints& other) const { |
| return is_layer == other.is_layer && transform == other.transform && |
| surface_rect_empty == other.surface_rect_empty; |
| } |
| |
| } // namespace android_webview |