More cache tweaking. The next step is to add the next major peice of the

cache puzzle.


SVN revision: 26228
This commit is contained in:
David Walter Seikel 2006-09-30 04:49:31 +00:00
parent 22ea4787cd
commit ed1a76e3bf
2 changed files with 62 additions and 54 deletions

View File

@ -57,7 +57,6 @@ static int _e_app_order_contains(E_App *a, const char *file);
static void _e_app_resolve_file_name(char *buf, size_t size, const char *path, const char *file);
/* local subsystem globals */
static Evas_List *_e_apps_list = NULL;
static int _e_apps_callbacks_walking = 0;
static int _e_apps_callbacks_delete_me = 0;
static Evas_List *_e_apps_change_callbacks = NULL;
@ -152,11 +151,6 @@ e_app_init(void)
_e_apps_all = e_app_new(_e_apps_path_all, 0);
evas_hash_foreach(_e_apps_every_app, _e_apps_hash_cb_init, NULL);
printf("INITIAL APP SCAN %3.3f\n", ecore_time_get() - begin);
#if NO_APP_LIST
/* The list already exists, and it doesn't care what order it is in. */
if (_e_apps_all)
_e_apps_list = _e_apps_all->subapps;
#endif
ecore_desktop_instrumentation_print();
return 1;
}
@ -168,10 +162,10 @@ _e_apps_hash_cb_init(Evas_Hash *hash, const char *key, void *data, void *fdata)
a = data;
/* Link it in to all if needed. */
if ((!a->parent) && (_e_apps_all) && (a != _e_apps_all) && (strncmp(a->path, _e_apps_path_all, strlen(_e_apps_path_all)) == 0))
if ((!a->parent) && (_e_apps_all) && (a != _e_apps_all) /*&& (strncmp(a->path, _e_apps_path_all, strlen(_e_apps_path_all)) == 0)*/)
{
a->parent = _e_apps_all;
_e_apps_all->subapps = evas_list_append(_e_apps_all->subapps, a);
_e_apps_all->subapps = evas_list_prepend(_e_apps_all->subapps, a);
e_object_ref(E_OBJECT(a));
}
return 1;
@ -206,7 +200,7 @@ e_app_shutdown(void)
evas_stringshare_del(_e_apps_path_all);
{
Evas_List *l;
for (l = _e_apps_list; l; l = l->next)
for (l = _e_apps_all->subapps; l; l = l->next)
{
E_App *a;
a = l->data;
@ -224,7 +218,7 @@ e_app_unmonitor_all(void)
{
Evas_List *l;
for (l = _e_apps_list; l; l = l->next)
for (l = _e_apps_all->subapps; l; l = l->next)
{
E_App *a;
@ -258,6 +252,17 @@ e_app_new(const char *path, int scan_subdirs)
if (!path) return NULL;
a = e_app_path_find(path);
/* Is it a virtual path from inside a .order file? */
if ((!a) && (!ecore_file_exists(path)))
{
snprintf(buf, sizeof(buf), "%s/%s", _e_apps_path_all, ecore_file_get_file(path));
if (ecore_file_exists(path))
{
path = buf;
a = e_app_path_find(path);
}
}
/* Check if the cache is still valid. */
if (a)
{
@ -303,7 +308,7 @@ e_app_new(const char *path, int scan_subdirs)
{
if (!a->filled)
e_app_fields_fill(a, a->path);
// _e_apps_hash_cb_init(_e_apps_every_app, a->path, a, NULL);
_e_apps_hash_cb_init(_e_apps_every_app, a->path, a, NULL);
/* no exe field.. not valid. drop it */
// if (!_e_app_exe_valid_get(a->exe))
@ -318,9 +323,11 @@ e_app_new(const char *path, int scan_subdirs)
a->mtime = st.st_mtime;
stated = 1;
}
#if ! NO_APP_LIST
_e_apps_list = evas_list_prepend(_e_apps_list, a);
#endif
if ((_e_apps_all) && (_e_apps_all->subapps))
{
_e_apps_all->subapps = evas_list_remove(_e_apps_all->subapps, a);
_e_apps_all->subapps = evas_list_prepend(_e_apps_all->subapps, a);
}
}
else
goto error;
@ -380,7 +387,6 @@ e_app_is_parent(E_App *parent, E_App *app)
while (current)
{
printf("e_app_is_parent(%s, %s) - %s\n", parent->path, app->path, current->path);
if (current == parent)
return 1;
current = current->parent;
@ -462,7 +468,7 @@ e_app_subdir_scan(E_App *a, int scan_subdirs)
e_object_ref(E_OBJECT(a3));
a2->references = evas_list_append(a2->references, a3);
#if ! NO_APP_LIST
_e_apps_list = evas_list_prepend(_e_apps_list, a3);
_e_apps_all->subapps = evas_list_prepend(_e_apps_all->subapps, a3);
#endif
}
else
@ -537,6 +543,10 @@ e_app_exec(E_App *a, int launch_id)
inst->launch_id = launch_id;
inst->launch_time = ecore_time_get();
inst->expire_timer = ecore_timer_add(10.0, _e_app_cb_expire_timer, inst);
_e_apps_all->subapps = evas_list_remove(_e_apps_all->subapps, original);
_e_apps_all->subapps = evas_list_prepend(_e_apps_all->subapps, original);
original->instances = evas_list_append(original->instances, inst);
_e_apps_start_pending = evas_list_append(_e_apps_start_pending, original);
if (original->startup_notify) original->starting = 1;
@ -620,7 +630,7 @@ _e_app_files_list_prepend_relative(Evas_List *files, E_App *before, E_App *paren
for (l2 = files; l2; l2 = l2->next)
{
char *file;
file = l2->data;
fprintf(f, "%s\n", ecore_file_get_file(file));
}
@ -938,15 +948,14 @@ e_app_launch_id_pid_find(int launch_id, pid_t pid)
{
Evas_List *l, *ll;
for (l = _e_apps_list; l; l = l->next)
for (l = _e_apps_all->subapps; l; l = l->next)
{
E_App *a;
a = l->data;
E_OBJECT_CHECK_RETURN(a, NULL);
E_OBJECT_TYPE_CHECK_RETURN(a, E_APP_TYPE, NULL);
if (!a->filled)
e_app_fields_fill(a, a->path);
/* No need to fill up unfilled E_Apps during this scan. */
for (ll = a->instances; ll; ll = ll->next)
{
E_App_Instance *ai;
@ -955,9 +964,8 @@ e_app_launch_id_pid_find(int launch_id, pid_t pid)
if (((launch_id > 0) && (ai->launch_id > 0) && (ai->launch_id == launch_id)) ||
((pid > 1) && (ai->exe) && (ecore_exe_pid_get(ai->exe) == pid)))
{
_e_apps_list = evas_list_remove_list(_e_apps_list, l);
_e_apps_list = evas_list_prepend(_e_apps_list, a);
printf("e_app_launch_id_pid_find() - FOUND - %s\n", a->path);
_e_apps_all->subapps = evas_list_remove_list(_e_apps_all->subapps, l);
_e_apps_all->subapps = evas_list_prepend(_e_apps_all->subapps, a);
return a;
}
}
@ -980,13 +988,17 @@ e_app_border_find(E_Border *bd)
title = bd->client.netwm.name;
if (!title) title = bd->client.icccm.title;
for (l = _e_apps_list; l; l = l->next)
for (l = _e_apps_all->subapps; l; l = l->next)
{
a = l->data;
E_OBJECT_CHECK_RETURN(a, NULL);
E_OBJECT_TYPE_CHECK_RETURN(a, E_APP_TYPE, NULL);
if (!a->filled)
e_app_fields_fill(a, a->path);
/* No need to fill up unfilled E_Apps during this scan,
* although this might fail for apps started without E's help.
* That gets fixed when the next cache code is implemented.
*/
// if (!a->filled)
// e_app_fields_fill(a, a->path);
ok = 0;
if ((a->win_name) || (a->win_class) || (a->win_title) || (a->win_role) || (a->exe))
{
@ -1039,9 +1051,8 @@ e_app_border_find(E_Border *bd)
}
if ((a_match) && (l_match))
{
printf("e_app_border_find() - FOUND - %s\n", a_match->path);
_e_apps_list = evas_list_remove_list(_e_apps_list, l_match);
_e_apps_list = evas_list_prepend(_e_apps_list, a_match);
_e_apps_all->subapps = evas_list_remove_list(_e_apps_all->subapps, l_match);
_e_apps_all->subapps = evas_list_prepend(_e_apps_all->subapps, a_match);
}
return a_match;
}
@ -1053,7 +1064,7 @@ e_app_file_find(const char *file)
if (!file) return NULL;
for (l = _e_apps_list; l; l = l->next)
for (l = _e_apps_all->subapps; l; l = l->next)
{
E_App *a;
@ -1070,8 +1081,8 @@ e_app_file_find(const char *file)
p++;
if (!strcmp(p, file))
{
_e_apps_list = evas_list_remove_list(_e_apps_list, l);
_e_apps_list = evas_list_prepend(_e_apps_list, a);
_e_apps_all->subapps = evas_list_remove_list(_e_apps_all->subapps, l);
_e_apps_all->subapps = evas_list_prepend(_e_apps_all->subapps, a);
return a;
}
}
@ -1097,7 +1108,7 @@ e_app_name_find(const char *name)
if (!name) return NULL;
for (l = _e_apps_list; l; l = l->next)
for (l = _e_apps_all->subapps; l; l = l->next)
{
E_App *a;
@ -1110,8 +1121,8 @@ e_app_name_find(const char *name)
{
if (!strcasecmp(a->name, name))
{
_e_apps_list = evas_list_remove_list(_e_apps_list, l);
_e_apps_list = evas_list_prepend(_e_apps_list, a);
_e_apps_all->subapps = evas_list_remove_list(_e_apps_all->subapps, l);
_e_apps_all->subapps = evas_list_prepend(_e_apps_all->subapps, a);
return a;
}
}
@ -1126,7 +1137,7 @@ e_app_generic_find(const char *generic)
if (!generic) return NULL;
for (l = _e_apps_list; l; l = l->next)
for (l = _e_apps_all->subapps; l; l = l->next)
{
E_App *a;
@ -1139,8 +1150,8 @@ e_app_generic_find(const char *generic)
{
if (!strcasecmp(a->generic, generic))
{
_e_apps_list = evas_list_remove_list(_e_apps_list, l);
_e_apps_list = evas_list_prepend(_e_apps_list, a);
_e_apps_all->subapps = evas_list_remove_list(_e_apps_all->subapps, l);
_e_apps_all->subapps = evas_list_prepend(_e_apps_all->subapps, a);
return a;
}
}
@ -1155,7 +1166,7 @@ e_app_exe_find(const char *exe)
if (!exe) return NULL;
for (l = _e_apps_list; l; l = l->next)
for (l = _e_apps_all->subapps; l; l = l->next)
{
E_App *a;
@ -1168,8 +1179,8 @@ e_app_exe_find(const char *exe)
{
if (!strcmp(a->exe, exe))
{
_e_apps_list = evas_list_remove_list(_e_apps_list, l);
_e_apps_list = evas_list_prepend(_e_apps_list, a);
_e_apps_all->subapps = evas_list_remove_list(_e_apps_all->subapps, l);
_e_apps_all->subapps = evas_list_prepend(_e_apps_all->subapps, a);
return a;
}
}
@ -1186,7 +1197,7 @@ e_app_name_glob_list(const char *name)
if (!name) return NULL;
for (l = _e_apps_list; l; l = l->next)
for (l = _e_apps_all->subapps; l; l = l->next)
{
E_App *a;
@ -1211,7 +1222,7 @@ e_app_generic_glob_list(const char *generic)
if (!generic) return NULL;
for (l = _e_apps_list; l; l = l->next)
for (l = _e_apps_all->subapps; l; l = l->next)
{
E_App *a;
@ -1236,7 +1247,7 @@ e_app_exe_glob_list(const char *exe)
if (!exe) return NULL;
for (l = _e_apps_list; l; l = l->next)
for (l = _e_apps_all->subapps; l; l = l->next)
{
E_App *a;
@ -1261,7 +1272,7 @@ e_app_comment_glob_list(const char *comment)
if (!comment) return NULL;
for (l = _e_apps_list; l; l = l->next)
for (l = _e_apps_all->subapps; l; l = l->next)
{
E_App *a;
@ -2057,9 +2068,6 @@ _e_app_free(E_App *a)
a->parent->subapps = evas_list_remove(a->parent->subapps, a);
}
a->orig->references = evas_list_remove(a->orig->references, a);
#if ! NO_APP_LIST
_e_apps_list = evas_list_remove(_e_apps_list, a);
#endif
e_object_unref(E_OBJECT(a->orig));
free(a);
}
@ -2111,9 +2119,6 @@ _e_app_free(E_App *a)
a->parent->subapps = evas_list_remove(a->parent->subapps, a);
if (a->monitor)
ecore_file_monitor_del(a->monitor);
#if ! NO_APP_LIST
_e_apps_list = evas_list_remove(_e_apps_list, a);
#endif
e_app_fields_empty(a);
if (a->path)
{
@ -2418,7 +2423,7 @@ _e_app_subdir_rescan(E_App *app)
e_object_ref(E_OBJECT(a3));
a2->references = evas_list_append(a2->references, a3);
#if ! NO_APP_LIST
_e_apps_list = evas_list_prepend(_e_apps_list, a3);
_e_apps_all->subapps = evas_list_prepend(_e_apps_all->subapps, a3);
#endif
}
else
@ -2750,7 +2755,7 @@ _e_app_check_order(const char *file)
{
Evas_List *l;
for (l = _e_apps_list; l; l = l->next)
for (l = _e_apps_all->subapps; l; l = l->next)
{
E_App *a;

View File

@ -53,7 +53,7 @@ main(int argc, char **argv)
char buf[PATH_MAX];
char *s;
struct sigaction action;
double t, tstart;
double t, tstart, begin;
/* trap deadly bug signals and allow some form of sane recovery */
/* or ability to gdb attach and debug at this point - better than your */
/* wm/desktop vanishing and not knowing what happened */
@ -370,6 +370,7 @@ main(int argc, char **argv)
_e_main_shutdown_push(ecore_ipc_shutdown);
/* init FDO desktop */
begin = ecore_time_get();
if (!ecore_desktop_init())
{
e_error_message_show(_("Enlightenment cannot initialize the FDO desktop system.\n"
@ -384,6 +385,8 @@ main(int argc, char **argv)
ecore_desktop_paths_append_system(ECORE_DESKTOP_PATHS_ICONS, buf);
ecore_desktop_paths_regen();
printf("SETUP FDO %3.3f\n", ecore_time_get() - begin);
/* init the evas wrapper */
if (!ecore_evas_init())
{