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

am: 39f1311b

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

Change-Id: I6245cf707bc5449df2d729af4f89923223aeae93
This commit is contained in:
Deepanshu Gupta
2016-04-06 19:15:11 +00:00
committed by android-build-merger
2 changed files with 17 additions and 0 deletions

View File

@@ -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);
}
}
}

View File

@@ -1453,6 +1453,7 @@ public class RenderSessionImpl extends RenderAction<SessionParams> {
if (createdLooper) {
Bridge.cleanupThread();
Choreographer_Delegate.dispose();
}
}
}