Loading core/java/android/tracing/transition/TransitionDataSource.java +1 −23 Original line number Diff line number Diff line Loading @@ -16,7 +16,6 @@ package android.tracing.transition; import android.tracing.perfetto.CreateTlsStateArgs; import android.tracing.perfetto.DataSource; import android.tracing.perfetto.DataSourceInstance; import android.tracing.perfetto.FlushCallbackArguments; Loading @@ -24,23 +23,17 @@ import android.tracing.perfetto.StartCallbackArguments; import android.tracing.perfetto.StopCallbackArguments; import android.util.proto.ProtoInputStream; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; /** * @hide */ public class TransitionDataSource extends DataSource<DataSourceInstance, TransitionDataSource.TlsState, Void> { extends DataSource<DataSourceInstance, Void, Void> { public static String DATA_SOURCE_NAME = "com.android.wm.shell.transition"; private final Runnable mOnStartStaticCallback; private final Runnable mOnFlushStaticCallback; private final Runnable mOnStopStaticCallback; private final ConcurrentHashMap<Integer, ConcurrentHashMap<String, Integer>> mHandlerMappings = new ConcurrentHashMap<>(); public TransitionDataSource(Runnable onStart, Runnable onFlush, Runnable onStop) { super(DATA_SOURCE_NAME); this.mOnStartStaticCallback = onStart; Loading @@ -48,20 +41,6 @@ public class TransitionDataSource this.mOnStopStaticCallback = onStop; } @Override protected TlsState createTlsState(CreateTlsStateArgs<DataSourceInstance> args) { return new TlsState(args.getDataSourceInstanceLocked().getInstanceIndex()); } public class TlsState { public final Map<String, Integer> handlerMapping; public TlsState(int instanceIndex) { handlerMapping = mHandlerMappings .computeIfAbsent(instanceIndex, index -> new ConcurrentHashMap<>()); } } @Override public DataSourceInstance createInstance(ProtoInputStream configStream, int instanceIndex) { return new DataSourceInstance(this, instanceIndex) { Loading @@ -78,7 +57,6 @@ public class TransitionDataSource @Override protected void onStop(StopCallbackArguments args) { mOnStopStaticCallback.run(); mHandlerMappings.remove(instanceIndex); } }; } Loading libs/WindowManager/Shell/src/com/android/wm/shell/transition/tracing/PerfettoTransitionTracer.java +16 −25 Original line number Diff line number Diff line Loading @@ -19,16 +19,15 @@ package com.android.wm.shell.transition.tracing; import android.internal.perfetto.protos.PerfettoTrace; import android.os.SystemClock; import android.os.Trace; import android.tracing.perfetto.DataSourceInstance; import android.tracing.perfetto.DataSourceParams; import android.tracing.perfetto.InitArguments; import android.tracing.perfetto.Producer; import android.tracing.perfetto.TracingContext; import android.tracing.transition.TransitionDataSource; import android.util.proto.ProtoOutputStream; import com.android.wm.shell.transition.Transitions; import java.util.HashMap; import java.util.Map; import java.util.concurrent.atomic.AtomicInteger; Loading @@ -41,6 +40,7 @@ public class PerfettoTransitionTracer implements TransitionTracer { mActiveTraces::incrementAndGet, this::onFlush, mActiveTraces::decrementAndGet); private final Map<String, Integer> mHandlerMapping = new HashMap<>(); public PerfettoTransitionTracer() { Producer.init(InitArguments.DEFAULTS); Loading Loading @@ -69,7 +69,7 @@ public class PerfettoTransitionTracer implements TransitionTracer { private void doLogDispatched(int transitionId, Transitions.TransitionHandler handler) { mDataSource.trace(ctx -> { final int handlerId = getHandlerId(handler, ctx); final int handlerId = getHandlerId(handler); final ProtoOutputStream os = ctx.newTracePacket(); final long token = os.start(PerfettoTrace.TracePacket.SHELL_TRANSITION); Loading @@ -81,17 +81,16 @@ public class PerfettoTransitionTracer implements TransitionTracer { }); } private static int getHandlerId(Transitions.TransitionHandler handler, TracingContext<DataSourceInstance, TransitionDataSource.TlsState, Void> ctx) { final Map<String, Integer> handlerMapping = ctx.getCustomTlsState().handlerMapping; private int getHandlerId(Transitions.TransitionHandler handler) { final int handlerId; if (handlerMapping.containsKey(handler.getClass().getName())) { handlerId = handlerMapping.get(handler.getClass().getName()); synchronized (mHandlerMapping) { if (mHandlerMapping.containsKey(handler.getClass().getName())) { handlerId = mHandlerMapping.get(handler.getClass().getName()); } else { // + 1 to avoid 0 ids which can be confused with missing value when dumped to proto handlerId = handlerMapping.size() + 1; handlerMapping.put(handler.getClass().getName(), handlerId); handlerId = mHandlerMapping.size() + 1; mHandlerMapping.put(handler.getClass().getName(), handlerId); } } return handlerId; } Loading Loading @@ -194,22 +193,14 @@ public class PerfettoTransitionTracer implements TransitionTracer { } private void onFlush() { Trace.traceBegin(Trace.TRACE_TAG_WINDOW_MANAGER, "onFlush"); try { doOnFlush(); } finally { Trace.traceEnd(Trace.TRACE_TAG_WINDOW_MANAGER); } } private void doOnFlush() { mDataSource.trace(ctx -> { final ProtoOutputStream os = ctx.newTracePacket(); final Map<String, Integer> handlerMapping = ctx.getCustomTlsState().handlerMapping; for (String handler : handlerMapping.keySet()) { for (Map.Entry<String, Integer> entry : mHandlerMapping.entrySet()) { final String handler = entry.getKey(); final int handlerId = entry.getValue(); final long token = os.start(PerfettoTrace.TracePacket.SHELL_HANDLER_MAPPINGS); os.write(PerfettoTrace.ShellHandlerMapping.ID, handlerMapping.get(handler)); os.write(PerfettoTrace.ShellHandlerMapping.ID, handlerId); os.write(PerfettoTrace.ShellHandlerMapping.NAME, handler); os.end(token); } Loading Loading
core/java/android/tracing/transition/TransitionDataSource.java +1 −23 Original line number Diff line number Diff line Loading @@ -16,7 +16,6 @@ package android.tracing.transition; import android.tracing.perfetto.CreateTlsStateArgs; import android.tracing.perfetto.DataSource; import android.tracing.perfetto.DataSourceInstance; import android.tracing.perfetto.FlushCallbackArguments; Loading @@ -24,23 +23,17 @@ import android.tracing.perfetto.StartCallbackArguments; import android.tracing.perfetto.StopCallbackArguments; import android.util.proto.ProtoInputStream; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; /** * @hide */ public class TransitionDataSource extends DataSource<DataSourceInstance, TransitionDataSource.TlsState, Void> { extends DataSource<DataSourceInstance, Void, Void> { public static String DATA_SOURCE_NAME = "com.android.wm.shell.transition"; private final Runnable mOnStartStaticCallback; private final Runnable mOnFlushStaticCallback; private final Runnable mOnStopStaticCallback; private final ConcurrentHashMap<Integer, ConcurrentHashMap<String, Integer>> mHandlerMappings = new ConcurrentHashMap<>(); public TransitionDataSource(Runnable onStart, Runnable onFlush, Runnable onStop) { super(DATA_SOURCE_NAME); this.mOnStartStaticCallback = onStart; Loading @@ -48,20 +41,6 @@ public class TransitionDataSource this.mOnStopStaticCallback = onStop; } @Override protected TlsState createTlsState(CreateTlsStateArgs<DataSourceInstance> args) { return new TlsState(args.getDataSourceInstanceLocked().getInstanceIndex()); } public class TlsState { public final Map<String, Integer> handlerMapping; public TlsState(int instanceIndex) { handlerMapping = mHandlerMappings .computeIfAbsent(instanceIndex, index -> new ConcurrentHashMap<>()); } } @Override public DataSourceInstance createInstance(ProtoInputStream configStream, int instanceIndex) { return new DataSourceInstance(this, instanceIndex) { Loading @@ -78,7 +57,6 @@ public class TransitionDataSource @Override protected void onStop(StopCallbackArguments args) { mOnStopStaticCallback.run(); mHandlerMappings.remove(instanceIndex); } }; } Loading
libs/WindowManager/Shell/src/com/android/wm/shell/transition/tracing/PerfettoTransitionTracer.java +16 −25 Original line number Diff line number Diff line Loading @@ -19,16 +19,15 @@ package com.android.wm.shell.transition.tracing; import android.internal.perfetto.protos.PerfettoTrace; import android.os.SystemClock; import android.os.Trace; import android.tracing.perfetto.DataSourceInstance; import android.tracing.perfetto.DataSourceParams; import android.tracing.perfetto.InitArguments; import android.tracing.perfetto.Producer; import android.tracing.perfetto.TracingContext; import android.tracing.transition.TransitionDataSource; import android.util.proto.ProtoOutputStream; import com.android.wm.shell.transition.Transitions; import java.util.HashMap; import java.util.Map; import java.util.concurrent.atomic.AtomicInteger; Loading @@ -41,6 +40,7 @@ public class PerfettoTransitionTracer implements TransitionTracer { mActiveTraces::incrementAndGet, this::onFlush, mActiveTraces::decrementAndGet); private final Map<String, Integer> mHandlerMapping = new HashMap<>(); public PerfettoTransitionTracer() { Producer.init(InitArguments.DEFAULTS); Loading Loading @@ -69,7 +69,7 @@ public class PerfettoTransitionTracer implements TransitionTracer { private void doLogDispatched(int transitionId, Transitions.TransitionHandler handler) { mDataSource.trace(ctx -> { final int handlerId = getHandlerId(handler, ctx); final int handlerId = getHandlerId(handler); final ProtoOutputStream os = ctx.newTracePacket(); final long token = os.start(PerfettoTrace.TracePacket.SHELL_TRANSITION); Loading @@ -81,17 +81,16 @@ public class PerfettoTransitionTracer implements TransitionTracer { }); } private static int getHandlerId(Transitions.TransitionHandler handler, TracingContext<DataSourceInstance, TransitionDataSource.TlsState, Void> ctx) { final Map<String, Integer> handlerMapping = ctx.getCustomTlsState().handlerMapping; private int getHandlerId(Transitions.TransitionHandler handler) { final int handlerId; if (handlerMapping.containsKey(handler.getClass().getName())) { handlerId = handlerMapping.get(handler.getClass().getName()); synchronized (mHandlerMapping) { if (mHandlerMapping.containsKey(handler.getClass().getName())) { handlerId = mHandlerMapping.get(handler.getClass().getName()); } else { // + 1 to avoid 0 ids which can be confused with missing value when dumped to proto handlerId = handlerMapping.size() + 1; handlerMapping.put(handler.getClass().getName(), handlerId); handlerId = mHandlerMapping.size() + 1; mHandlerMapping.put(handler.getClass().getName(), handlerId); } } return handlerId; } Loading Loading @@ -194,22 +193,14 @@ public class PerfettoTransitionTracer implements TransitionTracer { } private void onFlush() { Trace.traceBegin(Trace.TRACE_TAG_WINDOW_MANAGER, "onFlush"); try { doOnFlush(); } finally { Trace.traceEnd(Trace.TRACE_TAG_WINDOW_MANAGER); } } private void doOnFlush() { mDataSource.trace(ctx -> { final ProtoOutputStream os = ctx.newTracePacket(); final Map<String, Integer> handlerMapping = ctx.getCustomTlsState().handlerMapping; for (String handler : handlerMapping.keySet()) { for (Map.Entry<String, Integer> entry : mHandlerMapping.entrySet()) { final String handler = entry.getKey(); final int handlerId = entry.getValue(); final long token = os.start(PerfettoTrace.TracePacket.SHELL_HANDLER_MAPPINGS); os.write(PerfettoTrace.ShellHandlerMapping.ID, handlerMapping.get(handler)); os.write(PerfettoTrace.ShellHandlerMapping.ID, handlerId); os.write(PerfettoTrace.ShellHandlerMapping.NAME, handler); os.end(token); } Loading