diff options
| author | 2016-07-01 10:06:56 +0900 | |
|---|---|---|
| committer | 2016-07-05 17:32:56 +0900 | |
| commit | 176ed01a1fdcca5734dcc1e11fc37a2f7363f5f8 (patch) | |
| tree | 8b132596a0e480740aaffb815d3a3f2023aca85f | |
| parent | b4db945883fa7c2e1aa43eaaced732c97a751be5 (diff) | |
IpConn metrics: add dhcp transition times
This patch adds lifetime durations of DhcpClient states to
DhcpClientEvents.
To record the duration of a state, the event is now recorded when the
DhcpClient state machine exits that state.
In addition this patch removes event logging of StoppedState,
DhcpState and DhcpHaveLeaseState.
Change-Id: Ibd37b5e3070f35113b6b45942b1e1ff19c27a90b
| -rw-r--r-- | api/system-current.txt | 1 | ||||
| -rw-r--r-- | core/java/android/net/metrics/DhcpClientEvent.java | 11 | ||||
| -rw-r--r-- | services/net/java/android/net/dhcp/DhcpClient.java | 34 |
3 files changed, 32 insertions, 14 deletions
diff --git a/api/system-current.txt b/api/system-current.txt index 9d07e8455e18..b0fb9f3b1759 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -26063,6 +26063,7 @@ package android.net.metrics { method public static void logStateEvent(java.lang.String, java.lang.String); method public void writeToParcel(android.os.Parcel, int); field public static final android.os.Parcelable.Creator<android.net.metrics.DhcpClientEvent> CREATOR; + field public final int durationMs; field public final java.lang.String ifName; field public final java.lang.String msg; } diff --git a/core/java/android/net/metrics/DhcpClientEvent.java b/core/java/android/net/metrics/DhcpClientEvent.java index 3fe68b40e9f4..169f571d8317 100644 --- a/core/java/android/net/metrics/DhcpClientEvent.java +++ b/core/java/android/net/metrics/DhcpClientEvent.java @@ -21,36 +21,43 @@ import android.os.Parcel; import android.os.Parcelable; /** + * An event recorded when a DhcpClient state machine transitions to a new state. * {@hide} */ @SystemApi public final class DhcpClientEvent implements Parcelable { public final String ifName; public final String msg; + public final int durationMs; /** {@hide} */ - public DhcpClientEvent(String ifName, String msg) { + public DhcpClientEvent(String ifName, String msg, int durationMs) { this.ifName = ifName; this.msg = msg; + this.durationMs = durationMs; } private DhcpClientEvent(Parcel in) { this.ifName = in.readString(); this.msg = in.readString(); + this.durationMs = in.readInt(); } + @Override public void writeToParcel(Parcel out, int flags) { out.writeString(ifName); out.writeString(msg); + out.writeInt(durationMs); } + @Override public int describeContents() { return 0; } @Override public String toString() { - return String.format("DhcpClientEvent(%s, %s)", ifName, msg); + return String.format("DhcpClientEvent(%s, %s, %dms)", ifName, msg, durationMs); } public static final Parcelable.Creator<DhcpClientEvent> CREATOR diff --git a/services/net/java/android/net/dhcp/DhcpClient.java b/services/net/java/android/net/dhcp/DhcpClient.java index 5852626db83b..83cfc010b4e2 100644 --- a/services/net/java/android/net/dhcp/DhcpClient.java +++ b/services/net/java/android/net/dhcp/DhcpClient.java @@ -492,10 +492,19 @@ public class DhcpClient extends StateMachine { } abstract class LoggingState extends State { + private long mEnterTimeMs; + @Override public void enter() { if (STATE_DBG) Log.d(TAG, "Entering state " + getName()); - mMetricsLog.log(new DhcpClientEvent(mIfaceName, getName())); + mEnterTimeMs = SystemClock.elapsedRealtime(); + // TODO: record time for Init -> Bound and Bound -> Renewing -> Bound + } + + @Override + public void exit() { + long durationMs = SystemClock.elapsedRealtime() - mEnterTimeMs; + mMetricsLog.log(new DhcpClientEvent(mIfaceName, getName(), (int) durationMs)); } private String messageName(int what) { @@ -520,6 +529,13 @@ public class DhcpClient extends StateMachine { } return NOT_HANDLED; } + + @Override + public String getName() { + // All DhcpClient's states are inner classes with a well defined name. + // Use getSimpleName() and avoid super's getName() creating new String instances. + return getClass().getSimpleName(); + } } // Sends CMD_PRE_DHCP_ACTION to the controller, waits for the controller to respond with @@ -546,10 +562,9 @@ public class DhcpClient extends StateMachine { } } - class StoppedState extends LoggingState { + class StoppedState extends State { @Override public boolean processMessage(Message message) { - super.processMessage(message); switch (message.what) { case CMD_START_DHCP: if (mRegisteredForPreDhcpNotification) { @@ -578,10 +593,9 @@ public class DhcpClient extends StateMachine { } } - class DhcpState extends LoggingState { + class DhcpState extends State { @Override public void enter() { - super.enter(); clearDhcpState(); if (initInterface() && initSockets()) { mReceiveThread = new ReceiveThread(); @@ -679,7 +693,9 @@ public class DhcpClient extends StateMachine { } } + @Override public void exit() { + super.exit(); mKickAlarm.cancel(); mTimeoutAlarm.cancel(); } @@ -784,15 +800,9 @@ public class DhcpClient extends StateMachine { } } - class DhcpHaveLeaseState extends LoggingState { - @Override - public void enter() { - super.enter(); - } - + class DhcpHaveLeaseState extends State { @Override public boolean processMessage(Message message) { - super.processMessage(message); switch (message.what) { case CMD_EXPIRE_DHCP: Log.d(TAG, "Lease expired!"); |