Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ec67cd33 authored by Eric Miao's avatar Eric Miao
Browse files

Keep ashmem bitmap in MediaDescription#setIconBitmap()

When flag "media_description_ashmem_bitmap" is enabled,
`MediaDescription#build()` will call `Bitmap#asShared` for the icon
bitmap when flag "media_description_ashmem_bitmap" is enabled. This
improves performance by using ashmem for subsequent parcelings of
the bitmap.  However, when `MediaDescription#build()` is called
multiple times, multiple ashmem bitmaps will be created as part of
multiple callings of `Bitmap#asShared()`. This change fixes this
problem by keeping the ashmem bitmap directly in `setIconBitmap()`.

Bug: 415375145
Flag: EXEMPT - bugfix

Change-Id: I43af899d73e9d06a4a1fb440a55a6ac942b4affb
parent 4c922b1d
Loading
Loading
Loading
Loading
+4 −8
Original line number Diff line number Diff line
@@ -25,6 +25,8 @@ import android.os.Parcel;
import android.os.Parcelable;
import android.text.TextUtils;

import com.android.media.performance.flags.Flags;

/**
 * A simple set of metadata for a media item suitable for display. This can be
 * created using the Builder or retrieved from existing metadata using
@@ -353,7 +355,7 @@ public class MediaDescription implements Parcelable {
         * @return this
         */
        public Builder setIconBitmap(@Nullable Bitmap icon) {
            mIcon = icon;
            mIcon = (icon != null && Flags.mediaDescriptionAshmemBitmap()) ? icon.asShared() : icon;
            return this;
        }

@@ -397,14 +399,8 @@ public class MediaDescription implements Parcelable {
         * @return a new media description.
         */
        public MediaDescription build() {
            if (com.android.media.performance.flags.Flags.mediaDescriptionAshmemBitmap()) {
                Bitmap icon = mIcon != null ? mIcon.asShared() : null;
                return new MediaDescription(mMediaId, mTitle, mSubtitle, mDescription, icon,
                        mIconUri, mExtras, mMediaUri);
            } else {
            return new MediaDescription(mMediaId, mTitle, mSubtitle, mDescription, mIcon,
                        mIconUri, mExtras, mMediaUri);
        }
    }
}
}