Merge changes Ic0d7b4d2,I3441e630,Ie504e687 into rvc-dev

* changes:
  gralloc4-vts: Test metadata is consistent in cloned buffers
  gralloc4-vts: Test layout and component info of RAW12
  gralloc4-vts: Test layout and component info of RAW10
This commit is contained in:
TreeHugger Robot 2020-06-15 03:25:50 +00:00 committed by Android (Google) Code Review
commit 2e5dd7ab32

View file

@ -605,6 +605,9 @@ TEST_P(GraphicsMapperHidlTest, LockUnlockBasic) {
ASSERT_NO_FATAL_FAILURE(fence.reset(mGralloc->unlock(bufferHandle)));
}
/**
* Test multiple operations associated with different color formats
*/
TEST_P(GraphicsMapperHidlTest, Lock_YCRCB_420_SP) {
auto info = mDummyDescriptorInfo;
info.format = PixelFormat::YCRCB_420_SP;
@ -751,6 +754,90 @@ TEST_P(GraphicsMapperHidlTest, Lock_YCBCR_420_888) {
ASSERT_NO_FATAL_FAILURE(fence.reset(mGralloc->unlock(bufferHandle)));
}
TEST_P(GraphicsMapperHidlTest, Lock_RAW10) {
auto info = mDummyDescriptorInfo;
info.format = PixelFormat::RAW10;
const native_handle_t* bufferHandle;
uint32_t stride;
ASSERT_NO_FATAL_FAILURE(bufferHandle = mGralloc->allocate(
info, true, Tolerance::kToleranceUnSupported, &stride));
if (bufferHandle == nullptr) {
GTEST_SUCCEED() << "RAW10 format is unsupported";
return;
}
const IMapper::Rect region{0, 0, static_cast<int32_t>(info.width),
static_cast<int32_t>(info.height)};
unique_fd fence;
ASSERT_NO_FATAL_FAILURE(mGralloc->lock(bufferHandle, info.usage, region, fence.get()));
hidl_vec<uint8_t> vec;
ASSERT_EQ(Error::NONE, mGralloc->get(bufferHandle, gralloc4::MetadataType_PlaneLayouts, &vec));
std::vector<PlaneLayout> planeLayouts;
ASSERT_EQ(NO_ERROR, gralloc4::decodePlaneLayouts(vec, &planeLayouts));
ASSERT_EQ(1, planeLayouts.size());
auto planeLayout = planeLayouts[0];
EXPECT_EQ(0, planeLayout.sampleIncrementInBits);
EXPECT_EQ(1, planeLayout.horizontalSubsampling);
EXPECT_EQ(1, planeLayout.verticalSubsampling);
ASSERT_EQ(1, planeLayout.components.size());
auto planeLayoutComponent = planeLayout.components[0];
EXPECT_EQ(PlaneLayoutComponentType::RAW,
static_cast<PlaneLayoutComponentType>(planeLayoutComponent.type.value));
EXPECT_EQ(0, planeLayoutComponent.offsetInBits % 8);
EXPECT_EQ(-1, planeLayoutComponent.sizeInBits);
ASSERT_NO_FATAL_FAILURE(fence.reset(mGralloc->unlock(bufferHandle)));
}
TEST_P(GraphicsMapperHidlTest, Lock_RAW12) {
auto info = mDummyDescriptorInfo;
info.format = PixelFormat::RAW12;
const native_handle_t* bufferHandle;
uint32_t stride;
ASSERT_NO_FATAL_FAILURE(bufferHandle = mGralloc->allocate(
info, true, Tolerance::kToleranceUnSupported, &stride));
if (bufferHandle == nullptr) {
GTEST_SUCCEED() << "RAW12 format is unsupported";
return;
}
const IMapper::Rect region{0, 0, static_cast<int32_t>(info.width),
static_cast<int32_t>(info.height)};
unique_fd fence;
ASSERT_NO_FATAL_FAILURE(mGralloc->lock(bufferHandle, info.usage, region, fence.get()));
hidl_vec<uint8_t> vec;
ASSERT_EQ(Error::NONE, mGralloc->get(bufferHandle, gralloc4::MetadataType_PlaneLayouts, &vec));
std::vector<PlaneLayout> planeLayouts;
ASSERT_EQ(NO_ERROR, gralloc4::decodePlaneLayouts(vec, &planeLayouts));
ASSERT_EQ(1, planeLayouts.size());
auto planeLayout = planeLayouts[0];
EXPECT_EQ(0, planeLayout.sampleIncrementInBits);
EXPECT_EQ(1, planeLayout.horizontalSubsampling);
EXPECT_EQ(1, planeLayout.verticalSubsampling);
ASSERT_EQ(1, planeLayout.components.size());
auto planeLayoutComponent = planeLayout.components[0];
EXPECT_EQ(PlaneLayoutComponentType::RAW,
static_cast<PlaneLayoutComponentType>(planeLayoutComponent.type.value));
EXPECT_EQ(0, planeLayoutComponent.offsetInBits % 8);
EXPECT_EQ(-1, planeLayoutComponent.sizeInBits);
ASSERT_NO_FATAL_FAILURE(fence.reset(mGralloc->unlock(bufferHandle)));
}
/**
* Test IMapper::unlock with bad access region
*/
@ -1706,6 +1793,84 @@ TEST_P(GraphicsMapperHidlTest, SetMetadataNullBuffer) {
mGralloc->set(bufferHandle, gralloc4::MetadataType_Smpte2094_40, vec));
}
/**
* Test get::metadata with cloned native_handle
*/
TEST_P(GraphicsMapperHidlTest, GetMetadataClonedHandle) {
const native_handle_t* bufferHandle = nullptr;
ASSERT_NO_FATAL_FAILURE(bufferHandle = mGralloc->allocate(mDummyDescriptorInfo, true));
const auto dataspace = Dataspace::SRGB_LINEAR;
{
hidl_vec<uint8_t> metadata;
ASSERT_EQ(NO_ERROR, gralloc4::encodeDataspace(dataspace, &metadata));
Error err = mGralloc->set(bufferHandle, gralloc4::MetadataType_Dataspace, metadata);
if (err == Error::UNSUPPORTED) {
GTEST_SUCCEED() << "setting this metadata is unsupported";
return;
}
ASSERT_EQ(Error::NONE, err);
}
const native_handle_t* importedHandle;
{
auto clonedHandle = native_handle_clone(bufferHandle);
ASSERT_NO_FATAL_FAILURE(importedHandle = mGralloc->importBuffer(clonedHandle));
native_handle_close(clonedHandle);
native_handle_delete(clonedHandle);
}
Dataspace realSpace = Dataspace::UNKNOWN;
{
hidl_vec<uint8_t> metadata;
ASSERT_EQ(Error::NONE,
mGralloc->get(importedHandle, gralloc4::MetadataType_Dataspace, &metadata));
ASSERT_NO_FATAL_FAILURE(gralloc4::decodeDataspace(metadata, &realSpace));
}
EXPECT_EQ(dataspace, realSpace);
}
/**
* Test set::metadata with cloned native_handle
*/
TEST_P(GraphicsMapperHidlTest, SetMetadataClonedHandle) {
const native_handle_t* bufferHandle = nullptr;
ASSERT_NO_FATAL_FAILURE(bufferHandle = mGralloc->allocate(mDummyDescriptorInfo, true));
const native_handle_t* importedHandle;
{
auto clonedHandle = native_handle_clone(bufferHandle);
ASSERT_NO_FATAL_FAILURE(importedHandle = mGralloc->importBuffer(clonedHandle));
native_handle_close(clonedHandle);
native_handle_delete(clonedHandle);
}
const auto dataspace = Dataspace::SRGB_LINEAR;
{
hidl_vec<uint8_t> metadata;
ASSERT_EQ(NO_ERROR, gralloc4::encodeDataspace(dataspace, &metadata));
Error err = mGralloc->set(importedHandle, gralloc4::MetadataType_Dataspace, metadata);
if (err == Error::UNSUPPORTED) {
GTEST_SUCCEED() << "setting this metadata is unsupported";
return;
}
ASSERT_EQ(Error::NONE, err);
}
Dataspace realSpace = Dataspace::UNKNOWN;
{
hidl_vec<uint8_t> metadata;
ASSERT_EQ(Error::NONE,
mGralloc->get(bufferHandle, gralloc4::MetadataType_Dataspace, &metadata));
ASSERT_NO_FATAL_FAILURE(gralloc4::decodeDataspace(metadata, &realSpace));
}
EXPECT_EQ(dataspace, realSpace);
}
/**
* Test IMapper::set(metadata) for constant metadata
*/