From 950c63f93924bdd322cf3bed6bb9e7c1e570f494 Mon Sep 17 00:00:00 2001 From: Charles Yo Date: Mon, 8 Jul 2024 03:57:02 +0000 Subject: Revert "Add register groups API" Revert submission 28147757-no-processing-protolog Reason for revert: b/351458758 Reverted changes: /q/submissionid:28147757-no-processing-protolog Change-Id: I785dc0e11b4025867b757a039b4e0a1e609dd5d0 --- .../internal/protolog/LegacyProtoLogImpl.java | 17 ++-- .../internal/protolog/PerfettoProtoLogImpl.java | 93 +++++++++++----------- .../com/android/internal/protolog/ProtoLog.java | 10 ++- .../android/internal/protolog/ProtoLogImpl.java | 8 -- .../internal/protolog/common/IProtoLog.java | 6 -- 5 files changed, 57 insertions(+), 77 deletions(-) diff --git a/core/java/com/android/internal/protolog/LegacyProtoLogImpl.java b/core/java/com/android/internal/protolog/LegacyProtoLogImpl.java index 95b614666105..5de27256ded0 100644 --- a/core/java/com/android/internal/protolog/LegacyProtoLogImpl.java +++ b/core/java/com/android/internal/protolog/LegacyProtoLogImpl.java @@ -48,7 +48,6 @@ import java.io.File; import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; -import java.util.Map; import java.util.TreeMap; import java.util.stream.Collectors; @@ -66,7 +65,7 @@ public class LegacyProtoLogImpl implements IProtoLog { private final String mLegacyViewerConfigFilename; private final TraceBuffer mBuffer; private final LegacyProtoLogViewerConfigReader mViewerConfig; - private final Map mLogGroups = new TreeMap<>(); + private final TreeMap mLogGroups; private final Runnable mCacheUpdater; private final int mPerChunkSize; @@ -75,19 +74,20 @@ public class LegacyProtoLogImpl implements IProtoLog { private final Object mProtoLogEnabledLock = new Object(); public LegacyProtoLogImpl(String outputFile, String viewerConfigFilename, - Runnable cacheUpdater) { + TreeMap logGroups, Runnable cacheUpdater) { this(new File(outputFile), viewerConfigFilename, BUFFER_CAPACITY, - new LegacyProtoLogViewerConfigReader(), PER_CHUNK_SIZE, cacheUpdater); + new LegacyProtoLogViewerConfigReader(), PER_CHUNK_SIZE, logGroups, cacheUpdater); } public LegacyProtoLogImpl(File file, String viewerConfigFilename, int bufferCapacity, LegacyProtoLogViewerConfigReader viewerConfig, int perChunkSize, - Runnable cacheUpdater) { + TreeMap logGroups, Runnable cacheUpdater) { mLogFile = file; mBuffer = new TraceBuffer(bufferCapacity); mLegacyViewerConfigFilename = viewerConfigFilename; mViewerConfig = viewerConfig; mPerChunkSize = perChunkSize; + mLogGroups = logGroups; mCacheUpdater = cacheUpdater; } @@ -414,12 +414,5 @@ public class LegacyProtoLogImpl implements IProtoLog { // so we ignore the level argument to this function. return group.isLogToLogcat() || (group.isLogToProto() && isProtoEnabled()); } - - @Override - public void registerGroups(IProtoLogGroup... protoLogGroups) { - for (IProtoLogGroup group : protoLogGroups) { - mLogGroups.put(group.name(), group); - } - } } diff --git a/core/java/com/android/internal/protolog/PerfettoProtoLogImpl.java b/core/java/com/android/internal/protolog/PerfettoProtoLogImpl.java index 1fe24551bd0c..52613078a770 100644 --- a/core/java/com/android/internal/protolog/PerfettoProtoLogImpl.java +++ b/core/java/com/android/internal/protolog/PerfettoProtoLogImpl.java @@ -42,7 +42,6 @@ import static android.internal.perfetto.protos.TracePacketOuterClass.TracePacket import static android.internal.perfetto.protos.TracePacketOuterClass.TracePacket.SEQ_NEEDS_INCREMENTAL_STATE; import static android.internal.perfetto.protos.TracePacketOuterClass.TracePacket.TIMESTAMP; -import android.annotation.NonNull; import android.annotation.Nullable; import android.internal.perfetto.protos.Protolog.ProtoLogViewerConfig.MessageData; import android.os.ShellCommand; @@ -83,6 +82,7 @@ import java.util.UUID; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.atomic.AtomicInteger; +import java.util.stream.Collectors; /** * A service for the ProtoLog logging system. @@ -98,7 +98,7 @@ public class PerfettoProtoLogImpl implements IProtoLog { ); private final ProtoLogViewerConfigReader mViewerConfigReader; private final ViewerConfigInputStreamProvider mViewerConfigInputStreamProvider; - private final TreeMap mLogGroups = new TreeMap<>(); + private final TreeMap mLogGroups; private final Runnable mCacheUpdater; private final int[] mDefaultLogLevelCounts = new int[LogLevel.values().length]; @@ -106,7 +106,8 @@ public class PerfettoProtoLogImpl implements IProtoLog { private final ExecutorService mBackgroundLoggingService = Executors.newSingleThreadExecutor(); - public PerfettoProtoLogImpl(String viewerConfigFilePath, Runnable cacheUpdater) { + public PerfettoProtoLogImpl(String viewerConfigFilePath, + TreeMap logGroups, Runnable cacheUpdater) { this(() -> { try { return new ProtoInputStream(new FileInputStream(viewerConfigFilePath)); @@ -114,19 +115,31 @@ public class PerfettoProtoLogImpl implements IProtoLog { Slog.w(LOG_TAG, "Failed to load viewer config file " + viewerConfigFilePath, e); return null; } - }, cacheUpdater); + }, logGroups, cacheUpdater); } - public PerfettoProtoLogImpl() { - this(null, null, () -> {}); + public PerfettoProtoLogImpl(IProtoLogGroup[] logGroups) { + this(null, logGroups, () -> {}); } public PerfettoProtoLogImpl( ViewerConfigInputStreamProvider viewerConfigInputStreamProvider, + IProtoLogGroup[] logGroups, Runnable cacheUpdater ) { this(viewerConfigInputStreamProvider, - new ProtoLogViewerConfigReader(viewerConfigInputStreamProvider), + new TreeMap<>(Arrays.stream(logGroups) + .collect(Collectors.toMap(IProtoLogGroup::name, group -> group))), + cacheUpdater); + } + + public PerfettoProtoLogImpl( + ViewerConfigInputStreamProvider viewerConfigInputStreamProvider, + TreeMap logGroups, + Runnable cacheUpdater + ) { + this(viewerConfigInputStreamProvider, + new ProtoLogViewerConfigReader(viewerConfigInputStreamProvider), logGroups, cacheUpdater); } @@ -134,6 +147,7 @@ public class PerfettoProtoLogImpl implements IProtoLog { public PerfettoProtoLogImpl( ViewerConfigInputStreamProvider viewerConfigInputStreamProvider, ProtoLogViewerConfigReader viewerConfigReader, + TreeMap logGroups, Runnable cacheUpdater ) { Producer.init(InitArguments.DEFAULTS); @@ -146,6 +160,7 @@ public class PerfettoProtoLogImpl implements IProtoLog { mDataSource.register(params); this.mViewerConfigInputStreamProvider = viewerConfigInputStreamProvider; this.mViewerConfigReader = viewerConfigReader; + this.mLogGroups = logGroups; this.mCacheUpdater = cacheUpdater; } @@ -184,7 +199,7 @@ public class PerfettoProtoLogImpl implements IProtoLog { tsNanos)); } if (group.isLogToLogcat()) { - logToLogcat(group.getTag(), logLevel, messageString, args); + logToLogcat(group.getTag(), logLevel, 0, args); } } finally { Trace.traceEnd(Trace.TRACE_TAG_WINDOW_MANAGER); @@ -192,11 +207,6 @@ public class PerfettoProtoLogImpl implements IProtoLog { } private void dumpTransitionTraceConfig() { - if (mViewerConfigInputStreamProvider == null) { - // No viewer config available - return; - } - ProtoInputStream pis = mViewerConfigInputStreamProvider.getInputStream(); if (pis == null) { @@ -291,39 +301,35 @@ public class PerfettoProtoLogImpl implements IProtoLog { @Nullable Object[] args) { Trace.traceBegin(Trace.TRACE_TAG_WINDOW_MANAGER, "logToLogcat"); try { - String messageString = mViewerConfigReader.getViewerString(messageHash); - - if (messageString == null) { - StringBuilder builder = new StringBuilder("UNKNOWN MESSAGE"); - for (Object o : args) { - builder.append(" ").append(o); - } - messageString = builder.toString(); - args = new Object[0]; - } - - doLogToLogcat(tag, level, messageString, args); - } finally { - Trace.traceEnd(Trace.TRACE_TAG_WINDOW_MANAGER); - } - } - - private void logToLogcat(String tag, LogLevel level, String message, @Nullable Object[] args) { - Trace.traceBegin(Trace.TRACE_TAG_WINDOW_MANAGER, "logToLogcat"); - try { - doLogToLogcat(tag, level, message, args); + doLogToLogcat(tag, level, messageHash, args); } finally { Trace.traceEnd(Trace.TRACE_TAG_WINDOW_MANAGER); } } - private void doLogToLogcat(String tag, LogLevel level, @NonNull String messageString, + private void doLogToLogcat(String tag, LogLevel level, long messageHash, @Nullable Object[] args) { - String message; - if (args != null) { - message = TextUtils.formatSimple(messageString, args); - } else { - message = messageString; + String message = null; + String messageString = mViewerConfigReader.getViewerString(messageHash); + if (messageString != null) { + if (args != null) { + try { + message = TextUtils.formatSimple(messageString, args); + } catch (Exception ex) { + Slog.w(LOG_TAG, "Invalid ProtoLog format string.", ex); + } + } else { + message = messageString; + } + } + if (message == null) { + StringBuilder builder = new StringBuilder("UNKNOWN MESSAGE (" + messageHash + ")"); + if (args != null) { + for (Object o : args) { + builder.append(" ").append(o); + } + } + message = builder.toString(); } passToLogcat(tag, level, message); } @@ -660,13 +666,6 @@ public class PerfettoProtoLogImpl implements IProtoLog { || group.isLogToLogcat(); } - @Override - public void registerGroups(IProtoLogGroup... protoLogGroups) { - for (IProtoLogGroup protoLogGroup : protoLogGroups) { - mLogGroups.put(protoLogGroup.name(), protoLogGroup); - } - } - /** * Start logging the stack trace of the when the log message happened for target groups * @return status code diff --git a/core/java/com/android/internal/protolog/ProtoLog.java b/core/java/com/android/internal/protolog/ProtoLog.java index ff46770e2cb9..6a2eca05f8eb 100644 --- a/core/java/com/android/internal/protolog/ProtoLog.java +++ b/core/java/com/android/internal/protolog/ProtoLog.java @@ -151,11 +151,13 @@ public class ProtoLog { } /** - * Registers available protolog groups. A group must be registered before it can be used. - * @param protoLogGroups The groups to register for use in protolog. + * Should be called once for each process that wants to use ProtoLog */ - public static void registerGroups(IProtoLogGroup... protoLogGroups) { - sProtoLogInstance.registerGroups(protoLogGroups); + public static synchronized void initialize(IProtoLog protoLogInstance) { + if (sProtoLogInstance != null) { + throw new IllegalStateException("ProtoLog already initialized in this process"); + } + sProtoLogInstance = protoLogInstance; } private static void logStringMessage(LogLevel logLevel, IProtoLogGroup group, diff --git a/core/java/com/android/internal/protolog/ProtoLogImpl.java b/core/java/com/android/internal/protolog/ProtoLogImpl.java index b81de6fd9157..436309373d42 100644 --- a/core/java/com/android/internal/protolog/ProtoLogImpl.java +++ b/core/java/com/android/internal/protolog/ProtoLogImpl.java @@ -91,14 +91,6 @@ public class ProtoLogImpl { return getSingleInstance().isEnabled(group, level); } - /** - * Registers available protolog groups. A group must be registered before it can be used. - * @param protoLogGroups The groups to register for use in protolog. - */ - public static void registerGroups(IProtoLogGroup... protoLogGroups) { - getSingleInstance().registerGroups(protoLogGroups); - } - /** * Returns the single instance of the ProtoLogImpl singleton class. */ diff --git a/core/java/com/android/internal/protolog/common/IProtoLog.java b/core/java/com/android/internal/protolog/common/IProtoLog.java index f5695acd0614..d5c2ac10852f 100644 --- a/core/java/com/android/internal/protolog/common/IProtoLog.java +++ b/core/java/com/android/internal/protolog/common/IProtoLog.java @@ -68,10 +68,4 @@ public interface IProtoLog { * @return If we need to log this group and level to either ProtoLog or Logcat. */ boolean isEnabled(IProtoLogGroup group, LogLevel level); - - /** - * Registers available protolog groups. A group must be registered before it can be used. - * @param protoLogGroups The groups to register for use in protolog. - */ - void registerGroups(IProtoLogGroup... protoLogGroups); } -- cgit v1.2.3-59-g8ed1b