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

Commit 797d80ee authored by Jernej Virag's avatar Jernej Virag
Browse files

Use ashmem memory to transport MediaDescription to other processes

This follows the pattern used by Icon objects (for e.g. Notifications) where contructing the object creates a shared memory Bitmap so updates and transport to other processes doesn't add extra large memory copies. This is important for things like album art which can be rather large (we see 1000x1000 bitmaps occasionally).

Bug: 288241280
Flag: ACONFIG com.android.media.performance.MEDIA_DESCRIPTION_ASHMEM_BITMAP DISABLED
Test: on cheetah with media applications
Change-Id: I6320b000ed4a3785b67c8574aa3ad3b3195ee273
parent ecabb7d6
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -81,6 +81,7 @@ aconfig_declarations_group {
        "com.android.internal.pm.pkg.component.flags-aconfig-java",
        "com.android.media.flags.bettertogether-aconfig-java",
        "com.android.media.flags.editing-aconfig-java",
        "com.android.media.flags.performance-aconfig-java",
        "com.android.media.flags.projection-aconfig-java",
        "com.android.net.thread.platform.flags-aconfig-java",
        "com.android.server.flags.services-aconfig-java",
@@ -533,6 +534,21 @@ java_aconfig_library {
    defaults: ["framework-minus-apex-aconfig-java-defaults"],
}

// Media Performance
aconfig_declarations {
    name: "com.android.media.flags.performance-aconfig",
    package: "com.android.media.performance.flags",
    srcs: [
        "media/java/android/media/flags/performance.aconfig",
    ],
}

java_aconfig_library {
    name: "com.android.media.flags.performance-aconfig-java",
    aconfig_declarations: "com.android.media.flags.performance-aconfig",
    defaults: ["framework-minus-apex-aconfig-java-defaults"],
}

// Media TV
aconfig_declarations {
    name: "android.media.tv.flags-aconfig",
+8 −2
Original line number Diff line number Diff line
@@ -397,8 +397,14 @@ public class MediaDescription implements Parcelable {
         * @return a new media description.
         */
        public MediaDescription build() {
            return new MediaDescription(mMediaId, mTitle, mSubtitle, mDescription, mIcon, mIconUri,
                    mExtras, mMediaUri);
            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);
            }
        }
    }
}
+11 −0
Original line number Diff line number Diff line
package: "com.android.media.performance.flags"

flag {
    name: "media_description_ashmem_bitmap"
    namespace: "systemui"
    description: "Use ashmem to pass bitmaps in MediaDescription to avoid excessive Bitmap copies."
    bug: "288241280"
    metadata {
      purpose: PURPOSE_BUGFIX
    }
}