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:
@@ -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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user