Merge "Use ashmem backed bitmaps for passing around notifications" into mnc-dev

This commit is contained in:
Daniel Sandler
2015-06-24 02:09:56 +00:00
committed by Android (Google) Code Review
2 changed files with 35 additions and 2 deletions

View File

@@ -3586,12 +3586,19 @@ public class Notification implements Parcelable
* object.
*/
public Notification build() {
if (mSmallIcon != null) {
mSmallIcon.convertToAshmem();
}
if (mLargeIcon != null) {
mLargeIcon.convertToAshmem();
}
mOriginatingUserId = mContext.getUserId();
mHasThreeLines = hasThreeLines();
Notification n = buildUnstyled();
if (mStyle != null) {
mStyle.purgeResources();
n = mStyle.buildStyled(n);
}
@@ -3790,6 +3797,8 @@ public class Notification implements Parcelable
return wip;
}
public void purgeResources() {}
// The following methods are split out so we can re-create notification partially.
/**
* @hide
@@ -3901,8 +3910,18 @@ public class Notification implements Parcelable
return this;
}
private RemoteViews makeBigContentView() {
@Override
public void purgeResources() {
super.purgeResources();
if (mPicture != null && mPicture.isMutable()) {
mPicture = mPicture.createAshmemBitmap();
}
if (mBigLargeIcon != null) {
mBigLargeIcon.convertToAshmem();
}
}
private RemoteViews makeBigContentView() {
// Replace mLargeIcon with mBigLargeIcon if mBigLargeIconSet
// This covers the following cases:
// 1. mBigLargeIconSet -> mBigLargeIcon (null or non-null) applies, overrides

View File

@@ -109,6 +109,10 @@ public final class Icon implements Parcelable {
return (Bitmap) mObj1;
}
private void setBitmap(Bitmap b) {
mObj1 = b;
}
/**
* @return The length of the compressed bitmap byte array held by this {@link #TYPE_DATA} Icon.
* @hide
@@ -346,6 +350,16 @@ public final class Icon implements Parcelable {
return loadDrawable(context);
}
/**
* Puts the memory used by this instance into Ashmem memory, if possible.
* @hide
*/
public void convertToAshmem() {
if (mType == TYPE_BITMAP && getBitmap().isMutable()) {
setBitmap(getBitmap().createAshmemBitmap());
}
}
/**
* Writes a serialized version of an Icon to the specified stream.
*
@@ -466,7 +480,7 @@ public final class Icon implements Parcelable {
throw new IllegalArgumentException("Bitmap must not be null.");
}
final Icon rep = new Icon(TYPE_BITMAP);
rep.mObj1 = bits;
rep.setBitmap(bits);
return rep;
}