diff options
-rw-r--r-- | core/java/com/android/internal/protolog/PerfettoProtoLogImpl.java | 20 | ||||
-rw-r--r-- | services/tests/wmtests/src/com/android/server/wm/SystemServicesTestRule.java | 6 |
2 files changed, 25 insertions, 1 deletions
diff --git a/core/java/com/android/internal/protolog/PerfettoProtoLogImpl.java b/core/java/com/android/internal/protolog/PerfettoProtoLogImpl.java index 2d989943800e..6f7e5ad51b89 100644 --- a/core/java/com/android/internal/protolog/PerfettoProtoLogImpl.java +++ b/core/java/com/android/internal/protolog/PerfettoProtoLogImpl.java @@ -79,6 +79,7 @@ import java.util.Objects; import java.util.Set; import java.util.TreeMap; import java.util.UUID; +import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; @@ -864,5 +865,24 @@ public abstract class PerfettoProtoLogImpl extends IProtoLogClient.Stub implemen throw new RuntimeException("Both mMessageString and mMessageHash should never be null"); } } + + /** + * This is only used by unit tests to wait until {@link #connectToConfigurationService} is + * done. Because unit tests are sensitive to concurrent accesses. + */ + @VisibleForTesting + public static void waitForInitialization() { + final IProtoLog currentInstance = ProtoLog.getSingleInstance(); + if (!(currentInstance instanceof PerfettoProtoLogImpl protoLog)) { + return; + } + try { + protoLog.mBackgroundLoggingService.submit(() -> { + Log.i(LOG_TAG, "Complete initialization"); + }).get(); + } catch (InterruptedException | ExecutionException e) { + Log.e(LOG_TAG, "Failed to wait for tracing service", e); + } + } } 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 3776b03695d5..b558fad84efa 100644 --- a/services/tests/wmtests/src/com/android/server/wm/SystemServicesTestRule.java +++ b/services/tests/wmtests/src/com/android/server/wm/SystemServicesTestRule.java @@ -78,6 +78,7 @@ import android.view.SurfaceControl; import com.android.dx.mockito.inline.extended.StaticMockitoSession; import com.android.internal.os.BackgroundThread; +import com.android.internal.protolog.PerfettoProtoLogImpl; import com.android.internal.protolog.ProtoLog; import com.android.internal.protolog.WmProtoLogGroups; import com.android.server.AnimationThread; @@ -187,7 +188,10 @@ public class SystemServicesTestRule implements TestRule { } private void setUp() { - ProtoLog.init(WmProtoLogGroups.values()); + if (ProtoLog.getSingleInstance() == null) { + ProtoLog.init(WmProtoLogGroups.values()); + PerfettoProtoLogImpl.waitForInitialization(); + } if (mOnBeforeServicesCreated != null) { mOnBeforeServicesCreated.run(); |