Merge "Clear ThreadLocal storage from Choreographer" into nyc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
39f1311b54
@@ -15,8 +15,11 @@
|
|||||||
*/
|
*/
|
||||||
package android.view;
|
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 com.android.tools.layoutlib.annotations.LayoutlibDelegate;
|
||||||
|
|
||||||
|
import java.lang.reflect.Field;
|
||||||
import java.util.concurrent.atomic.AtomicReference;
|
import java.util.concurrent.atomic.AtomicReference;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -64,4 +67,17 @@ public class Choreographer_Delegate {
|
|||||||
|
|
||||||
thisChoreographer.doCallbacks(Choreographer.CALLBACK_COMMIT, frameTimeNanos);
|
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);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1453,6 +1453,7 @@ public class RenderSessionImpl extends RenderAction<SessionParams> {
|
|||||||
|
|
||||||
if (createdLooper) {
|
if (createdLooper) {
|
||||||
Bridge.cleanupThread();
|
Bridge.cleanupThread();
|
||||||
|
Choreographer_Delegate.dispose();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user