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

Commit cfabed7f authored by Kean Mariotti's avatar Kean Mariotti Committed by Android (Google) Code Review
Browse files

Merge "fix WM instance leaks" into main

parents 8c2b7554 3c805115
Loading
Loading
Loading
Loading
+13 −6
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ import android.util.Log;
import android.util.proto.ProtoInputStream;

import java.io.IOException;
import java.lang.ref.WeakReference;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.function.Consumer;

@@ -76,15 +77,15 @@ public final class WindowTracingDataSource extends DataSource<WindowTracingDataS
    private static final String TAG = "WindowTracingDataSource";

    @NonNull
    private final Consumer<Config> mOnStartCallback;
    private final WeakReference<Consumer<Config>> mOnStartCallback;
    @NonNull
    private final Consumer<Config> mOnStopCallback;
    private final WeakReference<Consumer<Config>> mOnStopCallback;

    public WindowTracingDataSource(@NonNull Consumer<Config> onStart,
            @NonNull Consumer<Config> onStop) {
        super(DATA_SOURCE_NAME);
        mOnStartCallback = onStart;
        mOnStopCallback = onStop;
        mOnStartCallback = new WeakReference(onStart);
        mOnStopCallback = new WeakReference(onStop);

        Producer.init(InitArguments.DEFAULTS);
        DataSourceParams params =
@@ -102,12 +103,18 @@ public final class WindowTracingDataSource extends DataSource<WindowTracingDataS
        return new Instance(this, instanceIndex, config != null ? config : CONFIG_DEFAULT) {
            @Override
            protected void onStart(StartCallbackArguments args) {
                mOnStartCallback.accept(mConfig);
                Consumer<Config> callback = mOnStartCallback.get();
                if (callback != null) {
                    callback.accept(mConfig);
                }
            }

            @Override
            protected void onStop(StopCallbackArguments args) {
                mOnStopCallback.accept(mConfig);
                Consumer<Config> callback = mOnStopCallback.get();
                if (callback != null) {
                    callback.accept(mConfig);
                }
            }
        };
    }