一、帧数FPS:显卡GPU越强,处理速度越快
定义:一秒钟内画面刷新的速度,60fps就是一秒钟出现60张画面,而对帧数起到决定性的是电脑中的显卡,显卡性能越强,帧数当然就越高啦,然后画面就越流畅。
1.在frameworks/native/services/surfaceflinger/SurfaceFlinger.h
class SurfaceFlinger : public BnSurfaceComposer, private IBinder::DeathRecipient,private HWComposer::EventHandler{
void debugShowFPS();
//add
mat4 mPreviousColorMatrix;
};
2.在frameworks/native/services/surfaceflinger/SurfaceFlinger_hwc1.cpp
oid SurfaceFlinger::debugShowFPS(){
/*
uint32_t flipCount = getDefaultDisplayDevice()->getPageFlipCount();
flipCount: SurfaceFlinger合成帧次数,即向屏幕提交多少帧数据.
在t1 时刻获取 mPageFlipCount 的数值 v1,在在 t2时刻获取 mPageFlipCount 的数值 v2,FPS 的计算公式:
FPS = (v2 - v1) / (t2 - t1);
*/
static int mFrameCount;
//就是flipCount的值,static全局变量
static int mLastFrameCount = 0;
static nsecs_t mLastFpsTime = 0;
static float mFps = 0;
char value[16];
mFrameCount++;
nsecs_t now = systemTime();
nsecs_t diff = now - mLastFpsTime;
ALOGE(“xxx———> %s(), %d, startTime = %tu",__FUNCTION__,__LINE__,mLastFpsTime/(1000*1000));
//ms
ALOGE(“xxx———> %s(), %d, endTime = %tu",__FUNCTION__,__LINE__,now/(1000*1000));
//ms
ALOGE(“xxx———> %s(), %d, diff = %tu",__FUNCTION__,__LINE__,diff/(1000*1000));
//ms
ALOGE(“xxx———> %s(), %d, mFrameCount = %d",__FUNCTION__,__LINE__,mFrameCount);
//
//if(diff > ms2ns(250)) {//250ms显示一次
if(diff > ms2ns(1000)) {//1s显示一次
ALOGE("zgj------> %s(), %d, mCount ================ %d",__FUNCTION__,__LINE__,mFrameCount - mLastFrameCount);
//mCount:SurfaceFlinger1s合成的帧率
mFps = ((mFrameCount - mLastFrameCount) * float(s2ns(1))) / diff;
mLastFpsTime = now;
mLastFrameCount = mFrameCount;
property_get("debug.showfps.flags", value, "0");
if (value[0] == '1') {
ALOGE(“xxx———> %s(), %d, fps ======================>%.2f",__FUNCTION__,__LINE__,mFps);
}
}
}3.编译
# mm
注意:此时需要拷贝system/lib64/libsurfaceflinger.so,然后push到设备的/system/lib64下,重启或杀死surfaceflinger即可.
4.启动打印
# adb shell setprop debug.showfps.flags 1二、摄像头捕捉图像帧数(一般硬件最大支持每秒30帧)
# adb shell setprop persist.debug.sf.showfps 1
# adb logcat -v time | grep "PROFILE_PREVIEW_FRAMES_PER_SECOND"三、LCD显示器刷新率
定义:一般都是出现在显示器/屏幕上,比如我的是高刷新率显示器,144Hz的,意思就是显示器的物理刷新速度上限时1秒钟144张,这个需要显示器的面板、驱动电脑支持,而这些数据来源于显卡的输出。一般显示器60Hz刷新率,显示器固定一秒显示60幅画面。
总结:FPS帧数是由显卡决定,摄像头帧率由摄像头硬件决定,刷新率是由显示器决定。
【Android|Android7.1 SurfaceFlinger实时显示帧率FPS/LCD帧数/Camera帧数】