• PC端周期判断,是jenkins任务吧?
    你们在锤子话,应该是不需要兼顾iOS?😀

  • 请教一下CI部署的思路,shell命令是怎么融入CI的流程的?是USB连PC?stf ?

  • @sandman 请教一下,我把帧率处理的格式化出来,加了一些注释,变量改一下名字,但是还是有几处不清楚,能抽空解答一下吗?

    if(NR==1){ # 如果只有一行数据的话
    r=$1/1000000; # r =16.6 刷新时间间隔
    if(r<0)
    r=$1/1000;
    secondcolumn=0;
    Frames=0;
    WN=1
    }
    else{ #第一列:app里数据(bitmap/material等)准备时间,第二列:cpu将数据传递给h/whardware)绘制时的同步时间(这里可以理解为cpugpu绘制一帧时,二个线程的同步时间)第二行第三列表示:h/whardware)绘制完成的时间
    if(Frames>0&&$0=="")
    tag=1;
    if(NF==3&&$2!=0&&$2!=9223372036854775807){ # NF 一行有3列【正常情况下】 第二列不等于0【正常情况】 第二列不等于那一串数字【正常情况】

    refeshround=($3-$1)/1000000/r; # 第一列减第三列 / 1ms的纳秒数 / 刷新时间间隔 x应该为这次的帧绘制跨越了几次的刷新时间间隔

    if(secondcolumn==0){ # 刚开始刷SurfaceFlinger的数据第二列是为0
    secondcolumn=$2; # 第二列标示刷新的开始时间
    Frames=1;
    jank=0;
    janktwo=0;
    if(refeshround<=1) # 如果一个刷新周期内就完成绘制
    totaltimediff=r; # C等于16.9ms
    if(refeshround>1){ # 如果大于一个刷新周期的话
    jank+=1; # jank就加1
    totaltimediff=int(refeshround)*r; # C就等于x取整倍的r
    if(refeshround%1>0) # 如果x不是整数的话,C要加上一个刷新周期?用意是???
    totaltimediff+=r
    };
    if(refeshround>2) # 如果x大于2个刷新周期话
    janktwo+=1;
    MFS=r; # 初始MFS等于一个刷新周期
    OKT=0
    }
    else{
    timediff=($2-secondcolumn)/1000000; # timediff 第二列和上一行第二列的时间差->ms
    if(timediff>500){ # 两帧之间的时间差
    tag=1 # 大于500ms认为是用户没有操作
    }
    else{# 两帧如果是小于500ms
    Frames+=1;
    if(timediff>=r){ # 时间差大于等于一个刷新周期
    totaltimediff+=timediff; # ???
    if(timediff>kpi) # kpi=16
    OKT+=1; # 超过kpi 16ms的次数就加1
    if(timediff>=MFS) # 如果时间差大于记录的MFS,则MFS记录为时间差
    MFS=timediff;
    if(refeshround>1)
    jank+=1;
    if(refeshround>2)
    janktwo+=1;
    secondcolumn=$2 #
    }
    else{ # 如果时间差小于一个刷线周期
    totaltimediff+=r;
    secondcolumn=sprintf("%.0f",secondcolumn+r*1000000) # ?为啥第二列要加上一个刷新周期呢?
    }
    }
    };
    if(Frames==1) # 我理解是如果是第一帧的时候,把FU时间记录下来
    FU=sprintf("%.3f",$2/1000000000)
    };
    if(Frames>0&&tag==1){ # tag0的时候表示是超过了127行后的一个空行,
    tag=0;
    if(Frames==1) # Frames如果等于1的话就认为是缓存帧?
    LU=sprintf("%.3f",FU+totaltimediff/1000); # 把最后时间加上这一帧的时间,然后继续
    else
    LU=sprintf("%.3f",secondcolumn/1000000000);
    Date=strftime("%F %Date",time+LU)"."sprintf("%.0f",(time+LU)%1*1000);
    FPS=sprintf("%.2f",Frames*1000/totaltimediff); # 帧率 出现的帧数【大于1*1000 / 两帧的时间差 1*1000 / 16.6 = 60FSS
    MFS=sprintf("%.0f",MFS);
    g=FPS/target; # 实际帧率和目标帧率的比值
    if(g>1) # 如果实际帧率大于了目标帧率
    g=1;
    h=kpi/MFS; #kpi 16ms / 两帧时间差
    if(h>1)
    h=1;
    SS=sprintf("%.2f",g*60+h*20+(1-OKT/Frames)*20); # 流畅度 = 实际帧率比目标帧率比值*60【目标帧率越高越好】 + 目标时间和两帧时间差比值*20【两帧时间差越低越好】 + (1-超过16ms次数/帧数)*20【次数越少越好】
    print FU"\t"LU"\t"Date"\t"FPS+0"\t"Frames"\t"jank"\t"janktwo"\t"MFS"\t"OKT"\t"SS"\t"WN;
    Frames=0; # Frames 重置为0
    if($0==""){
    secondcolumn=0;WN+=1
    }
    else{
    secondcolumn=$2;Frames=1;jank=0;janktwo=0;
    if(refeshround<=1)totaltimediff=r;if(refeshround>1){
    jank+=1;
    totaltimediff=int(refeshround)*r;
    if(refeshround%1>0)
    totaltimediff+=r
    };
    if(refeshround>2)
    janktwo+=1;MFS=r;OKT=0
    }
    }
    }
  • 你可以问一下 浮云...
    如果你可以在windows下可以用pycharm打开看一下 是不是 constants没有下载,是不是要 pip install constants,
    不过还是建议你看一下 浮云实现的代码逻辑


  • 你是用Android studio 是吗? 在这边配置一下你本地下载好的

  • 你们开发写单测吗?

  • 你这个看起来是gradle下载失败? 你可以用本地的gradle下一下,不要从网上下。
    flutter程序根目录执行 flutter doctor 命令,发出来看看

  • 赞,后续可以交流flutter的测试,wigdet test和integration test 的玩法现在业界还是很少的

  • 应该是你的窗口名称输错了,下面这个命令可以看当前窗口的

    dumpsys window windows | grep mCurrent
  • awk后面感觉是混淆过的,读起来好累。。。😭