Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1d1f4a54 authored by Pablo Gamito's avatar Pablo Gamito
Browse files

Fix dumping shell transition handler mapping onFlush

Because the tls state is per tracing instance and per thread, and the onFlush callback runs on a different thread than the tracing function, we ended up with a new TLS state onFlush which contained an empty map.

Test: atest FlickerLibTest:android.tools.common.flicker.config.QuickswitchTest#canExtractQuickswitch
Bug: 323159148
Change-Id: I0d1338b9c3831d3be4981e19e1f95769afc2a664
parent f002f79b
Loading
Loading
Loading
Loading
+4 −0
Original line number Original line Diff line number Diff line
@@ -69,4 +69,8 @@ public abstract class DataSourceInstance implements AutoCloseable {
    public final void release() {
    public final void release() {
        mDataSource.releaseDataSourceInstance(mInstanceIndex);
        mDataSource.releaseDataSourceInstance(mInstanceIndex);
    }
    }

    public final int getInstanceIndex() {
        return mInstanceIndex;
    }
}
}
+12 −3
Original line number Original line Diff line number Diff line
@@ -24,8 +24,8 @@ import android.tracing.perfetto.StartCallbackArguments;
import android.tracing.perfetto.StopCallbackArguments;
import android.tracing.perfetto.StopCallbackArguments;
import android.util.proto.ProtoInputStream;
import android.util.proto.ProtoInputStream;


import java.util.HashMap;
import java.util.Map;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;


/**
/**
 * @hide
 * @hide
@@ -38,6 +38,9 @@ public class TransitionDataSource
    private final Runnable mOnFlushStaticCallback;
    private final Runnable mOnFlushStaticCallback;
    private final Runnable mOnStopStaticCallback;
    private final Runnable mOnStopStaticCallback;


    private final ConcurrentHashMap<Integer, ConcurrentHashMap<String, Integer>> mHandlerMappings =
            new ConcurrentHashMap<>();

    public TransitionDataSource(Runnable onStart, Runnable onFlush, Runnable onStop) {
    public TransitionDataSource(Runnable onStart, Runnable onFlush, Runnable onStop) {
        super(DATA_SOURCE_NAME);
        super(DATA_SOURCE_NAME);
        this.mOnStartStaticCallback = onStart;
        this.mOnStartStaticCallback = onStart;
@@ -47,11 +50,16 @@ public class TransitionDataSource


    @Override
    @Override
    protected TlsState createTlsState(CreateTlsStateArgs<DataSourceInstance> args) {
    protected TlsState createTlsState(CreateTlsStateArgs<DataSourceInstance> args) {
        return new TlsState();
        return new TlsState(args.getDataSourceInstanceLocked().getInstanceIndex());
    }
    }


    public class TlsState {
    public class TlsState {
        public final Map<String, Integer> handlerMapping = new HashMap<>();
        public final Map<String, Integer> handlerMapping;

        public TlsState(int instanceIndex) {
            handlerMapping = mHandlerMappings
                    .computeIfAbsent(instanceIndex, index -> new ConcurrentHashMap<>());
        }
    }
    }


    @Override
    @Override
@@ -70,6 +78,7 @@ public class TransitionDataSource
            @Override
            @Override
            protected void onStop(StopCallbackArguments args) {
            protected void onStop(StopCallbackArguments args) {
                mOnStopStaticCallback.run();
                mOnStopStaticCallback.run();
                mHandlerMappings.remove(instanceIndex);
            }
            }
        };
        };
    }
    }