From 1f770ee834ba700e926b56c7ec948430ddb43793 Mon Sep 17 00:00:00 2001 From: Winson Chung Date: Wed, 23 Jun 2021 23:49:42 -0700 Subject: [PATCH] Fix strictmode error logs due to task snapshot hw buffer not being closed - Wrapping the buffer into a bitmap will add a reference so we can close the buffer once we convert the TaskSnapshot into a ThumbnailData - Also probably shouldn't be creating a new ThumbnailData for each local task stack listener (most of whom don't actually handle this method) Fixes: 165825625 Test: Check logs Change-Id: I4d881721692a960ac40be848e49188afddbbc9c3 --- .../android/systemui/shared/recents/model/ThumbnailData.java | 5 ++--- .../systemui/shared/system/TaskStackChangeListeners.java | 5 +++-- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/recents/model/ThumbnailData.java b/packages/SystemUI/shared/src/com/android/systemui/shared/recents/model/ThumbnailData.java index 7dc537c345e0e..6594d5f51af3c 100644 --- a/packages/SystemUI/shared/src/com/android/systemui/shared/recents/model/ThumbnailData.java +++ b/packages/SystemUI/shared/src/com/android/systemui/shared/recents/model/ThumbnailData.java @@ -62,16 +62,15 @@ public class ThumbnailData { } private static Bitmap makeThumbnail(TaskSnapshot snapshot) { - final HardwareBuffer buffer = snapshot.getHardwareBuffer(); Bitmap thumbnail = null; - try { + try (final HardwareBuffer buffer = snapshot.getHardwareBuffer()) { if (buffer != null) { thumbnail = Bitmap.wrapHardwareBuffer(buffer, snapshot.getColorSpace()); } } catch (IllegalArgumentException ex) { // 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: " - + buffer, ex); + + snapshot.getHardwareBuffer(), ex); } if (thumbnail == null) { Point taskSize = snapshot.getTaskSize(); diff --git a/packages/SystemUI/shared/src/com/android/systemui/shared/system/TaskStackChangeListeners.java b/packages/SystemUI/shared/src/com/android/systemui/shared/system/TaskStackChangeListeners.java index b3a29a3fec78a..b5019b426ad52 100644 --- a/packages/SystemUI/shared/src/com/android/systemui/shared/system/TaskStackChangeListeners.java +++ b/packages/SystemUI/shared/src/com/android/systemui/shared/system/TaskStackChangeListeners.java @@ -292,9 +292,10 @@ public class TaskStackChangeListeners { } case ON_TASK_SNAPSHOT_CHANGED: { Trace.beginSection("onTaskSnapshotChanged"); + final TaskSnapshot snapshot = (TaskSnapshot) msg.obj; + final ThumbnailData thumbnail = new ThumbnailData(snapshot); for (int i = mTaskStackListeners.size() - 1; i >= 0; i--) { - mTaskStackListeners.get(i).onTaskSnapshotChanged(msg.arg1, - new ThumbnailData((TaskSnapshot) msg.obj)); + mTaskStackListeners.get(i).onTaskSnapshotChanged(msg.arg1, thumbnail); } Trace.endSection(); break;