Loading libs/hwui/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -537,6 +537,7 @@ cc_defaults { "AnimatorManager.cpp", "CanvasTransform.cpp", "DamageAccumulator.cpp", "Gainmap.cpp", "Interpolator.cpp", "LightingInfo.cpp", "Matrix.cpp", Loading libs/hwui/Gainmap.cpp 0 → 100644 +32 −0 Original line number Diff line number Diff line /** * Copyright (C) 2023 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "Gainmap.h" namespace android::uirenderer { sp<Gainmap> Gainmap::allocateHardwareGainmap(const sp<Gainmap>& srcGainmap) { auto gainmap = sp<Gainmap>::make(); gainmap->info = srcGainmap->info; const SkBitmap skSrcBitmap = srcGainmap->bitmap->getSkBitmap(); sk_sp<Bitmap> skBitmap(Bitmap::allocateHardwareBitmap(skSrcBitmap)); if (!skBitmap.get()) { return nullptr; } gainmap->bitmap = std::move(skBitmap); return gainmap; } } // namespace android::uirenderer No newline at end of file libs/hwui/Gainmap.h +1 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ class Gainmap : public LightRefBase<Gainmap> { public: SkGainmapInfo info; sk_sp<Bitmap> bitmap; static sp<Gainmap> allocateHardwareGainmap(const sp<Gainmap>& srcGainmap); }; } // namespace android::uirenderer libs/hwui/jni/Bitmap.cpp +3 −8 Original line number Diff line number Diff line Loading @@ -386,15 +386,10 @@ static jobject Bitmap_copy(JNIEnv* env, jobject, jlong srcHandle, jint dstConfig return NULL; } if (hasGainmap) { auto gainmap = sp<uirenderer::Gainmap>::make(); gainmap->info = original.gainmap()->info; const SkBitmap skSrcBitmap = original.gainmap()->bitmap->getSkBitmap(); sk_sp<Bitmap> skBitmap(Bitmap::allocateHardwareBitmap(skSrcBitmap)); if (!skBitmap.get()) { return NULL; auto gm = uirenderer::Gainmap::allocateHardwareGainmap(original.gainmap()); if (gm) { bitmap->setGainmap(std::move(gm)); } gainmap->bitmap = std::move(skBitmap); bitmap->setGainmap(std::move(gainmap)); } return createBitmap(env, bitmap.release(), getPremulBitmapCreateFlags(isMutable)); } Loading libs/hwui/jni/BitmapFactory.cpp +4 −1 Original line number Diff line number Diff line Loading @@ -637,7 +637,10 @@ static jobject doDecode(JNIEnv* env, std::unique_ptr<SkStreamRewindable> stream, return nullObjectReturn("Failed to allocate a hardware bitmap"); } if (hasGainmap) { hardwareBitmap->setGainmap(std::move(gainmap)); auto gm = uirenderer::Gainmap::allocateHardwareGainmap(gainmap); if (gm) { hardwareBitmap->setGainmap(std::move(gm)); } } return bitmap::createBitmap(env, hardwareBitmap.release(), bitmapCreateFlags, Loading Loading
libs/hwui/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -537,6 +537,7 @@ cc_defaults { "AnimatorManager.cpp", "CanvasTransform.cpp", "DamageAccumulator.cpp", "Gainmap.cpp", "Interpolator.cpp", "LightingInfo.cpp", "Matrix.cpp", Loading
libs/hwui/Gainmap.cpp 0 → 100644 +32 −0 Original line number Diff line number Diff line /** * Copyright (C) 2023 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "Gainmap.h" namespace android::uirenderer { sp<Gainmap> Gainmap::allocateHardwareGainmap(const sp<Gainmap>& srcGainmap) { auto gainmap = sp<Gainmap>::make(); gainmap->info = srcGainmap->info; const SkBitmap skSrcBitmap = srcGainmap->bitmap->getSkBitmap(); sk_sp<Bitmap> skBitmap(Bitmap::allocateHardwareBitmap(skSrcBitmap)); if (!skBitmap.get()) { return nullptr; } gainmap->bitmap = std::move(skBitmap); return gainmap; } } // namespace android::uirenderer No newline at end of file
libs/hwui/Gainmap.h +1 −0 Original line number Diff line number Diff line Loading @@ -27,6 +27,7 @@ class Gainmap : public LightRefBase<Gainmap> { public: SkGainmapInfo info; sk_sp<Bitmap> bitmap; static sp<Gainmap> allocateHardwareGainmap(const sp<Gainmap>& srcGainmap); }; } // namespace android::uirenderer
libs/hwui/jni/Bitmap.cpp +3 −8 Original line number Diff line number Diff line Loading @@ -386,15 +386,10 @@ static jobject Bitmap_copy(JNIEnv* env, jobject, jlong srcHandle, jint dstConfig return NULL; } if (hasGainmap) { auto gainmap = sp<uirenderer::Gainmap>::make(); gainmap->info = original.gainmap()->info; const SkBitmap skSrcBitmap = original.gainmap()->bitmap->getSkBitmap(); sk_sp<Bitmap> skBitmap(Bitmap::allocateHardwareBitmap(skSrcBitmap)); if (!skBitmap.get()) { return NULL; auto gm = uirenderer::Gainmap::allocateHardwareGainmap(original.gainmap()); if (gm) { bitmap->setGainmap(std::move(gm)); } gainmap->bitmap = std::move(skBitmap); bitmap->setGainmap(std::move(gainmap)); } return createBitmap(env, bitmap.release(), getPremulBitmapCreateFlags(isMutable)); } Loading
libs/hwui/jni/BitmapFactory.cpp +4 −1 Original line number Diff line number Diff line Loading @@ -637,7 +637,10 @@ static jobject doDecode(JNIEnv* env, std::unique_ptr<SkStreamRewindable> stream, return nullObjectReturn("Failed to allocate a hardware bitmap"); } if (hasGainmap) { hardwareBitmap->setGainmap(std::move(gainmap)); auto gm = uirenderer::Gainmap::allocateHardwareGainmap(gainmap); if (gm) { hardwareBitmap->setGainmap(std::move(gm)); } } return bitmap::createBitmap(env, hardwareBitmap.release(), bitmapCreateFlags, Loading