6 #define WL_HIDE_DEPRECATED
7 #include <wayland-client.h>
8 #include <wayland-tbm-client.h>
9 #include <wayland-tbm-int.h>
11 #include <tbm_surface.h>
12 #include <tbm_surface_queue.h>
13 #include <tbm_surface_internal.h>
15 #include "wayland-tbm-test-client-protocol.h"
17 #define WL_APP_LOG(fmt, ...) fprintf(stderr, "[CLIENT(%d):%s] " fmt, getpid(), __func__, ##__VA_ARGS__)
18 #define WL_APP_CHECK(cond) {\
20 WL_APP_LOG("[%s:%d] : '%s' failed.\n", __FUNCTION__, __LINE__, #cond);\
25 struct wl_display *dpy;
26 struct wayland_tbm_client *tbm_client;
27 struct wl_tbm_test *wl_tbm_test;
31 static AppInfoClient gApp;
34 _wl_registry_global_cb(void *data,
35 struct wl_registry *wl_registry,
37 const char *interface,
40 AppInfoClient *app = (AppInfoClient *)data;
42 if (!strcmp(interface, "wl_tbm_test")) {
43 WL_APP_LOG("bind %s", interface);
44 app->wl_tbm_test = wl_registry_bind(wl_registry, name,
45 &wl_tbm_test_interface, 1);
50 _wl_registry_global_remove_cb(void *data,
51 struct wl_registry *wl_registry,
56 static const struct wl_registry_listener wl_registry_impl = {
57 _wl_registry_global_cb,
58 _wl_registry_global_remove_cb,
61 static int test_01(AppInfoClient* app);
62 static int test_02(AppInfoClient* app);
63 static int test_03(AppInfoClient* app);
64 static int test_04(AppInfoClient* app);
65 static int test_05(AppInfoClient* app);
66 static int test_06(AppInfoClient* app);
69 main(int argc, char *argv[])
71 const char *default_dpy_name = "queue";
72 struct wl_registry *registry;
73 const char *dpy_name = NULL;
78 dpy_name = default_dpy_name;
80 gApp.dpy = wl_display_connect(dpy_name);
82 printf("[APP] failed to connect server\n");
86 registry = wl_display_get_registry(gApp.dpy);
87 wl_registry_add_listener(registry, &wl_registry_impl, &gApp);
88 wl_display_roundtrip(gApp.dpy);
89 if (gApp.wl_tbm_test == NULL) {
90 WL_APP_LOG("fail to bind::wl_tbm_test");
94 gApp.tbm_client = wayland_tbm_client_init(gApp.dpy);
95 if (!gApp.tbm_client) {
96 WL_APP_LOG("fail to wayland_tbm_client_init()\n");
99 gApp.bufmgr = tbm_bufmgr_init(-1);
100 tbm_bufmgr_debug_show(gApp.bufmgr);
112 tbm_bufmgr_debug_show(gApp.bufmgr);
113 tbm_bufmgr_deinit(gApp.bufmgr);
119 print_mem_info(AppInfoClient* app, char *str)
121 WL_APP_LOG("## %s ##\n", str);
122 tbm_bufmgr_debug_show(app->bufmgr);
129 test_01(AppInfoClient* app)
131 struct wl_test_surface* surface;
132 tbm_surface_queue_h surface_queue;
133 tbm_surface_h buffer = NULL;
135 surface = wl_tbm_test_create_surface(app->wl_tbm_test);
136 surface_queue = wayland_tbm_client_create_surface_queue(app->tbm_client,
137 (struct wl_surface*)surface,
138 3, 100, 100, TBM_FORMAT_ABGR8888);
140 tbm_surface_queue_dequeue(surface_queue, &buffer);
141 WL_APP_CHECK(buffer != NULL);
142 tbm_surface_queue_enqueue(surface_queue, buffer);
143 tbm_surface_queue_dequeue(surface_queue, &buffer);
144 WL_APP_CHECK(buffer != NULL);
145 tbm_surface_queue_enqueue(surface_queue, buffer);
147 tbm_surface_queue_destroy(surface_queue);
148 wl_test_surface_destroy(surface);
149 wl_display_roundtrip(app->dpy);
151 print_mem_info(app, "TEST_01");
157 test_02(AppInfoClient* app)
159 struct wl_test_surface* surface;
160 tbm_surface_queue_h surface_queue;
161 tbm_surface_h buffer = NULL;
163 surface = wl_tbm_test_create_surface(app->wl_tbm_test);
164 surface_queue = wayland_tbm_client_create_surface_queue(app->tbm_client,
165 (struct wl_surface*)surface,
166 3, 100, 100, TBM_FORMAT_ABGR8888);
168 tbm_surface_queue_dequeue(surface_queue, &buffer);
169 WL_APP_CHECK(buffer != NULL);
170 tbm_surface_queue_dequeue(surface_queue, &buffer);
171 WL_APP_CHECK(buffer != NULL);
173 tbm_surface_queue_destroy(surface_queue);
174 wl_test_surface_destroy(surface);
175 wl_display_roundtrip(app->dpy);
177 print_mem_info(app, "TEST_02");
183 test_03(AppInfoClient* app)
185 struct wl_test_surface* surface;
186 tbm_surface_queue_h surface_queue;
187 tbm_surface_h buffer = NULL;
189 surface = wl_tbm_test_create_surface(app->wl_tbm_test);
190 surface_queue = wayland_tbm_client_create_surface_queue(app->tbm_client,
191 (struct wl_surface*)surface,
192 3, 100, 100, TBM_FORMAT_ABGR8888);
194 tbm_surface_queue_dequeue(surface_queue, &buffer);
195 WL_APP_CHECK(buffer != NULL);
196 tbm_surface_queue_dequeue(surface_queue, &buffer);
197 WL_APP_CHECK(buffer != NULL);
199 tbm_surface_queue_reset(surface_queue, 200, 200, TBM_FORMAT_ABGR8888);
201 tbm_surface_queue_destroy(surface_queue);
202 wl_test_surface_destroy(surface);
203 wl_display_roundtrip(app->dpy);
205 print_mem_info(app, "TEST_03");
211 test_04(AppInfoClient* app)
213 struct wl_test_surface* surface;
214 tbm_surface_queue_h surface_queue;
215 tbm_surface_h buffer = NULL;
217 surface = wl_tbm_test_create_surface(app->wl_tbm_test);
218 surface_queue = wayland_tbm_client_create_surface_queue(app->tbm_client,
219 (struct wl_surface*)surface,
220 3, 100, 100, TBM_FORMAT_ABGR8888);
222 tbm_surface_queue_dequeue(surface_queue, &buffer);
223 WL_APP_CHECK(buffer != NULL);
224 tbm_surface_queue_dequeue(surface_queue, &buffer);
225 WL_APP_CHECK(buffer != NULL);
227 tbm_surface_queue_reset(surface_queue, 200, 200, TBM_FORMAT_ABGR8888);
228 tbm_surface_queue_dequeue(surface_queue, &buffer);
229 WL_APP_CHECK(buffer != NULL);
230 tbm_surface_queue_enqueue(surface_queue, buffer);
231 tbm_surface_queue_dequeue(surface_queue, &buffer);
232 WL_APP_CHECK(buffer != NULL);
233 tbm_surface_internal_ref(buffer);
235 tbm_surface_queue_destroy(surface_queue);
236 wl_test_surface_destroy(surface);
237 wl_display_roundtrip(app->dpy);
239 print_mem_info(app, "TEST_04");
240 tbm_surface_internal_unref(buffer);
241 print_mem_info(app, "TEST_04_final");
247 test_05(AppInfoClient* app)
249 struct wl_test_surface* surface;
250 tbm_surface_queue_h surface_queue;
251 tbm_surface_h buffer = NULL;
252 struct wl_buffer* wl_buffer;
254 surface = wl_tbm_test_create_surface(app->wl_tbm_test);
255 surface_queue = wayland_tbm_client_create_surface_queue(app->tbm_client,
256 (struct wl_surface*)surface,
257 3, 100, 100, TBM_FORMAT_ABGR8888);
259 tbm_surface_queue_dequeue(surface_queue, &buffer);
260 WL_APP_CHECK(buffer != NULL);
262 wl_buffer = wayland_tbm_client_create_buffer(app->tbm_client, buffer);
263 wl_test_surface_attach(surface, wl_buffer);
264 wl_display_roundtrip(app->dpy);
266 tbm_surface_queue_destroy(surface_queue);
267 wl_test_surface_destroy(surface);
268 wl_display_roundtrip(app->dpy);
270 print_mem_info(app, "TEST_05");
276 test_06(AppInfoClient* app)
278 struct wl_test_surface* surface;
279 tbm_surface_queue_h surface_queue;
282 surface = wl_tbm_test_create_surface(app->wl_tbm_test);
283 surface_queue = wayland_tbm_client_create_surface_queue(app->tbm_client,
284 (struct wl_surface*)surface,
285 3, 100, 100, TBM_FORMAT_ABGR8888);
287 wl_tbm_test_set_active_queue(app->wl_tbm_test, surface);
288 wl_display_roundtrip(app->dpy);
290 tbm_surface_queue_destroy(surface_queue);
291 wl_test_surface_destroy(surface);
292 wl_display_roundtrip(app->dpy);
294 print_mem_info(app, "TEST_06");