Enhance the debug output for StateMachines.

Allow some messages to be ignored and allow the subclass to
add additional information. In particular, the information
can be used to decode the msg.what to a string.

Change-Id: I4f53becc6f0cb77399f99702084efef9d8785d67
This commit is contained in:
Wink Saville
2012-04-13 16:11:20 -07:00
parent 069c4f3f0c
commit 583eaaa57c
4 changed files with 232 additions and 48 deletions

View File

@@ -35,6 +35,7 @@ import android.text.TextUtils;
import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
@@ -208,6 +209,27 @@ public abstract class DataConnection extends StateMachine {
protected static final int EVENT_RIL_CONNECTED = BASE + 5;
protected static final int EVENT_DISCONNECT_ALL = BASE + 6;
private static final int CMD_TO_STRING_COUNT = EVENT_DISCONNECT_ALL + 1;
private static String[] sCmdToString = new String[CMD_TO_STRING_COUNT];
static {
sCmdToString[EVENT_CONNECT - BASE] = "EVENT_CONNECT";
sCmdToString[EVENT_SETUP_DATA_CONNECTION_DONE - BASE] =
"EVENT_SETUP_DATA_CONNECTION_DONE";
sCmdToString[EVENT_GET_LAST_FAIL_DONE - BASE] = "EVENT_GET_LAST_FAIL_DONE";
sCmdToString[EVENT_DEACTIVATE_DONE - BASE] = "EVENT_DEACTIVATE_DONE";
sCmdToString[EVENT_DISCONNECT - BASE] = "EVENT_DISCONNECT";
sCmdToString[EVENT_RIL_CONNECTED - BASE] = "EVENT_RIL_CONNECTED";
sCmdToString[EVENT_DISCONNECT_ALL - BASE] = "EVENT_DISCONNECT_ALL";
}
protected static String cmdToString(int cmd) {
cmd -= BASE;
if ((cmd >= 0) && (cmd < sCmdToString.length)) {
return sCmdToString[cmd];
} else {
return null;
}
}
//***** Tag IDs for EventLog
protected static final int EVENT_LOG_BAD_DNS_ADDRESS = 50100;
@@ -242,6 +264,7 @@ public abstract class DataConnection extends StateMachine {
protected DataConnection(PhoneBase phone, String name, int id, RetryManager rm,
DataConnectionTracker dct) {
super(name);
setProcessedMessagesSize(100);
if (DBG) log("DataConnection constructor E");
this.phone = phone;
this.mDataConnectionTracker = dct;
@@ -1188,26 +1211,65 @@ public abstract class DataConnection extends StateMachine {
new DisconnectParams(reason, onCompletedMsg)));
}
/**
* @return the string for msg.what as our info.
*/
@Override
protected String getMessageInfo(Message msg) {
String info = null;
info = cmdToString(msg.what);
if (info == null) {
info = DataConnectionAc.cmdToString(msg.what);
}
return info;
}
/**
* Convert a System.currentTimeMillis() value to a time of day value.
*
* @param millis since the epoch (1/1/1970)
* @return String representation of the time.
*/
private String timeMillisToTimeOfDay(long millis) {
Calendar c = Calendar.getInstance();
if (millis >= 0) {
c.setTimeInMillis(millis);
return String.format("%tm-%td %tH:%tM:%tS.%tL", c, c, c, c, c, c);
} else {
return Long.toString(millis);
}
}
/**
* Dump the current state.
*
* @param fd
* @param pw
* @param args
*/
@Override
public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
pw.println("DataConnection name=" + getName() + ":");
pw.print("DataConnection ");
super.dump(fd, pw, args);
pw.println(" mApnList=" + mApnList);
pw.flush();
pw.println(" mDataConnectionTracker=" + mDataConnectionTracker);
pw.println(" mApn=" + mApn);
pw.println(" mTag=" + mTag);
pw.flush();
pw.println(" phone=" + phone);
pw.println(" mRilVersion=" + mRilVersion);
pw.println(" cid=" + cid);
pw.flush();
pw.println(" mLinkProperties=" + mLinkProperties);
pw.flush();
pw.println(" mCapabilities=" + mCapabilities);
pw.println(" createTime=" + createTime);
pw.println(" lastFailTime=" + lastFailTime);
pw.println(" createTime=" + timeMillisToTimeOfDay(createTime));
pw.println(" lastFailTime=" + timeMillisToTimeOfDay(lastFailTime));
pw.println(" lastFailCause=" + lastFailCause);
pw.flush();
pw.println(" mRetryOverride=" + mRetryOverride);
pw.println(" mRefCount=" + mRefCount);
pw.println(" userData=" + userData);
pw.println(" total messages=" + getProcessedMessagesCount());
for (int i=0; i < getProcessedMessagesSize(); i++) {
pw.printf(" msg[%d]=%s\n", i, getProcessedMessageInfo(i));
}
pw.flush();
}
}

View File

@@ -82,6 +82,51 @@ public class DataConnectionAc extends AsyncChannel {
public static final int REQ_GET_RECONNECT_INTENT = BASE + 26;
public static final int RSP_GET_RECONNECT_INTENT = BASE + 27;
private static final int CMD_TO_STRING_COUNT = RSP_GET_RECONNECT_INTENT + 1;
private static String[] sCmdToString = new String[CMD_TO_STRING_COUNT];
static {
sCmdToString[REQ_IS_INACTIVE - BASE] = "REQ_IS_INACTIVE";
sCmdToString[RSP_IS_INACTIVE - BASE] = "RSP_IS_INACTIVE";
sCmdToString[REQ_GET_CID - BASE] = "REQ_GET_CID";
sCmdToString[RSP_GET_CID - BASE] = "RSP_GET_CID";
sCmdToString[REQ_GET_APNSETTING - BASE] = "REQ_GET_APNSETTING";
sCmdToString[RSP_GET_APNSETTING - BASE] = "RSP_GET_APNSETTING";
sCmdToString[REQ_GET_LINK_PROPERTIES - BASE] = "REQ_GET_LINK_PROPERTIES";
sCmdToString[RSP_GET_LINK_PROPERTIES - BASE] = "RSP_GET_LINK_PROPERTIES";
sCmdToString[REQ_SET_LINK_PROPERTIES_HTTP_PROXY - BASE] =
"REQ_SET_LINK_PROPERTIES_HTTP_PROXY";
sCmdToString[RSP_SET_LINK_PROPERTIES_HTTP_PROXY - BASE] =
"RSP_SET_LINK_PROPERTIES_HTTP_PROXY";
sCmdToString[REQ_GET_LINK_CAPABILITIES - BASE] = "REQ_GET_LINK_CAPABILITIES";
sCmdToString[RSP_GET_LINK_CAPABILITIES - BASE] = "RSP_GET_LINK_CAPABILITIES";
sCmdToString[REQ_UPDATE_LINK_PROPERTIES_DATA_CALL_STATE - BASE] =
"REQ_UPDATE_LINK_PROPERTIES_DATA_CALL_STATE";
sCmdToString[RSP_UPDATE_LINK_PROPERTIES_DATA_CALL_STATE - BASE] =
"RSP_UPDATE_LINK_PROPERTIES_DATA_CALL_STATE";
sCmdToString[REQ_RESET - BASE] = "REQ_RESET";
sCmdToString[RSP_RESET - BASE] = "RSP_RESET";
sCmdToString[REQ_GET_REFCOUNT - BASE] = "REQ_GET_REFCOUNT";
sCmdToString[RSP_GET_REFCOUNT - BASE] = "RSP_GET_REFCOUNT";
sCmdToString[REQ_ADD_APNCONTEXT - BASE] = "REQ_ADD_APNCONTEXT";
sCmdToString[RSP_ADD_APNCONTEXT - BASE] = "RSP_ADD_APNCONTEXT";
sCmdToString[REQ_REMOVE_APNCONTEXT - BASE] = "REQ_REMOVE_APNCONTEXT";
sCmdToString[RSP_REMOVE_APNCONTEXT - BASE] = "RSP_REMOVE_APNCONTEXT";
sCmdToString[REQ_GET_APNCONTEXT_LIST - BASE] = "REQ_GET_APNCONTEXT_LIST";
sCmdToString[RSP_GET_APNCONTEXT_LIST - BASE] = "RSP_GET_APNCONTEXT_LIST";
sCmdToString[REQ_SET_RECONNECT_INTENT - BASE] = "REQ_SET_RECONNECT_INTENT";
sCmdToString[RSP_SET_RECONNECT_INTENT - BASE] = "RSP_SET_RECONNECT_INTENT";
sCmdToString[REQ_GET_RECONNECT_INTENT - BASE] = "REQ_GET_RECONNECT_INTENT";
sCmdToString[RSP_GET_RECONNECT_INTENT - BASE] = "RSP_GET_RECONNECT_INTENT";
}
protected static String cmdToString(int cmd) {
cmd -= BASE;
if ((cmd >= 0) && (cmd < sCmdToString.length)) {
return sCmdToString[cmd];
} else {
return AsyncChannel.cmdToString(cmd + BASE);
}
}
/**
* enum used to notify action taken or necessary to be
* taken after the link property is changed.