summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Treehugger Robot <android-test-infra-autosubmit@system.gserviceaccount.com> 2024-08-21 16:12:34 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2024-08-21 16:12:34 +0000
commit8d7d9e4ec068a58d678a5cd082fed8f0922db26f (patch)
tree1715605f681f1c363f3b601367da1434ff892f17
parent528c9c00d05488ac540cb7d5fbbd0c74788ce1c6 (diff)
parentb2c9c52e6a9b60d599e4508fa56ca6e7eed3ca78 (diff)
Merge "Fix missing ProtoLog viewer config in some tracing instances" into main
-rw-r--r--core/java/com/android/internal/protolog/PerfettoProtoLogImpl.java9
-rw-r--r--tests/Internal/src/com/android/internal/protolog/PerfettoProtoLogImplTest.java42
2 files changed, 44 insertions, 7 deletions
diff --git a/core/java/com/android/internal/protolog/PerfettoProtoLogImpl.java b/core/java/com/android/internal/protolog/PerfettoProtoLogImpl.java
index 78b5cfed1771..49ed55dbdb9f 100644
--- a/core/java/com/android/internal/protolog/PerfettoProtoLogImpl.java
+++ b/core/java/com/android/internal/protolog/PerfettoProtoLogImpl.java
@@ -431,15 +431,10 @@ public class PerfettoProtoLogImpl extends IProtoLogClient.Stub implements IProto
Log.d(LOG_TAG, "Dumping viewer config to trace");
- ProtoInputStream pis = mViewerConfigInputStreamProvider.getInputStream();
-
- if (pis == null) {
- Slog.w(LOG_TAG, "Failed to get viewer input stream.");
- return;
- }
-
mDataSource.trace(ctx -> {
try {
+ ProtoInputStream pis = mViewerConfigInputStreamProvider.getInputStream();
+
final ProtoOutputStream os = ctx.newTracePacket();
os.write(TIMESTAMP, SystemClock.elapsedRealtimeNanos());
diff --git a/tests/Internal/src/com/android/internal/protolog/PerfettoProtoLogImplTest.java b/tests/Internal/src/com/android/internal/protolog/PerfettoProtoLogImplTest.java
index 4826f4241e2b..05a68e9649d4 100644
--- a/tests/Internal/src/com/android/internal/protolog/PerfettoProtoLogImplTest.java
+++ b/tests/Internal/src/com/android/internal/protolog/PerfettoProtoLogImplTest.java
@@ -756,6 +756,48 @@ public class PerfettoProtoLogImplTest {
.isEqualTo("My null args: 0, 0, false");
}
+ @Test
+ public void handlesConcurrentTracingSessions() throws IOException {
+ PerfettoTraceMonitor traceMonitor1 =
+ PerfettoTraceMonitor.newBuilder().enableProtoLog(true)
+ .build();
+
+ PerfettoTraceMonitor traceMonitor2 =
+ PerfettoTraceMonitor.newBuilder().enableProtoLog(true)
+ .build();
+
+ final ResultWriter writer2 = new ResultWriter()
+ .forScenario(new ScenarioBuilder()
+ .forClass(createTempFile("temp", "").getName()).build())
+ .withOutputDir(mTracingDirectory)
+ .setRunComplete();
+
+ try {
+ traceMonitor1.start();
+ traceMonitor2.start();
+
+ mProtoLog.log(LogLevel.DEBUG, TestProtoLogGroup.TEST_GROUP, 1,
+ LogDataType.BOOLEAN, new Object[]{true});
+ } finally {
+ traceMonitor1.stop(mWriter);
+ traceMonitor2.stop(writer2);
+ }
+
+ final ResultReader reader = new ResultReader(mWriter.write(), mTraceConfig);
+ final ProtoLogTrace protologFromMonitor1 = reader.readProtoLogTrace();
+
+ final ResultReader reader2 = new ResultReader(writer2.write(), mTraceConfig);
+ final ProtoLogTrace protologFromMonitor2 = reader2.readProtoLogTrace();
+
+ Truth.assertThat(protologFromMonitor1.messages).hasSize(1);
+ Truth.assertThat(protologFromMonitor1.messages.get(0).getMessage())
+ .isEqualTo("My Test Debug Log Message true");
+
+ Truth.assertThat(protologFromMonitor2.messages).hasSize(1);
+ Truth.assertThat(protologFromMonitor2.messages.get(0).getMessage())
+ .isEqualTo("My Test Debug Log Message true");
+ }
+
private enum TestProtoLogGroup implements IProtoLogGroup {
TEST_GROUP(true, true, false, "TEST_TAG");