Merge "Allow old gralloc implementations to skip P010 support." into tm-dev

This commit is contained in:
Alec Mouri
2022-04-07 23:33:43 +00:00
committed by Android (Google) Code Review
4 changed files with 46 additions and 25 deletions

View File

@@ -14,7 +14,9 @@
* limitations under the License.
*/
#include <android-base/properties.h>
#include <mapper-vts/3.0/MapperVts.h>
#include "gtest/gtest.h"
namespace android {
namespace hardware {
@@ -94,23 +96,31 @@ std::vector<const native_handle_t*> Gralloc::allocate(const BufferDescriptor& de
std::vector<const native_handle_t*> bufferHandles;
bufferHandles.reserve(count);
mAllocator->allocate(
descriptor, count,
[&](const auto& tmpError, const auto& tmpStride, const auto& tmpBuffers) {
ASSERT_EQ(Error::NONE, tmpError) << "failed to allocate buffers";
ASSERT_EQ(count, tmpBuffers.size()) << "invalid buffer array";
for (uint32_t i = 0; i < count; i++) {
if (import) {
ASSERT_NO_FATAL_FAILURE(bufferHandles.push_back(importBuffer(tmpBuffers[i])));
} else {
ASSERT_NO_FATAL_FAILURE(bufferHandles.push_back(cloneBuffer(tmpBuffers[i])));
descriptor, count,
[&](const auto& tmpError, const auto& tmpStride, const auto& tmpBuffers) {
if (tmpError != Error::NONE) {
if (base::GetIntProperty("ro.vendor.build.version.sdk", 0, 0, INT_MAX) < 33) {
GTEST_SKIP() << "Old vendor grallocs may not support P010";
} else {
GTEST_FAIL() << "failed to allocate buffers";
}
}
}
ASSERT_EQ(count, tmpBuffers.size()) << "invalid buffer array";
if (outStride) {
*outStride = tmpStride;
}
});
for (uint32_t i = 0; i < count; i++) {
if (import) {
ASSERT_NO_FATAL_FAILURE(
bufferHandles.push_back(importBuffer(tmpBuffers[i])));
} else {
ASSERT_NO_FATAL_FAILURE(
bufferHandles.push_back(cloneBuffer(tmpBuffers[i])));
}
}
if (outStride) {
*outStride = tmpStride;
}
});
if (::testing::Test::HasFatalFailure()) {
bufferHandles.clear();
@@ -127,7 +137,7 @@ const native_handle_t* Gralloc::allocate(const IMapper::BufferDescriptorInfo& de
}
auto buffers = allocate(descriptor, 1, import, outStride);
if (::testing::Test::HasFatalFailure()) {
if (::testing::Test::HasFatalFailure() || ::testing::Test::IsSkipped()) {
return nullptr;
}

View File

@@ -337,6 +337,10 @@ TEST_P(GraphicsMapperHidlTest, LockYCbCrP010) {
uint32_t stride;
ASSERT_NO_FATAL_FAILURE(bufferHandle = mGralloc->allocate(info, true, &stride));
if (::testing::Test::IsSkipped()) {
GTEST_SKIP();
}
ASSERT_NE(nullptr, bufferHandle);
const IMapper::Rect region{0, 0, static_cast<int32_t>(info.width),

View File

@@ -14,6 +14,7 @@
* limitations under the License.
*/
#include <android-base/properties.h>
#include <gralloctypes/Gralloc4.h>
#include <mapper-vts/4.0/MapperVts.h>
@@ -95,7 +96,14 @@ std::vector<const native_handle_t*> Gralloc::allocate(const BufferDescriptor& de
return;
}
ASSERT_EQ(Error::NONE, tmpError) << "failed to allocate buffers";
if (tmpError != Error::NONE) {
if (base::GetIntProperty("ro.vendor.build.version.sdk", 0, 0,
INT_MAX) < 33) {
GTEST_SKIP() << "Old vendor grallocs may not support P010";
} else {
GTEST_FAIL() << "failed to allocate buffers";
}
}
ASSERT_EQ(count, tmpBuffers.size()) << "invalid buffer array";
for (uint32_t i = 0; i < count; i++) {
@@ -133,11 +141,7 @@ const native_handle_t* Gralloc::allocate(const IMapper::BufferDescriptorInfo& de
}
auto buffers = allocate(descriptor, 1, import, tolerance, outStride);
if (::testing::Test::HasFatalFailure()) {
return nullptr;
}
if (buffers.size() != 1) {
if (::testing::Test::HasFatalFailure() || ::testing::Test::IsSkipped() || buffers.size() != 1) {
return nullptr;
}
return buffers[0];

View File

@@ -999,10 +999,13 @@ TEST_P(GraphicsMapperHidlTest, Lock_YCBCR_P010) {
auto info = mDummyDescriptorInfo;
info.format = PixelFormat::YCBCR_P010;
const native_handle_t* bufferHandle;
uint32_t stride;
ASSERT_NO_FATAL_FAILURE(
bufferHandle = mGralloc->allocate(info, true, Tolerance::kToleranceStrict, &stride));
const native_handle_t* bufferHandle =
mGralloc->allocate(info, true, Tolerance::kToleranceStrict, &stride);
if (::testing::Test::IsSkipped()) {
GTEST_SKIP();
}
const IMapper::Rect region{0, 0, static_cast<int32_t>(info.width),
static_cast<int32_t>(info.height)};