Chromium Code Reviews| Index: ui/gfx/android/java_bitmap.cc |
| diff --git a/ui/gfx/android/java_bitmap.cc b/ui/gfx/android/java_bitmap.cc |
| index 83d4a46518203edb5ecafd2efdc7d3b253a32806..8d18c6d8fbd6c4687d0eaed4844d5ae74df6f5a5 100644 |
| --- a/ui/gfx/android/java_bitmap.cc |
| +++ b/ui/gfx/android/java_bitmap.cc |
| @@ -61,32 +61,20 @@ ScopedJavaLocalRef<jobject> ConvertToJavaBitmap(const SkBitmap* skbitmap) { |
| return jbitmap; |
| } |
| -static ScopedJavaLocalRef<jobject> CreateJavaBitmapFromResource( |
| - const char* name, gfx::Size requested_size) { |
| - JNIEnv* env = AttachCurrentThread(); |
| - ScopedJavaLocalRef<jstring> jname(env, env->NewStringUTF(name)); |
| - return ui::Java_BitmapHelper_decodeDrawableResource(env, |
| - jname.obj(), |
| - requested_size.width(), |
| - requested_size.height()); |
| -} |
| - |
| -static SkBitmap ConvertToSkBitmap(ScopedJavaLocalRef<jobject> jbitmap) { |
| - if (jbitmap.is_null()) |
| - return SkBitmap(); |
| +SkBitmap CreateSkBitmapFromJavaBitmap(JavaBitmap& jbitmap) { |
| + DCHECK_EQ(jbitmap.format(), ANDROID_BITMAP_FORMAT_RGBA_8888); |
| - JavaBitmap src_lock(jbitmap.obj()); |
| - DCHECK_EQ(src_lock.format(), ANDROID_BITMAP_FORMAT_RGBA_8888); |
| - |
| - gfx::Size src_size = src_lock.size(); |
| + gfx::Size src_size = jbitmap.size(); |
| SkBitmap skbitmap; |
| skbitmap.setConfig(SkBitmap::kARGB_8888_Config, |
| - src_size.width(), src_size.height(), src_lock.stride()); |
| + src_size.width(), |
| + src_size.height(), |
| + jbitmap.stride()); |
| skbitmap.allocPixels(); |
| SkAutoLockPixels dst_lock(skbitmap); |
| - void* src_pixels = src_lock.pixels(); |
| + void* src_pixels = jbitmap.pixels(); |
| void* dst_pixels = skbitmap.getPixels(); |
| memcpy(dst_pixels, src_pixels, skbitmap.getSize()); |
| @@ -96,14 +84,17 @@ static SkBitmap ConvertToSkBitmap(ScopedJavaLocalRef<jobject> jbitmap) { |
| SkBitmap CreateSkBitmapFromResource(const char* name, gfx::Size size) { |
| DCHECK(!size.IsEmpty()); |
| - SkBitmap bitmap = |
| - ConvertToSkBitmap(CreateJavaBitmapFromResource(name, size)); |
| - if (bitmap.isNull()) |
| - return bitmap; |
| - // RESIZE_BOX has sufficient downsampling quality with minimal runtime cost. |
| - return skia::ImageOperations::Resize(bitmap, |
| - skia::ImageOperations::RESIZE_BOX, |
| - size.width(), size.height()); |
| + JNIEnv* env = AttachCurrentThread(); |
| + ScopedJavaLocalRef<jstring> jname(env, env->NewStringUTF(name)); |
| + ScopedJavaLocalRef<jobject> jobj(ui::Java_BitmapHelper_decodeDrawableResource( |
| + env, jname.obj(), size.width(), size.height())); |
| + if (jobj.is_null()) |
| + return SkBitmap(); |
| + |
| + JavaBitmap jbitmap(jobj.obj()); |
| + SkBitmap bitmap = CreateSkBitmapFromJavaBitmap(jbitmap); |
|
Yaron
2013/09/10 00:28:39
You dropped the SkBitmap null-check. Intentional?
powei
2013/09/10 00:42:44
yes, in the old code, bitmap.isNull() is true when
|
| + return skia::ImageOperations::Resize( |
| + bitmap, skia::ImageOperations::RESIZE_BOX, size.width(), size.height()); |
| } |
| } // namespace gfx |