Merge "Add debug for tracking down connectivity issues." into jb-dev

This commit is contained in:
Wink Saville
2012-05-24 16:05:18 -07:00
committed by Android (Google) Code Review
6 changed files with 76 additions and 45 deletions

View File

@@ -78,8 +78,11 @@ public class ApnContext {
return mDataConnection;
}
public synchronized void setDataConnection(DataConnection dataConnection) {
mDataConnection = dataConnection;
public synchronized void setDataConnection(DataConnection dc) {
if (DBG) {
log("setDataConnection: old dc=" + mDataConnection + " new dc=" + dc + " this=" + this);
}
mDataConnection = dc;
}
@@ -88,10 +91,15 @@ public class ApnContext {
}
public synchronized void setDataConnectionAc(DataConnectionAc dcac) {
if (DBG) {
log("setDataConnectionAc: old dcac=" + mDataConnectionAc + " new dcac=" + dcac);
}
if (dcac != null) {
dcac.addApnContextSync(this);
} else {
if (mDataConnectionAc != null) mDataConnectionAc.removeApnContextSync(this);
if (mDataConnectionAc != null) {
mDataConnectionAc.removeApnContextSync(this);
}
}
mDataConnectionAc = dcac;
}
@@ -141,7 +149,7 @@ public class ApnContext {
public synchronized void setState(DataConnectionTracker.State s) {
if (DBG) {
log("setState: " + s + " for type " + mApnType + ", previous state:" + mState);
log("setState: " + s + ", previous state:" + mState);
}
mState = s;
@@ -165,7 +173,7 @@ public class ApnContext {
public synchronized void setReason(String reason) {
if (DBG) {
log("set reason as " + reason + ", for type " + mApnType + ",current state " + mState);
log("set reason as " + reason + ",current state " + mState);
}
mReason = reason;
}
@@ -180,8 +188,7 @@ public class ApnContext {
public void setEnabled(boolean enabled) {
if (DBG) {
log("set enabled as " + enabled + ", for type " +
mApnType + ", current state is " + mDataEnabled.get());
log("set enabled as " + enabled + ", current state is " + mDataEnabled.get());
}
mDataEnabled.set(enabled);
}
@@ -192,8 +199,7 @@ public class ApnContext {
public void setDependencyMet(boolean met) {
if (DBG) {
log("set mDependencyMet as " + met + ", for type " + mApnType +
", current state is " + mDependencyMet.get());
log("set mDependencyMet as " + met + " current state is " + mDependencyMet.get());
}
mDependencyMet.set(met);
}
@@ -204,25 +210,19 @@ public class ApnContext {
@Override
public String toString() {
return "state=" + getState() + " apnType=" + mApnType;
// We don't print mDataConnection because its recursive.
return "{mApnType=" + mApnType + " mState=" + getState() + " mWaitingApns=" + mWaitingApns +
" mWaitingApnsPermanentFailureCountDown=" + mWaitingApnsPermanentFailureCountDown +
" mApnSetting=" + mApnSetting + " mDataConnectionAc=" + mDataConnectionAc +
" mReason=" + mReason + " mDataEnabled=" + mDataEnabled +
" mDependencyMet=" + mDependencyMet + "}";
}
protected void log(String s) {
Log.d(LOG_TAG, "[ApnContext] " + s);
Log.d(LOG_TAG, "[ApnContext:" + mApnType + "] " + s);
}
public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
pw.println("ApnContext:");
pw.println(" mApnType=" + mApnType);
pw.println(" mState=" + mState);
pw.println(" mWaitingApns=" + mWaitingApns);
pw.println(" mWaitingApnsPermanentFailureCountDown=" +
mWaitingApnsPermanentFailureCountDown);
pw.println(" mApnSetting=" + mApnSetting);
pw.println(" mDataConnection=" + mDataConnection);
pw.println(" mDataConnectionAc=" + mDataConnectionAc);
pw.println(" mReason=" + mReason);
pw.println(" mDataEnabled=" + mDataEnabled);
pw.println(" mDependencyMet=" + mDependencyMet);
pw.println("ApnContext: " + this.toString());
}
}

View File

@@ -69,7 +69,7 @@ public abstract class DataConnection extends StateMachine {
protected static int mCount;
protected AsyncChannel mAc;
private List<ApnContext> mApnList = null;
protected List<ApnContext> mApnList = null;
PendingIntent mReconnectIntent = null;
private DataConnectionTracker mDataConnectionTracker = null;
@@ -247,7 +247,7 @@ public abstract class DataConnection extends StateMachine {
protected FailCause lastFailCause;
protected int mRetryOverride = -1;
protected static final String NULL_IP = "0.0.0.0";
private int mRefCount;
protected int mRefCount;
Object userData;
//***** Abstract methods
@@ -600,9 +600,8 @@ public abstract class DataConnection extends StateMachine {
result.newLp.setHttpProxy(mLinkProperties.getHttpProxy());
if (DBG && (! result.oldLp.equals(result.newLp))) {
if (DBG) log("updateLinkProperty old != new");
if (VDBG) log("updateLinkProperty old LP=" + result.oldLp);
if (VDBG) log("updateLinkProperty new LP=" + result.newLp);
log("updateLinkProperty old LP=" + result.oldLp);
log("updateLinkProperty new LP=" + result.newLp);
}
mLinkProperties = result.newLp;

View File

@@ -580,6 +580,11 @@ public class DataConnectionAc extends AsyncChannel {
}
}
@Override
public String toString() {
return dataConnection.getName();
}
private void log(String s) {
android.util.Log.d(mLogTag, "DataConnectionAc " + s);
}

View File

@@ -499,6 +499,7 @@ public abstract class DataConnectionTracker extends Handler {
*/
protected DataConnectionTracker(PhoneBase phone) {
super();
if (DBG) log("DCT.constructor");
mPhone = phone;
IntentFilter filter = new IntentFilter();
@@ -534,6 +535,7 @@ public abstract class DataConnectionTracker extends Handler {
}
public void dispose() {
if (DBG) log("DCT.dispose");
for (DataConnectionAc dcac : mDataConnectionAsyncChannels.values()) {
dcac.disconnect();
}
@@ -1256,7 +1258,6 @@ public abstract class DataConnectionTracker extends Handler {
Set<Entry<String, ApnContext>> mApnContextsSet = mApnContexts.entrySet();
pw.println(" mApnContexts size=" + mApnContextsSet.size());
for (Entry<String, ApnContext> entry : mApnContextsSet) {
pw.printf(" *** mApnContexts[%s]:\n", entry.getKey());
entry.getValue().dump(fd, pw, args);
}
pw.println(" ***************************************");

View File

@@ -120,9 +120,10 @@ public class GsmDataConnection extends DataConnection {
@Override
public String toString() {
return "State=" + getCurrentState().getName() + " Apn=" + mApn +
" create=" + createTime + " lastFail=" + lastFailTime +
" lastFailCause=" + lastFailCause;
return "{" + getName() + ": State=" + getCurrentState().getName() +
" apnSetting=" + mApn + " apnList= " + mApnList + " RefCount=" + mRefCount +
" cid=" + cid + " create=" + createTime + " lastFail=" + lastFailTime +
" lastFailCause=" + lastFailCause + "}";
}
@Override

View File

@@ -175,7 +175,7 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
public GsmDataConnectionTracker(PhoneBase p) {
super(p);
if (DBG) log("GsmDCT.constructor");
p.mCM.registerForAvailable (this, EVENT_RADIO_AVAILABLE, null);
p.mCM.registerForOffOrNotAvailable(this, EVENT_RADIO_OFF_OR_NOT_AVAILABLE, null);
p.mIccRecords.registerForRecordsLoaded(this, EVENT_RECORDS_LOADED, null);
@@ -212,6 +212,7 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
@Override
public void dispose() {
if (DBG) log("GsmDCT.dispose");
cleanUpAllConnections(false, null);
super.dispose();
@@ -835,10 +836,11 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
return;
}
if (DBG) {
log("cleanUpConnection: tearDown=" + tearDown + " reason=" + apnContext.getReason());
}
DataConnectionAc dcac = apnContext.getDataConnectionAc();
if (DBG) {
log("cleanUpConnection: E tearDown=" + tearDown + " reason=" + apnContext.getReason() +
" apnContext=" + apnContext);
}
if (tearDown) {
if (apnContext.isDisconnected()) {
// The request is tearDown and but ApnContext is not connected.
@@ -901,6 +903,10 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
cancelReconnectAlarm(dcac);
}
}
if (DBG) {
log("cleanUpConnection: X tearDown=" + tearDown + " reason=" + apnContext.getReason() +
" apnContext=" + apnContext + " dc=" + apnContext.getDataConnection());
}
}
/**
@@ -986,8 +992,12 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
private GsmDataConnection findFreeDataConnection() {
for (DataConnectionAc dcac : mDataConnectionAsyncChannels.values()) {
if (dcac.isInactiveSync() && dataConnectionNotInUse(dcac)) {
log("findFreeDataConnection: found free GsmDataConnection");
return (GsmDataConnection) dcac.dataConnection;
DataConnection dc = dcac.dataConnection;
if (DBG) {
log("findFreeDataConnection: found free GsmDataConnection=" +
" dcac=" + dcac + " dc=" + dc);
}
return (GsmDataConnection) dc;
}
}
log("findFreeDataConnection: NO free GsmDataConnection");
@@ -995,12 +1005,13 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
}
protected GsmDataConnection findReadyDataConnection(ApnSetting apn) {
if (DBG)
log("findReadyDataConnection: apn string <" +
(apn!=null?(apn.toString()):"null") +">");
if (apn == null) {
return null;
}
if (DBG) {
log("findReadyDataConnection: apn string <" + apn + ">" +
" dcacs.size=" + mDataConnectionAsyncChannels.size());
}
for (DataConnectionAc dcac : mDataConnectionAsyncChannels.values()) {
ApnSetting apnSetting = dcac.getApnSettingSync();
if (DBG) {
@@ -1008,7 +1019,12 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
(apnSetting != null ? (apnSetting.toString()) : "null") + ">");
}
if ((apnSetting != null) && TextUtils.equals(apnSetting.toString(), apn.toString())) {
return (GsmDataConnection) dcac.dataConnection;
DataConnection dc = dcac.dataConnection;
if (DBG) {
log("findReadyDataConnection: found ready GsmDataConnection=" +
" dcac=" + dcac + " dc=" + dc);
}
return (GsmDataConnection) dc;
}
}
return null;
@@ -1129,6 +1145,8 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
private List<ApnContext> findApnContextToClean(Collection<DataConnectionAc> dcacs) {
if (dcacs == null) return null;
if (DBG) log("findApnContextToClean(ar): E dcacs=" + dcacs);
ArrayList<ApnContext> list = new ArrayList<ApnContext>();
for (ApnContext apnContext : mApnContexts.values()) {
if (apnContext.getState() == State.CONNECTED) {
@@ -1144,7 +1162,7 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
// ApnContext does not have dcac reported in data call list.
// Fetch all the ApnContexts that map to this dcac which are in
// INITING state too.
if (DBG) log("onDataStateChanged(ar): Connected apn not found in the list (" +
if (DBG) log("findApnContextToClean(ar): Connected apn not found in the list (" +
apnContext.toString() + ")");
if (apnContext.getDataConnectionAc() != null) {
list.addAll(apnContext.getDataConnectionAc().getApnListSync());
@@ -1154,6 +1172,7 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
}
}
}
if (DBG) log("findApnContextToClean(ar): X list=" + list);
return list;
}
@@ -1236,6 +1255,10 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
// If the same address type was removed and added we need to cleanup
CompareResult<LinkAddress> car =
result.oldLp.compareAddresses(result.newLp);
if (DBG) {
log("onDataStateChanged: oldLp=" + result.oldLp +
" newLp=" + result.newLp + " car=" + car);
}
boolean needToClean = false;
for (LinkAddress added : car.added) {
for (LinkAddress removed : car.removed) {
@@ -1249,7 +1272,8 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
if (needToClean) {
if (DBG) {
log("onDataStateChanged(ar): addr change, cleanup apns=" +
connectedApns);
connectedApns + " oldLp=" + result.oldLp +
" newLp=" + result.newLp);
}
apnsToCleanup.addAll(connectedApns);
} else {
@@ -1285,6 +1309,7 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
}
// Cleanup those dropped connections
if (DBG) log("onDataStateChange(ar): apnsToCleanup=" + apnsToCleanup);
for (ApnContext apnContext : apnsToCleanup) {
cleanUpConnection(true, apnContext);
}
@@ -2256,7 +2281,7 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker {
filter.addAction(INTENT_RECONNECT_ALARM + '.' + id);
mPhone.getContext().registerReceiver(mIntentReceiver, filter, null, mPhone);
if (DBG) log("createDataConnection() X id=" + id);
if (DBG) log("createDataConnection() X id=" + id + " dc=" + conn);
return conn;
}