Loading core/java/android/view/ViewRootImpl.java +43 −5 Original line number Diff line number Diff line Loading @@ -321,6 +321,11 @@ public final class ViewRootImpl implements ViewParent, private static final int UNSET_SYNC_ID = -1; /** * Minimum time to wait before reporting changes to keep clear areas. */ private static final int KEEP_CLEAR_AREA_REPORT_RATE_MILLIS = 100; @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) static final ThreadLocal<HandlerActionQueue> sRunQueues = new ThreadLocal<HandlerActionQueue>(); Loading Loading @@ -796,6 +801,8 @@ public final class ViewRootImpl implements ViewParent, new ViewRootRectTracker(v -> v.collectPreferKeepClearRects()); private final ViewRootRectTracker mUnrestrictedKeepClearRectsTracker = new ViewRootRectTracker(v -> v.collectUnrestrictedPreferKeepClearRects()); private List<Rect> mPendingKeepClearAreas; private List<Rect> mPendingUnrestrictedKeepClearAreas; private IAccessibilityEmbeddedConnection mAccessibilityEmbeddedConnection; Loading Loading @@ -4824,6 +4831,14 @@ public final class ViewRootImpl implements ViewParent, unrestrictedKeepClearRects = Collections.emptyList(); } if (mHandler.hasMessages(MSG_REPORT_KEEP_CLEAR_RECTS)) { // Keep clear areas have been reported recently, wait before reporting new set // of keep clear areas mPendingKeepClearAreas = restrictedKeepClearRects; mPendingUnrestrictedKeepClearAreas = unrestrictedKeepClearRects; } else { mHandler.sendEmptyMessageDelayed(MSG_REPORT_KEEP_CLEAR_RECTS, KEEP_CLEAR_AREA_REPORT_RATE_MILLIS); try { mWindowSession.reportKeepClearAreasChanged(mWindow, restrictedKeepClearRects, unrestrictedKeepClearRects); Loading @@ -4832,6 +4847,25 @@ public final class ViewRootImpl implements ViewParent, } } } } void reportKeepClearAreasChanged() { final List<Rect> restrictedKeepClearRects = mPendingKeepClearAreas; final List<Rect> unrestrictedKeepClearRects = mPendingUnrestrictedKeepClearAreas; if (restrictedKeepClearRects == null && unrestrictedKeepClearRects == null) { return; } mPendingKeepClearAreas = null; mPendingUnrestrictedKeepClearAreas = null; try { mWindowSession.reportKeepClearAreasChanged(mWindow, restrictedKeepClearRects, unrestrictedKeepClearRects); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } } /** * Requests that the root render node is invalidated next time we perform a draw, such that Loading Loading @@ -5322,6 +5356,7 @@ public final class ViewRootImpl implements ViewParent, private static final int MSG_REQUEST_SCROLL_CAPTURE = 33; private static final int MSG_WINDOW_TOUCH_MODE_CHANGED = 34; private static final int MSG_KEEP_CLEAR_RECTS_CHANGED = 35; private static final int MSG_REPORT_KEEP_CLEAR_RECTS = 36; final class ViewRootHandler extends Handler { Loading Loading @@ -5598,6 +5633,9 @@ public final class ViewRootImpl implements ViewParent, case MSG_KEEP_CLEAR_RECTS_CHANGED: { keepClearRectsChanged(); } break; case MSG_REPORT_KEEP_CLEAR_RECTS: { reportKeepClearAreasChanged(); } break; case MSG_REQUEST_SCROLL_CAPTURE: handleScrollCaptureRequest((IScrollCaptureResponseListener) msg.obj); break; Loading Loading
core/java/android/view/ViewRootImpl.java +43 −5 Original line number Diff line number Diff line Loading @@ -321,6 +321,11 @@ public final class ViewRootImpl implements ViewParent, private static final int UNSET_SYNC_ID = -1; /** * Minimum time to wait before reporting changes to keep clear areas. */ private static final int KEEP_CLEAR_AREA_REPORT_RATE_MILLIS = 100; @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.R, trackingBug = 170729553) static final ThreadLocal<HandlerActionQueue> sRunQueues = new ThreadLocal<HandlerActionQueue>(); Loading Loading @@ -796,6 +801,8 @@ public final class ViewRootImpl implements ViewParent, new ViewRootRectTracker(v -> v.collectPreferKeepClearRects()); private final ViewRootRectTracker mUnrestrictedKeepClearRectsTracker = new ViewRootRectTracker(v -> v.collectUnrestrictedPreferKeepClearRects()); private List<Rect> mPendingKeepClearAreas; private List<Rect> mPendingUnrestrictedKeepClearAreas; private IAccessibilityEmbeddedConnection mAccessibilityEmbeddedConnection; Loading Loading @@ -4824,6 +4831,14 @@ public final class ViewRootImpl implements ViewParent, unrestrictedKeepClearRects = Collections.emptyList(); } if (mHandler.hasMessages(MSG_REPORT_KEEP_CLEAR_RECTS)) { // Keep clear areas have been reported recently, wait before reporting new set // of keep clear areas mPendingKeepClearAreas = restrictedKeepClearRects; mPendingUnrestrictedKeepClearAreas = unrestrictedKeepClearRects; } else { mHandler.sendEmptyMessageDelayed(MSG_REPORT_KEEP_CLEAR_RECTS, KEEP_CLEAR_AREA_REPORT_RATE_MILLIS); try { mWindowSession.reportKeepClearAreasChanged(mWindow, restrictedKeepClearRects, unrestrictedKeepClearRects); Loading @@ -4832,6 +4847,25 @@ public final class ViewRootImpl implements ViewParent, } } } } void reportKeepClearAreasChanged() { final List<Rect> restrictedKeepClearRects = mPendingKeepClearAreas; final List<Rect> unrestrictedKeepClearRects = mPendingUnrestrictedKeepClearAreas; if (restrictedKeepClearRects == null && unrestrictedKeepClearRects == null) { return; } mPendingKeepClearAreas = null; mPendingUnrestrictedKeepClearAreas = null; try { mWindowSession.reportKeepClearAreasChanged(mWindow, restrictedKeepClearRects, unrestrictedKeepClearRects); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); } } /** * Requests that the root render node is invalidated next time we perform a draw, such that Loading Loading @@ -5322,6 +5356,7 @@ public final class ViewRootImpl implements ViewParent, private static final int MSG_REQUEST_SCROLL_CAPTURE = 33; private static final int MSG_WINDOW_TOUCH_MODE_CHANGED = 34; private static final int MSG_KEEP_CLEAR_RECTS_CHANGED = 35; private static final int MSG_REPORT_KEEP_CLEAR_RECTS = 36; final class ViewRootHandler extends Handler { Loading Loading @@ -5598,6 +5633,9 @@ public final class ViewRootImpl implements ViewParent, case MSG_KEEP_CLEAR_RECTS_CHANGED: { keepClearRectsChanged(); } break; case MSG_REPORT_KEEP_CLEAR_RECTS: { reportKeepClearAreasChanged(); } break; case MSG_REQUEST_SCROLL_CAPTURE: handleScrollCaptureRequest((IScrollCaptureResponseListener) msg.obj); break; Loading