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
This commit is contained in:
Jorim Jaggi
2017-05-02 14:10:58 +02:00
parent 0c21500920
commit 2dae85591d

View File

@@ -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);