From a6f2b24f23daf9267d4d13ad6012798ffcd21d97 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B8rgen=20Lind?= Date: Fri, 28 Jun 2013 15:51:59 +0200 Subject: Update tests so that it does not deadlock still failes though Change-Id: I7978c752b02f32a2e2c587c0ad674c51c5e0ad22 Reviewed-by: Andy Nichols --- tests/auto/client/client.pro | 3 + tests/auto/client/mockcompositor.cpp | 11 +++- tests/auto/client/mockinput.cpp | 2 +- tests/auto/client/mocksurface.cpp | 123 ++++++++++++----------------------- tests/auto/client/mocksurface.h | 27 +++++--- 5 files changed, 73 insertions(+), 93 deletions(-) (limited to 'tests/auto/client') diff --git a/tests/auto/client/client.pro b/tests/auto/client/client.pro index a92aa88b7..895b5c8aa 100644 --- a/tests/auto/client/client.pro +++ b/tests/auto/client/client.pro @@ -10,6 +10,9 @@ QT += core-private gui-private LIBS += -lwayland-client -lwayland-server } +WAYLANDSERVERSOURCES += \ + ../../../src/3rdparty/protocol/wayland.xml + SOURCES += tst_client.cpp \ mockcompositor.cpp \ mockinput.cpp \ diff --git a/tests/auto/client/mockcompositor.cpp b/tests/auto/client/mockcompositor.cpp index d25f90565..be44eba7a 100644 --- a/tests/auto/client/mockcompositor.cpp +++ b/tests/auto/client/mockcompositor.cpp @@ -42,6 +42,7 @@ #include "mockcompositor.h" #include "mocksurface.h" +#include MockCompositor::MockCompositor() : m_alive(true) , m_ready(false) @@ -195,7 +196,10 @@ Compositor::Compositor() { wl_list_init(&m_outputResources); - wl_display_add_socket(m_display, 0); + if (wl_display_add_socket(m_display, 0)) { + fprintf(stderr, "Fatal: Failed to open server socket\n"); + exit(EXIT_FAILURE); + } wl_seat_init(&m_seat); wl_pointer_init(&m_pointer); @@ -204,11 +208,13 @@ Compositor::Compositor() wl_seat_set_keyboard(&m_seat, &m_keyboard); wl_display_add_global(m_display, &wl_compositor_interface, this, bindCompositor); + + wl_display_init_shm(m_display); + wl_display_add_global(m_display, &wl_seat_interface, this, bindSeat); wl_display_add_global(m_display, &wl_output_interface, this, bindOutput); wl_display_add_global(m_display, &wl_shell_interface, this, bindShell); - wl_display_init_shm(m_display); m_loop = wl_display_get_event_loop(m_display); m_fd = wl_event_loop_get_fd(m_loop); @@ -223,6 +229,7 @@ Compositor::~Compositor() void Compositor::dispatchEvents(int timeout) { + wl_display_flush_clients(m_display); wl_event_loop_dispatch(m_loop, timeout); } diff --git a/tests/auto/client/mockinput.cpp b/tests/auto/client/mockinput.cpp index 50c8b764c..a5b46bf6e 100644 --- a/tests/auto/client/mockinput.cpp +++ b/tests/auto/client/mockinput.cpp @@ -142,7 +142,7 @@ static wl_surface *resolveSurface(const QVariant &v) { QSharedPointer mockSurface = v.value >(); Surface *surface = mockSurface ? mockSurface->handle() : 0; - return surface ? surface->handle() : 0; + return surface ? surface->base() : 0; } void Compositor::setKeyboardFocus(void *data, const QList ¶meters) diff --git a/tests/auto/client/mocksurface.cpp b/tests/auto/client/mocksurface.cpp index 49b672f9d..24ac30dd7 100644 --- a/tests/auto/client/mocksurface.cpp +++ b/tests/auto/client/mocksurface.cpp @@ -44,123 +44,86 @@ namespace Impl { -void destroy_surface(wl_resource *resource) +Surface::Surface(wl_client *client, uint32_t id, Compositor *compositor) + : QtWaylandServer::wl_surface(client, &base()->resource, id) + , m_compositor(compositor) + , m_mockSurface(new MockSurface(this)) { - Surface *surface = static_cast(resource->data); - surface->compositor()->removeSurface(surface); - delete surface; + wl_list_init(&m_frameCallbackList); +} + +Surface::~Surface() +{ + m_mockSurface->m_surface = 0; } -static void surface_destroy(wl_client *, wl_resource *surfaceResource) +void Surface::surface_destroy_resource(Resource *) { - wl_resource_destroy(surfaceResource); + compositor()->removeSurface(this); + delete this; } -void surface_attach(wl_client *client, wl_resource *surfaceResource, - wl_resource *buffer, int x, int y) +void Surface::surface_destroy(Resource *resource) { - Q_UNUSED(client); + wl_resource_destroy(resource->handle); +} + +void Surface::surface_attach(Resource *resource, + struct wl_resource *buffer, int x, int y) +{ + Q_UNUSED(resource); Q_UNUSED(x); Q_UNUSED(y); - - Surface *surface = static_cast(surfaceResource->data); - surface->m_buffer = buffer ? static_cast(buffer->data) : 0; + m_buffer = buffer ? static_cast(buffer->data) : 0; if (!buffer) - surface->m_mockSurface->image = QImage(); + m_mockSurface->image = QImage(); } -void surface_damage(wl_client *client, wl_resource *surfaceResource, - int32_t x, int32_t y, int32_t width, int32_t height) +void Surface::surface_damage(Resource *resource, + int32_t x, int32_t y, int32_t width, int32_t height) { - Q_UNUSED(client); + Q_UNUSED(resource); Q_UNUSED(x); Q_UNUSED(y); Q_UNUSED(width); Q_UNUSED(height); - Surface *surface = static_cast(surfaceResource->data); - wl_buffer *buffer = surface->m_buffer; - - if (!buffer) + if (!m_buffer) return; - if (wl_buffer_is_shm(buffer)) { - int stride = wl_shm_buffer_get_stride(buffer); - uint format = wl_shm_buffer_get_format(buffer); - (void) format; - void *data = wl_shm_buffer_get_data(buffer); + if (wl_buffer_is_shm(m_buffer)) { + int stride = wl_shm_buffer_get_stride(m_buffer); + uint format = wl_shm_buffer_get_format(m_buffer); + Q_UNUSED(format); + void *data = wl_shm_buffer_get_data(m_buffer); const uchar *char_data = static_cast(data); - QImage img(char_data, buffer->width, buffer->height, stride, QImage::Format_ARGB32_Premultiplied); - surface->m_mockSurface->image = img; + QImage img(char_data, m_buffer->width, m_buffer->height, stride, QImage::Format_ARGB32_Premultiplied); + m_mockSurface->image = img; } wl_resource *frameCallback; - wl_list_for_each(frameCallback, &surface->m_frameCallbackList, link) { - wl_callback_send_done(frameCallback, surface->m_compositor->time()); + wl_list_for_each(frameCallback, &m_frameCallbackList, link) { + wl_callback_send_done(frameCallback, m_compositor->time()); wl_resource_destroy(frameCallback); } - wl_list_init(&surface->m_frameCallbackList); -} - -void surface_frame(wl_client *client, - wl_resource *surfaceResource, - uint32_t callback) -{ - Surface *surface = static_cast(surfaceResource->data); - wl_resource *frameCallback = wl_client_add_object(client, &wl_callback_interface, 0, callback, surface); - wl_list_insert(&surface->m_frameCallbackList, &frameCallback->link); -} - -void surface_set_opaque_region(wl_client *client, wl_resource *surfaceResource, - wl_resource *region) -{ - Q_UNUSED(client); - Q_UNUSED(surfaceResource); - Q_UNUSED(region); -} - -void surface_set_input_region(wl_client *client, wl_resource *surfaceResource, - wl_resource *region) -{ - Q_UNUSED(client); - Q_UNUSED(surfaceResource); - Q_UNUSED(region); + wl_list_init(&m_frameCallbackList); } -Surface::Surface(wl_client *client, uint32_t id, Compositor *compositor) - : m_surface(wl_surface()) - , m_compositor(compositor) - , m_mockSurface(new MockSurface(this)) +void Surface::surface_frame(Resource *resource, + uint32_t callback) { - static const struct wl_surface_interface surfaceInterface = { - surface_destroy, - surface_attach, - surface_damage, - surface_frame, - surface_set_opaque_region, - surface_set_input_region - }; - - m_surface.resource.object.id = id; - m_surface.resource.object.interface = &wl_surface_interface; - m_surface.resource.object.implementation = (Implementation)&surfaceInterface; - m_surface.resource.data = this; - m_surface.resource.destroy = destroy_surface; - - wl_client_add_resource(client, &m_surface.resource); - - wl_list_init(&m_frameCallbackList); + wl_resource *frameCallback = wl_client_add_object(resource->client(), &wl_callback_interface, 0, callback, this); + wl_list_insert(&m_frameCallbackList, &frameCallback->link); } -Surface::~Surface() +void Surface::surface_commit(Resource *resource) { - m_mockSurface->m_surface = 0; + Q_UNUSED(resource); } } - MockSurface::MockSurface(Impl::Surface *surface) : m_surface(surface) { diff --git a/tests/auto/client/mocksurface.h b/tests/auto/client/mocksurface.h index 74014fcd3..09df344b6 100644 --- a/tests/auto/client/mocksurface.h +++ b/tests/auto/client/mocksurface.h @@ -40,37 +40,44 @@ ****************************************************************************/ #include -#include + +#include + +#include "qwayland-server-wayland.h" #include "mockcompositor.h" namespace Impl { -class Surface +class Surface : public QtWayland::Object, public QtWaylandServer::wl_surface { public: Surface(wl_client *client, uint32_t id, Compositor *compositor); ~Surface(); Compositor *compositor() const { return m_compositor; } - wl_surface *handle() { return &m_surface; } QSharedPointer mockSurface() const { return m_mockSurface; } +protected: + + void surface_destroy_resource(Resource *resource) Q_DECL_OVERRIDE; + + void surface_destroy(Resource *resource) Q_DECL_OVERRIDE; + void surface_attach(Resource *resource, + struct wl_resource *buffer, int x, int y) Q_DECL_OVERRIDE; + void surface_damage(Resource *resource, + int32_t x, int32_t y, int32_t width, int32_t height) Q_DECL_OVERRIDE; + void surface_frame(Resource *resource, + uint32_t callback) Q_DECL_OVERRIDE; + void surface_commit(Resource *resource) Q_DECL_OVERRIDE; private: - wl_surface m_surface; wl_buffer *m_buffer; Compositor *m_compositor; QSharedPointer m_mockSurface; wl_list m_frameCallbackList; - - friend void surface_attach(wl_client *client, wl_resource *surface, - wl_resource *buffer, int x, int y); - friend void surface_damage(wl_client *client, wl_resource *surface, - int32_t x, int32_t y, int32_t width, int32_t height); - friend void surface_frame(wl_client *client, wl_resource *surface, uint32_t callback); }; } -- cgit v1.2.3