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

Commit 536e6faf authored by Pablo Gamito's avatar Pablo Gamito
Browse files

Revert "Revert "Ensure we wait for all messages to be traced bef..."

Revert submission 28207894-revert-28147757-no-processing-protolog-IJZXUZOQGO

Reason for revert: Re-landing change

Reverted changes: /q/submissionid:28207894-revert-28147757-no-processing-protolog-IJZXUZOQGO

Change-Id: I65cd3d7606ba098175a86d68a630e48ec02dd949
parent 77e444e4
Loading
Loading
Loading
Loading
+30 −2
Original line number Diff line number Diff line
@@ -82,7 +82,10 @@ import java.util.TreeMap;
import java.util.UUID;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;

/**
 * A service for the ProtoLog logging system.
@@ -93,7 +96,7 @@ public class PerfettoProtoLogImpl implements IProtoLog {

    private final ProtoLogDataSource mDataSource = new ProtoLogDataSource(
            this::onTracingInstanceStart,
            this::dumpTransitionTraceConfig,
            this::onTracingFlush,
            this::onTracingInstanceStop
    );
    private final ProtoLogViewerConfigReader mViewerConfigReader;
@@ -104,7 +107,8 @@ public class PerfettoProtoLogImpl implements IProtoLog {
    private final int[] mDefaultLogLevelCounts = new int[LogLevel.values().length];
    private final Map<IProtoLogGroup, int[]> mLogLevelCounts = new ArrayMap<>();

    private final ExecutorService mBackgroundLoggingService = Executors.newSingleThreadExecutor();
    private final Lock mBackgroundServiceLock = new ReentrantLock();
    private ExecutorService mBackgroundLoggingService = Executors.newSingleThreadExecutor();

    public PerfettoProtoLogImpl(String viewerConfigFilePath, Runnable cacheUpdater) {
        this(() -> {
@@ -179,6 +183,30 @@ public class PerfettoProtoLogImpl implements IProtoLog {
        }
    }

    private void onTracingFlush() {
        final ExecutorService loggingService;
        try {
            mBackgroundServiceLock.lock();
            loggingService = mBackgroundLoggingService;
            mBackgroundLoggingService = Executors.newSingleThreadExecutor();
        } finally {
            mBackgroundServiceLock.unlock();
        }

        try {
            loggingService.shutdown();
            boolean finished = loggingService.awaitTermination(10, TimeUnit.SECONDS);

            if (!finished) {
                Log.e(LOG_TAG, "ProtoLog background tracing service didn't finish gracefully.");
            }
        } catch (InterruptedException e) {
            Log.e(LOG_TAG, "Failed to wait for tracing to finish", e);
        }

        dumpTransitionTraceConfig();
    }

    private void dumpTransitionTraceConfig() {
        if (mViewerConfigInputStreamProvider == null) {
            // No viewer config available