• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021 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_gralloc_test.h"
17 #include <securec.h>
18 #include "gtest/gtest.h"
19 #include "display_gralloc.h"
20 #include "display_test.h"
21 
22 namespace {
23 #define ALIGN_UP(x, a) ((((x) + ((a)-1)) / (a)) * (a))
24 #define HEIGHT_ALIGN 2U
25 
26 const AllocTestPrms GRALLOC_TEST_SETS[] = {
27     // num0
28     {
29         .allocInfo = {
30             .width = 1920,
31             .height = 1080,
32             .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
33             .format = PIXEL_FMT_RGBX_8888
34         },
35         .expectStride = 1920 * 4,
36         .expectSize = 1920 * 1080 * 4
37     },
38     // num1
39     {
40         .allocInfo = {
41             .width = 1080,
42             .height = 1920,
43             .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
44             .format = PIXEL_FMT_RGBX_8888
45         },
46         .expectStride = 1088 * 4,
47         .expectSize = 1920 * 1088 * 4
48     },
49     // num2
50     {
51         .allocInfo = {
52             .width = 1280,
53             .height = 720,
54             .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
55             .format = PIXEL_FMT_RGBX_8888
56         },
57         .expectStride = 1280 * 4,
58         .expectSize = 1280 * 720 * 4
59     },
60     // num3
61     {
62         .allocInfo = {
63             .width = 1080,
64             .height = 1920,
65             .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
66             .format = PIXEL_FMT_RGBA_8888
67         },
68         .expectStride = 1088 * 4,
69         .expectSize = 1920 * 1088 * 4
70     },
71     // num4
72     {
73         .allocInfo = {
74             .width = 1080,
75             .height = 1920,
76             .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
77             .format = PIXEL_FMT_RGB_888
78         },
79         .expectStride = 1088 * 3,
80         .expectSize =  1920 * 1088 * 3
81     },
82     // num5
83     {
84         .allocInfo = {
85             .width = 1080,
86             .height = 1920,
87             .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
88             .format = PIXEL_FMT_BGRA_8888
89         },
90         .expectStride = 1088 * 4,
91         .expectSize = 1920 * 1088 * 4
92     },
93     // num6
94     {
95         .allocInfo = {
96             .width = 1080,
97             .height = 1920,
98             .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
99             .format = PIXEL_FMT_BGRX_8888
100         },
101         .expectStride = 1088 * 4,
102         .expectSize = 1920 * 1088 * 4
103     },
104     // num7
105     {
106         .allocInfo = {
107             .width = 1080,
108             .height = 1920,
109             .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
110             .format = PIXEL_FMT_RGBA_4444
111         },
112         .expectStride = 1088 * 2,
113         .expectSize = 1920 * 1088 * 2
114     },
115     // num8
116     {
117         .allocInfo =
118         {
119             .width = 1080,
120             .height = 1920,
121             .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
122             .format = PIXEL_FMT_RGBX_4444
123         },
124         .expectStride = 1088 * 2,
125         .expectSize = 1920 * 1088 * 2
126     },
127     // num9
128     {
129         .allocInfo = {
130             .width = 1080,
131             .height = 1920,
132             .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
133             .format = PIXEL_FMT_BGRA_4444
134         },
135         .expectStride = 1088 * 2,
136         .expectSize = 1920 * 1088 * 2
137     },
138     // num10
139     {
140         .allocInfo = {
141             .width = 1080,
142             .height = 1920,
143             .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
144             .format = PIXEL_FMT_BGRX_4444
145         },
146         .expectStride = 1088 * 2,
147         .expectSize = 1920 * 1088 * 2
148     },
149     // num11
150     {
151         .allocInfo = {
152             .width = 1080,
153             .height = 1920,
154             .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
155             .format = PIXEL_FMT_BGR_565
156         },
157         .expectStride = 1088 * 2,
158         .expectSize = 1920 * 1088 * 2
159     },
160     // num12
161     {
162         .allocInfo = {
163             .width = 1080,
164             .height = 1920,
165             .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
166             .format = PIXEL_FMT_BGRA_5551
167         },
168         .expectStride = 1088 * 2,
169         .expectSize = 1920 * 1088 * 2
170     },
171     // num13
172     {
173         .allocInfo = {
174             .width = 1080,
175             .height = 1920,
176             .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
177             .format = PIXEL_FMT_BGRX_5551
178         },
179         .expectStride = 1088 * 2,
180         .expectSize = 1920 * 1088 * 2
181     },
182     // num14
183     {
184         .allocInfo = {
185             .width = 1080,
186             .height = 1920,
187             .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
188             .format = PIXEL_FMT_YCBCR_420_SP
189         },
190         .expectStride = 1088,
191         .expectSize = 1920 * 1088 * 3 / 2
192     },
193     // num15
194     {
195         .allocInfo = {
196             .width = 1080,
197             .height = 1920,
198             .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
199             .format = PIXEL_FMT_YCRCB_420_SP
200         },
201         .expectStride = 1088,
202         .expectSize = 1920 * 1088 * 3 / 2
203     },
204     // num16
205     {
206         .allocInfo = {
207             .width = 1080,
208             .height = 1920,
209             .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
210             .format = PIXEL_FMT_YCBCR_420_P
211         },
212         .expectStride = 1088,
213         .expectSize = 1920 * 1088 * 3 / 2
214     },
215     // num17
216     {
217         .allocInfo = {
218             .width = 1080,
219             .height = 1920,
220             .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
221             .format = PIXEL_FMT_YCRCB_420_P
222         },
223         .expectStride = 1088,
224         .expectSize = 1920 * 1088 * 3 / 2
225     },
226     // num18
227     {
228         .allocInfo = {
229             .width = 1080,
230             .height = 1920,
231             .usage = HBM_USE_MEM_DMA,
232             .format = PIXEL_FMT_RGBX_8888
233         },
234         .expectStride = 1088 * 4,
235         .expectSize = 1920 * 1088 * 4
236     },
237     // num19
238     {
239         .allocInfo = {
240             .width = 1080,
241             .height = 1920,
242             .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ,
243             .format = PIXEL_FMT_RGBX_8888
244         },
245         .expectStride = 1088 * 4,
246         .expectSize = 1920 * 1088 * 4
247     },
248     // num20
249     {
250         .allocInfo = {
251             .width = 1080,
252             .height = 1920,
253             .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_WRITE,
254             .format = PIXEL_FMT_RGBX_8888
255         },
256         .expectStride = 1088 * 4,
257         .expectSize = 1920 * 1088 * 4
258     },
259 };
260 
CheckBufferHandle(AllocTestPrms & info,BufferHandle & buffer)261 static bool CheckBufferHandle(AllocTestPrms &info, BufferHandle &buffer)
262 {
263     if (buffer.stride != (ALIGN_UP(info.expectStride, HEIGHT_ALIGN))) {
264         DISPLAY_TEST_LOGE("stride check failed stride %d, expect stride %d ", buffer.stride, info.expectStride);
265         DISPLAY_TEST_LOGE("stride check failed format %d width %d, height %d ", info.allocInfo.format,
266             info.allocInfo.width, info.allocInfo.height);
267         return false;
268     }
269 
270     if (buffer.size != info.expectSize) {
271         DISPLAY_TEST_LOGE("size check failed size %d, expect size %d ", buffer.size, info.expectSize);
272         DISPLAY_TEST_LOGE("stride check failed format %d width %d, height %d ", info.allocInfo.format,
273             info.allocInfo.width, info.allocInfo.height);
274         return false;
275     }
276     return true;
277 }
278 
SetUp()279 void GrallocAllocTest::SetUp()
280 {
281     if (GrallocInitialize(&mGrallocFuncs) != DISPLAY_SUCCESS) {
282         DISPLAY_TEST_LOGE("DisplayInit failure\n");
283         ASSERT_TRUE(0);
284     }
285 }
286 
TearDown()287 void GrallocAllocTest::TearDown()
288 {
289     if (GrallocUninitialize(mGrallocFuncs) != DISPLAY_SUCCESS) {
290         DISPLAY_TEST_LOGE("DisplayUninit failure\n");
291         ASSERT_TRUE(0);
292     }
293 }
294 
AllocMemTest(AllocTestPrms & info)295 int32_t GrallocAllocTest::AllocMemTest(AllocTestPrms &info)
296 {
297     int ret;
298     BufferHandle *buffer = nullptr;
299     const int testCount = 21; // test 40 times
300     for (int i = 0; i < testCount; i++) {
301         ret = mGrallocFuncs->AllocMem(&info.allocInfo, &buffer);
302         if (ret != DISPLAY_SUCCESS) {
303             return ret;
304         }
305         void *vAddr = mGrallocFuncs->Mmap(buffer);
306         if (vAddr == nullptr) {
307             return DISPLAY_FAILURE;
308         }
309 
310         if (info.allocInfo.usage & (HBM_USE_CPU_READ | HBM_USE_CPU_WRITE)) {
311             ret = mGrallocFuncs->InvalidateCache(buffer);
312             if (ret != DISPLAY_SUCCESS) {
313                 return ret;
314             }
315         }
316         if (memset_s(vAddr, buffer->size, 0, buffer->size) != EOK) {
317             return DISPLAY_NOMEM;
318         }
319         DISPLAY_TEST_CHK_RETURN(!CheckBufferHandle(info, *buffer), DISPLAY_FAILURE,
320             DISPLAY_TEST_LOGE("buffer check failed"));
321         if (info.allocInfo.usage & (HBM_USE_CPU_READ | HBM_USE_CPU_WRITE)) {
322             ret = mGrallocFuncs->FlushCache(buffer);
323             if (ret != DISPLAY_SUCCESS) {
324                 return ret;
325             }
326         }
327         mGrallocFuncs->Unmap((buffer));
328         mGrallocFuncs->FreeMem(buffer);
329     }
330 
331     return DISPLAY_SUCCESS;
332 }
333 
TEST(GrallocAllocTest,NULLPTR)334 TEST(GrallocAllocTest, NULLPTR)
335 {
336     int ret = GrallocInitialize(nullptr);
337     ASSERT_TRUE(ret != DISPLAY_SUCCESS);
338 
339     GrallocFuncs *grallocFuncs;
340     AllocInfo allocInfo;
341     BufferHandle *hdl;
342     ret = GrallocInitialize(&grallocFuncs);
343     ASSERT_TRUE(ret == DISPLAY_SUCCESS);
344     ret = grallocFuncs->AllocMem(nullptr, nullptr);
345     ASSERT_TRUE(ret != DISPLAY_SUCCESS);
346     ret = grallocFuncs->AllocMem(&allocInfo, nullptr);
347     ASSERT_TRUE(ret != DISPLAY_SUCCESS);
348     ret = grallocFuncs->AllocMem(nullptr, &hdl);
349     ASSERT_TRUE(ret != DISPLAY_SUCCESS);
350     ret = grallocFuncs->InvalidateCache(nullptr);
351     ASSERT_TRUE(ret != DISPLAY_SUCCESS);
352     ret = grallocFuncs->FlushCache(nullptr);
353     ASSERT_TRUE(ret != DISPLAY_SUCCESS);
354     grallocFuncs->FreeMem(nullptr);
355     void *vAddr = grallocFuncs->Mmap(nullptr);
356     ASSERT_TRUE(vAddr == nullptr);
357     ret = grallocFuncs->Unmap(nullptr);
358     ASSERT_TRUE(ret != DISPLAY_SUCCESS);
359     ret = GrallocUninitialize(nullptr);
360     ASSERT_TRUE(ret != DISPLAY_SUCCESS);
361 
362     ret = GrallocUninitialize(grallocFuncs);
363     ASSERT_TRUE(ret == DISPLAY_SUCCESS);
364 }
365 
TEST_P(GrallocAllocTest,GrallocAlloc)366 TEST_P(GrallocAllocTest, GrallocAlloc)
367 {
368     AllocTestPrms params = GetParam();
369     int ret = AllocMemTest(params);
370     ASSERT_TRUE(ret == DISPLAY_SUCCESS);
371 }
372 
373 INSTANTIATE_TEST_SUITE_P(AllocTest, GrallocAllocTest, ::testing::ValuesIn(GRALLOC_TEST_SETS));
374 }
375