132a6e48fSopenharmony_ci/*
232a6e48fSopenharmony_ci * Copyright (c) 2021 Huawei Device Co., Ltd.
332a6e48fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
432a6e48fSopenharmony_ci * you may not use this file except in compliance with the License.
532a6e48fSopenharmony_ci * You may obtain a copy of the License at
632a6e48fSopenharmony_ci *
732a6e48fSopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
832a6e48fSopenharmony_ci *
932a6e48fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software
1032a6e48fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
1132a6e48fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1232a6e48fSopenharmony_ci * See the License for the specific language governing permissions and
1332a6e48fSopenharmony_ci * limitations under the License.
1432a6e48fSopenharmony_ci */
1532a6e48fSopenharmony_ci
1632a6e48fSopenharmony_ci#ifndef FRAMEWORKS_SURFACE_INCLUDE_BUFFER_QUEUE_H
1732a6e48fSopenharmony_ci#define FRAMEWORKS_SURFACE_INCLUDE_BUFFER_QUEUE_H
1832a6e48fSopenharmony_ci
1932a6e48fSopenharmony_ci#include <map>
2032a6e48fSopenharmony_ci#include <list>
2132a6e48fSopenharmony_ci#include <vector>
2232a6e48fSopenharmony_ci#include <mutex>
2332a6e48fSopenharmony_ci
2432a6e48fSopenharmony_ci#include <buffer_producer_listener.h>
2532a6e48fSopenharmony_ci#include <ibuffer_consumer_listener.h>
2632a6e48fSopenharmony_ci#include <ibuffer_producer.h>
2732a6e48fSopenharmony_ci#include "iconsumer_surface.h"
2832a6e48fSopenharmony_ci#include "surface_type.h"
2932a6e48fSopenharmony_ci#include <surface_tunnel_handle.h>
3032a6e48fSopenharmony_ci#include "surface_buffer.h"
3132a6e48fSopenharmony_ci#include "consumer_surface_delegator.h"
3232a6e48fSopenharmony_ci
3332a6e48fSopenharmony_cinamespace OHOS {
3432a6e48fSopenharmony_cienum BufferState {
3532a6e48fSopenharmony_ci    BUFFER_STATE_RELEASED,
3632a6e48fSopenharmony_ci    BUFFER_STATE_REQUESTED,
3732a6e48fSopenharmony_ci    BUFFER_STATE_FLUSHED,
3832a6e48fSopenharmony_ci    BUFFER_STATE_ACQUIRED,
3932a6e48fSopenharmony_ci    BUFFER_STATE_ATTACHED,
4032a6e48fSopenharmony_ci};
4132a6e48fSopenharmony_ci
4232a6e48fSopenharmony_cienum InvokerType {
4332a6e48fSopenharmony_ci    PRODUCER_INVOKER,
4432a6e48fSopenharmony_ci    CONSUMER_INVOKER,
4532a6e48fSopenharmony_ci};
4632a6e48fSopenharmony_ci
4732a6e48fSopenharmony_ciusing BufferElement = struct BufferElement {
4832a6e48fSopenharmony_ci    sptr<SurfaceBuffer> buffer;
4932a6e48fSopenharmony_ci    BufferState state;
5032a6e48fSopenharmony_ci    bool isDeleting;
5132a6e48fSopenharmony_ci
5232a6e48fSopenharmony_ci    BufferRequestConfig config;
5332a6e48fSopenharmony_ci    sptr<SyncFence> fence;
5432a6e48fSopenharmony_ci    int64_t timestamp;
5532a6e48fSopenharmony_ci    std::vector<Rect> damages;
5632a6e48fSopenharmony_ci    ScalingMode scalingMode;
5732a6e48fSopenharmony_ci    HDRMetaDataType hdrMetaDataType = HDRMetaDataType::HDR_NOT_USED;
5832a6e48fSopenharmony_ci    std::vector<GraphicHDRMetaData> metaData;
5932a6e48fSopenharmony_ci    GraphicHDRMetadataKey key;
6032a6e48fSopenharmony_ci    std::vector<uint8_t> metaDataSet;
6132a6e48fSopenharmony_ci    GraphicPresentTimestamp presentTimestamp = {GRAPHIC_DISPLAY_PTS_UNSUPPORTED, 0};
6232a6e48fSopenharmony_ci    /**
6332a6e48fSopenharmony_ci     * The desired time to present the buffer in nanoseconds.
6432a6e48fSopenharmony_ci     * The buffer should wait until desiredPresentTimestamp is reached before being consumed and displayed.
6532a6e48fSopenharmony_ci     * If multiple buffers reach desiredPresentTimestamp, the earlier buffer should be dropped.
6632a6e48fSopenharmony_ci     */
6732a6e48fSopenharmony_ci    int64_t desiredPresentTimestamp;
6832a6e48fSopenharmony_ci    /**
6932a6e48fSopenharmony_ci     * The desiredPresentTimestamp is automatically generated by the system, isAutoTimestamp is true.
7032a6e48fSopenharmony_ci     * The desiredPresentTimestamp is manually set by the producer, isAutoTimestamp is false.
7132a6e48fSopenharmony_ci     */
7232a6e48fSopenharmony_ci    bool isAutoTimestamp;
7332a6e48fSopenharmony_ci};
7432a6e48fSopenharmony_ci
7532a6e48fSopenharmony_ciclass BufferQueue : public RefBase {
7632a6e48fSopenharmony_cipublic:
7732a6e48fSopenharmony_ci    BufferQueue(const std::string &name, bool isShared = false);
7832a6e48fSopenharmony_ci    virtual ~BufferQueue();
7932a6e48fSopenharmony_ci
8032a6e48fSopenharmony_ci    GSError GetProducerInitInfo(ProducerInitInfo &info);
8132a6e48fSopenharmony_ci
8232a6e48fSopenharmony_ci    GSError RequestBuffer(const BufferRequestConfig &config, sptr<BufferExtraData> &bedata,
8332a6e48fSopenharmony_ci                          struct IBufferProducer::RequestBufferReturnValue &retval);
8432a6e48fSopenharmony_ci
8532a6e48fSopenharmony_ci    GSError ReuseBuffer(const BufferRequestConfig &config, sptr<BufferExtraData> &bedata,
8632a6e48fSopenharmony_ci                        struct IBufferProducer::RequestBufferReturnValue &retval);
8732a6e48fSopenharmony_ci
8832a6e48fSopenharmony_ci    GSError CancelBuffer(uint32_t sequence, sptr<BufferExtraData> bedata);
8932a6e48fSopenharmony_ci
9032a6e48fSopenharmony_ci    GSError FlushBuffer(uint32_t sequence, sptr<BufferExtraData> bedata,
9132a6e48fSopenharmony_ci                        sptr<SyncFence> fence, const BufferFlushConfigWithDamages &config);
9232a6e48fSopenharmony_ci
9332a6e48fSopenharmony_ci    GSError DoFlushBuffer(uint32_t sequence, sptr<BufferExtraData> bedata,
9432a6e48fSopenharmony_ci                          sptr<SyncFence> fence, const BufferFlushConfigWithDamages &config);
9532a6e48fSopenharmony_ci
9632a6e48fSopenharmony_ci    GSError GetLastFlushedBuffer(sptr<SurfaceBuffer>& buffer, sptr<SyncFence>& fence,
9732a6e48fSopenharmony_ci        float matrix[16], uint32_t matrixSize, bool isUseNewMatrix, bool needRecordSequence = false);
9832a6e48fSopenharmony_ci
9932a6e48fSopenharmony_ci    GSError AcquireBuffer(sptr<SurfaceBuffer>& buffer, sptr<SyncFence>& fence,
10032a6e48fSopenharmony_ci                          int64_t &timestamp, std::vector<Rect> &damages);
10132a6e48fSopenharmony_ci    GSError AcquireBuffer(IConsumerSurface::AcquireBufferReturnValue &returnValue, int64_t expectPresentTimestamp,
10232a6e48fSopenharmony_ci                          bool isUsingAutoTimestamp);
10332a6e48fSopenharmony_ci    GSError ReleaseBuffer(sptr<SurfaceBuffer>& buffer, const sptr<SyncFence>& fence);
10432a6e48fSopenharmony_ci
10532a6e48fSopenharmony_ci    GSError AttachBuffer(sptr<SurfaceBuffer>& buffer, int32_t timeOut);
10632a6e48fSopenharmony_ci
10732a6e48fSopenharmony_ci    GSError DetachBuffer(sptr<SurfaceBuffer>& buffer);
10832a6e48fSopenharmony_ci
10932a6e48fSopenharmony_ci    GSError RegisterSurfaceDelegator(sptr<IRemoteObject> client, sptr<Surface> cSurface);
11032a6e48fSopenharmony_ci
11132a6e48fSopenharmony_ci    bool QueryIfBufferAvailable();
11232a6e48fSopenharmony_ci
11332a6e48fSopenharmony_ci    uint32_t GetQueueSize();
11432a6e48fSopenharmony_ci    GSError SetQueueSize(uint32_t queueSize);
11532a6e48fSopenharmony_ci
11632a6e48fSopenharmony_ci    GSError GetName(std::string &name);
11732a6e48fSopenharmony_ci
11832a6e48fSopenharmony_ci    GSError RegisterConsumerListener(sptr<IBufferConsumerListener>& listener);
11932a6e48fSopenharmony_ci    GSError RegisterConsumerListener(IBufferConsumerListenerClazz *listener);
12032a6e48fSopenharmony_ci    GSError RegisterReleaseListener(OnReleaseFunc func);
12132a6e48fSopenharmony_ci    GSError RegisterProducerReleaseListener(sptr<IProducerListener> listener);
12232a6e48fSopenharmony_ci    GSError UnRegisterProducerReleaseListener();
12332a6e48fSopenharmony_ci    GSError RegisterDeleteBufferListener(OnDeleteBufferFunc func, bool isForUniRedraw = false);
12432a6e48fSopenharmony_ci    GSError UnregisterConsumerListener();
12532a6e48fSopenharmony_ci
12632a6e48fSopenharmony_ci    GSError SetDefaultWidthAndHeight(int32_t width, int32_t height);
12732a6e48fSopenharmony_ci    int32_t GetDefaultWidth();
12832a6e48fSopenharmony_ci    int32_t GetDefaultHeight();
12932a6e48fSopenharmony_ci    GSError SetDefaultUsage(uint64_t usage);
13032a6e48fSopenharmony_ci    uint64_t GetDefaultUsage();
13132a6e48fSopenharmony_ci
13232a6e48fSopenharmony_ci    GSError CleanCache(bool cleanAll);
13332a6e48fSopenharmony_ci    GSError GoBackground();
13432a6e48fSopenharmony_ci    GSError OnConsumerDied();
13532a6e48fSopenharmony_ci
13632a6e48fSopenharmony_ci    uint64_t GetUniqueId() const;
13732a6e48fSopenharmony_ci
13832a6e48fSopenharmony_ci    void Dump(std::string &result);
13932a6e48fSopenharmony_ci
14032a6e48fSopenharmony_ci    GSError SetTransform(GraphicTransformType transform);
14132a6e48fSopenharmony_ci    GraphicTransformType GetTransform() const;
14232a6e48fSopenharmony_ci
14332a6e48fSopenharmony_ci    GSError IsSupportedAlloc(const std::vector<BufferVerifyAllocInfo> &infos,
14432a6e48fSopenharmony_ci                             std::vector<bool> &supporteds) const;
14532a6e48fSopenharmony_ci
14632a6e48fSopenharmony_ci    GSError SetBufferHold(bool hold);
14732a6e48fSopenharmony_ci    inline bool IsBufferHold()
14832a6e48fSopenharmony_ci    {
14932a6e48fSopenharmony_ci        return isBufferHold_;
15032a6e48fSopenharmony_ci    }
15132a6e48fSopenharmony_ci    GSError SetScalingMode(uint32_t sequence, ScalingMode scalingMode);
15232a6e48fSopenharmony_ci    GSError GetScalingMode(uint32_t sequence, ScalingMode &scalingMode);
15332a6e48fSopenharmony_ci    GSError SetMetaData(uint32_t sequence, const std::vector<GraphicHDRMetaData> &metaData);
15432a6e48fSopenharmony_ci    GSError SetMetaDataSet(uint32_t sequence, GraphicHDRMetadataKey key,
15532a6e48fSopenharmony_ci                           const std::vector<uint8_t> &metaData);
15632a6e48fSopenharmony_ci    GSError QueryMetaDataType(uint32_t sequence, HDRMetaDataType &type);
15732a6e48fSopenharmony_ci    GSError GetMetaData(uint32_t sequence, std::vector<GraphicHDRMetaData> &metaData);
15832a6e48fSopenharmony_ci    GSError GetMetaDataSet(uint32_t sequence, GraphicHDRMetadataKey &key,
15932a6e48fSopenharmony_ci                           std::vector<uint8_t> &metaData);
16032a6e48fSopenharmony_ci    GSError SetTunnelHandle(const sptr<SurfaceTunnelHandle> &handle);
16132a6e48fSopenharmony_ci    sptr<SurfaceTunnelHandle> GetTunnelHandle();
16232a6e48fSopenharmony_ci    GSError SetPresentTimestamp(uint32_t sequence, const GraphicPresentTimestamp &timestamp);
16332a6e48fSopenharmony_ci    GSError GetPresentTimestamp(uint32_t sequence, GraphicPresentTimestampType type, int64_t &time);
16432a6e48fSopenharmony_ci
16532a6e48fSopenharmony_ci    bool GetStatus() const;
16632a6e48fSopenharmony_ci    void SetStatus(bool status);
16732a6e48fSopenharmony_ci
16832a6e48fSopenharmony_ci    void SetBatchHandle(bool batch);
16932a6e48fSopenharmony_ci
17032a6e48fSopenharmony_ci    GSError SetProducerCacheCleanFlag(bool flag);
17132a6e48fSopenharmony_ci    inline void ConsumerRequestCpuAccess(bool on)
17232a6e48fSopenharmony_ci    {
17332a6e48fSopenharmony_ci        isCpuAccessable_ = on;
17432a6e48fSopenharmony_ci    }
17532a6e48fSopenharmony_ci
17632a6e48fSopenharmony_ci    GSError AttachBufferToQueue(sptr<SurfaceBuffer> buffer, InvokerType invokerType);
17732a6e48fSopenharmony_ci    GSError DetachBufferFromQueue(sptr<SurfaceBuffer> buffer, InvokerType invokerType);
17832a6e48fSopenharmony_ci
17932a6e48fSopenharmony_ci    GSError SetTransformHint(GraphicTransformType transformHint);
18032a6e48fSopenharmony_ci    GraphicTransformType GetTransformHint() const;
18132a6e48fSopenharmony_ci    GSError SetScalingMode(ScalingMode scalingMode);
18232a6e48fSopenharmony_ci
18332a6e48fSopenharmony_ci    GSError SetSurfaceSourceType(OHSurfaceSource sourceType);
18432a6e48fSopenharmony_ci    OHSurfaceSource GetSurfaceSourceType() const;
18532a6e48fSopenharmony_ci
18632a6e48fSopenharmony_ci    GSError SetSurfaceAppFrameworkType(std::string appFrameworkType);
18732a6e48fSopenharmony_ci    std::string GetSurfaceAppFrameworkType() const;
18832a6e48fSopenharmony_ci
18932a6e48fSopenharmony_ci    GSError SetHdrWhitePointBrightness(float brightness);
19032a6e48fSopenharmony_ci    GSError SetSdrWhitePointBrightness(float brightness);
19132a6e48fSopenharmony_ci    float GetHdrWhitePointBrightness() const;
19232a6e48fSopenharmony_ci    float GetSdrWhitePointBrightness() const;
19332a6e48fSopenharmony_ci
19432a6e48fSopenharmony_ci    GSError IsSurfaceBufferInCache(uint32_t seqNum, bool &isInCache);
19532a6e48fSopenharmony_ci
19632a6e48fSopenharmony_ci    GSError AcquireLastFlushedBuffer(sptr<SurfaceBuffer> &buffer, sptr<SyncFence> &fence,
19732a6e48fSopenharmony_ci        float matrix[16], uint32_t matrixSize, bool isUseNewMatrix);
19832a6e48fSopenharmony_ci    GSError ReleaseLastFlushedBuffer(uint32_t sequence);
19932a6e48fSopenharmony_ci    GSError SetGlobalAlpha(int32_t alpha);
20032a6e48fSopenharmony_ci    GSError GetGlobalAlpha(int32_t &alpha);
20132a6e48fSopenharmony_ci    uint32_t GetAvailableBufferCount();
20232a6e48fSopenharmony_ci
20332a6e48fSopenharmony_ciprivate:
20432a6e48fSopenharmony_ci    GSError AllocBuffer(sptr<SurfaceBuffer>& buffer, const BufferRequestConfig &config);
20532a6e48fSopenharmony_ci    void DeleteBufferInCache(uint32_t sequence);
20632a6e48fSopenharmony_ci
20732a6e48fSopenharmony_ci    uint32_t GetUsedSize();
20832a6e48fSopenharmony_ci    void DeleteBuffersLocked(int32_t count);
20932a6e48fSopenharmony_ci
21032a6e48fSopenharmony_ci    GSError PopFromFreeListLocked(sptr<SurfaceBuffer>& buffer, const BufferRequestConfig &config);
21132a6e48fSopenharmony_ci    GSError PopFromDirtyListLocked(sptr<SurfaceBuffer>& buffer);
21232a6e48fSopenharmony_ci
21332a6e48fSopenharmony_ci    GSError CheckRequestConfig(const BufferRequestConfig &config);
21432a6e48fSopenharmony_ci    GSError CheckFlushConfig(const BufferFlushConfigWithDamages &config);
21532a6e48fSopenharmony_ci    void DumpCache(std::string &result);
21632a6e48fSopenharmony_ci    void DumpMetadata(std::string &result, BufferElement element);
21732a6e48fSopenharmony_ci    void ClearLocked();
21832a6e48fSopenharmony_ci    bool CheckProducerCacheListLocked();
21932a6e48fSopenharmony_ci    GSError SetProducerCacheCleanFlagLocked(bool flag);
22032a6e48fSopenharmony_ci    GSError AttachBufferUpdateStatus(std::unique_lock<std::mutex> &lock, uint32_t sequence, int32_t timeOut);
22132a6e48fSopenharmony_ci    void AttachBufferUpdateBufferInfo(sptr<SurfaceBuffer>& buffer);
22232a6e48fSopenharmony_ci    void ListenerBufferReleasedCb(sptr<SurfaceBuffer> &buffer, const sptr<SyncFence> &fence);
22332a6e48fSopenharmony_ci    void OnBufferDeleteCbForHardwareThreadLocked(const sptr<SurfaceBuffer> &buffer) const;
22432a6e48fSopenharmony_ci    GSError CheckBufferQueueCache(uint32_t sequence);
22532a6e48fSopenharmony_ci    GSError ReallocBufferLocked(const BufferRequestConfig &config,
22632a6e48fSopenharmony_ci        struct IBufferProducer::RequestBufferReturnValue &retval);
22732a6e48fSopenharmony_ci    void SetSurfaceBufferHebcMetaLocked(sptr<SurfaceBuffer> buffer);
22832a6e48fSopenharmony_ci    GSError RequestBufferCheckStatus();
22932a6e48fSopenharmony_ci    GSError DelegatorQueueBuffer(uint32_t sequence, sptr<SyncFence> fence);
23032a6e48fSopenharmony_ci    bool WaitForCondition();
23132a6e48fSopenharmony_ci    void RequestBufferDebugInfoLocked();
23232a6e48fSopenharmony_ci    bool GetStatusLocked() const;
23332a6e48fSopenharmony_ci    void CallConsumerListener();
23432a6e48fSopenharmony_ci    void SetSurfaceBufferGlobalAlphaUnlocked(sptr<SurfaceBuffer> buffer);
23532a6e48fSopenharmony_ci    bool IsPresentTimestampReady(int64_t desiredPresentTimestamp, int64_t expectPresentTimestamp);
23632a6e48fSopenharmony_ci    void LogAndTraceAllBufferInBufferQueueCache();
23732a6e48fSopenharmony_ci    void SetDesiredPresentTimestampAndUiTimestamp(uint32_t sequence, int64_t desiredPresentTimestamp,
23832a6e48fSopenharmony_ci                                                 uint64_t uiTimestamp);
23932a6e48fSopenharmony_ci    int32_t defaultWidth_ = 0;
24032a6e48fSopenharmony_ci    int32_t defaultHeight_ = 0;
24132a6e48fSopenharmony_ci    uint64_t defaultUsage_ = 0;
24232a6e48fSopenharmony_ci    uint32_t bufferQueueSize_ = SURFACE_DEFAULT_QUEUE_SIZE;
24332a6e48fSopenharmony_ci    ScalingMode scalingMode_ = ScalingMode::SCALING_MODE_SCALE_TO_WINDOW;
24432a6e48fSopenharmony_ci    GraphicTransformType transform_ = GraphicTransformType::GRAPHIC_ROTATE_NONE;
24532a6e48fSopenharmony_ci    GraphicTransformType lastFlushedTransform_ = GraphicTransformType::GRAPHIC_ROTATE_NONE;
24632a6e48fSopenharmony_ci    std::string name_;
24732a6e48fSopenharmony_ci    std::list<uint32_t> freeList_;
24832a6e48fSopenharmony_ci    std::list<uint32_t> dirtyList_;
24932a6e48fSopenharmony_ci    std::list<uint32_t> deletingList_;
25032a6e48fSopenharmony_ci    std::list<uint32_t> producerCacheList_;
25132a6e48fSopenharmony_ci    std::map<uint32_t, BufferElement> bufferQueueCache_;
25232a6e48fSopenharmony_ci    sptr<IBufferConsumerListener> listener_ = nullptr;
25332a6e48fSopenharmony_ci    IBufferConsumerListenerClazz *listenerClazz_ = nullptr;
25432a6e48fSopenharmony_ci    mutable std::mutex mutex_;
25532a6e48fSopenharmony_ci    std::mutex listenerMutex_;
25632a6e48fSopenharmony_ci    std::mutex producerListenerMutex_;
25732a6e48fSopenharmony_ci    const uint64_t uniqueId_;
25832a6e48fSopenharmony_ci    OnReleaseFunc onBufferRelease_ = nullptr;
25932a6e48fSopenharmony_ci    std::mutex onBufferReleaseMutex_;
26032a6e48fSopenharmony_ci    sptr<IProducerListener> producerListener_ = nullptr;
26132a6e48fSopenharmony_ci    OnDeleteBufferFunc onBufferDeleteForRSMainThread_;
26232a6e48fSopenharmony_ci    OnDeleteBufferFunc onBufferDeleteForRSHardwareThread_;
26332a6e48fSopenharmony_ci    bool isShared_ = false;
26432a6e48fSopenharmony_ci    std::condition_variable waitReqCon_;
26532a6e48fSopenharmony_ci    std::condition_variable waitAttachCon_;
26632a6e48fSopenharmony_ci    sptr<SurfaceTunnelHandle> tunnelHandle_ = nullptr;
26732a6e48fSopenharmony_ci    bool isValidStatus_ = true;
26832a6e48fSopenharmony_ci    bool producerCacheClean_ = false;
26932a6e48fSopenharmony_ci    const bool isLocalRender_;
27032a6e48fSopenharmony_ci    uint32_t lastFlusedSequence_ = 0;
27132a6e48fSopenharmony_ci    sptr<SyncFence> lastFlusedFence_;
27232a6e48fSopenharmony_ci    wptr<ConsumerSurfaceDelegator> wpCSurfaceDelegator_;
27332a6e48fSopenharmony_ci    bool isCpuAccessable_ = false;
27432a6e48fSopenharmony_ci    GraphicTransformType transformHint_ = GraphicTransformType::GRAPHIC_ROTATE_NONE;
27532a6e48fSopenharmony_ci    bool isBufferHold_ = false;
27632a6e48fSopenharmony_ci    bool isBatch_ = false;
27732a6e48fSopenharmony_ci    OHSurfaceSource sourceType_ = OHSurfaceSource::OH_SURFACE_SOURCE_DEFAULT;
27832a6e48fSopenharmony_ci    std::string appFrameworkType_ = "";
27932a6e48fSopenharmony_ci    float hdrWhitePointBrightness_ = 0.0;
28032a6e48fSopenharmony_ci    float sdrWhitePointBrightness_ = 0.0;
28132a6e48fSopenharmony_ci    uint32_t acquireLastFlushedBufSequence_;
28232a6e48fSopenharmony_ci    int32_t globalAlpha_ = -1;
28332a6e48fSopenharmony_ci    std::mutex globalAlphaMutex_;
28432a6e48fSopenharmony_ci    std::string requestBufferStateStr_;
28532a6e48fSopenharmony_ci    std::string acquireBufferStateStr_;
28632a6e48fSopenharmony_ci};
28732a6e48fSopenharmony_ci}; // namespace OHOS
28832a6e48fSopenharmony_ci
28932a6e48fSopenharmony_ci#endif // FRAMEWORKS_SURFACE_INCLUDE_BUFFER_QUEUE_H
290