From 797d80ee9010a0d1fc1c4ae14e6cdc51b3643ce7 Mon Sep 17 00:00:00 2001 From: Jernej Virag <jernej@google.com> Date: Thu, 22 Feb 2024 14:30:58 +0100 Subject: [PATCH] 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 --- AconfigFlags.bp | 16 ++++++++++++++++ media/java/android/media/MediaDescription.java | 10 ++++++++-- .../java/android/media/flags/performance.aconfig | 11 +++++++++++ 3 files changed, 35 insertions(+), 2 deletions(-) create mode 100644 media/java/android/media/flags/performance.aconfig diff --git a/AconfigFlags.bp b/AconfigFlags.bp index 14658e5d9e4f..e3714df07441 100644 --- a/AconfigFlags.bp +++ b/AconfigFlags.bp @@ -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", diff --git a/media/java/android/media/MediaDescription.java b/media/java/android/media/MediaDescription.java index dece6bdbb35f..ec95279f48f1 100644 --- a/media/java/android/media/MediaDescription.java +++ b/media/java/android/media/MediaDescription.java @@ -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); + } } } } diff --git a/media/java/android/media/flags/performance.aconfig b/media/java/android/media/flags/performance.aconfig new file mode 100644 index 000000000000..9e9197ef5039 --- /dev/null +++ b/media/java/android/media/flags/performance.aconfig @@ -0,0 +1,11 @@ +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 + } +} -- GitLab