Log netd traffic nicely.

Create a LocalLog class for logging within a service for dumping in dumps.
Use it in the NativeDaemonConnector so we can get some insight into what
is happening in these lockups.

bug:5864209
Change-Id: I68ddc58847f3c8de613be9528570f8c3157d8274
This commit is contained in:
Robert Greenwalt
2012-01-18 12:51:15 -08:00
parent f6351440e4
commit e3a7f729ed

View File

@@ -22,14 +22,17 @@ import android.os.Handler;
import android.os.HandlerThread; import android.os.HandlerThread;
import android.os.Message; import android.os.Message;
import android.os.SystemClock; import android.os.SystemClock;
import android.util.LocalLog;
import android.util.Slog; import android.util.Slog;
import com.google.android.collect.Lists; import com.google.android.collect.Lists;
import java.nio.charset.Charsets;
import java.io.FileDescriptor;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.io.OutputStream; import java.io.OutputStream;
import java.nio.charset.Charsets; import java.io.PrintWriter;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.concurrent.BlockingQueue; import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.LinkedBlockingQueue;
@@ -45,6 +48,7 @@ final class NativeDaemonConnector implements Runnable, Handler.Callback, Watchdo
private String mSocket; private String mSocket;
private OutputStream mOutputStream; private OutputStream mOutputStream;
private LocalLog mLocalLog;
private final BlockingQueue<NativeDaemonEvent> mResponseQueue; private final BlockingQueue<NativeDaemonEvent> mResponseQueue;
@@ -57,11 +61,12 @@ final class NativeDaemonConnector implements Runnable, Handler.Callback, Watchdo
private final int BUFFER_SIZE = 4096; private final int BUFFER_SIZE = 4096;
NativeDaemonConnector(INativeDaemonConnectorCallbacks callbacks, String socket, NativeDaemonConnector(INativeDaemonConnectorCallbacks callbacks, String socket,
int responseQueueSize, String logTag) { int responseQueueSize, String logTag, int maxLogSize) {
mCallbacks = callbacks; mCallbacks = callbacks;
mSocket = socket; mSocket = socket;
mResponseQueue = new LinkedBlockingQueue<NativeDaemonEvent>(responseQueueSize); mResponseQueue = new LinkedBlockingQueue<NativeDaemonEvent>(responseQueueSize);
TAG = logTag != null ? logTag : "NativeDaemonConnector"; TAG = logTag != null ? logTag : "NativeDaemonConnector";
mLocalLog = new LocalLog(maxLogSize);
} }
@Override @Override
@@ -125,7 +130,7 @@ final class NativeDaemonConnector implements Runnable, Handler.Callback, Watchdo
if (buffer[i] == 0) { if (buffer[i] == 0) {
final String rawEvent = new String( final String rawEvent = new String(
buffer, start, i - start, Charsets.UTF_8); buffer, start, i - start, Charsets.UTF_8);
if (LOGD) Slog.d(TAG, "RCV <- " + rawEvent); log("RCV <- {" + rawEvent + "}");
try { try {
final NativeDaemonEvent event = NativeDaemonEvent.parseRawEvent( final NativeDaemonEvent event = NativeDaemonEvent.parseRawEvent(
@@ -208,7 +213,7 @@ final class NativeDaemonConnector implements Runnable, Handler.Callback, Watchdo
} }
final String unterminated = builder.toString(); final String unterminated = builder.toString();
if (LOGD) Slog.d(TAG, "SND -> " + unterminated); log("SND -> {" + unterminated + "}");
builder.append('\0'); builder.append('\0');
@@ -432,4 +437,13 @@ final class NativeDaemonConnector implements Runnable, Handler.Callback, Watchdo
public void monitor() { public void monitor() {
synchronized (mDaemonLock) { } synchronized (mDaemonLock) { }
} }
public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
mLocalLog.dump(fd, pw, args);
}
private void log(String logstring) {
if (LOGD) Slog.d(TAG, logstring);
mLocalLog.log(logstring);
}
} }