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

Commit bc468db4 authored by Deepanshu Gupta's avatar Deepanshu Gupta Committed by android-build-merger
Browse files

Merge "Clear ThreadLocal storage from Choreographer" into nyc-dev

am: 39f1311b

* commit '39f1311b':
  Clear ThreadLocal storage from Choreographer

Change-Id: I6245cf707bc5449df2d729af4f89923223aeae93
parents 59c1ac83 39f1311b
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -15,8 +15,11 @@
 */
package android.view;

import com.android.ide.common.rendering.api.LayoutLog;
import com.android.layoutlib.bridge.Bridge;
import com.android.tools.layoutlib.annotations.LayoutlibDelegate;

import java.lang.reflect.Field;
import java.util.concurrent.atomic.AtomicReference;

/**
@@ -64,4 +67,17 @@ public class Choreographer_Delegate {

        thisChoreographer.doCallbacks(Choreographer.CALLBACK_COMMIT, frameTimeNanos);
    }

    public static void dispose() {
        try {
            Field threadInstanceField = Choreographer.class.getDeclaredField("sThreadInstance");
            @SuppressWarnings("unchecked") ThreadLocal<Choreographer> threadInstance =
                    (ThreadLocal<Choreographer>) threadInstanceField.get(null);
            threadInstance.remove();
        } catch (ReflectiveOperationException e) {
            assert false;
            Bridge.getLog().error(LayoutLog.TAG_BROKEN,
                    "Unable to clear Choreographer memory.", e, null);
        }
    }
}
+1 −0
Original line number Diff line number Diff line
@@ -1453,6 +1453,7 @@ public class RenderSessionImpl extends RenderAction<SessionParams> {

        if (createdLooper) {
            Bridge.cleanupThread();
            Choreographer_Delegate.dispose();
        }
    }
}