Workaround for crash from invalid snapshot

- wrapHardwareBuffer will throw an illegal argument exception when
  the buffer doesn't have this flag, but it's not clear how this
  happens yet because all the buffers should be from surface flinger
  snapshots...

Bug: 157562905
Test: Manual
Change-Id: I48be367d8aafb3e17f11a73a73432617a247c0dd
Merged-In: I48be367d8aafb3e17f11a73a73432617a247c0dd
This commit is contained in:
Winson Chung
2020-06-17 17:16:01 -07:00
parent 410ddb9100
commit c8ba260b4d

View File

@@ -18,12 +18,17 @@ package com.android.systemui.shared.recents.model;
import static android.app.WindowConfiguration.ROTATION_UNDEFINED;
import static android.content.res.Configuration.ORIENTATION_UNDEFINED;
import static android.graphics.Bitmap.Config.ARGB_8888;
import static com.android.systemui.shared.system.WindowManagerWrapper.WINDOWING_MODE_UNDEFINED;
import android.app.ActivityManager.TaskSnapshot;
import android.graphics.Bitmap;
import android.graphics.Color;
import android.graphics.GraphicBuffer;
import android.graphics.Rect;
import android.hardware.HardwareBuffer;
import android.util.Log;
/**
* Data for a single thumbnail.
@@ -57,7 +62,15 @@ public class ThumbnailData {
}
public ThumbnailData(TaskSnapshot snapshot) {
thumbnail = Bitmap.wrapHardwareBuffer(snapshot.getSnapshot(), snapshot.getColorSpace());
final GraphicBuffer buffer = snapshot.getSnapshot();
if (buffer != null && (buffer.getUsage() & HardwareBuffer.USAGE_GPU_SAMPLED_IMAGE) == 0) {
// TODO(b/157562905): Workaround for a crash when we get a snapshot without this state
Log.e("ThumbnailData", "Unexpected snapshot without USAGE_GPU_SAMPLED_IMAGE");
thumbnail = Bitmap.createBitmap(buffer.getWidth(), buffer.getHeight(), ARGB_8888);
thumbnail.eraseColor(Color.BLACK);
} else {
thumbnail = Bitmap.wrapHardwareBuffer(buffer, snapshot.getColorSpace());
}
insets = new Rect(snapshot.getContentInsets());
orientation = snapshot.getOrientation();
rotation = snapshot.getRotation();