summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/com/android/internal/protolog/PerfettoProtoLogImpl.java58
1 files changed, 20 insertions, 38 deletions
diff --git a/core/java/com/android/internal/protolog/PerfettoProtoLogImpl.java b/core/java/com/android/internal/protolog/PerfettoProtoLogImpl.java
index a68696759849..89d223df9e60 100644
--- a/core/java/com/android/internal/protolog/PerfettoProtoLogImpl.java
+++ b/core/java/com/android/internal/protolog/PerfettoProtoLogImpl.java
@@ -101,8 +101,8 @@ public class PerfettoProtoLogImpl implements IProtoLog {
private final TreeMap<String, IProtoLogGroup> mLogGroups;
private final Runnable mCacheUpdater;
- private final Map<LogLevel, Integer> mDefaultLogLevelCounts = new ArrayMap<>();
- private final Map<IProtoLogGroup, Map<LogLevel, Integer>> mLogLevelCounts = new ArrayMap<>();
+ private final int[] mDefaultLogLevelCounts = new int[LogLevel.values().length];
+ private final Map<IProtoLogGroup, int[]> mLogLevelCounts = new ArrayMap<>();
private final ExecutorService mBackgroundLoggingService = Executors.newSingleThreadExecutor();
@@ -660,25 +660,10 @@ public class PerfettoProtoLogImpl implements IProtoLog {
@Override
public boolean isEnabled(IProtoLogGroup group, LogLevel level) {
- return group.isLogToLogcat() || getLogFromLevel(group).ordinal() <= level.ordinal();
- }
-
- private LogLevel getLogFromLevel(IProtoLogGroup group) {
- if (mLogLevelCounts.containsKey(group)) {
- for (LogLevel logLevel : LogLevel.values()) {
- if (mLogLevelCounts.get(group).getOrDefault(logLevel, 0) > 0) {
- return logLevel;
- }
- }
- } else {
- for (LogLevel logLevel : LogLevel.values()) {
- if (mDefaultLogLevelCounts.getOrDefault(logLevel, 0) > 0) {
- return logLevel;
- }
- }
- }
-
- return LogLevel.WTF;
+ final int[] groupLevelCount = mLogLevelCounts.get(group);
+ return (groupLevelCount == null && mDefaultLogLevelCounts[level.ordinal()] > 0)
+ || (groupLevelCount != null && groupLevelCount[level.ordinal()] > 0)
+ || group.isLogToLogcat();
}
/**
@@ -760,20 +745,22 @@ public class PerfettoProtoLogImpl implements IProtoLog {
this.mTracingInstances.incrementAndGet();
final LogLevel defaultLogFrom = config.getDefaultGroupConfig().logFrom;
- mDefaultLogLevelCounts.put(defaultLogFrom,
- mDefaultLogLevelCounts.getOrDefault(defaultLogFrom, 0) + 1);
+ for (int i = defaultLogFrom.ordinal(); i < LogLevel.values().length; i++) {
+ mDefaultLogLevelCounts[i]++;
+ }
final Set<String> overriddenGroupTags = config.getGroupTagsWithOverriddenConfigs();
for (String overriddenGroupTag : overriddenGroupTags) {
IProtoLogGroup group = mLogGroups.get(overriddenGroupTag);
- mLogLevelCounts.putIfAbsent(group, new ArrayMap<>());
- final Map<LogLevel, Integer> logLevelsCountsForGroup = mLogLevelCounts.get(group);
+ mLogLevelCounts.putIfAbsent(group, new int[LogLevel.values().length]);
+ final int[] logLevelsCountsForGroup = mLogLevelCounts.get(group);
final LogLevel logFromLevel = config.getConfigFor(overriddenGroupTag).logFrom;
- logLevelsCountsForGroup.put(logFromLevel,
- logLevelsCountsForGroup.getOrDefault(logFromLevel, 0) + 1);
+ for (int i = defaultLogFrom.ordinal(); i < LogLevel.values().length; i++) {
+ logLevelsCountsForGroup[logFromLevel.ordinal()]++;
+ }
}
mCacheUpdater.run();
@@ -783,10 +770,8 @@ public class PerfettoProtoLogImpl implements IProtoLog {
this.mTracingInstances.decrementAndGet();
final LogLevel defaultLogFrom = config.getDefaultGroupConfig().logFrom;
- mDefaultLogLevelCounts.put(defaultLogFrom,
- mDefaultLogLevelCounts.get(defaultLogFrom) - 1);
- if (mDefaultLogLevelCounts.get(defaultLogFrom) <= 0) {
- mDefaultLogLevelCounts.remove(defaultLogFrom);
+ for (int i = defaultLogFrom.ordinal(); i < LogLevel.values().length; i++) {
+ mDefaultLogLevelCounts[i]--;
}
final Set<String> overriddenGroupTags = config.getGroupTagsWithOverriddenConfigs();
@@ -794,16 +779,13 @@ public class PerfettoProtoLogImpl implements IProtoLog {
for (String overriddenGroupTag : overriddenGroupTags) {
IProtoLogGroup group = mLogGroups.get(overriddenGroupTag);
- mLogLevelCounts.putIfAbsent(group, new ArrayMap<>());
- final Map<LogLevel, Integer> logLevelsCountsForGroup = mLogLevelCounts.get(group);
+ final int[] logLevelsCountsForGroup = mLogLevelCounts.get(group);
final LogLevel logFromLevel = config.getConfigFor(overriddenGroupTag).logFrom;
- logLevelsCountsForGroup.put(logFromLevel,
- logLevelsCountsForGroup.get(logFromLevel) - 1);
- if (logLevelsCountsForGroup.get(logFromLevel) <= 0) {
- logLevelsCountsForGroup.remove(logFromLevel);
+ for (int i = defaultLogFrom.ordinal(); i < LogLevel.values().length; i++) {
+ logLevelsCountsForGroup[i]--;
}
- if (logLevelsCountsForGroup.isEmpty()) {
+ if (Arrays.stream(logLevelsCountsForGroup).allMatch(it -> it == 0)) {
mLogLevelCounts.remove(group);
}
}