Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(27)

Unified Diff: content/browser/android/content_view_core_impl.cc

Issue 21777003: DevTools: [Android] implement RenderWidgetHostViewAndroid::CopyFromCompositingSurface (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix clang bots. Created 7 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/browser/android/content_view_core_impl.cc
diff --git a/content/browser/android/content_view_core_impl.cc b/content/browser/android/content_view_core_impl.cc
index 80fe628dd022781a85a0bd56fe22b32d2d270490..aed58a3d19598a5da0741563dc05243f83aadd2d 100644
--- a/content/browser/android/content_view_core_impl.cc
+++ b/content/browser/android/content_view_core_impl.cc
@@ -61,6 +61,8 @@ using base::android::ConvertJavaStringToUTF16;
using base::android::ConvertJavaStringToUTF8;
using base::android::ConvertUTF16ToJavaString;
using base::android::ConvertUTF8ToJavaString;
+using base::android::HasException;
+using base::android::JavaByteArrayToByteVector;
using base::android::ScopedJavaGlobalRef;
using base::android::ScopedJavaLocalRef;
using WebKit::WebGestureEvent;
@@ -707,6 +709,42 @@ void ContentViewCoreImpl::SetNeedsAnimate() {
Java_ContentViewCore_setNeedsAnimate(env, obj.obj());
}
+bool ContentViewCoreImpl::GrabSnapshot(const std::string& format,
+ int quality,
+ double scale,
+ std::vector<uint8>* data) {
+ gfx::Size size = gfx::ToFlooredSize(gfx::ScaleSize(GetViewportSizePix(),
+ scale));
Sami 2013/08/05 16:56:15 Check that no dimension of |size| is zero here.
+ SkBitmap bitmap;
Sami 2013/08/05 16:56:15 To avoid the extra allocation and copy on line 735
+ bitmap.setConfig(SkBitmap::kARGB_8888_Config, size.width(), size.height());
+ bitmap.allocPixels();
+ SkAutoLockPixels lock(bitmap);
+
+ RenderWidgetHostViewAndroid* view = GetRenderWidgetHostViewAndroid();
+ if (!view->PopulateBitmapWithContents(size, &bitmap))
no sievers 2013/08/05 21:46:44 We'd like to deprecate this API and make all readb
+ return false;
+
+ JNIEnv* env = AttachCurrentThread();
+ ScopedJavaLocalRef<jobject> obj = java_ref_.get(env);
+ if (obj.is_null())
+ return false;
+
+ ScopedJavaLocalRef<jstring> jstring_format =
+ ConvertUTF8ToJavaString(env, format);
+ ScopedJavaLocalRef<jobject> java_bitmap =
+ gfx::ConvertToJavaBitmap(&bitmap);
+ DCHECK(!java_bitmap.is_null());
+
+ ScopedJavaLocalRef<jbyteArray> data_ref =
+ Java_ContentViewCore_compressBitmap(env, obj.obj(), java_bitmap.obj(),
+ jstring_format.obj(), quality);
+ if (HasException(env) || data_ref.is_null())
+ return false;
+
+ JavaByteArrayToByteVector(env, data_ref.obj(), data);
+ return true;
+}
+
ui::ViewAndroid* ContentViewCoreImpl::GetViewAndroid() const {
// view_android_ should never be null for Chrome.
DCHECK(view_android_);

Powered by Google App Engine
This is Rietveld 408576698