~afrantzis/mir/offscreen-display-wip

« back to all changes in this revision

Viewing changes to tests/integration-tests/graphics/android/test_display_integration.cpp

  • Committer: Tarmac
  • Author(s): Kevin DuBois
  • Date: 2013-11-06 10:43:44 UTC
  • mfrom: (1116.3.65 offscreen-display)
  • Revision ID: tarmac-20131106104344-624ikxb3cx98t25q
android: clean up mga::DisplayBuffer and mga::DisplayBufferFactory

Our construction of mga::Display was not suitable for android multimonitor, plus our tests in this area were tangled.

Approved by Alan Griffiths, Alexandros Frantzis, Daniel van Vugt, PS Jenkins bot.

Show diffs side-by-side

added added

removed removed

Lines of Context:
19
19
#include "mir/graphics/buffer_initializer.h"
20
20
#include "mir/graphics/display_buffer.h"
21
21
#include "src/server/graphics/android/android_display.h"
22
 
#include "src/server/graphics/android/hwc10_device.h"
23
 
#include "src/server/graphics/android/hwc11_device.h"
24
 
#include "src/server/graphics/android/hwc_layerlist.h"
25
 
#include "src/server/graphics/android/hwc_vsync.h"
26
22
#include "src/server/graphics/android/resource_factory.h"
27
23
#include "src/server/graphics/android/android_graphic_buffer_allocator.h"
28
24
#include "src/server/graphics/android/display_buffer_factory.h"
29
 
#include "src/server/graphics/android/fb_device.h"
30
25
 
31
26
#include "examples/graphics.h"
32
27
#include "mir_test/draw/android_graphics.h"
35
30
#include <gtest/gtest.h>
36
31
#include <stdexcept>
37
32
 
38
 
#include <hardware/hwcomposer.h>
39
 
 
40
 
namespace mc=mir::compositor;
41
 
namespace geom=mir::geometry;
42
33
namespace mga=mir::graphics::android;
43
34
namespace mg=mir::graphics;
44
35
namespace md=mir::draw;
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);
 
51
    }
62
52
 
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)
65
 
        {
66
 
            run_hwc11_tests = true;
67
 
        }
68
 
        if (hwc_device->common.version == HWC_DEVICE_API_VERSION_1_0)
69
 
        {
70
 
            run_hwc10_tests = true;
71
 
        }
 
53
    static void TearDownTestCase()
 
54
    {
 
55
        display_resource_factory.reset();
72
56
    }
73
57
 
74
58
    md::glAnimationBasic gl_animation;
75
59
 
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;
82
61
};
83
62
 
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;
90
64
}
91
65
 
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)
94
67
{
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);
100
 
 
101
 
    display->for_each_display_buffer([this](mg::DisplayBuffer& buffer)
102
 
    {
103
 
        buffer.make_current();
104
 
        gl_animation.init_gl();
105
 
 
106
 
        gl_animation.render_gl();
107
 
        buffer.post_update();
108
 
 
109
 
        gl_animation.render_gl();
110
 
        buffer.post_update();
111
 
    });
112
 
}
113
 
 
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;}
120
 
 
121
 
TEST_F(AndroidGPUDisplay, hwc10_ok_with_gles)
122
 
{
123
 
    SUCCEED_IF_NO_HWC10_SUPPORT();
124
 
 
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);
129
 
 
130
 
    display->for_each_display_buffer([this](mg::DisplayBuffer& buffer)
131
 
    {
132
 
        buffer.make_current();
133
 
        gl_animation.init_gl();
134
 
 
135
 
        gl_animation.render_gl();
136
 
        buffer.post_update();
137
 
 
138
 
        gl_animation.render_gl();
139
 
        buffer.post_update();
140
 
    });
141
 
}
142
 
 
143
 
TEST_F(AndroidGPUDisplay, hwc11_ok_with_gles)
144
 
{
145
 
    SUCCEED_IF_NO_HWC11_SUPPORT();
146
 
 
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);
151
 
 
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);
 
72
 
 
73
    mga::AndroidDisplay display(display_buffer_factory, mock_display_report);
 
74
    display.for_each_display_buffer([this](mg::DisplayBuffer& buffer)
 
75
    {
 
76
        buffer.make_current();
 
77
        gl_animation.init_gl();
 
78
 
 
79
        gl_animation.render_gl();
 
80
        buffer.post_update();
 
81
 
 
82
        gl_animation.render_gl();
 
83
        buffer.post_update();
 
84
    });
 
85
}
 
86
 
 
87
TEST_F(AndroidGPUDisplay, hwc_display_ok_with_gles)
 
88
{
 
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);
 
93
 
 
94
    mga::AndroidDisplay display(display_buffer_factory, mock_display_report);
 
95
    display.for_each_display_buffer([this](mg::DisplayBuffer& buffer)
153
96
    {
154
97
        buffer.make_current();
155
98
        gl_animation.init_gl();