修改Android Top刷新时间为ms

Android Top命令实现

最近有个性能分析问题,发现使用Top和Qcom Profiler分析得到的数据存在差异,怀疑是Top命令统计的是 top -d value(second default 3s秒内的平均值,而qcom Profiler 统计的却可以精确到us。于是想修改下Top的源码,将top命令统计的时间间隔减小到ms。

top命令的源码在:

external\toybox\toys\posix\ps.c
void top_main(void)
{
  sprintf(toybuf, "PID,USER,%s%%CPU,%%MEM,TIME+,%s",
    TT.top.O ? "" : "PR,NI,VIRT,RES,SHR,S,",
    toys.optflags&FLAG_H ? "CMD:15=THREAD,NAME=PROCESS" : "ARGS");
  if (!TT.top.s) TT.top.s = TT.top.O ? 3 : 9;
  top_setup(toybuf, "-%CPU,-ETIME,-PID");
  if (TT.top.O) {
    struct strawberry *fields = TT.fields;

    fields = fields->next->next;
    comma_args(TT.top.O, &fields, "bad -O", parse_ko);
  }

  top_common(merge_deltas);
}

接着

static void top_setup(char *defo, char *defk)
{
  TT.top.d *= 1000;//刷新时间top.d*1000该为TT.top.d *= 1;
  if (toys.optflags&FLAG_b) TT.width = TT.height = 99999;
  else {
    TT.time = millitime();
    set_terminal(0, 1, 0);
    sigatexit(tty_sigreset);
    xsignal(SIGWINCH, generic_signal);
    printf("\033[?25l\033[0m");
  }
  shared_main();

  comma_args(TT.top.u, &TT.uu, "bad -u", parse_rest);
  comma_args(TT.top.p, &TT.pp, "bad -p", parse_rest);
  TT.match_process = shared_match_process;

  default_ko(defo, &TT.fields, "bad -o", TT.top.o);
  dlist_terminate(TT.fields);

  // First (dummy) sort field is overwritten by setsort()
  default_ko("-S", &TT.kfields, 0, 0);
  default_ko(defk, &TT.kfields, "bad -k", TT.top.k);
  dlist_terminate(TT.kfields);
  setsort(TT.top.s-1);
}

从上面的分析看:

**将TT.top.d = 1000改为TT.top.d = 1 就可以将Top命令的刷新时间改为ms为单位

另外:

在toybox的mk文件中看,很多系统的常用工具全在这,如echo 、kill 、ls 、ps 等都在这实现

.\external\toybox\Android.mk
#
# To add a toy:
#

#  Edit .config to enable the toy you want to add.
#  make clean && make  # Regenerate the generated files.
#  # Edit LOCAL_SRC_FILES below to add the toy.
#  # If you just want to use it as "toybox x" rather than "x", you can stop now.
#  # If you want this toy to have a symbolic link in /system/bin, add the toy to ALL_TOOLS.

ALL_TOOLS := \
    acpi \
    base64 \
    basename \
    blockdev \
    cal \
    cat \
    chcon \
    chgrp \
    chmod \
    chown \
    chroot \
    chrt \
    cksum \
    clear \
    comm \
    cmp \
    cp \
    cpio \
    cut \
    date \
    df \
    diff \
    dirname \
    dmesg \
    dos2unix \
    du \
    echo \
    env \
    expand \
    expr \
    fallocate \
    false \
    file \
    find \
    flock \
    free \
    getenforce \
    getprop \
    groups \
    gunzip \
    gzip \
    head \
    hostname \
    hwclock \
    id \
    ifconfig \
    inotifyd \
    insmod \
    ionice \
    iorenice \
    kill \
    killall \
    load_policy \
    ln \
    log \
    logname \
    losetup \
    ls \
    lsmod \
    lsof \
    lspci \
    lsusb \
    md5sum \
    mkdir \
    mkfifo \
    mknod \
    mkswap \
    mktemp \
    microcom \
    modinfo \
    modprobe \
    more \
    mount \
    mountpoint \
    mv \
    netstat \
    nice \
    nl \
    nohup \
    od \
    paste \
    patch \
    pgrep \
    pidof \
    pkill \
    pmap \
    printenv \
    printf \
    ps \
    pwd \
    readlink \
    realpath \
    renice \
    restorecon \
    rm \
    rmdir \
    rmmod \
    runcon \
    sed \
    sendevent \
    seq \
    setenforce \
    setprop \
    setsid \
    sha1sum \
    sha224sum \
    sha256sum \
    sha384sum \
    sha512sum \
    sleep \
    sort \
    split \
    start \
    stat \
    stop \
    strings \
    swapoff \
    swapon \
    sync \
    sysctl \
    tac \
    tail \
    tar \
    taskset \
    tee \
    time \
    timeout \
    top \
    touch \
    tr \
    true \
    truncate \
    tty \
    ulimit \
    umount \
    uname \
    uniq \
    unix2dos \
    uptime \
    usleep \
    uudecode \
    uuencode \
    vmstat \
    wc \
    which \
    whoami \
    xargs \
    xxd \
    yes \
    zcat \

############################################
# toybox for /system
############################################

发现也有相关的介绍
https://blog.csdn.net/aaajj/article/details/83347834

猜你喜欢

转载自blog.csdn.net/u010116586/article/details/91444014