123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124 |
- // Copyright 2017 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #include <stdint.h>
- #include <vector>
- #include "base/android/android_hardware_buffer_compat.h"
- #include "base/memory/scoped_refptr.h"
- #include "testing/gtest/include/gtest/gtest.h"
- #include "ui/gl/gl_image_ahardwarebuffer.h"
- #include "ui/gl/test/gl_image_bind_test_template.h"
- #include "ui/gl/test/gl_image_test_template.h"
- #include "ui/gl/test/gl_image_zero_initialize_test_template.h"
- namespace gl {
- namespace {
- const uint8_t kGreen[] = {0x0, 0xFF, 0x0, 0xFF};
- template <gfx::BufferFormat format>
- class GLImageAHardwareBufferTestDelegate : public GLImageTestDelegateBase {
- public:
- scoped_refptr<GLImage> CreateSolidColorImage(const gfx::Size& size,
- const uint8_t color[4]) const {
- CHECK(base::AndroidHardwareBufferCompat::IsSupportAvailable());
- // AHardwareBuffer_Desc's stride parameter is in pixels, not in bytes.
- //
- // We can't use the 3-byte-per-pixel AHARDWAREBUFFER_FORMAT_R8G8B8_UNORM
- // format in this test since there's no matching gfx::BufferFormat,
- // gfx::BufferFormat::RGBX_8888 assumes 4 bytes per pixel.
- const int kBytesPerPixel = 4;
- // cf. gpu_memory_buffer_impl_android_hardware_buffer
- AHardwareBuffer_Desc desc = {};
- desc.width = size.width();
- desc.height = size.height();
- desc.layers = 1; // number of images
- desc.usage = AHARDWAREBUFFER_USAGE_GPU_SAMPLED_IMAGE |
- AHARDWAREBUFFER_USAGE_GPU_COLOR_OUTPUT |
- AHARDWAREBUFFER_USAGE_CPU_READ_RARELY |
- AHARDWAREBUFFER_USAGE_CPU_WRITE_RARELY;
- switch (format) {
- case gfx::BufferFormat::RGBA_8888:
- desc.format = AHARDWAREBUFFER_FORMAT_R8G8B8A8_UNORM;
- break;
- case gfx::BufferFormat::RGBX_8888:
- desc.format = AHARDWAREBUFFER_FORMAT_R8G8B8X8_UNORM;
- break;
- default:
- NOTREACHED();
- }
- AHardwareBuffer* buffer = nullptr;
- base::AndroidHardwareBufferCompat::GetInstance().Allocate(&desc, &buffer);
- EXPECT_TRUE(buffer);
- uint8_t* data = nullptr;
- int lock_result = base::AndroidHardwareBufferCompat::GetInstance().Lock(
- buffer, AHARDWAREBUFFER_USAGE_CPU_WRITE_RARELY, -1, nullptr,
- reinterpret_cast<void**>(&data));
- EXPECT_EQ(lock_result, 0);
- EXPECT_TRUE(data);
- AHardwareBuffer_Desc desc_locked = {};
- base::AndroidHardwareBufferCompat::GetInstance().Describe(buffer,
- &desc_locked);
- GLImageTestSupport::SetBufferDataToColor(
- size.width(), size.height(), desc_locked.stride * kBytesPerPixel, 0,
- format, color, data);
- int unlock_result = base::AndroidHardwareBufferCompat::GetInstance().Unlock(
- buffer, nullptr);
- EXPECT_EQ(unlock_result, 0);
- auto image = base::MakeRefCounted<GLImageAHardwareBuffer>(size);
- bool rv = image->Initialize(buffer, /* preserved */ true);
- EXPECT_TRUE(rv);
- return image;
- }
- scoped_refptr<GLImage> CreateImage(const gfx::Size& size) const {
- const uint8_t kTransparentBlack[4] = {0, 0, 0, 0};
- return CreateSolidColorImage(size, kTransparentBlack);
- }
- unsigned GetTextureTarget() const { return GL_TEXTURE_2D; }
- const uint8_t* GetImageColor() { return kGreen; }
- int GetAdmissibleError() const { return 0; }
- };
- using GLImageTestTypes = testing::Types<
- GLImageAHardwareBufferTestDelegate<gfx::BufferFormat::RGBA_8888>,
- GLImageAHardwareBufferTestDelegate<gfx::BufferFormat::RGBX_8888>>;
- using GLImageRGBTestTypes = testing::Types<
- GLImageAHardwareBufferTestDelegate<gfx::BufferFormat::RGBA_8888>>;
- // Disable the tests by default for now since they require Android O,
- // the test bots don't generally have that yet. For manual testing,
- // add: --gtest_also_run_disabled_tests -f 'GLImageAHardwareBuffer/*'
- INSTANTIATE_TYPED_TEST_SUITE_P(DISABLED_GLImageAHardwareBuffer,
- GLImageTest,
- GLImageTestTypes);
- INSTANTIATE_TYPED_TEST_SUITE_P(DISABLED_GLImageAHardwareBuffer,
- GLImageOddSizeTest,
- GLImageTestTypes);
- INSTANTIATE_TYPED_TEST_SUITE_P(DISABLED_GLImageAHardwareBuffer,
- GLImageBindTest,
- GLImageTestTypes);
- INSTANTIATE_TYPED_TEST_SUITE_P(DISABLED_GLImageAHardwareBuffer,
- GLImageZeroInitializeTest,
- GLImageRGBTestTypes);
- } // namespace
- } // namespace gl
|