• 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 #include "display_buffer_mt.h"
17 
18 #include <unistd.h>
19 #include <vector>
20 #include <thread>
21 #include <cinttypes>
22 #include <securec.h>
23 #include <cstring>
24 
25 #include "gtest/gtest.h"
26 #include "v1_0/display_composer_type.h"
27 #include "hdf_base.h"
28 #include "hdf_log.h"
29 
30 namespace OHOS {
31 namespace HDI {
32 namespace Display {
33 namespace TEST {
34 using namespace OHOS::HDI::Display::Composer::V1_0;
35 using namespace OHOS::HDI::Display::Buffer::V1_0;
36 using namespace OHOS;
37 using namespace testing::ext;
38 
39 static IDisplayBuffer* g_dispbuf = nullptr;
40 static const int SIZE_TIMES = 3;
41 static const int HANDLE_NUM_1 = 2;
42 static const int HANDLE_NUM_2 = 32;
43 static const int LOOP_COUNT = 10;
44 static const int INFO_WIDTH = 1024;
45 static const int INFO_HEIGHT = 1024;
46 
47 #define HDF_LOG_TAG display_buffer_module_test
48 
WriteBuffer(const BufferHandle & handle)49 static void WriteBuffer(const BufferHandle& handle)
50 {
51     const char VERIFY_MSG[] = "12345678, (*~*)";
52     // write msg to display buffer fully.
53     int strSize = strlen(VERIFY_MSG) + 1;
54     int i = 0;
55     char* ptr = reinterpret_cast<char *>(handle.virAddr);
56     if (ptr == nullptr) {
57         HDF_LOGE("cast ptr failed");
58         return;
59     }
60 
61     for (; i < handle.size - strSize;) {
62         errno_t ret = memcpy_s(&ptr[i], sizeof(VERIFY_MSG), VERIFY_MSG, sizeof(VERIFY_MSG));
63         if (ret != EOK) {
64             HDF_LOGE("memcpy_s error : %d", ret);
65             return;
66         }
67         i += strSize;
68         ptr[i - 1] = 0;
69     }
70     for (i = i - 1; i < handle.size; i++) {
71         ptr[i] = 'z';
72     }
73 
74     // read all contents from buffer
75     HDF_LOGD("%{public}s(%{public}d), buffer size:%{public}d, len:%{public}d",
76              __func__, __LINE__, handle.size, strSize);
77     // verify buffer contents from strings written.
78     for (i = 0; i < handle.size - SIZE_TIMES * strSize; i = i + strSize) {
79         if (strncmp(VERIFY_MSG, &ptr[i], sizeof(VERIFY_MSG)) != 0) {
80             HDF_LOGD("%{public}s(%{public}d), buffer[%{public}d]:%{public}s",
81                      __func__, __LINE__, i, &ptr[i]);
82         }
83     }
84 
85     for (i = handle.size - HANDLE_NUM_1; i < (handle.size - HANDLE_NUM_2); i++) {
86         HDF_LOGD("%{public}s(%{public}d), i:%{public}d, str:%{public}s",
87                  __func__, __LINE__, i, &ptr[i]);
88     }
89 }
90 
DumpBufferHandle(const BufferHandle & handle)91 static void DumpBufferHandle(const BufferHandle& handle)
92 {
93     // dump buffer handle infomation
94     HDF_LOGD("-------------------------------------");
95     HDF_LOGD("fd                =%{public}d",   handle.fd);
96     HDF_LOGD("width             =%{public}d",   handle.width);
97     HDF_LOGD("stride            =%{public}d",   handle.stride);
98     HDF_LOGD("height            =%{public}d",   handle.height);
99     HDF_LOGD("size              =0x%{public}x", handle.size);
100     HDF_LOGD("format            =%{public}d",   handle.format);
101     HDF_LOGD("usage             =0x%{public}" PRIx64 "", handle.usage);
102     HDF_LOGD("reserveFds        =%{public}d",   handle.reserveFds);
103     HDF_LOGD("reserveInts       =%{public}d",   handle.reserveInts);
104     HDF_LOGD("-------------------------------------");
105 }
106 
RunTest(const AllocInfo & info)107 int32_t DisplayBufferMt::RunTest(const AllocInfo& info)
108 {
109     BufferHandle* bHandle = nullptr;
110     // AllocMem
111     int32_t ec = g_dispbuf->AllocMem(info, bHandle);
112     if (ec != HDF_SUCCESS || bHandle == nullptr) {
113         HDF_LOGE("%{public}s, line=%{public}d, AllocMem failed. ec=0x%{public}x",
114                  __func__, __LINE__, ec);
115         return HDF_FAILURE;
116     }
117 
118     // Mmap
119     void* buffer = g_dispbuf->Mmap(*bHandle);
120     if (buffer == nullptr) {
121         HDF_LOGE("Mmap failed.");
122         g_dispbuf->FreeMem(*bHandle);
123         return HDF_FAILURE;
124     }
125     HDF_LOGD("Mmap successful");
126 
127     DumpBufferHandle(*bHandle);
128     WriteBuffer(*bHandle);
129 
130     // InvalidateCache
131     ec = g_dispbuf->InvalidateCache(*bHandle);
132     if (ec != HDF_SUCCESS) {
133         HDF_LOGE("InvalidateCache failed.");
134         g_dispbuf->Unmap(*bHandle);
135         g_dispbuf->FreeMem(*bHandle);
136         return HDF_FAILURE;
137     }
138     // InvalidateCache
139     ec = g_dispbuf->FlushCache(*bHandle);
140     if (ec != HDF_SUCCESS) {
141         HDF_LOGE("flushCache failed.");
142         g_dispbuf->Unmap(*bHandle);
143         g_dispbuf->FreeMem(*bHandle);
144         return HDF_FAILURE;
145     }
146     HDF_LOGD("flush Cache success.");
147     // free buffer
148     g_dispbuf->Unmap(*bHandle);
149     g_dispbuf->FreeMem(*bHandle);
150     return HDF_SUCCESS;
151 }
152 
SetUpTestCase()153 void DisplayBufferMt::SetUpTestCase()
154 {
155     g_dispbuf = IDisplayBuffer::Get();
156     ASSERT_TRUE(g_dispbuf != nullptr);
157 }
158 
159 HWTEST_F(DisplayBufferMt, SUB_DriverSystem_DisplayBuffer_0010, TestSize.Level1)
160 {
161     AllocInfo info;
162     info.width  = INFO_WIDTH;
163     info.height = INFO_HEIGHT;
164     info.usage = OHOS::HDI::Display::Composer::V1_0::HBM_USE_MEM_DMA |
165             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_READ |
166             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_WRITE;
167     info.format = PIXEL_FMT_RGBA_8888;
168 
169     for (int i = 0; i < LOOP_COUNT; i++) {
170         int32_t ret = RunTest(info);
171         EXPECT_EQ(HDF_SUCCESS, ret);
172     }
173 }
174 
175 #ifdef DISPLAY_COMMUNITY
176 HWTEST_F(DisplayBufferMt, SUB_DriverSystem_DisplayBuffer_0020, TestSize.Level1)
177 {
178     AllocInfo info;
179     info.width  = INFO_WIDTH;
180     info.height = INFO_HEIGHT;
181     info.usage = OHOS::HDI::Display::Composer::V1_0::HBM_USE_MEM_DMA |
182             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_READ |
183             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_WRITE;
184     info.format = PIXEL_FMT_CLUT8;
185 
186     for (int i = 0; i < LOOP_COUNT; i++) {
187         int32_t ret = RunTest(info);
188         EXPECT_EQ(DISPLAY_FAILURE, ret);
189     }
190 }
191 
192 HWTEST_F(DisplayBufferMt, SUB_DriverSystem_DisplayBuffer_0030, TestSize.Level1)
193 {
194     AllocInfo info;
195     info.width  = INFO_WIDTH;
196     info.height = INFO_HEIGHT;
197     info.usage = OHOS::HDI::Display::Composer::V1_0::HBM_USE_MEM_DMA |
198             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_READ |
199             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_WRITE;
200     info.format = PIXEL_FMT_CLUT1;
201 
202     for (int i = 0; i < LOOP_COUNT; i++) {
203         int32_t ret = RunTest(info);
204         EXPECT_EQ(DISPLAY_FAILURE, ret);
205     }
206 }
207 
208 HWTEST_F(DisplayBufferMt, SUB_DriverSystem_DisplayBuffer_0040, TestSize.Level1)
209 {
210     AllocInfo info;
211     info.width  = INFO_WIDTH;
212     info.height = INFO_HEIGHT;
213     info.usage = OHOS::HDI::Display::Composer::V1_0::HBM_USE_MEM_DMA |
214             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_READ |
215             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_WRITE;
216     info.format = PIXEL_FMT_CLUT4;
217 
218     for (int i = 0; i < LOOP_COUNT; i++) {
219         int32_t ret = RunTest(info);
220         EXPECT_EQ(DISPLAY_FAILURE, ret);
221     }
222 }
223 
224 HWTEST_F(DisplayBufferMt, SUB_DriverSystem_DisplayBuffer_0050, TestSize.Level1)
225 {
226     AllocInfo info;
227     info.width  = INFO_WIDTH;
228     info.height = INFO_HEIGHT;
229     info.usage = OHOS::HDI::Display::Composer::V1_0::HBM_USE_MEM_DMA |
230             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_READ |
231             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_WRITE;
232     info.format = PIXEL_FMT_RGB_565;
233 
234     for (int i = 0; i < LOOP_COUNT; i++) {
235         int32_t ret = RunTest(info);
236         EXPECT_EQ(DISPLAY_FAILURE, ret);
237     }
238 }
239 
240 HWTEST_F(DisplayBufferMt, SUB_DriverSystem_DisplayBuffer_0060, TestSize.Level1)
241 {
242     AllocInfo info;
243     info.width  = INFO_WIDTH;
244     info.height = INFO_HEIGHT;
245     info.usage = OHOS::HDI::Display::Composer::V1_0::HBM_USE_MEM_DMA |
246             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_READ |
247             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_WRITE;
248     info.format = PIXEL_FMT_RGBA_5658;
249 
250     for (int i = 0; i < LOOP_COUNT; i++) {
251         int32_t ret = RunTest(info);
252         EXPECT_EQ(DISPLAY_FAILURE, ret);
253     }
254 }
255 
256 HWTEST_F(DisplayBufferMt, SUB_DriverSystem_DisplayBuffer_0070, TestSize.Level1)
257 {
258     AllocInfo info;
259     info.width  = INFO_WIDTH;
260     info.height = INFO_HEIGHT;
261     info.usage = OHOS::HDI::Display::Composer::V1_0::HBM_USE_MEM_DMA |
262             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_READ |
263             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_WRITE;
264     info.format = PIXEL_FMT_RGB_444;
265 
266     for (int i = 0; i < LOOP_COUNT; i++) {
267         int32_t ret = RunTest(info);
268         EXPECT_EQ(DISPLAY_FAILURE, ret);
269     }
270 }
271 
272 HWTEST_F(DisplayBufferMt, SUB_DriverSystem_DisplayBuffer_0080, TestSize.Level1)
273 {
274     AllocInfo info;
275     info.width  = INFO_WIDTH;
276     info.height = INFO_HEIGHT;
277     info.usage = OHOS::HDI::Display::Composer::V1_0::HBM_USE_MEM_DMA |
278             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_READ |
279             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_WRITE;
280     info.format = PIXEL_FMT_RGBX_5551;
281 
282     for (int i = 0; i < LOOP_COUNT; i++) {
283         int32_t ret = RunTest(info);
284         EXPECT_EQ(DISPLAY_FAILURE, ret);
285     }
286 }
287 
288 HWTEST_F(DisplayBufferMt, SUB_DriverSystem_DisplayBuffer_0090, TestSize.Level1)
289 {
290     AllocInfo info;
291     info.width  = INFO_WIDTH;
292     info.height = INFO_HEIGHT;
293     info.usage = OHOS::HDI::Display::Composer::V1_0::HBM_USE_MEM_DMA |
294             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_READ |
295             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_WRITE;
296     info.format = PIXEL_FMT_RGBA_5551;
297 
298     for (int i = 0; i < LOOP_COUNT; i++) {
299         int32_t ret = RunTest(info);
300         EXPECT_EQ(DISPLAY_FAILURE, ret);
301     }
302 }
303 
304 HWTEST_F(DisplayBufferMt, SUB_DriverSystem_DisplayBuffer_0100, TestSize.Level1)
305 {
306     AllocInfo info;
307     info.width  = INFO_WIDTH;
308     info.height = INFO_HEIGHT;
309     info.usage = OHOS::HDI::Display::Composer::V1_0::HBM_USE_MEM_DMA |
310             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_READ |
311             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_WRITE;
312     info.format = PIXEL_FMT_RGB_555;
313 
314     for (int i = 0; i < LOOP_COUNT; i++) {
315         int32_t ret = RunTest(info);
316         EXPECT_EQ(DISPLAY_FAILURE, ret);
317     }
318 }
319 
320 HWTEST_F(DisplayBufferMt, SUB_DriverSystem_DisplayBuffer_0110, TestSize.Level1)
321 {
322     AllocInfo info;
323     info.width  = INFO_WIDTH;
324     info.height = INFO_HEIGHT;
325     info.usage = OHOS::HDI::Display::Composer::V1_0::HBM_USE_MEM_DMA |
326             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_READ |
327             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_WRITE;
328     info.format = PIXEL_FMT_YUV_422_I;
329 
330     for (int i = 0; i < LOOP_COUNT; i++) {
331         int32_t ret = RunTest(info);
332         EXPECT_EQ(DISPLAY_FAILURE, ret);
333     }
334 }
335 
336 HWTEST_F(DisplayBufferMt, SUB_DriverSystem_DisplayBuffer_0120, TestSize.Level1)
337 {
338     AllocInfo info;
339     info.width  = INFO_WIDTH;
340     info.height = INFO_HEIGHT;
341     info.usage = OHOS::HDI::Display::Composer::V1_0::HBM_USE_MEM_DMA |
342             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_READ |
343             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_WRITE;
344     info.format = PIXEL_FMT_YCBCR_422_SP;
345 
346     for (int i = 0; i < LOOP_COUNT; i++) {
347         int32_t ret = RunTest(info);
348         EXPECT_EQ(HDF_SUCCESS, ret);
349     }
350 }
351 
352 HWTEST_F(DisplayBufferMt, SUB_DriverSystem_DisplayBuffer_0130, TestSize.Level1)
353 {
354     AllocInfo info;
355     info.width  = INFO_WIDTH;
356     info.height = INFO_HEIGHT;
357     info.usage = OHOS::HDI::Display::Composer::V1_0::HBM_USE_MEM_DMA |
358             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_READ |
359             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_WRITE;
360     info.format = PIXEL_FMT_YCRCB_422_SP;
361 
362     for (int i = 0; i < LOOP_COUNT; i++) {
363         int32_t ret = RunTest(info);
364         EXPECT_EQ(HDF_SUCCESS, ret);
365     }
366 }
367 
368 HWTEST_F(DisplayBufferMt, SUB_DriverSystem_DisplayBuffer_0140, TestSize.Level1)
369 {
370     AllocInfo info;
371     info.width  = INFO_WIDTH;
372     info.height = INFO_HEIGHT;
373     info.usage = OHOS::HDI::Display::Composer::V1_0::HBM_USE_MEM_DMA |
374             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_READ |
375             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_WRITE;
376     info.format = PIXEL_FMT_YCBCR_422_P;
377 
378     for (int i = 0; i < LOOP_COUNT; i++) {
379         int32_t ret = RunTest(info);
380         EXPECT_EQ(HDF_SUCCESS, ret);
381     }
382 }
383 
384 HWTEST_F(DisplayBufferMt, SUB_DriverSystem_DisplayBuffer_0150, TestSize.Level1)
385 {
386     AllocInfo info;
387     info.width  = INFO_WIDTH;
388     info.height = INFO_HEIGHT;
389     info.usage = OHOS::HDI::Display::Composer::V1_0::HBM_USE_MEM_DMA |
390             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_READ |
391             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_WRITE;
392     info.format = PIXEL_FMT_YCRCB_422_P;
393 
394     for (int i = 0; i < LOOP_COUNT; i++) {
395         int32_t ret = RunTest(info);
396         EXPECT_EQ(HDF_SUCCESS, ret);
397     }
398 }
399 
400 HWTEST_F(DisplayBufferMt, SUB_DriverSystem_DisplayBuffer_0160, TestSize.Level1)
401 {
402     AllocInfo info;
403     info.width  = INFO_WIDTH;
404     info.height = INFO_HEIGHT;
405     info.usage = OHOS::HDI::Display::Composer::V1_0::HBM_USE_MEM_DMA |
406             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_READ |
407             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_WRITE;
408     info.format = PIXEL_FMT_YUYV_422_PKG;
409 
410     for (int i = 0; i < LOOP_COUNT; i++) {
411         int32_t ret = RunTest(info);
412         EXPECT_EQ(DISPLAY_FAILURE, ret);
413     }
414 }
415 
416 HWTEST_F(DisplayBufferMt, SUB_DriverSystem_DisplayBuffer_0170, TestSize.Level1)
417 {
418     AllocInfo info;
419     info.width  = INFO_WIDTH;
420     info.height = INFO_HEIGHT;
421     info.usage = OHOS::HDI::Display::Composer::V1_0::HBM_USE_MEM_DMA |
422             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_READ |
423             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_WRITE;
424     info.format = PIXEL_FMT_UYVY_422_PKG;
425 
426     for (int i = 0; i < LOOP_COUNT; i++) {
427         int32_t ret = RunTest(info);
428         EXPECT_EQ(DISPLAY_FAILURE, ret);
429     }
430 }
431 
432 HWTEST_F(DisplayBufferMt, SUB_DriverSystem_DisplayBuffer_0180, TestSize.Level1)
433 {
434     AllocInfo info;
435     info.width  = INFO_WIDTH;
436     info.height = INFO_HEIGHT;
437     info.usage = OHOS::HDI::Display::Composer::V1_0::HBM_USE_MEM_DMA |
438             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_READ |
439             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_WRITE;
440     info.format = PIXEL_FMT_YVYU_422_PKG;
441 
442     for (int i = 0; i < LOOP_COUNT; i++) {
443         int32_t ret = RunTest(info);
444         EXPECT_EQ(DISPLAY_FAILURE, ret);
445     }
446 }
447 
448 HWTEST_F(DisplayBufferMt, SUB_DriverSystem_DisplayBuffer_0190, TestSize.Level1)
449 {
450     AllocInfo info;
451     info.width  = INFO_WIDTH;
452     info.height = INFO_HEIGHT;
453     info.usage = OHOS::HDI::Display::Composer::V1_0::HBM_USE_MEM_DMA |
454             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_READ |
455             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_WRITE;
456     info.format = PIXEL_FMT_VYUY_422_PKG;
457 
458     for (int i = 0; i < LOOP_COUNT; i++) {
459         int32_t ret = RunTest(info);
460         EXPECT_EQ(DISPLAY_FAILURE, ret);
461     }
462 }
463 
464 HWTEST_F(DisplayBufferMt, SUB_DriverSystem_DisplayBuffer_0200, TestSize.Level1)
465 {
466     AllocInfo info;
467     info.width  = INFO_WIDTH;
468     info.height = INFO_HEIGHT;
469     info.usage = OHOS::HDI::Display::Composer::V1_0::HBM_USE_MEM_DMA |
470             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_READ |
471             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_WRITE;
472     info.format = PIXEL_FMT_VENDER_MASK;
473 
474     for (int i = 0; i < LOOP_COUNT; i++) {
475         int32_t ret = RunTest(info);
476         EXPECT_EQ(DISPLAY_FAILURE, ret);
477     }
478 }
479 
480 HWTEST_F(DisplayBufferMt, SUB_DriverSystem_DisplayBuffer_0210, TestSize.Level1)
481 {
482     AllocInfo info;
483     info.width  = INFO_WIDTH;
484     info.height = INFO_HEIGHT;
485     info.usage = OHOS::HDI::Display::Composer::V1_0::HBM_USE_MEM_DMA |
486             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_READ |
487             OHOS::HDI::Display::Composer::V1_0::HBM_USE_CPU_WRITE;
488     info.format = PIXEL_FMT_BUTT;
489 
490     for (int i = 0; i < LOOP_COUNT; i++) {
491         int32_t ret = RunTest(info);
492         EXPECT_EQ(DISPLAY_FAILURE, ret);
493     }
494 }
495 
496 #endif // DISPLAY_COMMUNITY
497 } // OHOS
498 } // HDI
499 } // DISPLAY
500 } // TEST