diff --git a/tools/ddms/libs/ddmlib/src/com/android/ddmlib/AdbHelper.java b/tools/ddms/libs/ddmlib/src/com/android/ddmlib/AdbHelper.java index db88f6704..7a4d0add5 100644 --- a/tools/ddms/libs/ddmlib/src/com/android/ddmlib/AdbHelper.java +++ b/tools/ddms/libs/ddmlib/src/com/android/ddmlib/AdbHelper.java @@ -40,8 +40,6 @@ final class AdbHelper { static final int WAIT_TIME = 5; // spin-wait sleep, in ms - public static final int STD_TIMEOUT = 5000; // standard delay, in ms - static final String DEFAULT_ENCODING = "ISO-8859-1"; //$NON-NLS-1$ /** do not instantiate */ @@ -576,7 +574,7 @@ final class AdbHelper { */ static boolean read(SocketChannel chan, byte[] data) { try { - read(chan, data, -1, STD_TIMEOUT); + read(chan, data, -1, DdmPreferences.getTimeOut()); } catch (IOException e) { Log.d("ddms", "readAll: IOException: " + e.getMessage()); return false; @@ -636,7 +634,7 @@ final class AdbHelper { */ static boolean write(SocketChannel chan, byte[] data) { try { - write(chan, data, -1, STD_TIMEOUT); + write(chan, data, -1, DdmPreferences.getTimeOut()); } catch (IOException e) { Log.e("ddms", e); return false; diff --git a/tools/ddms/libs/ddmlib/src/com/android/ddmlib/DdmPreferences.java b/tools/ddms/libs/ddmlib/src/com/android/ddmlib/DdmPreferences.java index c96d40da6..8044ab11b 100644 --- a/tools/ddms/libs/ddmlib/src/com/android/ddmlib/DdmPreferences.java +++ b/tools/ddms/libs/ddmlib/src/com/android/ddmlib/DdmPreferences.java @@ -40,6 +40,8 @@ public final class DdmPreferences { public final static int DEFAULT_DEBUG_PORT_BASE = 8600; /** Default value for the logcat {@link LogLevel} */ public final static LogLevel DEFAULT_LOG_LEVEL = LogLevel.ERROR; + /** Default timeout values for adb connection (milliseconds) */ + public static final int DEFAULT_TIMEOUT = 5000; // standard delay, in ms private static boolean sThreadUpdate = DEFAULT_INITIAL_THREAD_UPDATE; private static boolean sInitialHeapUpdate = DEFAULT_INITIAL_HEAP_UPDATE; @@ -47,6 +49,7 @@ public final class DdmPreferences { private static int sSelectedDebugPort = DEFAULT_SELECTED_DEBUG_PORT; private static int sDebugPortBase = DEFAULT_DEBUG_PORT_BASE; private static LogLevel sLogLevel = DEFAULT_LOG_LEVEL; + private static int sTimeOut = DEFAULT_TIMEOUT; /** * Returns the initial {@link Client} flag for thread updates. @@ -75,7 +78,7 @@ public final class DdmPreferences { /** * Sets the initial {@link Client} flag for heap updates. *
Iftrue, the {@link ClientData} will automatically be updated with
- * the VM heap information whenever a GC happens.
+ * the VM heap information whenever a GC happens.
* This change takes effect right away, for newly created {@link Client} objects.
*/
public static void setInitialHeapUpdate(boolean state) {
@@ -137,7 +140,23 @@ public final class DdmPreferences {
Log.setLevel(sLogLevel);
}
-
+
+ /**
+ * Returns the timeout to be used in adb connections (milliseconds).
+ */
+ public static int getTimeOut() {
+ return sTimeOut;
+ }
+
+ /**
+ * Sets the timeout value for adb connection.
+ * This change takes effect for newly created connections only.
+ * @param timeOut the timeout value (milliseconds).
+ */
+ public static void setTimeOut(int timeOut) {
+ sTimeOut = timeOut;
+ }
+
/**
* Non accessible constructor.
*/
diff --git a/tools/ddms/libs/ddmlib/src/com/android/ddmlib/EmulatorConsole.java b/tools/ddms/libs/ddmlib/src/com/android/ddmlib/EmulatorConsole.java
index 75347c6ee..6ac019de4 100644
--- a/tools/ddms/libs/ddmlib/src/com/android/ddmlib/EmulatorConsole.java
+++ b/tools/ddms/libs/ddmlib/src/com/android/ddmlib/EmulatorConsole.java
@@ -566,7 +566,7 @@ public final class EmulatorConsole {
}
// write the command
- AdbHelper.write(mSocketChannel, bCommand, bCommand.length, AdbHelper.STD_TIMEOUT);
+ AdbHelper.write(mSocketChannel, bCommand, bCommand.length, DdmPreferences.getTimeOut());
result = true;
} catch (IOException e) {
diff --git a/tools/ddms/libs/ddmlib/src/com/android/ddmlib/SyncService.java b/tools/ddms/libs/ddmlib/src/com/android/ddmlib/SyncService.java
index 7abe557da..9f6b56149 100644
--- a/tools/ddms/libs/ddmlib/src/com/android/ddmlib/SyncService.java
+++ b/tools/ddms/libs/ddmlib/src/com/android/ddmlib/SyncService.java
@@ -222,7 +222,7 @@ public final class SyncService {
AdbHelper.setDevice(mChannel, mDevice);
byte[] request = AdbHelper.formAdbRequest("sync:"); // $NON-NLS-1$
- AdbHelper.write(mChannel, request, -1, AdbHelper.STD_TIMEOUT);
+ AdbHelper.write(mChannel, request, -1, DdmPreferences.getTimeOut());
AdbResponse resp = AdbHelper.readAdbResponse(mChannel, false /* readDiagString */);
@@ -559,6 +559,9 @@ public final class SyncService {
ISyncProgressMonitor monitor) {
byte[] msg = null;
byte[] pullResult = new byte[8];
+
+ final int timeOut = DdmPreferences.getTimeOut();
+
try {
byte[] remotePathContent = remotePath.getBytes(AdbHelper.DEFAULT_ENCODING);
@@ -570,11 +573,11 @@ public final class SyncService {
msg = createFileReq(ID_RECV, remotePathContent);
// and send it.
- AdbHelper.write(mChannel, msg, -1, AdbHelper.STD_TIMEOUT);
+ AdbHelper.write(mChannel, msg, -1, timeOut);
// read the result, in a byte array containing 2 ints
// (id, size)
- AdbHelper.read(mChannel, pullResult, -1, AdbHelper.STD_TIMEOUT);
+ AdbHelper.read(mChannel, pullResult, -1, timeOut);
// check we have the proper data back
if (checkResult(pullResult, ID_DATA) == false &&
@@ -626,10 +629,10 @@ public final class SyncService {
try {
// now read the length we received
- AdbHelper.read(mChannel, data, length, AdbHelper.STD_TIMEOUT);
+ AdbHelper.read(mChannel, data, length, timeOut);
// get the header for the next packet.
- AdbHelper.read(mChannel, pullResult, -1, AdbHelper.STD_TIMEOUT);
+ AdbHelper.read(mChannel, pullResult, -1, timeOut);
} catch (IOException e) {
return new SyncResult(RESULT_CONNECTION_ERROR, e);
}
@@ -705,6 +708,8 @@ public final class SyncService {
FileInputStream fis = null;
byte[] msg;
+ final int timeOut = DdmPreferences.getTimeOut();
+
try {
byte[] remotePathContent = remotePath.getBytes(AdbHelper.DEFAULT_ENCODING);
@@ -733,7 +738,7 @@ public final class SyncService {
// and send it. We use a custom try/catch block to make the difference between
// file and network IO exceptions.
try {
- AdbHelper.write(mChannel, msg, -1, AdbHelper.STD_TIMEOUT);
+ AdbHelper.write(mChannel, msg, -1, timeOut);
} catch (IOException e) {
return new SyncResult(RESULT_CONNECTION_ERROR, e);
}
@@ -771,7 +776,7 @@ public final class SyncService {
// now write it
try {
- AdbHelper.write(mChannel, mBuffer, readCount+8, AdbHelper.STD_TIMEOUT);
+ AdbHelper.write(mChannel, mBuffer, readCount+8, timeOut);
} catch (IOException e) {
return new SyncResult(RESULT_CONNECTION_ERROR, e);
}
@@ -792,19 +797,19 @@ public final class SyncService {
msg = createReq(ID_DONE, (int)time);
// and send it.
- AdbHelper.write(mChannel, msg, -1, AdbHelper.STD_TIMEOUT);
+ AdbHelper.write(mChannel, msg, -1, timeOut);
// read the result, in a byte array containing 2 ints
// (id, size)
byte[] result = new byte[8];
- AdbHelper.read(mChannel, result, -1 /* full length */, AdbHelper.STD_TIMEOUT);
+ AdbHelper.read(mChannel, result, -1 /* full length */, timeOut);
if (checkResult(result, ID_OKAY) == false) {
if (checkResult(result, ID_FAIL)) {
// read some error message...
int len = ArrayHelper.swap32bitFromArray(result, 4);
- AdbHelper.read(mChannel, mBuffer, len, AdbHelper.STD_TIMEOUT);
+ AdbHelper.read(mChannel, mBuffer, len, timeOut);
// output the result?
String message = new String(mBuffer, 0, len);
@@ -832,12 +837,12 @@ public final class SyncService {
// create the stat request message.
byte[] msg = createFileReq(ID_STAT, path);
- AdbHelper.write(mChannel, msg, -1 /* full length */, AdbHelper.STD_TIMEOUT);
+ AdbHelper.write(mChannel, msg, -1 /* full length */, DdmPreferences.getTimeOut());
// read the result, in a byte array containing 4 ints
// (id, mode, size, time)
byte[] statResult = new byte[16];
- AdbHelper.read(mChannel, statResult, -1 /* full length */, AdbHelper.STD_TIMEOUT);
+ AdbHelper.read(mChannel, statResult, -1 /* full length */, DdmPreferences.getTimeOut());
// check we have the proper data back
if (checkResult(statResult, ID_STAT) == false) {