Recreate the bitmap cache when it is smaller than needed

fix:32780212

Test: Existing CTS and attached repro apk.

Change-Id: Ib908319af6539b2438b850f7a50d5a539cef8368
This commit is contained in:
Teng-Hui Zhu
2016-11-16 10:29:39 -08:00
parent 817695589c
commit 037fc1815b
2 changed files with 10 additions and 5 deletions

View File

@@ -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) {

View File

@@ -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);
}