diff options
author | leandrogracia@chromium.org <leandrogracia@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-12-19 02:25:06 +0000 |
---|---|---|
committer | leandrogracia@chromium.org <leandrogracia@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-12-19 02:25:06 +0000 |
commit | fe67f5b4728a427b07702a043523acdd71eaf562 (patch) | |
tree | 68e5830bccf505895fde86903ed168130f206f22 /android_webview | |
parent | 48bd56a2e1d715c94570c1c44ae1fd1e8778c837 (diff) | |
download | chromium_src-fe67f5b4728a427b07702a043523acdd71eaf562.zip chromium_src-fe67f5b4728a427b07702a043523acdd71eaf562.tar.gz chromium_src-fe67f5b4728a427b07702a043523acdd71eaf562.tar.bz2 |
Apply scroll correction to HW draw path.
NOTRY=true
BUG=161409
Review URL: https://codereview.chromium.org/11635010
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@173838 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'android_webview')
-rw-r--r-- | android_webview/java/src/org/chromium/android_webview/AwContents.java | 5 | ||||
-rw-r--r-- | android_webview/native/aw_contents.cc | 17 | ||||
-rw-r--r-- | android_webview/native/aw_contents.h | 3 | ||||
-rw-r--r-- | android_webview/native/aw_http_auth_handler.cc | 1 |
4 files changed, 20 insertions, 6 deletions
diff --git a/android_webview/java/src/org/chromium/android_webview/AwContents.java b/android_webview/java/src/org/chromium/android_webview/AwContents.java index bac6358..2e83ca6 100644 --- a/android_webview/java/src/org/chromium/android_webview/AwContents.java +++ b/android_webview/java/src/org/chromium/android_webview/AwContents.java @@ -341,8 +341,8 @@ public class AwContents { } public boolean onPrepareDrawGL(Canvas canvas) { - // TODO(joth): Ensure the HW path is setup and read any required params out of canvas. - Log.e(TAG, "Not implemented: AwContents.onPrepareDrawGL()"); + nativeSetScrollForHWFrame(mNativeAwContents, + mContainerView.getScrollX(), mContainerView.getScrollY()); // returning false will cause a fallback to SW path. return true; @@ -938,6 +938,7 @@ public class AwContents { private native void nativeSetInterceptNavigationDelegate(int nativeAwContents, InterceptNavigationDelegate navigationInterceptionDelegate); + private native void nativeSetScrollForHWFrame(int nativeAwContents, int scrollX, int scrollY); private native int nativeFindAllSync(int nativeAwContents, String searchString); private native void nativeFindAllAsync(int nativeAwContents, String searchString); private native void nativeFindNext(int nativeAwContents, boolean forward); diff --git a/android_webview/native/aw_contents.cc b/android_webview/native/aw_contents.cc index 13a74b9..c3abd81 100644 --- a/android_webview/native/aw_contents.cc +++ b/android_webview/native/aw_contents.cc @@ -142,6 +142,7 @@ AwContents::AwContents(JNIEnv* env, view_visible_(false), compositor_visible_(false), is_composite_pending_(false), + last_scroll_x_(0), last_scroll_y_(0), last_frame_context_(NULL) { android_webview::AwBrowserDependencyFactory* dependency_factory = android_webview::AwBrowserDependencyFactory::GetInstance(); @@ -292,6 +293,7 @@ void AwContents::DrawGL(AwDrawGLInfo* draw_info) { last_frame_context_ = current_context; } + gfx::Transform transform; compositor_->SetWindowBounds(gfx::Size(draw_info->width, draw_info->height)); if (draw_info->is_layer) { @@ -304,7 +306,6 @@ void AwContents::DrawGL(AwDrawGLInfo* draw_info) { scissor_clip_layer_->setPosition(gfx::PointF()); scissor_clip_layer_->setBounds(gfx::Size()); scissor_clip_layer_->setSublayerTransform(gfx::Transform()); - transform_layer_->setTransform(gfx::Transform()); } else { compositor_->SetHasTransparentBackground(true); @@ -325,13 +326,15 @@ void AwContents::DrawGL(AwDrawGLInfo* draw_info) { undo_clip_position.Translate(-clip_rect.x(), -clip_rect.y()); scissor_clip_layer_->setSublayerTransform(undo_clip_position); - gfx::Transform transform; transform.matrix().setColMajorf(draw_info->transform); - transform_layer_->setTransform(transform); - view_clip_layer_->setMasksToBounds(true); } + // The scrolling values of the Android Framework affect the transformation + // matrix. This needs to be undone to let the compositor handle scrolling. + transform.Translate(last_scroll_x_, last_scroll_y_); + transform_layer_->setTransform(transform); + compositor_->Composite(); is_composite_pending_ = false; @@ -773,6 +776,12 @@ jboolean AwContents::RestoreFromOpaqueState( return RestoreFromPickle(&iterator, web_contents_.get()); } +void AwContents::SetScrollForHWFrame(JNIEnv* env, jobject obj, + int scroll_x, int scroll_y) { + last_scroll_x_ = scroll_x; + last_scroll_y_ = scroll_y; +} + void AwContents::SetPendingWebContentsForPopup( scoped_ptr<content::WebContents> pending) { if (pending_contents_.get()) { diff --git a/android_webview/native/aw_contents.h b/android_webview/native/aw_contents.h index 4f61adf..cc0e51a 100644 --- a/android_webview/native/aw_contents.h +++ b/android_webview/native/aw_contents.h @@ -97,6 +97,8 @@ class AwContents : public FindHelper::Listener, base::android::ScopedJavaLocalRef<jbyteArray> GetOpaqueState( JNIEnv* env, jobject obj); jboolean RestoreFromOpaqueState(JNIEnv* env, jobject obj, jbyteArray state); + void SetScrollForHWFrame(JNIEnv* env, jobject obj, + int scroll_x, int scroll_y); // Find-in-page API and related methods. jint FindAllSync(JNIEnv* env, jobject obj, jstring search_string); @@ -142,6 +144,7 @@ class AwContents : public FindHelper::Listener, bool view_visible_; bool compositor_visible_; bool is_composite_pending_; + int last_scroll_x_, last_scroll_y_; // Used only for detecting Android View System context changes. // Not to be used between draw calls. diff --git a/android_webview/native/aw_http_auth_handler.cc b/android_webview/native/aw_http_auth_handler.cc index fa65ebd..e89fcc8 100644 --- a/android_webview/native/aw_http_auth_handler.cc +++ b/android_webview/native/aw_http_auth_handler.cc @@ -27,6 +27,7 @@ AwHttpAuthHandler::AwHttpAuthHandler( } AwHttpAuthHandler:: ~AwHttpAuthHandler() { + // TODO(joth): tell java counterpart, so it can null its native back-pointer. } void AwHttpAuthHandler::Proceed(JNIEnv* env, |