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