Merge "IpConn metrics: add times to DHCP bound state" into nyc-mr1-dev

This commit is contained in:
TreeHugger Robot
2016-07-07 09:06:44 +00:00
committed by Android (Google) Code Review
2 changed files with 34 additions and 3 deletions

View File

@@ -21,11 +21,18 @@ import android.os.Parcel;
import android.os.Parcelable;
/**
* An event recorded when a DhcpClient state machine transitions to a new state.
* An event recorded when a DhcpClient state machine transitions to a new state.
* {@hide}
*/
@SystemApi
public final class DhcpClientEvent implements Parcelable {
// Names for recording DhcpClient pseudo-state transitions.
/** {@hide} Represents transitions from DhcpInitState to DhcpBoundState */
public static final String INITIAL_BOUND = "InitialBoundState";
/** {@hide} Represents transitions from and to DhcpBoundState via DhcpRenewingState */
public static final String RENEWING_BOUND = "RenewingBoundState";
public final String ifName;
public final String msg;
public final int durationMs;

View File

@@ -194,6 +194,10 @@ public class DhcpClient extends StateMachine {
private long mDhcpLeaseExpiry;
private DhcpResults mOffer;
// Milliseconds SystemClock timestamps used to record transition times to DhcpBoundState.
private long mLastInitEnterTime;
private long mLastBoundExitTime;
// States.
private State mStoppedState = new StoppedState();
private State mDhcpState = new DhcpState();
@@ -498,13 +502,12 @@ public class DhcpClient extends StateMachine {
public void enter() {
if (STATE_DBG) Log.d(TAG, "Entering state " + 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));
logState(getName(), (int) durationMs);
}
private String messageName(int what) {
@@ -742,6 +745,7 @@ public class DhcpClient extends StateMachine {
public void enter() {
super.enter();
startNewTransaction();
mLastInitEnterTime = SystemClock.elapsedRealtime();
}
protected boolean sendPacket() {
@@ -866,6 +870,13 @@ public class DhcpClient extends StateMachine {
}
scheduleLeaseTimers();
logTimeToBoundState();
}
@Override
public void exit() {
super.exit();
mLastBoundExitTime = SystemClock.elapsedRealtime();
}
@Override
@@ -883,6 +894,15 @@ public class DhcpClient extends StateMachine {
return NOT_HANDLED;
}
}
private void logTimeToBoundState() {
long now = SystemClock.elapsedRealtime();
if (mLastBoundExitTime > mLastInitEnterTime) {
logState(DhcpClientEvent.RENEWING_BOUND, (int)(now - mLastBoundExitTime));
} else {
logState(DhcpClientEvent.INITIAL_BOUND, (int)(now - mLastInitEnterTime));
}
}
}
abstract class DhcpReacquiringState extends PacketRetransmittingState {
@@ -993,4 +1013,8 @@ public class DhcpClient extends StateMachine {
private void logError(int errorCode) {
mMetricsLog.log(new DhcpErrorEvent(mIfaceName, errorCode));
}
private void logState(String name, int durationMs) {
mMetricsLog.log(new DhcpClientEvent(mIfaceName, name, durationMs));
}
}