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

This commit is contained in:
Deepanshu Gupta
2016-04-06 19:03:59 +00:00
committed by Android (Google) Code Review
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();
}
}
}