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

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

Merge changes I4c806bf4,Ia0d87c55,Ic09291fd

* changes:
  SF: Introduce DisplayDeviceCreationArgs
  SF: Break out NativeWindowSurface
  SF: Cleanup layer construction
parents f34d5920 2eef1d23
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -138,6 +138,7 @@ filegroup {
        "LayerStats.cpp",
        "LayerVector.cpp",
        "MonitoredProducer.cpp",
        "NativeWindowSurface.cpp",
        "RenderArea.cpp",
        "Scheduler/DispSync.cpp",
        "Scheduler/DispSyncSource.cpp",
+6 −14
Original line number Diff line number Diff line
@@ -49,24 +49,16 @@

namespace android {

BufferLayer::BufferLayer(SurfaceFlinger* flinger, const sp<Client>& client, const String8& name,
                         uint32_t w, uint32_t h, uint32_t flags)
      : Layer(flinger, client, name, w, h, flags),
        mTextureName(mFlinger->getNewTexture()),
        mCurrentScalingMode(NATIVE_WINDOW_SCALING_MODE_FREEZE),
        mBufferLatched(false),
        mRefreshPending(false) {
    ALOGV("Creating Layer %s", name.string());
BufferLayer::BufferLayer(const LayerCreationArgs& args)
      : Layer(args), mTextureName(args.flinger->getNewTexture()) {
    ALOGV("Creating Layer %s", args.name.string());

    mTexture.init(renderengine::Texture::TEXTURE_EXTERNAL, mTextureName);

    mPremultipliedAlpha = !(flags & ISurfaceComposerClient::eNonPremultiplied);
    mPremultipliedAlpha = !(args.flags & ISurfaceComposerClient::eNonPremultiplied);

    mPotentialCursor = flags & ISurfaceComposerClient::eCursorWindow;
    mProtectedByApp = flags & ISurfaceComposerClient::eProtectedByApp;

    // drawing state & current state are identical
    mDrawingState = mCurrentState;
    mPotentialCursor = args.flags & ISurfaceComposerClient::eCursorWindow;
    mProtectedByApp = args.flags & ISurfaceComposerClient::eProtectedByApp;
}

BufferLayer::~BufferLayer() {
+6 −6
Original line number Diff line number Diff line
@@ -39,6 +39,8 @@
#include <utils/String8.h>
#include <utils/Timers.h>

#include <system/window.h> // For NATIVE_WINDOW_SCALING_MODE_FREEZE

#include <stdint.h>
#include <sys/types.h>
#include <list>
@@ -47,9 +49,7 @@ namespace android {

class BufferLayer : public Layer {
public:
    BufferLayer(SurfaceFlinger* flinger, const sp<Client>& client, const String8& name, uint32_t w,
                uint32_t h, uint32_t flags);

    explicit BufferLayer(const LayerCreationArgs& args);
    ~BufferLayer() override;

    // -----------------------------------------------------------------------
@@ -172,15 +172,15 @@ private:

    uint64_t getHeadFrameNumber() const;

    uint32_t mCurrentScalingMode;
    uint32_t mCurrentScalingMode{NATIVE_WINDOW_SCALING_MODE_FREEZE};

    // main thread.
    bool mBufferLatched; // TODO: Use mActiveBuffer?
    bool mBufferLatched{false}; // TODO: Use mActiveBuffer?

    // The texture used to draw the layer in GLES composition mode
    mutable renderengine::Texture mTexture;

    bool mRefreshPending;
    bool mRefreshPending{false};
};

} // namespace android
+3 −18
Original line number Diff line number Diff line
@@ -21,24 +21,9 @@

namespace android {

BufferQueueLayer::BufferQueueLayer(SurfaceFlinger* flinger, const sp<Client>& client,
                                   const String8& name, uint32_t w, uint32_t h, uint32_t flags)
      : BufferLayer(flinger, client, name, w, h, flags),
        mConsumer(nullptr),
        mProducer(nullptr),
        mFormat(PIXEL_FORMAT_NONE),
        mPreviousFrameNumber(0),
        mUpdateTexImageFailed(false),
        mQueueItemLock(),
        mQueueItemCondition(),
        mQueueItems(),
        mLastFrameNumberReceived(0),
        mAutoRefresh(false),
        mActiveBufferSlot(BufferQueue::INVALID_BUFFER_SLOT),
        mQueuedFrames(0),
        mSidebandStreamChanged(false) {
    mCurrentState.requested_legacy = mCurrentState.active_legacy;
}
BufferQueueLayer::BufferQueueLayer(const LayerCreationArgs& args) : BufferLayer(args) {}

BufferQueueLayer::~BufferQueueLayer() = default;

// -----------------------------------------------------------------------
// Interface implementation for Layer
+8 −8
Original line number Diff line number Diff line
@@ -31,8 +31,8 @@ namespace android {
 */
class BufferQueueLayer : public BufferLayer, public BufferLayerConsumer::ContentsChangedListener {
public:
    BufferQueueLayer(SurfaceFlinger* flinger, const sp<Client>& client, const String8& name,
                     uint32_t w, uint32_t h, uint32_t flags);
    explicit BufferQueueLayer(const LayerCreationArgs&);
    ~BufferQueueLayer() override;

    // -----------------------------------------------------------------------
    // Interface implementation for Layer
@@ -121,20 +121,20 @@ private:
    sp<BufferLayerConsumer> mConsumer;
    sp<IGraphicBufferProducer> mProducer;

    PixelFormat mFormat;
    PixelFormat mFormat{PIXEL_FORMAT_NONE};

    // Only accessed on the main thread.
    uint64_t mPreviousFrameNumber;
    bool mUpdateTexImageFailed;
    uint64_t mPreviousFrameNumber{0};
    bool mUpdateTexImageFailed{false};

    // Local copy of the queued contents of the incoming BufferQueue
    mutable Mutex mQueueItemLock;
    Condition mQueueItemCondition;
    Vector<BufferItem> mQueueItems;
    std::atomic<uint64_t> mLastFrameNumberReceived;
    std::atomic<uint64_t> mLastFrameNumberReceived{0};

    bool mAutoRefresh;
    int mActiveBufferSlot;
    bool mAutoRefresh{false};
    int mActiveBufferSlot{BufferQueue::INVALID_BUFFER_SLOT};

    // thread-safe
    std::atomic<int32_t> mQueuedFrames{0};
Loading