git stash
git stash save "test-cmd-stash":给stash增加messagegit stash pop:将缓存堆栈中的第一个stash删除,并将对应修改应用到当前的工作目录下。git stash apply:将缓存堆栈中的stash多次应用到工作目录中,但并不删除stash拷贝git stash list:查看现有stashgit stash drop stash@{0}:移除stashgit stash clear:删除所有缓存的stashgit stash show:查看指定stash的diff,后面可以跟着stash名字,还可以添加-p或–patch,查看特定stash的全部diffgit stash branch:创建一个新的分支,检出储藏工作时的所处的提交,重新应用工作git stash -u/--include-untracked储藏untracked文件,git stash -a/--all:stash当前目录下所有修改
EGL 是 OpenGL ES 渲染 API 和本地窗口系统(native platform window system)之间的一个中间接口层,它主要由系统制造商实现。EGL提供如下机制:


左图为正常模式下显示的视图,右图为开启GPU Overdraw后显示的视图
上图左部是Systrace的界面,我们可以通过右边的代码抓取Systrace,观察进程的执行时间。在输入抓取命令时,时间参数一般选择5到10秒,因为时间过短可能会抓不到想要的数据,时间过长则可能抓取失败。
拿到一个Systrace时主要考察哪些因素?首先看一下CPU的频率,找到对应的进程或者线程,查看相关信息;同时还要观察GPU的频率、Surface Flinger还有绘图的Buffer状态等。
执行成功后将返回三个测量到的时间:


从上图Strict Mode的日志可以看出:StrictMode policy violation耗时2秒左右。通过最下行蓝色的log,可以知道应用是在某一个目录里面寻找一个文件,判断文件是否存在。
这是一个GPU的例子,上图主要问题是GPU使用了太长时间处理应用传过来的buffer,例子中Surfaceflinger 使用GPU 做了图像叠加,说明图层比较多。使用GPU做叠加主要会产生功耗和唤醒耗时的问题。大家在做界面设计的时候,尽量不要使用GPU进行叠加。在上面的例子中,GPU叠加之后,导致了大概15ms左右的延时,因为GPU操作完成以后还需要交给Surfaceflinger把图像显示到屏幕上。
可以通过上图的红色条块了解messageloop RunTask信息,红色条块上的蓝色bar,表示线程在CPU上的状态。蓝色表示这个线程处于等待CPU调度的状态,可见等待超过8ms的时间,是正常调度周期好几倍。导致这种情况发生的原因有两个:CPU负载过大或CPU调度出现了问题。在上图中我们可以看出,CPU0和CPU1使用率100%,但是CPU2和CPU3是offline的状态,说明系统出现问题,导致CPU2和CPU3未能唤醒,帮助完成系统任务。


