@@ -24,7 +24,7 @@ typedef struct caca_privevent caca_privevent_t; | |||||
typedef struct caca_figfont caca_figfont_t; | typedef struct caca_figfont caca_figfont_t; | ||||
#if !defined(_DOXYGEN_SKIP_ME) | #if !defined(_DOXYGEN_SKIP_ME) | ||||
# define STAT_VALUES 20 | |||||
# define STAT_VALUES 32 | |||||
# define EVENTBUF_LEN 10 | # define EVENTBUF_LEN 10 | ||||
# define MAX_DIRTY_COUNT 8 | # define MAX_DIRTY_COUNT 8 | ||||
#endif | #endif | ||||
@@ -148,8 +148,9 @@ struct caca_timer | |||||
/* Statistic structure for profiling */ | /* Statistic structure for profiling */ | ||||
struct caca_stat | struct caca_stat | ||||
{ | { | ||||
int itable[STAT_VALUES]; | |||||
int64_t imean; | |||||
char *name; | char *name; | ||||
int imean, itable[STAT_VALUES]; | |||||
}; | }; | ||||
/* Private event structure */ | /* Private event structure */ | ||||
@@ -21,15 +21,15 @@ | |||||
#if defined PROF && !defined __KERNEL__ | #if defined PROF && !defined __KERNEL__ | ||||
# define PROFILING_VARS | # define PROFILING_VARS | ||||
# define STAT_IADD(s, n) \ | |||||
# define STAT_IADD(_s, _n) \ | |||||
do \ | do \ | ||||
{ \ | { \ | ||||
struct caca_stat *ss = s; \ | |||||
int ii, nn = n; \ | |||||
for (ii = STAT_VALUES - 1; ii > 0; ii--) \ | |||||
ss->itable[ii] = ss->itable[ii - 1]; \ | |||||
ss->itable[0] = nn; \ | |||||
ss->imean = ((int64_t)ss->imean * 15 + nn) / 16; \ | |||||
struct caca_stat *s = _s; \ | |||||
int i, n = _n; \ | |||||
for (i = STAT_VALUES - 1; i > 0; i--) \ | |||||
s->itable[i] = s->itable[i - 1]; \ | |||||
s->itable[0] = n; \ | |||||
s->imean = (s->imean * 63 + (int64_t)n * 64 + 32) / 64; \ | |||||
} \ | } \ | ||||
while(0) | while(0) | ||||
@@ -38,7 +38,7 @@ | |||||
#else | #else | ||||
# define PROFILING_VARS | # define PROFILING_VARS | ||||
# define STAT_IADD(s) do { } while(0) | |||||
# define STAT_IADD(_s, _n) do { } while(0) | |||||
# define START_PROF(obj, fn) do { } while(0) | # define START_PROF(obj, fn) do { } while(0) | ||||
# define STOP_PROF(obj, fn) do { } while(0) | # define STOP_PROF(obj, fn) do { } while(0) | ||||
#endif | #endif | ||||
@@ -45,18 +45,10 @@ void _caca_dump_stats(void) | |||||
for (j = 0; j < STAT_VALUES; j++) | for (j = 0; j < STAT_VALUES; j++) | ||||
total += stats[i]->itable[j]; | total += stats[i]->itable[j]; | ||||
fprintf(stderr, " %s: last %i mean %i sliding mean %i\n", | |||||
fprintf(stderr, " %s: last %i sliding mean %i smoothed mean %i\n", | |||||
stats[i]->name, stats[i]->itable[0], | stats[i]->name, stats[i]->itable[0], | ||||
(int)((total + STAT_VALUES / 2) / STAT_VALUES), | (int)((total + STAT_VALUES / 2) / STAT_VALUES), | ||||
stats[i]->imean); | |||||
/*fprintf(stderr, "%i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i %i\n", | |||||
stats[i]->itable[0], stats[i]->itable[1], stats[i]->itable[2], | |||||
stats[i]->itable[3], stats[i]->itable[4], stats[i]->itable[5], | |||||
stats[i]->itable[6], stats[i]->itable[7], stats[i]->itable[8], | |||||
stats[i]->itable[9], stats[i]->itable[10], stats[i]->itable[11], | |||||
stats[i]->itable[12], stats[i]->itable[13], stats[i]->itable[14], | |||||
stats[i]->itable[15], stats[i]->itable[16], stats[i]->itable[17], | |||||
stats[i]->itable[18], stats[i]->itable[19]);*/ | |||||
(int)(stats[i]->imean / 64)); | |||||
} | } | ||||
fprintf(stderr, "** %i counters dumped **\n", nstats); | fprintf(stderr, "** %i counters dumped **\n", nstats); | ||||