e_server: move the init/deinit of e_explicit_sync
[platform/upstream/enlightenment.git] / src / bin / server / e_server.c
1 #include "e_server_intern.h"
2 #include "e_comp_wl_intern.h"
3 #include "e_comp_wl_data_intern.h"
4 #include "e_comp_wl_input_intern.h"
5 #include "e_comp_wl_shell_intern.h"
6 #include "e_wtz_shell_intern.h"
7 #include "e_comp_wl_tbm_intern.h"
8 #include "e_comp_wl_rsm_intern.h"
9 #include "e_pixmap_intern.h"
10 #include "e_comp_wl_screenshooter_intern.h"
11 #include "e_comp_wl_video_intern.h"
12 #include "e_comp_wl_viewport_intern.h"
13 #include "e_comp_wl_renderer_intern.h"
14 #include "e_presentation_time_intern.h"
15 #include "e_blender_intern.h"
16 #include "e_blur_intern.h"
17 #include "e_foreign_intern.h"
18 #include "e_explicit_sync_intern.h"
19 #include "e_tizen_screen_manager_intern.h"
20
21 typedef struct _E_Server E_Server;
22
23 // TODO: It is removed after server mdoule implementation is doen.
24 //       temporary dummy handle.
25 typedef uint32_t Dummy_Handle;
26 static Dummy_Handle dummy_handle;
27
28 struct _E_Server
29 {
30     struct {
31         Dummy_Handle *wl_data_device_manager_handle;
32         Dummy_Handle *input_handle;
33         Dummy_Handle *shell_handle;
34         Dummy_Handle *wtz_shell_handle;
35         Dummy_Handle *wl_tbm_handle;
36         Dummy_Handle *wl_remote_surface_handle;
37         Dummy_Handle *pixmap_handle;
38         Dummy_Handle *wl_screenshooter_handle;
39         Dummy_Handle *tizen_video_handle;
40         Dummy_Handle *wl_viewport_handle;
41         Dummy_Handle *tizen_render_handle;
42         Dummy_Handle *tizen_move_resizes_handle;
43         Dummy_Handle *wp_presentation_handle;
44         Dummy_Handle *tizen_blender_handle;
45         Dummy_Handle *tizen_blur_manager_handle;
46         Dummy_Handle *tizen_foreign_handle;
47         Dummy_Handle *explicit_sync_handle;
48         E_Tizen_Screen_Manager *tizen_screen_manager;
49     } handles; // feature handles
50 };
51
52 static E_Server *g_server = NULL; // singleton server
53
54 EINTERN Eina_Bool
55 e_server_init(void)
56 {
57    if (g_server) return EINA_TRUE;
58
59    g_server = E_NEW(E_Server, 1);
60    EINA_SAFETY_ON_NULL_RETURN_VAL(g_server, EINA_FALSE);
61
62    if (!e_comp_wl_init())
63      {
64         E_FREE(g_server);
65         return EINA_FALSE;
66      }
67
68    if (e_comp_wl_data_manager_init())
69      e_server_feature_register(E_SERVER_FEATURE_WL_DATA_DEVICE_MANAGER, &dummy_handle);
70    if (e_comp_wl_input_init())
71      e_server_feature_register(E_SERVER_FEATURE_INPUT, &dummy_handle);
72    if (e_comp_wl_shell_init())
73      e_server_feature_register(E_SERVER_FEATURE_SHELL, &dummy_handle);
74    if (e_wtz_shell_init())
75      e_server_feature_register(E_SERVER_FEATURE_WTZ_SHELL, &dummy_handle);
76    if (e_comp_wl_tbm_init())
77      e_server_feature_register(E_SERVER_FEATURE_WL_TBM, &dummy_handle);
78    if (e_comp_wl_remote_surface_init())
79      e_server_feature_register(E_SERVER_FEATURE_WL_REMOTE_SURFACE, &dummy_handle);
80    if (e_pixmap_init())
81      e_server_feature_register(E_SERVER_FEATURE_PIXMAP, &dummy_handle);
82    if (e_comp_wl_screenshooter_init())
83      e_server_feature_register(E_SERVER_FEATURE_WL_SCREENSHOOTER, &dummy_handle);
84    if (e_comp_wl_video_init())
85      e_server_feature_register(E_SERVER_FEATURE_TIZEN_VIDEO, &dummy_handle);
86    if (e_comp_wl_viewport_init())
87      e_server_feature_register(E_SERVER_FEATURE_WL_VIEWPORT, &dummy_handle);
88    if (e_comp_wl_renderer_init())
89      e_server_feature_register(E_SERVER_FEATURE_TIZEN_RENDER, &dummy_handle);
90    if (e_comp_wl_move_resize_init())
91      e_server_feature_register(E_SERVER_FEATURE_TIZEN_MOVE_RESIZE, &dummy_handle);
92    if (e_presentation_time_init())
93      e_server_feature_register(E_SERVER_FEATURE_WP_PRESENTATION, &dummy_handle);
94    if (e_blender_init())
95      e_server_feature_register(E_SERVER_FEATURE_TIZEN_BLENDER, &dummy_handle);
96    if (e_blur_manager_init())
97      e_server_feature_register(E_SERVER_FEATURE_TIZEN_BLUR_MANAGER, &dummy_handle);
98    if (e_foreign_global_init(e_comp_wl->wl.disp))
99      e_server_feature_register(E_SERVER_FEATURE_TIZEN_FOREIGN, &dummy_handle);
100    if (e_explicit_sync_init())
101      e_server_feature_register(E_SERVER_FEATURE_EXPLICIT_SYNC, &dummy_handle);
102
103    e_server_feature_register(E_SERVER_FEATURE_TIZEN_SRCREEN_MANAGER, e_tizen_screen_manager_init());
104
105    return EINA_TRUE;
106 }
107
108 EINTERN void
109 e_server_shutdown(void)
110 {
111    e_explicit_sync_deinit();
112    e_foreign_global_shutdown();
113    e_blur_manager_shutdown();
114    e_blender_shutdown();
115    e_presentation_time_shutdown();
116    e_comp_wl_move_resize_shutdown();
117    e_comp_wl_renderer_shutdown();
118    e_comp_wl_viewport_shutdown();
119    e_comp_wl_video_shutdown();
120    e_comp_wl_screenshooter_shutdown();
121    e_pixmap_shutdown();
122    e_comp_wl_remote_surface_shutdown();
123    e_comp_wl_tbm_shutdown();
124    e_wtz_shell_shutdown();
125    e_comp_wl_shell_shutdown();
126    e_comp_wl_input_shutdown();
127    e_comp_wl_data_manager_shutdown();
128
129    e_comp_wl_shutdown();
130
131    memset(g_server, 0, sizeof(E_Server));
132    E_FREE(g_server);
133 }
134
135 EINTERN void
136 e_server_feature_register(E_SERVER_FEATURE feature, void *handle)
137 {
138    EINA_SAFETY_ON_NULL_RETURN(g_server);
139    EINA_SAFETY_ON_NULL_RETURN(handle);
140
141    switch(feature)
142      {
143        case E_SERVER_FEATURE_WL_DATA_DEVICE_MANAGER:
144          g_server->handles.wl_data_device_manager_handle = handle;
145          break;
146        case E_SERVER_FEATURE_INPUT:
147          g_server->handles.input_handle = handle;
148          break;
149        case E_SERVER_FEATURE_SHELL:
150          g_server->handles.shell_handle = handle;
151          break;
152        case E_SERVER_FEATURE_WTZ_SHELL:
153          g_server->handles.wtz_shell_handle = handle;
154          break;
155        case E_SERVER_FEATURE_WL_TBM:
156          g_server->handles.wl_tbm_handle = handle;
157          break;
158        case E_SERVER_FEATURE_WL_REMOTE_SURFACE:
159          g_server->handles.wl_remote_surface_handle= handle;
160          break;
161        case E_SERVER_FEATURE_PIXMAP:
162          g_server->handles.pixmap_handle = handle;
163          break;
164        case E_SERVER_FEATURE_WL_SCREENSHOOTER:
165          g_server->handles.wl_screenshooter_handle = handle;
166          break;
167        case E_SERVER_FEATURE_TIZEN_VIDEO:
168          g_server->handles.tizen_video_handle = handle;
169          break;
170        case E_SERVER_FEATURE_WL_VIEWPORT:
171          g_server->handles.tizen_video_handle = handle;
172          break;
173        case E_SERVER_FEATURE_TIZEN_RENDER:
174          g_server->handles.tizen_render_handle = handle;
175          break;
176        case E_SERVER_FEATURE_TIZEN_MOVE_RESIZE:
177          g_server->handles.tizen_move_resizes_handle = handle;
178          break;
179        case E_SERVER_FEATURE_WP_PRESENTATION:
180          g_server->handles.wp_presentation_handle = handle;
181          break;
182        case E_SERVER_FEATURE_TIZEN_BLENDER:
183          g_server->handles.tizen_blender_handle = handle;
184          break;
185        case E_SERVER_FEATURE_TIZEN_BLUR_MANAGER:
186          g_server->handles.tizen_blur_manager_handle = handle;
187          break;
188        case E_SERVER_FEATURE_TIZEN_FOREIGN:
189          g_server->handles.tizen_foreign_handle = handle;
190          break;
191        case E_SERVER_FEATURE_EXPLICIT_SYNC:
192          g_server->handles.explicit_sync_handle = handle;
193          break;
194        case E_SERVER_FEATURE_TIZEN_SRCREEN_MANAGER:
195          g_server->handles.tizen_screen_manager = handle;
196          break;
197        default:
198          ERR("Unknown feature(%d) and handle(%p)", feature, handle);
199          break;
200      }
201 }
202
203 EINTERN const void *
204 e_server_feature_handle_get(E_SERVER_FEATURE feature)
205 {
206    const void *handle = NULL;
207
208    EINA_SAFETY_ON_NULL_RETURN_VAL(g_server, NULL);
209
210    switch(feature)
211      {
212        case E_SERVER_FEATURE_WL_DATA_DEVICE_MANAGER:
213          handle = g_server->handles.wl_data_device_manager_handle;
214          break;
215        case E_SERVER_FEATURE_INPUT:
216          handle = g_server->handles.input_handle;
217          break;
218        case E_SERVER_FEATURE_SHELL:
219          handle = g_server->handles.shell_handle;
220          break;
221        case E_SERVER_FEATURE_WTZ_SHELL:
222          handle = g_server->handles.wtz_shell_handle;
223          break;
224        case E_SERVER_FEATURE_WL_TBM:
225          handle = g_server->handles.wl_tbm_handle;
226          break;
227        case E_SERVER_FEATURE_WL_REMOTE_SURFACE:
228          handle = g_server->handles.wl_remote_surface_handle;
229          break;
230        case E_SERVER_FEATURE_PIXMAP:
231          handle = g_server->handles.pixmap_handle;
232          break;
233        case E_SERVER_FEATURE_WL_SCREENSHOOTER:
234          handle = g_server->handles.wl_screenshooter_handle;
235          break;
236        case E_SERVER_FEATURE_TIZEN_VIDEO:
237          handle = g_server->handles.tizen_video_handle;
238          break;
239        case E_SERVER_FEATURE_WL_VIEWPORT:
240          handle = g_server->handles.tizen_video_handle;
241          break;
242        case E_SERVER_FEATURE_TIZEN_RENDER:
243          handle = g_server->handles.tizen_render_handle;
244          break;
245        case E_SERVER_FEATURE_TIZEN_MOVE_RESIZE:
246          handle = g_server->handles.tizen_move_resizes_handle;
247          break;
248        case E_SERVER_FEATURE_WP_PRESENTATION:
249          handle = g_server->handles.wp_presentation_handle;
250          break;
251        case E_SERVER_FEATURE_TIZEN_BLENDER:
252          handle = g_server->handles.tizen_blender_handle;
253          break;
254        case E_SERVER_FEATURE_TIZEN_BLUR_MANAGER:
255          handle = g_server->handles.tizen_blur_manager_handle;
256          break;
257        case E_SERVER_FEATURE_TIZEN_FOREIGN:
258          handle = g_server->handles.tizen_foreign_handle;
259          break;
260        case E_SERVER_FEATURE_EXPLICIT_SYNC:
261          handle = g_server->handles.explicit_sync_handle;
262          break;
263        case E_SERVER_FEATURE_TIZEN_SRCREEN_MANAGER:
264          handle = g_server->handles.tizen_screen_manager;
265          break;
266        default:
267          ERR("Unknown feature(%d)", feature);
268          break;
269      }
270
271    return handle;
272 }