Loading core/java/com/android/internal/protolog/LegacyProtoLogImpl.java +8 −0 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ import static com.android.internal.protolog.ProtoLogMessage.MESSAGE_HASH; import static com.android.internal.protolog.ProtoLogMessage.SINT64_PARAMS; import static com.android.internal.protolog.ProtoLogMessage.STR_PARAMS; import android.annotation.NonNull; import android.annotation.Nullable; import android.os.ShellCommand; import android.os.SystemClock; Loading @@ -49,6 +50,7 @@ import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.TreeMap; import java.util.stream.Collectors; Loading Loading @@ -419,6 +421,12 @@ public class LegacyProtoLogImpl implements IProtoLog { return group.isLogToLogcat() || (group.isLogToProto() && isProtoEnabled()); } @Override @NonNull public List<IProtoLogGroup> getRegisteredGroups() { return mLogGroups.values().stream().toList(); } public void registerGroups(IProtoLogGroup... protoLogGroups) { for (IProtoLogGroup group : protoLogGroups) { mLogGroups.put(group.name(), group); Loading core/java/com/android/internal/protolog/LogcatOnlyProtoLogImpl.java +10 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.internal.protolog; import static com.android.internal.protolog.ProtoLog.REQUIRE_PROTOLOGTOOL; import android.annotation.NonNull; import android.text.TextUtils; import android.util.Log; Loading @@ -26,6 +27,9 @@ import com.android.internal.protolog.common.IProtoLog; import com.android.internal.protolog.common.IProtoLogGroup; import com.android.internal.protolog.common.LogLevel; import java.util.Collections; import java.util.List; /** * Class only create and used to server temporarily for when there is source code pre-processing by * the ProtoLog tool, when the tracing to Perfetto flag is off, and the static REQUIRE_PROTOLOGTOOL Loading Loading @@ -79,4 +83,10 @@ public class LogcatOnlyProtoLogImpl implements IProtoLog { public boolean isEnabled(IProtoLogGroup group, LogLevel level) { return true; } @Override @NonNull public List<IProtoLogGroup> getRegisteredGroups() { return Collections.emptyList(); } } core/java/com/android/internal/protolog/PerfettoProtoLogImpl.java +6 −0 Original line number Diff line number Diff line Loading @@ -306,6 +306,12 @@ public class PerfettoProtoLogImpl extends IProtoLogClient.Stub implements IProto || group.isLogToLogcat(); } @Override @NonNull public List<IProtoLogGroup> getRegisteredGroups() { return mLogGroups.values().stream().toList(); } private void registerGroupsLocally(@NonNull IProtoLogGroup[] protoLogGroups) { final var groupsLoggingToLogcat = new ArrayList<String>(); for (IProtoLogGroup protoLogGroup : protoLogGroups) { Loading core/java/com/android/internal/protolog/ProtoLog.java +16 −1 Original line number Diff line number Diff line Loading @@ -20,6 +20,9 @@ import com.android.internal.protolog.common.IProtoLog; import com.android.internal.protolog.common.IProtoLogGroup; import com.android.internal.protolog.common.LogLevel; import java.util.ArrayList; import java.util.Arrays; /** * ProtoLog API - exposes static logging methods. Usage of this API is similar * to {@code android.utils.Log} class. Instead of plain text log messages each call consists of Loading Loading @@ -49,6 +52,8 @@ public class ProtoLog { private static IProtoLog sProtoLogInstance; private static final Object sInitLock = new Object(); /** * Initialize ProtoLog in this process. * <p> Loading @@ -59,7 +64,17 @@ public class ProtoLog { */ public static void init(IProtoLogGroup... groups) { if (android.tracing.Flags.perfettoProtologTracing()) { synchronized (sInitLock) { if (sProtoLogInstance != null) { // The ProtoLog instance has already been initialized in this process final var alreadyRegisteredGroups = sProtoLogInstance.getRegisteredGroups(); final var allGroups = new ArrayList<>(alreadyRegisteredGroups); allGroups.addAll(Arrays.stream(groups).toList()); groups = allGroups.toArray(new IProtoLogGroup[0]); } sProtoLogInstance = new PerfettoProtoLogImpl(groups); } } else { // The first call to ProtoLog is likely to flip REQUIRE_PROTOLOGTOOL, which is when this // static block will be executed before REQUIRE_PROTOLOGTOOL is actually set. Loading core/java/com/android/internal/protolog/common/IProtoLog.java +7 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.internal.protolog.common; import java.util.List; /** * Interface for ProtoLog implementations. */ Loading Loading @@ -68,4 +70,9 @@ public interface IProtoLog { * @return If we need to log this group and level to either ProtoLog or Logcat. */ boolean isEnabled(IProtoLogGroup group, LogLevel level); /** * @return an immutable list of the registered ProtoLog groups in this ProtoLog instance. */ List<IProtoLogGroup> getRegisteredGroups(); } Loading
core/java/com/android/internal/protolog/LegacyProtoLogImpl.java +8 −0 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ import static com.android.internal.protolog.ProtoLogMessage.MESSAGE_HASH; import static com.android.internal.protolog.ProtoLogMessage.SINT64_PARAMS; import static com.android.internal.protolog.ProtoLogMessage.STR_PARAMS; import android.annotation.NonNull; import android.annotation.Nullable; import android.os.ShellCommand; import android.os.SystemClock; Loading @@ -49,6 +50,7 @@ import java.io.IOException; import java.io.PrintWriter; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.TreeMap; import java.util.stream.Collectors; Loading Loading @@ -419,6 +421,12 @@ public class LegacyProtoLogImpl implements IProtoLog { return group.isLogToLogcat() || (group.isLogToProto() && isProtoEnabled()); } @Override @NonNull public List<IProtoLogGroup> getRegisteredGroups() { return mLogGroups.values().stream().toList(); } public void registerGroups(IProtoLogGroup... protoLogGroups) { for (IProtoLogGroup group : protoLogGroups) { mLogGroups.put(group.name(), group); Loading
core/java/com/android/internal/protolog/LogcatOnlyProtoLogImpl.java +10 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.internal.protolog; import static com.android.internal.protolog.ProtoLog.REQUIRE_PROTOLOGTOOL; import android.annotation.NonNull; import android.text.TextUtils; import android.util.Log; Loading @@ -26,6 +27,9 @@ import com.android.internal.protolog.common.IProtoLog; import com.android.internal.protolog.common.IProtoLogGroup; import com.android.internal.protolog.common.LogLevel; import java.util.Collections; import java.util.List; /** * Class only create and used to server temporarily for when there is source code pre-processing by * the ProtoLog tool, when the tracing to Perfetto flag is off, and the static REQUIRE_PROTOLOGTOOL Loading Loading @@ -79,4 +83,10 @@ public class LogcatOnlyProtoLogImpl implements IProtoLog { public boolean isEnabled(IProtoLogGroup group, LogLevel level) { return true; } @Override @NonNull public List<IProtoLogGroup> getRegisteredGroups() { return Collections.emptyList(); } }
core/java/com/android/internal/protolog/PerfettoProtoLogImpl.java +6 −0 Original line number Diff line number Diff line Loading @@ -306,6 +306,12 @@ public class PerfettoProtoLogImpl extends IProtoLogClient.Stub implements IProto || group.isLogToLogcat(); } @Override @NonNull public List<IProtoLogGroup> getRegisteredGroups() { return mLogGroups.values().stream().toList(); } private void registerGroupsLocally(@NonNull IProtoLogGroup[] protoLogGroups) { final var groupsLoggingToLogcat = new ArrayList<String>(); for (IProtoLogGroup protoLogGroup : protoLogGroups) { Loading
core/java/com/android/internal/protolog/ProtoLog.java +16 −1 Original line number Diff line number Diff line Loading @@ -20,6 +20,9 @@ import com.android.internal.protolog.common.IProtoLog; import com.android.internal.protolog.common.IProtoLogGroup; import com.android.internal.protolog.common.LogLevel; import java.util.ArrayList; import java.util.Arrays; /** * ProtoLog API - exposes static logging methods. Usage of this API is similar * to {@code android.utils.Log} class. Instead of plain text log messages each call consists of Loading Loading @@ -49,6 +52,8 @@ public class ProtoLog { private static IProtoLog sProtoLogInstance; private static final Object sInitLock = new Object(); /** * Initialize ProtoLog in this process. * <p> Loading @@ -59,7 +64,17 @@ public class ProtoLog { */ public static void init(IProtoLogGroup... groups) { if (android.tracing.Flags.perfettoProtologTracing()) { synchronized (sInitLock) { if (sProtoLogInstance != null) { // The ProtoLog instance has already been initialized in this process final var alreadyRegisteredGroups = sProtoLogInstance.getRegisteredGroups(); final var allGroups = new ArrayList<>(alreadyRegisteredGroups); allGroups.addAll(Arrays.stream(groups).toList()); groups = allGroups.toArray(new IProtoLogGroup[0]); } sProtoLogInstance = new PerfettoProtoLogImpl(groups); } } else { // The first call to ProtoLog is likely to flip REQUIRE_PROTOLOGTOOL, which is when this // static block will be executed before REQUIRE_PROTOLOGTOOL is actually set. Loading
core/java/com/android/internal/protolog/common/IProtoLog.java +7 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,8 @@ package com.android.internal.protolog.common; import java.util.List; /** * Interface for ProtoLog implementations. */ Loading Loading @@ -68,4 +70,9 @@ public interface IProtoLog { * @return If we need to log this group and level to either ProtoLog or Logcat. */ boolean isEnabled(IProtoLogGroup group, LogLevel level); /** * @return an immutable list of the registered ProtoLog groups in this ProtoLog instance. */ List<IProtoLogGroup> getRegisteredGroups(); }