Loading core/jni/android_view_GLES20Canvas.cpp +13 −6 Original line number Diff line number Diff line Loading @@ -357,19 +357,26 @@ static void android_view_GLES20Canvas_drawBitmapMatrix(JNIEnv* env, jobject claz static void android_view_GLES20Canvas_drawBitmapData(JNIEnv* env, jobject clazz, OpenGLRenderer* renderer, jintArray colors, jint offset, jint stride, jfloat left, jfloat top, jint width, jint height, jboolean hasAlpha, SkPaint* paint) { SkBitmap bitmap; SkBitmap::Config config = hasAlpha ? SkBitmap::kARGB_8888_Config : SkBitmap::kRGB_565_Config; bitmap.setConfig(config, width, height); SkBitmap* bitmap = new SkBitmap; bitmap->setConfig(hasAlpha ? SkBitmap::kARGB_8888_Config : SkBitmap::kRGB_565_Config, width, height); if (!bitmap.allocPixels()) { if (!bitmap->allocPixels()) { delete bitmap; return; } if (!GraphicsJNI::SetPixels(env, colors, offset, stride, 0, 0, width, height, bitmap)) { if (!GraphicsJNI::SetPixels(env, colors, offset, stride, 0, 0, width, height, *bitmap)) { delete bitmap; return; } renderer->drawBitmapData(&bitmap, left, top, paint); renderer->drawBitmapData(bitmap, left, top, paint); // If the renderer is a deferred renderer it will own the bitmap if (!renderer->isDeferred()) { delete bitmap; } } static void android_view_GLES20Canvas_drawBitmapMesh(JNIEnv* env, jobject clazz, Loading libs/hwui/DisplayListRenderer.cpp +32 −11 Original line number Diff line number Diff line Loading @@ -162,6 +162,13 @@ void DisplayList::clearResources() { } mBitmapResources.clear(); for (size_t i = 0; i < mOwnedBitmapResources.size(); i++) { SkBitmap* bitmap = mOwnedBitmapResources.itemAt(i); caches.resourceCache.decrementRefcount(bitmap); caches.resourceCache.destructor(bitmap); } mOwnedBitmapResources.clear(); for (size_t i = 0; i < mFilterResources.size(); i++) { caches.resourceCache.decrementRefcount(mFilterResources.itemAt(i)); } Loading Loading @@ -224,6 +231,13 @@ void DisplayList::initFromDisplayListRenderer(const DisplayListRenderer& recorde caches.resourceCache.incrementRefcount(resource); } const Vector<SkBitmap*> &ownedBitmapResources = recorder.getOwnedBitmapResources(); for (size_t i = 0; i < ownedBitmapResources.size(); i++) { SkBitmap* resource = ownedBitmapResources.itemAt(i); mOwnedBitmapResources.add(resource); caches.resourceCache.incrementRefcount(resource); } const Vector<SkiaColorFilter*>& filterResources = recorder.getFilterResources(); for (size_t i = 0; i < filterResources.size(); i++) { SkiaColorFilter* resource = filterResources.itemAt(i); Loading Loading @@ -1036,10 +1050,7 @@ status_t DisplayList::replay(OpenGLRenderer& renderer, Rect& dirty, int32_t flag SkPaint* paint = getPaint(renderer); DISPLAY_LIST_LOGD("%s%s %p, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], bitmap, x, y, paint); if (bitmap) { renderer.drawBitmap(bitmap, x, y, paint); delete bitmap; } } break; case DrawBitmapMesh: { Loading Loading @@ -1295,6 +1306,12 @@ void DisplayListRenderer::reset() { } mBitmapResources.clear(); for (size_t i = 0; i < mOwnedBitmapResources.size(); i++) { SkBitmap* bitmap = mOwnedBitmapResources.itemAt(i); caches.resourceCache.decrementRefcount(bitmap); } mOwnedBitmapResources.clear(); for (size_t i = 0; i < mFilterResources.size(); i++) { caches.resourceCache.decrementRefcount(mFilterResources.itemAt(i)); } Loading Loading @@ -1336,6 +1353,10 @@ DisplayList* DisplayListRenderer::getDisplayList(DisplayList* displayList) { return displayList; } bool DisplayListRenderer::isDeferred() { return true; } void DisplayListRenderer::setViewport(int width, int height) { mOrthoMatrix.loadOrtho(0, width, height, 0, -1, 1); Loading libs/hwui/DisplayListRenderer.h +15 −22 Original line number Diff line number Diff line Loading @@ -398,7 +398,6 @@ public: private: void init(); void initProperties(); void clearResources(); Loading @@ -424,16 +423,7 @@ private: } SkBitmap* getBitmapData() { SkBitmap* bitmap = new SkBitmap; bitmap->setConfig((SkBitmap::Config) getInt(), getInt(), getInt()); if (!bitmap->allocPixels()) { delete bitmap; return NULL; } bitmap->setPixels((void*) mReader.skip(bitmap->height() * bitmap->rowBytes())); return bitmap; return (SkBitmap*) getInt(); } SkiaShader* getShader() { Loading Loading @@ -497,6 +487,7 @@ private: } Vector<SkBitmap*> mBitmapResources; Vector<SkBitmap*> mOwnedBitmapResources; Vector<SkiaColorFilter*> mFilterResources; Vector<SkPaint*> mPaints; Loading Loading @@ -552,6 +543,8 @@ public: ANDROID_API DisplayList* getDisplayList(DisplayList* displayList); virtual bool isDeferred(); virtual void setViewport(int width, int height); virtual void prepareDirty(float left, float top, float right, float bottom, bool opaque); virtual void finish(); Loading Loading @@ -634,6 +627,10 @@ public: return mBitmapResources; } const Vector<SkBitmap*>& getOwnedBitmapResources() const { return mOwnedBitmapResources; } const Vector<SkiaColorFilter*>& getFilterResources() const { return mFilterResources; } Loading Loading @@ -719,17 +716,6 @@ private: mWriter.write(values, count * sizeof(int32_t)); } void addBitmapData(SkBitmap* bitmap) { mWriter.writeInt(bitmap->config()); mWriter.writeInt(bitmap->width()); mWriter.writeInt(bitmap->height()); SkAutoLockPixels alp(*bitmap); void* src = bitmap->getPixels(); mWriter.write(src, bitmap->rowBytes() * bitmap->height()); } void addUInts(const uint32_t* values, int8_t count) { mWriter.writeInt(count); mWriter.write(values, count * sizeof(uint32_t)); Loading Loading @@ -825,6 +811,12 @@ private: Caches::getInstance().resourceCache.incrementRefcount(bitmap); } void addBitmapData(SkBitmap* bitmap) { addInt((int) bitmap); mOwnedBitmapResources.add(bitmap); Caches::getInstance().resourceCache.incrementRefcount(bitmap); } inline void addShader(SkiaShader* shader) { if (!shader) { addInt((int) NULL); Loading @@ -851,6 +843,7 @@ private: } Vector<SkBitmap*> mBitmapResources; Vector<SkBitmap*> mOwnedBitmapResources; Vector<SkiaColorFilter*> mFilterResources; Vector<SkPaint*> mPaints; Loading libs/hwui/OpenGLRenderer.cpp +4 −0 Original line number Diff line number Diff line Loading @@ -144,6 +144,10 @@ uint32_t OpenGLRenderer::getStencilSize() { return STENCIL_BUFFER_SIZE; } bool OpenGLRenderer::isDeferred() { return false; } void OpenGLRenderer::setViewport(int width, int height) { mOrthoMatrix.loadOrtho(0, width, height, 0, -1, 1); Loading libs/hwui/OpenGLRenderer.h +2 −0 Original line number Diff line number Diff line Loading @@ -63,6 +63,8 @@ public: ANDROID_API OpenGLRenderer(); virtual ~OpenGLRenderer(); virtual bool isDeferred(); virtual void setViewport(int width, int height); ANDROID_API void prepare(bool opaque); Loading libs/hwui/ResourceCache.cpp +2 −2 File changed.Contains only whitespace changes. Show changes Loading
core/jni/android_view_GLES20Canvas.cpp +13 −6 Original line number Diff line number Diff line Loading @@ -357,19 +357,26 @@ static void android_view_GLES20Canvas_drawBitmapMatrix(JNIEnv* env, jobject claz static void android_view_GLES20Canvas_drawBitmapData(JNIEnv* env, jobject clazz, OpenGLRenderer* renderer, jintArray colors, jint offset, jint stride, jfloat left, jfloat top, jint width, jint height, jboolean hasAlpha, SkPaint* paint) { SkBitmap bitmap; SkBitmap::Config config = hasAlpha ? SkBitmap::kARGB_8888_Config : SkBitmap::kRGB_565_Config; bitmap.setConfig(config, width, height); SkBitmap* bitmap = new SkBitmap; bitmap->setConfig(hasAlpha ? SkBitmap::kARGB_8888_Config : SkBitmap::kRGB_565_Config, width, height); if (!bitmap.allocPixels()) { if (!bitmap->allocPixels()) { delete bitmap; return; } if (!GraphicsJNI::SetPixels(env, colors, offset, stride, 0, 0, width, height, bitmap)) { if (!GraphicsJNI::SetPixels(env, colors, offset, stride, 0, 0, width, height, *bitmap)) { delete bitmap; return; } renderer->drawBitmapData(&bitmap, left, top, paint); renderer->drawBitmapData(bitmap, left, top, paint); // If the renderer is a deferred renderer it will own the bitmap if (!renderer->isDeferred()) { delete bitmap; } } static void android_view_GLES20Canvas_drawBitmapMesh(JNIEnv* env, jobject clazz, Loading
libs/hwui/DisplayListRenderer.cpp +32 −11 Original line number Diff line number Diff line Loading @@ -162,6 +162,13 @@ void DisplayList::clearResources() { } mBitmapResources.clear(); for (size_t i = 0; i < mOwnedBitmapResources.size(); i++) { SkBitmap* bitmap = mOwnedBitmapResources.itemAt(i); caches.resourceCache.decrementRefcount(bitmap); caches.resourceCache.destructor(bitmap); } mOwnedBitmapResources.clear(); for (size_t i = 0; i < mFilterResources.size(); i++) { caches.resourceCache.decrementRefcount(mFilterResources.itemAt(i)); } Loading Loading @@ -224,6 +231,13 @@ void DisplayList::initFromDisplayListRenderer(const DisplayListRenderer& recorde caches.resourceCache.incrementRefcount(resource); } const Vector<SkBitmap*> &ownedBitmapResources = recorder.getOwnedBitmapResources(); for (size_t i = 0; i < ownedBitmapResources.size(); i++) { SkBitmap* resource = ownedBitmapResources.itemAt(i); mOwnedBitmapResources.add(resource); caches.resourceCache.incrementRefcount(resource); } const Vector<SkiaColorFilter*>& filterResources = recorder.getFilterResources(); for (size_t i = 0; i < filterResources.size(); i++) { SkiaColorFilter* resource = filterResources.itemAt(i); Loading Loading @@ -1036,10 +1050,7 @@ status_t DisplayList::replay(OpenGLRenderer& renderer, Rect& dirty, int32_t flag SkPaint* paint = getPaint(renderer); DISPLAY_LIST_LOGD("%s%s %p, %.2f, %.2f, %p", (char*) indent, OP_NAMES[op], bitmap, x, y, paint); if (bitmap) { renderer.drawBitmap(bitmap, x, y, paint); delete bitmap; } } break; case DrawBitmapMesh: { Loading Loading @@ -1295,6 +1306,12 @@ void DisplayListRenderer::reset() { } mBitmapResources.clear(); for (size_t i = 0; i < mOwnedBitmapResources.size(); i++) { SkBitmap* bitmap = mOwnedBitmapResources.itemAt(i); caches.resourceCache.decrementRefcount(bitmap); } mOwnedBitmapResources.clear(); for (size_t i = 0; i < mFilterResources.size(); i++) { caches.resourceCache.decrementRefcount(mFilterResources.itemAt(i)); } Loading Loading @@ -1336,6 +1353,10 @@ DisplayList* DisplayListRenderer::getDisplayList(DisplayList* displayList) { return displayList; } bool DisplayListRenderer::isDeferred() { return true; } void DisplayListRenderer::setViewport(int width, int height) { mOrthoMatrix.loadOrtho(0, width, height, 0, -1, 1); Loading
libs/hwui/DisplayListRenderer.h +15 −22 Original line number Diff line number Diff line Loading @@ -398,7 +398,6 @@ public: private: void init(); void initProperties(); void clearResources(); Loading @@ -424,16 +423,7 @@ private: } SkBitmap* getBitmapData() { SkBitmap* bitmap = new SkBitmap; bitmap->setConfig((SkBitmap::Config) getInt(), getInt(), getInt()); if (!bitmap->allocPixels()) { delete bitmap; return NULL; } bitmap->setPixels((void*) mReader.skip(bitmap->height() * bitmap->rowBytes())); return bitmap; return (SkBitmap*) getInt(); } SkiaShader* getShader() { Loading Loading @@ -497,6 +487,7 @@ private: } Vector<SkBitmap*> mBitmapResources; Vector<SkBitmap*> mOwnedBitmapResources; Vector<SkiaColorFilter*> mFilterResources; Vector<SkPaint*> mPaints; Loading Loading @@ -552,6 +543,8 @@ public: ANDROID_API DisplayList* getDisplayList(DisplayList* displayList); virtual bool isDeferred(); virtual void setViewport(int width, int height); virtual void prepareDirty(float left, float top, float right, float bottom, bool opaque); virtual void finish(); Loading Loading @@ -634,6 +627,10 @@ public: return mBitmapResources; } const Vector<SkBitmap*>& getOwnedBitmapResources() const { return mOwnedBitmapResources; } const Vector<SkiaColorFilter*>& getFilterResources() const { return mFilterResources; } Loading Loading @@ -719,17 +716,6 @@ private: mWriter.write(values, count * sizeof(int32_t)); } void addBitmapData(SkBitmap* bitmap) { mWriter.writeInt(bitmap->config()); mWriter.writeInt(bitmap->width()); mWriter.writeInt(bitmap->height()); SkAutoLockPixels alp(*bitmap); void* src = bitmap->getPixels(); mWriter.write(src, bitmap->rowBytes() * bitmap->height()); } void addUInts(const uint32_t* values, int8_t count) { mWriter.writeInt(count); mWriter.write(values, count * sizeof(uint32_t)); Loading Loading @@ -825,6 +811,12 @@ private: Caches::getInstance().resourceCache.incrementRefcount(bitmap); } void addBitmapData(SkBitmap* bitmap) { addInt((int) bitmap); mOwnedBitmapResources.add(bitmap); Caches::getInstance().resourceCache.incrementRefcount(bitmap); } inline void addShader(SkiaShader* shader) { if (!shader) { addInt((int) NULL); Loading @@ -851,6 +843,7 @@ private: } Vector<SkBitmap*> mBitmapResources; Vector<SkBitmap*> mOwnedBitmapResources; Vector<SkiaColorFilter*> mFilterResources; Vector<SkPaint*> mPaints; Loading
libs/hwui/OpenGLRenderer.cpp +4 −0 Original line number Diff line number Diff line Loading @@ -144,6 +144,10 @@ uint32_t OpenGLRenderer::getStencilSize() { return STENCIL_BUFFER_SIZE; } bool OpenGLRenderer::isDeferred() { return false; } void OpenGLRenderer::setViewport(int width, int height) { mOrthoMatrix.loadOrtho(0, width, height, 0, -1, 1); Loading
libs/hwui/OpenGLRenderer.h +2 −0 Original line number Diff line number Diff line Loading @@ -63,6 +63,8 @@ public: ANDROID_API OpenGLRenderer(); virtual ~OpenGLRenderer(); virtual bool isDeferred(); virtual void setViewport(int width, int height); ANDROID_API void prepare(bool opaque); Loading