zoukankan      html  css  js  c++  java
  • FPS检测

    目的:检测绘制过程中的FPS数量。

    获取DectorView的ViewTreeObserver,感知UI绘制的开始

    private void addDrawListener(final Activity activity) {
    activity.getWindow().getDecorView().post(new Runnable() {
    @Override
    public void run() {
    activity.getWindow().getDecorView().getViewTreeObserver().removeOnDrawListener(FPSTracer.this);
    activity.getWindow().getDecorView().getViewTreeObserver().addOnDrawListener(FPSTracer.this);
    }
    });
    }

    @Override
    public void onDraw() {
    isDrawing = true;
    }

    复制代码
    通过Choreographer.FrameCallback,感知UI绘制的结束

    @Override
    public void doFrame(long lastFrameNanos, long frameNanos) {
    if (!isInvalid && isDrawing && isEnterAnimationComplete() && mTraceConfig.isTargetScene(getScene())) {
    handleDoFrame(lastFrameNanos, frameNanos, getScene());
    }
    isDrawing = false;
    }
    复制代码
    理论上用户更关心的是绘制过程中FPS过低导致的卡顿(UI静止的情况下,用户是感知不到FPS低的)

    在doFrame方法中,记录每一帧的数据,其中scene这个字段标识一个页面

    @Override
    public void onChange(final Activity activity, final Fragment fragment) {
    this.mScene = TraceConfig.getSceneForString(activity, fragment);
    }
    复制代码
    onChange的默认实现是通过Application的ActivityLifecycleCallbacks回调感知Activity的变化

    @Override
    public void onActivityResumed(final Activity activity) {
    ...
    if (!activityHash.equals(mCurActivityHash)) {
    for (IObserver listener : mObservers) {
    listener.onChange(activity, null);
    }
    mCurActivityHash = activityHash;
    }
    ...
    }

    复制代码
    FPS数据默认是2分钟分析一次(前台情况下),切后台时后台轮询线程停止。


    /**
    * report FPS
    */
    private void doReport() {
    ...
    //数据分析逻辑可行阅读
    }

  • 相关阅读:
    Qt QListWidgetItem的添加与删除
    Qt QListWidget中实现每个单元项显示文字在上图片在下
    Qt QListWiget的Item的icon大小设置
    Qt 控制Widget窗体大小方法
    装饰模式(Decorator)C++实现
    C++ 结构型模式
    Qt 创建一个excel文件(通过save as 方法)
    深度学习之 YOLO v1,v2,v3详解
    Qt excel 操作使用说明
    “云钉一体”背后,阿里云希望改变什么?
  • 原文地址:https://www.cnblogs.com/hyhy904/p/11295902.html
Copyright © 2011-2022 走看看