Files
pdlivexp/FaceUnity/src/main/java/com/yunbao/faceunity/utils/FPSUtil.java
2022-09-17 16:54:58 +08:00

64 lines
1.7 KiB
Java

package com.yunbao.faceunity.utils;
/**
* FPS工具类
* Created by tujh on 2018/5/24.
*/
public class FPSUtil {
private static final int NANO_IN_ONE_MILLI_SECOND = 1000000;
private static final int NANO_IN_ONE_SECOND = 1000 * NANO_IN_ONE_MILLI_SECOND;
private static long sLastFrameTimeStamp = 0;
/**
* 每帧都计算
*
* @return
*/
public static double fps() {
long tmp = System.nanoTime();
double fps = ((double) NANO_IN_ONE_SECOND) / (tmp - sLastFrameTimeStamp);
sLastFrameTimeStamp = tmp;
// Log.e(TAG, "FPS : " + fps);
return fps;
}
private static long mStartTime = 0;
/**
* 平均值
*
* @return
*/
public static double fpsAVG(int time) {
long tmp = System.nanoTime();
double fps = ((double) NANO_IN_ONE_SECOND) * time / (tmp - mStartTime);
mStartTime = tmp;
// Log.e(TAG, "FPS : " + fps);
return fps;
}
private long mLimitMinTime = 33333333;
private long mLimitStartTime;
private int mLimitFrameRate;
public void setLimitMinTime(long limitMinTime) {
mLimitMinTime = limitMinTime;
}
public void limit() {
try {
if (mLimitFrameRate == 0 || mLimitFrameRate > 600000) {
mLimitStartTime = System.nanoTime();
mLimitFrameRate = 0;
}
long sleepTime = mLimitMinTime * mLimitFrameRate++ - (System.nanoTime() - mLimitStartTime);
if (sleepTime > 0) {
Thread.sleep(sleepTime / NANO_IN_ONE_MILLI_SECOND, (int) (sleepTime % NANO_IN_ONE_MILLI_SECOND));
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}