forked from enlightenment/efl
Instrumentation so that we can test performance while of caching.
SVN revision: 26022
This commit is contained in:
parent
55c9565b6d
commit
e282477a21
|
@ -132,6 +132,23 @@ struct _Ecore_Desktop_Tree
|
||||||
Ecore_Desktop_Tree *parent; /* Parent if this is a child. */
|
Ecore_Desktop_Tree *parent; /* Parent if this is a child. */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct _Ecore_Desktop_Instrumentation
|
||||||
|
{
|
||||||
|
double desktops_time;
|
||||||
|
double desktops_in_cache_time;
|
||||||
|
double desktops_not_found_time;
|
||||||
|
double icons_time;
|
||||||
|
double icons_in_cache_time;
|
||||||
|
double icons_not_found_time;
|
||||||
|
int desktops;
|
||||||
|
int desktops_in_cache;
|
||||||
|
int desktops_not_found;
|
||||||
|
int icons;
|
||||||
|
int icons_in_cache;
|
||||||
|
int icons_not_found;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
# ifdef __cplusplus
|
# ifdef __cplusplus
|
||||||
extern "C"
|
extern "C"
|
||||||
{
|
{
|
||||||
|
@ -246,6 +263,9 @@ extern "C"
|
||||||
|
|
||||||
char *ecore_desktop_home_get(void);
|
char *ecore_desktop_home_get(void);
|
||||||
|
|
||||||
|
EAPI void ecore_desktop_instrumentation_reset(void);
|
||||||
|
EAPI void ecore_desktop_instrumentation_print(void);
|
||||||
|
|
||||||
# ifdef __cplusplus
|
# ifdef __cplusplus
|
||||||
}
|
}
|
||||||
# endif
|
# endif
|
||||||
|
|
|
@ -8,13 +8,7 @@
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
|
||||||
Ecore_List *ecore_desktop_paths_config = NULL;
|
struct _Ecore_Desktop_Instrumentation instrumentation;
|
||||||
Ecore_List *ecore_desktop_paths_menus = NULL;
|
|
||||||
Ecore_List *ecore_desktop_paths_directories = NULL;
|
|
||||||
Ecore_List *ecore_desktop_paths_desktops = NULL;
|
|
||||||
Ecore_List *ecore_desktop_paths_icons = NULL;
|
|
||||||
Ecore_List *ecore_desktop_paths_kde_legacy = NULL;
|
|
||||||
Ecore_List *ecore_desktop_paths_xsessions = NULL;
|
|
||||||
|
|
||||||
extern int reject_count, not_over_count;
|
extern int reject_count, not_over_count;
|
||||||
|
|
||||||
|
@ -188,19 +182,23 @@ _ecore_desktop_get(const char *file, const char *lang)
|
||||||
struct stat st;
|
struct stat st;
|
||||||
char *value;
|
char *value;
|
||||||
int stated = 0;
|
int stated = 0;
|
||||||
|
int in_cache = 0;
|
||||||
|
double begin;
|
||||||
|
|
||||||
|
begin = ecore_time_get();
|
||||||
result = (Ecore_Desktop *) ecore_hash_get(desktop_cache, (char *)file);
|
result = (Ecore_Desktop *) ecore_hash_get(desktop_cache, (char *)file);
|
||||||
/* Check if the cache is still valid. */
|
/* Check if the cache is still valid. */
|
||||||
if (result)
|
if (result)
|
||||||
{
|
{
|
||||||
|
in_cache = 1;
|
||||||
if (stat(result->original_path, &st) >= 0)
|
if (stat(result->original_path, &st) >= 0)
|
||||||
{
|
{
|
||||||
if (st.st_mtime > result->mtime)
|
if (st.st_mtime > result->mtime)
|
||||||
{
|
{
|
||||||
ecore_hash_remove(desktop_cache, result->original_path);
|
ecore_hash_remove(desktop_cache, result->original_path);
|
||||||
result = NULL;
|
result = NULL;
|
||||||
stated = 1;
|
|
||||||
}
|
}
|
||||||
|
stated = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!result)
|
if (!result)
|
||||||
|
@ -215,10 +213,7 @@ _ecore_desktop_get(const char *file, const char *lang)
|
||||||
result->data = ecore_desktop_ini_get(result->original_path);
|
result->data = ecore_desktop_ini_get(result->original_path);
|
||||||
/* Timestamp the cache, and no need to stat the file twice if the cache was stale. */
|
/* Timestamp the cache, and no need to stat the file twice if the cache was stale. */
|
||||||
if ((stated) || (stat(result->original_path, &st) >= 0))
|
if ((stated) || (stat(result->original_path, &st) >= 0))
|
||||||
{
|
result->mtime = st.st_mtime;
|
||||||
result->mtime = st.st_mtime;
|
|
||||||
stated = 1;
|
|
||||||
}
|
|
||||||
if (result->data)
|
if (result->data)
|
||||||
{
|
{
|
||||||
result->group =
|
result->group =
|
||||||
|
@ -499,6 +494,25 @@ _ecore_desktop_get(const char *file, const char *lang)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
if (in_cache)
|
||||||
|
{
|
||||||
|
instrumentation.desktops_in_cache_time += ecore_time_get() - begin;
|
||||||
|
instrumentation.desktops_in_cache++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
instrumentation.desktops_time += ecore_time_get() - begin;
|
||||||
|
instrumentation.desktops++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
instrumentation.desktops_not_found_time += ecore_time_get() - begin;
|
||||||
|
instrumentation.desktops_not_found++;
|
||||||
|
}
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -972,3 +986,36 @@ ecore_desktop_merge_command(char *exec, char *params)
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
EAPI void
|
||||||
|
ecore_desktop_instrumentation_reset(void)
|
||||||
|
{
|
||||||
|
instrumentation.desktops = 0;
|
||||||
|
instrumentation.desktops_in_cache = 0;
|
||||||
|
instrumentation.desktops_not_found = 0;
|
||||||
|
instrumentation.icons = 0;
|
||||||
|
instrumentation.icons_in_cache = 0;
|
||||||
|
instrumentation.icons_not_found = 0;
|
||||||
|
instrumentation.desktops_time = 0.0;
|
||||||
|
instrumentation.desktops_in_cache_time = 0.0;
|
||||||
|
instrumentation.desktops_not_found_time = 0.0;
|
||||||
|
instrumentation.icons_time = 0.0;
|
||||||
|
instrumentation.icons_in_cache_time = 0.0;
|
||||||
|
instrumentation.icons_not_found_time = 0.0;
|
||||||
|
printf("vvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n");
|
||||||
|
printf("Desktop instrumentation reset.\n");
|
||||||
|
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
EAPI void
|
||||||
|
ecore_desktop_instrumentation_print(void)
|
||||||
|
{
|
||||||
|
printf("vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv\n");
|
||||||
|
printf(" Found %5d desktops %2.5f (%2.6f/desktop)\n", instrumentation.desktops, instrumentation.desktops_time, instrumentation.desktops_time / instrumentation.desktops);
|
||||||
|
printf(" Found %5d desktops in cache %2.5f (%2.6f/desktop)\n", instrumentation.desktops_in_cache, instrumentation.desktops_in_cache_time, instrumentation.desktops_in_cache_time / instrumentation.desktops_in_cache);
|
||||||
|
printf("Not found %5d desktops %2.5f (%2.6f/desktop)\n", instrumentation.desktops_not_found, instrumentation.desktops_not_found_time, instrumentation.desktops_not_found_time / instrumentation.desktops_not_found);
|
||||||
|
printf(" Found %5d icons %2.5f (%2.6f/icon)\n", instrumentation.icons, instrumentation.icons_time, instrumentation.icons_time / instrumentation.icons);
|
||||||
|
printf(" Found %5d icons in cache %2.5f (%2.6f/icon)\n", instrumentation.icons_in_cache, instrumentation.icons_in_cache_time, instrumentation.icons_in_cache_time / instrumentation.icons_in_cache);
|
||||||
|
printf("Not found %5d icons %2.5f (%2.6f/icon)\n", instrumentation.icons_not_found, instrumentation.icons_not_found_time, instrumentation.icons_not_found_time / instrumentation.icons_not_found);
|
||||||
|
printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
|
||||||
|
}
|
||||||
|
|
|
@ -19,7 +19,7 @@ _ecore_desktop_icon_theme_directory_destroy(Ecore_Desktop_Icon_Theme_Directory *
|
||||||
|
|
||||||
/* FIXME: We need a way for the client to disable searching for any of these that they don't support. */
|
/* FIXME: We need a way for the client to disable searching for any of these that they don't support. */
|
||||||
static const char *ext[] =
|
static const char *ext[] =
|
||||||
{ ".edj", ".png", ".svgz", ".svg", ".xpm", "", NULL };
|
{ ".edj", ".png", ".svgz", ".svg", ".xpm", NULL };
|
||||||
static int init_count = 0;
|
static int init_count = 0;
|
||||||
static Ecore_Hash *icon_theme_cache;
|
static Ecore_Hash *icon_theme_cache;
|
||||||
static int loaded = 0;
|
static int loaded = 0;
|
||||||
|
@ -53,7 +53,10 @@ ecore_desktop_icon_find(const char *icon, const char *icon_size,
|
||||||
{
|
{
|
||||||
const char *dir = NULL, *icn;
|
const char *dir = NULL, *icn;
|
||||||
Ecore_List *icons;
|
Ecore_List *icons;
|
||||||
|
int in_cache = 0;
|
||||||
|
double begin;
|
||||||
|
|
||||||
|
begin = ecore_time_get();
|
||||||
if (icon == NULL)
|
if (icon == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
@ -85,6 +88,24 @@ ecore_desktop_icon_find(const char *icon, const char *icon_size,
|
||||||
}
|
}
|
||||||
ecore_list_destroy(icons);
|
ecore_list_destroy(icons);
|
||||||
|
|
||||||
|
if (dir)
|
||||||
|
{
|
||||||
|
if (in_cache)
|
||||||
|
{
|
||||||
|
instrumentation.icons_in_cache_time += ecore_time_get() - begin;
|
||||||
|
instrumentation.icons_in_cache++;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
instrumentation.icons_time += ecore_time_get() - begin;
|
||||||
|
instrumentation.icons++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
instrumentation.icons_not_found_time += ecore_time_get() - begin;
|
||||||
|
instrumentation.icons_not_found++;
|
||||||
|
}
|
||||||
return dir;
|
return dir;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -36,6 +36,15 @@
|
||||||
* and correct those guesses.
|
* and correct those guesses.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
Ecore_List *ecore_desktop_paths_config = NULL;
|
||||||
|
Ecore_List *ecore_desktop_paths_menus = NULL;
|
||||||
|
Ecore_List *ecore_desktop_paths_directories = NULL;
|
||||||
|
Ecore_List *ecore_desktop_paths_desktops = NULL;
|
||||||
|
Ecore_List *ecore_desktop_paths_icons = NULL;
|
||||||
|
Ecore_List *ecore_desktop_paths_kde_legacy = NULL;
|
||||||
|
Ecore_List *ecore_desktop_paths_xsessions = NULL;
|
||||||
|
|
||||||
|
|
||||||
static Ecore_List *_ecore_desktop_paths_get(Ecore_Desktop_Paths_Type path_type,
|
static Ecore_List *_ecore_desktop_paths_get(Ecore_Desktop_Paths_Type path_type,
|
||||||
char *before, char *env_home,
|
char *before, char *env_home,
|
||||||
char *env, char *env_home_default,
|
char *env, char *env_home_default,
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <limits.h>
|
#include <limits.h>
|
||||||
|
#include <Ecore.h>
|
||||||
#include <Ecore_File.h>
|
#include <Ecore_File.h>
|
||||||
|
|
||||||
#define E_FN_DEL(_fn, _h) if (_h) { _fn(_h); _h = NULL; }
|
#define E_FN_DEL(_fn, _h) if (_h) { _fn(_h); _h = NULL; }
|
||||||
|
@ -22,6 +23,8 @@ extern Ecore_List *ecore_desktop_paths_desktops;
|
||||||
extern Ecore_List *ecore_desktop_paths_icons;
|
extern Ecore_List *ecore_desktop_paths_icons;
|
||||||
extern Ecore_List *ecore_desktop_paths_kde_legacy;
|
extern Ecore_List *ecore_desktop_paths_kde_legacy;
|
||||||
extern Ecore_List *ecore_desktop_paths_xsessions;
|
extern Ecore_List *ecore_desktop_paths_xsessions;
|
||||||
|
extern struct _Ecore_Desktop_Instrumentation instrumentation;
|
||||||
|
|
||||||
|
|
||||||
# ifdef __cplusplus
|
# ifdef __cplusplus
|
||||||
extern "C"
|
extern "C"
|
||||||
|
|
Loading…
Reference in New Issue