Loading apex/jobscheduler/service/java/com/android/server/tare/PowerSaveModeModifier.java +65 −5 Original line number Diff line number Diff line Loading @@ -17,27 +17,48 @@ package com.android.server.tare; import android.annotation.NonNull; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.PowerManager; import android.os.SystemClock; import android.util.IndentingPrintWriter; import android.util.Log; import android.util.Slog; /** Modifier that makes things more expensive in adaptive and full battery saver are active. */ class PowerSaveModeModifier extends Modifier { private static final String TAG = "TARE-" + PowerSaveModeModifier.class.getSimpleName(); private static final boolean DEBUG = InternalResourceService.DEBUG || Log.isLoggable(TAG, Log.DEBUG); private final InternalResourceService mIrs; private final PowerManager mPowerManager; private final PowerSaveModeTracker mPowerSaveModeTracker; PowerSaveModeModifier(@NonNull InternalResourceService irs) { super(); mIrs = irs; mPowerManager = irs.getContext().getSystemService(PowerManager.class); mPowerSaveModeTracker = new PowerSaveModeTracker(); } @Override public void setup() { mPowerSaveModeTracker.startTracking(mIrs.getContext()); } @Override public void tearDown() { mPowerSaveModeTracker.stopTracking(mIrs.getContext()); } @Override long getModifiedCostToProduce(long ctp) { if (mPowerManager.isPowerSaveMode()) { if (mPowerSaveModeTracker.mPowerSaveModeEnabled) { return (long) (1.5 * ctp); } // TODO: get adaptive power save mode if (mPowerManager.isPowerSaveMode()) { if (mPowerSaveModeTracker.mPowerSaveModeEnabled) { return (long) (1.25 * ctp); } return ctp; Loading @@ -46,6 +67,45 @@ class PowerSaveModeModifier extends Modifier { @Override void dump(IndentingPrintWriter pw) { pw.print("power save="); pw.println(mPowerManager.isPowerSaveMode()); pw.println(mPowerSaveModeTracker.mPowerSaveModeEnabled); } // TODO: migrate to relying on PowerSaveState and ServiceType.TARE private final class PowerSaveModeTracker extends BroadcastReceiver { private final PowerManager mPowerManager; private volatile boolean mPowerSaveModeEnabled; private PowerSaveModeTracker() { mPowerManager = mIrs.getContext().getSystemService(PowerManager.class); } public void startTracking(@NonNull Context context) { final IntentFilter filter = new IntentFilter(); filter.addAction(PowerManager.ACTION_POWER_SAVE_MODE_CHANGED); context.registerReceiver(this, filter); // Initialise tracker state. mPowerSaveModeEnabled = mPowerManager.isPowerSaveMode(); } public void stopTracking(@NonNull Context context) { context.unregisterReceiver(this); } @Override public void onReceive(Context context, Intent intent) { final String action = intent.getAction(); if (PowerManager.ACTION_POWER_SAVE_MODE_CHANGED.equals(action)) { final boolean enabled = mPowerManager.isPowerSaveMode(); if (DEBUG) { Slog.d(TAG, "Power save mode changed to " + enabled + ", fired @ " + SystemClock.elapsedRealtime()); } if (mPowerSaveModeEnabled != enabled) { mPowerSaveModeEnabled = enabled; mIrs.onDeviceStateChanged(); } } } } } Loading
apex/jobscheduler/service/java/com/android/server/tare/PowerSaveModeModifier.java +65 −5 Original line number Diff line number Diff line Loading @@ -17,27 +17,48 @@ package com.android.server.tare; import android.annotation.NonNull; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.os.PowerManager; import android.os.SystemClock; import android.util.IndentingPrintWriter; import android.util.Log; import android.util.Slog; /** Modifier that makes things more expensive in adaptive and full battery saver are active. */ class PowerSaveModeModifier extends Modifier { private static final String TAG = "TARE-" + PowerSaveModeModifier.class.getSimpleName(); private static final boolean DEBUG = InternalResourceService.DEBUG || Log.isLoggable(TAG, Log.DEBUG); private final InternalResourceService mIrs; private final PowerManager mPowerManager; private final PowerSaveModeTracker mPowerSaveModeTracker; PowerSaveModeModifier(@NonNull InternalResourceService irs) { super(); mIrs = irs; mPowerManager = irs.getContext().getSystemService(PowerManager.class); mPowerSaveModeTracker = new PowerSaveModeTracker(); } @Override public void setup() { mPowerSaveModeTracker.startTracking(mIrs.getContext()); } @Override public void tearDown() { mPowerSaveModeTracker.stopTracking(mIrs.getContext()); } @Override long getModifiedCostToProduce(long ctp) { if (mPowerManager.isPowerSaveMode()) { if (mPowerSaveModeTracker.mPowerSaveModeEnabled) { return (long) (1.5 * ctp); } // TODO: get adaptive power save mode if (mPowerManager.isPowerSaveMode()) { if (mPowerSaveModeTracker.mPowerSaveModeEnabled) { return (long) (1.25 * ctp); } return ctp; Loading @@ -46,6 +67,45 @@ class PowerSaveModeModifier extends Modifier { @Override void dump(IndentingPrintWriter pw) { pw.print("power save="); pw.println(mPowerManager.isPowerSaveMode()); pw.println(mPowerSaveModeTracker.mPowerSaveModeEnabled); } // TODO: migrate to relying on PowerSaveState and ServiceType.TARE private final class PowerSaveModeTracker extends BroadcastReceiver { private final PowerManager mPowerManager; private volatile boolean mPowerSaveModeEnabled; private PowerSaveModeTracker() { mPowerManager = mIrs.getContext().getSystemService(PowerManager.class); } public void startTracking(@NonNull Context context) { final IntentFilter filter = new IntentFilter(); filter.addAction(PowerManager.ACTION_POWER_SAVE_MODE_CHANGED); context.registerReceiver(this, filter); // Initialise tracker state. mPowerSaveModeEnabled = mPowerManager.isPowerSaveMode(); } public void stopTracking(@NonNull Context context) { context.unregisterReceiver(this); } @Override public void onReceive(Context context, Intent intent) { final String action = intent.getAction(); if (PowerManager.ACTION_POWER_SAVE_MODE_CHANGED.equals(action)) { final boolean enabled = mPowerManager.isPowerSaveMode(); if (DEBUG) { Slog.d(TAG, "Power save mode changed to " + enabled + ", fired @ " + SystemClock.elapsedRealtime()); } if (mPowerSaveModeEnabled != enabled) { mPowerSaveModeEnabled = enabled; mIrs.onDeviceStateChanged(); } } } } }