Merge "[IT4.3] Listen interface change in BSS"
This commit is contained in:
@@ -405,6 +405,9 @@ public class NetworkManagementService extends INetworkManagementService.Stub {
|
||||
if (mLastPowerStateFromRadio != powerState) {
|
||||
mLastPowerStateFromRadio = powerState;
|
||||
try {
|
||||
// TODO: The interface changes that comes from netd are handled by BSS itself.
|
||||
// There are still events caused by setting or removing idle timer, so keep
|
||||
// reporting from here until setting idler timer moved to CS.
|
||||
getBatteryStats().noteMobileRadioPowerState(powerState, tsNanos, uid);
|
||||
} catch (RemoteException e) {
|
||||
}
|
||||
@@ -415,6 +418,9 @@ public class NetworkManagementService extends INetworkManagementService.Stub {
|
||||
if (mLastPowerStateFromWifi != powerState) {
|
||||
mLastPowerStateFromWifi = powerState;
|
||||
try {
|
||||
// TODO: The interface changes that comes from netd are handled by BSS itself.
|
||||
// There are still events caused by setting or removing idle timer, so keep
|
||||
// reporting from here until setting idler timer moved to CS.
|
||||
getBatteryStats().noteWifiRadioPowerState(powerState, tsNanos, uid);
|
||||
} catch (RemoteException e) {
|
||||
}
|
||||
|
||||
@@ -21,11 +21,14 @@ import android.content.ContentResolver;
|
||||
import android.content.Context;
|
||||
import android.content.pm.ApplicationInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.net.INetworkManagementEventObserver;
|
||||
import android.net.NetworkCapabilities;
|
||||
import android.os.BatteryStats;
|
||||
import android.os.BatteryStatsInternal;
|
||||
import android.os.Binder;
|
||||
import android.os.Handler;
|
||||
import android.os.IBinder;
|
||||
import android.os.INetworkManagementService;
|
||||
import android.os.Parcel;
|
||||
import android.os.ParcelFileDescriptor;
|
||||
import android.os.ParcelFormatException;
|
||||
@@ -33,6 +36,7 @@ import android.os.PowerManager.ServiceType;
|
||||
import android.os.PowerManagerInternal;
|
||||
import android.os.PowerSaveState;
|
||||
import android.os.Process;
|
||||
import android.os.RemoteException;
|
||||
import android.os.ServiceManager;
|
||||
import android.os.SystemClock;
|
||||
import android.os.UserHandle;
|
||||
@@ -52,6 +56,7 @@ import android.telephony.SignalStrength;
|
||||
import android.telephony.TelephonyManager;
|
||||
import android.util.Slog;
|
||||
|
||||
import com.android.internal.annotations.GuardedBy;
|
||||
import com.android.internal.app.IBatteryStats;
|
||||
import com.android.internal.os.BatteryStatsHelper;
|
||||
import com.android.internal.os.BatteryStatsImpl;
|
||||
@@ -62,6 +67,7 @@ import com.android.internal.util.DumpUtils;
|
||||
import com.android.internal.util.FrameworkStatsLog;
|
||||
import com.android.internal.util.ParseUtils;
|
||||
import com.android.server.LocalServices;
|
||||
import com.android.server.net.BaseNetworkObserver;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileDescriptor;
|
||||
@@ -108,6 +114,39 @@ public final class BatteryStatsService extends IBatteryStats.Stub
|
||||
private CharBuffer mUtf16BufferStat = CharBuffer.allocate(MAX_LOW_POWER_STATS_SIZE);
|
||||
private static final int MAX_LOW_POWER_STATS_SIZE = 4096;
|
||||
|
||||
@GuardedBy("mStats")
|
||||
private int mLastPowerStateFromRadio = DataConnectionRealTimeInfo.DC_POWER_STATE_LOW;
|
||||
@GuardedBy("mStats")
|
||||
private int mLastPowerStateFromWifi = DataConnectionRealTimeInfo.DC_POWER_STATE_LOW;
|
||||
private final INetworkManagementEventObserver mActivityChangeObserver =
|
||||
new BaseNetworkObserver() {
|
||||
@Override
|
||||
public void interfaceClassDataActivityChanged(int transportType, boolean active,
|
||||
long tsNanos, int uid) {
|
||||
final int powerState = active
|
||||
? DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH
|
||||
: DataConnectionRealTimeInfo.DC_POWER_STATE_LOW;
|
||||
final long timestampNanos;
|
||||
if (tsNanos <= 0) {
|
||||
timestampNanos = SystemClock.elapsedRealtimeNanos();
|
||||
} else {
|
||||
timestampNanos = tsNanos;
|
||||
}
|
||||
|
||||
switch (transportType) {
|
||||
case NetworkCapabilities.TRANSPORT_CELLULAR:
|
||||
noteMobileRadioPowerState(powerState, timestampNanos, uid);
|
||||
break;
|
||||
case NetworkCapabilities.TRANSPORT_WIFI:
|
||||
noteWifiRadioPowerState(powerState, timestampNanos, uid);
|
||||
break;
|
||||
default:
|
||||
Slog.d(TAG, "Received unexpected transport in "
|
||||
+ "interfaceClassDataActivityChanged unexpected type: "
|
||||
+ transportType);
|
||||
}
|
||||
}
|
||||
};
|
||||
/**
|
||||
* Replaces the information in the given rpmStats with up-to-date information.
|
||||
*/
|
||||
@@ -203,6 +242,13 @@ public final class BatteryStatsService extends IBatteryStats.Stub
|
||||
}
|
||||
|
||||
public void systemServicesReady() {
|
||||
final INetworkManagementService nms = INetworkManagementService.Stub.asInterface(
|
||||
ServiceManager.getService(Context.NETWORKMANAGEMENT_SERVICE));
|
||||
try {
|
||||
nms.registerObserver(mActivityChangeObserver);
|
||||
} catch (RemoteException e) {
|
||||
Slog.e(TAG, "Could not register INetworkManagement event observer " + e);
|
||||
}
|
||||
mStats.systemServicesReady(mContext);
|
||||
}
|
||||
|
||||
@@ -680,8 +726,13 @@ public final class BatteryStatsService extends IBatteryStats.Stub
|
||||
|
||||
public void noteMobileRadioPowerState(int powerState, long timestampNs, int uid) {
|
||||
enforceCallingPermission();
|
||||
|
||||
final boolean update;
|
||||
synchronized (mStats) {
|
||||
// Ignore if no power state change.
|
||||
if (mLastPowerStateFromRadio == powerState) return;
|
||||
|
||||
mLastPowerStateFromRadio = powerState;
|
||||
update = mStats.noteMobileRadioPowerStateLocked(powerState, timestampNs, uid);
|
||||
}
|
||||
|
||||
@@ -863,6 +914,10 @@ public final class BatteryStatsService extends IBatteryStats.Stub
|
||||
// There was a change in WiFi power state.
|
||||
// Collect data now for the past activity.
|
||||
synchronized (mStats) {
|
||||
// Ignore if no power state change.
|
||||
if (mLastPowerStateFromWifi == powerState) return;
|
||||
|
||||
mLastPowerStateFromWifi = powerState;
|
||||
if (mStats.isOnBattery()) {
|
||||
final String type = (powerState == DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH ||
|
||||
powerState == DataConnectionRealTimeInfo.DC_POWER_STATE_MEDIUM) ? "active"
|
||||
|
||||
Reference in New Issue
Block a user