1094332d3Sopenharmony_ci/*
2094332d3Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd.
3094332d3Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4094332d3Sopenharmony_ci * you may not use this file except in compliance with the License.
5094332d3Sopenharmony_ci * You may obtain a copy of the License at
6094332d3Sopenharmony_ci *
7094332d3Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8094332d3Sopenharmony_ci *
9094332d3Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10094332d3Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11094332d3Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12094332d3Sopenharmony_ci * See the License for the specific language governing permissions and
13094332d3Sopenharmony_ci * limitations under the License.
14094332d3Sopenharmony_ci */
15094332d3Sopenharmony_ci
16094332d3Sopenharmony_ci#ifndef HDI_TEST_LAYER_H
17094332d3Sopenharmony_ci#define HDI_TEST_LAYER_H
18094332d3Sopenharmony_ci#include <queue>
19094332d3Sopenharmony_ci#include "v1_1/display_composer_type.h"
20094332d3Sopenharmony_ci#include "v1_0/include/idisplay_buffer.h"
21094332d3Sopenharmony_ci
22094332d3Sopenharmony_cinamespace OHOS {
23094332d3Sopenharmony_cinamespace HDI {
24094332d3Sopenharmony_cinamespace Display {
25094332d3Sopenharmony_cinamespace TEST {
26094332d3Sopenharmony_ciusing namespace OHOS::HDI::Display::Composer::V1_1;
27094332d3Sopenharmony_ci
28094332d3Sopenharmony_ciclass HdiGrallocBuffer {
29094332d3Sopenharmony_cipublic:
30094332d3Sopenharmony_ci    HdiGrallocBuffer(uint32_t seqNo, uint32_t w, uint32_t h, Composer::V1_0::PixelFormat fmt);
31094332d3Sopenharmony_ci    ~HdiGrallocBuffer();
32094332d3Sopenharmony_ci    BufferHandle* Get() const
33094332d3Sopenharmony_ci    {
34094332d3Sopenharmony_ci        return buffer_;
35094332d3Sopenharmony_ci    }
36094332d3Sopenharmony_ci    void SetReleaseFence(int fd);
37094332d3Sopenharmony_ci    void SetAcquirceFence(int fd);
38094332d3Sopenharmony_ci    int GetAcquireFence() const
39094332d3Sopenharmony_ci    {
40094332d3Sopenharmony_ci        return mAcquireFence;
41094332d3Sopenharmony_ci    }
42094332d3Sopenharmony_ci    int GetReleaseFence() const
43094332d3Sopenharmony_ci    {
44094332d3Sopenharmony_ci        return mReleaseFence;
45094332d3Sopenharmony_ci    }
46094332d3Sopenharmony_ci    int32_t SetGraphicBuffer(std::function<int32_t (const BufferHandle*, uint32_t)> realFunc);
47094332d3Sopenharmony_ci
48094332d3Sopenharmony_ciprivate:
49094332d3Sopenharmony_ci    BufferHandle* buffer_ = nullptr;
50094332d3Sopenharmony_ci    int mAcquireFence = -1;
51094332d3Sopenharmony_ci    int mReleaseFence = -1;
52094332d3Sopenharmony_ci    uint32_t seqNo_ = UINT32_MAX;
53094332d3Sopenharmony_ci    bool cacheValid_ = false;
54094332d3Sopenharmony_ci};
55094332d3Sopenharmony_ci
56094332d3Sopenharmony_ciclass HdiTestLayer {
57094332d3Sopenharmony_cipublic:
58094332d3Sopenharmony_ci    static const uint32_t MAX_BUFFER_COUNT = 3;
59094332d3Sopenharmony_ci    HdiTestLayer(LayerInfo& info, uint32_t id, uint32_t displayId);
60094332d3Sopenharmony_ci    virtual ~HdiTestLayer();
61094332d3Sopenharmony_ci    int32_t Init(uint32_t bufferCount = MAX_BUFFER_COUNT);
62094332d3Sopenharmony_ci    int32_t PreparePresent();
63094332d3Sopenharmony_ci
64094332d3Sopenharmony_ci    uint32_t GetId() const
65094332d3Sopenharmony_ci    {
66094332d3Sopenharmony_ci        return id_;
67094332d3Sopenharmony_ci    }
68094332d3Sopenharmony_ci    Composer::V1_0::CompositionType GetCompType() const
69094332d3Sopenharmony_ci    {
70094332d3Sopenharmony_ci        return compType_;
71094332d3Sopenharmony_ci    }
72094332d3Sopenharmony_ci
73094332d3Sopenharmony_ci    HdiGrallocBuffer* GetFrontBuffer() const;
74094332d3Sopenharmony_ci    HdiGrallocBuffer* GetBackBuffer() const;
75094332d3Sopenharmony_ci    HdiGrallocBuffer* AcquireBackBuffer();
76094332d3Sopenharmony_ci
77094332d3Sopenharmony_ci    int32_t SwapFrontToBackQ();
78094332d3Sopenharmony_ci    int32_t SwapBackToFrontQ();
79094332d3Sopenharmony_ci
80094332d3Sopenharmony_ci    void SetLayerPosition(const IRect& rect);
81094332d3Sopenharmony_ci    void SetLayerCrop(const IRect& rect);
82094332d3Sopenharmony_ci    void SetZorder(uint32_t zorder);
83094332d3Sopenharmony_ci    void SetCompType(Composer::V1_0::CompositionType type);
84094332d3Sopenharmony_ci    void SetReleaseFence(int fd);
85094332d3Sopenharmony_ci    void SetAlpha(LayerAlpha alpha);
86094332d3Sopenharmony_ci    void SetBlendType(BlendType type);
87094332d3Sopenharmony_ci    void SetTransform(TransformType transform);
88094332d3Sopenharmony_ci    uint32_t GetLayerBuffercount() const;
89094332d3Sopenharmony_ci
90094332d3Sopenharmony_ciprivate:
91094332d3Sopenharmony_ci    uint32_t id_;
92094332d3Sopenharmony_ci    uint32_t displayID_;
93094332d3Sopenharmony_ci    uint32_t layerBufferCount_;
94094332d3Sopenharmony_ci    std::queue<std::unique_ptr<HdiGrallocBuffer>> frontBuffers_;
95094332d3Sopenharmony_ci    std::queue<std::unique_ptr<HdiGrallocBuffer>> backBuffers_;
96094332d3Sopenharmony_ci    LayerInfo layerInfo_ = { 0 };
97094332d3Sopenharmony_ci
98094332d3Sopenharmony_ci#ifdef DISPLAY_COMMUNITY
99094332d3Sopenharmony_ci    Composer::V1_0::CompositionType compType_ = Composer::V1_0::CompositionType::COMPOSITION_CLIENT;
100094332d3Sopenharmony_ci#else
101094332d3Sopenharmony_ci    Composer::V1_0::CompositionType compType_ = Composer::V1_0::CompositionType::COMPOSITION_DEVICE;
102094332d3Sopenharmony_ci#endif // DISPLAY_COMMUNITY
103094332d3Sopenharmony_ci    IRect displayRect_ = { 0 };
104094332d3Sopenharmony_ci    IRect cropRect_ = { 0 };
105094332d3Sopenharmony_ci    uint32_t zorder_ = 0;
106094332d3Sopenharmony_ci    LayerAlpha alpha_ = { 0 };
107094332d3Sopenharmony_ci    BlendType blendType_ = BLEND_SRC;
108094332d3Sopenharmony_ci    std::unique_ptr<HdiGrallocBuffer> currentBuffer_;
109094332d3Sopenharmony_ci    TransformType transform_ = ROTATE_NONE;
110094332d3Sopenharmony_ci};
111094332d3Sopenharmony_ci} // OHOS
112094332d3Sopenharmony_ci} // HDI
113094332d3Sopenharmony_ci} // Display
114094332d3Sopenharmony_ci} // TEST
115094332d3Sopenharmony_ci
116094332d3Sopenharmony_ci#endif // HDI_TEST_LAYER_H
117