[FIX] cherry-pick d89d303d37d714ced2d1a9945ae2ea054c5824c0 (#8:3,4,5) + changes
[platform/core/system/swap-probe.git] / probe_badaapi / bada_lifecycle.cpp
1 /*
2  *  DA probe
3  *
4  * Copyright (File::*c) 2000 - 2013 Samsung Electronics Co., Ltd. All rights reserved.
5  *
6  * Contact:
7  *
8  * Jaewon Lim <jaewon81.lim@samsung.com>
9  * Woojin Jung <woojin2.jung@samsung.com>
10  * Juyoung Kim <j0.kim@samsung.com>
11  * Anastasia Lyupa <a.lyupa@samsung.com>
12  *
13  * This library is free software; you can redistribute it and/or modify it under
14  * the terms of the GNU Lesser General Public License as published by the
15  * Free Software Foundation; either version 2.1 of the License, or (at your option)
16  * any later version.
17  *
18  * This library is distributed in the hope that it will be useful, but WITHOUT ANY
19  * WARRANTY; without even the implied warranty of MERCHANTABILITY or
20  * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
21  * License for more details.
22  *
23  * You should have received a copy of the GNU Lesser General Public License
24  * along with this library; if not, write to the Free Software Foundation, Inc., 51
25  * Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
26  *
27  * Contributors:
28  * - S-Core Co., Ltd
29  * - Samsung RnD Institute Russia
30  *
31  */
32
33 #include <app.h>
34 #include <Ecore.h>
35 #include <FApp.h>
36 #include <FBase.h>
37
38 #include "daprobe.h"
39 #include "dahelper.h"
40 #include "probeinfo.h"
41 #include "osp_probe.h"
42
43 #include "binproto.h"
44 extern "C"
45 {
46 Ecore_Event_Handler* register_orientation_event_listener();
47 void unregister_orientation_event_listener(Ecore_Event_Handler* handler);
48 }
49
50 using namespace Tizen::Base;
51 using namespace Tizen::Base::Collection;
52
53 namespace Tizen { namespace App
54 {
55
56 //class _IAppImpl
57 //{
58 //      virtual void OnDeviceOrientationChanged(app_device_orientation_e orientation) = 0;
59 //};
60
61 class _AppImpl
62 {
63         static void OnTerminate(void* user_data);
64 //      static void OnDeviceOrientationChanged(app_device_orientation_e orientation, void* user_data);
65 };
66
67 class _UiAppImpl
68 //      : public Tizen::Base::Object
69 //      , public _IAppImpl
70 {
71         void OnBackground(void);
72         void OnForeground(void);
73 //      virtual void OnDeviceOrientationChanged(app_device_orientation_e orientation);
74 };
75
76 class _AppInfo
77 {
78         static void SetAppState(AppState appstate);
79 };
80
81 result UiApp::Execute(UiAppInstanceFactory pUiAppFactory,
82                 const IList* pArguments)
83 {
84         typedef result (*methodType)(UiAppInstanceFactory pFactory, const IList* pArgs);
85         static methodType uiapp_executep;
86         probeInfo_t     probeInfo;
87         int __attribute__((unused)) ret;
88         Ecore_Event_Handler* handler;
89
90         GET_REAL_FUNC_OSP(_ZN5Tizen3App5UiApp7ExecuteEPFPS1_vEPKNS_4Base10Collection5IListE,
91                 LIBOSP_UIFW, uiapp_executep);
92
93         probeBlockStart();
94         handler = register_orientation_event_listener();
95         if(gTraceInfo.exec_map.map_start == NULL)
96         {
97                 get_map_address(CALLER_ADDRESS, &(gTraceInfo.exec_map.map_start),
98                                                 &(gTraceInfo.exec_map.map_end));
99         }
100         setProbePoint(&probeInfo);
101         probeBlockEnd();
102
103         ret = uiapp_executep(pUiAppFactory, pArguments);
104
105         probeBlockStart();
106
107         PREPARE_LOCAL_BUF();
108         PACK_COMMON_BEGIN(MSG_PROBE_LIFECYCLE,
109                           API_ID_result_UiApp__Execute_UiAppInstanceFactory_pUiAppFactory__const_IList__pArguments_,
110                           "pp", pUiAppFactory, pArguments);
111         PACK_COMMON_END(ret, 0, 0);
112         FLUSH_LOCAL_BUF();
113
114         unregister_orientation_event_listener(handler);
115         probeBlockEnd();
116
117         return ret;
118 }
119
120 void _AppImpl::OnTerminate(void* user_data)
121 {
122         typedef void (*methodType)(void*);
123         static methodType appimpl_onterminatep;
124         probeInfo_t     probeInfo;
125
126         GET_REAL_FUNC_OSP(_ZN5Tizen3App8_AppImpl11OnTerminateEPv, LIBOSP_APPFW, appimpl_onterminatep);
127
128         probeBlockStart();
129         setProbePoint(&probeInfo);
130
131         PREPARE_LOCAL_BUF();
132         PACK_COMMON_BEGIN(MSG_PROBE_LIFECYCLE,
133                           API_ID_void__AppImpl__OnTerminate_void__user_data_,
134                           "p", user_data);
135         PACK_COMMON_END(0, 0, 0);
136         FLUSH_LOCAL_BUF();
137
138         probeBlockEnd();
139
140         appimpl_onterminatep(user_data);
141 }
142 /*
143 void _AppImpl::OnDeviceOrientationChanged(app_device_orientation_e orientation, void* user_data)
144 {
145         typedef void (*methodType)(app_device_orientation_e, void*);
146         static methodType appimpl_ondeviceorientationchangedp;
147
148         GET_REAL_FUNC_OSP(_ZN5Tizen3App8_AppImpl26OnDeviceOrientationChangedE24app_device_orientation_ePv,
149                         LIBOSP_APPFW, appimpl_ondeviceorientationchangedp);
150
151         probeBlockStart();
152         on_orientation_changed((int)orientation, false);
153         probeBlockEnd();
154
155         appimpl_ondeviceorientationchangedp(orientation, user_data);
156 }
157 */
158 void _AppInfo::SetAppState(AppState appState)
159 {
160         typedef void (*methodType)(AppState appstate);
161         static methodType appinfo_setappstatep;
162         probeInfo_t     probeInfo;
163
164         GET_REAL_FUNC_OSP(_ZN5Tizen3App8_AppInfo11SetAppStateENS0_8AppStateE, LIBOSP_APPFW, appinfo_setappstatep);
165
166         probeBlockStart();
167         if(appState == RUNNING)
168         {
169                 setProbePoint(&probeInfo);
170
171                 PREPARE_LOCAL_BUF();
172                 PACK_COMMON_BEGIN(MSG_PROBE_LIFECYCLE,
173                                   API_ID_void__AppInfo__SetAppState_AppState_appState_,
174                                   "p", appState);
175                 PACK_COMMON_END(0, 0, 0);
176                 FLUSH_LOCAL_BUF();
177         }
178         probeBlockEnd();
179
180         appinfo_setappstatep(appState);
181 }
182
183 void _UiAppImpl::OnBackground(void)
184 {
185         typedef void (_UiAppImpl::*methodType)(void);
186         static methodType uiappimpl_onbackgroundp;
187         probeInfo_t     probeInfo;
188
189         GET_REAL_FUNC_OSP(_ZN5Tizen3App10_UiAppImpl12OnBackgroundEv, LIBOSP_UIFW, uiappimpl_onbackgroundp);
190
191         probeBlockStart();
192         SCREENSHOT_LOCK();
193         setProbePoint(&probeInfo);
194
195         PREPARE_LOCAL_BUF();
196         PACK_COMMON_BEGIN(MSG_PROBE_LIFECYCLE,
197                           API_ID_void__UiAppImpl__OnBackground_void_,
198                           "", 0);
199         PACK_COMMON_END(0, 0, 0);
200         FLUSH_LOCAL_BUF();
201
202         probeBlockEnd();
203
204         (this->*uiappimpl_onbackgroundp)();
205 }
206
207 void _UiAppImpl::OnForeground(void)
208 {
209         typedef void (_UiAppImpl::*methodType)(void);
210         static methodType uiappimpl_onforegroundp;
211         probeInfo_t     probeInfo;
212
213         GET_REAL_FUNC_OSP(_ZN5Tizen3App10_UiAppImpl12OnForegroundEv, LIBOSP_UIFW, uiappimpl_onforegroundp);
214
215         probeBlockStart();
216         setProbePoint(&probeInfo);
217
218         PREPARE_LOCAL_BUF();
219         PACK_COMMON_BEGIN(MSG_PROBE_LIFECYCLE,
220                           API_ID_void__UiAppImpl__OnForeground_void_,
221                           "", 0);
222         PACK_COMMON_END(0, 0, 0);
223         FLUSH_LOCAL_BUF();
224
225         SCREENSHOT_UNLOCK();
226 //      SCREENSHOT_DONE();
227         probeBlockEnd();
228
229         (this->*uiappimpl_onforegroundp)();
230 }
231
232 /*
233 void _UiAppImpl::OnDeviceOrientationChanged(app_device_orientation_e orientation)
234 {
235         typedef void (*methodType)(_UiAppImpl* th, app_device_orientation_e orientation);
236         static methodType uiappimpl_ondeviceorientationchangedp;
237
238         GET_REAL_FUNC_OSP(_ZThn4_N5Tizen3App10_UiAppImpl26OnDeviceOrientationChangedE24app_device_orientation_e,
239                         LIBOSP_UIFW, uiappimpl_ondeviceorientationchangedp);
240
241         probeBlockStart();
242         on_orientation_changed((int)orientation, false);
243         probeBlockEnd();
244
245         uiappimpl_ondeviceorientationchangedp(static_cast<_UiAppImpl*>(dynamic_cast<_IAppImpl*>(this)), orientation);
246 }
247 */
248 } }     // end of namespace