/*
- * Sherlock Library -- Poor Man's Profiler
+ * UCW Library -- Poor Man's Profiler
*
* (c) 2001 Martin Mares <mj@ucw.cz>
+ *
+ * This software may be freely distributed and used according to the terms
+ * of the GNU Lesser General Public License.
*/
#include "lib/lib.h"
#include <stdio.h>
-#ifdef CONFIG_PROFILE_TOD
+/* PROFILE_TOD */
+
#include <sys/time.h>
void
-prof_init(prof_t *c)
+prof_tod_init(struct prof_tod *c)
{
c->sec = c->usec = 0;
}
void
-prof_switch(prof_t *o, prof_t *n)
+prof_tod_switch(struct prof_tod *o, struct prof_tod *n)
{
struct timeval tv;
gettimeofday(&tv, NULL);
if (o->usec < 0)
{
o->usec += 1000000;
- o->sec++;
+ o->sec--;
}
else while (o->usec >= 1000000)
{
o->usec -= 1000000;
- o->sec--;
+ o->sec++;
}
}
}
int
-prof_format(char *buf, prof_t *c)
+prof_tod_format(char *buf, struct prof_tod *c)
{
return sprintf(buf, "%d.%06d", c->sec, c->usec);
}
-#endif
-#ifdef CONFIG_PROFILE_TSC
+/* PROFILE_TSC */
+
+#ifdef CPU_I386
+
void
-prof_init(prof_t *c)
+prof_tsc_init(struct prof_tsc *c)
{
c->ticks = 0;
}
int
-prof_format(char *buf, prof_t *c)
+prof_tsc_format(char *buf, struct prof_tsc *c)
{
- return sprintf(buf, "%Ld", c->ticks);
+ return sprintf(buf, "%lld", c->ticks);
}
+
#endif
-#ifdef CONFIG_PROFILE_KTSC
+/* PROFILE_KTSC */
+
+#ifdef CONFIG_LINUX
+
#include <fcntl.h>
#include <unistd.h>
static int self_prof_fd = -1;
void
-prof_init(prof_t *c)
+prof_ktsc_init(struct prof_ktsc *c)
{
if (self_prof_fd < 0)
{
}
void
-prof_switch(prof_t *o, prof_t *n)
+prof_ktsc_switch(struct prof_ktsc *o, struct prof_ktsc *n)
{
- u64 u, s;
+ unsigned long long u, s;
byte buf[256];
int l = pread(self_prof_fd, buf, sizeof(buf)-1, 0);
ASSERT(l > 0 && l < (int)sizeof(buf)-1);
buf[l] = 0;
- l = sscanf(buf, "%Ld%Ld", &u, &s);
+ l = sscanf(buf, "%lld%lld", &u, &s);
ASSERT(l == 2);
if (n)
}
int
-prof_format(char *buf, prof_t *c)
+prof_ktsc_format(char *buf, struct prof_ktsc *c)
{
- return sprintf(buf, "%Ld+%Ld", c->ticks_user, c->ticks_sys);
+ return sprintf(buf, "%lld+%lld", (long long) c->ticks_user, (long long) c->ticks_sys);
}
+
#endif