参考:http://blog.csdn.net/oujunli/article/details/17563999


ms为单位
long startTime = System.currentTimeMillis();
long endTime = System.currentTimeMillis();
Log.e("-------------", "初始化数据时间:" + (endTime - startTime) + "ms");以纳秒为单位
long startTime = System.nanoTime(); // 获取开始时间
// doThing(); // 测试的代码段
long endTime = System.nanoTime(); // 获取结束时间
Log.e("wsy","代码运行时间: " + (endTime - startTime) + "ms"); 
std::chrono::time_point<std::chrono::system_clock> t1 = std::chrono::system_clock::now();std::chrono::time_point<std::chrono::system_clock> t2 = std::chrono::system_clock::now();LOGE("cost time:%f ms\n",(float)std::chrono::duration_cast<std::chrono::microseconds>(t2 - t1).count() / 1000);
在native的代码中,可以通过下面的方式得到函数的执行时间:
#include <stdio.h>
#include <sys/time.h>
void main ()
{
struct timeval time;
gettimeofday(&time, NULL);
printf ( "\007The current date/time is: %lld\n", time.tv_sec * 1000 + time.tv_usec /1000);
}
在kernel里面,可以通过rtc,跟上层应用的时间对应起来,如下面的例子:
#include <linux/time.h>
#include <linux/rtc.h>

struct timespec  time_start, time_end;
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);

.......

getnstimeofday(&time_end);
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);

当然过从java到native到kernel一个流程跟下去,有可能会发现user space里面的耗时比较多,而kernel里面却没有耗时的情况,这是因为有进程调度的存在。最近就遇到了这样的问题,user space一个函数耗时30ms,但是在kernel里面却没有花时间,因为从kernel返回到user space的时候,进行了进程调度,而此时的user space的thread block了,才会产生这样的情况,希望注意。

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的时间时间对应起来了,对做系统性能的人来说,这是多么重要的事情呀!

android 计算执行时间相关推荐

  1. RenderScript 让你的Android计算速度快的飞上天!

    我的简书同步发布:RenderScript 让你的Android计算速度快的飞上天! 在上一篇文章Android自动手绘,圆你儿时画家梦! 中结尾提到,我将介绍提升轮廓提取速度相关内容,今天一起学习A ...

  2. android java 时间格式化_(Java / Android)计算两个日期之间的日期,并以特定格式显示结果...

    我试图在2个日期之间计算日期如下: >获取当前日期 >获取过去或未来的日期 >计算不同的差异. 1和否2 >以下列格式显示日期 >如果结果是在过去(2天前)或将来(在2天 ...

  3. android计算dpi代码_android计算pad或手机的分辨率/像素/密度/屏幕尺寸/DPI值的方法...

    手机分辨率基础知识(DPI,DIP计算) 1.术语和概念 术语 说明 备注 Screen size(屏幕尺寸) 指的是手机实际的物理尺寸,比如常用的2.8英寸,3.2英寸,3.5英寸,3.7英寸 摩托 ...

  4. Android计算标准BMI值

    今天做了关于计算标准BMI值的小作业,可以计算出你的体重是正常,偏瘦或偏胖 MainAcitivity.java 1 package com.example.bmi; 2 3 import java. ...

  5. android计算手机的分辨率/像素/密度/屏幕尺寸/DPI值的方法

    手机分辨率基础知识(DPI,DIP计算) 1.术语和概念 术语 说明 备注 Screen size(屏幕尺寸) 指的是手机实际的物理尺寸,比如常用的2.8英寸,3.2英寸,3.5英寸,3.7英寸 摩托 ...

  6. android计算bmi的程序,简单的基于android的BMI计算应用

    写这样的一个程序,纯粹是为了入门,为了练手,为何选择BMI,因为正好手边的书上就是拿这个做例子...何况写个BMI总比写个计算器来的简单...好这就开始了. BMI(即身体质量指数,称简体质指数又称体 ...

  7. android 计算到期日期,在Android上计算日期

    我正在为Android构建一个应用程序,我需要存储一天并计算到那一天到来的天数. 我将这一天存储在共享的首选项上.首先,我初始化日历. Calendar next = Calendar.getInst ...

  8. 判断生日日期的Android代码,android计算生日的方法

    前阵子遇到一个需求:计算生日.假设生日是2016年2月1号,那么我需要得到一个"1岁28天"的字符串.我没想到java或者android API里有现成的方法可以计算,ios小哥表 ...

  9. android 计算运动速度,android – 计算参考真北的加速度

    加速计传感器返回设备的加速度.这是3维空间中的向量.该向量在设备坐标系中返回.你想要的是这个向量在世界坐标中的坐标,这很简单 R = rotation matrix obtained by calli ...

最新文章

  1. linux 源码安装浏览器,vps+linux+安装浏览器
  2. JDBC中Statement与PreparedStatement的区别
  3. 蓝桥杯基础练习1-15(python)
  4. android入门问题--R文件丢失
  5. Python入门之类与面向对象(一)
  6. Android应用自动更新功能代码实现
  7. 【Python之旅】第一篇:基于文件处理的登陆接口
  8. zabbix server is not running解决办法
  9. Java实现JPBC密码库的实验
  10. 概念梳理:C++中iostream头文件和命名空间的基础介绍和拓展内容
  11. 计算机三级信息安全技术考什么?计算机三级有必要考吗?
  12. 常用媒体查询以及手机横竖屏监听
  13. J-Flash下载STM32用J-link的设置方法
  14. vs2013配置qt5.7.0
  15. 假冒Macbook充电器拆解:外表令人信服但内部却非常危险
  16. 《PPT思维》第一课:PPT基础思维
  17. ERROR: No matching distribution found for XXXXX 国内的镜像源来加速网络
  18. 一个故事看懂AI神经网络工作原理
  19. 推荐系统——利用用户行为数据
  20. 出错信息:Incorrect string value: '\xE4\xBD\xA0\xE5\xA5\xBD' for column 'username'

热门文章

  1. Linxu内核模块开发入门(金荣的第一篇个人技术博客)
  2. mysql 5.6 emoji_让MySQL支持Emoji表情 mysql 5.6
  3. mysql 去重 根据id_超详细的四类数据库去重实现方案汇总,值得收藏
  4. 慢保刚办下来如何使用_在科目二离合和方向没学好的学员如何备考科目三?
  5. mysql 自动化运维工具_部署MySQL自动化运维工具inception+archer
  6. 自定义注解妙用,一行代码搞定用户操作日志记录
  7. 你多久没换过壁纸了?新年了,换一换吧!
  8. Java 9 - 17 特性解读:Java 11
  9. 用了10年的微信表情,它居然偷偷把烟给戒了...
  10. 谨记!怎么样的编程会让你进监狱?