function:current time

This commit is contained in:
云风
2013-09-18 16:14:50 +08:00
parent e5382cf876
commit ed09f28481
3 changed files with 19 additions and 33 deletions

View File

@@ -32,15 +32,7 @@ struct stat {
static void
_stat_begin(struct stat *S, struct timespec *ti) {
S->count++;
#if !defined(__APPLE__)
clock_gettime(CLOCK_THREAD_CPUTIME_ID, ti);
#else
struct task_thread_times_info aTaskInfo;
mach_msg_type_number_t aTaskInfoCount = TASK_THREAD_TIMES_INFO_COUNT;
assert(KERN_SUCCESS == task_info(mach_task_self(), TASK_THREAD_TIMES_INFO, (task_info_t )&aTaskInfo, &aTaskInfoCount));
ti->tv_sec = aTaskInfo.user_time.seconds;
ti->tv_nsec = aTaskInfo.user_time.microseconds * 1000;
#endif
current_time(ti);
}
inline static void

View File

@@ -13,18 +13,27 @@
#include <mach/mach.h>
#endif
void
diff_time(struct timespec *ti, uint32_t *sec, uint32_t *nsec) {
struct timespec end;
void
current_time(struct timespec *ti) {
#if !defined(__APPLE__)
clock_gettime(CLOCK_THREAD_CPUTIME_ID, &end);
clock_gettime(CLOCK_THREAD_CPUTIME_ID, ti);
#else
struct task_thread_times_info aTaskInfo;
mach_msg_type_number_t aTaskInfoCount = TASK_THREAD_TIMES_INFO_COUNT;
assert(KERN_SUCCESS == task_info(mach_task_self(), TASK_THREAD_TIMES_INFO, (task_info_t )&aTaskInfo, &aTaskInfoCount));
end.tv_sec = aTaskInfo.user_time.seconds;
end.tv_nsec = aTaskInfo.user_time.microseconds * 1000;
ti->tv_sec = aTaskInfo.user_time.seconds;
ti->tv_nsec = aTaskInfo.user_time.microseconds * 1000;
#endif
}
void
diff_time(struct timespec *ti, uint32_t *sec, uint32_t *nsec) {
if (sec == NULL) {
current_time(ti);
return;
}
struct timespec end;
current_time(&end);
int diffsec = end.tv_sec - ti->tv_sec;
assert(diffsec>=0);
int diffnsec = end.tv_nsec - ti->tv_nsec;
@@ -91,15 +100,7 @@ trace_new(struct trace_pool *p) {
t->next = NULL;
t->ti_sec = 0;
t->ti_nsec = 0;
#if !defined(__APPLE__)
clock_gettime(CLOCK_THREAD_CPUTIME_ID, &t->ti);
#else
struct task_thread_times_info aTaskInfo;
mach_msg_type_number_t aTaskInfoCount = TASK_THREAD_TIMES_INFO_COUNT;
assert(KERN_SUCCESS == task_info(mach_task_self(), TASK_THREAD_TIMES_INFO, (task_info_t )&aTaskInfo, &aTaskInfoCount));
t->ti.tv_sec = aTaskInfo.user_time.seconds;
t->ti.tv_nsec = aTaskInfo.user_time.microseconds * 1000;
#endif
current_time(&t->ti);
return t;
}
@@ -153,15 +154,7 @@ trace_switch(struct trace_pool *p, int session) {
if (t->next) {
t->next->prev = prev;
}
#if !defined(__APPLE__)
clock_gettime(CLOCK_THREAD_CPUTIME_ID, &t->ti);
#else
struct task_thread_times_info aTaskInfo;
mach_msg_type_number_t aTaskInfoCount = TASK_THREAD_TIMES_INFO_COUNT;
assert(KERN_SUCCESS == task_info(mach_task_self(), TASK_THREAD_TIMES_INFO, (task_info_t )&aTaskInfo, &aTaskInfoCount));
t->ti.tv_sec = aTaskInfo.user_time.seconds;
t->ti.tv_nsec = aTaskInfo.user_time.microseconds * 1000;
#endif
current_time(&t->ti);
return;
}
prev = t;

View File

@@ -6,6 +6,7 @@
#define NANOSEC 1000000000
void current_time(struct timespec *ti);
void diff_time(struct timespec *ti, uint32_t *sec, uint32_t *nsec);
struct trace_pool;