From 47482969bbb832ff941e1f9ab8a03f453e5ff3d7 Mon Sep 17 00:00:00 2001 From: Adam Powell Date: Thu, 27 May 2010 15:19:58 -0700 Subject: [PATCH] Recycle MotionEvents for ACTION_OUTSIDE in WindowManagerService Change-Id: I648e5ad780cad285f190e06cfff1780c6dad0117 --- .../android/server/WindowManagerService.java | 31 +++++++++++-------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/services/java/com/android/server/WindowManagerService.java b/services/java/com/android/server/WindowManagerService.java index 69664003e9ac5..9cc73aaea1d00 100644 --- a/services/java/com/android/server/WindowManagerService.java +++ b/services/java/com/android/server/WindowManagerService.java @@ -5185,19 +5185,24 @@ public class WindowManagerService extends IWindowManager.Stub WindowState out = mKeyWaiter.mOutsideTouchTargets; if (out != null) { MotionEvent oev = MotionEvent.obtain(ev); - oev.setAction(MotionEvent.ACTION_OUTSIDE); - do { - final Rect frame = out.mFrame; - oev.offsetLocation(-(float)frame.left, -(float)frame.top); - try { - out.mClient.dispatchPointer(oev, eventTime, false); - } catch (android.os.RemoteException e) { - Slog.i(TAG, "WINDOW DIED during outside motion dispatch: " + out); - } - oev.offsetLocation((float)frame.left, (float)frame.top); - out = out.mNextOutsideTouch; - } while (out != null); - mKeyWaiter.mOutsideTouchTargets = null; + try { + oev.setAction(MotionEvent.ACTION_OUTSIDE); + do { + final Rect frame = out.mFrame; + oev.offsetLocation(-(float)frame.left, -(float)frame.top); + try { + out.mClient.dispatchPointer(oev, eventTime, false); + } catch (android.os.RemoteException e) { + Slog.i(TAG, + "WINDOW DIED during outside motion dispatch: " + out); + } + oev.offsetLocation((float)frame.left, (float)frame.top); + out = out.mNextOutsideTouch; + } while (out != null); + mKeyWaiter.mOutsideTouchTargets = null; + } finally { + oev.recycle(); + } } }