/*
*
* EDataShow.java
*
* Created by Wuwang on 2016/11/18
* Copyright © 2016年 深圳哎吖科技. All rights reserved.
*/
package com.aiyaapp.camera.sdk.etest;
import java.util.Locale;
import android.app.ActivityManager;
import android.content.Context;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PixelFormat;
import android.graphics.PorterDuff;
import android.os.Debug;
import android.os.Process;
import android.util.AttributeSet;
import android.view.SurfaceHolder;
import android.view.SurfaceView;
import com.aiyaapp.camera.sdk.base.Log;
import com.aiyaapp.camera.sdk.util.DisplayUtil;
/**
* Description:
*/
public class EDataShow extends SurfaceView implements Runnable,SurfaceHolder.Callback {
private SurfaceHolder mHolder;
private Canvas mCanvas;
private Paint mPaint;
private Thread mThread;
private boolean flag=false;
private final int dtime=500;
private Debug.MemoryInfo mInfo;
private final String OUT_LOG="memoryUseage:%04d cpuUsage:%.3f fps:%02f";
public EDataShow(Context context) {
this(context,null);
}
public EDataShow(Context context, AttributeSet attrs) {
super(context, attrs);
init();
}
private void init(){
mHolder=getHolder();
mHolder.addCallback(this);
mHolder.setFormat(PixelFormat.TRANSLUCENT);
setZOrderOnTop(true);
mPaint=new Paint();
mPaint.setTextSize(DisplayUtil.sp2px(getContext(),12));
mPaint.setColor(0xFFFF8800);
mPaint.setStrokeWidth(2);
mPaint.setAntiAlias(true);
mInfo=getRunningInfo(getContext());
}
@Override
public void surfaceCreated(SurfaceHolder holder) {
flag=true;
mThread=new Thread(this);
mThread.start();
}
@Override
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
}
@Override
public void surfaceDestroyed(SurfaceHolder holder) {
flag=false;
}
@Override
public void run() {
while (flag){
long startTime=System.currentTimeMillis();
myDraw();
long deltaTime=System.currentTimeMillis()-startTime;
if(deltaTime<dtime){
try {
cpuRate=AppOsUtils.getProcessCpuRate(dtime-deltaTime);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
private void myDraw(){
mInfo=getRunningInfo(getContext());
memSize=mInfo!=null?mInfo.getTotalPss()/1024:-1;
try {
mCanvas=mHolder.lockCanvas();
mCanvas.drawColor(Color.TRANSPARENT, PorterDuff.Mode.CLEAR);
mCanvas.drawText(String.format(Locale.CHINA,"Fps=%.1f,Dtm=%03d,Cma=%.1f",EData.data
.getFps(),
EData.data.getDealTime(),EData.data.getCameraFps()),40,40, mPaint);
try {
mCanvas.drawText(String.format(Locale.CHINA,"Mem=%04dM,Cpu=%.3f%%,track:%b",memSize,
cpuRate,EData.data.getTrackCode()==1),
40,70,mPaint);
}catch (Exception e){
e.printStackTrace();
}
Log.e("log_analyse",String.format(Locale.CHINA,OUT_LOG,memSize,cpuRate,EData.data
.getFps()));
}catch (Exception e){
e.printStackTrace();
}finally {
if(mCanvas!=null){
mHolder.unlockCanvasAndPost(mCanvas);
}
}
}
private int memSize;
private float cpuRate;
private ActivityManager mActivityManager;
private Debug.MemoryInfo getRunningInfo(Context context) {
if(mActivityManager==null){
mActivityManager = (ActivityManager)context.getSystemService(Context
.ACTIVITY_SERVICE);
//获得系统里正在运行的所有进程
}
int mpid = Process.myPid();
Debug.MemoryInfo[] info=mActivityManager.getProcessMemoryInfo(new int[]{mpid});
if(info!=null&&info.length>0){
return info[0];
}
return null;
}
}