Instrumentation so that we can test performance while of caching.

SVN revision: 26022
This commit is contained in:
David Walter Seikel 2006-09-22 10:11:32 +00:00
parent 55c9565b6d
commit e282477a21
5 changed files with 113 additions and 13 deletions

View File

@ -132,6 +132,23 @@ struct _Ecore_Desktop_Tree
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
extern "C"
{
@ -246,6 +263,9 @@ extern "C"
char *ecore_desktop_home_get(void);
EAPI void ecore_desktop_instrumentation_reset(void);
EAPI void ecore_desktop_instrumentation_print(void);
# ifdef __cplusplus
}
# endif

View File

@ -8,13 +8,7 @@
#include <ctype.h>
#include <sys/stat.h>
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;
struct _Ecore_Desktop_Instrumentation instrumentation;
extern int reject_count, not_over_count;
@ -188,19 +182,23 @@ _ecore_desktop_get(const char *file, const char *lang)
struct stat st;
char *value;
int stated = 0;
int in_cache = 0;
double begin;
begin = ecore_time_get();
result = (Ecore_Desktop *) ecore_hash_get(desktop_cache, (char *)file);
/* Check if the cache is still valid. */
if (result)
{
in_cache = 1;
if (stat(result->original_path, &st) >= 0)
{
if (st.st_mtime > result->mtime)
{
ecore_hash_remove(desktop_cache, result->original_path);
result = NULL;
stated = 1;
}
stated = 1;
}
}
if (!result)
@ -215,10 +213,7 @@ _ecore_desktop_get(const char *file, const char *lang)
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. */
if ((stated) || (stat(result->original_path, &st) >= 0))
{
result->mtime = st.st_mtime;
stated = 1;
}
result->mtime = st.st_mtime;
if (result->data)
{
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;
}
@ -972,3 +986,36 @@ ecore_desktop_merge_command(char *exec, char *params)
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");
}

View File

@ -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. */
static const char *ext[] =
{ ".edj", ".png", ".svgz", ".svg", ".xpm", "", NULL };
{ ".edj", ".png", ".svgz", ".svg", ".xpm", NULL };
static int init_count = 0;
static Ecore_Hash *icon_theme_cache;
static int loaded = 0;
@ -53,7 +53,10 @@ ecore_desktop_icon_find(const char *icon, const char *icon_size,
{
const char *dir = NULL, *icn;
Ecore_List *icons;
int in_cache = 0;
double begin;
begin = ecore_time_get();
if (icon == NULL)
return NULL;
@ -85,6 +88,24 @@ ecore_desktop_icon_find(const char *icon, const char *icon_size,
}
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;
}

View File

@ -36,6 +36,15 @@
* 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,
char *before, char *env_home,
char *env, char *env_home_default,

View File

@ -7,6 +7,7 @@
#include <stdlib.h>
#include <unistd.h>
#include <limits.h>
#include <Ecore.h>
#include <Ecore_File.h>
#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_kde_legacy;
extern Ecore_List *ecore_desktop_paths_xsessions;
extern struct _Ecore_Desktop_Instrumentation instrumentation;
# ifdef __cplusplus
extern "C"