From bbae2c0c75897a4733394b7134db955e694ae591 Mon Sep 17 00:00:00 2001 From: "dtrainor@chromium.org" Date: Tue, 23 Oct 2012 00:27:19 +0000 Subject: Enable texture readback support for Android - Adjust the GLHelper to include methods we can use for our texture readback support. - Tie it into the RenderWidgetHostViewAndroid/ContentViewCore/Compositor. BUG= Review URL: https://chromiumcodereview.appspot.com/11234008 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@163455 0039d316-1c4b-4281-b951-d872f2087c98 --- .../org/chromium/content/browser/ContentView.java | 6 +----- .../chromium/content/browser/ContentViewCore.java | 23 ++++++++++++++++++---- content/public/browser/android/compositor.h | 4 ++++ content/public/browser/android/content_view_core.h | 5 +++++ 4 files changed, 29 insertions(+), 9 deletions(-) (limited to 'content/public') diff --git a/content/public/android/java/src/org/chromium/content/browser/ContentView.java b/content/public/android/java/src/org/chromium/content/browser/ContentView.java index b9046b3..55616a7 100644 --- a/content/public/android/java/src/org/chromium/content/browser/ContentView.java +++ b/content/public/android/java/src/org/chromium/content/browser/ContentView.java @@ -312,11 +312,7 @@ public class ContentView extends FrameLayout implements ContentViewCore.Internal } public Bitmap getBitmap(int width, int height) { - return getBitmap(width, height, Bitmap.Config.ARGB_8888); - } - - public Bitmap getBitmap(int width, int height, Bitmap.Config config) { - return mContentViewCore.getBitmap(width, height, config); + return mContentViewCore.getBitmap(width, height); } /** diff --git a/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java b/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java index ff037b0..5941d8d 100644 --- a/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java +++ b/content/public/android/java/src/org/chromium/content/browser/ContentViewCore.java @@ -710,11 +710,23 @@ public class ContentViewCore implements MotionEventDelegate { } public Bitmap getBitmap(int width, int height) { - return getBitmap(width, height, Bitmap.Config.ARGB_8888); - } + if (getWidth() == 0 || getHeight() == 0) return null; + + Bitmap b = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); + + if (mNativeContentViewCore != 0 && + nativePopulateBitmapFromCompositor(mNativeContentViewCore, b)) { + // If we successfully grabbed a bitmap, check if we have to draw the Android overlay + // components as well. + if (mContainerView.getParent() != null && + mContainerView.getVisibility() == View.VISIBLE) { + Canvas c = new Canvas(b); + c.scale(width / (float) getWidth(), height / (float) getHeight()); + mContainerView.draw(c); + } + return b; + } - public Bitmap getBitmap(int width, int height, Bitmap.Config config) { - // TODO(nileshagrawal): Implement this. return null; } @@ -2203,4 +2215,7 @@ public class ContentViewCore implements MotionEventDelegate { private native void nativeUpdateVSyncParameters(int nativeContentViewCoreImpl, long timebaseMicros, long intervalMicros); + + private native boolean nativePopulateBitmapFromCompositor(int nativeContentViewCoreImpl, + Bitmap bitmap); } diff --git a/content/public/browser/android/compositor.h b/content/public/browser/android/compositor.h index 33da403..721b5fd 100644 --- a/content/public/browser/android/compositor.h +++ b/content/public/browser/android/compositor.h @@ -73,6 +73,10 @@ class Compositor { // Deletes an OpenGL texture. virtual void DeleteTexture(WebKit::WebGLId texture_id) = 0; + // Grabs a copy of |texture_id| and saves it into |bitmap|. No scaling is + // done. It is assumed that the texture size matches that of the bitmap. + virtual void CopyTextureToBitmap(WebKit::WebGLId texture_id, + gfx::JavaBitmap& bitmap) = 0; protected: Compositor() {} }; diff --git a/content/public/browser/android/content_view_core.h b/content/public/browser/android/content_view_core.h index fdb98c3..bce865f 100644 --- a/content/public/browser/android/content_view_core.h +++ b/content/public/browser/android/content_view_core.h @@ -10,6 +10,10 @@ #include "content/public/browser/navigation_controller.h" +namespace gfx { +class Size; +} + namespace ui { class WindowAndroid; } @@ -33,6 +37,7 @@ class ContentViewCore { virtual void OnWebPreferencesUpdated() = 0; virtual jint GetCurrentRenderProcessId(JNIEnv* env, jobject obj) = 0; virtual void ShowPastePopup(int x, int y) = 0; + virtual unsigned int GetScaledContentTexture(const gfx::Size& size) = 0; protected: virtual ~ContentViewCore() {}; -- cgit v1.1