• 【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();
                    }
                }
            }
        }
  • 相关阅读:
    An Introduction to the Linuxbased Assignments
    [读书笔记]Binary Hancks(1)
    haneWIN NFS Server
    [读书笔记]Binary Hancks(2) livepatch在X86下的实践
    CTNG编译错误以及解决办法
    [转]ucLinux下sqlite数据库移植全攻略
    程序员该有的艺术气质—SOLID原则
    Httpclient远程调用WebService示例(Eclipse+httpclient)
    四种生成和解析XML文档的方法详解(介绍+优缺点比较+示例)
    全网首发:原创SQL数据库同步工具
  • 原文地址:https://www.cnblogs.com/onelikeone/p/7047178.html
Copyright © 2020-2023  润新知