diff options
| author | 2016-06-23 18:32:08 +0000 | |
|---|---|---|
| committer | 2016-06-23 18:32:11 +0000 | |
| commit | db13dd41a969b05f19c9bfe29786773bf12cb6b3 (patch) | |
| tree | ae6f1040b96d3244fabba18fe2c96e9520b82cc5 | |
| parent | 060d5a0e0a304400ee2ec1479346a37793bce0d7 (diff) | |
| parent | ac04f4e69a6de138c5afc668a2c89b7da7ff4e6a (diff) | |
Merge "Remove FD from the right Looper" into nyc-dev
| -rw-r--r-- | core/java/android/view/Choreographer.java | 13 | ||||
| -rw-r--r-- | core/java/com/android/internal/policy/BackdropFrameRenderer.java | 1 | ||||
| -rw-r--r-- | core/jni/android_view_DisplayEventReceiver.cpp | 8 |
3 files changed, 17 insertions, 5 deletions
diff --git a/core/java/android/view/Choreographer.java b/core/java/android/view/Choreographer.java index a865307b12bb..d3db74d1ea24 100644 --- a/core/java/android/view/Choreographer.java +++ b/core/java/android/view/Choreographer.java @@ -232,6 +232,19 @@ public final class Choreographer { return sThreadInstance.get(); } + /** Destroys the calling thread's choreographer + * @hide + */ + public static void releaseInstance() { + Choreographer old = sThreadInstance.get(); + sThreadInstance.remove(); + old.dispose(); + } + + private void dispose() { + mDisplayEventReceiver.dispose(); + } + /** * The amount of time, in milliseconds, between each frame of the animation. * <p> diff --git a/core/java/com/android/internal/policy/BackdropFrameRenderer.java b/core/java/com/android/internal/policy/BackdropFrameRenderer.java index 28281b3ce740..488f769cdf31 100644 --- a/core/java/com/android/internal/policy/BackdropFrameRenderer.java +++ b/core/java/com/android/internal/policy/BackdropFrameRenderer.java @@ -217,6 +217,7 @@ public class BackdropFrameRenderer extends Thread implements Choreographer.Frame synchronized (this) { // Make sure no more messages are being sent. mChoreographer = null; + Choreographer.releaseInstance(); } } diff --git a/core/jni/android_view_DisplayEventReceiver.cpp b/core/jni/android_view_DisplayEventReceiver.cpp index f9936aedaa5a..a0d5904157eb 100644 --- a/core/jni/android_view_DisplayEventReceiver.cpp +++ b/core/jni/android_view_DisplayEventReceiver.cpp @@ -81,14 +81,12 @@ NativeDisplayEventReceiver::NativeDisplayEventReceiver(JNIEnv* env, NativeDisplayEventReceiver::~NativeDisplayEventReceiver() { JNIEnv* env = AndroidRuntime::getJNIEnv(); env->DeleteGlobalRef(mReceiverWeakGlobal); + ALOGV("receiver %p ~ dtor display event receiver.", this); } void NativeDisplayEventReceiver::dispose() { ALOGV("receiver %p ~ Disposing display event receiver.", this); - - if (!mReceiver.initCheck()) { - mMessageQueue->getLooper()->removeFd(mReceiver.getFd()); - } + DisplayEventDispatcher::dispose(); } void NativeDisplayEventReceiver::dispatchVsync(nsecs_t timestamp, int32_t id, uint32_t count) { @@ -143,7 +141,7 @@ static jlong nativeInit(JNIEnv* env, jclass clazz, jobject receiverWeak, } static void nativeDispose(JNIEnv* env, jclass clazz, jlong receiverPtr) { - sp<NativeDisplayEventReceiver> receiver = + NativeDisplayEventReceiver* receiver = reinterpret_cast<NativeDisplayEventReceiver*>(receiverPtr); receiver->dispose(); receiver->decStrong(gDisplayEventReceiverClassInfo.clazz); // drop reference held by the object |