summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Riddle Hsu <riddlehsu@google.com> 2023-07-04 16:29:11 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2023-07-04 16:29:11 +0000
commit74de9a8ba74e7659d613ee493b7ebd2a38d4d646 (patch)
tree36dc778ab3d7b870d0d3f97ee763e9a6c54b325e
parent361db6eb7a37c9de1662af75b8ebbb035a2e9d6a (diff)
parentda30caf4c97d94ff43967bf8e7040b16f94ec4e1 (diff)
Merge "Reduce some flaky cases of WmTests"
-rw-r--r--services/core/java/com/android/server/wm/Transition.java2
-rw-r--r--services/core/java/com/android/server/wm/TransitionController.java16
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/SurfaceControlViewHostTests.java2
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/SystemServicesTestRule.java6
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/TransitionTests.java6
5 files changed, 27 insertions, 5 deletions
diff --git a/services/core/java/com/android/server/wm/Transition.java b/services/core/java/com/android/server/wm/Transition.java
index 1b27bb17f599..814bd85f553f 100644
--- a/services/core/java/com/android/server/wm/Transition.java
+++ b/services/core/java/com/android/server/wm/Transition.java
@@ -1603,7 +1603,7 @@ class Transition implements BLASTSyncEngine.TransactionReadyListener {
// Since we created root-leash but no longer reference it from core, release it now
info.releaseAnimSurfaces();
- mController.mLoggerHandler.post(mLogger::logOnSend);
+ mLogger.logOnSendAsync(mController.mLoggerHandler);
if (mLogger.mInfo != null) {
mController.mTransitionTracer.logSentTransition(this, mTargets);
}
diff --git a/services/core/java/com/android/server/wm/TransitionController.java b/services/core/java/com/android/server/wm/TransitionController.java
index 79cb61be5948..881eddc03243 100644
--- a/services/core/java/com/android/server/wm/TransitionController.java
+++ b/services/core/java/com/android/server/wm/TransitionController.java
@@ -1434,7 +1434,7 @@ class TransitionController {
* Beside `mCreateWallTimeMs`, all times are elapsed times and will all be reported relative
* to when the transition was created.
*/
- static class Logger {
+ static class Logger implements Runnable {
long mCreateWallTimeMs;
long mCreateTimeNs;
long mRequestTimeNs;
@@ -1458,6 +1458,20 @@ class TransitionController {
return sb.toString();
}
+ void logOnSendAsync(Handler handler) {
+ handler.post(this);
+ }
+
+ @Override
+ public void run() {
+ try {
+ logOnSend();
+ } catch (Exception e) {
+ // In case TransitionRequestInfo#toString() accesses window container with race.
+ Slog.w(TAG, "Failed to log transition", e);
+ }
+ }
+
void logOnSend() {
ProtoLog.v(ProtoLogGroup.WM_DEBUG_WINDOW_TRANSITIONS_MIN, "%s", buildOnSendLog());
ProtoLog.v(ProtoLogGroup.WM_DEBUG_WINDOW_TRANSITIONS_MIN, " startWCT=%s", mStartWCT);
diff --git a/services/tests/wmtests/src/com/android/server/wm/SurfaceControlViewHostTests.java b/services/tests/wmtests/src/com/android/server/wm/SurfaceControlViewHostTests.java
index 41bfc806f839..1a4b94b074a1 100644
--- a/services/tests/wmtests/src/com/android/server/wm/SurfaceControlViewHostTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/SurfaceControlViewHostTests.java
@@ -98,7 +98,7 @@ public class SurfaceControlViewHostTests {
mView1 = new Button(mActivity);
mView2 = new Button(mActivity);
- mActivity.runOnUiThread(() -> {
+ mInstrumentation.runOnMainSync(() -> {
TestWindowlessWindowManager wwm = new TestWindowlessWindowManager(
mActivity.getResources().getConfiguration(), sc, null);
diff --git a/services/tests/wmtests/src/com/android/server/wm/SystemServicesTestRule.java b/services/tests/wmtests/src/com/android/server/wm/SystemServicesTestRule.java
index 7edfd9a3ecb3..e252b9e1c8be 100644
--- a/services/tests/wmtests/src/com/android/server/wm/SystemServicesTestRule.java
+++ b/services/tests/wmtests/src/com/android/server/wm/SystemServicesTestRule.java
@@ -208,7 +208,11 @@ public class SystemServicesTestRule implements TestRule {
spyOn(mContext);
doReturn(null).when(mContext)
- .registerReceiver(nullable(BroadcastReceiver.class), any(IntentFilter.class));
+ .registerReceiver(nullable(BroadcastReceiver.class), any(IntentFilter.class),
+ nullable(String.class), nullable(Handler.class));
+ doReturn(null).when(mContext)
+ .registerReceiver(nullable(BroadcastReceiver.class), any(IntentFilter.class),
+ nullable(String.class), nullable(Handler.class), anyInt());
doReturn(null).when(mContext)
.registerReceiverAsUser(any(BroadcastReceiver.class), any(UserHandle.class),
any(IntentFilter.class), nullable(String.class), nullable(Handler.class));
diff --git a/services/tests/wmtests/src/com/android/server/wm/TransitionTests.java b/services/tests/wmtests/src/com/android/server/wm/TransitionTests.java
index ed0c8ef489e5..7351e81387bb 100644
--- a/services/tests/wmtests/src/com/android/server/wm/TransitionTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/TransitionTests.java
@@ -114,7 +114,11 @@ public class TransitionTests extends WindowTestsBase {
private BLASTSyncEngine mSyncEngine;
private Transition createTestTransition(int transitType, TransitionController controller) {
- return new Transition(transitType, 0 /* flags */, controller, controller.mSyncEngine);
+ final Transition transition = new Transition(transitType, 0 /* flags */, controller,
+ controller.mSyncEngine);
+ spyOn(transition.mLogger);
+ doNothing().when(transition.mLogger).logOnSendAsync(any());
+ return transition;
}
private Transition createTestTransition(int transitType) {