14ed2deddSopenharmony_ci/* 24ed2deddSopenharmony_ci * Copyright (c) 2020-2022 Huawei Device Co., Ltd. 34ed2deddSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 44ed2deddSopenharmony_ci * you may not use this file except in compliance with the License. 54ed2deddSopenharmony_ci * You may obtain a copy of the License at 64ed2deddSopenharmony_ci * 74ed2deddSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 84ed2deddSopenharmony_ci * 94ed2deddSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 104ed2deddSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 114ed2deddSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 124ed2deddSopenharmony_ci * See the License for the specific language governing permissions and 134ed2deddSopenharmony_ci * limitations under the License. 144ed2deddSopenharmony_ci */ 154ed2deddSopenharmony_ci 164ed2deddSopenharmony_ci#include <climits> 174ed2deddSopenharmony_ci#include <gtest/gtest.h> 184ed2deddSopenharmony_ci 194ed2deddSopenharmony_ci#include "buffer_common.h" 204ed2deddSopenharmony_ci#include "surface.h" 214ed2deddSopenharmony_ci#include "surface_impl.h" 224ed2deddSopenharmony_ci 234ed2deddSopenharmony_ciusing namespace std; 244ed2deddSopenharmony_ciusing namespace testing::ext; 254ed2deddSopenharmony_ci 264ed2deddSopenharmony_cinamespace OHOS { 274ed2deddSopenharmony_ciclass SurfaceTest : public testing::Test { 284ed2deddSopenharmony_cipublic: 294ed2deddSopenharmony_ci static void SetUpTestCase(void); 304ed2deddSopenharmony_ci static void TearDownTestCase(void); 314ed2deddSopenharmony_ci void SetUp(); 324ed2deddSopenharmony_ci void TearDown(); 334ed2deddSopenharmony_ci}; 344ed2deddSopenharmony_ci 354ed2deddSopenharmony_ciclass BufferConsumerTest : public IBufferConsumerListener { 364ed2deddSopenharmony_cipublic: 374ed2deddSopenharmony_ci void OnBufferAvailable(); 384ed2deddSopenharmony_ci ~BufferConsumerTest() {} 394ed2deddSopenharmony_ci}; 404ed2deddSopenharmony_civoid BufferConsumerTest::OnBufferAvailable() 414ed2deddSopenharmony_ci{ 424ed2deddSopenharmony_ci} 434ed2deddSopenharmony_ci 444ed2deddSopenharmony_civoid SurfaceTest::SetUpTestCase(void) 454ed2deddSopenharmony_ci{ 464ed2deddSopenharmony_ci} 474ed2deddSopenharmony_ci 484ed2deddSopenharmony_civoid SurfaceTest::TearDownTestCase(void) 494ed2deddSopenharmony_ci{ 504ed2deddSopenharmony_ci} 514ed2deddSopenharmony_ci 524ed2deddSopenharmony_civoid SurfaceTest::SetUp(void) 534ed2deddSopenharmony_ci{ 544ed2deddSopenharmony_ci} 554ed2deddSopenharmony_ci 564ed2deddSopenharmony_civoid SurfaceTest::TearDown(void) 574ed2deddSopenharmony_ci{ 584ed2deddSopenharmony_ci} 594ed2deddSopenharmony_ci 604ed2deddSopenharmony_ci/* 614ed2deddSopenharmony_ci * Feature: Surface 624ed2deddSopenharmony_ci * Function: new SurfaceBuffer 634ed2deddSopenharmony_ci * SubFunction: NA 644ed2deddSopenharmony_ci * FunctionPoints: Surface Buffer initialization. 654ed2deddSopenharmony_ci * EnvConditions: NA 664ed2deddSopenharmony_ci * CaseDescription: Verify the Surface Buffer initialization. 674ed2deddSopenharmony_ci */ 684ed2deddSopenharmony_ciHWTEST_F(SurfaceTest, surface_buffer_001, TestSize.Level1) 694ed2deddSopenharmony_ci{ 704ed2deddSopenharmony_ci SurfaceBufferImpl* buffer = new SurfaceBufferImpl(); 714ed2deddSopenharmony_ci EXPECT_TRUE(buffer); 724ed2deddSopenharmony_ci EXPECT_EQ(0, buffer->GetKey()); 734ed2deddSopenharmony_ci EXPECT_EQ(0, buffer->GetPhyAddr()); 744ed2deddSopenharmony_ci EXPECT_EQ(0, buffer->GetSize()); 754ed2deddSopenharmony_ci EXPECT_EQ(0, buffer->GetUsage()); 764ed2deddSopenharmony_ci EXPECT_EQ(0, buffer->GetDeletePending()); 774ed2deddSopenharmony_ci EXPECT_EQ(0, buffer->GetState()); 784ed2deddSopenharmony_ci 794ed2deddSopenharmony_ci int32_t aValue32; 804ed2deddSopenharmony_ci int32_t ret = buffer->GetInt32(1, aValue32); // key = 1, test has value with key(1). if not, ret < 0. 814ed2deddSopenharmony_ci EXPECT_LT(ret, 0); 824ed2deddSopenharmony_ci int64_t aValue64; 834ed2deddSopenharmony_ci ret = buffer->GetInt64(1, aValue64); // key = 1, test has value with key(1). if not, ret < 0. 844ed2deddSopenharmony_ci EXPECT_LT(ret, 0); 854ed2deddSopenharmony_ci delete buffer; 864ed2deddSopenharmony_ci} 874ed2deddSopenharmony_ci 884ed2deddSopenharmony_ci/* 894ed2deddSopenharmony_ci * Feature: Surface 904ed2deddSopenharmony_ci * Function: new SurfaceBuffer(uint32_t size, uint32_t flag, uint32_t usage) 914ed2deddSopenharmony_ci * SubFunction: NA 924ed2deddSopenharmony_ci * FunctionPoints: Surface Buffer initialization. 934ed2deddSopenharmony_ci * EnvConditions: NA 944ed2deddSopenharmony_ci * CaseDescription: Verify the Surface Buffer initialization. 954ed2deddSopenharmony_ci */ 964ed2deddSopenharmony_ciHWTEST_F(SurfaceTest, surface_buffer_002, TestSize.Level1) 974ed2deddSopenharmony_ci{ 984ed2deddSopenharmony_ci int32_t usage = BUFFER_CONSUMER_USAGE_HARDWARE; // alloc buffer with usage = BUFFER_CONSUMER_USAGE_HARDWARE 994ed2deddSopenharmony_ci int32_t size = 1024; // alloc buffer with size = 1024; 1004ed2deddSopenharmony_ci 1014ed2deddSopenharmony_ci SurfaceBufferImpl* buffer = new SurfaceBufferImpl(); 1024ed2deddSopenharmony_ci buffer->SetUsage(usage); 1034ed2deddSopenharmony_ci buffer->SetMaxSize(size); 1044ed2deddSopenharmony_ci EXPECT_TRUE(buffer); 1054ed2deddSopenharmony_ci EXPECT_EQ(0, buffer->GetKey()); 1064ed2deddSopenharmony_ci EXPECT_EQ(0, buffer->GetPhyAddr()); 1074ed2deddSopenharmony_ci EXPECT_EQ(size, buffer->GetMaxSize()); 1084ed2deddSopenharmony_ci EXPECT_EQ(usage, buffer->GetUsage()); 1094ed2deddSopenharmony_ci EXPECT_EQ(0, buffer->GetDeletePending()); 1104ed2deddSopenharmony_ci EXPECT_EQ(0, buffer->GetState()); 1114ed2deddSopenharmony_ci 1124ed2deddSopenharmony_ci int32_t aValue32; 1134ed2deddSopenharmony_ci int32_t ret = buffer->GetInt32(1, aValue32); // key = 1, test has value with key(1). if not, ret < 0. 1144ed2deddSopenharmony_ci EXPECT_LT(ret, 0); 1154ed2deddSopenharmony_ci int64_t aValue64; 1164ed2deddSopenharmony_ci ret = buffer->GetInt64(1, aValue64); // key = 1, test has value with key(1). if not, ret < 0? 1174ed2deddSopenharmony_ci EXPECT_LT(ret, 0); 1184ed2deddSopenharmony_ci delete buffer; 1194ed2deddSopenharmony_ci} 1204ed2deddSopenharmony_ci 1214ed2deddSopenharmony_ci/* 1224ed2deddSopenharmony_ci * Feature: Surface 1234ed2deddSopenharmony_ci * Function: Surface Buffer set/get key-value 1244ed2deddSopenharmony_ci * SubFunction: NA 1254ed2deddSopenharmony_ci * FunctionPoints: buffer attr and extra attr set/get. 1264ed2deddSopenharmony_ci * EnvConditions: NA 1274ed2deddSopenharmony_ci * CaseDescription: Verify the Surface Buffer attr set/get. 1284ed2deddSopenharmony_ci */ 1294ed2deddSopenharmony_ciHWTEST_F(SurfaceTest, surface_buffer_003, TestSize.Level1) 1304ed2deddSopenharmony_ci{ 1314ed2deddSopenharmony_ci SurfaceBufferImpl buffer; 1324ed2deddSopenharmony_ci 1334ed2deddSopenharmony_ci EXPECT_EQ(0, buffer.GetPhyAddr()); 1344ed2deddSopenharmony_ci uint64_t phyAddr = 0x040a7000; // mock physical address as 0x040a7000 1354ed2deddSopenharmony_ci buffer.SetPhyAddr(phyAddr); 1364ed2deddSopenharmony_ci EXPECT_EQ(phyAddr, buffer.GetPhyAddr()); 1374ed2deddSopenharmony_ci 1384ed2deddSopenharmony_ci EXPECT_EQ(0, buffer.GetMaxSize()); 1394ed2deddSopenharmony_ci uint32_t size = 1; 1404ed2deddSopenharmony_ci buffer.SetMaxSize(size); 1414ed2deddSopenharmony_ci EXPECT_EQ(size, buffer.GetMaxSize()); 1424ed2deddSopenharmony_ci 1434ed2deddSopenharmony_ci EXPECT_EQ(0, buffer.GetUsage()); 1444ed2deddSopenharmony_ci uint32_t usage = 1; 1454ed2deddSopenharmony_ci buffer.SetUsage(usage); 1464ed2deddSopenharmony_ci EXPECT_EQ(usage, buffer.GetUsage()); 1474ed2deddSopenharmony_ci 1484ed2deddSopenharmony_ci EXPECT_EQ(0, buffer.GetDeletePending()); 1494ed2deddSopenharmony_ci uint8_t deletePending = 1; 1504ed2deddSopenharmony_ci buffer.SetDeletePending(deletePending); 1514ed2deddSopenharmony_ci EXPECT_EQ(deletePending, buffer.GetDeletePending()); 1524ed2deddSopenharmony_ci 1534ed2deddSopenharmony_ci EXPECT_EQ(0, buffer.GetState()); 1544ed2deddSopenharmony_ci buffer.SetState(BUFFER_STATE_REQUEST); 1554ed2deddSopenharmony_ci EXPECT_EQ(BUFFER_STATE_REQUEST, buffer.GetState()); 1564ed2deddSopenharmony_ci 1574ed2deddSopenharmony_ci int32_t aValue32; 1584ed2deddSopenharmony_ci int32_t ret = buffer.GetInt32(1, aValue32); // key = 1, test has value for key(1). if not, ret < 0. 1594ed2deddSopenharmony_ci EXPECT_LT(ret, 0); 1604ed2deddSopenharmony_ci 1614ed2deddSopenharmony_ci int32_t key32 = 1; // set key-value , key = 1; 1624ed2deddSopenharmony_ci int32_t value32 = 100; // set key-value, value = 1; 1634ed2deddSopenharmony_ci buffer.SetInt32(key32, value32); 1644ed2deddSopenharmony_ci ret = buffer.GetInt32(key32, aValue32); 1654ed2deddSopenharmony_ci EXPECT_EQ(ret, 0); 1664ed2deddSopenharmony_ci EXPECT_EQ(value32, aValue32); 1674ed2deddSopenharmony_ci 1684ed2deddSopenharmony_ci int64_t aValue64; 1694ed2deddSopenharmony_ci ret = buffer.GetInt64(1, aValue64); // key = 1, test has value for key(1). if not, ret < 0? 1704ed2deddSopenharmony_ci EXPECT_LT(ret, 0); 1714ed2deddSopenharmony_ci 1724ed2deddSopenharmony_ci uint32_t key64 = 2; // set key-value , key = 2; 1734ed2deddSopenharmony_ci int64_t value64 = 0x040a7003; // set key-value, value = 0x040a7003; 1744ed2deddSopenharmony_ci buffer.SetInt64(key64, value64); 1754ed2deddSopenharmony_ci ret = buffer.GetInt64(key64, aValue64); 1764ed2deddSopenharmony_ci EXPECT_EQ(ret, 0); 1774ed2deddSopenharmony_ci EXPECT_EQ(value64, aValue64); 1784ed2deddSopenharmony_ci 1794ed2deddSopenharmony_ci value64 = 0x040a7004; // set key-value, value = 0x040a7004 over cover 0x040a7003; 1804ed2deddSopenharmony_ci buffer.SetInt64(key64, value64); 1814ed2deddSopenharmony_ci ret = buffer.GetInt64(key64, aValue64); 1824ed2deddSopenharmony_ci EXPECT_EQ(ret, 0); 1834ed2deddSopenharmony_ci EXPECT_EQ(value64, aValue64); 1844ed2deddSopenharmony_ci} 1854ed2deddSopenharmony_ci 1864ed2deddSopenharmony_ci/* 1874ed2deddSopenharmony_ci * Feature: Surface 1884ed2deddSopenharmony_ci * Function: Surface set width and height 1894ed2deddSopenharmony_ci * SubFunction: NA 1904ed2deddSopenharmony_ci * FunctionPoints: buffer consuctor and set/get width and height. 1914ed2deddSopenharmony_ci * EnvConditions: NA 1924ed2deddSopenharmony_ci * CaseDescription: Surface constuctor and set/set attr. 1934ed2deddSopenharmony_ci */ 1944ed2deddSopenharmony_ciHWTEST_F(SurfaceTest, surface_set_001, TestSize.Level1) 1954ed2deddSopenharmony_ci{ 1964ed2deddSopenharmony_ci IBufferConsumerListener* consumerListener = new BufferConsumerTest(); 1974ed2deddSopenharmony_ci if (consumerListener == nullptr) { 1984ed2deddSopenharmony_ci return; 1994ed2deddSopenharmony_ci } 2004ed2deddSopenharmony_ci Surface* surface = Surface::CreateSurface(); 2014ed2deddSopenharmony_ci if (surface == nullptr) { 2024ed2deddSopenharmony_ci delete consumerListener; 2034ed2deddSopenharmony_ci consumerListener = nullptr; 2044ed2deddSopenharmony_ci return; 2054ed2deddSopenharmony_ci } 2064ed2deddSopenharmony_ci surface->RegisterConsumerListener(*consumerListener); 2074ed2deddSopenharmony_ci 2084ed2deddSopenharmony_ci EXPECT_EQ(1, surface->GetQueueSize()); 2094ed2deddSopenharmony_ci EXPECT_EQ(0, surface->GetUsage()); // default usage is BUFFER_CONSUMER_USAGE_SORTWARE(0) 2104ed2deddSopenharmony_ci EXPECT_EQ(0, surface->GetSize()); 2114ed2deddSopenharmony_ci EXPECT_EQ(0, surface->GetWidth()); 2124ed2deddSopenharmony_ci EXPECT_EQ(0, surface->GetHeight()); 2134ed2deddSopenharmony_ci EXPECT_EQ(101, surface->GetFormat()); // default format is IMAGE_PIXEL_FORMAT_RGB565(101) 2144ed2deddSopenharmony_ci EXPECT_EQ(4, surface->GetStrideAlignment()); // default format stride alignment is 4 2154ed2deddSopenharmony_ci 2164ed2deddSopenharmony_ci // set width = 0 failed, return default. 2174ed2deddSopenharmony_ci surface->SetWidthAndHeight(0, 1080); 2184ed2deddSopenharmony_ci EXPECT_EQ(0, surface->GetWidth()); 2194ed2deddSopenharmony_ci EXPECT_EQ(0, surface->GetHeight()); 2204ed2deddSopenharmony_ci 2214ed2deddSopenharmony_ci // set width = 7681 failed, return default. 2224ed2deddSopenharmony_ci surface->SetWidthAndHeight(7681, 1080); 2234ed2deddSopenharmony_ci EXPECT_EQ(0, surface->GetWidth()); 2244ed2deddSopenharmony_ci EXPECT_EQ(0, surface->GetHeight()); 2254ed2deddSopenharmony_ci 2264ed2deddSopenharmony_ci // set width = 7680 succeed, return 7680. 2274ed2deddSopenharmony_ci surface->SetWidthAndHeight(7680, 1080); 2284ed2deddSopenharmony_ci EXPECT_EQ(7680, surface->GetWidth()); 2294ed2deddSopenharmony_ci EXPECT_EQ(1080, surface->GetHeight()); 2304ed2deddSopenharmony_ci 2314ed2deddSopenharmony_ci // set width = 1920 succeed, return 1980. 2324ed2deddSopenharmony_ci surface->SetWidthAndHeight(1920, 1080); 2334ed2deddSopenharmony_ci EXPECT_EQ(1920, surface->GetWidth()); 2344ed2deddSopenharmony_ci EXPECT_EQ(1080, surface->GetHeight()); 2354ed2deddSopenharmony_ci 2364ed2deddSopenharmony_ci // set height = 0 failed, return default. 2374ed2deddSopenharmony_ci surface->SetWidthAndHeight(1920, 0); 2384ed2deddSopenharmony_ci EXPECT_EQ(1920, surface->GetWidth()); 2394ed2deddSopenharmony_ci EXPECT_EQ(1080, surface->GetHeight()); 2404ed2deddSopenharmony_ci 2414ed2deddSopenharmony_ci // set height = 7681 failed, return default. 2424ed2deddSopenharmony_ci surface->SetWidthAndHeight(1920, 7681); 2434ed2deddSopenharmony_ci EXPECT_EQ(1920, surface->GetWidth()); 2444ed2deddSopenharmony_ci EXPECT_EQ(1080, surface->GetHeight()); 2454ed2deddSopenharmony_ci 2464ed2deddSopenharmony_ci // set height = 7680 succeed, return 7680. 2474ed2deddSopenharmony_ci surface->SetWidthAndHeight(1920, 7680); 2484ed2deddSopenharmony_ci EXPECT_EQ(1920, surface->GetWidth()); 2494ed2deddSopenharmony_ci EXPECT_EQ(7680, surface->GetHeight()); 2504ed2deddSopenharmony_ci 2514ed2deddSopenharmony_ci // set height = 720 succeed, return 720. 2524ed2deddSopenharmony_ci surface->SetWidthAndHeight(1280, 720); 2534ed2deddSopenharmony_ci EXPECT_EQ(1280, surface->GetWidth()); 2544ed2deddSopenharmony_ci EXPECT_EQ(720, surface->GetHeight()); 2554ed2deddSopenharmony_ci 2564ed2deddSopenharmony_ci surface->UnregisterConsumerListener(); 2574ed2deddSopenharmony_ci delete surface; 2584ed2deddSopenharmony_ci delete consumerListener; 2594ed2deddSopenharmony_ci} 2604ed2deddSopenharmony_ci 2614ed2deddSopenharmony_ci/* 2624ed2deddSopenharmony_ci * Feature: Surface 2634ed2deddSopenharmony_ci * Function: Surface set format 2644ed2deddSopenharmony_ci * SubFunction: NA 2654ed2deddSopenharmony_ci * FunctionPoints: buffer consuctor and set/get format. 2664ed2deddSopenharmony_ci * EnvConditions: NA 2674ed2deddSopenharmony_ci * CaseDescription: Surface constuctor and set/set format. 2684ed2deddSopenharmony_ci */ 2694ed2deddSopenharmony_ciHWTEST_F(SurfaceTest, surface_set_002, TestSize.Level1) 2704ed2deddSopenharmony_ci{ 2714ed2deddSopenharmony_ci IBufferConsumerListener* consumerListener = new BufferConsumerTest(); 2724ed2deddSopenharmony_ci if (consumerListener == nullptr) { 2734ed2deddSopenharmony_ci return; 2744ed2deddSopenharmony_ci } 2754ed2deddSopenharmony_ci Surface* surface = Surface::CreateSurface(); 2764ed2deddSopenharmony_ci if (surface == nullptr) { 2774ed2deddSopenharmony_ci delete consumerListener; 2784ed2deddSopenharmony_ci consumerListener = nullptr; 2794ed2deddSopenharmony_ci return; 2804ed2deddSopenharmony_ci } 2814ed2deddSopenharmony_ci surface->RegisterConsumerListener(*consumerListener); 2824ed2deddSopenharmony_ci 2834ed2deddSopenharmony_ci EXPECT_EQ(1, surface->GetQueueSize()); 2844ed2deddSopenharmony_ci EXPECT_EQ(0, surface->GetUsage()); // default usage is BUFFER_CONSUMER_USAGE_SORTWARE(0) 2854ed2deddSopenharmony_ci EXPECT_EQ(0, surface->GetSize()); 2864ed2deddSopenharmony_ci EXPECT_EQ(0, surface->GetWidth()); 2874ed2deddSopenharmony_ci EXPECT_EQ(0, surface->GetHeight()); 2884ed2deddSopenharmony_ci EXPECT_EQ(101, surface->GetFormat()); // default format is IMAGE_PIXEL_FORMAT_RGB565(101) 2894ed2deddSopenharmony_ci EXPECT_EQ(4, surface->GetStrideAlignment()); // default format stride alignment is 4 2904ed2deddSopenharmony_ci 2914ed2deddSopenharmony_ci // set format 0 failed, return default. 2924ed2deddSopenharmony_ci surface->SetFormat(0); 2934ed2deddSopenharmony_ci EXPECT_EQ(101, surface->GetFormat()); 2944ed2deddSopenharmony_ci 2954ed2deddSopenharmony_ci // set format 102 succeed, return 102. 2964ed2deddSopenharmony_ci surface->SetFormat(102); 2974ed2deddSopenharmony_ci EXPECT_EQ(102, surface->GetFormat()); 2984ed2deddSopenharmony_ci 2994ed2deddSopenharmony_ci surface->UnregisterConsumerListener(); 3004ed2deddSopenharmony_ci delete surface; 3014ed2deddSopenharmony_ci delete consumerListener; 3024ed2deddSopenharmony_ci} 3034ed2deddSopenharmony_ci 3044ed2deddSopenharmony_ci/* 3054ed2deddSopenharmony_ci * Feature: Surface 3064ed2deddSopenharmony_ci * Function: Surface set stride alignment 3074ed2deddSopenharmony_ci * SubFunction: NA 3084ed2deddSopenharmony_ci * FunctionPoints: buffer consuctor and set/get stride alignment. 3094ed2deddSopenharmony_ci * EnvConditions: NA 3104ed2deddSopenharmony_ci * CaseDescription: Surface constuctor and set/set stride alignment. 3114ed2deddSopenharmony_ci */ 3124ed2deddSopenharmony_ciHWTEST_F(SurfaceTest, surface_set_003, TestSize.Level1) 3134ed2deddSopenharmony_ci{ 3144ed2deddSopenharmony_ci IBufferConsumerListener* consumerListener = new BufferConsumerTest(); 3154ed2deddSopenharmony_ci if (consumerListener == nullptr) { 3164ed2deddSopenharmony_ci return; 3174ed2deddSopenharmony_ci } 3184ed2deddSopenharmony_ci Surface* surface = Surface::CreateSurface(); 3194ed2deddSopenharmony_ci if (surface == nullptr) { 3204ed2deddSopenharmony_ci delete consumerListener; 3214ed2deddSopenharmony_ci consumerListener = nullptr; 3224ed2deddSopenharmony_ci return; 3234ed2deddSopenharmony_ci } 3244ed2deddSopenharmony_ci surface->RegisterConsumerListener(*consumerListener); 3254ed2deddSopenharmony_ci 3264ed2deddSopenharmony_ci EXPECT_EQ(1, surface->GetQueueSize()); 3274ed2deddSopenharmony_ci EXPECT_EQ(0, surface->GetUsage()); // default usage is BUFFER_CONSUMER_USAGE_SORTWARE(0) 3284ed2deddSopenharmony_ci EXPECT_EQ(0, surface->GetSize()); 3294ed2deddSopenharmony_ci EXPECT_EQ(0, surface->GetWidth()); 3304ed2deddSopenharmony_ci EXPECT_EQ(0, surface->GetHeight()); 3314ed2deddSopenharmony_ci EXPECT_EQ(101, surface->GetFormat()); // default format is IMAGE_PIXEL_FORMAT_RGB565(101) 3324ed2deddSopenharmony_ci EXPECT_EQ(4, surface->GetStrideAlignment()); // default format stride alignment is 4 3334ed2deddSopenharmony_ci 3344ed2deddSopenharmony_ci surface->SetWidthAndHeight(99, 90); 3354ed2deddSopenharmony_ci SurfaceBuffer* bufferFirst = surface->RequestBuffer(); 3364ed2deddSopenharmony_ci EXPECT_EQ(208, surface->GetStride()); 3374ed2deddSopenharmony_ci surface->CancelBuffer(bufferFirst); 3384ed2deddSopenharmony_ci 3394ed2deddSopenharmony_ci // set stride alignment 3 failed, return default.SetStrideAlignment has expired, delete again 3404ed2deddSopenharmony_ci surface->SetStrideAlignment(3); 3414ed2deddSopenharmony_ci EXPECT_EQ(4, surface->GetStrideAlignment()); 3424ed2deddSopenharmony_ci 3434ed2deddSopenharmony_ci // set stride alignment 33 failed, return default.SetStrideAlignment has expired, delete again 3444ed2deddSopenharmony_ci surface->SetStrideAlignment(33); 3454ed2deddSopenharmony_ci EXPECT_EQ(4, surface->GetStrideAlignment()); 3464ed2deddSopenharmony_ci 3474ed2deddSopenharmony_ci // set stride alignment 32 succeed, return default.SetStrideAlignment has expired, delete again 3484ed2deddSopenharmony_ci surface->SetStrideAlignment(32); 3494ed2deddSopenharmony_ci EXPECT_EQ(32, surface->GetStrideAlignment()); 3504ed2deddSopenharmony_ci 3514ed2deddSopenharmony_ci surface->UnregisterConsumerListener(); 3524ed2deddSopenharmony_ci delete surface; 3534ed2deddSopenharmony_ci delete consumerListener; 3544ed2deddSopenharmony_ci} 3554ed2deddSopenharmony_ci 3564ed2deddSopenharmony_ci/* 3574ed2deddSopenharmony_ci * Feature: Surface 3584ed2deddSopenharmony_ci * Function: Surface set size 3594ed2deddSopenharmony_ci * SubFunction: NA 3604ed2deddSopenharmony_ci * FunctionPoints: buffer consuctor and set/get size. 3614ed2deddSopenharmony_ci * EnvConditions: NA 3624ed2deddSopenharmony_ci * CaseDescription: Surface constuctor and set/set size. 3634ed2deddSopenharmony_ci */ 3644ed2deddSopenharmony_ciHWTEST_F(SurfaceTest, surface_set_004, TestSize.Level1) 3654ed2deddSopenharmony_ci{ 3664ed2deddSopenharmony_ci IBufferConsumerListener* consumerListener = new BufferConsumerTest(); 3674ed2deddSopenharmony_ci if (consumerListener == nullptr) { 3684ed2deddSopenharmony_ci return; 3694ed2deddSopenharmony_ci } 3704ed2deddSopenharmony_ci Surface* surface = Surface::CreateSurface(); 3714ed2deddSopenharmony_ci if (surface == nullptr) { 3724ed2deddSopenharmony_ci delete consumerListener; 3734ed2deddSopenharmony_ci consumerListener = nullptr; 3744ed2deddSopenharmony_ci return; 3754ed2deddSopenharmony_ci } 3764ed2deddSopenharmony_ci surface->RegisterConsumerListener(*consumerListener); 3774ed2deddSopenharmony_ci 3784ed2deddSopenharmony_ci EXPECT_EQ(1, surface->GetQueueSize()); 3794ed2deddSopenharmony_ci EXPECT_EQ(0, surface->GetUsage()); // default usage is BUFFER_CONSUMER_USAGE_SORTWARE(0) 3804ed2deddSopenharmony_ci EXPECT_EQ(0, surface->GetSize()); 3814ed2deddSopenharmony_ci EXPECT_EQ(0, surface->GetWidth()); 3824ed2deddSopenharmony_ci EXPECT_EQ(0, surface->GetHeight()); 3834ed2deddSopenharmony_ci EXPECT_EQ(101, surface->GetFormat()); // default format is IMAGE_PIXEL_FORMAT_RGB565(101) 3844ed2deddSopenharmony_ci EXPECT_EQ(4, surface->GetStrideAlignment()); // default format stride alignment is 4 3854ed2deddSopenharmony_ci 3864ed2deddSopenharmony_ci // set size 0 failed, return default. 3874ed2deddSopenharmony_ci surface->SetSize(0); 3884ed2deddSopenharmony_ci EXPECT_EQ(0, surface->GetSize()); 3894ed2deddSopenharmony_ci 3904ed2deddSopenharmony_ci // set size 58982400 failed, return default. 3914ed2deddSopenharmony_ci surface->SetSize(58982400); 3924ed2deddSopenharmony_ci EXPECT_EQ(0, surface->GetSize()); 3934ed2deddSopenharmony_ci 3944ed2deddSopenharmony_ci // set size 1024 succeed, return default. 3954ed2deddSopenharmony_ci surface->SetSize(1024); 3964ed2deddSopenharmony_ci EXPECT_EQ(1024, surface->GetSize()); 3974ed2deddSopenharmony_ci 3984ed2deddSopenharmony_ci surface->UnregisterConsumerListener(); 3994ed2deddSopenharmony_ci delete surface; 4004ed2deddSopenharmony_ci delete consumerListener; 4014ed2deddSopenharmony_ci} 4024ed2deddSopenharmony_ci 4034ed2deddSopenharmony_ci/* 4044ed2deddSopenharmony_ci * Feature: Surface 4054ed2deddSopenharmony_ci * Function: Surface set usage 4064ed2deddSopenharmony_ci * SubFunction: NA 4074ed2deddSopenharmony_ci * FunctionPoints: buffer consuctor and set/get usage. 4084ed2deddSopenharmony_ci * EnvConditions: NA 4094ed2deddSopenharmony_ci * CaseDescription: Surface constuctor and set/set usage. 4104ed2deddSopenharmony_ci */ 4114ed2deddSopenharmony_ciHWTEST_F(SurfaceTest, surface_set_005, TestSize.Level1) 4124ed2deddSopenharmony_ci{ 4134ed2deddSopenharmony_ci IBufferConsumerListener* consumerListener = new BufferConsumerTest(); 4144ed2deddSopenharmony_ci if (consumerListener == nullptr) { 4154ed2deddSopenharmony_ci return; 4164ed2deddSopenharmony_ci } 4174ed2deddSopenharmony_ci Surface* surface = Surface::CreateSurface(); 4184ed2deddSopenharmony_ci if (surface == nullptr) { 4194ed2deddSopenharmony_ci delete consumerListener; 4204ed2deddSopenharmony_ci consumerListener = nullptr; 4214ed2deddSopenharmony_ci return; 4224ed2deddSopenharmony_ci } 4234ed2deddSopenharmony_ci surface->RegisterConsumerListener(*consumerListener); 4244ed2deddSopenharmony_ci 4254ed2deddSopenharmony_ci EXPECT_EQ(1, surface->GetQueueSize()); 4264ed2deddSopenharmony_ci EXPECT_EQ(0, surface->GetUsage()); // default usage is BUFFER_CONSUMER_USAGE_SORTWARE(0) 4274ed2deddSopenharmony_ci EXPECT_EQ(0, surface->GetSize()); 4284ed2deddSopenharmony_ci EXPECT_EQ(0, surface->GetWidth()); 4294ed2deddSopenharmony_ci EXPECT_EQ(0, surface->GetHeight()); 4304ed2deddSopenharmony_ci EXPECT_EQ(0, surface->GetHeight()); 4314ed2deddSopenharmony_ci EXPECT_EQ(101, surface->GetFormat()); // default format is IMAGE_PIXEL_FORMAT_RGB565(101) 4324ed2deddSopenharmony_ci EXPECT_EQ(4, surface->GetStrideAlignment()); // default format stride alignment is 4 4334ed2deddSopenharmony_ci 4344ed2deddSopenharmony_ci // set size BUFFER_CONSUMER_USAGE_MAX(4) failed, return default. 4354ed2deddSopenharmony_ci surface->SetUsage(4); 4364ed2deddSopenharmony_ci EXPECT_EQ(0, surface->GetUsage()); 4374ed2deddSopenharmony_ci 4384ed2deddSopenharmony_ci // set size 3 succeed, return default. 4394ed2deddSopenharmony_ci surface->SetUsage(3); 4404ed2deddSopenharmony_ci EXPECT_EQ(3, surface->GetUsage()); 4414ed2deddSopenharmony_ci 4424ed2deddSopenharmony_ci surface->UnregisterConsumerListener(); 4434ed2deddSopenharmony_ci delete surface; 4444ed2deddSopenharmony_ci delete consumerListener; 4454ed2deddSopenharmony_ci} 4464ed2deddSopenharmony_ci 4474ed2deddSopenharmony_ci/* 4484ed2deddSopenharmony_ci * Feature: Surface 4494ed2deddSopenharmony_ci * Function: Surface set queue size 4504ed2deddSopenharmony_ci * SubFunction: NA 4514ed2deddSopenharmony_ci * FunctionPoints: buffer consuctor and set/get queue size. 4524ed2deddSopenharmony_ci * EnvConditions: NA 4534ed2deddSopenharmony_ci * CaseDescription: Surface constuctor and set/set attr. 4544ed2deddSopenharmony_ci */ 4554ed2deddSopenharmony_ciHWTEST_F(SurfaceTest, surface_set_006, TestSize.Level1) 4564ed2deddSopenharmony_ci{ 4574ed2deddSopenharmony_ci IBufferConsumerListener* consumerListener = new BufferConsumerTest(); 4584ed2deddSopenharmony_ci if (consumerListener == nullptr) { 4594ed2deddSopenharmony_ci return; 4604ed2deddSopenharmony_ci } 4614ed2deddSopenharmony_ci Surface* surface = Surface::CreateSurface(); 4624ed2deddSopenharmony_ci if (surface == nullptr) { 4634ed2deddSopenharmony_ci delete consumerListener; 4644ed2deddSopenharmony_ci consumerListener = nullptr; 4654ed2deddSopenharmony_ci return; 4664ed2deddSopenharmony_ci } 4674ed2deddSopenharmony_ci surface->RegisterConsumerListener(*consumerListener); 4684ed2deddSopenharmony_ci 4694ed2deddSopenharmony_ci EXPECT_EQ(1, surface->GetQueueSize()); 4704ed2deddSopenharmony_ci EXPECT_EQ(0, surface->GetUsage()); // default usage is BUFFER_CONSUMER_USAGE_SORTWARE(0) 4714ed2deddSopenharmony_ci EXPECT_EQ(0, surface->GetSize()); 4724ed2deddSopenharmony_ci EXPECT_EQ(0, surface->GetWidth()); 4734ed2deddSopenharmony_ci EXPECT_EQ(0, surface->GetHeight()); 4744ed2deddSopenharmony_ci EXPECT_EQ(0, surface->GetHeight()); 4754ed2deddSopenharmony_ci EXPECT_EQ(101, surface->GetFormat()); // default format is IMAGE_PIXEL_FORMAT_RGB565(101) 4764ed2deddSopenharmony_ci EXPECT_EQ(4, surface->GetStrideAlignment()); // default format stride alignment is 4 4774ed2deddSopenharmony_ci 4784ed2deddSopenharmony_ci // set queue size failed, return default. 4794ed2deddSopenharmony_ci surface->SetQueueSize(0); 4804ed2deddSopenharmony_ci EXPECT_EQ(1, surface->GetQueueSize()); 4814ed2deddSopenharmony_ci 4824ed2deddSopenharmony_ci // set queue size failed more than SURFACE_MAX_QUEUE_SIZE(10), return default. 4834ed2deddSopenharmony_ci surface->SetQueueSize(11); 4844ed2deddSopenharmony_ci EXPECT_EQ(1, surface->GetQueueSize()); 4854ed2deddSopenharmony_ci 4864ed2deddSopenharmony_ci // set queue size SURFACE_MAX_QUEUE_SIZE(10), return 10. 4874ed2deddSopenharmony_ci surface->SetQueueSize(10); 4884ed2deddSopenharmony_ci EXPECT_EQ(10, surface->GetQueueSize()); 4894ed2deddSopenharmony_ci 4904ed2deddSopenharmony_ci // set queue size 5 succeed, return 5. 4914ed2deddSopenharmony_ci surface->SetQueueSize(5); 4924ed2deddSopenharmony_ci EXPECT_EQ(5, surface->GetQueueSize()); 4934ed2deddSopenharmony_ci 4944ed2deddSopenharmony_ci surface->UnregisterConsumerListener(); 4954ed2deddSopenharmony_ci delete surface; 4964ed2deddSopenharmony_ci delete consumerListener; 4974ed2deddSopenharmony_ci} 4984ed2deddSopenharmony_ci 4994ed2deddSopenharmony_ci/* 5004ed2deddSopenharmony_ci * Feature: Surface 5014ed2deddSopenharmony_ci * Function: Surface set user data 5024ed2deddSopenharmony_ci * SubFunction: NA 5034ed2deddSopenharmony_ci * FunctionPoints: buffer consuctor and set/get user data. 5044ed2deddSopenharmony_ci * EnvConditions: NA 5054ed2deddSopenharmony_ci * CaseDescription: Surface constuctor and set/set user data. 5064ed2deddSopenharmony_ci */ 5074ed2deddSopenharmony_ciHWTEST_F(SurfaceTest, surface_set_007, TestSize.Level1) 5084ed2deddSopenharmony_ci{ 5094ed2deddSopenharmony_ci IBufferConsumerListener* consumerListener = new BufferConsumerTest(); 5104ed2deddSopenharmony_ci if (consumerListener == nullptr) { 5114ed2deddSopenharmony_ci return; 5124ed2deddSopenharmony_ci } 5134ed2deddSopenharmony_ci Surface* surface = Surface::CreateSurface(); 5144ed2deddSopenharmony_ci if (surface == nullptr) { 5154ed2deddSopenharmony_ci delete consumerListener; 5164ed2deddSopenharmony_ci consumerListener = nullptr; 5174ed2deddSopenharmony_ci return; 5184ed2deddSopenharmony_ci } 5194ed2deddSopenharmony_ci surface->RegisterConsumerListener(*consumerListener); 5204ed2deddSopenharmony_ci 5214ed2deddSopenharmony_ci EXPECT_EQ(1, surface->GetQueueSize()); 5224ed2deddSopenharmony_ci EXPECT_EQ(0, surface->GetUsage()); // default usage is BUFFER_CONSUMER_USAGE_SORTWARE(0) 5234ed2deddSopenharmony_ci EXPECT_EQ(0, surface->GetSize()); 5244ed2deddSopenharmony_ci EXPECT_EQ(0, surface->GetWidth()); 5254ed2deddSopenharmony_ci EXPECT_EQ(0, surface->GetHeight()); 5264ed2deddSopenharmony_ci EXPECT_EQ(101, surface->GetFormat()); // default format is IMAGE_PIXEL_FORMAT_RGB565(101) 5274ed2deddSopenharmony_ci EXPECT_EQ(4, surface->GetStrideAlignment()); // default format stride alignment is 4 5284ed2deddSopenharmony_ci 5294ed2deddSopenharmony_ci surface->SetUserData("testkey", "testvalue"); 5304ed2deddSopenharmony_ci EXPECT_EQ("testvalue", surface->GetUserData("testkey")); 5314ed2deddSopenharmony_ci 5324ed2deddSopenharmony_ci surface->UnregisterConsumerListener(); 5334ed2deddSopenharmony_ci delete surface; 5344ed2deddSopenharmony_ci delete consumerListener; 5354ed2deddSopenharmony_ci} 5364ed2deddSopenharmony_ci 5374ed2deddSopenharmony_ci/* 5384ed2deddSopenharmony_ci * Feature: Surface 5394ed2deddSopenharmony_ci * Function: Surface single process constuctor. 5404ed2deddSopenharmony_ci * SubFunction: NA 5414ed2deddSopenharmony_ci * FunctionPoints: buffer constuctor and set/get attr. 5424ed2deddSopenharmony_ci * EnvConditions: NA 5434ed2deddSopenharmony_ci * CaseDescription: Surface constuctor. 5444ed2deddSopenharmony_ci */ 5454ed2deddSopenharmony_ciHWTEST_F(SurfaceTest, surface_001, TestSize.Level1) 5464ed2deddSopenharmony_ci{ 5474ed2deddSopenharmony_ci IBufferConsumerListener* consumerListener = new BufferConsumerTest(); 5484ed2deddSopenharmony_ci if (consumerListener == nullptr) { 5494ed2deddSopenharmony_ci return; 5504ed2deddSopenharmony_ci } 5514ed2deddSopenharmony_ci Surface* surface = Surface::CreateSurface(); 5524ed2deddSopenharmony_ci if (surface == nullptr) { 5534ed2deddSopenharmony_ci delete consumerListener; 5544ed2deddSopenharmony_ci consumerListener = nullptr; 5554ed2deddSopenharmony_ci return; 5564ed2deddSopenharmony_ci } 5574ed2deddSopenharmony_ci surface->RegisterConsumerListener(*consumerListener); 5584ed2deddSopenharmony_ci 5594ed2deddSopenharmony_ci EXPECT_EQ(1, surface->GetQueueSize()); 5604ed2deddSopenharmony_ci EXPECT_EQ(0, surface->GetUsage()); // default usage is BUFFER_CONSUMER_USAGE_SORTWARE(0) 5614ed2deddSopenharmony_ci EXPECT_EQ(0, surface->GetSize()); 5624ed2deddSopenharmony_ci EXPECT_EQ(0, surface->GetWidth()); 5634ed2deddSopenharmony_ci EXPECT_EQ(0, surface->GetHeight()); 5644ed2deddSopenharmony_ci EXPECT_EQ(0, surface->GetHeight()); 5654ed2deddSopenharmony_ci EXPECT_EQ(101, surface->GetFormat()); // default format is IMAGE_PIXEL_FORMAT_RGB565(101) 5664ed2deddSopenharmony_ci EXPECT_EQ(4, surface->GetStrideAlignment()); // default format stride alignment is 4 5674ed2deddSopenharmony_ci 5684ed2deddSopenharmony_ci surface->SetSize(1024); // Set alloc 1024B SHM 5694ed2deddSopenharmony_ci EXPECT_EQ(1024, surface->GetSize()); 5704ed2deddSopenharmony_ci 5714ed2deddSopenharmony_ci surface->SetWidthAndHeight(101, 202); // set width(101), height(202) 5724ed2deddSopenharmony_ci surface->SetFormat(102); // set format IMAGE_PIXEL_FORMAT_ARGB1555(102) 5734ed2deddSopenharmony_ci surface->SetStrideAlignment(8); // set format stride alignment is 8 5744ed2deddSopenharmony_ci 5754ed2deddSopenharmony_ci EXPECT_EQ(101, surface->GetWidth()); 5764ed2deddSopenharmony_ci EXPECT_EQ(202, surface->GetHeight()); 5774ed2deddSopenharmony_ci EXPECT_EQ(102, surface->GetFormat()); 5784ed2deddSopenharmony_ci EXPECT_EQ(8, surface->GetStrideAlignment()); 5794ed2deddSopenharmony_ci SurfaceBuffer* bufferFirst = surface->RequestBuffer(); 5804ed2deddSopenharmony_ci EXPECT_EQ(208, surface->GetStride()); // calculate by width, height, format. 5814ed2deddSopenharmony_ci EXPECT_EQ(42016, surface->GetSize()); // calculate by width, height, format. 5824ed2deddSopenharmony_ci surface->CancelBuffer(bufferFirst); 5834ed2deddSopenharmony_ci 5844ed2deddSopenharmony_ci surface->UnregisterConsumerListener(); 5854ed2deddSopenharmony_ci delete surface; 5864ed2deddSopenharmony_ci delete consumerListener; 5874ed2deddSopenharmony_ci} 5884ed2deddSopenharmony_ci 5894ed2deddSopenharmony_ci/* 5904ed2deddSopenharmony_ci * Feature: Surface 5914ed2deddSopenharmony_ci * Function: Surface single process request and cancel Buffer 5924ed2deddSopenharmony_ci * SubFunction: NA 5934ed2deddSopenharmony_ci * FunctionPoints: buffer request and cancel. 5944ed2deddSopenharmony_ci * EnvConditions: NA 5954ed2deddSopenharmony_ci * CaseDescription: Surface single process request and cancel Buffer. 5964ed2deddSopenharmony_ci */ 5974ed2deddSopenharmony_ciHWTEST_F(SurfaceTest, surface_002, TestSize.Level1) 5984ed2deddSopenharmony_ci{ 5994ed2deddSopenharmony_ci Surface* surface = Surface::CreateSurface(); 6004ed2deddSopenharmony_ci if (surface == nullptr) { 6014ed2deddSopenharmony_ci return; 6024ed2deddSopenharmony_ci } 6034ed2deddSopenharmony_ci 6044ed2deddSopenharmony_ci SurfaceBuffer* bufferFirst = surface->RequestBuffer(); // no size, return null pointer 6054ed2deddSopenharmony_ci EXPECT_FALSE(bufferFirst); 6064ed2deddSopenharmony_ci 6074ed2deddSopenharmony_ci surface->SetSize(1024); // Set alloc 1024B SHM 6084ed2deddSopenharmony_ci bufferFirst = surface->RequestBuffer(); 6094ed2deddSopenharmony_ci EXPECT_TRUE(bufferFirst); 6104ed2deddSopenharmony_ci 6114ed2deddSopenharmony_ci SurfaceBuffer* bufferSecond = surface->RequestBuffer(); // default queue size = 1, second return null pointer 6124ed2deddSopenharmony_ci 6134ed2deddSopenharmony_ci EXPECT_FALSE(bufferSecond); 6144ed2deddSopenharmony_ci surface->CancelBuffer(bufferFirst); 6154ed2deddSopenharmony_ci EXPECT_TRUE(surface->RequestBuffer()); 6164ed2deddSopenharmony_ci 6174ed2deddSopenharmony_ci delete surface; 6184ed2deddSopenharmony_ci} 6194ed2deddSopenharmony_ci 6204ed2deddSopenharmony_ci/* 6214ed2deddSopenharmony_ci * Feature: Surface 6224ed2deddSopenharmony_ci * Function: Surface single process request and flush Buffer 6234ed2deddSopenharmony_ci * SubFunction: NA 6244ed2deddSopenharmony_ci * FunctionPoints: buffer request and flush. 6254ed2deddSopenharmony_ci * EnvConditions: NA 6264ed2deddSopenharmony_ci * CaseDescription: Surface single process request and flush Buffer. 6274ed2deddSopenharmony_ci */ 6284ed2deddSopenharmony_ciHWTEST_F(SurfaceTest, surface_003, TestSize.Level1) 6294ed2deddSopenharmony_ci{ 6304ed2deddSopenharmony_ci Surface* surface = Surface::CreateSurface(); 6314ed2deddSopenharmony_ci ASSERT_TRUE(surface); 6324ed2deddSopenharmony_ci 6334ed2deddSopenharmony_ci SurfaceBuffer* requestBuffer = surface->RequestBuffer(); // no size, return null pointer 6344ed2deddSopenharmony_ci EXPECT_FALSE(requestBuffer); 6354ed2deddSopenharmony_ci 6364ed2deddSopenharmony_ci surface->SetWidthAndHeight(454, 454); // 454 : surface width and height 6374ed2deddSopenharmony_ci requestBuffer = surface->RequestBuffer(); 6384ed2deddSopenharmony_ci EXPECT_TRUE(requestBuffer); 6394ed2deddSopenharmony_ci 6404ed2deddSopenharmony_ci SurfaceBufferImpl* buffer = new SurfaceBufferImpl(); 6414ed2deddSopenharmony_ci EXPECT_TRUE(surface->FlushBuffer(buffer) != 0); // Not allocated by surface, could not flush. 6424ed2deddSopenharmony_ci EXPECT_EQ(0, surface->FlushBuffer(requestBuffer)); // allocated by surface, could flush. 6434ed2deddSopenharmony_ci 6444ed2deddSopenharmony_ci delete buffer; 6454ed2deddSopenharmony_ci delete surface; 6464ed2deddSopenharmony_ci} 6474ed2deddSopenharmony_ci 6484ed2deddSopenharmony_ci/* 6494ed2deddSopenharmony_ci * Feature: Surface 6504ed2deddSopenharmony_ci * Function: Surface single process acquire Buffer 6514ed2deddSopenharmony_ci * SubFunction: NA 6524ed2deddSopenharmony_ci * FunctionPoints: buffer acquire buffer 6534ed2deddSopenharmony_ci * EnvConditions: NA 6544ed2deddSopenharmony_ci * CaseDescription: Surface single process acquire Buffer. 6554ed2deddSopenharmony_ci */ 6564ed2deddSopenharmony_ciHWTEST_F(SurfaceTest, surface_004, TestSize.Level1) 6574ed2deddSopenharmony_ci{ 6584ed2deddSopenharmony_ci Surface* surface = Surface::CreateSurface(); 6594ed2deddSopenharmony_ci ASSERT_TRUE(surface); 6604ed2deddSopenharmony_ci 6614ed2deddSopenharmony_ci SurfaceBuffer* acquireBuffer = surface->AcquireBuffer(); // no size, return null pointer 6624ed2deddSopenharmony_ci EXPECT_FALSE(acquireBuffer); 6634ed2deddSopenharmony_ci 6644ed2deddSopenharmony_ci surface->SetSize(1024); // Set alloc 1024B SHM 6654ed2deddSopenharmony_ci SurfaceBuffer* requestBuffer = surface->RequestBuffer(); 6664ed2deddSopenharmony_ci if (requestBuffer == nullptr) { 6674ed2deddSopenharmony_ci delete surface; 6684ed2deddSopenharmony_ci return; 6694ed2deddSopenharmony_ci } 6704ed2deddSopenharmony_ci requestBuffer->SetInt32(10, 11); // set key-value <10, 11> 6714ed2deddSopenharmony_ci 6724ed2deddSopenharmony_ci EXPECT_EQ(0, surface->FlushBuffer(requestBuffer)); // allocated by surface, could flush. 6734ed2deddSopenharmony_ci 6744ed2deddSopenharmony_ci acquireBuffer = surface->AcquireBuffer(); 6754ed2deddSopenharmony_ci ASSERT_TRUE(acquireBuffer); 6764ed2deddSopenharmony_ci int32_t value; 6774ed2deddSopenharmony_ci acquireBuffer->GetInt32(10, value); 6784ed2deddSopenharmony_ci EXPECT_EQ(11, value); 6794ed2deddSopenharmony_ci 6804ed2deddSopenharmony_ci delete surface; 6814ed2deddSopenharmony_ci} 6824ed2deddSopenharmony_ci 6834ed2deddSopenharmony_ci/* 6844ed2deddSopenharmony_ci * Feature: Surface 6854ed2deddSopenharmony_ci * Function: Surface single process release Buffer 6864ed2deddSopenharmony_ci * SubFunction: NA 6874ed2deddSopenharmony_ci * FunctionPoints: buffer release buffer 6884ed2deddSopenharmony_ci * EnvConditions: NA 6894ed2deddSopenharmony_ci * CaseDescription: Surface single process release Buffer. 6904ed2deddSopenharmony_ci */ 6914ed2deddSopenharmony_ciHWTEST_F(SurfaceTest, surface_005, TestSize.Level1) 6924ed2deddSopenharmony_ci{ 6934ed2deddSopenharmony_ci Surface* surface = Surface::CreateSurface(); 6944ed2deddSopenharmony_ci ASSERT_TRUE(surface); 6954ed2deddSopenharmony_ci 6964ed2deddSopenharmony_ci SurfaceBufferImpl* buffer = new SurfaceBufferImpl(); 6974ed2deddSopenharmony_ci EXPECT_FALSE(surface->ReleaseBuffer(buffer)); // Not allocated by surface, could not release 6984ed2deddSopenharmony_ci 6994ed2deddSopenharmony_ci SurfaceBuffer* acquireBuffer = surface->AcquireBuffer(); // no size, return null pointer 7004ed2deddSopenharmony_ci EXPECT_FALSE(acquireBuffer); 7014ed2deddSopenharmony_ci 7024ed2deddSopenharmony_ci surface->SetSize(1024); // Set alloc 1024B SHM 7034ed2deddSopenharmony_ci SurfaceBuffer* requestBuffer = surface->RequestBuffer(); 7044ed2deddSopenharmony_ci if (requestBuffer == nullptr) { 7054ed2deddSopenharmony_ci delete buffer; 7064ed2deddSopenharmony_ci delete surface; 7074ed2deddSopenharmony_ci return; 7084ed2deddSopenharmony_ci } 7094ed2deddSopenharmony_ci requestBuffer->SetInt32(10, 11); // set key-value <10, 11> 7104ed2deddSopenharmony_ci 7114ed2deddSopenharmony_ci EXPECT_EQ(0, surface->FlushBuffer(requestBuffer)); // allocated by surface, could flush. 7124ed2deddSopenharmony_ci 7134ed2deddSopenharmony_ci acquireBuffer = surface->AcquireBuffer(); 7144ed2deddSopenharmony_ci if (acquireBuffer == nullptr) { 7154ed2deddSopenharmony_ci delete buffer; 7164ed2deddSopenharmony_ci delete surface; 7174ed2deddSopenharmony_ci return; 7184ed2deddSopenharmony_ci } 7194ed2deddSopenharmony_ci int32_t value; 7204ed2deddSopenharmony_ci acquireBuffer->GetInt32(10, value); 7214ed2deddSopenharmony_ci EXPECT_EQ(11, value); 7224ed2deddSopenharmony_ci 7234ed2deddSopenharmony_ci EXPECT_TRUE(surface->ReleaseBuffer(acquireBuffer)); 7244ed2deddSopenharmony_ci EXPECT_TRUE(acquireBuffer->GetInt32(10, value) != 0); 7254ed2deddSopenharmony_ci 7264ed2deddSopenharmony_ci delete buffer; 7274ed2deddSopenharmony_ci delete surface; 7284ed2deddSopenharmony_ci} 7294ed2deddSopenharmony_ci 7304ed2deddSopenharmony_ci/* 7314ed2deddSopenharmony_ci * Feature: Surface 7324ed2deddSopenharmony_ci * Function: Surface single process release Buffer 7334ed2deddSopenharmony_ci * SubFunction: NA 7344ed2deddSopenharmony_ci * FunctionPoints: buffer release buffer 7354ed2deddSopenharmony_ci * EnvConditions: NA 7364ed2deddSopenharmony_ci * CaseDescription: Surface single process release Buffer. 7374ed2deddSopenharmony_ci */ 7384ed2deddSopenharmony_ciHWTEST_F(SurfaceTest, surface_006, TestSize.Level1) 7394ed2deddSopenharmony_ci{ 7404ed2deddSopenharmony_ci IBufferConsumerListener* consumerListener = new BufferConsumerTest(); 7414ed2deddSopenharmony_ci if (consumerListener == nullptr) { 7424ed2deddSopenharmony_ci return; 7434ed2deddSopenharmony_ci } 7444ed2deddSopenharmony_ci Surface* surface = Surface::CreateSurface(); 7454ed2deddSopenharmony_ci if (surface == nullptr) { 7464ed2deddSopenharmony_ci delete consumerListener; 7474ed2deddSopenharmony_ci consumerListener = nullptr; 7484ed2deddSopenharmony_ci return; 7494ed2deddSopenharmony_ci } 7504ed2deddSopenharmony_ci surface->RegisterConsumerListener(*consumerListener); 7514ed2deddSopenharmony_ci 7524ed2deddSopenharmony_ci SurfaceBufferImpl* buffer = new SurfaceBufferImpl(); 7534ed2deddSopenharmony_ci EXPECT_FALSE(surface->ReleaseBuffer(buffer)); // Not allocated by surface, could not release 7544ed2deddSopenharmony_ci 7554ed2deddSopenharmony_ci SurfaceBuffer* acquireBuffer = surface->AcquireBuffer(); // no size, return null pointer 7564ed2deddSopenharmony_ci EXPECT_FALSE(acquireBuffer); 7574ed2deddSopenharmony_ci 7584ed2deddSopenharmony_ci surface->SetSize(1024); // Set alloc 1024B SHM 7594ed2deddSopenharmony_ci SurfaceBuffer* requestBuffer = surface->RequestBuffer(); 7604ed2deddSopenharmony_ci if (requestBuffer == nullptr) { 7614ed2deddSopenharmony_ci delete buffer; 7624ed2deddSopenharmony_ci buffer = nullptr; 7634ed2deddSopenharmony_ci delete surface; 7644ed2deddSopenharmony_ci surface = nullptr; 7654ed2deddSopenharmony_ci delete consumerListener; 7664ed2deddSopenharmony_ci consumerListener = nullptr; 7674ed2deddSopenharmony_ci return; 7684ed2deddSopenharmony_ci } 7694ed2deddSopenharmony_ci 7704ed2deddSopenharmony_ci requestBuffer->SetInt32(10, 11); // set key-value <10, 11> 7714ed2deddSopenharmony_ci 7724ed2deddSopenharmony_ci EXPECT_EQ(0, surface->FlushBuffer(requestBuffer)); // allocated by surface, could flush. 7734ed2deddSopenharmony_ci 7744ed2deddSopenharmony_ci acquireBuffer = surface->AcquireBuffer(); 7754ed2deddSopenharmony_ci if (acquireBuffer == nullptr) { 7764ed2deddSopenharmony_ci delete buffer; 7774ed2deddSopenharmony_ci buffer = nullptr; 7784ed2deddSopenharmony_ci delete surface; 7794ed2deddSopenharmony_ci surface = nullptr; 7804ed2deddSopenharmony_ci delete consumerListener; 7814ed2deddSopenharmony_ci consumerListener = nullptr; 7824ed2deddSopenharmony_ci return; 7834ed2deddSopenharmony_ci } 7844ed2deddSopenharmony_ci 7854ed2deddSopenharmony_ci int32_t value; 7864ed2deddSopenharmony_ci acquireBuffer->GetInt32(10, value); 7874ed2deddSopenharmony_ci EXPECT_EQ(11, value); 7884ed2deddSopenharmony_ci 7894ed2deddSopenharmony_ci EXPECT_TRUE(surface->ReleaseBuffer(acquireBuffer)); 7904ed2deddSopenharmony_ci EXPECT_TRUE(acquireBuffer->GetInt32(10, value) != 0); 7914ed2deddSopenharmony_ci 7924ed2deddSopenharmony_ci delete buffer; 7934ed2deddSopenharmony_ci delete surface; 7944ed2deddSopenharmony_ci delete consumerListener; 7954ed2deddSopenharmony_ci} 7964ed2deddSopenharmony_ci} // namespace OHOS 797