Android7.1 SurfaceFlinger实时显示帧率FPS/LCD帧数/Camera帧数

一、帧数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,Graphic学习,Android,多媒体)