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

Commit 2826a20a authored by Orhan Uysal's avatar Orhan Uysal
Browse files

Instead of storing AppIconDrawable store bitmap.

Storing the AppIconDrawable itelf currently introduces around 2mb of
extra memory usage per window. Replace AppIconDrawable usage with bitmap
usage so that we don't need as much memory. Bitmap uses 45x45x8 bytes of
memory only.

Bug: 336026116
Test: Manual | Compare memory usage through heap dumps and perfetto
Change-Id: Ibed72b837aff08389506dfd65b1d4e486c7f3f9a
parent e9093b4f
Loading
Loading
Loading
Loading
+3 −5
Original line number Diff line number Diff line
@@ -107,8 +107,6 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin
    private MaximizeMenu mMaximizeMenu;

    private ResizeVeil mResizeVeil;

    private Drawable mAppIconDrawable;
    private Bitmap mAppIconBitmap;
    private CharSequence mAppName;

@@ -444,12 +442,12 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin
        }
        PackageManager pm = mContext.getApplicationContext().getPackageManager();
        final IconProvider provider = new IconProvider(mContext);
        mAppIconDrawable = provider.getIcon(activityInfo);
        final Drawable appIconDrawable = provider.getIcon(activityInfo);
        final Resources resources = mContext.getResources();
        final BaseIconFactory factory = new BaseIconFactory(mContext,
                resources.getDisplayMetrics().densityDpi,
                resources.getDimensionPixelSize(R.dimen.desktop_mode_caption_icon_radius));
        mAppIconBitmap = factory.createScaledBitmap(mAppIconDrawable, MODE_DEFAULT);
        mAppIconBitmap = factory.createScaledBitmap(appIconDrawable, MODE_DEFAULT);
        final ApplicationInfo applicationInfo = activityInfo.applicationInfo;
        mAppName = pm.getApplicationLabel(applicationInfo);
    }
@@ -467,7 +465,7 @@ public class DesktopModeWindowDecoration extends WindowDecoration<WindowDecorLin
     * until a resize event calls showResizeVeil below.
     */
    void createResizeVeil() {
        mResizeVeil = new ResizeVeil(mContext, mDisplayController, mAppIconDrawable, mTaskInfo,
        mResizeVeil = new ResizeVeil(mContext, mDisplayController, mAppIconBitmap, mTaskInfo,
                mTaskSurface, mSurfaceControlTransactionSupplier);
    }

+5 −5
Original line number Diff line number Diff line
@@ -24,11 +24,11 @@ import android.annotation.NonNull;
import android.app.ActivityManager.RunningTaskInfo;
import android.content.Context;
import android.content.res.Configuration;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.PixelFormat;
import android.graphics.PointF;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.view.Display;
import android.view.LayoutInflater;
import android.view.SurfaceControl;
@@ -64,7 +64,7 @@ public class ResizeVeil {
    private final SurfaceControlBuilderFactory mSurfaceControlBuilderFactory;
    private final WindowDecoration.SurfaceControlViewHostFactory mSurfaceControlViewHostFactory;
    private final SurfaceSession mSurfaceSession = new SurfaceSession();
    private final Drawable mAppIcon;
    private final Bitmap mAppIcon;
    private ImageView mIconView;
    private int mIconSize;
    private SurfaceControl mParentSurface;
@@ -97,7 +97,7 @@ public class ResizeVeil {

    public ResizeVeil(Context context,
            @NonNull DisplayController displayController,
            Drawable appIcon, RunningTaskInfo taskInfo,
            Bitmap appIcon, RunningTaskInfo taskInfo,
            SurfaceControl taskSurface,
            Supplier<SurfaceControl.Transaction> surfaceControlTransactionSupplier) {
        this(context,
@@ -112,7 +112,7 @@ public class ResizeVeil {

    public ResizeVeil(Context context,
            @NonNull DisplayController displayController,
            Drawable appIcon, RunningTaskInfo taskInfo,
            Bitmap appIcon, RunningTaskInfo taskInfo,
            SurfaceControl taskSurface,
            Supplier<SurfaceControl.Transaction> surfaceControlTransactionSupplier,
            SurfaceControlBuilderFactory surfaceControlBuilderFactory,
@@ -162,7 +162,7 @@ public class ResizeVeil {
        final View root = LayoutInflater.from(mContext)
                .inflate(R.layout.desktop_mode_resize_veil, null /* root */);
        mIconView = root.findViewById(R.id.veil_application_icon);
        mIconView.setImageDrawable(mAppIcon);
        mIconView.setImageBitmap(mAppIcon);

        final WindowManager.LayoutParams lp =
                new WindowManager.LayoutParams(
+2 −2
Original line number Diff line number Diff line
@@ -15,8 +15,8 @@
 */
package com.android.wm.shell.windowdecor

import android.graphics.Bitmap
import android.graphics.Rect
import android.graphics.drawable.Drawable
import android.testing.AndroidTestingRunner
import android.testing.TestableLooper
import android.view.Display
@@ -60,7 +60,7 @@ class ResizeVeilTest : ShellTestCase() {
    @Mock
    private lateinit var mockDisplayController: DisplayController
    @Mock
    private lateinit var mockAppIcon: Drawable
    private lateinit var mockAppIcon: Bitmap
    @Mock
    private lateinit var mockDisplay: Display
    @Mock