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

Commit 9761aa52 authored by Rob Carr's avatar Rob Carr Committed by Android (Google) Code Review
Browse files

Merge "SurfaceFlinger: Indicate whether we have captured secure layers." into qt-dev

parents dea6d23a 108b2c7d
Loading
Loading
Loading
Loading
+10 −4
Original line number Original line Diff line number Diff line
@@ -109,7 +109,7 @@ public:
    }
    }


    virtual status_t captureScreen(const sp<IBinder>& display, sp<GraphicBuffer>* outBuffer,
    virtual status_t captureScreen(const sp<IBinder>& display, sp<GraphicBuffer>* outBuffer,
                                   const ui::Dataspace reqDataspace,
                                   bool& outCapturedSecureLayers, const ui::Dataspace reqDataspace,
                                   const ui::PixelFormat reqPixelFormat, Rect sourceCrop,
                                   const ui::PixelFormat reqPixelFormat, Rect sourceCrop,
                                   uint32_t reqWidth, uint32_t reqHeight, bool useIdentityTransform,
                                   uint32_t reqWidth, uint32_t reqHeight, bool useIdentityTransform,
                                   ISurfaceComposer::Rotation rotation, bool captureSecureLayers) {
                                   ISurfaceComposer::Rotation rotation, bool captureSecureLayers) {
@@ -137,6 +137,7 @@ public:


        *outBuffer = new GraphicBuffer();
        *outBuffer = new GraphicBuffer();
        reply.read(**outBuffer);
        reply.read(**outBuffer);
        outCapturedSecureLayers = reply.readBool();


        return result;
        return result;
    }
    }
@@ -1027,12 +1028,17 @@ status_t BnSurfaceComposer::onTransact(
            int32_t rotation = data.readInt32();
            int32_t rotation = data.readInt32();
            bool captureSecureLayers = static_cast<bool>(data.readInt32());
            bool captureSecureLayers = static_cast<bool>(data.readInt32());


            status_t res = captureScreen(display, &outBuffer, reqDataspace, reqPixelFormat,
            bool capturedSecureLayers = false;
                                         sourceCrop, reqWidth, reqHeight, useIdentityTransform,
            status_t res = captureScreen(display, &outBuffer, capturedSecureLayers, reqDataspace,
                                         static_cast<ISurfaceComposer::Rotation>(rotation), captureSecureLayers);
                                         reqPixelFormat, sourceCrop, reqWidth, reqHeight,
                                         useIdentityTransform,
                                         static_cast<ISurfaceComposer::Rotation>(rotation),
                                         captureSecureLayers);

            reply->writeInt32(res);
            reply->writeInt32(res);
            if (res == NO_ERROR) {
            if (res == NO_ERROR) {
                reply->write(*outBuffer);
                reply->write(*outBuffer);
                reply->writeBool(capturedSecureLayers);
            }
            }
            return NO_ERROR;
            return NO_ERROR;
        }
        }
+10 −7
Original line number Original line Diff line number Diff line
@@ -1542,11 +1542,13 @@ status_t SurfaceComposerClient::setDisplayBrightness(const sp<IBinder>& displayT
status_t ScreenshotClient::capture(const sp<IBinder>& display, const ui::Dataspace reqDataSpace,
status_t ScreenshotClient::capture(const sp<IBinder>& display, const ui::Dataspace reqDataSpace,
                                   const ui::PixelFormat reqPixelFormat, Rect sourceCrop,
                                   const ui::PixelFormat reqPixelFormat, Rect sourceCrop,
                                   uint32_t reqWidth, uint32_t reqHeight, bool useIdentityTransform,
                                   uint32_t reqWidth, uint32_t reqHeight, bool useIdentityTransform,
                                   uint32_t rotation, bool captureSecureLayers, sp<GraphicBuffer>* outBuffer) {
                                   uint32_t rotation, bool captureSecureLayers,
                                   sp<GraphicBuffer>* outBuffer, bool& outCapturedSecureLayers) {
    sp<ISurfaceComposer> s(ComposerService::getComposerService());
    sp<ISurfaceComposer> s(ComposerService::getComposerService());
    if (s == nullptr) return NO_INIT;
    if (s == nullptr) return NO_INIT;
    status_t ret = s->captureScreen(display, outBuffer, reqDataSpace, reqPixelFormat, sourceCrop,
    status_t ret =
            reqWidth, reqHeight, useIdentityTransform,
            s->captureScreen(display, outBuffer, outCapturedSecureLayers, reqDataSpace,
                             reqPixelFormat, sourceCrop, reqWidth, reqHeight, useIdentityTransform,
                             static_cast<ISurfaceComposer::Rotation>(rotation),
                             static_cast<ISurfaceComposer::Rotation>(rotation),
                             captureSecureLayers);
                             captureSecureLayers);
    if (ret != NO_ERROR) {
    if (ret != NO_ERROR) {
@@ -1559,8 +1561,9 @@ status_t ScreenshotClient::capture(const sp<IBinder>& display, const ui::Dataspa
                                   const ui::PixelFormat reqPixelFormat, Rect sourceCrop,
                                   const ui::PixelFormat reqPixelFormat, Rect sourceCrop,
                                   uint32_t reqWidth, uint32_t reqHeight, bool useIdentityTransform,
                                   uint32_t reqWidth, uint32_t reqHeight, bool useIdentityTransform,
                                   uint32_t rotation, sp<GraphicBuffer>* outBuffer) {
                                   uint32_t rotation, sp<GraphicBuffer>* outBuffer) {
    return capture(display, reqDataSpace, reqPixelFormat, sourceCrop, reqWidth,
    bool ignored;
            reqHeight, useIdentityTransform, rotation, false, outBuffer);
    return capture(display, reqDataSpace, reqPixelFormat, sourceCrop, reqWidth, reqHeight,
                   useIdentityTransform, rotation, false, outBuffer, ignored);
}
}


status_t ScreenshotClient::captureLayers(const sp<IBinder>& layerHandle,
status_t ScreenshotClient::captureLayers(const sp<IBinder>& layerHandle,
+5 −3
Original line number Original line Diff line number Diff line
@@ -212,7 +212,7 @@ public:
     * it) around its center.
     * it) around its center.
     */
     */
    virtual status_t captureScreen(const sp<IBinder>& display, sp<GraphicBuffer>* outBuffer,
    virtual status_t captureScreen(const sp<IBinder>& display, sp<GraphicBuffer>* outBuffer,
                                   const ui::Dataspace reqDataspace,
                                   bool& outCapturedSecureLayers, const ui::Dataspace reqDataspace,
                                   const ui::PixelFormat reqPixelFormat, Rect sourceCrop,
                                   const ui::PixelFormat reqPixelFormat, Rect sourceCrop,
                                   uint32_t reqWidth, uint32_t reqHeight, bool useIdentityTransform,
                                   uint32_t reqWidth, uint32_t reqHeight, bool useIdentityTransform,
                                   Rotation rotation = eRotateNone,
                                   Rotation rotation = eRotateNone,
@@ -241,8 +241,10 @@ public:
    virtual status_t captureScreen(const sp<IBinder>& display, sp<GraphicBuffer>* outBuffer,
    virtual status_t captureScreen(const sp<IBinder>& display, sp<GraphicBuffer>* outBuffer,
                                   Rect sourceCrop, uint32_t reqWidth, uint32_t reqHeight,
                                   Rect sourceCrop, uint32_t reqWidth, uint32_t reqHeight,
                                   bool useIdentityTransform, Rotation rotation = eRotateNone) {
                                   bool useIdentityTransform, Rotation rotation = eRotateNone) {
        return captureScreen(display, outBuffer, ui::Dataspace::V0_SRGB, ui::PixelFormat::RGBA_8888,
        bool outIgnored;
                             sourceCrop, reqWidth, reqHeight, useIdentityTransform, rotation);
        return captureScreen(display, outBuffer, outIgnored, ui::Dataspace::V0_SRGB,
                             ui::PixelFormat::RGBA_8888, sourceCrop, reqWidth, reqHeight,
                             useIdentityTransform, rotation);
    }
    }


    template <class AA>
    template <class AA>
+2 −1
Original line number Original line Diff line number Diff line
@@ -509,7 +509,8 @@ public:
    static status_t capture(const sp<IBinder>& display, const ui::Dataspace reqDataSpace,
    static status_t capture(const sp<IBinder>& display, const ui::Dataspace reqDataSpace,
                            const ui::PixelFormat reqPixelFormat, Rect sourceCrop,
                            const ui::PixelFormat reqPixelFormat, Rect sourceCrop,
                            uint32_t reqWidth, uint32_t reqHeight, bool useIdentityTransform,
                            uint32_t reqWidth, uint32_t reqHeight, bool useIdentityTransform,
                            uint32_t rotation, bool captureSecureLayers, sp<GraphicBuffer>* outBuffer);
                            uint32_t rotation, bool captureSecureLayers,
                            sp<GraphicBuffer>* outBuffer, bool& outCapturedSecureLayers);
    static status_t capture(const sp<IBinder>& display, const ui::Dataspace reqDataSpace,
    static status_t capture(const sp<IBinder>& display, const ui::Dataspace reqDataSpace,
                            const ui::PixelFormat reqPixelFormat, Rect sourceCrop,
                            const ui::PixelFormat reqPixelFormat, Rect sourceCrop,
                            uint32_t reqWidth, uint32_t reqHeight, bool useIdentityTransform,
                            uint32_t reqWidth, uint32_t reqHeight, bool useIdentityTransform,
+5 −3
Original line number Original line Diff line number Diff line
@@ -126,7 +126,7 @@ TEST_F(SurfaceTest, QueuesToWindowComposerIsTrueWhenPurgatorized) {
}
}


// This test probably doesn't belong here.
// This test probably doesn't belong here.
TEST_F(SurfaceTest, ScreenshotsOfProtectedBuffersSucceed) {
TEST_F(SurfaceTest, ScreenshotsOfProtectedBuffersDontSucceed) {
    sp<ANativeWindow> anw(mSurface);
    sp<ANativeWindow> anw(mSurface);


    // Verify the screenshot works with no protected buffers.
    // Verify the screenshot works with no protected buffers.
@@ -136,8 +136,9 @@ TEST_F(SurfaceTest, ScreenshotsOfProtectedBuffersSucceed) {
    ASSERT_FALSE(display == nullptr);
    ASSERT_FALSE(display == nullptr);


    sp<GraphicBuffer> outBuffer;
    sp<GraphicBuffer> outBuffer;
    bool ignored;
    ASSERT_EQ(NO_ERROR,
    ASSERT_EQ(NO_ERROR,
              sf->captureScreen(display, &outBuffer, ui::Dataspace::V0_SRGB,
              sf->captureScreen(display, &outBuffer, ignored, ui::Dataspace::V0_SRGB,
                                ui::PixelFormat::RGBA_8888, Rect(), 64, 64, false));
                                ui::PixelFormat::RGBA_8888, Rect(), 64, 64, false));


    ASSERT_EQ(NO_ERROR, native_window_api_connect(anw.get(),
    ASSERT_EQ(NO_ERROR, native_window_api_connect(anw.get(),
@@ -169,7 +170,7 @@ TEST_F(SurfaceTest, ScreenshotsOfProtectedBuffersSucceed) {
        ASSERT_EQ(NO_ERROR, anw->queueBuffer(anw.get(), buf, -1));
        ASSERT_EQ(NO_ERROR, anw->queueBuffer(anw.get(), buf, -1));
    }
    }
    ASSERT_EQ(NO_ERROR,
    ASSERT_EQ(NO_ERROR,
              sf->captureScreen(display, &outBuffer, ui::Dataspace::V0_SRGB,
              sf->captureScreen(display, &outBuffer, ignored, ui::Dataspace::V0_SRGB,
                                ui::PixelFormat::RGBA_8888, Rect(), 64, 64, false));
                                ui::PixelFormat::RGBA_8888, Rect(), 64, 64, false));
}
}


@@ -615,6 +616,7 @@ public:
    status_t setActiveColorMode(const sp<IBinder>& /*display*/,
    status_t setActiveColorMode(const sp<IBinder>& /*display*/,
        ColorMode /*colorMode*/) override { return NO_ERROR; }
        ColorMode /*colorMode*/) override { return NO_ERROR; }
    status_t captureScreen(const sp<IBinder>& /*display*/, sp<GraphicBuffer>* /*outBuffer*/,
    status_t captureScreen(const sp<IBinder>& /*display*/, sp<GraphicBuffer>* /*outBuffer*/,
                           bool& /* outCapturedSecureLayers */,
                           const ui::Dataspace /*reqDataspace*/,
                           const ui::Dataspace /*reqDataspace*/,
                           const ui::PixelFormat /*reqPixelFormat*/, Rect /*sourceCrop*/,
                           const ui::PixelFormat /*reqPixelFormat*/, Rect /*sourceCrop*/,
                           uint32_t /*reqWidth*/, uint32_t /*reqHeight*/,
                           uint32_t /*reqWidth*/, uint32_t /*reqHeight*/,
Loading