4 * Copyright (c) 2012 - 2013 Samsung Electronics Co., Ltd. All rights reserved.
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
10 * http://www.apache.org/licenses/LICENSE-2.0
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.
22 * @desc lowmem dbus for oom triger
24 * Copyright (c) 2013 Samsung Electronics Co., Ltd. All rights reserved.
31 #include "lowmem-handler.h"
32 #include "edbus-handler.h"
33 #include "resourced.h"
36 #define SIGNAL_NAME_OOM_SET_THRESHOLD "SetThreshold"
37 #define SIGNAL_NAME_OOM_SET_LEAVE_THRESHOLD "SetLeaveThreshold"
38 #define SIGNAL_NAME_OOM_TRIGGER "Trigger"
40 static void lowmem_dbus_oom_set_threshold(void *data, DBusMessage *msg)
46 ret = dbus_message_is_signal(msg, RESOURCED_INTERFACE_OOM, SIGNAL_NAME_OOM_SET_THRESHOLD);
49 _D("there is no oom set threshold signal");
53 dbus_error_init(&err);
55 ret = dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &level, DBUS_TYPE_INT32, &thres, DBUS_TYPE_INVALID);
58 _D("there is no message");
62 set_threshold(level, thres);
65 static void lowmem_dbus_oom_set_leave_threshold(void *data, DBusMessage *msg)
71 ret = dbus_message_is_signal(msg, RESOURCED_INTERFACE_OOM, SIGNAL_NAME_OOM_SET_LEAVE_THRESHOLD);
74 _D("there is no oom set leave threshold signal");
78 dbus_error_init(&err);
80 ret = dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &thres, DBUS_TYPE_INVALID);
83 _D("there is no message");
87 set_leave_threshold(thres);
90 static void lowmem_dbus_oom_trigger(void *data, DBusMessage *msg)
95 int flags = OOM_FORCE;
97 ret = dbus_message_is_signal(msg, RESOURCED_INTERFACE_OOM, SIGNAL_NAME_OOM_TRIGGER);
99 _D("there is no oom trigger signal");
103 dbus_error_init(&err);
105 ret = dbus_message_get_args(msg, &err, DBUS_TYPE_INT32, &launching, DBUS_TYPE_INVALID);
108 flags |= OOM_NOMEMORY_CHECK;
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);
116 void lowmem_dbus_init(void)
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);