對於做性能的人來說,知道時間的花在哪了是比較重要的,可以在函數前後得到系統的時間,計算時間戳能夠得到每個函數的時間。
struct rtc_time tm_start, tm_end;
long time_nsec = 0;
getnstimeofday(&time_start);
rtc_time_to_tm(time_end.tv_sec, &tm_start);
printk(KERN_ERR "\n (%d-%02d-%02d %02d:%02d:%02d.%09lu UTC)\n",
tm_start.tm_year + 1900, tm_start.tm_mon + 1, tm_start.tm_mday,
tm_start.tm_hour, tm_start.tm_min, tm_start.tm_sec, time_start.tv_nsec);
.......
rtc_time_to_tm(time_end.tv_sec, &tm_end);
time_nsec = time_end.tv_nsec - time_start.tv_nsec;
printk(KERN_ERR "\n tid: %d, common: %s \n", current->pid, current->comm);
printk(KERN_ERR "\n end(%d-%02d-%02d %02d:%02d:%02d.%09lu UTC)\n",
tm_end.tm_year + 1900, tm_end.tm_mon + 1, tm_end.tm_mday,
tm_end.tm_hour, tm_end.tm_min, tm_end.tm_sec, time_end.tv_nsec);
printk(KERN_ERR "\n mdss_fb_commit_wq_handler end, time_nsec : %ld \n" , time_nsec);
2014/03/12更新:
java得到當前的年月日,時分秒格式的時間
import java.text.SimpleDateFormat;
SimpleDateFormat mFormat = new java.text.SimpleDateFormat("yyyy:MM:dd HH:mm:ss:SSS");
String time = mFormat.format(System.currentTimeMillis());
2014/03/13更新:
Native得到當前的年月日,時分秒格式的時間
timeval tv;
gettimeofday(&tv, NULL);
int milli = tv.tv_usec / 1000;
char buffer [80];
strftime(buffer, 80, "%Y:%m:%d %H:%M:%S", localtime(&tv.tv_sec));
char currentTime[84] = "";
sprintf(currentTime, "%s.%d", buffer, milli);
ALOGD("time: %s \n", currentTime);
到現今爲止,終於把Android Java、Native、Kernel的時間時間對應起來了,對做系統性能的人來說,這是多麼重要的事情呀!