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

Commit fc874ae0 authored by Ana Krulec's avatar Ana Krulec
Browse files

SF: RenderEngine->drawLayers takes GraphicBuffer instead of ANativeWindow

RE interface is going to be moved to AIDL. In order to make it AIDL
compatible, drawLayer needs to take sp<GraphicBuffer> (because it's
already flattenable) instead of ANativeWindow.

Bug: 150064821
Test: atest CompositionEngineTest
Test: adb shell /data/nativetest64/.../libsurfaceflinger_unittest
Test: atest RenderEngineTest
Change-Id: Ifef487c93753d03f949f00e055a66ac6f0a98cb0
parent 3770556d
Loading
Loading
Loading
Loading
+7 −3
Original line number Original line Diff line number Diff line
@@ -964,7 +964,7 @@ EGLImageKHR GLESRenderEngine::createFramebufferImageIfNeeded(ANativeWindowBuffer


status_t GLESRenderEngine::drawLayers(const DisplaySettings& display,
status_t GLESRenderEngine::drawLayers(const DisplaySettings& display,
                                      const std::vector<const LayerSettings*>& layers,
                                      const std::vector<const LayerSettings*>& layers,
                                      ANativeWindowBuffer* const buffer,
                                      const sp<GraphicBuffer>& buffer,
                                      const bool useFramebufferCache, base::unique_fd&& bufferFence,
                                      const bool useFramebufferCache, base::unique_fd&& bufferFence,
                                      base::unique_fd* drawFence) {
                                      base::unique_fd* drawFence) {
    ATRACE_CALL();
    ATRACE_CALL();
@@ -997,7 +997,9 @@ status_t GLESRenderEngine::drawLayers(const DisplaySettings& display,
    const auto blurLayersSize = blurLayers.size();
    const auto blurLayersSize = blurLayers.size();


    if (blurLayersSize == 0) {
    if (blurLayersSize == 0) {
        fbo = std::make_unique<BindNativeBufferAsFramebuffer>(*this, buffer, useFramebufferCache);
        fbo = std::make_unique<BindNativeBufferAsFramebuffer>(*this,
                                                              buffer.get()->getNativeBuffer(),
                                                              useFramebufferCache);
        if (fbo->getStatus() != NO_ERROR) {
        if (fbo->getStatus() != NO_ERROR) {
            ALOGE("Failed to bind framebuffer! Aborting GPU composition for buffer (%p).",
            ALOGE("Failed to bind framebuffer! Aborting GPU composition for buffer (%p).",
                  buffer->handle);
                  buffer->handle);
@@ -1054,7 +1056,9 @@ status_t GLESRenderEngine::drawLayers(const DisplaySettings& display,


            if (blurLayers.size() == 0) {
            if (blurLayers.size() == 0) {
                // Done blurring, time to bind the native FBO and render our blur onto it.
                // Done blurring, time to bind the native FBO and render our blur onto it.
                fbo = std::make_unique<BindNativeBufferAsFramebuffer>(*this, buffer,
                fbo = std::make_unique<BindNativeBufferAsFramebuffer>(*this,
                                                                      buffer.get()
                                                                              ->getNativeBuffer(),
                                                                      useFramebufferCache);
                                                                      useFramebufferCache);
                status = fbo->getStatus();
                status = fbo->getStatus();
                setViewportAndProjection(display.physicalDisplay, display.clip);
                setViewportAndProjection(display.physicalDisplay, display.clip);
+1 −1
Original line number Original line Diff line number Diff line
@@ -74,7 +74,7 @@ public:
    bool useProtectedContext(bool useProtectedContext) override;
    bool useProtectedContext(bool useProtectedContext) override;
    status_t drawLayers(const DisplaySettings& display,
    status_t drawLayers(const DisplaySettings& display,
                        const std::vector<const LayerSettings*>& layers,
                        const std::vector<const LayerSettings*>& layers,
                        ANativeWindowBuffer* buffer, const bool useFramebufferCache,
                        const sp<GraphicBuffer>& buffer, const bool useFramebufferCache,
                        base::unique_fd&& bufferFence, base::unique_fd* drawFence) override;
                        base::unique_fd&& bufferFence, base::unique_fd* drawFence) override;


    EGLDisplay getEGLDisplay() const { return mEGLDisplay; }
    EGLDisplay getEGLDisplay() const { return mEGLDisplay; }
+1 −1
Original line number Original line Diff line number Diff line
@@ -155,7 +155,7 @@ public:
    // now, this always returns NO_ERROR.
    // now, this always returns NO_ERROR.
    virtual status_t drawLayers(const DisplaySettings& display,
    virtual status_t drawLayers(const DisplaySettings& display,
                                const std::vector<const LayerSettings*>& layers,
                                const std::vector<const LayerSettings*>& layers,
                                ANativeWindowBuffer* buffer, const bool useFramebufferCache,
                                const sp<GraphicBuffer>& buffer, const bool useFramebufferCache,
                                base::unique_fd&& bufferFence, base::unique_fd* drawFence) = 0;
                                base::unique_fd&& bufferFence, base::unique_fd* drawFence) = 0;


protected:
protected:
+2 −1
Original line number Original line Diff line number Diff line
@@ -57,7 +57,8 @@ public:
    MOCK_METHOD1(useProtectedContext, bool(bool));
    MOCK_METHOD1(useProtectedContext, bool(bool));
    MOCK_METHOD6(drawLayers,
    MOCK_METHOD6(drawLayers,
                 status_t(const DisplaySettings&, const std::vector<const LayerSettings*>&,
                 status_t(const DisplaySettings&, const std::vector<const LayerSettings*>&,
                          ANativeWindowBuffer*, const bool, base::unique_fd&&, base::unique_fd*));
                          const sp<GraphicBuffer>&, const bool, base::unique_fd&&,
                          base::unique_fd*));
};
};


} // namespace mock
} // namespace mock
+4 −6
Original line number Original line Diff line number Diff line
@@ -252,8 +252,8 @@ struct RenderEngineTest : public ::testing::Test {
                    std::vector<const renderengine::LayerSettings*> layers,
                    std::vector<const renderengine::LayerSettings*> layers,
                    sp<GraphicBuffer> buffer) {
                    sp<GraphicBuffer> buffer) {
        base::unique_fd fence;
        base::unique_fd fence;
        status_t status = sRE->drawLayers(settings, layers, buffer->getNativeBuffer(), true,
        status_t status =
                                          base::unique_fd(), &fence);
                sRE->drawLayers(settings, layers, buffer, true, base::unique_fd(), &fence);
        sCurrentBuffer = buffer;
        sCurrentBuffer = buffer;


        int fd = fence.release();
        int fd = fence.release();
@@ -1008,8 +1008,7 @@ TEST_F(RenderEngineTest, drawLayers_nullOutputFence) {
    layer.alpha = 1.0;
    layer.alpha = 1.0;
    layers.push_back(&layer);
    layers.push_back(&layer);


    status_t status = sRE->drawLayers(settings, layers, mBuffer->getNativeBuffer(), true,
    status_t status = sRE->drawLayers(settings, layers, mBuffer, true, base::unique_fd(), nullptr);
                                      base::unique_fd(), nullptr);
    sCurrentBuffer = mBuffer;
    sCurrentBuffer = mBuffer;
    ASSERT_EQ(NO_ERROR, status);
    ASSERT_EQ(NO_ERROR, status);
    expectBufferColor(fullscreenRect(), 255, 0, 0, 255);
    expectBufferColor(fullscreenRect(), 255, 0, 0, 255);
@@ -1027,8 +1026,7 @@ TEST_F(RenderEngineTest, drawLayers_doesNotCacheFramebuffer) {
    layer.alpha = 1.0;
    layer.alpha = 1.0;
    layers.push_back(&layer);
    layers.push_back(&layer);


    status_t status = sRE->drawLayers(settings, layers, mBuffer->getNativeBuffer(), false,
    status_t status = sRE->drawLayers(settings, layers, mBuffer, false, base::unique_fd(), nullptr);
                                      base::unique_fd(), nullptr);
    sCurrentBuffer = mBuffer;
    sCurrentBuffer = mBuffer;
    ASSERT_EQ(NO_ERROR, status);
    ASSERT_EQ(NO_ERROR, status);
    ASSERT_FALSE(sRE->isFramebufferImageCachedForTesting(mBuffer->getId()));
    ASSERT_FALSE(sRE->isFramebufferImageCachedForTesting(mBuffer->getId()));
Loading