Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0ef6e3a7 authored by Chavi Weingarten's avatar Chavi Weingarten
Browse files

Increase screenshot timeout and add more logs

It's possible taking a screenshot is timing out on slow devices.
Increase the wait time and add more logs if the screenshot request is
timing out.

Test: presubmit
Bug: 257274080
Change-Id: I4857efef63fb42cf1acd13da16f8e42bfad2d399
parent 53a70ac4
Loading
Loading
Loading
Loading
+16 −7
Original line number Diff line number Diff line
@@ -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;
@@ -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);
+8 −2
Original line number Diff line number Diff line
@@ -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;
@@ -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,
@@ -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);
@@ -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();
    }
}