Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit edeea4f0 authored by Steve Kondik's avatar Steve Kondik
Browse files

Revert "Run BatteryCallback on CpuTracker thread."

 * This is causing issues for some people and it didn't get accepted
   into AOSP. Revert it for now.

This reverts commit 3cc9426d.

Change-Id: I88ab058ad5876fe2970620f5227546a3563fdb51
parent a47693a3
Loading
Loading
Loading
Loading
+41 −49
Original line number Diff line number Diff line
@@ -198,7 +198,6 @@ import android.os.FactoryTest;
import android.os.FileObserver;
import android.os.FileUtils;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.IBinder;
import android.os.IPermissionController;
import android.os.IProcessInfoService;
@@ -1246,6 +1245,12 @@ public final class ActivityManagerService extends ActivityManagerNative
    final ArrayList<UidRecord.ChangeItem> mPendingUidChanges = new ArrayList<>();
    final ArrayList<UidRecord.ChangeItem> mAvailUidChanges = new ArrayList<>();
    /**
     * Runtime CPU use collection thread.  This object's lock is used to
     * perform synchronization with the thread (notifying it to run).
     */
    final Thread mProcessCpuThread;
    /**
     * Used to collect per-process CPU use for ANRs, battery stats, etc.
     * Must acquire this object's lock when accessing it.
@@ -1404,7 +1409,6 @@ public final class ActivityManagerService extends ActivityManagerNative
    final ServiceThread mHandlerThread;
    final MainHandler mHandler;
    final UiHandler mUiHandler;
    final CpuTrackerHandler mCpuTrackerHandler;
    final class UiHandler extends Handler {
        public UiHandler() {
@@ -2122,47 +2126,6 @@ public final class ActivityManagerService extends ActivityManagerNative
        }
    };
    static final int SCHEDULE_CPU_STATS_MSG = 1;
    static final int UPDATE_CPU_STATS_MSG = 2;
    final class CpuTrackerHandler extends Handler {
        public CpuTrackerHandler(Looper looper) {
            super(looper);
        }
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
            case SCHEDULE_CPU_STATS_MSG: {
                final long now = SystemClock.uptimeMillis();
                long nextCpuDelay = (mLastCpuTime.get() + MONITOR_CPU_MAX_TIME) - now;
                long nextWriteDelay = (mLastWriteTime + BATTERY_STATS_TIME) - now;
                //Slog.i(TAG, "Cpu delay=" + nextCpuDelay + ", write delay=" + nextWriteDelay);
                if (nextWriteDelay < nextCpuDelay) {
                    nextCpuDelay = nextWriteDelay;
                }
                if (nextCpuDelay > 0) {
                    mProcessCpuMutexFree.set(true);
                    sendEmptyMessageDelayed(UPDATE_CPU_STATS_MSG, nextCpuDelay);
                }
            } break;
            case UPDATE_CPU_STATS_MSG: {
                updateCpuStatsNow();
                schedule();
            } break;
            }
        }
        void schedule() {
            sendEmptyMessage(SCHEDULE_CPU_STATS_MSG);
        }
        void updateNow() {
            removeMessages(UPDATE_CPU_STATS_MSG);
            sendEmptyMessage(UPDATE_CPU_STATS_MSG);
        }
    }
    static final int COLLECT_PSS_BG_MSG = 1;
    final Handler mBgHandler = new Handler(BackgroundThread.getHandler().getLooper()) {
@@ -2426,9 +2389,6 @@ public final class ActivityManagerService extends ActivityManagerNative
        mHandlerThread.start();
        mHandler = new MainHandler(mHandlerThread.getLooper());
        mUiHandler = new UiHandler();
        HandlerThread cpuTrackerThread = new HandlerThread("CpuTracker");
        cpuTrackerThread.start();
        mCpuTrackerHandler = new CpuTrackerHandler(cpuTrackerThread.getLooper());
        mFgBroadcastQueue = new BroadcastQueue(this, mHandler,
                "foreground", BROADCAST_FG_TIMEOUT, false);
@@ -2444,7 +2404,7 @@ public final class ActivityManagerService extends ActivityManagerNative
        File dataDir = Environment.getDataDirectory();
        File systemDir = new File(dataDir, "system");
        systemDir.mkdirs();
        mBatteryStatsService = new BatteryStatsService(systemDir, mCpuTrackerHandler);
        mBatteryStatsService = new BatteryStatsService(systemDir, mHandler);
        mBatteryStatsService.getActiveStatistics().readLocked();
        mBatteryStatsService.scheduleWriteToDisk();
        mOnBattery = DEBUG_POWER ? true
@@ -2479,6 +2439,36 @@ public final class ActivityManagerService extends ActivityManagerNative
        mStackSupervisor = new ActivityStackSupervisor(this, mRecentTasks);
        mTaskPersister = new TaskPersister(systemDir, mStackSupervisor, mRecentTasks);
        mProcessCpuThread = new Thread("CpuTracker") {
            @Override
            public void run() {
                while (true) {
                    try {
                        try {
                            synchronized(this) {
                                final long now = SystemClock.uptimeMillis();
                                long nextCpuDelay = (mLastCpuTime.get()+MONITOR_CPU_MAX_TIME)-now;
                                long nextWriteDelay = (mLastWriteTime+BATTERY_STATS_TIME)-now;
                                //Slog.i(TAG, "Cpu delay=" + nextCpuDelay
                                //        + ", write delay=" + nextWriteDelay);
                                if (nextWriteDelay < nextCpuDelay) {
                                    nextCpuDelay = nextWriteDelay;
                                }
                                if (nextCpuDelay > 0) {
                                    mProcessCpuMutexFree.set(true);
                                    this.wait(nextCpuDelay);
                                }
                            }
                        } catch (InterruptedException e) {
                        }
                        updateCpuStatsNow();
                    } catch (Exception e) {
                        Slog.e(TAG, "Unexpected exception collecting process stats", e);
                    }
                }
            }
        };
        Watchdog.getInstance().addMonitor(this);
        Watchdog.getInstance().addThread(mHandler);
    }
@@ -2493,7 +2483,7 @@ public final class ActivityManagerService extends ActivityManagerNative
    private void start() {
        Process.removeAllProcessGroups();
        mCpuTrackerHandler.schedule();
        mProcessCpuThread.start();
        mBatteryStatsService.publish(mContext);
        mAppOpsService.publish(mContext);
@@ -2558,7 +2548,9 @@ public final class ActivityManagerService extends ActivityManagerNative
            return;
        }
        if (mProcessCpuMutexFree.compareAndSet(true, false)) {
            mCpuTrackerHandler.updateNow();
            synchronized (mProcessCpuThread) {
                mProcessCpuThread.notify();
            }
        }
    }