From e8f1a8c55939f5d2eb239f6d8aa1f928d7e4797d Mon Sep 17 00:00:00 2001 From: Mark Renouf Date: Wed, 27 Apr 2022 16:59:00 -0400 Subject: [PATCH] Restores a capture rate limit for long screenshots A previous change accidentally lost this delay between incremental screen captures. This rate limit is needed to prevent pushing screen capture faster than it can render correctly. Bug: 173700533 Bug: 217046739 Test: manual; long screenshot, observe app systrace Change-Id: Ibd7940299b502c40212957395d272b6e52cc28be --- .../android/internal/view/ScrollCaptureViewSupport.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/core/java/com/android/internal/view/ScrollCaptureViewSupport.java b/core/java/com/android/internal/view/ScrollCaptureViewSupport.java index 94a8ae5a8a67c..f2c27a494fc92 100644 --- a/core/java/com/android/internal/view/ScrollCaptureViewSupport.java +++ b/core/java/com/android/internal/view/ScrollCaptureViewSupport.java @@ -76,6 +76,7 @@ public class ScrollCaptureViewSupport implements ScrollCaptureCa ContentResolver contentResolver = context.getContentResolver(); mPostScrollDelayMillis = Settings.Global.getLong(contentResolver, SETTING_CAPTURE_DELAY, SETTING_CAPTURE_DELAY_DEFAULT); + Log.d(TAG, "screenshot.scroll_capture_delay = " + mPostScrollDelayMillis); } /** Based on ViewRootImpl#updateColorModeIfNeeded */ @@ -271,6 +272,13 @@ public class ScrollCaptureViewSupport implements ScrollCaptureCa Rect viewCaptureArea = new Rect(scrollResult.availableArea); viewCaptureArea.offset(0, -scrollResult.scrollDelta); + view.postOnAnimationDelayed( + () -> doCapture(scrollResult, view, viewCaptureArea, onComplete), + mPostScrollDelayMillis); + } + + private void doCapture(ScrollResult scrollResult, V view, Rect viewCaptureArea, + Consumer onComplete) { int result = mRenderer.renderView(view, viewCaptureArea); if (result == HardwareRenderer.SYNC_OK || result == HardwareRenderer.SYNC_REDRAW_REQUESTED) {