Merge "Pipe data from onWakeupEvent to batterystats" am: eaff057f6f am: 1de0999f3a

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/2399132

Change-Id: I5f72cda61d1425b10591725715b9ac3323bb3502
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Treehugger Robot
2023-02-28 23:05:33 +00:00
committed by Automerger Merge Worker

View File

@@ -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