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

Commit eaff057f authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge "Pipe data from onWakeupEvent to batterystats"

parents 78fe90eb 607a5491
Loading
Loading
Loading
Loading
+26 −12
Original line number Diff line number Diff line
@@ -31,7 +31,9 @@ import android.net.metrics.DnsEvent;
import android.net.metrics.NetworkMetrics;
import android.net.metrics.WakeupEvent;
import android.net.metrics.WakeupStats;
import android.os.BatteryStatsInternal;
import android.os.RemoteException;
import android.os.SystemClock;
import android.text.format.DateUtils;
import android.util.ArrayMap;
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.TokenBucket;
import com.android.net.module.util.BaseNetdEventListener;
import com.android.server.LocalServices;
import com.android.server.connectivity.metrics.nano.IpConnectivityLogClass.IpConnectivityEvent;

import java.io.PrintWriter;
@@ -74,7 +77,7 @@ public class NetdEventListenerService extends BaseNetdEventListener {
    // TODO: dedup this String constant with the one used in
    // ConnectivityService#wakeupModifyInterface().
    @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.
    @GuardedBy("this")
@@ -278,17 +281,14 @@ public class NetdEventListenerService extends BaseNetdEventListener {
    @Override
    public synchronized void onWakeupEvent(String prefix, int uid, int ethertype, int ipNextHeader,
            byte[] dstHw, String srcIp, String dstIp, int srcPort, int dstPort, long timestampNs) {
        String iface = prefix.replaceFirst(WAKEUP_EVENT_IFACE_PREFIX, "");
        final long timestampMs;
        if (timestampNs > 0) {
            timestampMs = timestampNs / NANOS_PER_MS;
        } else {
            timestampMs = System.currentTimeMillis();
        final String[] prefixParts = prefix.split(WAKEUP_EVENT_PREFIX_DELIM);
        if (prefixParts.length != 2) {
            throw new IllegalArgumentException("Prefix " + prefix
                    + " required in format <nethandle>:<interface>");
        }

        WakeupEvent event = new WakeupEvent();
        event.iface = iface;
        event.timestampMs = timestampMs;
        final WakeupEvent event = new WakeupEvent();
        event.iface = prefixParts[1];
        event.uid = uid;
        event.ethertype = ethertype;
        event.dstHwAddr = MacAddress.fromBytes(dstHw);
@@ -297,11 +297,25 @@ public class NetdEventListenerService extends BaseNetdEventListener {
        event.ipNextHeader = ipNextHeader;
        event.srcPort = srcPort;
        event.dstPort = dstPort;
        if (timestampNs > 0) {
            event.timestampMs = timestampNs / NANOS_PER_MS;
        } else {
            event.timestampMs = System.currentTimeMillis();
        }
        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,
                uid, iface, ethertype, dstMac, srcIp, dstIp, ipNextHeader, srcPort, dstPort);
                uid, event.iface, ethertype, dstMac, srcIp, dstIp, ipNextHeader, srcPort, dstPort);
    }

    @Override