Loading cmds/bootanimation/BootAnimation.cpp +1 −1 Original line number Original line Diff line number Diff line Loading @@ -44,7 +44,7 @@ #include <core/SkBitmap.h> #include <core/SkBitmap.h> #include <core/SkStream.h> #include <core/SkStream.h> #include <images/SkImageDecoder.h> #include <core/SkImageDecoder.h> #include <GLES/gl.h> #include <GLES/gl.h> #include <GLES/glext.h> #include <GLES/glext.h> Loading core/jni/Android.mk +0 −4 Original line number Original line Diff line number Diff line Loading @@ -17,10 +17,6 @@ endif LOCAL_CFLAGS += -DGL_GLEXT_PROTOTYPES -DEGL_EGLEXT_PROTOTYPES LOCAL_CFLAGS += -DGL_GLEXT_PROTOTYPES -DEGL_EGLEXT_PROTOTYPES # When built as part of the system image we can enable certian non-NDK compliant # Skia optimizations. LOCAL_CFLAGS += -DSK_BUILD_FOR_ANDROID_FRAMEWORK LOCAL_SRC_FILES:= \ LOCAL_SRC_FILES:= \ AndroidRuntime.cpp \ AndroidRuntime.cpp \ Time.cpp \ Time.cpp \ Loading core/jni/android/graphics/BitmapFactory.cpp +9 −12 Original line number Original line Diff line number Diff line Loading @@ -2,6 +2,7 @@ #include "BitmapFactory.h" #include "BitmapFactory.h" #include "NinePatchPeeker.h" #include "NinePatchPeeker.h" #include "SkData.h" #include "SkImageDecoder.h" #include "SkImageDecoder.h" #include "SkImageRef_ashmem.h" #include "SkImageRef_ashmem.h" #include "SkImageRef_GlobalPool.h" #include "SkImageRef_GlobalPool.h" Loading Loading @@ -137,7 +138,6 @@ static SkBitmap::Config configForScaledOutput(SkBitmap::Config config) { switch (config) { switch (config) { case SkBitmap::kNo_Config: case SkBitmap::kNo_Config: case SkBitmap::kIndex8_Config: case SkBitmap::kIndex8_Config: case SkBitmap::kRLE_Index8_Config: return SkBitmap::kARGB_8888_Config; return SkBitmap::kARGB_8888_Config; default: default: break; break; Loading Loading @@ -475,6 +475,12 @@ static jobject nativeDecodeFileDescriptor(JNIEnv* env, jobject clazz, jobject fi jint descriptor = jniGetFDFromFileDescriptor(env, fileDescriptor); jint descriptor = jniGetFDFromFileDescriptor(env, fileDescriptor); struct stat fdStat; if (fstat(descriptor, &fdStat) == -1) { doThrowIOE(env, "broken file descriptor"); return nullObjectReturn("fstat return -1"); } bool isPurgeable = optionsPurgeable(env, bitmapFactoryOptions); bool isPurgeable = optionsPurgeable(env, bitmapFactoryOptions); bool isShareable = optionsShareable(env, bitmapFactoryOptions); bool isShareable = optionsShareable(env, bitmapFactoryOptions); bool weOwnTheFD = false; bool weOwnTheFD = false; Loading @@ -486,17 +492,8 @@ static jobject nativeDecodeFileDescriptor(JNIEnv* env, jobject clazz, jobject fi } } } } SkFDStream* stream = new SkFDStream(descriptor, weOwnTheFD); SkAutoTUnref<SkData> data(SkData::NewFromFD(descriptor)); SkAutoUnref aur(stream); SkAutoTUnref<SkMemoryStream> stream(new SkMemoryStream(data)); if (!stream->isValid()) { return NULL; } /* Restore our offset when we leave, so we can be called more than once with the same descriptor. This is only required if we didn't dup the file descriptor, but it is OK to do it all the time. */ AutoFDSeek as(descriptor); /* Allow purgeable iff we own the FD, i.e., in the puregeable and /* Allow purgeable iff we own the FD, i.e., in the puregeable and shareable case. shareable case. Loading core/jni/android/graphics/BitmapRegionDecoder.cpp +50 −37 Original line number Original line Diff line number Diff line Loading @@ -17,6 +17,7 @@ #define LOG_TAG "BitmapRegionDecoder" #define LOG_TAG "BitmapRegionDecoder" #include "SkBitmap.h" #include "SkBitmap.h" #include "SkData.h" #include "SkImageEncoder.h" #include "SkImageEncoder.h" #include "GraphicsJNI.h" #include "GraphicsJNI.h" #include "SkUtils.h" #include "SkUtils.h" Loading @@ -25,7 +26,6 @@ #include "SkStream.h" #include "SkStream.h" #include "BitmapFactory.h" #include "BitmapFactory.h" #include "AutoDecodeCancel.h" #include "AutoDecodeCancel.h" #include "SkBitmapRegionDecoder.h" #include "CreateJavaOutputStreamAdaptor.h" #include "CreateJavaOutputStreamAdaptor.h" #include "Utils.h" #include "Utils.h" #include "JNIHelp.h" #include "JNIHelp.h" Loading @@ -49,6 +49,33 @@ using namespace android; using namespace android; class SkBitmapRegionDecoder { public: SkBitmapRegionDecoder(SkImageDecoder* decoder, int width, int height) { fDecoder = decoder; fWidth = width; fHeight = height; } ~SkBitmapRegionDecoder() { SkDELETE(fDecoder); } bool decodeRegion(SkBitmap* bitmap, const SkIRect& rect, SkBitmap::Config pref, int sampleSize) { fDecoder->setSampleSize(sampleSize); return fDecoder->decodeRegion(bitmap, rect, pref); } SkImageDecoder* getDecoder() const { return fDecoder; } int getWidth() const { return fWidth; } int getHeight() const { return fHeight; } private: SkImageDecoder* fDecoder; int fWidth; int fHeight; }; static SkMemoryStream* buildSkMemoryStream(SkStream *stream) { static SkMemoryStream* buildSkMemoryStream(SkStream *stream) { size_t bufferSize = 4096; size_t bufferSize = 4096; size_t streamLen = 0; size_t streamLen = 0; Loading @@ -70,7 +97,7 @@ static SkMemoryStream* buildSkMemoryStream(SkStream *stream) { return streamMem; return streamMem; } } static jobject doBuildTileIndex(JNIEnv* env, SkStream* stream) { static jobject createBitmapRegionDecoder(JNIEnv* env, SkStream* stream) { SkImageDecoder* decoder = SkImageDecoder::Factory(stream); SkImageDecoder* decoder = SkImageDecoder::Factory(stream); int width, height; int width, height; if (NULL == decoder) { if (NULL == decoder) { Loading @@ -87,11 +114,11 @@ static jobject doBuildTileIndex(JNIEnv* env, SkStream* stream) { snprintf(msg, sizeof(msg), "Image failed to decode using %s decoder", snprintf(msg, sizeof(msg), "Image failed to decode using %s decoder", decoder->getFormatName()); decoder->getFormatName()); doThrowIOE(env, msg); doThrowIOE(env, msg); SkDELETE(decoder); return nullObjectReturn("decoder->buildTileIndex returned false"); return nullObjectReturn("decoder->buildTileIndex returned false"); } } SkBitmapRegionDecoder *bm = new SkBitmapRegionDecoder(decoder, stream, width, height); SkBitmapRegionDecoder *bm = new SkBitmapRegionDecoder(decoder, width, height); return GraphicsJNI::createBitmapRegionDecoder(env, bm); return GraphicsJNI::createBitmapRegionDecoder(env, bm); } } Loading @@ -103,7 +130,10 @@ static jobject nativeNewInstanceFromByteArray(JNIEnv* env, jobject, jbyteArray b */ */ AutoJavaByteArray ar(env, byteArray); AutoJavaByteArray ar(env, byteArray); SkStream* stream = new SkMemoryStream(ar.ptr() + offset, length, true); SkStream* stream = new SkMemoryStream(ar.ptr() + offset, length, true); return doBuildTileIndex(env, stream); jobject brd = createBitmapRegionDecoder(env, stream); SkSafeUnref(stream); // the decoder now holds a reference return brd; } } static jobject nativeNewInstanceFromFileDescriptor(JNIEnv* env, jobject clazz, static jobject nativeNewInstanceFromFileDescriptor(JNIEnv* env, jobject clazz, Loading @@ -111,56 +141,36 @@ static jobject nativeNewInstanceFromFileDescriptor(JNIEnv* env, jobject clazz, NPE_CHECK_RETURN_ZERO(env, fileDescriptor); NPE_CHECK_RETURN_ZERO(env, fileDescriptor); jint descriptor = jniGetFDFromFileDescriptor(env, fileDescriptor); jint descriptor = jniGetFDFromFileDescriptor(env, fileDescriptor); SkStream *stream = NULL; struct stat fdStat; struct stat fdStat; int newFD; if (fstat(descriptor, &fdStat) == -1) { if (fstat(descriptor, &fdStat) == -1) { doThrowIOE(env, "broken file descriptor"); doThrowIOE(env, "broken file descriptor"); return nullObjectReturn("fstat return -1"); return nullObjectReturn("fstat return -1"); } } if (isShareable && SkAutoTUnref<SkData> data(SkData::NewFromFD(descriptor)); S_ISREG(fdStat.st_mode) && SkMemoryStream* stream = new SkMemoryStream(data); (newFD = ::dup(descriptor)) != -1) { SkFDStream* fdStream = new SkFDStream(newFD, true); if (!fdStream->isValid()) { fdStream->unref(); return NULL; } stream = fdStream; } else { /* Restore our offset when we leave, so we can be called more than once with the same descriptor. This is only required if we didn't dup the file descriptor, but it is OK to do it all the time. */ AutoFDSeek as(descriptor); SkFDStream* fdStream = new SkFDStream(descriptor, false); if (!fdStream->isValid()) { fdStream->unref(); return NULL; } stream = buildSkMemoryStream(fdStream); fdStream->unref(); } return doBuildTileIndex(env, stream); jobject brd = createBitmapRegionDecoder(env, stream); SkSafeUnref(stream); // the decoder now holds a reference return brd; } } static jobject nativeNewInstanceFromStream(JNIEnv* env, jobject clazz, static jobject nativeNewInstanceFromStream(JNIEnv* env, jobject clazz, jobject is, // InputStream jobject is, // InputStream jbyteArray storage, // byte[] jbyteArray storage, // byte[] jboolean isShareable) { jboolean isShareable) { jobject largeBitmap = NULL; jobject brd = NULL; SkStream* stream = CreateJavaInputStreamAdaptor(env, is, storage, 1024); SkStream* stream = CreateJavaInputStreamAdaptor(env, is, storage, 1024); if (stream) { if (stream) { // for now we don't allow shareable with java inputstreams // for now we don't allow shareable with java inputstreams SkMemoryStream* mStream = buildSkMemoryStream(stream); SkMemoryStream* mStream = buildSkMemoryStream(stream); largeBitmap = doBuildTileIndex(env, mStream); brd = createBitmapRegionDecoder(env, mStream); SkSafeUnref(mStream); // the decoder now holds a reference stream->unref(); stream->unref(); } } return largeBitmap; return brd; } } static jobject nativeNewInstanceFromAsset(JNIEnv* env, jobject clazz, static jobject nativeNewInstanceFromAsset(JNIEnv* env, jobject clazz, Loading @@ -171,7 +181,10 @@ static jobject nativeNewInstanceFromAsset(JNIEnv* env, jobject clazz, assStream = new AssetStreamAdaptor(asset); assStream = new AssetStreamAdaptor(asset); stream = buildSkMemoryStream(assStream); stream = buildSkMemoryStream(assStream); assStream->unref(); assStream->unref(); return doBuildTileIndex(env, stream); jobject brd = createBitmapRegionDecoder(env, stream); SkSafeUnref(stream); // the decoder now holds a reference return brd; } } /* /* Loading core/jni/android/graphics/GraphicsJNI.h +2 −2 Original line number Original line Diff line number Diff line Loading @@ -7,10 +7,10 @@ #include "SkMallocPixelRef.h" #include "SkMallocPixelRef.h" #include "SkPoint.h" #include "SkPoint.h" #include "SkRect.h" #include "SkRect.h" #include "../images/SkBitmapRegionDecoder.h" #include "SkImageDecoder.h" #include "../images/SkImageDecoder.h" #include <jni.h> #include <jni.h> class SkBitmapRegionDecoder; class SkCanvas; class SkCanvas; class SkPaint; class SkPaint; class SkPicture; class SkPicture; Loading Loading
cmds/bootanimation/BootAnimation.cpp +1 −1 Original line number Original line Diff line number Diff line Loading @@ -44,7 +44,7 @@ #include <core/SkBitmap.h> #include <core/SkBitmap.h> #include <core/SkStream.h> #include <core/SkStream.h> #include <images/SkImageDecoder.h> #include <core/SkImageDecoder.h> #include <GLES/gl.h> #include <GLES/gl.h> #include <GLES/glext.h> #include <GLES/glext.h> Loading
core/jni/Android.mk +0 −4 Original line number Original line Diff line number Diff line Loading @@ -17,10 +17,6 @@ endif LOCAL_CFLAGS += -DGL_GLEXT_PROTOTYPES -DEGL_EGLEXT_PROTOTYPES LOCAL_CFLAGS += -DGL_GLEXT_PROTOTYPES -DEGL_EGLEXT_PROTOTYPES # When built as part of the system image we can enable certian non-NDK compliant # Skia optimizations. LOCAL_CFLAGS += -DSK_BUILD_FOR_ANDROID_FRAMEWORK LOCAL_SRC_FILES:= \ LOCAL_SRC_FILES:= \ AndroidRuntime.cpp \ AndroidRuntime.cpp \ Time.cpp \ Time.cpp \ Loading
core/jni/android/graphics/BitmapFactory.cpp +9 −12 Original line number Original line Diff line number Diff line Loading @@ -2,6 +2,7 @@ #include "BitmapFactory.h" #include "BitmapFactory.h" #include "NinePatchPeeker.h" #include "NinePatchPeeker.h" #include "SkData.h" #include "SkImageDecoder.h" #include "SkImageDecoder.h" #include "SkImageRef_ashmem.h" #include "SkImageRef_ashmem.h" #include "SkImageRef_GlobalPool.h" #include "SkImageRef_GlobalPool.h" Loading Loading @@ -137,7 +138,6 @@ static SkBitmap::Config configForScaledOutput(SkBitmap::Config config) { switch (config) { switch (config) { case SkBitmap::kNo_Config: case SkBitmap::kNo_Config: case SkBitmap::kIndex8_Config: case SkBitmap::kIndex8_Config: case SkBitmap::kRLE_Index8_Config: return SkBitmap::kARGB_8888_Config; return SkBitmap::kARGB_8888_Config; default: default: break; break; Loading Loading @@ -475,6 +475,12 @@ static jobject nativeDecodeFileDescriptor(JNIEnv* env, jobject clazz, jobject fi jint descriptor = jniGetFDFromFileDescriptor(env, fileDescriptor); jint descriptor = jniGetFDFromFileDescriptor(env, fileDescriptor); struct stat fdStat; if (fstat(descriptor, &fdStat) == -1) { doThrowIOE(env, "broken file descriptor"); return nullObjectReturn("fstat return -1"); } bool isPurgeable = optionsPurgeable(env, bitmapFactoryOptions); bool isPurgeable = optionsPurgeable(env, bitmapFactoryOptions); bool isShareable = optionsShareable(env, bitmapFactoryOptions); bool isShareable = optionsShareable(env, bitmapFactoryOptions); bool weOwnTheFD = false; bool weOwnTheFD = false; Loading @@ -486,17 +492,8 @@ static jobject nativeDecodeFileDescriptor(JNIEnv* env, jobject clazz, jobject fi } } } } SkFDStream* stream = new SkFDStream(descriptor, weOwnTheFD); SkAutoTUnref<SkData> data(SkData::NewFromFD(descriptor)); SkAutoUnref aur(stream); SkAutoTUnref<SkMemoryStream> stream(new SkMemoryStream(data)); if (!stream->isValid()) { return NULL; } /* Restore our offset when we leave, so we can be called more than once with the same descriptor. This is only required if we didn't dup the file descriptor, but it is OK to do it all the time. */ AutoFDSeek as(descriptor); /* Allow purgeable iff we own the FD, i.e., in the puregeable and /* Allow purgeable iff we own the FD, i.e., in the puregeable and shareable case. shareable case. Loading
core/jni/android/graphics/BitmapRegionDecoder.cpp +50 −37 Original line number Original line Diff line number Diff line Loading @@ -17,6 +17,7 @@ #define LOG_TAG "BitmapRegionDecoder" #define LOG_TAG "BitmapRegionDecoder" #include "SkBitmap.h" #include "SkBitmap.h" #include "SkData.h" #include "SkImageEncoder.h" #include "SkImageEncoder.h" #include "GraphicsJNI.h" #include "GraphicsJNI.h" #include "SkUtils.h" #include "SkUtils.h" Loading @@ -25,7 +26,6 @@ #include "SkStream.h" #include "SkStream.h" #include "BitmapFactory.h" #include "BitmapFactory.h" #include "AutoDecodeCancel.h" #include "AutoDecodeCancel.h" #include "SkBitmapRegionDecoder.h" #include "CreateJavaOutputStreamAdaptor.h" #include "CreateJavaOutputStreamAdaptor.h" #include "Utils.h" #include "Utils.h" #include "JNIHelp.h" #include "JNIHelp.h" Loading @@ -49,6 +49,33 @@ using namespace android; using namespace android; class SkBitmapRegionDecoder { public: SkBitmapRegionDecoder(SkImageDecoder* decoder, int width, int height) { fDecoder = decoder; fWidth = width; fHeight = height; } ~SkBitmapRegionDecoder() { SkDELETE(fDecoder); } bool decodeRegion(SkBitmap* bitmap, const SkIRect& rect, SkBitmap::Config pref, int sampleSize) { fDecoder->setSampleSize(sampleSize); return fDecoder->decodeRegion(bitmap, rect, pref); } SkImageDecoder* getDecoder() const { return fDecoder; } int getWidth() const { return fWidth; } int getHeight() const { return fHeight; } private: SkImageDecoder* fDecoder; int fWidth; int fHeight; }; static SkMemoryStream* buildSkMemoryStream(SkStream *stream) { static SkMemoryStream* buildSkMemoryStream(SkStream *stream) { size_t bufferSize = 4096; size_t bufferSize = 4096; size_t streamLen = 0; size_t streamLen = 0; Loading @@ -70,7 +97,7 @@ static SkMemoryStream* buildSkMemoryStream(SkStream *stream) { return streamMem; return streamMem; } } static jobject doBuildTileIndex(JNIEnv* env, SkStream* stream) { static jobject createBitmapRegionDecoder(JNIEnv* env, SkStream* stream) { SkImageDecoder* decoder = SkImageDecoder::Factory(stream); SkImageDecoder* decoder = SkImageDecoder::Factory(stream); int width, height; int width, height; if (NULL == decoder) { if (NULL == decoder) { Loading @@ -87,11 +114,11 @@ static jobject doBuildTileIndex(JNIEnv* env, SkStream* stream) { snprintf(msg, sizeof(msg), "Image failed to decode using %s decoder", snprintf(msg, sizeof(msg), "Image failed to decode using %s decoder", decoder->getFormatName()); decoder->getFormatName()); doThrowIOE(env, msg); doThrowIOE(env, msg); SkDELETE(decoder); return nullObjectReturn("decoder->buildTileIndex returned false"); return nullObjectReturn("decoder->buildTileIndex returned false"); } } SkBitmapRegionDecoder *bm = new SkBitmapRegionDecoder(decoder, stream, width, height); SkBitmapRegionDecoder *bm = new SkBitmapRegionDecoder(decoder, width, height); return GraphicsJNI::createBitmapRegionDecoder(env, bm); return GraphicsJNI::createBitmapRegionDecoder(env, bm); } } Loading @@ -103,7 +130,10 @@ static jobject nativeNewInstanceFromByteArray(JNIEnv* env, jobject, jbyteArray b */ */ AutoJavaByteArray ar(env, byteArray); AutoJavaByteArray ar(env, byteArray); SkStream* stream = new SkMemoryStream(ar.ptr() + offset, length, true); SkStream* stream = new SkMemoryStream(ar.ptr() + offset, length, true); return doBuildTileIndex(env, stream); jobject brd = createBitmapRegionDecoder(env, stream); SkSafeUnref(stream); // the decoder now holds a reference return brd; } } static jobject nativeNewInstanceFromFileDescriptor(JNIEnv* env, jobject clazz, static jobject nativeNewInstanceFromFileDescriptor(JNIEnv* env, jobject clazz, Loading @@ -111,56 +141,36 @@ static jobject nativeNewInstanceFromFileDescriptor(JNIEnv* env, jobject clazz, NPE_CHECK_RETURN_ZERO(env, fileDescriptor); NPE_CHECK_RETURN_ZERO(env, fileDescriptor); jint descriptor = jniGetFDFromFileDescriptor(env, fileDescriptor); jint descriptor = jniGetFDFromFileDescriptor(env, fileDescriptor); SkStream *stream = NULL; struct stat fdStat; struct stat fdStat; int newFD; if (fstat(descriptor, &fdStat) == -1) { if (fstat(descriptor, &fdStat) == -1) { doThrowIOE(env, "broken file descriptor"); doThrowIOE(env, "broken file descriptor"); return nullObjectReturn("fstat return -1"); return nullObjectReturn("fstat return -1"); } } if (isShareable && SkAutoTUnref<SkData> data(SkData::NewFromFD(descriptor)); S_ISREG(fdStat.st_mode) && SkMemoryStream* stream = new SkMemoryStream(data); (newFD = ::dup(descriptor)) != -1) { SkFDStream* fdStream = new SkFDStream(newFD, true); if (!fdStream->isValid()) { fdStream->unref(); return NULL; } stream = fdStream; } else { /* Restore our offset when we leave, so we can be called more than once with the same descriptor. This is only required if we didn't dup the file descriptor, but it is OK to do it all the time. */ AutoFDSeek as(descriptor); SkFDStream* fdStream = new SkFDStream(descriptor, false); if (!fdStream->isValid()) { fdStream->unref(); return NULL; } stream = buildSkMemoryStream(fdStream); fdStream->unref(); } return doBuildTileIndex(env, stream); jobject brd = createBitmapRegionDecoder(env, stream); SkSafeUnref(stream); // the decoder now holds a reference return brd; } } static jobject nativeNewInstanceFromStream(JNIEnv* env, jobject clazz, static jobject nativeNewInstanceFromStream(JNIEnv* env, jobject clazz, jobject is, // InputStream jobject is, // InputStream jbyteArray storage, // byte[] jbyteArray storage, // byte[] jboolean isShareable) { jboolean isShareable) { jobject largeBitmap = NULL; jobject brd = NULL; SkStream* stream = CreateJavaInputStreamAdaptor(env, is, storage, 1024); SkStream* stream = CreateJavaInputStreamAdaptor(env, is, storage, 1024); if (stream) { if (stream) { // for now we don't allow shareable with java inputstreams // for now we don't allow shareable with java inputstreams SkMemoryStream* mStream = buildSkMemoryStream(stream); SkMemoryStream* mStream = buildSkMemoryStream(stream); largeBitmap = doBuildTileIndex(env, mStream); brd = createBitmapRegionDecoder(env, mStream); SkSafeUnref(mStream); // the decoder now holds a reference stream->unref(); stream->unref(); } } return largeBitmap; return brd; } } static jobject nativeNewInstanceFromAsset(JNIEnv* env, jobject clazz, static jobject nativeNewInstanceFromAsset(JNIEnv* env, jobject clazz, Loading @@ -171,7 +181,10 @@ static jobject nativeNewInstanceFromAsset(JNIEnv* env, jobject clazz, assStream = new AssetStreamAdaptor(asset); assStream = new AssetStreamAdaptor(asset); stream = buildSkMemoryStream(assStream); stream = buildSkMemoryStream(assStream); assStream->unref(); assStream->unref(); return doBuildTileIndex(env, stream); jobject brd = createBitmapRegionDecoder(env, stream); SkSafeUnref(stream); // the decoder now holds a reference return brd; } } /* /* Loading
core/jni/android/graphics/GraphicsJNI.h +2 −2 Original line number Original line Diff line number Diff line Loading @@ -7,10 +7,10 @@ #include "SkMallocPixelRef.h" #include "SkMallocPixelRef.h" #include "SkPoint.h" #include "SkPoint.h" #include "SkRect.h" #include "SkRect.h" #include "../images/SkBitmapRegionDecoder.h" #include "SkImageDecoder.h" #include "../images/SkImageDecoder.h" #include <jni.h> #include <jni.h> class SkBitmapRegionDecoder; class SkCanvas; class SkCanvas; class SkPaint; class SkPaint; class SkPicture; class SkPicture; Loading