* Copyright (c) 2023 Huawei Device Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#include "display_buffer_ut.h"
#include <securec.h>
#include "gtest/gtest.h"
#include "v1_2/display_buffer_type.h"
#include "v1_2/display_composer_type.h"
#include "hdf_base.h"
#include "hdf_log.h"
namespace OHOS {
namespace HDI {
namespace Display {
namespace TEST {
using namespace testing::ext;
using namespace OHOS::HDI::Display::Composer::V1_2;
using namespace OHOS::HDI::Display::Buffer::V1_1;
using OHOS::HDI::Display::Buffer::V1_0::AllocInfo;
using OHOS::HDI::Display::Composer::V1_2::HBM_USE_MEM_DMA;
using OHOS::HDI::Display::Composer::V1_2::HBM_USE_CPU_READ;
using OHOS::HDI::Display::Composer::V1_2::HBM_USE_CPU_WRITE;
using OHOS::HDI::Display::Composer::V1_1::PIXEL_FMT_RGBX_8888;
using OHOS::HDI::Display::Composer::V1_1::PIXEL_FMT_RGBA_8888;
using OHOS::HDI::Display::Composer::V1_1::PIXEL_FMT_BGRA_8888;
using OHOS::HDI::Display::Composer::V1_1::PIXEL_FMT_YCBCR_420_SP;
using OHOS::HDI::Display::Composer::V1_1::PIXEL_FMT_YCRCB_420_SP;
using OHOS::HDI::Display::Composer::V1_1::PIXEL_FMT_YCBCR_420_P;
using OHOS::HDI::Display::Composer::V1_1::PIXEL_FMT_YCRCB_420_P;
using OHOS::HDI::Display::Composer::V1_1::PIXEL_FMT_RGB_888;
using OHOS::HDI::Display::Composer::V1_1::PIXEL_FMT_BGRX_8888;
using OHOS::HDI::Display::Composer::V1_1::PIXEL_FMT_RGBA_4444;
using OHOS::HDI::Display::Composer::V1_1::PIXEL_FMT_RGBX_4444;
using OHOS::HDI::Display::Composer::V1_1::PIXEL_FMT_BGRA_4444;
using OHOS::HDI::Display::Composer::V1_1::PIXEL_FMT_BGRX_4444;
using OHOS::HDI::Display::Composer::V1_1::PIXEL_FMT_BGR_565;
using OHOS::HDI::Display::Composer::V1_1::PIXEL_FMT_BGRA_5551;
using OHOS::HDI::Display::Composer::V1_1::PIXEL_FMT_BGRX_5551;
using OHOS::HDI::Display::Composer::V1_1::PIXEL_FMT_RGBA_1010102;
#define TEST_INFO (1<<27)
#ifndef DISPLAY_TEST_CHK_RETURN
#define DISPLAY_TEST_CHK_RETURN(val, ret, ...) \
do { \
if (val) { \
__VA_ARGS__; \
return (ret); \
} \
} while (0)
#endif
const uint32_t ALLOC_SIZE_1080 = 1080;
const uint32_t ALLOC_SIZE_1920 = 1920;
const uint32_t ALLOC_SIZE_1280 = 1280;
const uint32_t ALLOC_SIZE_720 = 720;
const int TEST_COUNT = 40;
const AllocInfo DISPLAY_BUFFER_TEST_SETS[] = {
{
.width = ALLOC_SIZE_1920,
.height = ALLOC_SIZE_1080,
.usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
.format = PIXEL_FMT_RGBX_8888
},
{
.width = ALLOC_SIZE_1080,
.height = ALLOC_SIZE_1920,
.usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
.format = PIXEL_FMT_RGBX_8888
},
{
.width = ALLOC_SIZE_1280,
.height = ALLOC_SIZE_720,
.usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
.format = PIXEL_FMT_RGBX_8888
},
{
.width = ALLOC_SIZE_1080,
.height = ALLOC_SIZE_1920,
.usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
.format = PIXEL_FMT_RGBA_8888
},
{
.width = ALLOC_SIZE_1080,
.height = ALLOC_SIZE_1920,
.usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
.format = PIXEL_FMT_BGRA_8888
},
{
.width = ALLOC_SIZE_1080,
.height = ALLOC_SIZE_1920,
.usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
.format = PIXEL_FMT_YCBCR_420_SP
},
{
.width = ALLOC_SIZE_1080,
.height = ALLOC_SIZE_1920,
.usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
.format = PIXEL_FMT_YCRCB_420_SP
},
{
.width = ALLOC_SIZE_1080,
.height = ALLOC_SIZE_1920,
.usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
.format = PIXEL_FMT_YCBCR_420_P
},
{
.width = ALLOC_SIZE_1080,
.height = ALLOC_SIZE_1920,
.usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
.format = PIXEL_FMT_YCRCB_420_P
},
{
.width = ALLOC_SIZE_1080,
.height = ALLOC_SIZE_1920,
.usage = HBM_USE_MEM_DMA,
.format = PIXEL_FMT_RGBX_8888
},
{
.width = ALLOC_SIZE_1080,
.height = ALLOC_SIZE_1920,
.usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ,
.format = PIXEL_FMT_RGBX_8888
},
{
.width = ALLOC_SIZE_1080,
.height = ALLOC_SIZE_1920,
.usage = HBM_USE_MEM_DMA | HBM_USE_CPU_WRITE,
.format = PIXEL_FMT_RGBX_8888
},
{
.width = ALLOC_SIZE_1920,
.height = ALLOC_SIZE_1080,
.usage = HBM_USE_CPU_HW_BOTH | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
.format = PIXEL_FMT_RGBX_8888
},
{
.width = ALLOC_SIZE_1080,
.height = ALLOC_SIZE_1920,
.usage = HBM_USE_CPU_HW_BOTH | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
.format = PIXEL_FMT_RGBX_8888
},
{
.width = ALLOC_SIZE_1280,
.height = ALLOC_SIZE_720,
.usage = HBM_USE_CPU_HW_BOTH | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
.format = PIXEL_FMT_RGBX_8888
},
{
.width = ALLOC_SIZE_1080,
.height = ALLOC_SIZE_1920,
.usage = HBM_USE_CPU_HW_BOTH | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
.format = PIXEL_FMT_RGBA_8888
},
{
.width = ALLOC_SIZE_1080,
.height = ALLOC_SIZE_1920,
.usage = HBM_USE_CPU_HW_BOTH | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
.format = PIXEL_FMT_BGRA_8888
},
{
.width = ALLOC_SIZE_1080,
.height = ALLOC_SIZE_1920,
.usage = HBM_USE_CPU_HW_BOTH | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
.format = PIXEL_FMT_YCBCR_420_SP
},
{
.width = ALLOC_SIZE_1080,
.height = ALLOC_SIZE_1920,
.usage = HBM_USE_CPU_HW_BOTH | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
.format = PIXEL_FMT_YCRCB_420_SP
},
{
.width = ALLOC_SIZE_1080,
.height = ALLOC_SIZE_1920,
.usage = HBM_USE_CPU_HW_BOTH | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
.format = PIXEL_FMT_YCBCR_420_P
},
{
.width = ALLOC_SIZE_1080,
.height = ALLOC_SIZE_1920,
.usage = HBM_USE_CPU_HW_BOTH | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
.format = PIXEL_FMT_YCRCB_420_P
},
{
.width = ALLOC_SIZE_1080,
.height = ALLOC_SIZE_1920,
.usage = HBM_USE_CPU_HW_BOTH,
.format = PIXEL_FMT_RGBX_8888
},
{
.width = ALLOC_SIZE_1080,
.height = ALLOC_SIZE_1920,
.usage = HBM_USE_CPU_HW_BOTH | HBM_USE_CPU_READ,
.format = PIXEL_FMT_RGBX_8888
},
{
.width = ALLOC_SIZE_1080,
.height = ALLOC_SIZE_1920,
.usage = HBM_USE_CPU_HW_BOTH | HBM_USE_CPU_WRITE,
.format = PIXEL_FMT_RGBX_8888
},
#ifdef DISPLAY_COMMUNITY
{
.width = ALLOC_SIZE_1080,
.height = ALLOC_SIZE_1920,
.usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
.format = PIXEL_FMT_RGB_888
},
{
.width = ALLOC_SIZE_1080,
.height = ALLOC_SIZE_1920,
.usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
.format = PIXEL_FMT_BGRX_8888
},
{
.width = ALLOC_SIZE_1080,
.height = ALLOC_SIZE_1920,
.usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
.format = PIXEL_FMT_RGBA_4444
},
{
.width = ALLOC_SIZE_1080,
.height = ALLOC_SIZE_1920,
.usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
.format = PIXEL_FMT_RGBX_4444
},
{
.width = ALLOC_SIZE_1080,
.height = ALLOC_SIZE_1920,
.usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
.format = PIXEL_FMT_BGRA_4444
},
{
.width = ALLOC_SIZE_1080,
.height = ALLOC_SIZE_1920,
.usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
.format = PIXEL_FMT_BGRX_4444
},
{
.width = ALLOC_SIZE_1080,
.height = ALLOC_SIZE_1920,
.usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
.format = PIXEL_FMT_BGR_565
},
{
.width = ALLOC_SIZE_1080,
.height = ALLOC_SIZE_1920,
.usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
.format = PIXEL_FMT_BGRA_5551
},
{
.width = ALLOC_SIZE_1080,
.height = ALLOC_SIZE_1920,
.usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
.format = PIXEL_FMT_BGRX_5551
},
{
.width = ALLOC_SIZE_1080,
.height = ALLOC_SIZE_1920,
.usage = HBM_USE_CPU_HW_BOTH | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
.format = PIXEL_FMT_RGB_888
},
{
.width = ALLOC_SIZE_1080,
.height = ALLOC_SIZE_1920,
.usage = HBM_USE_CPU_HW_BOTH | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
.format = PIXEL_FMT_BGRX_8888
},
{
.width = ALLOC_SIZE_1080,
.height = ALLOC_SIZE_1920,
.usage = HBM_USE_CPU_HW_BOTH | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
.format = PIXEL_FMT_RGBA_4444
},
{
.width = ALLOC_SIZE_1080,
.height = ALLOC_SIZE_1920,
.usage = HBM_USE_CPU_HW_BOTH | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
.format = PIXEL_FMT_RGBX_4444
},
{
.width = ALLOC_SIZE_1080,
.height = ALLOC_SIZE_1920,
.usage = HBM_USE_CPU_HW_BOTH | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
.format = PIXEL_FMT_BGRA_4444
},
{
.width = ALLOC_SIZE_1080,
.height = ALLOC_SIZE_1920,
.usage = HBM_USE_CPU_HW_BOTH | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
.format = PIXEL_FMT_BGRX_4444
},
{
.width = ALLOC_SIZE_1080,
.height = ALLOC_SIZE_1920,
.usage = HBM_USE_CPU_HW_BOTH | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
.format = PIXEL_FMT_BGR_565
},
{
.width = ALLOC_SIZE_1080,
.height = ALLOC_SIZE_1920,
.usage = HBM_USE_CPU_HW_BOTH | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
.format = PIXEL_FMT_BGRA_5551
},
{
.width = ALLOC_SIZE_1080,
.height = ALLOC_SIZE_1920,
.usage = HBM_USE_CPU_HW_BOTH | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
.format = PIXEL_FMT_BGRX_5551
},
#else
{
.width = ALLOC_SIZE_1080,
.height = ALLOC_SIZE_1920,
.usage = HBM_USE_MEM_DMA | HBM_USE_CPU_WRITE,
.format = PIXEL_FMT_RGBA_1010102
},
{
.width = ALLOC_SIZE_1080,
.height = ALLOC_SIZE_1920,
.usage = HBM_USE_CPU_HW_BOTH | HBM_USE_CPU_WRITE,
.format = PIXEL_FMT_RGBA_1010102
},
#endif
};
void DisplayBufferUt::SetUp()
{
displayBuffer_ = IDisplayBuffer::Get();
if (displayBuffer_ == nullptr) {
HDF_LOGE("IDisplayBuffer get failed");
ASSERT_TRUE(0);
}
}
void DisplayBufferUt::TearDown()
{
}
void DisplayBufferUt::MetadataTest(BufferHandle& handle)
{
int32_t ret = displayBuffer_->RegisterBuffer(handle);
EXPECT_TRUE(ret == DISPLAY_NOT_SUPPORT || ret == DISPLAY_SUCCESS);
uint32_t key = 1;
std::vector<uint8_t> values = {1, 2, 3};
std::vector<uint32_t> keys = {};
std::vector<uint8_t> rets = {};
ret = displayBuffer_->SetMetadata(handle, key, values);
EXPECT_TRUE(ret == DISPLAY_NOT_SUPPORT || ret == DISPLAY_SUCCESS);
ret = displayBuffer_->GetMetadata(handle, key, rets);
EXPECT_TRUE(ret == DISPLAY_NOT_SUPPORT || ret == DISPLAY_SUCCESS);
if (ret != DISPLAY_NOT_SUPPORT) {
EXPECT_TRUE(rets == values);
}
ret = displayBuffer_->ListMetadataKeys(handle, keys);
EXPECT_TRUE(ret == DISPLAY_NOT_SUPPORT || ret == DISPLAY_SUCCESS);
if (ret != DISPLAY_NOT_SUPPORT) {
EXPECT_TRUE(keys.size() == 1 && keys[0] == key);
}
ret = displayBuffer_->EraseMetadataKey(handle, key);
EXPECT_TRUE(ret == DISPLAY_NOT_SUPPORT || ret == DISPLAY_SUCCESS);
if (ret != DISPLAY_NOT_SUPPORT) {
rets = {};
ret = displayBuffer_->GetMetadata(handle, key, rets);
EXPECT_TRUE(ret != DISPLAY_SUCCESS);
}
}
int32_t DisplayBufferUt::AllocMemTest(AllocInfo& info)
{
int ret;
BufferHandle *buffer = nullptr;
for (int i = 0; i < TEST_COUNT; i++) {
ret = displayBuffer_->AllocMem(info, buffer);
if (ret == DISPLAY_NOT_SUPPORT) {
HDF_LOGE("%{public}s: AllocMem not support, ret=%{public}d", __func__, ret);
return DISPLAY_SUCCESS;
}
if (ret != DISPLAY_SUCCESS || buffer == nullptr) {
HDF_LOGE("AllocMem failed");
return ret;
}
MetadataTest(*buffer);
void *vAddr = displayBuffer_->Mmap(*buffer);
if (vAddr == nullptr) {
HDF_LOGE("Mmap failed");
displayBuffer_->FreeMem(*buffer);
return DISPLAY_FAILURE;
}
if (info.usage & (HBM_USE_CPU_READ | HBM_USE_CPU_WRITE)) {
ret = displayBuffer_->InvalidateCache(*buffer);
if (ret != DISPLAY_SUCCESS) {
HDF_LOGE("InvalidateCache failed");
displayBuffer_->Unmap(*buffer);
displayBuffer_->FreeMem(*buffer);
return ret;
}
}
if (memset_s(vAddr, buffer->size, 0, buffer->size) != EOK) {
HDF_LOGE("Insufficient memory");
displayBuffer_->Unmap(*buffer);
displayBuffer_->FreeMem(*buffer);
return DISPLAY_NOMEM;
}
if (info.usage & (HBM_USE_CPU_READ | HBM_USE_CPU_WRITE)) {
ret = displayBuffer_->FlushCache(*buffer);
if (ret != DISPLAY_SUCCESS) {
HDF_LOGE("FlushCache failed");
displayBuffer_->Unmap(*buffer);
displayBuffer_->FreeMem(*buffer);
return ret;
}
}
displayBuffer_->Unmap(*buffer);
displayBuffer_->FreeMem(*buffer);
}
return DISPLAY_SUCCESS;
}
TEST_P(DisplayBufferUt, DisplayBufferUt)
{
AllocInfo params = GetParam();
int ret = AllocMemTest(params);
ASSERT_TRUE(ret == DISPLAY_SUCCESS);
}
INSTANTIATE_TEST_SUITE_P(AllocTest, DisplayBufferUt, ::testing::ValuesIn(DISPLAY_BUFFER_TEST_SETS));
HWTEST_F(DisplayBufferUt, test_AllocMemTest001, TestSize.Level1)
{
AllocInfo info = {
.width = ALLOC_SIZE_1920,
.height = ALLOC_SIZE_1080,
.usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
.format = PIXEL_FMT_RGBX_8888
};
int ret = AllocMemTest(info);
ASSERT_TRUE(ret == DISPLAY_SUCCESS);
}
HWTEST_F(DisplayBufferUt, test_AllocMemTest002, TestSize.Level1)
{
AllocInfo info = {
.width = ALLOC_SIZE_1080,
.height = ALLOC_SIZE_1920,
.usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
.format = PIXEL_FMT_YCBCR_420_SP
};
int ret = AllocMemTest(info);
ASSERT_TRUE(ret == DISPLAY_SUCCESS);
}
HWTEST_F(DisplayBufferUt, test_AllocMemTest003, TestSize.Level1)
{
AllocInfo info = {
.width = ALLOC_SIZE_1080,
.height = ALLOC_SIZE_1920,
.usage = HBM_USE_MEM_DMA,
.format = PIXEL_FMT_RGBX_8888
};
int ret = AllocMemTest(info);
ASSERT_TRUE(ret == DISPLAY_SUCCESS);
}
HWTEST_F(DisplayBufferUt, test_AllocMemTest004, TestSize.Level1)
{
AllocInfo info = {
.width = ALLOC_SIZE_1080,
.height = ALLOC_SIZE_1920,
.usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ,
.format = PIXEL_FMT_RGBX_8888
};
int ret = AllocMemTest(info);
ASSERT_TRUE(ret == DISPLAY_SUCCESS);
}
HWTEST_F(DisplayBufferUt, test_AllocMemTest005, TestSize.Level1)
{
AllocInfo info = {
.width = ALLOC_SIZE_1920,
.height = ALLOC_SIZE_1080,
.usage = HBM_USE_CPU_HW_BOTH | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
.format = PIXEL_FMT_RGBX_8888
};
int ret = AllocMemTest(info);
ASSERT_TRUE(ret == DISPLAY_SUCCESS);
}
HWTEST_F(DisplayBufferUt, test_AllocMemTest006, TestSize.Level1)
{
AllocInfo info = {
.width = ALLOC_SIZE_1080,
.height = ALLOC_SIZE_1920,
.usage = HBM_USE_CPU_HW_BOTH,
.format = PIXEL_FMT_RGBX_8888
};
int ret = AllocMemTest(info);
ASSERT_TRUE(ret == DISPLAY_SUCCESS);
}
HWTEST_F(DisplayBufferUt, test_AllocMemTest007, TestSize.Level1)
{
AllocInfo info = {
.width = ALLOC_SIZE_1920,
.height = ALLOC_SIZE_1080,
.usage = HBM_USE_CPU_HW_BOTH | HBM_USE_CPU_WRITE,
.format = PIXEL_FMT_RGBX_8888
};
int ret = AllocMemTest(info);
ASSERT_TRUE(ret == DISPLAY_SUCCESS);
}
HWTEST_F(DisplayBufferUt, test_AllocMemTest008, TestSize.Level1)
{
AllocInfo info = {
.width = ALLOC_SIZE_1080,
.height = ALLOC_SIZE_1920,
.usage = TEST_INFO,
.format = PIXEL_FMT_YCBCR_420_P
};
int ret = AllocMemTest(info);
ASSERT_TRUE(ret == DISPLAY_SUCCESS);
}
HWTEST_F(DisplayBufferUt, test_AllocMemTest009, TestSize.Level1)
{
AllocInfo info = {
.width = 0,
.height = 0,
.usage = 0,
.format = 0
};
int ret = AllocMemTest(info);
ASSERT_TRUE(ret != DISPLAY_SUCCESS);
}
HWTEST_F(DisplayBufferUt, test_AllocMemTest010, TestSize.Level1)
{
AllocInfo info = {
.width = ALLOC_SIZE_1080,
.height = ALLOC_SIZE_1920,
.usage = HBM_USE_CPU_HW_BOTH | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
.format = PIXEL_FMT_BGRA_5551
};
int ret = AllocMemTest(info);
ASSERT_TRUE(ret == DISPLAY_SUCCESS);
}
HWTEST_F(DisplayBufferUt, test_ReAllocMemTest001, TestSize.Level1)
{
int ret;
AllocInfo info = {
.width = ALLOC_SIZE_1080,
.height = ALLOC_SIZE_1920,
.usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
.format = PIXEL_FMT_YCBCR_420_P
};
BufferHandle* inBuffer = nullptr;
ret = displayBuffer_->AllocMem(info, inBuffer);
EXPECT_TRUE(ret == DISPLAY_SUCCESS);
EXPECT_NE(inBuffer, nullptr);
BufferHandle* outBuffer = nullptr;
AllocInfo newInfo = {
.width = ALLOC_SIZE_1920,
.height = ALLOC_SIZE_1080,
.usage = HBM_USE_MEM_DMA | Composer::V1_0::HBM_USE_VIDEO_DECODER | Composer::V1_0::HBM_USE_HW_COMPOSER,
.format = PIXEL_FMT_YCBCR_420_P
};
ret = displayBuffer_->ReAllocMem(newInfo, *inBuffer, outBuffer);
EXPECT_TRUE(ret == DISPLAY_SUCCESS);
EXPECT_NE(inBuffer, nullptr);
EXPECT_NE(outBuffer, nullptr);
AllocInfo nullInfo;
ret = displayBuffer_->ReAllocMem(nullInfo, *inBuffer, outBuffer);
EXPECT_TRUE(ret != DISPLAY_SUCCESS);
displayBuffer_->FreeMem(*inBuffer);
displayBuffer_->FreeMem(*outBuffer);
}
HWTEST_F(DisplayBufferUt, test_ReAllocMemTest002, TestSize.Level1)
{
int ret;
AllocInfo info = {
.width = ALLOC_SIZE_720,
.height = ALLOC_SIZE_1920,
.usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
.format = PIXEL_FMT_YCBCR_420_P
};
BufferHandle* inBuffer = nullptr;
ret = displayBuffer_->AllocMem(info, inBuffer);
EXPECT_TRUE(ret == DISPLAY_SUCCESS);
EXPECT_NE(inBuffer, nullptr);
BufferHandle* outBuffer = nullptr;
AllocInfo newInfo = {
.width = ALLOC_SIZE_1920,
.height = ALLOC_SIZE_1080,
.usage = HBM_USE_MEM_DMA | Composer::V1_0::HBM_USE_VIDEO_DECODER | Composer::V1_0::HBM_USE_HW_COMPOSER,
.format = PIXEL_FMT_YCBCR_420_P
};
ret = displayBuffer_->ReAllocMem(newInfo, *inBuffer, outBuffer);
EXPECT_TRUE(ret == DISPLAY_SUCCESS);
EXPECT_NE(inBuffer, nullptr);
EXPECT_NE(outBuffer, nullptr);
AllocInfo nullInfo;
ret = displayBuffer_->ReAllocMem(nullInfo, *inBuffer, outBuffer);
EXPECT_TRUE(ret != DISPLAY_SUCCESS);
displayBuffer_->FreeMem(*inBuffer);
displayBuffer_->FreeMem(*outBuffer);
}
HWTEST_F(DisplayBufferUt, test_ReAllocMemTest003, TestSize.Level1)
{
int ret;
AllocInfo info = {
.width = ALLOC_SIZE_1280,
.height = ALLOC_SIZE_1920,
.usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
.format = PIXEL_FMT_YCBCR_420_P
};
BufferHandle* inBuffer = nullptr;
ret = displayBuffer_->AllocMem(info, inBuffer);
EXPECT_TRUE(ret == DISPLAY_SUCCESS);
EXPECT_NE(inBuffer, nullptr);
BufferHandle* outBuffer = nullptr;
AllocInfo newInfo = {
.width = ALLOC_SIZE_1920,
.height = ALLOC_SIZE_1080,
.usage = HBM_USE_MEM_DMA | Composer::V1_0::HBM_USE_VIDEO_DECODER | Composer::V1_0::HBM_USE_HW_COMPOSER,
.format = PIXEL_FMT_YCBCR_420_P
};
ret = displayBuffer_->ReAllocMem(newInfo, *inBuffer, outBuffer);
EXPECT_TRUE(ret == DISPLAY_SUCCESS);
EXPECT_NE(inBuffer, nullptr);
EXPECT_NE(outBuffer, nullptr);
AllocInfo nullInfo;
ret = displayBuffer_->ReAllocMem(nullInfo, *inBuffer, outBuffer);
EXPECT_TRUE(ret != DISPLAY_SUCCESS);
displayBuffer_->FreeMem(*inBuffer);
displayBuffer_->FreeMem(*outBuffer);
}
HWTEST_F(DisplayBufferUt, test_ReAllocMemTest004, TestSize.Level1)
{
int ret;
AllocInfo info = {
.width = ALLOC_SIZE_1080,
.height = ALLOC_SIZE_1920,
.usage = HBM_USE_CPU_HW_BOTH | HBM_USE_CPU_WRITE,
.format = PIXEL_FMT_RGBA_1010102
};
BufferHandle* inBuffer = nullptr;
ret = displayBuffer_->AllocMem(info, inBuffer);
EXPECT_TRUE(ret == DISPLAY_SUCCESS);
EXPECT_NE(inBuffer, nullptr);
BufferHandle* outBuffer = nullptr;
AllocInfo newInfo = {
.width = ALLOC_SIZE_1920,
.height = ALLOC_SIZE_1080,
.usage = HBM_USE_MEM_DMA | Composer::V1_0::HBM_USE_VIDEO_DECODER | Composer::V1_0::HBM_USE_HW_COMPOSER,
.format = PIXEL_FMT_YCBCR_420_P
};
ret = displayBuffer_->ReAllocMem(newInfo, *inBuffer, outBuffer);
EXPECT_TRUE(ret == DISPLAY_SUCCESS);
EXPECT_NE(inBuffer, nullptr);
EXPECT_NE(outBuffer, nullptr);
AllocInfo nullInfo;
ret = displayBuffer_->ReAllocMem(nullInfo, *inBuffer, outBuffer);
EXPECT_TRUE(ret != DISPLAY_SUCCESS);
displayBuffer_->FreeMem(*inBuffer);
displayBuffer_->FreeMem(*outBuffer);
}
HWTEST_F(DisplayBufferUt, test_ReAllocMemTest005, TestSize.Level1)
{
int ret;
AllocInfo info = {
.width = ALLOC_SIZE_1280,
.height = ALLOC_SIZE_1920,
.usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
.format = PIXEL_FMT_YCBCR_420_P
};
BufferHandle* inBuffer = nullptr;
ret = displayBuffer_->AllocMem(info, inBuffer);
EXPECT_TRUE(ret == DISPLAY_SUCCESS);
EXPECT_NE(inBuffer, nullptr);
BufferHandle* outBuffer = nullptr;
AllocInfo newInfo = {
.width = ALLOC_SIZE_1080,
.height = ALLOC_SIZE_1920,
.usage = HBM_USE_CPU_HW_BOTH | HBM_USE_CPU_WRITE,
.format = PIXEL_FMT_RGBA_1010102
};
ret = displayBuffer_->ReAllocMem(newInfo, *inBuffer, outBuffer);
EXPECT_TRUE(ret == DISPLAY_SUCCESS);
EXPECT_NE(inBuffer, nullptr);
EXPECT_NE(outBuffer, nullptr);
AllocInfo nullInfo;
ret = displayBuffer_->ReAllocMem(nullInfo, *inBuffer, outBuffer);
EXPECT_TRUE(ret != DISPLAY_SUCCESS);
displayBuffer_->FreeMem(*inBuffer);
displayBuffer_->FreeMem(*outBuffer);
}
HWTEST_F(DisplayBufferUt, test_ReAllocMemTest006, TestSize.Level1)
{
int ret;
AllocInfo info = {
.width = ALLOC_SIZE_1080,
.height = ALLOC_SIZE_1920,
.usage = HBM_USE_MEM_DMA | HBM_USE_CPU_WRITE,
.format = PIXEL_FMT_RGBA_1010102
};
BufferHandle* inBuffer = nullptr;
ret = displayBuffer_->AllocMem(info, inBuffer);
EXPECT_TRUE(ret == DISPLAY_SUCCESS);
EXPECT_NE(inBuffer, nullptr);
BufferHandle* outBuffer = nullptr;
AllocInfo newInfo = {
.width = ALLOC_SIZE_1920,
.height = ALLOC_SIZE_1080,
.usage = HBM_USE_MEM_DMA | Composer::V1_0::HBM_USE_VIDEO_DECODER | Composer::V1_0::HBM_USE_HW_COMPOSER,
.format = PIXEL_FMT_YCBCR_420_P
};
ret = displayBuffer_->ReAllocMem(newInfo, *inBuffer, outBuffer);
EXPECT_TRUE(ret == DISPLAY_SUCCESS);
EXPECT_NE(inBuffer, nullptr);
EXPECT_NE(outBuffer, nullptr);
AllocInfo nullInfo;
ret = displayBuffer_->ReAllocMem(nullInfo, *inBuffer, outBuffer);
EXPECT_TRUE(ret != DISPLAY_SUCCESS);
displayBuffer_->FreeMem(*inBuffer);
displayBuffer_->FreeMem(*outBuffer);
}
HWTEST_F(DisplayBufferUt, test_ReAllocMemTest007, TestSize.Level1)
{
int ret;
AllocInfo info = {
.width = ALLOC_SIZE_1280,
.height = ALLOC_SIZE_1920,
.usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
.format = PIXEL_FMT_YCBCR_420_P
};
BufferHandle* inBuffer = nullptr;
ret = displayBuffer_->AllocMem(info, inBuffer);
EXPECT_TRUE(ret == DISPLAY_SUCCESS);
EXPECT_NE(inBuffer, nullptr);
BufferHandle* outBuffer = nullptr;
AllocInfo newInfo = {
.width = ALLOC_SIZE_1080,
.height = ALLOC_SIZE_1920,
.usage = HBM_USE_MEM_DMA | HBM_USE_CPU_WRITE,
.format = PIXEL_FMT_RGBA_1010102
};
ret = displayBuffer_->ReAllocMem(newInfo, *inBuffer, outBuffer);
EXPECT_TRUE(ret == DISPLAY_SUCCESS);
EXPECT_NE(inBuffer, nullptr);
EXPECT_NE(outBuffer, nullptr);
AllocInfo nullInfo;
ret = displayBuffer_->ReAllocMem(nullInfo, *inBuffer, outBuffer);
EXPECT_TRUE(ret != DISPLAY_SUCCESS);
displayBuffer_->FreeMem(*inBuffer);
displayBuffer_->FreeMem(*outBuffer);
}
int32_t DisplayBufferUt::PassthroughTest(AllocInfo& info)
{
int ret;
BufferHandle *buffer = nullptr;
ret = displayBuffer_->AllocMem(info, buffer);
if (ret == DISPLAY_NOT_SUPPORT) {
HDF_LOGE("%{public}s: AllocMem not support, ret=%{public}d", __func__, ret);
return DISPLAY_SUCCESS;
}
if (ret != DISPLAY_SUCCESS || buffer == nullptr) {
HDF_LOGE("AllocMem failed");
return ret;
}
displayBuffer_->FreeMem(*buffer);
return DISPLAY_SUCCESS;
}
HWTEST_F(DisplayBufferUt, test_PassthroughTest001, TestSize.Level1)
{
AllocInfo info = {
.width = ALLOC_SIZE_1080,
.height = ALLOC_SIZE_1920,
.usage = TEST_INFO,
.format = PIXEL_FMT_YCBCR_420_P
};
int ret = PassthroughTest(info);
ASSERT_TRUE(ret == DISPLAY_SUCCESS);
}
HWTEST_F(DisplayBufferUt, test_PassthroughTest002, TestSize.Level1)
{
AllocInfo info = {
.width = ALLOC_SIZE_1080,
.height = ALLOC_SIZE_1920,
.usage = HBM_USE_MEM_DMA | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
.format = PIXEL_FMT_BGRX_8888
};
int ret = PassthroughTest(info);
ASSERT_TRUE(ret == DISPLAY_SUCCESS);
}
HWTEST_F(DisplayBufferUt, test_PassthroughTest003, TestSize.Level1)
{
AllocInfo info = {
.width = ALLOC_SIZE_1080,
.height = ALLOC_SIZE_1920,
.usage = HBM_USE_CPU_HW_BOTH | HBM_USE_CPU_READ | HBM_USE_CPU_WRITE,
.format = PIXEL_FMT_RGBA_4444
};
int ret = PassthroughTest(info);
ASSERT_TRUE(ret == DISPLAY_SUCCESS);
}
HWTEST_F(DisplayBufferUt, test_PassthroughTest004, TestSize.Level1)
{
AllocInfo info = {
.width = ALLOC_SIZE_1080,
.height = ALLOC_SIZE_1920,
.usage = HBM_USE_CPU_HW_BOTH | HBM_USE_CPU_WRITE,
.format = PIXEL_FMT_RGBA_1010102
};
int ret = PassthroughTest(info);
ASSERT_TRUE(ret == DISPLAY_SUCCESS);
}
HWTEST_F(DisplayBufferUt, test_PassthroughTest005, TestSize.Level1)
{
AllocInfo info = {
.width = ALLOC_SIZE_1080,
.height = ALLOC_SIZE_1920,
.usage = HBM_USE_MEM_DMA | HBM_USE_CPU_WRITE,
.format = PIXEL_FMT_RGBA_1010102
};
int ret = PassthroughTest(info);
ASSERT_TRUE(ret == DISPLAY_SUCCESS);
}
}
}
}
}