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

Commit e80116fe authored by Chavi Weingarten's avatar Chavi Weingarten Committed by Android (Google) Code Review
Browse files

Merge "Unified layer capture functions into one function"

parents 18a745be 26c52487
Loading
Loading
Loading
Loading
+3 −39
Original line number Diff line number Diff line
@@ -1936,47 +1936,11 @@ status_t ScreenshotClient::captureDisplay(uint64_t displayOrLayerStack,
    return s->captureDisplay(displayOrLayerStack, captureResults);
}

status_t ScreenshotClient::captureLayers(const sp<IBinder>& layerHandle,
                                         ui::Dataspace /* reqDataspace */,
                                         ui::PixelFormat reqPixelFormat, const Rect& sourceCrop,
                                         float frameScale, sp<GraphicBuffer>* outBuffer) {
    sp<ISurfaceComposer> s(ComposerService::getComposerService());
    if (s == nullptr) return NO_INIT;

    LayerCaptureArgs args;
    args.layerHandle = layerHandle;
    args.pixelFormat = reqPixelFormat;
    args.sourceCrop = sourceCrop;
    args.frameScale = frameScale;

    ScreenCaptureResults captureResults;
    status_t ret = s->captureLayers(args, captureResults);

    *outBuffer = captureResults.buffer;
    return ret;
}

status_t ScreenshotClient::captureChildLayers(
        const sp<IBinder>& layerHandle, ui::Dataspace /* reqDataspace */,
        ui::PixelFormat reqPixelFormat, const Rect& sourceCrop,
        const std::unordered_set<sp<IBinder>, ISurfaceComposer::SpHash<IBinder>>& excludeHandles,
        float frameScale, sp<GraphicBuffer>* outBuffer) {
status_t ScreenshotClient::captureLayers(const LayerCaptureArgs& captureArgs,
                                         ScreenCaptureResults& captureResults) {
    sp<ISurfaceComposer> s(ComposerService::getComposerService());
    if (s == nullptr) return NO_INIT;

    LayerCaptureArgs args;
    args.layerHandle = layerHandle;
    args.pixelFormat = reqPixelFormat;
    args.sourceCrop = sourceCrop;
    args.frameScale = frameScale;
    args.excludeHandles = excludeHandles;
    args.childrenOnly = true;

    ScreenCaptureResults captureResults;
    status_t ret = s->captureLayers(args, captureResults);

    *outBuffer = captureResults.buffer;
    return ret;
    return s->captureLayers(captureArgs, captureResults);
}

} // namespace android
+2 −9
Original line number Diff line number Diff line
@@ -601,15 +601,8 @@ public:
                                   ScreenCaptureResults& captureResults);
    static status_t captureDisplay(uint64_t displayOrLayerStack,
                                   ScreenCaptureResults& captureResults);
    static status_t captureLayers(const sp<IBinder>& layerHandle, ui::Dataspace reqDataSpace,
                                  ui::PixelFormat reqPixelFormat, const Rect& sourceCrop,
                                  float frameScale, sp<GraphicBuffer>* outBuffer);
    static status_t captureChildLayers(
            const sp<IBinder>& layerHandle, ui::Dataspace reqDataSpace,
            ui::PixelFormat reqPixelFormat, const Rect& sourceCrop,
            const std::unordered_set<sp<IBinder>, ISurfaceComposer::SpHash<IBinder>>&
                    excludeHandles,
            float frameScale, sp<GraphicBuffer>* outBuffer);
    static status_t captureLayers(const LayerCaptureArgs& captureArgs,
                                  ScreenCaptureResults& captureResults);
};

// ---------------------------------------------------------------------------
+6 −5
Original line number Diff line number Diff line
@@ -18,7 +18,6 @@ using ui::ColorMode;
namespace {
const String8 DISPLAY_NAME("Credentials Display Test");
const String8 SURFACE_NAME("Test Surface Name");
const float FRAME_SCALE = 1.0f;
} // namespace

/**
@@ -272,10 +271,12 @@ TEST_F(CredentialsTest, CaptureLayersTest) {
    setupBackgroundSurface();
    sp<GraphicBuffer> outBuffer;
    std::function<status_t()> condition = [=]() {
        sp<GraphicBuffer> outBuffer;
        return ScreenshotClient::captureLayers(mBGSurfaceControl->getHandle(),
                                               ui::Dataspace::V0_SRGB, ui::PixelFormat::RGBA_8888,
                                               Rect(0, 0, 1, 1), FRAME_SCALE, &outBuffer);
        LayerCaptureArgs captureArgs;
        captureArgs.layerHandle = mBGSurfaceControl->getHandle();
        captureArgs.sourceCrop = {0, 0, 1, 1};

        ScreenCaptureResults captureResults;
        return ScreenshotClient::captureLayers(captureArgs, captureResults);
    };
    ASSERT_NO_FATAL_FAILURE(checkWithPrivileges<status_t>(condition, NO_ERROR, PERMISSION_DENIED));
}