Loading core/java/android/app/UiAutomation.java +16 −7 Original line number Diff line number Diff line Loading @@ -1206,12 +1206,14 @@ public final class UiAutomation { return null; } final ScreenshotHardwareBuffer screenshotBuffer = syncScreenCapture.getBuffer(); final ScreenshotHardwareBuffer screenshotBuffer = syncScreenCapture.getBuffer(); if (screenshotBuffer == null) { Log.e(LOG_TAG, "Failed to take screenshot for display=" + mDisplayId); return null; } Bitmap screenShot = screenshotBuffer.asBitmap(); if (screenShot == null) { Log.e(LOG_TAG, "mUiAutomationConnection.takeScreenshot() returned null for display " + mDisplayId); Log.e(LOG_TAG, "Failed to take screenshot for display=" + mDisplayId); return null; } Bitmap swBitmap; Loading Loading @@ -1263,16 +1265,23 @@ public final class UiAutomation { ScreenCapture.createSyncCaptureListener(); try { if (!mUiAutomationConnection.takeSurfaceControlScreenshot(sc, syncScreenCapture)) { Log.e(LOG_TAG, "Failed to take screenshot for window=" + window); return null; } } catch (RemoteException re) { Log.e(LOG_TAG, "Error while taking screenshot!", re); return null; } ScreenCapture.ScreenshotHardwareBuffer captureBuffer = syncScreenCapture.getBuffer(); ScreenCapture.ScreenshotHardwareBuffer captureBuffer = syncScreenCapture.getBuffer(); if (captureBuffer == null) { Log.e(LOG_TAG, "Failed to take screenshot for window=" + window); return null; } Bitmap screenShot = captureBuffer.asBitmap(); if (screenShot == null) { Log.e(LOG_TAG, "Failed to take screenshot for window=" + window); return null; } Bitmap swBitmap; try (HardwareBuffer buffer = captureBuffer.getHardwareBuffer()) { swBitmap = screenShot.copy(Bitmap.Config.ARGB_8888, false); Loading core/java/android/window/ScreenCapture.java +8 −2 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import android.graphics.ColorSpace; import android.graphics.PixelFormat; import android.graphics.Rect; import android.hardware.HardwareBuffer; import android.os.Build; import android.os.IBinder; import android.os.Parcel; import android.os.Parcelable; Loading @@ -42,7 +43,8 @@ import java.util.function.ObjIntConsumer; */ public class ScreenCapture { private static final String TAG = "ScreenCapture"; private static final int SCREENSHOT_WAIT_TIME_S = 1; private static final int SCREENSHOT_WAIT_TIME_S = 4 * Build.HW_TIMEOUT_MULTIPLIER; private static native int nativeCaptureDisplay(DisplayCaptureArgs captureArgs, long captureListener); private static native int nativeCaptureLayers(LayerCaptureArgs captureArgs, Loading Loading @@ -767,7 +769,10 @@ public class ScreenCapture { @Override public ScreenshotHardwareBuffer getBuffer() { try { latch.await(SCREENSHOT_WAIT_TIME_S, TimeUnit.SECONDS); if (!latch.await(SCREENSHOT_WAIT_TIME_S, TimeUnit.SECONDS)) { Log.e(TAG, "Timed out waiting for screenshot results"); return null; } return bufferRef[0]; } catch (Exception e) { Log.e(TAG, "Failed to wait for screen capture result", e); Loading @@ -791,6 +796,7 @@ public class ScreenCapture { * Get the {@link ScreenshotHardwareBuffer} synchronously. This can be null if the * screenshot failed or if there was no callback in {@link #SCREENSHOT_WAIT_TIME_S} seconds. */ @Nullable public abstract ScreenshotHardwareBuffer getBuffer(); } } Loading
core/java/android/app/UiAutomation.java +16 −7 Original line number Diff line number Diff line Loading @@ -1206,12 +1206,14 @@ public final class UiAutomation { return null; } final ScreenshotHardwareBuffer screenshotBuffer = syncScreenCapture.getBuffer(); final ScreenshotHardwareBuffer screenshotBuffer = syncScreenCapture.getBuffer(); if (screenshotBuffer == null) { Log.e(LOG_TAG, "Failed to take screenshot for display=" + mDisplayId); return null; } Bitmap screenShot = screenshotBuffer.asBitmap(); if (screenShot == null) { Log.e(LOG_TAG, "mUiAutomationConnection.takeScreenshot() returned null for display " + mDisplayId); Log.e(LOG_TAG, "Failed to take screenshot for display=" + mDisplayId); return null; } Bitmap swBitmap; Loading Loading @@ -1263,16 +1265,23 @@ public final class UiAutomation { ScreenCapture.createSyncCaptureListener(); try { if (!mUiAutomationConnection.takeSurfaceControlScreenshot(sc, syncScreenCapture)) { Log.e(LOG_TAG, "Failed to take screenshot for window=" + window); return null; } } catch (RemoteException re) { Log.e(LOG_TAG, "Error while taking screenshot!", re); return null; } ScreenCapture.ScreenshotHardwareBuffer captureBuffer = syncScreenCapture.getBuffer(); ScreenCapture.ScreenshotHardwareBuffer captureBuffer = syncScreenCapture.getBuffer(); if (captureBuffer == null) { Log.e(LOG_TAG, "Failed to take screenshot for window=" + window); return null; } Bitmap screenShot = captureBuffer.asBitmap(); if (screenShot == null) { Log.e(LOG_TAG, "Failed to take screenshot for window=" + window); return null; } Bitmap swBitmap; try (HardwareBuffer buffer = captureBuffer.getHardwareBuffer()) { swBitmap = screenShot.copy(Bitmap.Config.ARGB_8888, false); Loading
core/java/android/window/ScreenCapture.java +8 −2 Original line number Diff line number Diff line Loading @@ -23,6 +23,7 @@ import android.graphics.ColorSpace; import android.graphics.PixelFormat; import android.graphics.Rect; import android.hardware.HardwareBuffer; import android.os.Build; import android.os.IBinder; import android.os.Parcel; import android.os.Parcelable; Loading @@ -42,7 +43,8 @@ import java.util.function.ObjIntConsumer; */ public class ScreenCapture { private static final String TAG = "ScreenCapture"; private static final int SCREENSHOT_WAIT_TIME_S = 1; private static final int SCREENSHOT_WAIT_TIME_S = 4 * Build.HW_TIMEOUT_MULTIPLIER; private static native int nativeCaptureDisplay(DisplayCaptureArgs captureArgs, long captureListener); private static native int nativeCaptureLayers(LayerCaptureArgs captureArgs, Loading Loading @@ -767,7 +769,10 @@ public class ScreenCapture { @Override public ScreenshotHardwareBuffer getBuffer() { try { latch.await(SCREENSHOT_WAIT_TIME_S, TimeUnit.SECONDS); if (!latch.await(SCREENSHOT_WAIT_TIME_S, TimeUnit.SECONDS)) { Log.e(TAG, "Timed out waiting for screenshot results"); return null; } return bufferRef[0]; } catch (Exception e) { Log.e(TAG, "Failed to wait for screen capture result", e); Loading @@ -791,6 +796,7 @@ public class ScreenCapture { * Get the {@link ScreenshotHardwareBuffer} synchronously. This can be null if the * screenshot failed or if there was no callback in {@link #SCREENSHOT_WAIT_TIME_S} seconds. */ @Nullable public abstract ScreenshotHardwareBuffer getBuffer(); } }