summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Jorim Jaggi <jjaggi@google.com> 2020-06-26 23:58:17 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2020-06-26 23:58:17 +0000
commit37cf2279c9df2cadcc489467be77a635354f940c (patch)
tree2874fbbf400f95240c2aa7a9a4c837c1cecfde0a
parentb56a22487f9b492a70e5c8d79962cedb6f145568 (diff)
parentd42ab1b93834292f234b314317794194d338c896 (diff)
Merge "Pass in callsite of SurfaceControl constructor explicitly (1/3)" into rvc-dev
-rw-r--r--api/test-current.txt2
-rw-r--r--core/java/android/os/StrictMode.java7
-rw-r--r--core/java/android/os/strictmode/LeakedClosableViolation.java5
-rw-r--r--core/java/android/view/InsetsSourceControl.java2
-rw-r--r--core/java/android/view/SurfaceControl.java42
-rw-r--r--core/java/android/view/SurfaceControlViewHost.java7
-rw-r--r--core/java/android/view/SurfaceView.java2
-rw-r--r--core/java/android/view/View.java1
-rw-r--r--core/java/android/view/ViewRootImpl.java1
-rw-r--r--core/java/android/view/WindowlessWindowManager.java5
-rw-r--r--core/java/android/widget/Magnifier.java1
-rw-r--r--core/java/android/window/TaskEmbedder.java1
-rw-r--r--core/tests/coretests/src/android/view/InsetsControllerTest.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/stackdivider/SplitScreenTaskOrganizer.java8
-rw-r--r--services/core/java/com/android/server/display/ColorFade.java5
-rw-r--r--services/core/java/com/android/server/wm/AccessibilityController.java1
-rw-r--r--services/core/java/com/android/server/wm/ActivityRecord.java3
-rw-r--r--services/core/java/com/android/server/wm/BlackFrame.java1
-rw-r--r--services/core/java/com/android/server/wm/Dimmer.java1
-rw-r--r--services/core/java/com/android/server/wm/DisplayAreaOrganizerController.java3
-rw-r--r--services/core/java/com/android/server/wm/DisplayContent.java7
-rw-r--r--services/core/java/com/android/server/wm/DragState.java4
-rw-r--r--services/core/java/com/android/server/wm/EmulatorDisplayOverlay.java1
-rw-r--r--services/core/java/com/android/server/wm/InputConsumerImpl.java6
-rw-r--r--services/core/java/com/android/server/wm/Letterbox.java8
-rw-r--r--services/core/java/com/android/server/wm/ScreenRotationAnimation.java3
-rw-r--r--services/core/java/com/android/server/wm/ShellRoot.java5
-rw-r--r--services/core/java/com/android/server/wm/StrictModeFlash.java1
-rw-r--r--services/core/java/com/android/server/wm/SurfaceAnimator.java3
-rw-r--r--services/core/java/com/android/server/wm/SurfaceFreezer.java1
-rw-r--r--services/core/java/com/android/server/wm/TaskDisplayArea.java4
-rw-r--r--services/core/java/com/android/server/wm/TaskOrganizerController.java3
-rw-r--r--services/core/java/com/android/server/wm/TaskPositioningController.java4
-rw-r--r--services/core/java/com/android/server/wm/TaskScreenshotAnimatable.java1
-rw-r--r--services/core/java/com/android/server/wm/TaskSnapshotSurface.java1
-rw-r--r--services/core/java/com/android/server/wm/Watermark.java1
-rw-r--r--services/core/java/com/android/server/wm/WindowContainer.java2
-rw-r--r--services/core/java/com/android/server/wm/WindowContainerThumbnail.java1
-rw-r--r--services/core/java/com/android/server/wm/WindowManagerService.java2
-rw-r--r--services/core/java/com/android/server/wm/WindowOrganizerController.java3
-rw-r--r--services/core/java/com/android/server/wm/WindowSurfaceController.java8
-rw-r--r--services/robotests/src/com/android/server/testing/shadows/ShadowCloseGuard.java5
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/LetterboxTest.java1
43 files changed, 131 insertions, 44 deletions
diff --git a/api/test-current.txt b/api/test-current.txt
index 7fd56984799f..3838bad57aa7 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -5149,7 +5149,7 @@ package android.view {
}
public final class SurfaceControl implements android.os.Parcelable {
- ctor public SurfaceControl(@NonNull android.view.SurfaceControl);
+ ctor public SurfaceControl(@NonNull android.view.SurfaceControl, @NonNull String);
method public static long acquireFrameRateFlexibilityToken();
method public boolean isSameSurface(@NonNull android.view.SurfaceControl);
method public static void releaseFrameRateFlexibilityToken(long);
diff --git a/core/java/android/os/StrictMode.java b/core/java/android/os/StrictMode.java
index 8d65c92db52e..257bc5b64285 100644
--- a/core/java/android/os/StrictMode.java
+++ b/core/java/android/os/StrictMode.java
@@ -1918,9 +1918,16 @@ public final class StrictMode {
}
private static class AndroidCloseGuardReporter implements CloseGuard.Reporter {
+
+ @Override
public void report(String message, Throwable allocationSite) {
onVmPolicyViolation(new LeakedClosableViolation(message, allocationSite));
}
+
+ @Override
+ public void report(String message) {
+ onVmPolicyViolation(new LeakedClosableViolation(message));
+ }
}
/** Called from Parcel.writeNoException() */
diff --git a/core/java/android/os/strictmode/LeakedClosableViolation.java b/core/java/android/os/strictmode/LeakedClosableViolation.java
index c795a6b89ec0..a2b02833afa0 100644
--- a/core/java/android/os/strictmode/LeakedClosableViolation.java
+++ b/core/java/android/os/strictmode/LeakedClosableViolation.java
@@ -21,4 +21,9 @@ public final class LeakedClosableViolation extends Violation {
super(message);
initCause(allocationSite);
}
+
+ /** @hide */
+ public LeakedClosableViolation(String message) {
+ super(message);
+ }
}
diff --git a/core/java/android/view/InsetsSourceControl.java b/core/java/android/view/InsetsSourceControl.java
index 2c2ecd504519..51b49214387a 100644
--- a/core/java/android/view/InsetsSourceControl.java
+++ b/core/java/android/view/InsetsSourceControl.java
@@ -45,7 +45,7 @@ public class InsetsSourceControl implements Parcelable {
public InsetsSourceControl(InsetsSourceControl other) {
mType = other.mType;
if (other.mLeash != null) {
- mLeash = new SurfaceControl(other.mLeash);
+ mLeash = new SurfaceControl(other.mLeash, "InsetsSourceControl");
} else {
mLeash = null;
}
diff --git a/core/java/android/view/SurfaceControl.java b/core/java/android/view/SurfaceControl.java
index daeb1c9c1e01..87b2f4b46df7 100644
--- a/core/java/android/view/SurfaceControl.java
+++ b/core/java/android/view/SurfaceControl.java
@@ -499,14 +499,12 @@ public final class SurfaceControl implements Parcelable {
private static final int INTERNAL_DATASPACE_DISPLAY_P3 = 143261696;
private static final int INTERNAL_DATASPACE_SCRGB = 411107328;
- private void assignNativeObject(long nativeObject) {
+ private void assignNativeObject(long nativeObject, String callsite) {
if (mNativeObject != 0) {
release();
}
if (nativeObject != 0) {
- Trace.traceBegin(Trace.TRACE_TAG_WINDOW_MANAGER, "closeGuard");
- mCloseGuard.open("release");
- Trace.traceEnd(Trace.TRACE_TAG_WINDOW_MANAGER);
+ mCloseGuard.openWithCallSite("release", callsite);
}
mNativeObject = nativeObject;
mNativeHandle = mNativeObject != 0 ? nativeGetHandle(nativeObject) : 0;
@@ -515,12 +513,12 @@ public final class SurfaceControl implements Parcelable {
/**
* @hide
*/
- public void copyFrom(@NonNull SurfaceControl other) {
+ public void copyFrom(@NonNull SurfaceControl other, String callsite) {
mName = other.mName;
mWidth = other.mWidth;
mHeight = other.mHeight;
mLocalOwnerView = other.mLocalOwnerView;
- assignNativeObject(nativeCopyFromSurfaceControl(other.mNativeObject));
+ assignNativeObject(nativeCopyFromSurfaceControl(other.mNativeObject), callsite);
}
/**
@@ -621,6 +619,7 @@ public final class SurfaceControl implements Parcelable {
private WeakReference<View> mLocalOwnerView;
private SurfaceControl mParent;
private SparseIntArray mMetadata;
+ private String mCallsite = "SurfaceControl.Builder";
/**
* Begin building a SurfaceControl with a given {@link SurfaceSession}.
@@ -654,7 +653,7 @@ public final class SurfaceControl implements Parcelable {
}
return new SurfaceControl(
mSession, mName, mWidth, mHeight, mFormat, mFlags, mParent, mMetadata,
- mLocalOwnerView);
+ mLocalOwnerView, mCallsite);
}
/**
@@ -912,6 +911,18 @@ public final class SurfaceControl implements Parcelable {
return this;
}
+ /**
+ * Sets the callsite this SurfaceControl is constructed from.
+ *
+ * @param callsite String uniquely identifying callsite that created this object. Used for
+ * leakage tracking.
+ * @hide
+ */
+ public Builder setCallsite(String callsite) {
+ mCallsite = callsite;
+ return this;
+ }
+
private Builder setFlags(int flags, int mask) {
mFlags = (mFlags & ~mask) | flags;
return this;
@@ -943,10 +954,13 @@ public final class SurfaceControl implements Parcelable {
* @param h The surface initial height.
* @param flags The surface creation flags.
* @param metadata Initial metadata.
+ * @param callsite String uniquely identifying callsite that created this object. Used for
+ * leakage tracking.
* @throws throws OutOfResourcesException If the SurfaceControl cannot be created.
*/
private SurfaceControl(SurfaceSession session, String name, int w, int h, int format, int flags,
- SurfaceControl parent, SparseIntArray metadata, WeakReference<View> localOwnerView)
+ SurfaceControl parent, SparseIntArray metadata, WeakReference<View> localOwnerView,
+ String callsite)
throws OutOfResourcesException, IllegalArgumentException {
if (name == null) {
throw new IllegalArgumentException("name must not be null");
@@ -978,18 +992,20 @@ public final class SurfaceControl implements Parcelable {
"Couldn't allocate SurfaceControl native object");
}
mNativeHandle = nativeGetHandle(mNativeObject);
- mCloseGuard.open("release");
+ mCloseGuard.openWithCallSite("release", callsite);
}
/**
* Copy constructor. Creates a new native object pointing to the same surface as {@code other}.
*
* @param other The object to copy the surface from.
+ * @param callsite String uniquely identifying callsite that created this object. Used for
+ * leakage tracking.
* @hide
*/
@TestApi
- public SurfaceControl(@NonNull SurfaceControl other) {
- copyFrom(other);
+ public SurfaceControl(@NonNull SurfaceControl other, @NonNull String callsite) {
+ copyFrom(other, callsite);
}
private SurfaceControl(Parcel in) {
@@ -1015,7 +1031,7 @@ public final class SurfaceControl implements Parcelable {
if (in.readInt() != 0) {
object = nativeReadFromParcel(in);
}
- assignNativeObject(object);
+ assignNativeObject(object, "readFromParcel");
}
@Override
@@ -2209,7 +2225,7 @@ public final class SurfaceControl implements Parcelable {
public static SurfaceControl mirrorSurface(SurfaceControl mirrorOf) {
long nativeObj = nativeMirrorSurface(mirrorOf.mNativeObject);
SurfaceControl sc = new SurfaceControl();
- sc.assignNativeObject(nativeObj);
+ sc.assignNativeObject(nativeObj, "mirrorSurface");
return sc;
}
diff --git a/core/java/android/view/SurfaceControlViewHost.java b/core/java/android/view/SurfaceControlViewHost.java
index 86a4fe170387..66ab3a32edfa 100644
--- a/core/java/android/view/SurfaceControlViewHost.java
+++ b/core/java/android/view/SurfaceControlViewHost.java
@@ -167,9 +167,10 @@ public class SurfaceControlViewHost {
public SurfaceControlViewHost(@NonNull Context context, @NonNull Display display,
@Nullable IBinder hostToken) {
mSurfaceControl = new SurfaceControl.Builder()
- .setContainerLayer()
- .setName("SurfaceControlViewHost")
- .build();
+ .setContainerLayer()
+ .setName("SurfaceControlViewHost")
+ .setCallsite("SurfaceControlViewHost")
+ .build();
mWm = new WindowlessWindowManager(context.getResources().getConfiguration(),
mSurfaceControl, hostToken);
mViewRoot = new ViewRootImpl(context, display, mWm);
diff --git a/core/java/android/view/SurfaceView.java b/core/java/android/view/SurfaceView.java
index 0d21eb5cf920..bb0de120dedc 100644
--- a/core/java/android/view/SurfaceView.java
+++ b/core/java/android/view/SurfaceView.java
@@ -993,6 +993,7 @@ public class SurfaceView extends View implements ViewRootImpl.SurfaceChangedCall
.setFormat(mFormat)
.setParent(viewRoot.getBoundsLayer())
.setFlags(mSurfaceFlags)
+ .setCallsite("SurfaceView.updateSurface")
.build();
mBackgroundControl = new SurfaceControl.Builder(mSurfaceSession)
.setName("Background for -" + name)
@@ -1000,6 +1001,7 @@ public class SurfaceView extends View implements ViewRootImpl.SurfaceChangedCall
.setOpaque(true)
.setColorLayer()
.setParent(mSurfaceControl)
+ .setCallsite("SurfaceView.updateSurface")
.build();
} else if (mSurfaceControl == null) {
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index df1c672eb9eb..ca424e79ed7b 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -26372,6 +26372,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
.setParent(root.getSurfaceControl())
.setBufferSize(shadowSize.x, shadowSize.y)
.setFormat(PixelFormat.TRANSLUCENT)
+ .setCallsite("View.startDragAndDrop")
.build();
final Surface surface = new Surface();
surface.copyFrom(surfaceControl);
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index 896a2de8b135..a58642517a20 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -1782,6 +1782,7 @@ public final class ViewRootImpl implements ViewParent,
.setContainerLayer()
.setName("Bounds for - " + getTitle().toString())
.setParent(getRenderSurfaceControl())
+ .setCallsite("ViewRootImpl.getBoundsLayer")
.build();
setBoundsLayerCrop();
mTransaction.show(mBoundsLayer).apply();
diff --git a/core/java/android/view/WindowlessWindowManager.java b/core/java/android/view/WindowlessWindowManager.java
index d2e506ea550c..1af4c3636ac5 100644
--- a/core/java/android/view/WindowlessWindowManager.java
+++ b/core/java/android/view/WindowlessWindowManager.java
@@ -136,7 +136,8 @@ public class WindowlessWindowManager implements IWindowSession {
.setParent(mRootSurface)
.setFormat(attrs.format)
.setBufferSize(getSurfaceWidth(attrs), getSurfaceHeight(attrs))
- .setName(attrs.getTitle().toString());
+ .setName(attrs.getTitle().toString())
+ .setCallsite("WindowlessWindowManager.addToDisplay");
final SurfaceControl sc = b.build();
if (((attrs.inputFeatures &
@@ -248,7 +249,7 @@ public class WindowlessWindowManager implements IWindowSession {
if (viewFlags == View.VISIBLE) {
t.setBufferSize(sc, getSurfaceWidth(attrs), getSurfaceHeight(attrs))
.setOpaque(sc, isOpaque(attrs)).show(sc).apply();
- outSurfaceControl.copyFrom(sc);
+ outSurfaceControl.copyFrom(sc, "WindowlessWindowManager.relayout");
} else {
t.hide(sc).apply();
outSurfaceControl.release();
diff --git a/core/java/android/widget/Magnifier.java b/core/java/android/widget/Magnifier.java
index 8ea824d3ce82..7fa8f9a31526 100644
--- a/core/java/android/widget/Magnifier.java
+++ b/core/java/android/widget/Magnifier.java
@@ -1000,6 +1000,7 @@ public final class Magnifier {
.setName("magnifier surface")
.setFlags(SurfaceControl.HIDDEN)
.setParent(parentSurfaceControl)
+ .setCallsite("InternalPopupWindow")
.build();
mSurface = new Surface();
mSurface.copyFrom(mSurfaceControl);
diff --git a/core/java/android/window/TaskEmbedder.java b/core/java/android/window/TaskEmbedder.java
index ca6c568c2668..0687a037df32 100644
--- a/core/java/android/window/TaskEmbedder.java
+++ b/core/java/android/window/TaskEmbedder.java
@@ -164,6 +164,7 @@ public abstract class TaskEmbedder {
.setContainerLayer()
.setParent(parent)
.setName(name)
+ .setCallsite("TaskEmbedder.initialize")
.build();
if (!onInitialize()) {
diff --git a/core/tests/coretests/src/android/view/InsetsControllerTest.java b/core/tests/coretests/src/android/view/InsetsControllerTest.java
index 964ae21d6086..702f2fa65487 100644
--- a/core/tests/coretests/src/android/view/InsetsControllerTest.java
+++ b/core/tests/coretests/src/android/view/InsetsControllerTest.java
@@ -717,7 +717,7 @@ public class InsetsControllerTest {
// Simulate binder behavior by copying SurfaceControl. Otherwise, InsetsController will
// attempt to release mLeash directly.
- SurfaceControl copy = new SurfaceControl(mLeash);
+ SurfaceControl copy = new SurfaceControl(mLeash, "InsetsControllerTest.createControl");
return new InsetsSourceControl(type, copy, new Point());
}
diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/SplitScreenTaskOrganizer.java b/packages/SystemUI/src/com/android/systemui/stackdivider/SplitScreenTaskOrganizer.java
index 4a2cad705c17..7a313dc0622b 100644
--- a/packages/SystemUI/src/com/android/systemui/stackdivider/SplitScreenTaskOrganizer.java
+++ b/packages/SystemUI/src/com/android/systemui/stackdivider/SplitScreenTaskOrganizer.java
@@ -102,10 +102,14 @@ class SplitScreenTaskOrganizer extends TaskOrganizer {
// Initialize dim surfaces:
mPrimaryDim = new SurfaceControl.Builder(mSurfaceSession)
.setParent(mPrimarySurface).setColorLayer()
- .setName("Primary Divider Dim").build();
+ .setName("Primary Divider Dim")
+ .setCallsite("SplitScreenTaskOrganizer.onTaskAppeared")
+ .build();
mSecondaryDim = new SurfaceControl.Builder(mSurfaceSession)
.setParent(mSecondarySurface).setColorLayer()
- .setName("Secondary Divider Dim").build();
+ .setName("Secondary Divider Dim")
+ .setCallsite("SplitScreenTaskOrganizer.onTaskAppeared")
+ .build();
SurfaceControl.Transaction t = getTransaction();
t.setLayer(mPrimaryDim, Integer.MAX_VALUE);
t.setColor(mPrimaryDim, new float[]{0f, 0f, 0f});
diff --git a/services/core/java/com/android/server/display/ColorFade.java b/services/core/java/com/android/server/display/ColorFade.java
index 29026e8affcf..ec2b0c0a6830 100644
--- a/services/core/java/com/android/server/display/ColorFade.java
+++ b/services/core/java/com/android/server/display/ColorFade.java
@@ -588,8 +588,9 @@ final class ColorFade {
if (mSurfaceControl == null) {
Transaction t = new Transaction();
try {
- final SurfaceControl.Builder builder =
- new SurfaceControl.Builder(mSurfaceSession).setName("ColorFade");
+ final SurfaceControl.Builder builder = new SurfaceControl.Builder(mSurfaceSession)
+ .setName("ColorFade")
+ .setCallsite("ColorFade.createSurface");
if (mMode == MODE_FADE) {
builder.setColorLayer();
} else {
diff --git a/services/core/java/com/android/server/wm/AccessibilityController.java b/services/core/java/com/android/server/wm/AccessibilityController.java
index 9bc702d4c094..ca5e38df066e 100644
--- a/services/core/java/com/android/server/wm/AccessibilityController.java
+++ b/services/core/java/com/android/server/wm/AccessibilityController.java
@@ -892,6 +892,7 @@ final class AccessibilityController {
.setName(SURFACE_TITLE)
.setBufferSize(mTempPoint.x, mTempPoint.y) // not a typo
.setFormat(PixelFormat.TRANSLUCENT)
+ .setCallsite("ViewportWindow")
.build();
} catch (OutOfResourcesException oore) {
/* ignore */
diff --git a/services/core/java/com/android/server/wm/ActivityRecord.java b/services/core/java/com/android/server/wm/ActivityRecord.java
index 2a68a194b369..c4663ca19f87 100644
--- a/services/core/java/com/android/server/wm/ActivityRecord.java
+++ b/services/core/java/com/android/server/wm/ActivityRecord.java
@@ -5908,7 +5908,8 @@ final class ActivityRecord extends WindowToken implements WindowManagerService.A
ProtoLog.i(WM_DEBUG_APP_TRANSITIONS_ANIM, "Creating animation bounds layer");
final SurfaceControl.Builder builder = makeAnimationLeash()
.setParent(getAnimationLeashParent())
- .setName(getSurfaceControl() + " - animation-bounds");
+ .setName(getSurfaceControl() + " - animation-bounds")
+ .setCallsite("ActivityRecord.createAnimationBoundsLayer");
final SurfaceControl boundsLayer = builder.build();
t.show(boundsLayer);
return boundsLayer;
diff --git a/services/core/java/com/android/server/wm/BlackFrame.java b/services/core/java/com/android/server/wm/BlackFrame.java
index 8ab17950f4fc..f563e57b363e 100644
--- a/services/core/java/com/android/server/wm/BlackFrame.java
+++ b/services/core/java/com/android/server/wm/BlackFrame.java
@@ -50,6 +50,7 @@ public class BlackFrame {
.setName("BlackSurface")
.setColorLayer()
.setParent(surfaceControl)
+ .setCallsite("BlackSurface")
.build();
transaction.setWindowCrop(surface, w, h);
transaction.setAlpha(surface, 1);
diff --git a/services/core/java/com/android/server/wm/Dimmer.java b/services/core/java/com/android/server/wm/Dimmer.java
index d43a7b87ee35..07729d17d7b2 100644
--- a/services/core/java/com/android/server/wm/Dimmer.java
+++ b/services/core/java/com/android/server/wm/Dimmer.java
@@ -175,6 +175,7 @@ class Dimmer {
.setParent(mHost.getSurfaceControl())
.setColorLayer()
.setName("Dim Layer for - " + mHost.getName())
+ .setCallsite("Dimmer.makeDimLayer")
.build();
}
diff --git a/services/core/java/com/android/server/wm/DisplayAreaOrganizerController.java b/services/core/java/com/android/server/wm/DisplayAreaOrganizerController.java
index b6c71bb17631..9a397fe07f4e 100644
--- a/services/core/java/com/android/server/wm/DisplayAreaOrganizerController.java
+++ b/services/core/java/com/android/server/wm/DisplayAreaOrganizerController.java
@@ -114,7 +114,8 @@ public class DisplayAreaOrganizerController extends IDisplayAreaOrganizerControl
void onDisplayAreaAppeared(IDisplayAreaOrganizer organizer, DisplayArea da) {
try {
- SurfaceControl outSurfaceControl = new SurfaceControl(da.getSurfaceControl());
+ SurfaceControl outSurfaceControl = new SurfaceControl(da.getSurfaceControl(),
+ "DisplayAreaOrganizerController.onDisplayAreaAppeared");
organizer.onDisplayAreaAppeared(da.getDisplayAreaInfo(), outSurfaceControl);
} catch (RemoteException e) {
// Oh well...
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java
index 0b8716a8aa40..241de2e0e068 100644
--- a/services/core/java/com/android/server/wm/DisplayContent.java
+++ b/services/core/java/com/android/server/wm/DisplayContent.java
@@ -987,7 +987,10 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
final SurfaceControl.Builder b = mWmService.makeSurfaceBuilder(mSession)
.setOpaque(true)
.setContainerLayer();
- mSurfaceControl = b.setName("Root").setContainerLayer().build();
+ mSurfaceControl = b.setName("Root")
+ .setContainerLayer()
+ .setCallsite("DisplayContent")
+ .build();
getPendingTransaction()
.setLayer(mSurfaceControl, 0)
@@ -1110,7 +1113,7 @@ class DisplayContent extends WindowContainer<DisplayContent.DisplayChildWindowCo
return null;
}
mShellRoots.put(windowType, root);
- SurfaceControl out = new SurfaceControl(rootLeash);
+ SurfaceControl out = new SurfaceControl(rootLeash, "DisplayContent.addShellRoot");
return out;
}
diff --git a/services/core/java/com/android/server/wm/DragState.java b/services/core/java/com/android/server/wm/DragState.java
index a26dfdb1bcd4..f840d9273f60 100644
--- a/services/core/java/com/android/server/wm/DragState.java
+++ b/services/core/java/com/android/server/wm/DragState.java
@@ -152,7 +152,9 @@ class DragState {
mInputSurface = mService.makeSurfaceBuilder(
mService.mRoot.getDisplayContent(mDisplayContent.getDisplayId()).getSession())
.setContainerLayer()
- .setName("Drag and Drop Input Consumer").build();
+ .setName("Drag and Drop Input Consumer")
+ .setCallsite("DragState.showInputSurface")
+ .build();
}
final InputWindowHandle h = getInputWindowHandle();
if (h == null) {
diff --git a/services/core/java/com/android/server/wm/EmulatorDisplayOverlay.java b/services/core/java/com/android/server/wm/EmulatorDisplayOverlay.java
index c9cc94423fe2..724747daaa5b 100644
--- a/services/core/java/com/android/server/wm/EmulatorDisplayOverlay.java
+++ b/services/core/java/com/android/server/wm/EmulatorDisplayOverlay.java
@@ -62,6 +62,7 @@ class EmulatorDisplayOverlay {
.setName("EmulatorDisplayOverlay")
.setBufferSize(mScreenSize.x, mScreenSize.y)
.setFormat(PixelFormat.TRANSLUCENT)
+ .setCallsite("EmulatorDisplayOverlay")
.build();
t.setLayer(ctrl, zOrder);
t.setPosition(ctrl, 0, 0);
diff --git a/services/core/java/com/android/server/wm/InputConsumerImpl.java b/services/core/java/com/android/server/wm/InputConsumerImpl.java
index a6066684d850..3b39b6ba18c5 100644
--- a/services/core/java/com/android/server/wm/InputConsumerImpl.java
+++ b/services/core/java/com/android/server/wm/InputConsumerImpl.java
@@ -89,8 +89,10 @@ class InputConsumerImpl implements IBinder.DeathRecipient {
mWindowHandle.inputFeatures = 0;
mWindowHandle.scaleFactor = 1.0f;
- mInputSurface = mService.makeSurfaceBuilder(mService.mRoot.getDisplayContent(displayId)
- .getSession()).setContainerLayer().setName("Input Consumer " + name)
+ mInputSurface = mService.makeSurfaceBuilder(mService.mRoot.getDisplayContent(displayId).getSession())
+ .setContainerLayer()
+ .setName("Input Consumer " + name)
+ .setCallsite("InputConsumerImpl")
.build();
}
diff --git a/services/core/java/com/android/server/wm/Letterbox.java b/services/core/java/com/android/server/wm/Letterbox.java
index 00a4be3d1e35..5d1c85dfc7a3 100644
--- a/services/core/java/com/android/server/wm/Letterbox.java
+++ b/services/core/java/com/android/server/wm/Letterbox.java
@@ -261,8 +261,12 @@ public class Letterbox {
}
private void createSurface(SurfaceControl.Transaction t) {
- mSurface = mSurfaceControlFactory.get().setName("Letterbox - " + mType)
- .setFlags(HIDDEN).setColorLayer().build();
+ mSurface = mSurfaceControlFactory.get()
+ .setName("Letterbox - " + mType)
+ .setFlags(HIDDEN)
+ .setColorLayer()
+ .setCallsite("LetterboxSurface.createSurface")
+ .build();
t.setLayer(mSurface, -1)
.setColor(mSurface, new float[]{0, 0, 0})
.setColorSpaceAgnostic(mSurface, true);
diff --git a/services/core/java/com/android/server/wm/ScreenRotationAnimation.java b/services/core/java/com/android/server/wm/ScreenRotationAnimation.java
index 14ab2e364a1b..c34956c13fae 100644
--- a/services/core/java/com/android/server/wm/ScreenRotationAnimation.java
+++ b/services/core/java/com/android/server/wm/ScreenRotationAnimation.java
@@ -188,17 +188,20 @@ class ScreenRotationAnimation {
mBackColorSurface = displayContent.makeChildSurface(null)
.setName("BackColorSurface")
.setColorLayer()
+ .setCallsite("ScreenRotationAnimation")
.build();
mScreenshotLayer = displayContent.makeOverlay()
.setName("RotationLayer")
.setBufferSize(mWidth, mHeight)
.setSecure(isSecure)
+ .setCallsite("ScreenRotationAnimation")
.build();
mEnterBlackFrameLayer = displayContent.makeOverlay()
.setName("EnterBlackFrameLayer")
.setContainerLayer()
+ .setCallsite("ScreenRotationAnimation")
.build();
// In case display bounds change, screenshot buffer and surface may mismatch so set a
diff --git a/services/core/java/com/android/server/wm/ShellRoot.java b/services/core/java/com/android/server/wm/ShellRoot.java
index 0ae9ca9b882e..759f341c0fe0 100644
--- a/services/core/java/com/android/server/wm/ShellRoot.java
+++ b/services/core/java/com/android/server/wm/ShellRoot.java
@@ -60,7 +60,10 @@ public class ShellRoot {
mToken = new WindowToken(
dc.mWmService, client.asBinder(), windowType, true, dc, true, false);
mSurfaceControl = mToken.makeChildSurface(null)
- .setContainerLayer().setName("Shell Root Leash " + dc.getDisplayId()).build();
+ .setContainerLayer()
+ .setName("Shell Root Leash " + dc.getDisplayId())
+ .setCallsite("ShellRoot")
+ .build();
mToken.getPendingTransaction().show(mSurfaceControl);
}
diff --git a/services/core/java/com/android/server/wm/StrictModeFlash.java b/services/core/java/com/android/server/wm/StrictModeFlash.java
index fa62daaff3fc..39ac16a2f5d3 100644
--- a/services/core/java/com/android/server/wm/StrictModeFlash.java
+++ b/services/core/java/com/android/server/wm/StrictModeFlash.java
@@ -48,6 +48,7 @@ class StrictModeFlash {
.setName("StrictModeFlash")
.setBufferSize(1, 1)
.setFormat(PixelFormat.TRANSLUCENT)
+ .setCallsite("StrictModeFlash")
.build();
// one more than Watermark? arbitrary.
diff --git a/services/core/java/com/android/server/wm/SurfaceAnimator.java b/services/core/java/com/android/server/wm/SurfaceAnimator.java
index 0e5d7d910084..33935d61ead2 100644
--- a/services/core/java/com/android/server/wm/SurfaceAnimator.java
+++ b/services/core/java/com/android/server/wm/SurfaceAnimator.java
@@ -395,7 +395,8 @@ class SurfaceAnimator {
// doesn't work, you will can see the 2/3 button nav bar flicker during seamless
// rotation.
.setHidden(hidden)
- .setEffectLayer();
+ .setEffectLayer()
+ .setCallsite("SurfaceAnimator.createAnimationLeash");
final SurfaceControl leash = builder.build();
t.setWindowCrop(leash, width, height);
t.setPosition(leash, x, y);
diff --git a/services/core/java/com/android/server/wm/SurfaceFreezer.java b/services/core/java/com/android/server/wm/SurfaceFreezer.java
index 8ab5043dc5d9..efa439169c5e 100644
--- a/services/core/java/com/android/server/wm/SurfaceFreezer.java
+++ b/services/core/java/com/android/server/wm/SurfaceFreezer.java
@@ -162,6 +162,7 @@ class SurfaceFreezer {
.setBufferSize(width, height)
.setFormat(PixelFormat.TRANSLUCENT)
.setParent(parent)
+ .setCallsite("SurfaceFreezer.Snapshot")
.build();
ProtoLog.i(WM_SHOW_TRANSACTIONS, " THUMBNAIL %s: CREATE", mSurfaceControl);
diff --git a/services/core/java/com/android/server/wm/TaskDisplayArea.java b/services/core/java/com/android/server/wm/TaskDisplayArea.java
index e23080724000..3360951a8f3f 100644
--- a/services/core/java/com/android/server/wm/TaskDisplayArea.java
+++ b/services/core/java/com/android/server/wm/TaskDisplayArea.java
@@ -689,15 +689,19 @@ final class TaskDisplayArea extends DisplayArea<ActivityStack> {
super.onParentChanged(newParent, oldParent, () -> {
mAppAnimationLayer = makeChildSurface(null)
.setName("animationLayer")
+ .setCallsite("TaskDisplayArea.onParentChanged")
.build();
mBoostedAppAnimationLayer = makeChildSurface(null)
.setName("boostedAnimationLayer")
+ .setCallsite("TaskDisplayArea.onParentChanged")
.build();
mHomeAppAnimationLayer = makeChildSurface(null)
.setName("homeAnimationLayer")
+ .setCallsite("TaskDisplayArea.onParentChanged")
.build();
mSplitScreenDividerAnchor = makeChildSurface(null)
.setName("splitScreenDividerAnchor")
+ .setCallsite("TaskDisplayArea.onParentChanged")
.build();
getSyncTransaction()
.show(mAppAnimationLayer)
diff --git a/services/core/java/com/android/server/wm/TaskOrganizerController.java b/services/core/java/com/android/server/wm/TaskOrganizerController.java
index 574f37b87443..f70bf18cdea5 100644
--- a/services/core/java/com/android/server/wm/TaskOrganizerController.java
+++ b/services/core/java/com/android/server/wm/TaskOrganizerController.java
@@ -117,7 +117,8 @@ class TaskOrganizerController extends ITaskOrganizerController.Stub {
final RunningTaskInfo taskInfo = task.getTaskInfo();
mDeferTaskOrgCallbacksConsumer.accept(() -> {
try {
- SurfaceControl outSurfaceControl = new SurfaceControl(task.getSurfaceControl());
+ SurfaceControl outSurfaceControl = new SurfaceControl(task.getSurfaceControl(),
+ "TaskOrganizerController.onTaskAppeared");
if (!task.mCreatedByOrganizer && !visible) {
// To prevent flashes, we hide the task prior to sending the leash to the
// task org if the task has previously hidden (ie. when entering PIP)
diff --git a/services/core/java/com/android/server/wm/TaskPositioningController.java b/services/core/java/com/android/server/wm/TaskPositioningController.java
index d343daf46f13..b9a449f558f0 100644
--- a/services/core/java/com/android/server/wm/TaskPositioningController.java
+++ b/services/core/java/com/android/server/wm/TaskPositioningController.java
@@ -86,7 +86,9 @@ class TaskPositioningController {
if (mInputSurface == null) {
mInputSurface = mService.makeSurfaceBuilder(dc.getSession())
.setContainerLayer()
- .setName("Drag and Drop Input Consumer").build();
+ .setName("Drag and Drop Input Consumer")
+ .setCallsite("TaskPositioningController.showInputSurface")
+ .build();
}
final InputWindowHandle h = getDragWindowHandleLocked();
diff --git a/services/core/java/com/android/server/wm/TaskScreenshotAnimatable.java b/services/core/java/com/android/server/wm/TaskScreenshotAnimatable.java
index adecc36671c9..23f55051af90 100644
--- a/services/core/java/com/android/server/wm/TaskScreenshotAnimatable.java
+++ b/services/core/java/com/android/server/wm/TaskScreenshotAnimatable.java
@@ -52,6 +52,7 @@ class TaskScreenshotAnimatable implements SurfaceAnimator.Animatable {
mSurfaceControl = surfaceControlFactory.apply(new SurfaceSession())
.setName("RecentTaskScreenshotSurface")
.setBufferSize(mWidth, mHeight)
+ .setCallsite("TaskScreenshotAnimatable")
.build();
if (buffer != null) {
final Surface surface = new Surface();
diff --git a/services/core/java/com/android/server/wm/TaskSnapshotSurface.java b/services/core/java/com/android/server/wm/TaskSnapshotSurface.java
index f1f576220a9a..3fc09c93550c 100644
--- a/services/core/java/com/android/server/wm/TaskSnapshotSurface.java
+++ b/services/core/java/com/android/server/wm/TaskSnapshotSurface.java
@@ -374,6 +374,7 @@ class TaskSnapshotSurface implements StartingSurface {
.setBufferSize(buffer.getWidth(), buffer.getHeight())
.setFormat(buffer.getFormat())
.setParent(mSurfaceControl)
+ .setCallsite("TaskSnapshotSurface.drawSizeMismatchSnapshot")
.build();
Surface surface = mService.mSurfaceFactory.get();
surface.copyFrom(mChildSurfaceControl);
diff --git a/services/core/java/com/android/server/wm/Watermark.java b/services/core/java/com/android/server/wm/Watermark.java
index 3d49ebe306e6..7f28ffc5634c 100644
--- a/services/core/java/com/android/server/wm/Watermark.java
+++ b/services/core/java/com/android/server/wm/Watermark.java
@@ -121,6 +121,7 @@ class Watermark {
.setName("WatermarkSurface")
.setBufferSize(1, 1)
.setFormat(PixelFormat.TRANSLUCENT)
+ .setCallsite("Watermark")
.build();
t.setLayer(ctrl, WindowManagerService.TYPE_LAYER_MULTIPLIER * 100)
.setPosition(ctrl, 0, 0)
diff --git a/services/core/java/com/android/server/wm/WindowContainer.java b/services/core/java/com/android/server/wm/WindowContainer.java
index 1a6d85547c92..2977968f5754 100644
--- a/services/core/java/com/android/server/wm/WindowContainer.java
+++ b/services/core/java/com/android/server/wm/WindowContainer.java
@@ -413,7 +413,7 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer<
}
void setInitialSurfaceControlProperties(SurfaceControl.Builder b) {
- setSurfaceControl(b.build());
+ setSurfaceControl(b.setCallsite("WindowContainer.setInitialSurfaceControlProperties").build());
getSyncTransaction().show(mSurfaceControl);
onSurfaceShown(getSyncTransaction());
updateSurfacePosition();
diff --git a/services/core/java/com/android/server/wm/WindowContainerThumbnail.java b/services/core/java/com/android/server/wm/WindowContainerThumbnail.java
index 126154b10350..ee99f45b48ff 100644
--- a/services/core/java/com/android/server/wm/WindowContainerThumbnail.java
+++ b/services/core/java/com/android/server/wm/WindowContainerThumbnail.java
@@ -103,6 +103,7 @@ class WindowContainerThumbnail implements Animatable {
.setFormat(PixelFormat.TRANSLUCENT)
.setMetadata(METADATA_WINDOW_TYPE, mWindowContainer.getWindowingMode())
.setMetadata(METADATA_OWNER_UID, Process.myUid())
+ .setCallsite("WindowContainerThumbnail")
.build();
ProtoLog.i(WM_SHOW_TRANSACTIONS, " THUMBNAIL %s: CREATE", mSurfaceControl);
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index 564eecf725cc..b1756b07ad83 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -8229,7 +8229,7 @@ public class WindowManagerService extends IWindowManager.Stub
}
final SurfaceControl mirror = SurfaceControl.mirrorSurface(displaySc);
- outSurfaceControl.copyFrom(mirror);
+ outSurfaceControl.copyFrom(mirror, "WMS.mirrorDisplay");
return true;
}
diff --git a/services/core/java/com/android/server/wm/WindowOrganizerController.java b/services/core/java/com/android/server/wm/WindowOrganizerController.java
index 46e1bf04bdbe..930bfded39a4 100644
--- a/services/core/java/com/android/server/wm/WindowOrganizerController.java
+++ b/services/core/java/com/android/server/wm/WindowOrganizerController.java
@@ -459,6 +459,7 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub
.setBufferSize(bounds.width(), bounds.height())
.setFormat(PixelFormat.TRANSLUCENT)
.setParent(wc.getParentSurfaceControl())
+ .setCallsite("WindowOrganizerController.takeScreenshot")
.build();
Surface surface = new Surface();
@@ -466,7 +467,7 @@ class WindowOrganizerController extends IWindowOrganizerController.Stub
surface.attachAndQueueBufferWithColorSpace(buffer.getGraphicBuffer(), null);
surface.release();
- outSurfaceControl.copyFrom(screenshot);
+ outSurfaceControl.copyFrom(screenshot, "WindowOrganizerController.takeScreenshot");
return true;
}
diff --git a/services/core/java/com/android/server/wm/WindowSurfaceController.java b/services/core/java/com/android/server/wm/WindowSurfaceController.java
index b2bfcdc8a900..b89cdd32e132 100644
--- a/services/core/java/com/android/server/wm/WindowSurfaceController.java
+++ b/services/core/java/com/android/server/wm/WindowSurfaceController.java
@@ -116,7 +116,8 @@ class WindowSurfaceController {
.setFormat(format)
.setFlags(flags)
.setMetadata(METADATA_WINDOW_TYPE, windowType)
- .setMetadata(METADATA_OWNER_UID, ownerUid);
+ .setMetadata(METADATA_OWNER_UID, ownerUid)
+ .setCallsite("WindowSurfaceController");
final boolean useBLAST = mService.mUseBLAST && ((win.getAttrs().privateFlags &
WindowManager.LayoutParams.PRIVATE_FLAG_USE_BLAST) != 0);
@@ -132,6 +133,7 @@ class WindowSurfaceController {
.setName(name + "(BLAST)")
.setHidden(false)
.setBLASTLayer()
+ .setCallsite("WindowSurfaceController")
.build();
}
@@ -493,12 +495,12 @@ class WindowSurfaceController {
}
void getSurfaceControl(SurfaceControl outSurfaceControl) {
- outSurfaceControl.copyFrom(mSurfaceControl);
+ outSurfaceControl.copyFrom(mSurfaceControl, "WindowSurfaceController.getSurfaceControl");
}
void getBLASTSurfaceControl(SurfaceControl outSurfaceControl) {
if (mBLASTSurfaceControl != null) {
- outSurfaceControl.copyFrom(mBLASTSurfaceControl);
+ outSurfaceControl.copyFrom(mBLASTSurfaceControl, "WindowSurfaceController.getBLASTSurfaceControl");
}
}
diff --git a/services/robotests/src/com/android/server/testing/shadows/ShadowCloseGuard.java b/services/robotests/src/com/android/server/testing/shadows/ShadowCloseGuard.java
index c9984bf07059..4055dfc08f90 100644
--- a/services/robotests/src/com/android/server/testing/shadows/ShadowCloseGuard.java
+++ b/services/robotests/src/com/android/server/testing/shadows/ShadowCloseGuard.java
@@ -44,5 +44,10 @@ public class ShadowCloseGuard {
public void report(String message, Throwable allocationSite) {
mReports += 1;
}
+
+ @Override
+ public void report(String message) {
+ mReports += 1;
+ }
}
}
diff --git a/services/tests/wmtests/src/com/android/server/wm/LetterboxTest.java b/services/tests/wmtests/src/com/android/server/wm/LetterboxTest.java
index 2251ee047d29..ce3f270460c1 100644
--- a/services/tests/wmtests/src/com/android/server/wm/LetterboxTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/LetterboxTest.java
@@ -18,6 +18,7 @@ package com.android.server.wm;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
+import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.clearInvocations;
import static org.mockito.Mockito.doAnswer;