diff options
| author | 2016-11-16 10:29:39 -0800 | |
|---|---|---|
| committer | 2016-11-16 13:01:02 -0800 | |
| commit | 037fc1815b0f69b0b24e68e16281b490bdeb1d56 (patch) | |
| tree | b1fde958597714077f20cc65fc57464a6477de6c | |
| parent | 817695589c80cfc0913d94e3dd52dac2782e8ed6 (diff) | |
Recreate the bitmap cache when it is smaller than needed
fix:32780212
Test: Existing CTS and attached repro apk.
Change-Id: Ib908319af6539b2438b850f7a50d5a539cef8368
| -rw-r--r-- | libs/hwui/VectorDrawable.cpp | 2 | ||||
| -rw-r--r-- | libs/hwui/VectorDrawable.h | 13 |
2 files changed, 10 insertions, 5 deletions
diff --git a/libs/hwui/VectorDrawable.cpp b/libs/hwui/VectorDrawable.cpp index b50647adc0be..8a8f26707845 100644 --- a/libs/hwui/VectorDrawable.cpp +++ b/libs/hwui/VectorDrawable.cpp @@ -574,7 +574,7 @@ bool Tree::allocateBitmapIfNeeded(Cache& cache, int width, int height) { } bool Tree::canReuseBitmap(Bitmap* bitmap, int width, int height) { - return bitmap && width == bitmap->width() && height == bitmap->height(); + return bitmap && width <= bitmap->width() && height <= bitmap->height(); } void Tree::onPropertyChanged(TreeProperties* prop) { diff --git a/libs/hwui/VectorDrawable.h b/libs/hwui/VectorDrawable.h index e9a9c719975a..8244a3911183 100644 --- a/libs/hwui/VectorDrawable.h +++ b/libs/hwui/VectorDrawable.h @@ -630,10 +630,15 @@ public: } void setScaledSize(int width, int height) { - if (mNonAnimatableProperties.scaledWidth != width - || mNonAnimatableProperties.scaledHeight != height) { - mNonAnimatableProperties.scaledWidth = width; - mNonAnimatableProperties.scaledHeight = height; + // If the requested size is bigger than what the bitmap was, then + // we increase the bitmap size to match. The width and height + // are bound by MAX_CACHED_BITMAP_SIZE. + if (mNonAnimatableProperties.scaledWidth < width + || mNonAnimatableProperties.scaledHeight < height) { + mNonAnimatableProperties.scaledWidth = std::max(width, + mNonAnimatableProperties.scaledWidth); + mNonAnimatableProperties.scaledHeight = std::max(height, + mNonAnimatableProperties.scaledHeight); mNonAnimatablePropertiesDirty = true; mTree->onPropertyChanged(this); } |