summaryrefslogtreecommitdiffstats
path: root/android_webview/browser
diff options
context:
space:
mode:
authorboliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-04-08 19:46:20 +0000
committerboliu@chromium.org <boliu@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2014-04-08 19:46:20 +0000
commitded749180ddebc456e16d5d1906bf461997d8752 (patch)
tree3c65678edd722cc6534aed2652f2e33d8c4480f6 /android_webview/browser
parent9fe7ff4c7187610a737a1ec2fa5fb21028ad4292 (diff)
downloadchromium_src-ded749180ddebc456e16d5d1906bf461997d8752.zip
chromium_src-ded749180ddebc456e16d5d1906bf461997d8752.tar.gz
chromium_src-ded749180ddebc456e16d5d1906bf461997d8752.tar.bz2
aw: Use correct viewport for hardware draw
Use the webview size, the layer size, and the current matrix to calculate the current "visible rect". This is the the webview rect transformed by the matrix and then intersected with the viewport. This will prevent tile thrashing when the clip is changing wildly. BUG= Review URL: https://codereview.chromium.org/227743011 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@262481 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'android_webview/browser')
-rw-r--r--android_webview/browser/browser_view_renderer.cc2
-rw-r--r--android_webview/browser/hardware_renderer.cc11
-rw-r--r--android_webview/browser/shared_renderer_state.cc2
-rw-r--r--android_webview/browser/shared_renderer_state.h2
4 files changed, 15 insertions, 2 deletions
diff --git a/android_webview/browser/browser_view_renderer.cc b/android_webview/browser/browser_view_renderer.cc
index c3d9ecb..937ed13 100644
--- a/android_webview/browser/browser_view_renderer.cc
+++ b/android_webview/browser/browser_view_renderer.cc
@@ -99,6 +99,8 @@ bool BrowserViewRenderer::OnDraw(jobject java_canvas,
draw_gl_input_.frame_id++;
draw_gl_input_.scroll_offset = scroll;
draw_gl_input_.global_visible_rect = global_visible_rect;
+ draw_gl_input_.width = width_;
+ draw_gl_input_.height = height_;
if (clear_view_)
return false;
if (is_hardware_canvas && attached_to_window_) {
diff --git a/android_webview/browser/hardware_renderer.cc b/android_webview/browser/hardware_renderer.cc
index 59356db..a45da7f 100644
--- a/android_webview/browser/hardware_renderer.cc
+++ b/android_webview/browser/hardware_renderer.cc
@@ -15,6 +15,8 @@
#include "content/public/browser/browser_thread.h"
#include "content/public/common/content_switches.h"
#include "gpu/command_buffer/service/shader_translator_cache.h"
+#include "ui/gfx/geometry/rect_conversions.h"
+#include "ui/gfx/geometry/rect_f.h"
#include "ui/gfx/transform.h"
using content::BrowserThread;
@@ -114,11 +116,18 @@ bool HardwareRenderer::DrawGL(AwDrawGLInfo* draw_info, DrawGLResult* result) {
draw_info->clip_right - draw_info->clip_left,
draw_info->clip_bottom - draw_info->clip_top);
+ gfx::Rect viewport(draw_info->width, draw_info->height);
+ if (!draw_info->is_layer) {
+ gfx::RectF view_rect(input.width, input.height);
+ transform.TransformRect(&view_rect);
+ viewport.Intersect(gfx::ToEnclosingRect(view_rect));
+ }
+
bool did_draw = shared_renderer_state_->GetCompositor()->
DemandDrawHw(
gfx::Size(draw_info->width, draw_info->height),
transform,
- clip_rect, // viewport
+ viewport,
clip_rect,
state_restore.stencil_enabled());
gl_surface_->ResetBackingFrameBufferObject();
diff --git a/android_webview/browser/shared_renderer_state.cc b/android_webview/browser/shared_renderer_state.cc
index ba198a3..fb17afb 100644
--- a/android_webview/browser/shared_renderer_state.cc
+++ b/android_webview/browser/shared_renderer_state.cc
@@ -10,7 +10,7 @@
namespace android_webview {
-DrawGLInput::DrawGLInput() : frame_id(0) {}
+DrawGLInput::DrawGLInput() : frame_id(0), width(0), height(0) {}
DrawGLResult::DrawGLResult() : frame_id(0), clip_contains_visible_rect(false) {}
diff --git a/android_webview/browser/shared_renderer_state.h b/android_webview/browser/shared_renderer_state.h
index c85552d..a7ec60c 100644
--- a/android_webview/browser/shared_renderer_state.h
+++ b/android_webview/browser/shared_renderer_state.h
@@ -19,6 +19,8 @@ struct DrawGLInput {
unsigned int frame_id;
gfx::Rect global_visible_rect;
gfx::Vector2d scroll_offset;
+ int width;
+ int height;
DrawGLInput();
};