summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorboliu <boliu@chromium.org>2015-06-29 14:08:12 -0700
committerCommit bot <commit-bot@chromium.org>2015-06-29 21:08:43 +0000
commit7441045adbfba646724716930c674ea5d408c230 (patch)
treeeb8630608a00937e2c3bc567d696613c96339836
parentc1edbf2a3303e63e940298dea2c2a9a68e4f0dda (diff)
downloadchromium_src-7441045adbfba646724716930c674ea5d408c230.zip
chromium_src-7441045adbfba646724716930c674ea5d408c230.tar.gz
chromium_src-7441045adbfba646724716930c674ea5d408c230.tar.bz2
aw: Make is_layer match offscreen_pre_raster
When in layer, use the webview size to make tiling decisions (memory and interect rect). This mostly matches offscreen_pre_raster behavior. BUG=505133 Review URL: https://codereview.chromium.org/1221533002 Cr-Commit-Position: refs/heads/master@{#336638}
-rw-r--r--android_webview/browser/browser_view_renderer.cc19
-rw-r--r--android_webview/browser/browser_view_renderer_unittest.cc4
-rw-r--r--android_webview/browser/child_frame.cc8
-rw-r--r--android_webview/browser/child_frame.h4
-rw-r--r--android_webview/browser/hardware_renderer.cc2
-rw-r--r--android_webview/browser/parent_compositor_draw_constraints.cc20
-rw-r--r--android_webview/browser/parent_compositor_draw_constraints.h4
7 files changed, 28 insertions, 33 deletions
diff --git a/android_webview/browser/browser_view_renderer.cc b/android_webview/browser/browser_view_renderer.cc
index 61a9192..7d15b89 100644
--- a/android_webview/browser/browser_view_renderer.cc
+++ b/android_webview/browser/browser_view_renderer.cc
@@ -170,9 +170,12 @@ void BrowserViewRenderer::UpdateMemoryPolicy() {
if (g_memory_override_in_bytes) {
bytes_limit = static_cast<size_t>(g_memory_override_in_bytes);
} else {
- gfx::Rect interest_rect = offscreen_pre_raster_
- ? gfx::Rect(size_)
- : last_on_draw_global_visible_rect_;
+ ParentCompositorDrawConstraints parent_draw_constraints =
+ shared_renderer_state_.GetParentDrawConstraintsOnUI();
+ gfx::Rect interest_rect =
+ offscreen_pre_raster_ || parent_draw_constraints.is_layer
+ ? gfx::Rect(size_)
+ : last_on_draw_global_visible_rect_;
size_t width = interest_rect.width();
size_t height = interest_rect.height();
bytes_limit = kMemoryMultiplier * kBytesPerPixel * width * height;
@@ -240,12 +243,8 @@ bool BrowserViewRenderer::CompositeHw() {
gfx::Rect viewport_rect_for_tile_priority;
// Leave viewport_rect_for_tile_priority empty if offscreen_pre_raster_ is on.
- if (!offscreen_pre_raster_) {
- if (parent_draw_constraints.is_layer) {
- viewport_rect_for_tile_priority = parent_draw_constraints.surface_rect;
- } else {
- viewport_rect_for_tile_priority = last_on_draw_global_visible_rect_;
- }
+ if (!offscreen_pre_raster_ && !parent_draw_constraints.is_layer) {
+ viewport_rect_for_tile_priority = last_on_draw_global_visible_rect_;
}
scoped_ptr<cc::CompositorFrame> frame =
@@ -262,7 +261,7 @@ bool BrowserViewRenderer::CompositeHw() {
}
scoped_ptr<ChildFrame> child_frame = make_scoped_ptr(
- new ChildFrame(frame.Pass(), viewport_rect_for_tile_priority,
+ new ChildFrame(frame.Pass(), viewport_rect_for_tile_priority.IsEmpty(),
transform_for_tile_priority, offscreen_pre_raster_,
parent_draw_constraints.is_layer));
diff --git a/android_webview/browser/browser_view_renderer_unittest.cc b/android_webview/browser/browser_view_renderer_unittest.cc
index 39b83a9..9e2289c 100644
--- a/android_webview/browser/browser_view_renderer_unittest.cc
+++ b/android_webview/browser/browser_view_renderer_unittest.cc
@@ -57,7 +57,7 @@ class TestAnimateInAndOutOfScreen : public RenderingTest {
void StartTest() override {
new_constraints_ = ParentCompositorDrawConstraints(
- false, gfx::Transform(), gfx::Rect(window_->surface_size()));
+ false, gfx::Transform(), window_->surface_size().IsEmpty());
new_constraints_.transform.Scale(2.0, 2.0);
browser_view_renderer_->PostInvalidate();
}
@@ -113,7 +113,7 @@ class TestAnimateInAndOutOfScreen : public RenderingTest {
return false;
return !constraints1.is_layer ||
- constraints1.surface_rect == constraints2.surface_rect;
+ constraints1.surface_rect_empty == constraints2.surface_rect_empty;
}
void ParentDrawConstraintsUpdated(
diff --git a/android_webview/browser/child_frame.cc b/android_webview/browser/child_frame.cc
index f516edc..8bb5de4 100644
--- a/android_webview/browser/child_frame.cc
+++ b/android_webview/browser/child_frame.cc
@@ -9,16 +9,16 @@
namespace android_webview {
ChildFrame::ChildFrame(scoped_ptr<cc::CompositorFrame> frame,
- const gfx::Rect& viewport_rect_for_tile_priority,
+ bool viewport_rect_for_tile_priority_empty,
const gfx::Transform& transform_for_tile_priority,
bool offscreen_pre_raster,
bool is_layer)
: frame(frame.Pass()),
- viewport_rect_for_tile_priority(viewport_rect_for_tile_priority),
+ viewport_rect_for_tile_priority_empty(
+ viewport_rect_for_tile_priority_empty),
transform_for_tile_priority(transform_for_tile_priority),
offscreen_pre_raster(offscreen_pre_raster),
- is_layer(is_layer) {
-}
+ is_layer(is_layer) {}
ChildFrame::~ChildFrame() {
}
diff --git a/android_webview/browser/child_frame.h b/android_webview/browser/child_frame.h
index cb4f7d4..edcf6b4 100644
--- a/android_webview/browser/child_frame.h
+++ b/android_webview/browser/child_frame.h
@@ -19,14 +19,14 @@ namespace android_webview {
class ChildFrame {
public:
ChildFrame(scoped_ptr<cc::CompositorFrame> frame,
- const gfx::Rect& viewport_rect_for_tile_priority,
+ bool viewport_rect_for_tile_priority_empty,
const gfx::Transform& transform_for_tile_priority,
bool offscreen_pre_raster,
bool is_layer);
~ChildFrame();
scoped_ptr<cc::CompositorFrame> frame;
- const gfx::Rect viewport_rect_for_tile_priority;
+ const bool viewport_rect_for_tile_priority_empty;
const gfx::Transform transform_for_tile_priority;
const bool offscreen_pre_raster;
const bool is_layer;
diff --git a/android_webview/browser/hardware_renderer.cc b/android_webview/browser/hardware_renderer.cc
index 224630d..8323ca4 100644
--- a/android_webview/browser/hardware_renderer.cc
+++ b/android_webview/browser/hardware_renderer.cc
@@ -129,7 +129,7 @@ void HardwareRenderer::DrawGL(bool stencil_enabled,
// because there is no onDraw during a Render Thread animation, and child
// compositor might not have the tiles rasterized as the animation goes on.
ParentCompositorDrawConstraints draw_constraints(
- draw_info->is_layer, transform, gfx::Rect(viewport));
+ draw_info->is_layer, transform, viewport.IsEmpty());
if (!child_frame_.get() || draw_constraints.NeedUpdate(*child_frame_)) {
shared_renderer_state_->PostExternalDrawConstraintsToChildCompositorOnRT(
draw_constraints);
diff --git a/android_webview/browser/parent_compositor_draw_constraints.cc b/android_webview/browser/parent_compositor_draw_constraints.cc
index 8bd0ccd..7a82218 100644
--- a/android_webview/browser/parent_compositor_draw_constraints.cc
+++ b/android_webview/browser/parent_compositor_draw_constraints.cc
@@ -9,15 +9,16 @@
namespace android_webview {
ParentCompositorDrawConstraints::ParentCompositorDrawConstraints()
- : is_layer(false) {
+ : is_layer(false), surface_rect_empty(false) {
}
ParentCompositorDrawConstraints::ParentCompositorDrawConstraints(
bool is_layer,
const gfx::Transform& transform,
- const gfx::Rect& surface_rect)
- : is_layer(is_layer), transform(transform), surface_rect(surface_rect) {
-}
+ bool surface_rect_empty)
+ : is_layer(is_layer),
+ transform(transform),
+ surface_rect_empty(surface_rect_empty) {}
bool ParentCompositorDrawConstraints::NeedUpdate(
const ChildFrame& frame) const {
@@ -27,16 +28,11 @@ bool ParentCompositorDrawConstraints::NeedUpdate(
}
// Viewport for tile priority does not depend on surface rect in this case.
- if (frame.offscreen_pre_raster)
+ if (frame.offscreen_pre_raster || is_layer)
return false;
- if (is_layer) {
- return surface_rect != frame.viewport_rect_for_tile_priority;
- } else {
- // Workaround for corner case. See crbug.com/417479.
- return frame.viewport_rect_for_tile_priority.IsEmpty() &&
- !surface_rect.IsEmpty();
- }
+ // Workaround for corner case. See crbug.com/417479.
+ return frame.viewport_rect_for_tile_priority_empty && !surface_rect_empty;
}
} // namespace webview
diff --git a/android_webview/browser/parent_compositor_draw_constraints.h b/android_webview/browser/parent_compositor_draw_constraints.h
index c8e535c..06eeb03 100644
--- a/android_webview/browser/parent_compositor_draw_constraints.h
+++ b/android_webview/browser/parent_compositor_draw_constraints.h
@@ -15,12 +15,12 @@ class ChildFrame;
struct ParentCompositorDrawConstraints {
bool is_layer;
gfx::Transform transform;
- gfx::Rect surface_rect;
+ bool surface_rect_empty;
ParentCompositorDrawConstraints();
ParentCompositorDrawConstraints(bool is_layer,
const gfx::Transform& transform,
- const gfx::Rect& surface_rect);
+ bool surface_rect_empty);
bool NeedUpdate(const ChildFrame& frame) const;
};