1094332d3Sopenharmony_ci/*
2094332d3Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd.
3094332d3Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License");
4094332d3Sopenharmony_ci * you may not use this file except in compliance with the License.
5094332d3Sopenharmony_ci * You may obtain a copy of the License at
6094332d3Sopenharmony_ci *
7094332d3Sopenharmony_ci *     http://www.apache.org/licenses/LICENSE-2.0
8094332d3Sopenharmony_ci *
9094332d3Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software
10094332d3Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS,
11094332d3Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12094332d3Sopenharmony_ci * See the License for the specific language governing permissions and
13094332d3Sopenharmony_ci * limitations under the License.
14094332d3Sopenharmony_ci */
15094332d3Sopenharmony_ci#include "display_buffer_ut.h"
16094332d3Sopenharmony_ci#include <securec.h>
17094332d3Sopenharmony_ci
18094332d3Sopenharmony_ci#include "gtest/gtest.h"
19094332d3Sopenharmony_ci#include "v1_0/display_buffer_type.h"
20094332d3Sopenharmony_ci#include "v1_2/display_composer_type.h"
21094332d3Sopenharmony_ci#include "hdf_base.h"
22094332d3Sopenharmony_ci#include "hdf_log.h"
23094332d3Sopenharmony_ci
24094332d3Sopenharmony_cinamespace OHOS {
25094332d3Sopenharmony_cinamespace HDI {
26094332d3Sopenharmony_cinamespace Display {
27094332d3Sopenharmony_cinamespace TEST {
28094332d3Sopenharmony_ciusing namespace testing::ext;
29094332d3Sopenharmony_ciusing namespace OHOS::HDI::Display::Composer::V1_2;
30094332d3Sopenharmony_ciusing namespace OHOS::HDI::Display::Buffer::V1_1;
31094332d3Sopenharmony_ciusing OHOS::HDI::Display::Buffer::V1_0::AllocInfo;
32094332d3Sopenharmony_ciusing OHOS::HDI::Display::Composer::V1_2::HBM_USE_MEM_DMA;
33094332d3Sopenharmony_ciusing OHOS::HDI::Display::Composer::V1_2::HBM_USE_CPU_READ;
34094332d3Sopenharmony_ciusing OHOS::HDI::Display::Composer::V1_2::HBM_USE_CPU_WRITE;
35094332d3Sopenharmony_ciusing OHOS::HDI::Display::Composer::V1_1::PIXEL_FMT_RGBX_8888;
36094332d3Sopenharmony_ciusing OHOS::HDI::Display::Composer::V1_1::PIXEL_FMT_RGBA_8888;
37094332d3Sopenharmony_ciusing OHOS::HDI::Display::Composer::V1_1::PIXEL_FMT_BGRA_8888;
38094332d3Sopenharmony_ciusing OHOS::HDI::Display::Composer::V1_1::PIXEL_FMT_YCBCR_420_SP;
39094332d3Sopenharmony_ciusing OHOS::HDI::Display::Composer::V1_1::PIXEL_FMT_YCRCB_420_SP;
40094332d3Sopenharmony_ciusing OHOS::HDI::Display::Composer::V1_1::PIXEL_FMT_YCBCR_420_P;
41094332d3Sopenharmony_ciusing OHOS::HDI::Display::Composer::V1_1::PIXEL_FMT_YCRCB_420_P;
42094332d3Sopenharmony_ciusing OHOS::HDI::Display::Composer::V1_1::PIXEL_FMT_RGB_888;
43094332d3Sopenharmony_ciusing OHOS::HDI::Display::Composer::V1_1::PIXEL_FMT_BGRX_8888;
44094332d3Sopenharmony_ciusing OHOS::HDI::Display::Composer::V1_1::PIXEL_FMT_RGBA_4444;
45094332d3Sopenharmony_ciusing OHOS::HDI::Display::Composer::V1_1::PIXEL_FMT_RGBX_4444;
46094332d3Sopenharmony_ciusing OHOS::HDI::Display::Composer::V1_1::PIXEL_FMT_BGRA_4444;
47094332d3Sopenharmony_ciusing OHOS::HDI::Display::Composer::V1_1::PIXEL_FMT_BGRX_4444;
48094332d3Sopenharmony_ciusing OHOS::HDI::Display::Composer::V1_1::PIXEL_FMT_BGR_565;
49094332d3Sopenharmony_ciusing OHOS::HDI::Display::Composer::V1_1::PIXEL_FMT_BGRA_5551;
50094332d3Sopenharmony_ciusing OHOS::HDI::Display::Composer::V1_1::PIXEL_FMT_BGRX_5551;
51094332d3Sopenharmony_ciusing OHOS::HDI::Display::Composer::V1_1::PIXEL_FMT_RGBA_1010102;
52094332d3Sopenharmony_ci#ifndef DISPLAY_TEST_CHK_RETURN
53094332d3Sopenharmony_ci#define DISPLAY_TEST_CHK_RETURN(val, ret, ...) \
54094332d3Sopenharmony_ci    do {                                       \
55094332d3Sopenharmony_ci        if (val) {                             \
56094332d3Sopenharmony_ci            __VA_ARGS__;                       \
57094332d3Sopenharmony_ci            return (ret);                      \
58094332d3Sopenharmony_ci        }                                      \
59094332d3Sopenharmony_ci    } while (0)
60094332d3Sopenharmony_ci#endif
61094332d3Sopenharmony_ci
62094332d3Sopenharmony_ciconst uint32_t ALLOC_SIZE_1080 = 1080; // alloc size 1080
63094332d3Sopenharmony_ciconst uint32_t ALLOC_SIZE_1920 = 1920; // alloc size 1920
64094332d3Sopenharmony_ciconst uint32_t ALLOC_SIZE_1280 = 1280; // alloc size 1280
65094332d3Sopenharmony_ciconst uint32_t ALLOC_SIZE_720 = 720; // alloc size 720
66094332d3Sopenharmony_ci
67094332d3Sopenharmony_ciconst AllocInfo DISPLAY_BUFFER_TEST_SETS[] = {
68094332d3Sopenharmony_ci    // num0
69094332d3Sopenharmony_ci    {
70094332d3Sopenharmony_ci        .width = ALLOC_SIZE_1920,
71094332d3Sopenharmony_ci        .height = ALLOC_SIZE_1080,
72094332d3Sopenharmony_ci        .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
73094332d3Sopenharmony_ci        .format = PIXEL_FMT_RGBX_8888
74094332d3Sopenharmony_ci    },
75094332d3Sopenharmony_ci    // num1
76094332d3Sopenharmony_ci    {
77094332d3Sopenharmony_ci        .width = ALLOC_SIZE_1080,
78094332d3Sopenharmony_ci        .height = ALLOC_SIZE_1920,
79094332d3Sopenharmony_ci        .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
80094332d3Sopenharmony_ci        .format = PIXEL_FMT_RGBX_8888
81094332d3Sopenharmony_ci    },
82094332d3Sopenharmony_ci    // num2
83094332d3Sopenharmony_ci    {
84094332d3Sopenharmony_ci        .width = ALLOC_SIZE_1280,
85094332d3Sopenharmony_ci        .height = ALLOC_SIZE_720,
86094332d3Sopenharmony_ci        .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
87094332d3Sopenharmony_ci        .format = PIXEL_FMT_RGBX_8888
88094332d3Sopenharmony_ci    },
89094332d3Sopenharmony_ci    // num3
90094332d3Sopenharmony_ci    {
91094332d3Sopenharmony_ci        .width = ALLOC_SIZE_1080,
92094332d3Sopenharmony_ci        .height = ALLOC_SIZE_1920,
93094332d3Sopenharmony_ci        .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
94094332d3Sopenharmony_ci        .format = PIXEL_FMT_RGBA_8888
95094332d3Sopenharmony_ci    },
96094332d3Sopenharmony_ci    // num4
97094332d3Sopenharmony_ci    {
98094332d3Sopenharmony_ci        .width = ALLOC_SIZE_1080,
99094332d3Sopenharmony_ci        .height = ALLOC_SIZE_1920,
100094332d3Sopenharmony_ci        .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
101094332d3Sopenharmony_ci        .format = PIXEL_FMT_BGRA_8888
102094332d3Sopenharmony_ci    },
103094332d3Sopenharmony_ci    // num5
104094332d3Sopenharmony_ci    {
105094332d3Sopenharmony_ci        .width = ALLOC_SIZE_1080,
106094332d3Sopenharmony_ci        .height = ALLOC_SIZE_1920,
107094332d3Sopenharmony_ci        .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
108094332d3Sopenharmony_ci        .format = PIXEL_FMT_YCBCR_420_SP
109094332d3Sopenharmony_ci    },
110094332d3Sopenharmony_ci    // num6
111094332d3Sopenharmony_ci    {
112094332d3Sopenharmony_ci        .width = ALLOC_SIZE_1080,
113094332d3Sopenharmony_ci        .height = ALLOC_SIZE_1920,
114094332d3Sopenharmony_ci        .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
115094332d3Sopenharmony_ci        .format = PIXEL_FMT_YCRCB_420_SP
116094332d3Sopenharmony_ci    },
117094332d3Sopenharmony_ci    // num7
118094332d3Sopenharmony_ci    {
119094332d3Sopenharmony_ci        .width = ALLOC_SIZE_1080,
120094332d3Sopenharmony_ci        .height = ALLOC_SIZE_1920,
121094332d3Sopenharmony_ci        .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
122094332d3Sopenharmony_ci        .format = PIXEL_FMT_YCBCR_420_P
123094332d3Sopenharmony_ci    },
124094332d3Sopenharmony_ci    // num8
125094332d3Sopenharmony_ci    {
126094332d3Sopenharmony_ci        .width = ALLOC_SIZE_1080,
127094332d3Sopenharmony_ci        .height = ALLOC_SIZE_1920,
128094332d3Sopenharmony_ci        .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
129094332d3Sopenharmony_ci        .format = PIXEL_FMT_YCRCB_420_P
130094332d3Sopenharmony_ci    },
131094332d3Sopenharmony_ci    // num9
132094332d3Sopenharmony_ci    {
133094332d3Sopenharmony_ci        .width = ALLOC_SIZE_1080,
134094332d3Sopenharmony_ci        .height = ALLOC_SIZE_1920,
135094332d3Sopenharmony_ci        .usage = HBM_USE_MEM_DMA,
136094332d3Sopenharmony_ci        .format = PIXEL_FMT_RGBX_8888
137094332d3Sopenharmony_ci    },
138094332d3Sopenharmony_ci    // num10
139094332d3Sopenharmony_ci    {
140094332d3Sopenharmony_ci        .width = ALLOC_SIZE_1080,
141094332d3Sopenharmony_ci        .height = ALLOC_SIZE_1920,
142094332d3Sopenharmony_ci        .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ,
143094332d3Sopenharmony_ci        .format = PIXEL_FMT_RGBX_8888
144094332d3Sopenharmony_ci    },
145094332d3Sopenharmony_ci    // num11
146094332d3Sopenharmony_ci    {
147094332d3Sopenharmony_ci        .width = ALLOC_SIZE_1080,
148094332d3Sopenharmony_ci        .height = ALLOC_SIZE_1920,
149094332d3Sopenharmony_ci        .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_WRITE,
150094332d3Sopenharmony_ci        .format = PIXEL_FMT_RGBX_8888
151094332d3Sopenharmony_ci    },
152094332d3Sopenharmony_ci    //HBM_USE_CPU_HW_BOTH
153094332d3Sopenharmony_ci    // num12
154094332d3Sopenharmony_ci    {
155094332d3Sopenharmony_ci        .width = ALLOC_SIZE_1920,
156094332d3Sopenharmony_ci        .height = ALLOC_SIZE_1080,
157094332d3Sopenharmony_ci        .usage = HBM_USE_CPU_HW_BOTH | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
158094332d3Sopenharmony_ci        .format = PIXEL_FMT_RGBX_8888
159094332d3Sopenharmony_ci    },
160094332d3Sopenharmony_ci    // num13
161094332d3Sopenharmony_ci    {
162094332d3Sopenharmony_ci        .width = ALLOC_SIZE_1080,
163094332d3Sopenharmony_ci        .height = ALLOC_SIZE_1920,
164094332d3Sopenharmony_ci        .usage = HBM_USE_CPU_HW_BOTH | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
165094332d3Sopenharmony_ci        .format = PIXEL_FMT_RGBX_8888
166094332d3Sopenharmony_ci    },
167094332d3Sopenharmony_ci    // num14
168094332d3Sopenharmony_ci    {
169094332d3Sopenharmony_ci        .width = ALLOC_SIZE_1280,
170094332d3Sopenharmony_ci        .height = ALLOC_SIZE_720,
171094332d3Sopenharmony_ci        .usage = HBM_USE_CPU_HW_BOTH | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
172094332d3Sopenharmony_ci        .format = PIXEL_FMT_RGBX_8888
173094332d3Sopenharmony_ci    },
174094332d3Sopenharmony_ci    // num15
175094332d3Sopenharmony_ci    {
176094332d3Sopenharmony_ci        .width = ALLOC_SIZE_1080,
177094332d3Sopenharmony_ci        .height = ALLOC_SIZE_1920,
178094332d3Sopenharmony_ci        .usage = HBM_USE_CPU_HW_BOTH | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
179094332d3Sopenharmony_ci        .format = PIXEL_FMT_RGBA_8888
180094332d3Sopenharmony_ci    },
181094332d3Sopenharmony_ci    // num16
182094332d3Sopenharmony_ci    {
183094332d3Sopenharmony_ci        .width = ALLOC_SIZE_1080,
184094332d3Sopenharmony_ci        .height = ALLOC_SIZE_1920,
185094332d3Sopenharmony_ci        .usage = HBM_USE_CPU_HW_BOTH | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
186094332d3Sopenharmony_ci        .format = PIXEL_FMT_BGRA_8888
187094332d3Sopenharmony_ci    },
188094332d3Sopenharmony_ci    // num17
189094332d3Sopenharmony_ci    {
190094332d3Sopenharmony_ci        .width = ALLOC_SIZE_1080,
191094332d3Sopenharmony_ci        .height = ALLOC_SIZE_1920,
192094332d3Sopenharmony_ci        .usage = HBM_USE_CPU_HW_BOTH | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
193094332d3Sopenharmony_ci        .format = PIXEL_FMT_YCBCR_420_SP
194094332d3Sopenharmony_ci    },
195094332d3Sopenharmony_ci    // num18
196094332d3Sopenharmony_ci    {
197094332d3Sopenharmony_ci        .width = ALLOC_SIZE_1080,
198094332d3Sopenharmony_ci        .height = ALLOC_SIZE_1920,
199094332d3Sopenharmony_ci        .usage = HBM_USE_CPU_HW_BOTH | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
200094332d3Sopenharmony_ci        .format = PIXEL_FMT_YCRCB_420_SP
201094332d3Sopenharmony_ci    },
202094332d3Sopenharmony_ci    // num19
203094332d3Sopenharmony_ci    {
204094332d3Sopenharmony_ci        .width = ALLOC_SIZE_1080,
205094332d3Sopenharmony_ci        .height = ALLOC_SIZE_1920,
206094332d3Sopenharmony_ci        .usage = HBM_USE_CPU_HW_BOTH | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
207094332d3Sopenharmony_ci        .format = PIXEL_FMT_YCBCR_420_P
208094332d3Sopenharmony_ci    },
209094332d3Sopenharmony_ci    // num20
210094332d3Sopenharmony_ci    {
211094332d3Sopenharmony_ci        .width = ALLOC_SIZE_1080,
212094332d3Sopenharmony_ci        .height = ALLOC_SIZE_1920,
213094332d3Sopenharmony_ci        .usage = HBM_USE_CPU_HW_BOTH | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
214094332d3Sopenharmony_ci        .format = PIXEL_FMT_YCRCB_420_P
215094332d3Sopenharmony_ci    },
216094332d3Sopenharmony_ci    // num21
217094332d3Sopenharmony_ci    {
218094332d3Sopenharmony_ci        .width = ALLOC_SIZE_1080,
219094332d3Sopenharmony_ci        .height = ALLOC_SIZE_1920,
220094332d3Sopenharmony_ci        .usage = HBM_USE_CPU_HW_BOTH,
221094332d3Sopenharmony_ci        .format = PIXEL_FMT_RGBX_8888
222094332d3Sopenharmony_ci    },
223094332d3Sopenharmony_ci    // num22
224094332d3Sopenharmony_ci    {
225094332d3Sopenharmony_ci        .width = ALLOC_SIZE_1080,
226094332d3Sopenharmony_ci        .height = ALLOC_SIZE_1920,
227094332d3Sopenharmony_ci        .usage = HBM_USE_CPU_HW_BOTH | HBM_USE_CPU_READ,
228094332d3Sopenharmony_ci        .format = PIXEL_FMT_RGBX_8888
229094332d3Sopenharmony_ci    },
230094332d3Sopenharmony_ci    // num23
231094332d3Sopenharmony_ci    {
232094332d3Sopenharmony_ci        .width = ALLOC_SIZE_1080,
233094332d3Sopenharmony_ci        .height = ALLOC_SIZE_1920,
234094332d3Sopenharmony_ci        .usage = HBM_USE_CPU_HW_BOTH | HBM_USE_CPU_WRITE,
235094332d3Sopenharmony_ci        .format = PIXEL_FMT_RGBX_8888
236094332d3Sopenharmony_ci    },
237094332d3Sopenharmony_ci#ifdef DISPLAY_COMMUNITY
238094332d3Sopenharmony_ci     // num24
239094332d3Sopenharmony_ci    {
240094332d3Sopenharmony_ci        .width = ALLOC_SIZE_1080,
241094332d3Sopenharmony_ci        .height = ALLOC_SIZE_1920,
242094332d3Sopenharmony_ci        .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
243094332d3Sopenharmony_ci        .format = PIXEL_FMT_RGB_888
244094332d3Sopenharmony_ci    },
245094332d3Sopenharmony_ci    // num25
246094332d3Sopenharmony_ci    {
247094332d3Sopenharmony_ci        .width = ALLOC_SIZE_1080,
248094332d3Sopenharmony_ci        .height = ALLOC_SIZE_1920,
249094332d3Sopenharmony_ci        .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
250094332d3Sopenharmony_ci        .format = PIXEL_FMT_BGRX_8888
251094332d3Sopenharmony_ci    },
252094332d3Sopenharmony_ci    // num26
253094332d3Sopenharmony_ci    {
254094332d3Sopenharmony_ci        .width = ALLOC_SIZE_1080,
255094332d3Sopenharmony_ci        .height = ALLOC_SIZE_1920,
256094332d3Sopenharmony_ci        .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
257094332d3Sopenharmony_ci        .format = PIXEL_FMT_RGBA_4444
258094332d3Sopenharmony_ci    },
259094332d3Sopenharmony_ci    // num27
260094332d3Sopenharmony_ci    {
261094332d3Sopenharmony_ci        .width = ALLOC_SIZE_1080,
262094332d3Sopenharmony_ci        .height = ALLOC_SIZE_1920,
263094332d3Sopenharmony_ci        .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
264094332d3Sopenharmony_ci        .format = PIXEL_FMT_RGBX_4444
265094332d3Sopenharmony_ci    },
266094332d3Sopenharmony_ci    // num28
267094332d3Sopenharmony_ci    {
268094332d3Sopenharmony_ci        .width = ALLOC_SIZE_1080,
269094332d3Sopenharmony_ci        .height = ALLOC_SIZE_1920,
270094332d3Sopenharmony_ci        .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
271094332d3Sopenharmony_ci        .format = PIXEL_FMT_BGRA_4444
272094332d3Sopenharmony_ci    },
273094332d3Sopenharmony_ci    // num29
274094332d3Sopenharmony_ci    {
275094332d3Sopenharmony_ci        .width = ALLOC_SIZE_1080,
276094332d3Sopenharmony_ci        .height = ALLOC_SIZE_1920,
277094332d3Sopenharmony_ci        .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
278094332d3Sopenharmony_ci        .format = PIXEL_FMT_BGRX_4444
279094332d3Sopenharmony_ci    },
280094332d3Sopenharmony_ci    // num30
281094332d3Sopenharmony_ci    {
282094332d3Sopenharmony_ci        .width = ALLOC_SIZE_1080,
283094332d3Sopenharmony_ci        .height = ALLOC_SIZE_1920,
284094332d3Sopenharmony_ci        .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
285094332d3Sopenharmony_ci        .format = PIXEL_FMT_BGR_565
286094332d3Sopenharmony_ci    },
287094332d3Sopenharmony_ci    // num31
288094332d3Sopenharmony_ci    {
289094332d3Sopenharmony_ci        .width = ALLOC_SIZE_1080,
290094332d3Sopenharmony_ci        .height = ALLOC_SIZE_1920,
291094332d3Sopenharmony_ci        .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
292094332d3Sopenharmony_ci        .format = PIXEL_FMT_BGRA_5551
293094332d3Sopenharmony_ci    },
294094332d3Sopenharmony_ci    // num32
295094332d3Sopenharmony_ci    {
296094332d3Sopenharmony_ci        .width = ALLOC_SIZE_1080,
297094332d3Sopenharmony_ci        .height = ALLOC_SIZE_1920,
298094332d3Sopenharmony_ci        .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
299094332d3Sopenharmony_ci        .format = PIXEL_FMT_BGRX_5551
300094332d3Sopenharmony_ci    },
301094332d3Sopenharmony_ci    //HBM_USE_CPU_HW_BOTH
302094332d3Sopenharmony_ci    // num33
303094332d3Sopenharmony_ci    {
304094332d3Sopenharmony_ci        .width = ALLOC_SIZE_1080,
305094332d3Sopenharmony_ci        .height = ALLOC_SIZE_1920,
306094332d3Sopenharmony_ci        .usage = HBM_USE_CPU_HW_BOTH | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
307094332d3Sopenharmony_ci        .format = PIXEL_FMT_RGB_888
308094332d3Sopenharmony_ci    },
309094332d3Sopenharmony_ci    // num34
310094332d3Sopenharmony_ci    {
311094332d3Sopenharmony_ci        .width = ALLOC_SIZE_1080,
312094332d3Sopenharmony_ci        .height = ALLOC_SIZE_1920,
313094332d3Sopenharmony_ci        .usage = HBM_USE_CPU_HW_BOTH | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
314094332d3Sopenharmony_ci        .format = PIXEL_FMT_BGRX_8888
315094332d3Sopenharmony_ci    },
316094332d3Sopenharmony_ci    // num35
317094332d3Sopenharmony_ci    {
318094332d3Sopenharmony_ci        .width = ALLOC_SIZE_1080,
319094332d3Sopenharmony_ci        .height = ALLOC_SIZE_1920,
320094332d3Sopenharmony_ci        .usage = HBM_USE_CPU_HW_BOTH | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
321094332d3Sopenharmony_ci        .format = PIXEL_FMT_RGBA_4444
322094332d3Sopenharmony_ci    },
323094332d3Sopenharmony_ci    // num36
324094332d3Sopenharmony_ci    {
325094332d3Sopenharmony_ci        .width = ALLOC_SIZE_1080,
326094332d3Sopenharmony_ci        .height = ALLOC_SIZE_1920,
327094332d3Sopenharmony_ci        .usage = HBM_USE_CPU_HW_BOTH | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
328094332d3Sopenharmony_ci        .format = PIXEL_FMT_RGBX_4444
329094332d3Sopenharmony_ci    },
330094332d3Sopenharmony_ci    // num37
331094332d3Sopenharmony_ci    {
332094332d3Sopenharmony_ci        .width = ALLOC_SIZE_1080,
333094332d3Sopenharmony_ci        .height = ALLOC_SIZE_1920,
334094332d3Sopenharmony_ci        .usage = HBM_USE_CPU_HW_BOTH | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
335094332d3Sopenharmony_ci        .format = PIXEL_FMT_BGRA_4444
336094332d3Sopenharmony_ci    },
337094332d3Sopenharmony_ci    // num38
338094332d3Sopenharmony_ci    {
339094332d3Sopenharmony_ci        .width = ALLOC_SIZE_1080,
340094332d3Sopenharmony_ci        .height = ALLOC_SIZE_1920,
341094332d3Sopenharmony_ci        .usage = HBM_USE_CPU_HW_BOTH | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
342094332d3Sopenharmony_ci        .format = PIXEL_FMT_BGRX_4444
343094332d3Sopenharmony_ci    },
344094332d3Sopenharmony_ci    // num39
345094332d3Sopenharmony_ci    {
346094332d3Sopenharmony_ci        .width = ALLOC_SIZE_1080,
347094332d3Sopenharmony_ci        .height = ALLOC_SIZE_1920,
348094332d3Sopenharmony_ci        .usage = HBM_USE_CPU_HW_BOTH | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
349094332d3Sopenharmony_ci        .format = PIXEL_FMT_BGR_565
350094332d3Sopenharmony_ci    },
351094332d3Sopenharmony_ci    // num40
352094332d3Sopenharmony_ci    {
353094332d3Sopenharmony_ci        .width = ALLOC_SIZE_1080,
354094332d3Sopenharmony_ci        .height = ALLOC_SIZE_1920,
355094332d3Sopenharmony_ci        .usage = HBM_USE_CPU_HW_BOTH | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
356094332d3Sopenharmony_ci        .format = PIXEL_FMT_BGRA_5551
357094332d3Sopenharmony_ci    },
358094332d3Sopenharmony_ci    // num41
359094332d3Sopenharmony_ci    {
360094332d3Sopenharmony_ci        .width = ALLOC_SIZE_1080,
361094332d3Sopenharmony_ci        .height = ALLOC_SIZE_1920,
362094332d3Sopenharmony_ci        .usage = HBM_USE_CPU_HW_BOTH | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
363094332d3Sopenharmony_ci        .format = PIXEL_FMT_BGRX_5551
364094332d3Sopenharmony_ci    },
365094332d3Sopenharmony_ci#else
366094332d3Sopenharmony_ci    // num42
367094332d3Sopenharmony_ci    {
368094332d3Sopenharmony_ci        .width = ALLOC_SIZE_1080,
369094332d3Sopenharmony_ci        .height = ALLOC_SIZE_1920,
370094332d3Sopenharmony_ci        .usage = HBM_USE_MEM_DMA | HBM_USE_CPU_WRITE,
371094332d3Sopenharmony_ci        .format = PIXEL_FMT_RGBA_1010102
372094332d3Sopenharmony_ci    },
373094332d3Sopenharmony_ci    //HBM_USE_CPU_HW_BOTH
374094332d3Sopenharmony_ci    // num43
375094332d3Sopenharmony_ci    {
376094332d3Sopenharmony_ci        .width = ALLOC_SIZE_1080,
377094332d3Sopenharmony_ci        .height = ALLOC_SIZE_1920,
378094332d3Sopenharmony_ci        .usage = HBM_USE_CPU_HW_BOTH | HBM_USE_CPU_WRITE,
379094332d3Sopenharmony_ci        .format = PIXEL_FMT_RGBA_1010102
380094332d3Sopenharmony_ci    },
381094332d3Sopenharmony_ci#endif // DISPLAY_COMMUNITY
382094332d3Sopenharmony_ci};
383094332d3Sopenharmony_ci
384094332d3Sopenharmony_civoid DisplayBufferUt::SetUp()
385094332d3Sopenharmony_ci{
386094332d3Sopenharmony_ci    displayBuffer_ = IDisplayBuffer::Get();
387094332d3Sopenharmony_ci    if (displayBuffer_ == nullptr) {
388094332d3Sopenharmony_ci        HDF_LOGE("IDisplayBuffer get failed");
389094332d3Sopenharmony_ci        ASSERT_TRUE(0);
390094332d3Sopenharmony_ci    }
391094332d3Sopenharmony_ci}
392094332d3Sopenharmony_ci
393094332d3Sopenharmony_civoid DisplayBufferUt::TearDown()
394094332d3Sopenharmony_ci{
395094332d3Sopenharmony_ci}
396094332d3Sopenharmony_ci
397094332d3Sopenharmony_civoid DisplayBufferUt::MetadataTest(BufferHandle& handle)
398094332d3Sopenharmony_ci{
399094332d3Sopenharmony_ci    int32_t ret = displayBuffer_->RegisterBuffer(handle);
400094332d3Sopenharmony_ci    EXPECT_TRUE(ret == DISPLAY_NOT_SUPPORT || ret == DISPLAY_SUCCESS);
401094332d3Sopenharmony_ci
402094332d3Sopenharmony_ci    uint32_t key = 1;
403094332d3Sopenharmony_ci    std::vector<uint8_t> values = {1, 2, 3};
404094332d3Sopenharmony_ci    std::vector<uint32_t> keys = {};
405094332d3Sopenharmony_ci    std::vector<uint8_t> rets = {};
406094332d3Sopenharmony_ci    ret = displayBuffer_->SetMetadata(handle, key, values);
407094332d3Sopenharmony_ci    EXPECT_TRUE(ret == DISPLAY_NOT_SUPPORT || ret == DISPLAY_SUCCESS);
408094332d3Sopenharmony_ci    ret = displayBuffer_->GetMetadata(handle, key, rets);
409094332d3Sopenharmony_ci    EXPECT_TRUE(ret == DISPLAY_NOT_SUPPORT || ret == DISPLAY_SUCCESS);
410094332d3Sopenharmony_ci    if (ret != DISPLAY_NOT_SUPPORT) {
411094332d3Sopenharmony_ci        EXPECT_TRUE(rets == values);
412094332d3Sopenharmony_ci    }
413094332d3Sopenharmony_ci
414094332d3Sopenharmony_ci    ret = displayBuffer_->ListMetadataKeys(handle, keys);
415094332d3Sopenharmony_ci    EXPECT_TRUE(ret == DISPLAY_NOT_SUPPORT || ret == DISPLAY_SUCCESS);
416094332d3Sopenharmony_ci    if (ret != DISPLAY_NOT_SUPPORT) {
417094332d3Sopenharmony_ci        EXPECT_TRUE(keys.size() == 1 && keys[0] == key);
418094332d3Sopenharmony_ci    }
419094332d3Sopenharmony_ci
420094332d3Sopenharmony_ci    ret = displayBuffer_->EraseMetadataKey(handle, key);
421094332d3Sopenharmony_ci    EXPECT_TRUE(ret == DISPLAY_NOT_SUPPORT || ret == DISPLAY_SUCCESS);
422094332d3Sopenharmony_ci    if (ret != DISPLAY_NOT_SUPPORT) {
423094332d3Sopenharmony_ci        rets = {};
424094332d3Sopenharmony_ci        ret = displayBuffer_->GetMetadata(handle, key, rets);
425094332d3Sopenharmony_ci        EXPECT_TRUE(ret != DISPLAY_SUCCESS);
426094332d3Sopenharmony_ci    }
427094332d3Sopenharmony_ci}
428094332d3Sopenharmony_ci
429094332d3Sopenharmony_ciint32_t DisplayBufferUt::AllocMemTest(AllocInfo& info)
430094332d3Sopenharmony_ci{
431094332d3Sopenharmony_ci    int ret;
432094332d3Sopenharmony_ci    BufferHandle *buffer = nullptr;
433094332d3Sopenharmony_ci    const int TEST_COUNT = 40; // test 40 times
434094332d3Sopenharmony_ci    for (int i = 0; i < TEST_COUNT; i++) {
435094332d3Sopenharmony_ci        ret = displayBuffer_->AllocMem(info, buffer);
436094332d3Sopenharmony_ci        if (ret == DISPLAY_NOT_SUPPORT) {
437094332d3Sopenharmony_ci            HDF_LOGE("%{public}s: AllocMem not support, ret=%{public}d", __func__, ret);
438094332d3Sopenharmony_ci            return DISPLAY_SUCCESS;
439094332d3Sopenharmony_ci        }
440094332d3Sopenharmony_ci        if (ret != DISPLAY_SUCCESS || buffer == nullptr) {
441094332d3Sopenharmony_ci            HDF_LOGE("AllocMem failed");
442094332d3Sopenharmony_ci            return ret;
443094332d3Sopenharmony_ci        }
444094332d3Sopenharmony_ci        MetadataTest(*buffer);
445094332d3Sopenharmony_ci        void *vAddr = displayBuffer_->Mmap(*buffer);
446094332d3Sopenharmony_ci        if (vAddr == nullptr) {
447094332d3Sopenharmony_ci            HDF_LOGE("Mmap failed");
448094332d3Sopenharmony_ci            displayBuffer_->FreeMem(*buffer);
449094332d3Sopenharmony_ci            return DISPLAY_FAILURE;
450094332d3Sopenharmony_ci        }
451094332d3Sopenharmony_ci        if (info.usage & (HBM_USE_CPU_READ | HBM_USE_CPU_WRITE)) {
452094332d3Sopenharmony_ci            ret = displayBuffer_->InvalidateCache(*buffer);
453094332d3Sopenharmony_ci            if (ret != DISPLAY_SUCCESS) {
454094332d3Sopenharmony_ci                HDF_LOGE("InvalidateCache failed");
455094332d3Sopenharmony_ci                displayBuffer_->Unmap(*buffer);
456094332d3Sopenharmony_ci                displayBuffer_->FreeMem(*buffer);
457094332d3Sopenharmony_ci                return ret;
458094332d3Sopenharmony_ci            }
459094332d3Sopenharmony_ci        }
460094332d3Sopenharmony_ci        if (memset_s(vAddr, buffer->size, 0, buffer->size) != EOK) {
461094332d3Sopenharmony_ci            HDF_LOGE("Insufficient memory");
462094332d3Sopenharmony_ci            displayBuffer_->Unmap(*buffer);
463094332d3Sopenharmony_ci            displayBuffer_->FreeMem(*buffer);
464094332d3Sopenharmony_ci            return DISPLAY_NOMEM;
465094332d3Sopenharmony_ci        }
466094332d3Sopenharmony_ci        if (info.usage & (HBM_USE_CPU_READ | HBM_USE_CPU_WRITE)) {
467094332d3Sopenharmony_ci            ret = displayBuffer_->FlushCache(*buffer);
468094332d3Sopenharmony_ci            if (ret != DISPLAY_SUCCESS) {
469094332d3Sopenharmony_ci                HDF_LOGE("FlushCache failed");
470094332d3Sopenharmony_ci                displayBuffer_->Unmap(*buffer);
471094332d3Sopenharmony_ci                displayBuffer_->FreeMem(*buffer);
472094332d3Sopenharmony_ci                return ret;
473094332d3Sopenharmony_ci            }
474094332d3Sopenharmony_ci        }
475094332d3Sopenharmony_ci        displayBuffer_->Unmap(*buffer);
476094332d3Sopenharmony_ci        displayBuffer_->FreeMem(*buffer);
477094332d3Sopenharmony_ci    }
478094332d3Sopenharmony_ci    return DISPLAY_SUCCESS;
479094332d3Sopenharmony_ci}
480094332d3Sopenharmony_ci
481094332d3Sopenharmony_ciTEST_P(DisplayBufferUt, DisplayBufferUt)
482094332d3Sopenharmony_ci{
483094332d3Sopenharmony_ci    AllocInfo params = GetParam();
484094332d3Sopenharmony_ci    int ret = AllocMemTest(params);
485094332d3Sopenharmony_ci    ASSERT_TRUE(ret == DISPLAY_SUCCESS);
486094332d3Sopenharmony_ci}
487094332d3Sopenharmony_ci
488094332d3Sopenharmony_ciINSTANTIATE_TEST_SUITE_P(AllocTest, DisplayBufferUt, ::testing::ValuesIn(DISPLAY_BUFFER_TEST_SETS));
489094332d3Sopenharmony_ci} // OHOS
490094332d3Sopenharmony_ci} // HDI
491094332d3Sopenharmony_ci} // DISPLAY
492094332d3Sopenharmony_ci} // TEST