summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--services/core/java/com/android/server/wm/ActivityRecord.java7
-rw-r--r--services/core/java/com/android/server/wm/DisplayContent.java11
-rw-r--r--services/core/java/com/android/server/wm/TaskScreenshotAnimatable.java12
-rw-r--r--services/core/java/com/android/server/wm/WindowContainerThumbnail.java38
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/WindowContainerThumbnailTest.java7
5 files changed, 28 insertions, 47 deletions
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java
index f279221f768c..ef54e8e6d750 100644
--- a/services/core/java/com/android/server/wm/ActivityRecord.java
+++ b/services/core/java/com/android/server/wm/ActivityRecord.java
@@ -6405,8 +6405,8 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
}
clearThumbnail();
final Transaction transaction = getAnimatingContainer().getPendingTransaction();
- mThumbnail = new WindowContainerThumbnail(mWmService.mSurfaceFactory,
- transaction, getAnimatingContainer(), thumbnailHeader);
+ mThumbnail = new WindowContainerThumbnail(transaction, getAnimatingContainer(),
+ thumbnailHeader);
mThumbnail.startAnimation(transaction, loadThumbnailAnimation(thumbnailHeader));
}
@@ -6435,8 +6435,7 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
return;
}
final Transaction transaction = getPendingTransaction();
- mThumbnail = new WindowContainerThumbnail(mWmService.mSurfaceFactory,
- transaction, getTask(), thumbnail);
+ mThumbnail = new WindowContainerThumbnail(transaction, getTask(), thumbnail);
final Animation animation =
getDisplayContent().mAppTransition.createCrossProfileAppsThumbnailAnimationLocked(
frame);
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java
index c44f4e3cbd71..f017c0afd630 100644
--- a/services/core/java/com/android/server/wm/DisplayContent.java
+++ b/services/core/java/com/android/server/wm/DisplayContent.java
@@ -154,6 +154,8 @@ import android.content.pm.ActivityInfo.ScreenOrientation;
import android.content.res.CompatibilityInfo;
import android.content.res.Configuration;
import android.graphics.Bitmap;
+import android.graphics.ColorSpace;
+import android.graphics.GraphicBuffer;
import android.graphics.Insets;
import android.graphics.Point;
import android.graphics.Rect;
@@ -3821,7 +3823,7 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
final ActivityRecord activity = mImeLayeringTarget.mActivityRecord;
final SurfaceControl imeSurface = mWmService.mSurfaceControlFactory.apply(null)
.setName("IME-snapshot-surface")
- .setBufferSize(buffer.getWidth(), buffer.getHeight())
+ .setBLASTLayer()
.setFormat(buffer.getFormat())
.setParent(activity.getSurfaceControl())
.setCallsite("DisplayContent.attachAndShowImeScreenshotOnTarget")
@@ -3829,10 +3831,9 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp
// Make IME snapshot as trusted overlay
InputMonitor.setTrustedOverlayInputInfo(imeSurface, t, getDisplayId(),
"IME-snapshot-surface");
- Surface surface = mWmService.mSurfaceFactory.get();
- surface.copyFrom(imeSurface);
- surface.attachAndQueueBufferWithColorSpace(buffer, null);
- surface.release();
+ GraphicBuffer graphicBuffer = GraphicBuffer.createFromHardwareBuffer(buffer);
+ t.setBuffer(imeSurface, graphicBuffer);
+ t.setColorSpace(mSurfaceControl, ColorSpace.get(ColorSpace.Named.SRGB));
t.setRelativeLayer(imeSurface, activity.getSurfaceControl(), 1);
t.setPosition(imeSurface, mInputMethodWindow.getDisplayFrame().left,
mInputMethodWindow.getDisplayFrame().top);
diff --git a/services/core/java/com/android/server/wm/TaskScreenshotAnimatable.java b/services/core/java/com/android/server/wm/TaskScreenshotAnimatable.java
index 1779d2a394eb..7e992ac263bc 100644
--- a/services/core/java/com/android/server/wm/TaskScreenshotAnimatable.java
+++ b/services/core/java/com/android/server/wm/TaskScreenshotAnimatable.java
@@ -17,8 +17,8 @@ package com.android.server.wm;
import static com.android.internal.protolog.ProtoLogGroup.WM_DEBUG_RECENTS_ANIMATIONS;
+import android.graphics.GraphicBuffer;
import android.hardware.HardwareBuffer;
-import android.view.Surface;
import android.view.SurfaceControl;
import android.view.SurfaceSession;
@@ -51,14 +51,14 @@ class TaskScreenshotAnimatable implements SurfaceAnimator.Animatable {
task, mWidth, mHeight);
mSurfaceControl = surfaceControlFactory.apply(new SurfaceSession())
.setName("RecentTaskScreenshotSurface")
- .setBufferSize(mWidth, mHeight)
+ .setBLASTLayer()
.setCallsite("TaskScreenshotAnimatable")
.build();
if (buffer != null) {
- final Surface surface = new Surface();
- surface.copyFrom(mSurfaceControl);
- surface.attachAndQueueBufferWithColorSpace(buffer, screenshotBuffer.getColorSpace());
- surface.release();
+ GraphicBuffer graphicBuffer = GraphicBuffer.createFromHardwareBuffer(buffer);
+ getPendingTransaction().setBuffer(mSurfaceControl, graphicBuffer);
+ getPendingTransaction().setColorSpace(mSurfaceControl,
+ screenshotBuffer.getColorSpace());
final float scale = 1.0f * mTask.getBounds().width() / mWidth;
getPendingTransaction().setMatrix(mSurfaceControl, scale, 0, 0, scale);
}
diff --git a/services/core/java/com/android/server/wm/WindowContainerThumbnail.java b/services/core/java/com/android/server/wm/WindowContainerThumbnail.java
index b9f67a590c2a..7f21eeb43d59 100644
--- a/services/core/java/com/android/server/wm/WindowContainerThumbnail.java
+++ b/services/core/java/com/android/server/wm/WindowContainerThumbnail.java
@@ -28,12 +28,13 @@ import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME
import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
import static com.android.server.wm.WindowManagerService.MAX_ANIMATION_DURATION;
+import android.graphics.ColorSpace;
+import android.graphics.GraphicBuffer;
import android.graphics.PixelFormat;
import android.graphics.Point;
import android.hardware.HardwareBuffer;
import android.os.Process;
import android.util.proto.ProtoOutputStream;
-import android.view.Surface;
import android.view.SurfaceControl;
import android.view.SurfaceControl.Builder;
import android.view.SurfaceControl.Transaction;
@@ -43,8 +44,6 @@ import com.android.internal.protolog.common.ProtoLog;
import com.android.server.wm.SurfaceAnimator.Animatable;
import com.android.server.wm.SurfaceAnimator.AnimationType;
-import java.util.function.Supplier;
-
/**
* Represents a surface that is displayed over a subclass of {@link WindowContainer}
*/
@@ -57,30 +56,20 @@ class WindowContainerThumbnail implements Animatable {
private final SurfaceAnimator mSurfaceAnimator;
private final int mWidth;
private final int mHeight;
- private final boolean mRelative;
-
- WindowContainerThumbnail(Supplier<Surface> surfaceFactory, Transaction t,
- WindowContainer container, HardwareBuffer thumbnailHeader) {
- this(surfaceFactory, t, container, thumbnailHeader, false /* relative */);
- }
/**
* @param t Transaction to create the thumbnail in.
* @param container The sub-class of {@link WindowContainer} to associate this thumbnail with.
* @param thumbnailHeader A thumbnail or placeholder for thumbnail to initialize with.
- * @param relative Whether this thumbnail will be a child of the container (and thus positioned
- * relative to it) or not.
*/
- WindowContainerThumbnail(Supplier<Surface> surfaceFactory, Transaction t,
- WindowContainer container, HardwareBuffer thumbnailHeader, boolean relative) {
- this(t, container, thumbnailHeader, relative, surfaceFactory.get(), null);
+ WindowContainerThumbnail(Transaction t, WindowContainer container,
+ HardwareBuffer thumbnailHeader) {
+ this(t, container, thumbnailHeader, null /* animator */);
}
WindowContainerThumbnail(Transaction t, WindowContainer container,
- HardwareBuffer thumbnailHeader, boolean relative, Surface drawSurface,
- SurfaceAnimator animator) {
+ HardwareBuffer thumbnailHeader, SurfaceAnimator animator) {
mWindowContainer = container;
- mRelative = relative;
if (animator != null) {
mSurfaceAnimator = animator;
} else {
@@ -99,7 +88,7 @@ class WindowContainerThumbnail implements Animatable {
// this to the task.
mSurfaceControl = mWindowContainer.makeChildSurface(mWindowContainer.getTopChild())
.setName("thumbnail anim: " + mWindowContainer.toString())
- .setBufferSize(mWidth, mHeight)
+ .setBLASTLayer()
.setFormat(PixelFormat.TRANSLUCENT)
.setMetadata(METADATA_WINDOW_TYPE, mWindowContainer.getWindowingMode())
.setMetadata(METADATA_OWNER_UID, Process.myUid())
@@ -108,18 +97,14 @@ class WindowContainerThumbnail implements Animatable {
ProtoLog.i(WM_SHOW_TRANSACTIONS, " THUMBNAIL %s: CREATE", mSurfaceControl);
- // Transfer the thumbnail to the surface
- drawSurface.copyFrom(mSurfaceControl);
- drawSurface.attachAndQueueBufferWithColorSpace(thumbnailHeader, null);
- drawSurface.release();
+ GraphicBuffer graphicBuffer = GraphicBuffer.createFromHardwareBuffer(thumbnailHeader);
+ t.setBuffer(mSurfaceControl, graphicBuffer);
+ t.setColorSpace(mSurfaceControl, ColorSpace.get(ColorSpace.Named.SRGB));
t.show(mSurfaceControl);
// We parent the thumbnail to the container, and just place it on top of anything else in
// the container.
t.setLayer(mSurfaceControl, Integer.MAX_VALUE);
- if (relative) {
- t.reparent(mSurfaceControl, mWindowContainer.getSurfaceControl());
- }
}
void startAnimation(Transaction t, Animation anim) {
@@ -194,9 +179,6 @@ class WindowContainerThumbnail implements Animatable {
@Override
public void onAnimationLeashCreated(Transaction t, SurfaceControl leash) {
t.setLayer(leash, Integer.MAX_VALUE);
- if (mRelative) {
- t.reparent(leash, mWindowContainer.getSurfaceControl());
- }
}
@Override
diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowContainerThumbnailTest.java b/services/tests/wmtests/src/com/android/server/wm/WindowContainerThumbnailTest.java
index 212ffd57b152..0b1b877c27de 100644
--- a/services/tests/wmtests/src/com/android/server/wm/WindowContainerThumbnailTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/WindowContainerThumbnailTest.java
@@ -18,14 +18,13 @@ package com.android.server.wm;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.mock;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.when;
-import static org.mockito.ArgumentMatchers.any;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
+import static org.mockito.ArgumentMatchers.any;
import android.hardware.HardwareBuffer;
import android.platform.test.annotations.Presubmit;
-import android.view.Surface;
import androidx.test.filters.FlakyTest;
import androidx.test.filters.SmallTest;
@@ -51,8 +50,8 @@ public class WindowContainerThumbnailTest extends WindowTestsBase {
when(mockAr.getPendingTransaction()).thenReturn(new StubTransaction());
when(mockAr.makeChildSurface(any())).thenReturn(new MockSurfaceControlBuilder());
when(mockAr.makeSurface()).thenReturn(new MockSurfaceControlBuilder());
- return new WindowContainerThumbnail(new StubTransaction(), mockAr,
- buffer, false, mock(Surface.class), mock(SurfaceAnimator.class));
+ return new WindowContainerThumbnail(new StubTransaction(), mockAr, buffer,
+ mock(SurfaceAnimator.class));
}
@Test