Merge "Pipe data from onWakeupEvent to batterystats" am: eaff057f6f
Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/2399132 Change-Id: Ib9b0966641067a6405e3d0cb73cf040f1c148822 Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
@@ -31,7 +31,9 @@ import android.net.metrics.DnsEvent;
|
|||||||
import android.net.metrics.NetworkMetrics;
|
import android.net.metrics.NetworkMetrics;
|
||||||
import android.net.metrics.WakeupEvent;
|
import android.net.metrics.WakeupEvent;
|
||||||
import android.net.metrics.WakeupStats;
|
import android.net.metrics.WakeupStats;
|
||||||
|
import android.os.BatteryStatsInternal;
|
||||||
import android.os.RemoteException;
|
import android.os.RemoteException;
|
||||||
|
import android.os.SystemClock;
|
||||||
import android.text.format.DateUtils;
|
import android.text.format.DateUtils;
|
||||||
import android.util.ArrayMap;
|
import android.util.ArrayMap;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
@@ -44,6 +46,7 @@ import com.android.internal.util.FrameworkStatsLog;
|
|||||||
import com.android.internal.util.RingBuffer;
|
import com.android.internal.util.RingBuffer;
|
||||||
import com.android.internal.util.TokenBucket;
|
import com.android.internal.util.TokenBucket;
|
||||||
import com.android.net.module.util.BaseNetdEventListener;
|
import com.android.net.module.util.BaseNetdEventListener;
|
||||||
|
import com.android.server.LocalServices;
|
||||||
import com.android.server.connectivity.metrics.nano.IpConnectivityLogClass.IpConnectivityEvent;
|
import com.android.server.connectivity.metrics.nano.IpConnectivityLogClass.IpConnectivityEvent;
|
||||||
|
|
||||||
import java.io.PrintWriter;
|
import java.io.PrintWriter;
|
||||||
@@ -74,7 +77,7 @@ public class NetdEventListenerService extends BaseNetdEventListener {
|
|||||||
// TODO: dedup this String constant with the one used in
|
// TODO: dedup this String constant with the one used in
|
||||||
// ConnectivityService#wakeupModifyInterface().
|
// ConnectivityService#wakeupModifyInterface().
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
static final String WAKEUP_EVENT_IFACE_PREFIX = "iface:";
|
static final String WAKEUP_EVENT_PREFIX_DELIM = ":";
|
||||||
|
|
||||||
// Array of aggregated DNS and connect events sent by netd, grouped by net id.
|
// Array of aggregated DNS and connect events sent by netd, grouped by net id.
|
||||||
@GuardedBy("this")
|
@GuardedBy("this")
|
||||||
@@ -278,17 +281,14 @@ public class NetdEventListenerService extends BaseNetdEventListener {
|
|||||||
@Override
|
@Override
|
||||||
public synchronized void onWakeupEvent(String prefix, int uid, int ethertype, int ipNextHeader,
|
public synchronized void onWakeupEvent(String prefix, int uid, int ethertype, int ipNextHeader,
|
||||||
byte[] dstHw, String srcIp, String dstIp, int srcPort, int dstPort, long timestampNs) {
|
byte[] dstHw, String srcIp, String dstIp, int srcPort, int dstPort, long timestampNs) {
|
||||||
String iface = prefix.replaceFirst(WAKEUP_EVENT_IFACE_PREFIX, "");
|
final String[] prefixParts = prefix.split(WAKEUP_EVENT_PREFIX_DELIM);
|
||||||
final long timestampMs;
|
if (prefixParts.length != 2) {
|
||||||
if (timestampNs > 0) {
|
throw new IllegalArgumentException("Prefix " + prefix
|
||||||
timestampMs = timestampNs / NANOS_PER_MS;
|
+ " required in format <nethandle>:<interface>");
|
||||||
} else {
|
|
||||||
timestampMs = System.currentTimeMillis();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
WakeupEvent event = new WakeupEvent();
|
final WakeupEvent event = new WakeupEvent();
|
||||||
event.iface = iface;
|
event.iface = prefixParts[1];
|
||||||
event.timestampMs = timestampMs;
|
|
||||||
event.uid = uid;
|
event.uid = uid;
|
||||||
event.ethertype = ethertype;
|
event.ethertype = ethertype;
|
||||||
event.dstHwAddr = MacAddress.fromBytes(dstHw);
|
event.dstHwAddr = MacAddress.fromBytes(dstHw);
|
||||||
@@ -297,11 +297,25 @@ public class NetdEventListenerService extends BaseNetdEventListener {
|
|||||||
event.ipNextHeader = ipNextHeader;
|
event.ipNextHeader = ipNextHeader;
|
||||||
event.srcPort = srcPort;
|
event.srcPort = srcPort;
|
||||||
event.dstPort = dstPort;
|
event.dstPort = dstPort;
|
||||||
|
if (timestampNs > 0) {
|
||||||
|
event.timestampMs = timestampNs / NANOS_PER_MS;
|
||||||
|
} else {
|
||||||
|
event.timestampMs = System.currentTimeMillis();
|
||||||
|
}
|
||||||
addWakeupEvent(event);
|
addWakeupEvent(event);
|
||||||
|
|
||||||
String dstMac = event.dstHwAddr.toString();
|
final BatteryStatsInternal bsi = LocalServices.getService(BatteryStatsInternal.class);
|
||||||
|
if (bsi != null) {
|
||||||
|
final long netHandle = Long.parseLong(prefixParts[0]);
|
||||||
|
final long elapsedMs = SystemClock.elapsedRealtime() + event.timestampMs
|
||||||
|
- System.currentTimeMillis();
|
||||||
|
bsi.noteCpuWakingNetworkPacket(Network.fromNetworkHandle(netHandle), elapsedMs,
|
||||||
|
event.uid);
|
||||||
|
}
|
||||||
|
|
||||||
|
final String dstMac = event.dstHwAddr.toString();
|
||||||
FrameworkStatsLog.write(FrameworkStatsLog.PACKET_WAKEUP_OCCURRED,
|
FrameworkStatsLog.write(FrameworkStatsLog.PACKET_WAKEUP_OCCURRED,
|
||||||
uid, iface, ethertype, dstMac, srcIp, dstIp, ipNextHeader, srcPort, dstPort);
|
uid, event.iface, ethertype, dstMac, srcIp, dstIp, ipNextHeader, srcPort, dstPort);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
Reference in New Issue
Block a user