55
46
per process (repeated framebuffer_{open,close}() doesn't seem to work). once we
56
47
figure out why, we can remove fb_device in the test fixture */
57
48
auto buffer_initializer = std::make_shared<mg::NullBufferInitializer>();
58
buffer_allocator = std::make_shared<mga::AndroidGraphicBufferAllocator>(buffer_initializer);
59
resource_factory = std::make_shared<mga::ResourceFactory>();
60
fb_device = resource_factory->create_fb_native_device();
61
hwc_device = resource_factory->create_hwc_native_device();
49
auto fb_allocator = std::make_shared<mga::AndroidGraphicBufferAllocator>(buffer_initializer);
50
display_resource_factory = std::make_shared<mga::ResourceFactory>(fb_allocator);
63
/* determine hwc11 capable devices so we can skip the hwc11 tests on non supported tests */
64
if (hwc_device->common.version == HWC_DEVICE_API_VERSION_1_1)
66
run_hwc11_tests = true;
68
if (hwc_device->common.version == HWC_DEVICE_API_VERSION_1_0)
70
run_hwc10_tests = true;
53
static void TearDownTestCase()
55
display_resource_factory.reset();
74
58
md::glAnimationBasic gl_animation;
76
static bool run_hwc11_tests;
77
static bool run_hwc10_tests;
78
static std::shared_ptr<mga::AndroidGraphicBufferAllocator> buffer_allocator;
79
static std::shared_ptr<mga::ResourceFactory> resource_factory;
80
static std::shared_ptr<framebuffer_device_t> fb_device;
81
static std::shared_ptr<hwc_composer_device_1> hwc_device;
60
static std::shared_ptr<mga::ResourceFactory> display_resource_factory;
84
std::shared_ptr<mga::AndroidGraphicBufferAllocator> AndroidGPUDisplay::buffer_allocator;
85
std::shared_ptr<mga::ResourceFactory> AndroidGPUDisplay::resource_factory;
86
std::shared_ptr<framebuffer_device_t> AndroidGPUDisplay::fb_device;
87
std::shared_ptr<hwc_composer_device_1> AndroidGPUDisplay::hwc_device;
88
bool AndroidGPUDisplay::run_hwc11_tests;
89
bool AndroidGPUDisplay::run_hwc10_tests;
63
std::shared_ptr<mga::ResourceFactory> AndroidGPUDisplay::display_resource_factory;
92
/* gpu display tests. These are our back-up display modes, and should be run on every device. */
93
66
TEST_F(AndroidGPUDisplay, gpu_display_ok_with_gles)
95
auto mock_display_report = std::make_shared<testing::NiceMock<mtd::MockDisplayReport>>();
96
auto buffer_initializer = std::make_shared<mg::NullBufferInitializer>();
97
auto device = resource_factory->create_fb_device(fb_device);
98
auto fb_swapper = resource_factory->create_fb_buffers(device, buffer_allocator);
99
auto display = resource_factory->create_display(fb_swapper, device, mock_display_report);
101
display->for_each_display_buffer([this](mg::DisplayBuffer& buffer)
103
buffer.make_current();
104
gl_animation.init_gl();
106
gl_animation.render_gl();
107
buffer.post_update();
109
gl_animation.render_gl();
110
buffer.post_update();
114
#define YELLOW "\033[33m"
115
#define RESET "\033[0m"
116
#define SUCCEED_IF_NO_HWC11_SUPPORT() \
117
if(!run_hwc11_tests) { SUCCEED(); std::cout << YELLOW << "--> This device does not have HWC 1.1 support. Skipping test." << RESET << std::endl; return;}
118
#define SUCCEED_IF_NO_HWC10_SUPPORT() \
119
if(!run_hwc10_tests) { SUCCEED(); std::cout << YELLOW << "--> This device does not have HWC 1.0 support. Skipping test." << RESET << std::endl; return;}
121
TEST_F(AndroidGPUDisplay, hwc10_ok_with_gles)
123
SUCCEED_IF_NO_HWC10_SUPPORT();
125
auto mock_display_report = std::make_shared<testing::NiceMock<mtd::MockDisplayReport>>();
126
auto device = resource_factory->create_hwc10_device(hwc_device, fb_device);
127
auto fb_swapper = resource_factory->create_fb_buffers(device, buffer_allocator);
128
auto display = resource_factory->create_display(fb_swapper, device, mock_display_report);
130
display->for_each_display_buffer([this](mg::DisplayBuffer& buffer)
132
buffer.make_current();
133
gl_animation.init_gl();
135
gl_animation.render_gl();
136
buffer.post_update();
138
gl_animation.render_gl();
139
buffer.post_update();
143
TEST_F(AndroidGPUDisplay, hwc11_ok_with_gles)
145
SUCCEED_IF_NO_HWC11_SUPPORT();
147
auto mock_display_report = std::make_shared<testing::NiceMock<mtd::MockDisplayReport>>();
148
auto device = resource_factory->create_hwc11_device(hwc_device);
149
auto fb_swapper = resource_factory->create_fb_buffers(device, buffer_allocator);
150
auto display = resource_factory->create_display(fb_swapper, device, mock_display_report);
152
display->for_each_display_buffer([this](mg::DisplayBuffer& buffer)
68
auto should_use_fb_fallback = true;
69
auto mock_display_report = std::make_shared<testing::NiceMock<mtd::MockDisplayReport>>();
70
auto display_buffer_factory = std::make_shared<mga::DisplayBufferFactory>(
71
display_resource_factory, mock_display_report, should_use_fb_fallback);
73
mga::AndroidDisplay display(display_buffer_factory, mock_display_report);
74
display.for_each_display_buffer([this](mg::DisplayBuffer& buffer)
76
buffer.make_current();
77
gl_animation.init_gl();
79
gl_animation.render_gl();
82
gl_animation.render_gl();
87
TEST_F(AndroidGPUDisplay, hwc_display_ok_with_gles)
89
auto should_use_fb_fallback = false;
90
auto mock_display_report = std::make_shared<testing::NiceMock<mtd::MockDisplayReport>>();
91
auto display_buffer_factory = std::make_shared<mga::DisplayBufferFactory>(
92
display_resource_factory, mock_display_report, should_use_fb_fallback);
94
mga::AndroidDisplay display(display_buffer_factory, mock_display_report);
95
display.for_each_display_buffer([this](mg::DisplayBuffer& buffer)
154
97
buffer.make_current();
155
98
gl_animation.init_gl();