From 6a3abcaa898bc43c53be38fb8bd7d5780bc42ab7 Mon Sep 17 00:00:00 2001 From: Rafael Antognolli Date: Mon, 25 Jun 2012 14:40:30 +0000 Subject: [PATCH] evas/cserve2: Add image size and loading time stats. SVN revision: 72812 --- legacy/evas/src/bin/evas_cserve2_cache.c | 68 ++++++++++++++++++++++-- legacy/evas/src/bin/evas_cserve2_usage.c | 11 +++- legacy/evas/src/lib/cserve2/evas_cs2.h | 14 +++++ 3 files changed, 89 insertions(+), 4 deletions(-) diff --git a/legacy/evas/src/bin/evas_cserve2_cache.c b/legacy/evas/src/bin/evas_cserve2_cache.c index 299260ae33..a78a07c553 100644 --- a/legacy/evas/src/bin/evas_cserve2_cache.c +++ b/legacy/evas/src/bin/evas_cserve2_cache.c @@ -234,7 +234,12 @@ _timeval_sub(const struct timeval *tv2, const struct timeval *tv1) t1 = tv1->tv_usec + tv1->tv_sec * 1000000; t2 = tv2->tv_usec + tv2->tv_sec * 1000000; - return t2 - t1; + // Make sure that we don't add negative values. Some images may have + // been not loaded yet, so it would mess with the stats. + if (t2 > t1) + return t2 - t1; + + return 0; } #endif @@ -1786,9 +1791,66 @@ _font_entry_stats_cb(const Eina_Hash *hash __UNUSED__, const void *key __UNUSED_ return EINA_TRUE; } -static void -_cserve2_cache_image_stats_get(Msg_Stats *msg __UNUSED__) +static Eina_Bool +_image_file_entry_stats_cb(const Eina_Hash *hash __UNUSED__, const void *key __UNUSED__, void *data, void *fdata) { + Msg_Stats *msg = fdata; + File_Data *fd = data; + + // accounting numbers + msg->images.files_loaded++; + + // accounting size + msg->images.files_size += sizeof(File_Data) + + eina_list_count(fd->images) * sizeof(Eina_List *) + + eina_list_count(fd->base.references) * + (sizeof(Request) + sizeof(Eina_List *)); + +#ifdef DEBUG_LOAD_TIME + int load_time; + // accounting file entries load time + load_time = _timeval_sub(&fd->base.load_finish, &fd->base.load_start); + msg->images.files_load_time += load_time; +#endif + + return EINA_TRUE; +} + +static Eina_Bool +_image_data_entry_stats_cb(const Eina_Hash *hash __UNUSED__, const void *key __UNUSED__, void *data, void *fdata) +{ + Msg_Stats *msg = fdata; + Image_Data *id = data; + unsigned int image_size; + + // accounting numbers + msg->images.images_loaded++; + if (id->unused) msg->images.images_unused++; + + // accounting size + msg->images.images_size += _image_entry_size_get(id) * 1024; + if (id->unused) msg->images.unused_size += _image_entry_size_get(id) * 1024; + + image_size = id->file->w * id->file->h * 4; + msg->images.requested_size += + (image_size * eina_list_count(id->base.references)); + +#ifdef DEBUG_LOAD_TIME + int load_time; + // accounting image entries load time + load_time = _timeval_sub(&id->base.load_finish, &id->base.load_start); + if (load_time > 0) + msg->images.images_load_time += load_time; +#endif + + return EINA_TRUE; +} + +static void +_cserve2_cache_image_stats_get(Msg_Stats *msg) +{ + eina_hash_foreach(file_entries, _image_file_entry_stats_cb, msg); + eina_hash_foreach(image_entries, _image_data_entry_stats_cb, msg); } static void diff --git a/legacy/evas/src/bin/evas_cserve2_usage.c b/legacy/evas/src/bin/evas_cserve2_usage.c index dd1cdb080c..3e0003d7ee 100644 --- a/legacy/evas/src/bin/evas_cserve2_usage.c +++ b/legacy/evas/src/bin/evas_cserve2_usage.c @@ -196,7 +196,16 @@ _usage_msg_read(void) printf("Printing server usage.\n"); printf("======================\n\n"); - printf("Font Usage Statistics:\n"); + printf("\nImage Usage Statistics:\n"); + printf("----------------------\n\n"); + printf("Image headers usage: %d bytes\n", msg->images.files_size); + printf("Image data requested: %d kbytes\n", msg->images.requested_size / 1024); + printf("Image data usage: %d kbytes\n", msg->images.images_size / 1024); + printf("Image data unused: %d kbytes\n", msg->images.unused_size / 1024); + printf("Image headers load time: %dus\n", msg->images.files_load_time); + printf("Image data load time: %dus\n", msg->images.images_load_time); + printf("Glyphs load time: %dus\n", msg->fonts.glyphs_load_time); + printf("\nFont Usage Statistics:\n"); printf("----------------------\n\n"); printf("Requested usage: %d bytes\n", msg->fonts.requested_size); printf("Real usage: %d bytes\n", msg->fonts.real_size); diff --git a/legacy/evas/src/lib/cserve2/evas_cs2.h b/legacy/evas/src/lib/cserve2/evas_cs2.h index 6eabfc61a3..1ae9a0f5bb 100644 --- a/legacy/evas/src/lib/cserve2/evas_cs2.h +++ b/legacy/evas/src/lib/cserve2/evas_cs2.h @@ -211,6 +211,20 @@ struct _Msg_Stats { * rendered */ int glyphs_load_time; /* total time spent loading glyphs */ } fonts; + struct { + unsigned int files_loaded; /* number of file headers loaded */ + unsigned int images_loaded; /* number of image data loaded */ + unsigned int images_unused; /* number of image data loaded and unused */ + + unsigned int requested_size; /* memory usage originally requested by + * the client */ + unsigned int files_size; /* memory usage from image headers */ + unsigned int images_size; /* memory usage from image data */ + unsigned int unused_size; /* memory usage from image data */ + + int files_load_time; + int images_load_time; + } images; }; /*