tizen 2.3 release
[kernel/api/system-resource.git] / src / memory / lowmem-dbus.c
1 /*
2  * resourced
3  *
4  * Copyright (c) 2012 - 2013 Samsung Electronics Co., Ltd. All rights reserved.
5  *
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  */
18
19 /*
20  * @file lowmem_dbus.c
21  *
22  * @desc lowmem dbus for oom triger
23  *
24  * Copyright (c) 2013 Samsung Electronics Co., Ltd. All rights reserved.
25  *
26  */
27
28 #include <Ecore.h>
29
30 #include "trace.h"
31 #include "lowmem-handler.h"
32 #include "edbus-handler.h"
33 #include "resourced.h"
34 #include "macro.h"
35
36 #define SIGNAL_NAME_OOM_SET_THRESHOLD                   "SetThreshold"
37 #define SIGNAL_NAME_OOM_SET_LEAVE_THRESHOLD             "SetLeaveThreshold"
38 #define SIGNAL_NAME_OOM_TRIGGER                 "Trigger"
39
40 static void lowmem_dbus_oom_set_threshold(void *data, DBusMessage *msg)
41 {
42         DBusError err;
43         int ret;
44         int level, thres;
45
46         ret = dbus_message_is_signal(msg, RESOURCED_INTERFACE_OOM, SIGNAL_NAME_OOM_SET_THRESHOLD);
47
48         if (ret == 0) {
49                 _D("there is no oom set threshold signal");
50                 return;
51         }
52
53         dbus_error_init(&err);
54
55         ret = dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &level, DBUS_TYPE_INT32, &thres, DBUS_TYPE_INVALID);
56
57         if (ret == 0) {
58                 _D("there is no message");
59                 return;
60         }
61
62         set_threshold(level, thres);
63 }
64
65 static void lowmem_dbus_oom_set_leave_threshold(void *data, DBusMessage *msg)
66 {
67         DBusError err;
68         int ret;
69         int thres;
70
71         ret = dbus_message_is_signal(msg, RESOURCED_INTERFACE_OOM, SIGNAL_NAME_OOM_SET_LEAVE_THRESHOLD);
72
73         if (ret == 0) {
74                 _D("there is no oom set leave threshold signal");
75                 return;
76         }
77
78         dbus_error_init(&err);
79
80         ret = dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &thres, DBUS_TYPE_INVALID);
81
82         if (ret == 0) {
83                 _D("there is no message");
84                 return;
85         }
86
87         set_leave_threshold(thres);
88 }
89
90 static void lowmem_dbus_oom_trigger(void *data, DBusMessage *msg)
91 {
92         DBusError err;
93         int ret;
94         int launching = 0;
95         int flags = OOM_FORCE;
96
97         ret = dbus_message_is_signal(msg, RESOURCED_INTERFACE_OOM, SIGNAL_NAME_OOM_TRIGGER);
98         if (ret == 0) {
99                 _D("there is no oom trigger signal");
100                 return;
101         }
102
103         dbus_error_init(&err);
104
105         ret = dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &launching, DBUS_TYPE_INVALID);
106
107         if (launching)
108                 flags |= OOM_NOMEMORY_CHECK;
109
110         change_memory_state(MEMNOTIFY_LOW, 1);
111         lowmem_oom_killer_cb(MEMCG_MEMORY, flags);
112         _D("flags = %d", flags);
113         change_memory_state(MEMNOTIFY_NORMAL, 0);
114 }
115
116 void lowmem_dbus_init(void)
117 {
118         register_edbus_signal_handler(RESOURCED_PATH_OOM, RESOURCED_INTERFACE_OOM,
119                         SIGNAL_NAME_OOM_SET_THRESHOLD,
120                     lowmem_dbus_oom_set_threshold);
121         register_edbus_signal_handler(RESOURCED_PATH_OOM, RESOURCED_INTERFACE_OOM,
122                         SIGNAL_NAME_OOM_SET_LEAVE_THRESHOLD,
123                     lowmem_dbus_oom_set_leave_threshold);
124         register_edbus_signal_handler(RESOURCED_PATH_OOM, RESOURCED_INTERFACE_OOM,
125                         SIGNAL_NAME_OOM_TRIGGER,
126                     lowmem_dbus_oom_trigger);
127
128 }