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

Commit 2dae8559 authored by Jorim Jaggi's avatar Jorim Jaggi
Browse files

Avoid reading HW bitmap pixels twice

Both createScaledBitmap and compress read it back to regular
memory. Avoid that by creating an intermediate software bitmap.

Test: TaskSnapshotPersisterLoaderTest
Bug: 37631016
Change-Id: Id03fa3f6a827d3bd39f8fe4fddfc2d32139dac9b
parent 0c215009
Loading
Loading
Loading
Loading
+4 −2
Original line number Diff line number Diff line
@@ -24,6 +24,7 @@ import android.annotation.TestApi;
import android.app.ActivityManager.TaskSnapshot;
import android.graphics.Bitmap;
import android.graphics.Bitmap.CompressFormat;
import android.graphics.Bitmap.Config;
import android.os.Process;
import android.os.SystemClock;
import android.util.ArraySet;
@@ -266,12 +267,13 @@ class TaskSnapshotPersister {
            final File file = getBitmapFile(mTaskId, mUserId);
            final File reducedFile = getReducedResolutionBitmapFile(mTaskId, mUserId);
            final Bitmap bitmap = Bitmap.createHardwareBitmap(mSnapshot.getSnapshot());
            final Bitmap reduced = Bitmap.createScaledBitmap(bitmap,
            final Bitmap swBitmap = bitmap.copy(Config.ARGB_8888, false /* isMutable */);
            final Bitmap reduced = Bitmap.createScaledBitmap(swBitmap,
                    (int) (bitmap.getWidth() * REDUCED_SCALE),
                    (int) (bitmap.getHeight() * REDUCED_SCALE), true /* filter */);
            try {
                FileOutputStream fos = new FileOutputStream(file);
                bitmap.compress(JPEG, QUALITY, fos);
                swBitmap.compress(JPEG, QUALITY, fos);
                fos.close();
                FileOutputStream reducedFos = new FileOutputStream(reducedFile);
                reduced.compress(JPEG, QUALITY, reducedFos);