• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef HDI_TEST_LAYER_H
17 #define HDI_TEST_LAYER_H
18 #include <queue>
19 #include "v1_1/display_composer_type.h"
20 #include "v1_0/include/idisplay_buffer.h"
21 
22 namespace OHOS {
23 namespace HDI {
24 namespace Display {
25 namespace TEST {
26 using namespace OHOS::HDI::Display::Composer::V1_1;
27 
28 class HdiGrallocBuffer {
29 public:
30     HdiGrallocBuffer(uint32_t seqNo, uint32_t w, uint32_t h, Composer::V1_0::PixelFormat fmt);
31     ~HdiGrallocBuffer();
Get()32     BufferHandle* Get() const
33     {
34         return buffer_;
35     }
36     void SetReleaseFence(int fd);
37     void SetAcquirceFence(int fd);
GetAcquireFence()38     int GetAcquireFence() const
39     {
40         return mAcquireFence;
41     }
GetReleaseFence()42     int GetReleaseFence() const
43     {
44         return mReleaseFence;
45     }
46     int32_t SetGraphicBuffer(std::function<int32_t (const BufferHandle*, uint32_t)> realFunc);
47 
48 private:
49     BufferHandle* buffer_ = nullptr;
50     int mAcquireFence = -1;
51     int mReleaseFence = -1;
52     uint32_t seqNo_ = UINT32_MAX;
53     bool cacheValid_ = false;
54 };
55 
56 class HdiTestLayer {
57 public:
58     static const uint32_t MAX_BUFFER_COUNT = 3;
59     HdiTestLayer(LayerInfo& info, uint32_t id, uint32_t displayId);
60     virtual ~HdiTestLayer();
61     int32_t Init(uint32_t bufferCount = MAX_BUFFER_COUNT);
62     int32_t PreparePresent();
63 
GetId()64     uint32_t GetId() const
65     {
66         return id_;
67     }
GetCompType()68     Composer::V1_0::CompositionType GetCompType() const
69     {
70         return compType_;
71     }
72 
73     HdiGrallocBuffer* GetFrontBuffer() const;
74     HdiGrallocBuffer* GetBackBuffer() const;
75     HdiGrallocBuffer* AcquireBackBuffer();
76 
77     int32_t SwapFrontToBackQ();
78     int32_t SwapBackToFrontQ();
79 
80     void SetLayerPosition(const IRect& rect);
81     void SetLayerCrop(const IRect& rect);
82     void SetZorder(uint32_t zorder);
83     void SetCompType(Composer::V1_0::CompositionType type);
84     void SetReleaseFence(int fd);
85     void SetAlpha(LayerAlpha alpha);
86     void SetBlendType(BlendType type);
87     void SetTransform(TransformType transform);
88     uint32_t GetLayerBuffercount() const;
89 
90 private:
91     uint32_t id_;
92     uint32_t displayID_;
93     uint32_t layerBufferCount_;
94     std::queue<std::unique_ptr<HdiGrallocBuffer>> frontBuffers_;
95     std::queue<std::unique_ptr<HdiGrallocBuffer>> backBuffers_;
96     LayerInfo layerInfo_ = { 0 };
97 
98 #ifdef DISPLAY_COMMUNITY
99     Composer::V1_0::CompositionType compType_ = Composer::V1_0::CompositionType::COMPOSITION_CLIENT;
100 #else
101     Composer::V1_0::CompositionType compType_ = Composer::V1_0::CompositionType::COMPOSITION_DEVICE;
102 #endif // DISPLAY_COMMUNITY
103     IRect displayRect_ = { 0 };
104     IRect cropRect_ = { 0 };
105     uint32_t zorder_ = 0;
106     LayerAlpha alpha_ = { 0 };
107     BlendType blendType_ = BLEND_SRC;
108     std::unique_ptr<HdiGrallocBuffer> currentBuffer_;
109     TransformType transform_ = ROTATE_NONE;
110 };
111 } // OHOS
112 } // HDI
113 } // Display
114 } // TEST
115 
116 #endif // HDI_TEST_LAYER_H
117