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 #include "display_buffer_ut.h"
16 #include <securec.h>
17
18 #include "gtest/gtest.h"
19 #include "v1_0/display_buffer_type.h"
20 #include "v1_0/display_composer_type.h"
21 #include "v1_0/include/idisplay_buffer.h"
22 #include "hdf_base.h"
23 #include "hdf_log.h"
24
25 namespace OHOS {
26 namespace HDI {
27 namespace Display {
28 namespace TEST {
29 using namespace OHOS::HDI::Display::Composer::V1_0;
30 using namespace OHOS::HDI::Display::Buffer::V1_0;
31
32 #ifndef DISPLAY_TEST_CHK_RETURN
33 #define DISPLAY_TEST_CHK_RETURN(val, ret, ...) \
34 do { \
35 if (val) { \
36 __VA_ARGS__; \
37 return (ret); \
38 } \
39 } while (0)
40 #endif
41
42 const uint32_t ALLOC_SIZE_1080 = 1080; // alloc size 1080
43 const uint32_t ALLOC_SIZE_1920 = 1920; // alloc size 1920
44 const uint32_t ALLOC_SIZE_1280 = 1280; // alloc size 1280
45 const uint32_t ALLOC_SIZE_720 = 720; // alloc size 720
46
47 const AllocInfo DISPLAY_BUFFER_TEST_SETS[] = {
48 // num0
49 // SUB_DriverSystem_DisplayHdi_0050
50 {
51 .width = ALLOC_SIZE_1920,
52 .height = ALLOC_SIZE_1080,
53 .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
54 .format = PIXEL_FMT_RGBX_8888
55 },
56 // num1
57 // SUB_DriverSystem_DisplayHdi_0060
58 {
59 .width = ALLOC_SIZE_1080,
60 .height = ALLOC_SIZE_1920,
61 .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
62 .format = PIXEL_FMT_RGBX_8888
63 },
64 // num2
65 // SUB_DriverSystem_DisplayHdi_0070
66 {
67 .width = ALLOC_SIZE_1280,
68 .height = ALLOC_SIZE_720,
69 .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
70 .format = PIXEL_FMT_RGBX_8888
71 },
72 // num3
73 // SUB_DriverSystem_DisplayHdi_0080
74 {
75 .width = ALLOC_SIZE_1080,
76 .height = ALLOC_SIZE_1920,
77 .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
78 .format = PIXEL_FMT_RGBA_8888
79 },
80 // num4
81 // SUB_DriverSystem_DisplayHdi_0090
82 {
83 .width = ALLOC_SIZE_1080,
84 .height = ALLOC_SIZE_1920,
85 .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
86 .format = PIXEL_FMT_BGRA_8888
87 },
88
89 // num5
90 // SUB_DriverSystem_DisplayHdi_0100
91 {
92 .width = ALLOC_SIZE_1080,
93 .height = ALLOC_SIZE_1920,
94 .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
95 .format = PIXEL_FMT_YCBCR_420_SP
96 },
97 // num6
98 // SUB_DriverSystem_DisplayHdi_0110
99 {
100 .width = ALLOC_SIZE_1080,
101 .height = ALLOC_SIZE_1920,
102 .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
103 .format = PIXEL_FMT_YCRCB_420_SP
104 },
105 // num7
106 // SUB_DriverSystem_DisplayHdi_0120
107 {
108 .width = ALLOC_SIZE_1080,
109 .height = ALLOC_SIZE_1920,
110 .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
111 .format = PIXEL_FMT_YCBCR_420_P
112 },
113 // num8
114 // SUB_DriverSystem_DisplayHdi_0130
115 {
116 .width = ALLOC_SIZE_1080,
117 .height = ALLOC_SIZE_1920,
118 .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
119 .format = PIXEL_FMT_YCRCB_420_P
120 },
121 // num9
122 // SUB_DriverSystem_DisplayHdi_0140
123 {
124 .width = ALLOC_SIZE_1080,
125 .height = ALLOC_SIZE_1920,
126 .usage = HBM_USE_MEM_DMA,
127 .format = PIXEL_FMT_RGBX_8888
128 },
129 // num10
130 // SUB_DriverSystem_DisplayHdi_0150
131 {
132 .width = ALLOC_SIZE_1080,
133 .height = ALLOC_SIZE_1920,
134 .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ,
135 .format = PIXEL_FMT_RGBX_8888
136 },
137 // num11
138 // SUB_DriverSystem_DisplayHdi_0160
139 {
140 .width = ALLOC_SIZE_1080,
141 .height = ALLOC_SIZE_1920,
142 .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_WRITE,
143 .format = PIXEL_FMT_RGBX_8888
144 },
145 #ifdef DISPLAY_COMMUNITY
146 // num12
147 // SUB_DriverSystem_DisplayHdi_0170
148 {
149 .width = ALLOC_SIZE_1080,
150 .height = ALLOC_SIZE_1920,
151 .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
152 .format = PIXEL_FMT_RGB_888
153 },
154 // num13
155 // SUB_DriverSystem_DisplayHdi_0180
156 {
157 .width = ALLOC_SIZE_1080,
158 .height = ALLOC_SIZE_1920,
159 .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
160 .format = PIXEL_FMT_BGRX_8888
161 },
162 // num14
163 // SUB_DriverSystem_DisplayHdi_0190
164 {
165 .width = ALLOC_SIZE_1080,
166 .height = ALLOC_SIZE_1920,
167 .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
168 .format = PIXEL_FMT_RGBA_4444
169 },
170 // num15
171 // SUB_DriverSystem_DisplayHdi_0200
172 {
173 .width = ALLOC_SIZE_1080,
174 .height = ALLOC_SIZE_1920,
175 .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
176 .format = PIXEL_FMT_RGBX_4444
177 },
178 // num16
179 // SUB_DriverSystem_DisplayHdi_0210
180 {
181 .width = ALLOC_SIZE_1080,
182 .height = ALLOC_SIZE_1920,
183 .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
184 .format = PIXEL_FMT_BGRA_4444
185 },
186 // num17
187 // SUB_DriverSystem_DisplayHdi_0220
188 {
189 .width = ALLOC_SIZE_1080,
190 .height = ALLOC_SIZE_1920,
191 .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
192 .format = PIXEL_FMT_BGRX_4444
193 },
194 // num18
195 // SUB_DriverSystem_DisplayHdi_0230
196 {
197 .width = ALLOC_SIZE_1080,
198 .height = ALLOC_SIZE_1920,
199 .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
200 .format = PIXEL_FMT_BGR_565
201 },
202 // num19
203 // SUB_DriverSystem_DisplayHdi_0240
204 {
205 .width = ALLOC_SIZE_1080,
206 .height = ALLOC_SIZE_1920,
207 .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
208 .format = PIXEL_FMT_BGRA_5551
209 },
210 // num20
211 // SUB_DriverSystem_DisplayHdi_0250
212 {
213 .width = ALLOC_SIZE_1080,
214 .height = ALLOC_SIZE_1920,
215 .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
216 .format = PIXEL_FMT_BGRX_5551
217 },
218 #elif RGBA_1010102
219 // num21
220 {
221 .width = ALLOC_SIZE_1080,
222 .height = ALLOC_SIZE_1920,
223 .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_WRITE,
224 .format = PIXEL_FMT_RGBA_1010102
225 },
226 #endif // DISPLAY_COMMUNITY
227 };
228
SetUp()229 void DisplayBufferUt::SetUp()
230 {
231 displayBuffer_ = IDisplayBuffer::Get();
232 if (displayBuffer_ == nullptr) {
233 HDF_LOGE("IDisplayBuffer get failed");
234 ASSERT_TRUE(0);
235 }
236 }
237
TearDown()238 void DisplayBufferUt::TearDown()
239 {
240 }
241
AllocMemTest(AllocInfo & info)242 int32_t DisplayBufferUt::AllocMemTest(AllocInfo& info)
243 {
244 int ret;
245 BufferHandle *buffer = nullptr;
246 const int TEST_COUNT = 40; // test 40 times
247 for (int i = 0; i < TEST_COUNT; i++) {
248 ret = displayBuffer_->AllocMem(info, buffer);
249 if (ret != DISPLAY_SUCCESS || buffer == nullptr) {
250 HDF_LOGE("AllocMem failed");
251 return ret;
252 }
253 void *vAddr = displayBuffer_->Mmap(*buffer);
254 if (vAddr == nullptr) {
255 HDF_LOGE("Mmap failed");
256 displayBuffer_->FreeMem(*buffer);
257 return DISPLAY_FAILURE;
258 }
259
260 if (info.usage & (HBM_USE_CPU_READ | HBM_USE_CPU_WRITE)) {
261 ret = displayBuffer_->InvalidateCache(*buffer);
262 if (ret != DISPLAY_SUCCESS) {
263 HDF_LOGE("InvalidateCache failed");
264 displayBuffer_->Unmap(*buffer);
265 displayBuffer_->FreeMem(*buffer);
266 return ret;
267 }
268 }
269 if (memset_s(vAddr, buffer->size, 0, buffer->size) != EOK) {
270 HDF_LOGE("Insufficient memory");
271 displayBuffer_->Unmap(*buffer);
272 displayBuffer_->FreeMem(*buffer);
273 return DISPLAY_NOMEM;
274 }
275
276 if (info.usage & (HBM_USE_CPU_READ | HBM_USE_CPU_WRITE)) {
277 ret = displayBuffer_->FlushCache(*buffer);
278 if (ret != DISPLAY_SUCCESS) {
279 HDF_LOGE("FlushCache failed");
280 displayBuffer_->Unmap(*buffer);
281 displayBuffer_->FreeMem(*buffer);
282 return ret;
283 }
284 }
285 displayBuffer_->Unmap(*buffer);
286 displayBuffer_->FreeMem(*buffer);
287 }
288 return DISPLAY_SUCCESS;
289 }
290
TEST_P(DisplayBufferUt,DisplayBufferUt)291 TEST_P(DisplayBufferUt, DisplayBufferUt)
292 {
293 AllocInfo params = GetParam();
294 int ret = AllocMemTest(params);
295 ASSERT_TRUE(ret == DISPLAY_SUCCESS);
296 }
297
298 INSTANTIATE_TEST_SUITE_P(AllocTest, DisplayBufferUt, ::testing::ValuesIn(DISPLAY_BUFFER_TEST_SETS));
299 } // OHOS
300 } // HDI
301 } // DISPLAY
302 } // TEST
303