2 * Copyright 2012 Samsung Electronics Co., Ltd
4 * Licensed under the Flora License, Version 1.0 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.tizenopensource.org/license
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
27 #include "taskmanager.h"
28 #include "_util_log.h"
30 #define TASKMANAGER_ICON_NAME "org.tizen.taskmgr.png"
32 static int grp_cnt[TS_MAX];
34 void _init_grp_cnt(void)
38 for(i = 0; i < TS_MAX; i++) {
43 int _get_grp_cnt(int which)
45 return grp_cnt[which];
48 int runapp_info_get(const aul_app_info *ainfo, void *data)
58 char buf[1024] = { 0, };
59 struct appdata *ad = data;
60 struct _task_info *info;
61 float usr = 0.0, sys = 0.0;
63 retvm_if(ainfo == NULL, -1, "Invalid argument: ainfo is NULL\n");
64 retvm_if(data == NULL, -1, "Invalid argument: data is NULL\n");
66 retvm_if(ainfo->pid <= 0, -1, "Invalid pid(%u)\n", ainfo->pid);
69 if (ainfo->pid == getpid()) {
73 retvm_if(ainfo->pkg_name == NULL, 0, "Invalid pkg_name(%s)\n", ainfo->pkg_name);
75 // _D("running app is (%s)\n", ainfo->pkg_name);
76 ret = ail_package_get_appinfo(ainfo->pkg_name, &handle);
77 retvm_if(ret != AIL_ERROR_OK, -1,
78 "Failed to get appinfo, pkg_name:%s\n", ainfo->pkg_name);
80 ret = ail_appinfo_get_bool(handle, AIL_PROP_X_SLP_TASKMANAGE_BOOL, &valb);
84 info = calloc(1, sizeof(struct _task_info));
86 _E("Failed to calloc task_info\n");
89 info->pkg_name = strdup(ainfo->pkg_name);
91 ret = ail_appinfo_get_str(handle, AIL_PROP_NAME_STR, &valc);
93 _D("%s: Failed to get ail name\n", ainfo->pkg_name);
96 info->app_name = strdup(valc);
98 ret = ail_appinfo_get_str(handle, AIL_PROP_ICON_STR, &valc);
99 if (valc == NULL || (ecore_file_exists(valc) == EINA_FALSE)) {
100 _D("%s: Failed to get ail icon\n", ainfo->pkg_name);
101 valc = TASKMANAGER_ICON_NAME;
104 snprintf(buf, sizeof(buf), "%s", valc);
105 info->icn_path = strdup(buf);
106 // _D("get app name[%s] set [%s], icon path[%s]\n", ainfo->pkg_name, info->app_name, buf);
109 info->pid = ainfo->pid;
110 info->category = TS_INUSE;
111 // info->mem_total = ad->mem_total;
112 _D("%s/pid(%d)\n", info->app_name, info->pid);
114 ad->applist[TS_INUSE] = eina_list_prepend(ad->applist[TS_INUSE], info);
118 ret = ail_package_destroy_appinfo(handle);
119 retvm_if(ret != AIL_ERROR_OK, -1, "Failed to destroy appinfo\n");
123 int taskmanager_get_history_app_info(void *data)
125 struct appdata *ad = data;
126 struct _task_info *info, *info_r;
130 struct rua_rec rec_result = { 0, };
133 char buf[1024] = { 0, };
134 int nrows = 0, ncols = 0;
138 ail_appinfo_h handle;
144 retvm_if(data == NULL, -1, "Invalid argument: data is NULL\n");
145 retvm_if(rua_init() == -1, -1, "Failed to rua_init\n");
147 if (rua_history_load_db(&table, &nrows, &ncols) == -1) {
153 rua_history_unload_db(&table);
158 ad->applist[TS_HISTORY] = eina_list_nth_list(ad->applist[TS_HISTORY], 0);
159 for (row = 0; row < nrows; row++) {
160 rua_history_get_rec(&rec_result, table, nrows, ncols, row);
163 * pkg_name could be NULL or 0 length because it is launch by fork.
165 if (rec_result.pkg_name == NULL
166 || strlen(rec_result.pkg_name) < 1) {
169 ret = ail_package_get_appinfo(rec_result.pkg_name, &handle);
170 if (ret != AIL_ERROR_OK) {
171 _D("Failed to get appinfo(%d)\n", ret);
175 ret = ail_appinfo_get_bool(handle, AIL_PROP_X_SLP_TASKMANAGE_BOOL, &valb);
180 EINA_LIST_FOREACH(ad->applist[TS_INUSE], l_r, info_r) {
181 if (info_r != NULL) {
183 (rec_result.pkg_name, info_r->pkg_name)) {
191 info = calloc(1, sizeof(struct _task_info));
192 retvm_if(info == NULL, -1, "Failed to calloc _task_info\n");
194 info->pkg_name = strdup(rec_result.pkg_name);
196 ret = ail_appinfo_get_str(handle, AIL_PROP_NAME_STR, &valc);
198 _D("Failed to get ail name\n");
201 info->app_name = strdup(valc);
203 ret = ail_appinfo_get_str(handle, AIL_PROP_ICON_STR, &valc);
204 if (valc == NULL || (ecore_file_exists(valc) == EINA_FALSE)) {
205 _D("Failed to get ail icon\n");
206 valc = TASKMANAGER_ICON_NAME;
208 snprintf(buf, sizeof(buf), "%s", valc);
209 info->icn_path = strdup(buf);
213 info->category = TS_HISTORY;
215 if (rec_result.arg != NULL) {
216 if (strlen(rec_result.arg) > 0) {
217 info->b = bundle_decode(
218 (const bundle_raw *)rec_result.arg,
219 strlen(rec_result.arg));
223 ad->applist[TS_HISTORY] =
224 eina_list_append(ad->applist[TS_HISTORY], info);
225 grp_cnt[TS_HISTORY]++;
232 ret = ail_package_destroy_appinfo(handle);
235 rua_history_unload_db(&table);
241 int _free_einalist_all(struct appdata *ad)
244 struct _task_info *info = NULL;
248 printf("[Error] Invalid argument: appdata is NULL\n");
252 for (i = 0; i < TS_MAX; i++) {
253 if (ad->applist[i] == NULL)
256 EINA_LIST_FOREACH(ad->applist[i], l, info) {
259 bundle_free(info->b);
261 taskmanager_free_info(info);
266 eina_list_free(ad->applist[i]);
267 ad->applist[i] = NULL;
273 int _subt_einalist_item(struct appdata *ad, int pid)
276 Eina_List *l, *l_next;
278 struct _task_info *info;
280 retvm_if(ad == NULL, -1, "Invalid argument: appdata is NULL\n");
281 retvm_if(ad->applist[TS_INUSE] == NULL, -1, "applist is NULL\n");
283 EINA_LIST_FOREACH(ad->applist[TS_INUSE], l, info) {
284 _D("pid(%u):(%u)\n", pid, info->pid);
286 _E("Failed to get info\n");
290 if (pid > 0 && pid == info->pid) {
291 if(info->app_name) _D("killed [%s]\n", info->app_name);
292 ad->applist[TS_INUSE] =
293 eina_list_remove_list(ad->applist[TS_INUSE], l);
294 taskmanager_free_info(info);