1 /* 2 * Copyright (c) 2024 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 #include <gtest/gtest.h> 17 #include <vector> 18 19 #include "surface.h" 20 #include "sync_fence.h" 21 22 using namespace testing; 23 using namespace testing::ext; 24 25 namespace OHOS::Rosen { 26 class BaseSurface : public Surface { 27 public: IsConsumer() const28 bool IsConsumer() const override 29 { 30 return false; 31 } GetProducer() const32 sptr<IBufferProducer> GetProducer() const override 33 { 34 return nullptr; 35 } AttachBuffer(sptr<SurfaceBuffer> & buffer)36 GSError AttachBuffer(sptr<SurfaceBuffer> &buffer) override 37 { 38 (void)buffer; 39 return GSERROR_NOT_SUPPORT; 40 } DetachBuffer(sptr<SurfaceBuffer> & buffer)41 GSError DetachBuffer(sptr<SurfaceBuffer> &buffer) override 42 { 43 (void)buffer; 44 return GSERROR_NOT_SUPPORT; 45 } GetQueueSize()46 uint32_t GetQueueSize() override 47 { 48 return 0; 49 } SetQueueSize(uint32_t queueSize)50 GSError SetQueueSize(uint32_t queueSize) override 51 { 52 (void)queueSize; 53 return GSERROR_NOT_SUPPORT; 54 } GetDefaultWidth()55 int32_t GetDefaultWidth() override 56 { 57 return 0; 58 } GetDefaultHeight()59 int32_t GetDefaultHeight() override 60 { 61 return 0; 62 } SetDefaultUsage(uint64_t usage)63 GSError SetDefaultUsage(uint64_t usage) override 64 { 65 (void)usage; 66 return GSERROR_NOT_SUPPORT; 67 } GetDefaultUsage()68 uint64_t GetDefaultUsage() override 69 { 70 return 0; 71 } SetUserData(const std::string & key,const std::string & val)72 GSError SetUserData(const std::string &key, const std::string &val) override 73 { 74 (void)key; 75 (void)val; 76 return GSERROR_NOT_SUPPORT; 77 } GetUserData(const std::string & key)78 std::string GetUserData(const std::string &key) override 79 { 80 (void)key; 81 return std::string(""); 82 } GetName()83 const std::string &GetName() override 84 { 85 return name_; 86 } GetUniqueId() const87 uint64_t GetUniqueId() const override 88 { 89 return 0; 90 } GoBackground()91 GSError GoBackground() override 92 { 93 return GSERROR_NOT_SUPPORT; 94 } SetTransform(GraphicTransformType transform)95 GSError SetTransform(GraphicTransformType transform) override 96 { 97 (void)transform; 98 return GSERROR_NOT_SUPPORT; 99 } GetTransform() const100 GraphicTransformType GetTransform() const override 101 { 102 return GRAPHIC_ROTATE_NONE; 103 } SetScalingMode(uint32_t sequence,ScalingMode scalingMode)104 GSError SetScalingMode(uint32_t sequence, ScalingMode scalingMode) override 105 { 106 (void)sequence; 107 (void)scalingMode; 108 return GSERROR_NOT_SUPPORT; 109 } SetMetaData(uint32_t sequence,const std::vector<GraphicHDRMetaData> & metaData)110 GSError SetMetaData(uint32_t sequence, const std::vector<GraphicHDRMetaData> &metaData) override 111 { 112 (void)sequence; 113 (void)metaData; 114 return GSERROR_NOT_SUPPORT; 115 } SetMetaDataSet(uint32_t sequence,GraphicHDRMetadataKey key,const std::vector<uint8_t> & metaData)116 GSError SetMetaDataSet( 117 uint32_t sequence, GraphicHDRMetadataKey key, const std::vector<uint8_t> &metaData) override 118 { 119 (void)sequence; 120 (void)key; 121 (void)metaData; 122 return GSERROR_NOT_SUPPORT; 123 } SetTunnelHandle(const GraphicExtDataHandle * handle)124 GSError SetTunnelHandle(const GraphicExtDataHandle *handle) override 125 { 126 (void)handle; 127 return GSERROR_NOT_SUPPORT; 128 } Dump(std::string & result) const129 void Dump(std::string &result) const override 130 { 131 (void)result; 132 } AttachBuffer(sptr<SurfaceBuffer> & buffer,int32_t timeOut)133 GSError AttachBuffer(sptr<SurfaceBuffer> &buffer, int32_t timeOut) override 134 { 135 (void)buffer; 136 (void)timeOut; 137 return GSERROR_NOT_SUPPORT; 138 } RegisterSurfaceDelegator(sptr<IRemoteObject> client)139 GSError RegisterSurfaceDelegator(sptr<IRemoteObject> client) override 140 { 141 (void)client; 142 return GSERROR_NOT_SUPPORT; 143 } RegisterReleaseListener(OnReleaseFuncWithFence func)144 GSError RegisterReleaseListener(OnReleaseFuncWithFence func) override 145 { 146 (void)func; 147 return GSERROR_NOT_SUPPORT; 148 } RegisterUserDataChangeListener(const std::string & funcName,OnUserDataChangeFunc func)149 GSError RegisterUserDataChangeListener(const std::string &funcName, OnUserDataChangeFunc func) override 150 { 151 (void)funcName; 152 (void)func; 153 return GSERROR_NOT_SUPPORT; 154 } UnRegisterUserDataChangeListener(const std::string & funcName)155 GSError UnRegisterUserDataChangeListener(const std::string &funcName) override 156 { 157 (void)funcName; 158 return GSERROR_NOT_SUPPORT; 159 } ClearUserDataChangeListener()160 GSError ClearUserDataChangeListener() override 161 { 162 return GSERROR_NOT_SUPPORT; 163 } AttachBufferToQueue(sptr<SurfaceBuffer> buffer)164 GSError AttachBufferToQueue(sptr<SurfaceBuffer> buffer) override 165 { 166 (void)buffer; 167 return GSERROR_NOT_SUPPORT; 168 } DetachBufferFromQueue(sptr<SurfaceBuffer> buffer,bool isReserveSlot=false)169 GSError DetachBufferFromQueue(sptr<SurfaceBuffer> buffer, bool isReserveSlot = false) override 170 { 171 (void)buffer; 172 return GSERROR_NOT_SUPPORT; 173 } GetTransformHint() const174 GraphicTransformType GetTransformHint() const override 175 { 176 return GRAPHIC_ROTATE_NONE; 177 } SetTransformHint(GraphicTransformType transformHint)178 GSError SetTransformHint(GraphicTransformType transformHint) override 179 { 180 (void)transformHint; 181 return GSERROR_NOT_SUPPORT; 182 } SetBufferHold(bool hold)183 void SetBufferHold(bool hold) override 184 { 185 (void)hold; 186 } SetScalingMode(ScalingMode scalingMode)187 GSError SetScalingMode(ScalingMode scalingMode) override 188 { 189 (void)scalingMode; 190 return GSERROR_NOT_SUPPORT; 191 } SetSurfaceSourceType(OHSurfaceSource sourceType)192 GSError SetSurfaceSourceType(OHSurfaceSource sourceType) override 193 { 194 (void)sourceType; 195 return GSERROR_NOT_SUPPORT; 196 } GetSurfaceSourceType() const197 OHSurfaceSource GetSurfaceSourceType() const override 198 { 199 return OH_SURFACE_SOURCE_DEFAULT; 200 } SetSurfaceAppFrameworkType(std::string appFrameworkType)201 GSError SetSurfaceAppFrameworkType(std::string appFrameworkType) override 202 { 203 (void)appFrameworkType; 204 return GSERROR_NOT_SUPPORT; 205 } GetSurfaceAppFrameworkType() const206 std::string GetSurfaceAppFrameworkType() const override 207 { 208 return std::string(""); 209 } 210 211 private: 212 const std::string name_ = ""; 213 }; 214 215 class SurfaceTest : public testing::Test { 216 public: SetUpTestCase()217 static void SetUpTestCase() {} TearDownTestCase()218 static void TearDownTestCase() {} 219 static inline sptr<BaseSurface> surface = new BaseSurface(); 220 static inline ProducerInitInfo info; 221 static inline sptr<SurfaceBuffer> buffer = nullptr; 222 static inline int32_t fence = 0; 223 static inline sptr<SyncFence> fencePtr = nullptr; 224 static inline BufferRequestConfig bufferRequestConfig; 225 static inline std::vector<sptr<SurfaceBuffer>> buffers = {}; 226 static inline std::vector<sptr<SyncFence>> fences = {}; 227 static inline BufferFlushConfig bufferFlushConfig; 228 static inline int64_t timestamp = 0; 229 static inline Rect damage; 230 static inline int32_t width = 0; 231 static inline int32_t height = 0; 232 static inline sptr<IBufferConsumerListener> listener = nullptr; 233 static inline OnReleaseFunc onReleaseFunc = nullptr; 234 static inline OnDeleteBufferFunc onDeleteBufferFunc = nullptr; 235 static inline uint32_t sequence = 0; 236 static inline ScalingMode scalingMode; 237 static inline HDRMetaDataType hdrMetaDataType; 238 static inline std::vector<GraphicHDRMetaData> graphicHDRMetaDatas = {}; 239 static inline GraphicHDRMetadataKey key; 240 static inline std::vector<uint8_t> metaDatas = {}; 241 static inline GraphicPresentTimestamp graphicPresentTimestamp; 242 static inline GraphicPresentTimestampType graphicPresentTimestampType; 243 static inline int64_t time = 0; 244 static inline int32_t format = 0; 245 static inline int32_t colorGamut = 0; 246 static inline BufferFlushConfigWithDamages bufferFlushConfigWithDamages; 247 static inline std::vector<BufferFlushConfigWithDamages> bufferFlushConfigWithDamagesVector = {}; 248 static inline float matrix[16]; 249 static inline int32_t stride = 0; 250 static inline uint64_t usage = 0; 251 static inline int32_t timeout = 0; 252 static inline GraphicColorGamut graphicColorGamut; 253 static inline GraphicTransformType transform; 254 static inline float brightness = 0.0f; 255 static inline uint32_t matrixSize = 0; 256 static inline int32_t alpha = 0; 257 static inline std::string bufferName = ""; 258 }; 259 260 /* 261 * Function: SurfaceTest 262 * Type: Function 263 * Rank: Important(2) 264 * EnvConditions: N/A 265 * CaseDescription: test functions from Surface 266 */ 267 HWTEST_F(SurfaceTest, SurfaceTest001, TestSize.Level0) 268 { 269 EXPECT_EQ(surface->GetProducerInitInfo(info), GSERROR_NOT_SUPPORT); 270 EXPECT_EQ(surface->RequestBuffer(buffer, fence, bufferRequestConfig), GSERROR_NOT_SUPPORT); 271 EXPECT_EQ(surface->RequestBuffers(buffers, fences, bufferRequestConfig), GSERROR_NOT_SUPPORT); 272 EXPECT_EQ(surface->CancelBuffer(buffer), GSERROR_NOT_SUPPORT); 273 EXPECT_EQ(surface->FlushBuffer(buffer, fence, bufferFlushConfig), GSERROR_NOT_SUPPORT); 274 EXPECT_EQ(surface->AcquireBuffer(buffer, fence, timestamp, damage), GSERROR_NOT_SUPPORT); 275 EXPECT_EQ(surface->ReleaseBuffer(buffer, fence), GSERROR_NOT_SUPPORT); 276 EXPECT_EQ(surface->RequestBuffer(buffer, fencePtr, bufferRequestConfig), GSERROR_NOT_SUPPORT); 277 EXPECT_EQ(surface->FlushBuffer(buffer, fencePtr, bufferFlushConfig), GSERROR_NOT_SUPPORT); 278 EXPECT_EQ(surface->AcquireBuffer(buffer, fencePtr, timestamp, damage), GSERROR_NOT_SUPPORT); 279 EXPECT_EQ(surface->ReleaseBuffer(buffer, fencePtr), GSERROR_NOT_SUPPORT); 280 EXPECT_EQ(surface->SetDefaultWidthAndHeight(width, height), GSERROR_NOT_SUPPORT); 281 EXPECT_EQ(surface->RegisterConsumerListener(listener), GSERROR_NOT_SUPPORT); 282 EXPECT_EQ(surface->Surface::RegisterReleaseListener(onReleaseFunc), GSERROR_NOT_SUPPORT); 283 EXPECT_EQ(surface->RegisterDeleteBufferListener(onDeleteBufferFunc, false), GSERROR_NOT_SUPPORT); 284 EXPECT_EQ(surface->UnregisterConsumerListener(), GSERROR_NOT_SUPPORT); 285 EXPECT_EQ(surface->CleanCache(false), GSERROR_NOT_SUPPORT); 286 EXPECT_EQ(surface->Connect(), GSERROR_NOT_SUPPORT); 287 EXPECT_EQ(surface->Disconnect(), GSERROR_NOT_SUPPORT); 288 EXPECT_EQ(surface->GetScalingMode(sequence, scalingMode), GSERROR_NOT_SUPPORT); 289 EXPECT_EQ(surface->QueryMetaDataType(sequence, hdrMetaDataType), GSERROR_NOT_SUPPORT); 290 EXPECT_EQ(surface->GetMetaData(sequence, graphicHDRMetaDatas), GSERROR_NOT_SUPPORT); 291 EXPECT_EQ(surface->GetMetaDataSet(sequence, key, metaDatas), GSERROR_NOT_SUPPORT); 292 EXPECT_EQ(surface->GetTunnelHandle(), nullptr); 293 EXPECT_EQ(surface->SetPresentTimestamp(sequence, graphicPresentTimestamp), GSERROR_NOT_SUPPORT); 294 EXPECT_EQ(surface->GetPresentTimestamp(sequence, graphicPresentTimestampType, time), GSERROR_NOT_SUPPORT); 295 EXPECT_EQ(surface->GetDefaultFormat(), 0); 296 EXPECT_EQ(surface->SetDefaultFormat(format), GSERROR_NOT_SUPPORT); 297 EXPECT_EQ(surface->GetDefaultColorGamut(), 0); 298 EXPECT_EQ(surface->SetDefaultColorGamut(colorGamut), GSERROR_NOT_SUPPORT); 299 EXPECT_EQ(surface->SetBufferName(bufferName), GSERROR_NOT_SUPPORT); 300 EXPECT_EQ(surface->SetBufferReallocFlag(true), GSERROR_NOT_SUPPORT); 301 } 302 303 /* 304 * Function: SurfaceTest 305 * Type: Function 306 * Rank: Important(2) 307 * EnvConditions: N/A 308 * CaseDescription: test functions from Surface 309 */ 310 HWTEST_F(SurfaceTest, SurfaceTest002, TestSize.Level0) 311 { 312 EXPECT_EQ(surface->GetNativeSurface(), nullptr); 313 EXPECT_EQ(surface->QueryIfBufferAvailable(), false); 314 EXPECT_EQ(surface->FlushBuffer(buffer, fencePtr, bufferFlushConfigWithDamages), GSERROR_NOT_SUPPORT); 315 EXPECT_EQ(surface->FlushBuffers(buffers, fences, bufferFlushConfigWithDamagesVector), GSERROR_NOT_SUPPORT); 316 EXPECT_EQ(surface->UnRegisterReleaseListener(), GSERROR_NOT_SUPPORT); 317 EXPECT_EQ(surface->SetWptrNativeWindowToPSurface(nullptr), GSERROR_NOT_SUPPORT); 318 EXPECT_EQ(surface->GetLastFlushedBuffer(buffer, fencePtr, matrix, false), GSERROR_NOT_SUPPORT); 319 surface->SetRequestWidthAndHeight(width, height); 320 EXPECT_EQ(surface->GetRequestWidth(), 0); 321 EXPECT_EQ(surface->GetRequestHeight(), 0); 322 surface->SetWindowConfig(bufferRequestConfig); 323 surface->SetWindowConfigWidthAndHeight(width, height); 324 surface->SetWindowConfigStride(stride); 325 surface->SetWindowConfigFormat(format); 326 surface->SetWindowConfigUsage(usage); 327 surface->SetWindowConfigTimeout(timeout); 328 surface->SetWindowConfigColorGamut(graphicColorGamut); 329 surface->SetWindowConfigTransform(transform); 330 surface->GetWindowConfig(); 331 EXPECT_EQ(surface->SetHdrWhitePointBrightness(brightness), GSERROR_NOT_SUPPORT); 332 EXPECT_EQ(surface->SetSdrWhitePointBrightness(brightness), GSERROR_NOT_SUPPORT); 333 EXPECT_EQ(surface->AcquireLastFlushedBuffer(buffer, fencePtr, matrix, matrixSize, false), GSERROR_NOT_SUPPORT); 334 EXPECT_EQ(surface->ReleaseLastFlushedBuffer(buffer), GSERROR_NOT_SUPPORT); 335 EXPECT_EQ(surface->SetGlobalAlpha(alpha), GSERROR_NOT_SUPPORT); 336 EXPECT_EQ(surface->IsInHebcList(), false); 337 } 338 } // namespace OHOS::Rosen