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

Commit e05c5a09 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "[SurfaceFlinger] support EGLImage management in BLAST" into qt-r1-dev

parents fec1b3f8 1c8d7209
Loading
Loading
Loading
Loading
+4 −11
Original line number Diff line number Diff line
@@ -50,12 +50,6 @@ BufferStateLayer::BufferStateLayer(const LayerCreationArgs& args)
    mOverrideScalingMode = NATIVE_WINDOW_SCALING_MODE_SCALE_TO_WINDOW;
    mCurrentState.dataspace = ui::Dataspace::V0_SRGB;
}
BufferStateLayer::~BufferStateLayer() {
    if (mActiveBuffer != nullptr) {
        auto& engine(mFlinger->getRenderEngine());
        engine.unbindExternalTextureBuffer(mActiveBuffer->getId());
    }
}

// -----------------------------------------------------------------------
// Interface implementation for Layer
@@ -571,11 +565,6 @@ status_t BufferStateLayer::updateActiveBuffer() {
        return BAD_VALUE;
    }

    if (mActiveBuffer != nullptr) {
        // todo: get this to work with BufferStateLayerCache
        auto& engine(mFlinger->getRenderEngine());
        engine.unbindExternalTextureBuffer(mActiveBuffer->getId());
    }
    mActiveBuffer = s.buffer;
    mActiveBufferFence = s.acquireFence;
    auto& layerCompositionState = getCompositionLayer()->editState().frontEnd;
@@ -621,6 +610,10 @@ void BufferStateLayer::onFirstRef() {
    }
}

void BufferStateLayer::bufferErased(const client_cache_t& clientCacheId) {
    mFlinger->getRenderEngine().unbindExternalTextureBuffer(clientCacheId.id);
}

void BufferStateLayer::HwcSlotGenerator::bufferErased(const client_cache_t& clientCacheId) {
    std::lock_guard lock(mMutex);
    if (!clientCacheId.isValid()) {
+3 −1
Original line number Diff line number Diff line
@@ -34,7 +34,6 @@ class SlotGenerationTest;
class BufferStateLayer : public BufferLayer {
public:
    explicit BufferStateLayer(const LayerCreationArgs&);
    ~BufferStateLayer() override;

    // -----------------------------------------------------------------------
    // Interface implementation for Layer
@@ -103,6 +102,9 @@ public:
    bool fenceHasSignaled() const override;
    bool framePresentTimeIsCurrent() const override;

    // Inherit from ClientCache::ErasedRecipient
    void bufferErased(const client_cache_t& clientCacheId) override;

private:
    nsecs_t getDesiredPresentTime() override;
    std::shared_ptr<FenceTime> getCurrentFenceTime() const override;
+9 −7
Original line number Diff line number Diff line
@@ -17,8 +17,6 @@
#ifndef ANDROID_LAYER_H
#define ANDROID_LAYER_H

#include <sys/types.h>

#include <compositionengine/LayerFE.h>
#include <gui/BufferQueue.h>
#include <gui/ISurfaceComposerClient.h>
@@ -28,6 +26,7 @@
#include <math/vec4.h>
#include <renderengine/Mesh.h>
#include <renderengine/Texture.h>
#include <sys/types.h>
#include <ui/FloatRect.h>
#include <ui/FrameStats.h>
#include <ui/GraphicBuffer.h>
@@ -44,16 +43,16 @@
#include <vector>

#include "Client.h"
#include "ClientCache.h"
#include "DisplayHardware/ComposerHal.h"
#include "DisplayHardware/HWComposer.h"
#include "FrameTracker.h"
#include "LayerVector.h"
#include "MonitoredProducer.h"
#include "RenderArea.h"
#include "SurfaceFlinger.h"
#include "TransactionCompletedThread.h"

#include "DisplayHardware/ComposerHal.h"
#include "DisplayHardware/HWComposer.h"
#include "RenderArea.h"

using namespace android::surfaceflinger;

namespace android {
@@ -94,7 +93,7 @@ struct LayerCreationArgs {
    LayerMetadata metadata;
};

class Layer : public virtual compositionengine::LayerFE {
class Layer : public virtual compositionengine::LayerFE, public ClientCache::ErasedRecipient {
    static std::atomic<int32_t> sSequence;

public:
@@ -701,6 +700,9 @@ public:
    compositionengine::OutputLayer* findOutputLayerForDisplay(
            const sp<const DisplayDevice>& display) const;

    // Inherit from ClientCache::ErasedRecipient
    void bufferErased(const client_cache_t& /*clientCacheId*/) override {}

protected:
    // constant
    sp<SurfaceFlinger> mFlinger;
+3 −0
Original line number Diff line number Diff line
@@ -4148,6 +4148,9 @@ uint32_t SurfaceFlinger::setClientStateLocked(
    sp<GraphicBuffer> buffer;
    if (bufferChanged && cacheIdChanged) {
        ClientCache::getInstance().add(s.cachedBuffer, s.buffer);
        ClientCache::getInstance().registerErasedRecipient(s.cachedBuffer,
                                                           wp<ClientCache::ErasedRecipient>(layer));
        getRenderEngine().cacheExternalTextureBuffer(s.buffer);
        buffer = s.buffer;
    } else if (cacheIdChanged) {
        buffer = ClientCache::getInstance().get(s.cachedBuffer);