zoukankan      html  css  js  c++  java
  • 【Android N 7.1.1】 ActivityManagerService 获取cpu状态

    void updateCpuStatsNow() {
            synchronized (mProcessCpuTracker) {
                mProcessCpuMutexFree.set(false);
                final long now = SystemClock.uptimeMillis();
                boolean haveNewCpuStats = false;
    
                if (MONITOR_CPU_USAGE &&
                        mLastCpuTime.get() < (now-MONITOR_CPU_MIN_TIME)) {
                    mLastCpuTime.set(now);
                    mProcessCpuTracker.update();
                    if (mProcessCpuTracker.hasGoodLastStats()) {
                        haveNewCpuStats = true;
                        //Slog.i(TAG, mProcessCpu.printCurrentState());
                        //Slog.i(TAG, "Total CPU usage: "
                        //        + mProcessCpu.getTotalCpuPercent() + "%");
    
                        // Slog the cpu usage if the property is set.
                        if ("true".equals(SystemProperties.get("events.cpu"))) {
                            int user = mProcessCpuTracker.getLastUserTime();
                            int system = mProcessCpuTracker.getLastSystemTime();
                            int iowait = mProcessCpuTracker.getLastIoWaitTime();
                            int irq = mProcessCpuTracker.getLastIrqTime();
                            int softIrq = mProcessCpuTracker.getLastSoftIrqTime();
                            int idle = mProcessCpuTracker.getLastIdleTime();
    
                            int total = user + system + iowait + irq + softIrq + idle;
                            if (total == 0) total = 1;
    
                            EventLog.writeEvent(EventLogTags.CPU,
                                    ((user+system+iowait+irq+softIrq) * 100) / total,
                                    (user * 100) / total,
                                    (system * 100) / total,
                                    (iowait * 100) / total,
                                    (irq * 100) / total,
                                    (softIrq * 100) / total);
                        }
                    }
                }
    
                final BatteryStatsImpl bstats = mBatteryStatsService.getActiveStatistics();
                synchronized(bstats) {
                    synchronized(mPidsSelfLocked) {
                        if (haveNewCpuStats) {
                            if (bstats.startAddingCpuLocked()) {
                                int totalUTime = 0;
                                int totalSTime = 0;
                                final int N = mProcessCpuTracker.countStats();
                                for (int i=0; i<N; i++) {
                                    ProcessCpuTracker.Stats st = mProcessCpuTracker.getStats(i);
                                    if (!st.working) {
                                        continue;
                                    }
                                    ProcessRecord pr = mPidsSelfLocked.get(st.pid);
                                    totalUTime += st.rel_utime;
                                    totalSTime += st.rel_stime;
                                    if (pr != null) {
                                        BatteryStatsImpl.Uid.Proc ps = pr.curProcBatteryStats;
                                        if (ps == null || !ps.isActive()) {
                                            pr.curProcBatteryStats = ps = bstats.getProcessStatsLocked(
                                                    pr.info.uid, pr.processName);
                                        }
                                        ps.addCpuTimeLocked(st.rel_utime, st.rel_stime);
                                        pr.curCpuTime += st.rel_utime + st.rel_stime;
                                    } else {
                                        BatteryStatsImpl.Uid.Proc ps = st.batteryStats;
                                        if (ps == null || !ps.isActive()) {
                                            st.batteryStats = ps = bstats.getProcessStatsLocked(
                                                    bstats.mapUid(st.uid), st.name);
                                        }
                                        ps.addCpuTimeLocked(st.rel_utime, st.rel_stime);
                                    }
                                }
                                final int userTime = mProcessCpuTracker.getLastUserTime();
                                final int systemTime = mProcessCpuTracker.getLastSystemTime();
                                final int iowaitTime = mProcessCpuTracker.getLastIoWaitTime();
                                final int irqTime = mProcessCpuTracker.getLastIrqTime();
                                final int softIrqTime = mProcessCpuTracker.getLastSoftIrqTime();
                                final int idleTime = mProcessCpuTracker.getLastIdleTime();
                                bstats.finishAddingCpuLocked(totalUTime, totalSTime, userTime,
                                        systemTime, iowaitTime, irqTime, softIrqTime, idleTime);
                            }
                        }
                    }
    
                    if (mLastWriteTime < (now-BATTERY_STATS_TIME)) {
                        mLastWriteTime = now;
                        mBatteryStatsService.scheduleWriteToDisk();
                    }
                }
            }
        }
  • 相关阅读:
    Python 快速入门笔记(4):表达式
    Python 快速入门笔记(3):常量和变量
    selenium中的下拉框处理模块Select
    HTML基础之JS中的字符转义--转义中文或特殊字符
    HTML基础之JS中的序列化和反序列化-----字符串的json类型与字典之间的相互转换
    【转载】Jenkins安装以及邮件配置
    HTML基础
    python之用unittest实现接口参数化示例
    python之使用单元测试框架unittest执行自动化测试
    python之造测试数据-faker(转载)
  • 原文地址:https://www.cnblogs.com/onelikeone/p/7047178.html
Copyright © 2011-2022 走看看