2 #include "mockclient.h"
3 #include "mockcompositor.h"
4 #include <libds-tizen/renderer.h>
5 #include <tizen-extension-client-protocol.h>
7 #define TIZEN_RENDERER_VERSION 1
9 class MockRendererCompositor : public MockCompositor
12 MockRendererCompositor()
13 : MockCompositor(&MockRendererCompositor::TestSetup, this)
15 ds_inf("%s : this(%p)", __func__, this);
17 // initialize the flags to check
18 bSurfaceDestroyed = false;
21 bGetRendererSurface = false;
22 bDestroyRendererInfo = false;
25 ~MockRendererCompositor()
27 ds_inf("%s : this(%p)", __func__, this);
30 static void TestSetup(void *data)
32 MockRendererCompositor *mockComp =
33 static_cast<MockRendererCompositor *>(data);
34 Compositor *comp = mockComp->compositor;
36 ds_inf("%s: mockComp(%p)", __func__, mockComp);
38 // new surface listener
39 mockComp->mNewSurfaceListener.notify =
40 MockRendererCompositor::NewSurfaceCallback;
41 mockComp->mNewSurfaceListener.parent = mockComp;
42 ds_compositor_add_new_surface_listener(comp->compositor,
43 &mockComp->mNewSurfaceListener);
46 ds_tizen_renderer_create(comp->display);
49 mockComp->mDestroyListener.notify =
50 MockRendererCompositor::DestroyCallback;
51 mockComp->mDestroyListener.parent = mockComp;
52 ds_tizen_renderer_add_destroy_listener(mockComp->mRenderer,
53 &mockComp->mDestroyListener);
55 // get_flusher_info listener
56 mockComp->mGetFlusherInfoListener.notify =
57 MockRendererCompositor::GetRendererSurfaceCallback;
58 mockComp->mGetFlusherInfoListener.parent = mockComp;
59 ds_tizen_renderer_add_get_renderer_surface_info_listener(
61 &mockComp->mGetFlusherInfoListener);
64 static void NewSurfaceCallback(struct wl_listener *listener, void *data)
66 MockRendererCompositor *mockComp =
67 reinterpret_cast<NewSurfaceListener *>(listener)->parent;
68 struct ds_surface *surface = static_cast<struct ds_surface *>(data);
70 ds_inf("%s: mockComp(%p), surface(%p)", __func__, mockComp, surface);
72 mockComp->mSurface = surface;
74 // del surface listener
75 mockComp->mDelSurfaceListener.notify =
76 MockRendererCompositor::DelSurfaceCallback;
77 mockComp->mDelSurfaceListener.parent = mockComp;
78 ds_surface_add_destroy_listener(surface,
79 &mockComp->mDelSurfaceListener);
82 static void DelSurfaceCallback(struct wl_listener *listener, void *data)
84 MockRendererCompositor *mockComp =
85 reinterpret_cast<DelSurfaceListener *>(listener)->parent;
86 struct ds_surface *surface = static_cast<struct ds_surface *>(data);
88 ds_inf("%s: mockComp(%p), surface(%p)", __func__, mockComp, surface);
90 if (ds_surface_get_wl_resource(mockComp->mSurface) ==
91 ds_surface_get_wl_resource(surface)) {
92 ds_inf("%s: surface is deleted.", __func__);
93 mockComp->bSurfaceDestroyed = true;
97 static void DestroyCallback(struct wl_listener *listener, void *data)
99 ds_inf("%s", __func__);
101 MockRendererCompositor *mockComp =
102 reinterpret_cast<DestroyListener *>(listener)->parent;
104 mockComp->bDestroyed = true;
107 static void GetRendererSurfaceCallback(struct wl_listener *listener,
110 ds_inf("%s", __func__);
112 MockRendererCompositor *mockComp =
113 reinterpret_cast<GetFlusherInfoListener *>(listener)->parent;
114 struct ds_tizen_renderer_info *info =
115 static_cast<struct ds_tizen_renderer_info *>(data);
117 ds_inf("%s: mockComp(%p), info(%p)", __func__, mockComp, info);
119 mockComp->bGetRendererSurface = true;
121 mockComp->mInfo = info;
123 ds_tizen_renderer_info_get_surface(mockComp->mInfo);
125 // info destroy listener
126 mockComp->mRendererInfoDestroyListener.notify =
127 MockRendererCompositor::RendererInfoDestroyCallback;
128 mockComp->mRendererInfoDestroyListener.parent = mockComp;
129 ds_tizen_renderer_info_add_destroy_listener(mockComp->mInfo,
130 &mockComp->mRendererInfoDestroyListener);
133 static void RendererInfoDestroyCallback(struct wl_listener *listener,
136 ds_inf("%s", __func__);
138 MockRendererCompositor *mockComp =
139 reinterpret_cast<FlusherInfoDestroyListener *>(listener)->parent;
140 struct ds_tizen_renderer_info *info =
141 static_cast<struct ds_tizen_renderer_info *>(data);
143 ds_inf("%s: mockComp(%p), info(%p)", __func__, mockComp, info);
145 if (mockComp->mInfo == info) {
146 ds_inf("%s: info is deleted.", __func__);
147 mockComp->bDestroyRendererInfo = true;
151 void SendRendererInfoRedraw()
153 ds_inf("%s", __func__);
155 ds_tizen_renderer_info_send_redraw(mInfo);
159 bool bSurfaceDestroyed;
161 bool bGetRendererSurface;
162 bool bDestroyRendererInfo;
165 struct ds_tizen_renderer_info *mInfo;
166 struct ds_surface *mSurface;
168 struct NewSurfaceListener : ::wl_listener {
169 MockRendererCompositor *parent;
171 NewSurfaceListener mNewSurfaceListener;
173 struct DelSurfaceListener : ::wl_listener {
174 MockRendererCompositor *parent;
176 DelSurfaceListener mDelSurfaceListener;
178 struct ds_tizen_renderer *mRenderer;
180 struct DestroyListener : ::wl_listener {
181 MockRendererCompositor *parent;
183 DestroyListener mDestroyListener;
185 struct GetFlusherInfoListener : ::wl_listener {
186 MockRendererCompositor *parent;
188 GetFlusherInfoListener mGetFlusherInfoListener;
190 struct FlusherInfoDestroyListener : ::wl_listener {
191 MockRendererCompositor *parent;
193 FlusherInfoDestroyListener mRendererInfoDestroyListener;
196 class MockRendererClient : public MockClient
200 : bRedrawEvent(false),
201 compositor_res(nullptr),
202 renderer_res(nullptr)
204 MockRendererClient(const struct wl_registry_listener *listener)
205 : MockClient(listener, this)
207 ds_inf("%s", __func__);
209 bRedrawEvent = false;
211 ~MockRendererClient()
213 ds_inf("%s", __func__);
216 void SetWlCompositor(struct wl_compositor *global_res)
218 ds_inf("%s", __func__);
220 compositor_res = global_res;
223 struct wl_compositor *GetWlCompositor()
225 ds_inf("%s", __func__);
227 return compositor_res;
230 void SetTizenRenderer(struct tizen_renderer *resource)
232 ds_inf("%s", __func__);
234 renderer_res = resource;
237 struct tizen_renderer *GetTizenRenderer()
239 ds_inf("%s", __func__);
248 struct wl_compositor *compositor_res;
249 struct tizen_renderer *renderer_res;
253 client_registry_cb_global(void *data, struct wl_registry *registry,
254 uint32_t name, const char *interface, uint32_t version)
256 ds_inf("%s", __func__);
258 MockRendererClient *client = static_cast<MockRendererClient *>(data);
259 struct wl_compositor *compositor_res;
260 struct tizen_renderer *renderer_res;
262 if (!strcmp(interface, "wl_compositor")) {
263 compositor_res = (struct wl_compositor *)wl_registry_bind(registry,
264 name, &wl_compositor_interface, 1);
265 if (compositor_res == nullptr) {
266 ds_err("wl_registry_bind() failed. wl_compositor resource.");
269 client->SetWlCompositor(compositor_res);
270 } else if (!strcmp(interface, "tizen_renderer")) {
271 renderer_res = (struct tizen_renderer *)wl_registry_bind(registry,
272 name, &tizen_renderer_interface, TIZEN_RENDERER_VERSION);
273 if (renderer_res == nullptr) {
274 ds_err("wl_registry_bind() failed. tizen_renderer resource.");
277 client->SetTizenRenderer(renderer_res);
282 client_registry_cb_global_remove(void *data, struct wl_registry *registry,
285 ds_inf("%s", __func__);
287 MockRendererClient *client = static_cast<MockRendererClient *>(data);
288 struct wl_compositor *compositor_res = client->GetWlCompositor();
289 struct tizen_renderer *renderer_res = client->GetTizenRenderer();
291 tizen_renderer_destroy(renderer_res);
292 wl_compositor_destroy(compositor_res);
295 static const struct wl_registry_listener registry_listener = {
296 .global = client_registry_cb_global,
297 .global_remove = client_registry_cb_global_remove
301 client_tizen_renderer_surface_cb_redraw_request(void *data,
302 struct tizen_renderer_surface *renderer_surface_res)
304 ds_inf("%s", __func__);
306 MockRendererClient *client = static_cast<MockRendererClient *>(data);
308 client->bRedrawEvent = true;
312 tizen_renderer_surface_listener renderer_surface_cb_listener = {
313 .redraw_request = client_tizen_renderer_surface_cb_redraw_request,
316 class RendererTest : public ::testing::Test
319 void SetUp(void) override;
320 void TearDown(void) override;
322 MockRendererCompositor *comp;
323 MockRendererClient *client;
324 struct wl_compositor *compositor_res;
325 struct tizen_renderer *renderer_res;
326 struct wl_surface *surface_res;
327 struct tizen_renderer_surface *renderer_surface_res;
331 RendererTest::SetUp(void)
333 //ds_log_init(DS_DBG, NULL);
335 ds_inf("%s", __func__);
337 comp = new MockRendererCompositor();
338 client = new MockRendererClient(®istry_listener);
339 compositor_res = client->GetWlCompositor();
340 renderer_res = client->GetTizenRenderer();
341 surface_res = wl_compositor_create_surface(compositor_res);
343 renderer_surface_res =
344 tizen_renderer_get_renderer_surface(renderer_res, surface_res);
346 tizen_renderer_surface_add_listener(renderer_surface_res,
347 &renderer_surface_cb_listener, client);
353 RendererTest::TearDown(void)
355 ds_inf("%s", __func__);
357 tizen_renderer_surface_destroy(renderer_surface_res);
359 EXPECT_TRUE(comp->bDestroyRendererInfo);
361 wl_surface_destroy(surface_res);
363 EXPECT_TRUE(comp->bSurfaceDestroyed);
369 TEST_F(RendererTest, Create_P)
372 EXPECT_TRUE(comp->bGetRendererSurface);
375 TEST_F(RendererTest, Ev_TizenRendererSurfaceRedraw)
377 comp->SendRendererInfoRedraw();
381 EXPECT_TRUE(client->bRedrawEvent);