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

Commit 6bf8baea authored by Mike Ma's avatar Mike Ma Committed by Android (Google) Code Review
Browse files

Merge "Dump connmetrics in protobuf format"

parents 0e4d731b d2672bda
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -623,6 +623,7 @@ gensrcs {
        "&& $(location soong_zip) -jar -o $(out) -C $(genDir)/$(in) -D $(genDir)/$(in)",

    srcs: [
        ":ipconnectivity-proto-src",
        "core/proto/**/*.proto",
        "libs/incident/**/*.proto",
    ],
@@ -737,6 +738,7 @@ java_library {
java_library_host {
    name: "platformprotos",
    srcs: [
        ":ipconnectivity-proto-src",
        "cmds/am/proto/instrumentation_data.proto",
        "cmds/statsd/src/**/*.proto",
        "core/proto/**/*.proto",
@@ -765,6 +767,7 @@ java_library {
    ],
    sdk_version: "9",
    srcs: [
        ":ipconnectivity-proto-src",
        "core/proto/**/*.proto",
        "libs/incident/proto/android/os/**/*.proto",
    ],
@@ -779,6 +782,7 @@ java_library {
    },

    srcs: [
        ":ipconnectivity-proto-src",
        "core/proto/**/*.proto",
        "libs/incident/proto/android/os/**/*.proto",
    ],
@@ -809,6 +813,7 @@ cc_defaults {
    ],

    srcs: [
        ":ipconnectivity-proto-src",
        "core/proto/**/*.proto",
    ],
}
+6 −0
Original line number Diff line number Diff line
@@ -56,6 +56,7 @@ import "frameworks/base/core/proto/android/util/event_log_tags.proto";
import "frameworks/base/core/proto/android/util/log.proto";
import "frameworks/base/core/proto/android/privacy.proto";
import "frameworks/base/core/proto/android/section.proto";
import "frameworks/base/proto/src/ipconnectivity.proto";

package android.os;

@@ -480,6 +481,11 @@ message IncidentProto {
        (section).args = "cpuinfo --proto"
    ];

    optional .clearcut.connectivity.IpConnectivityLog ip_connectivity_metrics = 3049 [
        (section).type = SECTION_DUMPSYS,
        (section).args = "connmetrics --proto"
    ];

    // Reserved for OEMs.
    extensions 50000 to 100000;
}
+5 −0
Original line number Diff line number Diff line
@@ -32,3 +32,8 @@ filegroup {
    name: "system-messages-proto-src",
    srcs: ["src/system_messages.proto"],
}

filegroup {
    name: "ipconnectivity-proto-src",
    srcs: ["src/ipconnectivity.proto"],
}
+5 −2
Original line number Diff line number Diff line
@@ -81,9 +81,12 @@ public class DefaultNetworkMetrics {
        printEvent(localTimeMs, pw, mCurrentDefaultNetwork);
    }

    public synchronized void listEventsAsProto(PrintWriter pw) {
    /**
     * Convert events in the ring buffer to protos and add to the given list
     */
    public synchronized void listEventsAsProto(List<IpConnectivityEvent> out) {
        for (DefaultNetworkEvent ev : mEventsLog.toArray()) {
            pw.print(IpConnectivityEventBuilder.toProto(ev));
            out.add(IpConnectivityEventBuilder.toProto(ev));
        }
    }

+35 −8
Original line number Diff line number Diff line
@@ -41,7 +41,9 @@ import com.android.server.SystemService;
import com.android.server.connectivity.metrics.nano.IpConnectivityLogClass.IpConnectivityEvent;

import java.io.FileDescriptor;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
@@ -239,18 +241,37 @@ final public class IpConnectivityMetrics extends SystemService {
        mDefaultNetworkMetrics.listEvents(pw);
    }

    private List<IpConnectivityEvent> listEventsAsProtos() {
        final List<IpConnectivityEvent> events = IpConnectivityEventBuilder.toProto(getEvents());
        if (mNetdListener != null) {
            mNetdListener.listAsProtos(events);
        }
        mDefaultNetworkMetrics.listEventsAsProto(events);
        return events;
    }

    /*
     * Print the content of the rolling event buffer in text proto format.
     */
    private void cmdListAsProto(PrintWriter pw) {
        final List<ConnectivityMetricsEvent> events = getEvents();
        for (IpConnectivityEvent ev : IpConnectivityEventBuilder.toProto(events)) {
            pw.print(ev.toString());
    private void cmdListAsTextProto(PrintWriter pw) {
        listEventsAsProtos().forEach(e -> pw.print(e.toString()));
    }
        if (mNetdListener != null) {
            mNetdListener.listAsProtos(pw);

    /*
     * Write the content of the rolling event buffer in proto wire format to the given OutputStream.
     */
    private void cmdListAsBinaryProto(OutputStream out) {
        final int dropped;
        synchronized (mLock) {
            dropped = mDropped;
        }
        try {
            byte[] data = IpConnectivityEventBuilder.serialize(dropped, listEventsAsProtos());
            out.write(data);
            out.flush();
        } catch (IOException e) {
            Log.e(TAG, "could not serialize events", e);
        }
        mDefaultNetworkMetrics.listEventsAsProto(pw);
    }

    /*
@@ -267,6 +288,9 @@ final public class IpConnectivityMetrics extends SystemService {
        static final String CMD_FLUSH = "flush";
        // Dump the rolling buffer of metrics event in human readable proto text format.
        static final String CMD_PROTO = "proto";
        // Dump the rolling buffer of metrics event in proto wire format. See usage() of
        // frameworks/native/cmds/dumpsys/dumpsys.cpp for details.
        static final String CMD_PROTO_BIN = "--proto";
        // Dump the rolling buffer of metrics event and pretty print events using a human readable
        // format. Also print network dns/connect statistics and default network event time series.
        static final String CMD_LIST = "list";
@@ -291,7 +315,10 @@ final public class IpConnectivityMetrics extends SystemService {
                    cmdFlush(pw);
                    return;
                case CMD_PROTO:
                    cmdListAsProto(pw);
                    cmdListAsTextProto(pw);
                    return;
                case CMD_PROTO_BIN:
                    cmdListAsBinaryProto(new FileOutputStream(fd));
                    return;
                case CMD_LIST:
                default:
Loading