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