summaryrefslogtreecommitdiff
path: root/service
diff options
context:
space:
mode:
authormukesh agrawal <quiche@google.com>2016-04-06 14:07:41 -0700
committermukesh agrawal <quiche@google.com>2016-04-07 17:44:04 -0700
commitd604bbd63d620244ef43408de10f65ead01d5026 (patch)
tree45a2d08d277375d0df2e0de58634ea15c418d92d /service
parentca0bac5826ab430d1b765b201a609f7bc38401ee (diff)
wifi service: use large ringbuffers in verbose mode
When the user has chosen to enable wi-fi verbose logging, we'd like to use larger ring buffers. Make it so. BUG=27578082 TEST=unit tests Change-Id: I1e2447df2beda455cea37072e91fa0aac338bb3f
Diffstat (limited to 'service')
-rw-r--r--service/java/com/android/server/wifi/FrameworkFacade.java5
-rw-r--r--service/java/com/android/server/wifi/WifiLogger.java25
-rw-r--r--service/java/com/android/server/wifi/WifiStateMachine.java4
3 files changed, 24 insertions, 10 deletions
diff --git a/service/java/com/android/server/wifi/FrameworkFacade.java b/service/java/com/android/server/wifi/FrameworkFacade.java
index d823a1e6a..13d2965c0 100644
--- a/service/java/com/android/server/wifi/FrameworkFacade.java
+++ b/service/java/com/android/server/wifi/FrameworkFacade.java
@@ -30,9 +30,8 @@ public class FrameworkFacade {
return new BaseWifiLogger();
}
- public BaseWifiLogger makeRealLogger(
- WifiStateMachine stateMachine, WifiNative wifiNative, int maxRingbufferSizeBytes) {
- return new WifiLogger(stateMachine, wifiNative, maxRingbufferSizeBytes);
+ public BaseWifiLogger makeRealLogger(WifiStateMachine stateMachine, WifiNative wifiNative) {
+ return new WifiLogger(stateMachine, wifiNative);
}
public boolean setIntegerSetting(Context context, String name, int def) {
diff --git a/service/java/com/android/server/wifi/WifiLogger.java b/service/java/com/android/server/wifi/WifiLogger.java
index 64c570cd8..552049f74 100644
--- a/service/java/com/android/server/wifi/WifiLogger.java
+++ b/service/java/com/android/server/wifi/WifiLogger.java
@@ -36,9 +36,15 @@ import java.util.HashMap;
import java.util.zip.Deflater;
/**
- * Tracks various logs for framework
+ * Tracks various logs for framework.
*/
class WifiLogger extends BaseWifiLogger {
+ /**
+ * Thread-safety:
+ * 1) All non-private methods are |synchronized|.
+ * 2) Callbacks into WifiLogger use non-private (and hence, synchronized) methods. See, e.g,
+ * onRingBufferData(), onWifiAlert().
+ */
private static final String TAG = "WifiLogger";
private static final boolean DBG = false;
@@ -80,18 +86,20 @@ class WifiLogger extends BaseWifiLogger {
/** minimum buffer size for each of the log levels */
private static final int MinBufferSizes[] = new int[] { 0, 16384, 16384, 65536 };
+ @VisibleForTesting public static final int RING_BUFFER_BYTE_LIMIT_SMALL = 32 * 1024;
+ @VisibleForTesting public static final int RING_BUFFER_BYTE_LIMIT_LARGE = 1024 * 1024;
+
private int mLogLevel = VERBOSE_NO_LOG;
private WifiNative.RingBufferStatus[] mRingBuffers;
private WifiNative.RingBufferStatus mPerPacketRingBuffer;
private WifiStateMachine mWifiStateMachine;
private final WifiNative mWifiNative;
- private final int mMaxRingBufferSizeBytes;
+ private int mMaxRingBufferSizeBytes = RING_BUFFER_BYTE_LIMIT_SMALL;
public WifiLogger(
- WifiStateMachine wifiStateMachine, WifiNative wifiNative, int maxRingBufferSizeBytes) {
+ WifiStateMachine wifiStateMachine, WifiNative wifiNative) {
mWifiStateMachine = wifiStateMachine;
mWifiNative = wifiNative;
- mMaxRingBufferSizeBytes = maxRingBufferSizeBytes;
}
@Override
@@ -105,8 +113,10 @@ class WifiLogger extends BaseWifiLogger {
if (verboseEnabled) {
mLogLevel = VERBOSE_LOG_WITH_WAKEUP;
+ mMaxRingBufferSizeBytes = RING_BUFFER_BYTE_LIMIT_LARGE;
} else {
mLogLevel = VERBOSE_NORMAL_LOG;
+ mMaxRingBufferSizeBytes = RING_BUFFER_BYTE_LIMIT_SMALL;
}
if (mRingBuffers == null) {
@@ -116,6 +126,7 @@ class WifiLogger extends BaseWifiLogger {
if (mRingBuffers != null) {
/* log level may have changed, so restart logging with new levels */
stopLoggingAllBuffers();
+ resizeRingBuffers();
startLoggingAllExceptPerPacketBuffers();
}
@@ -358,6 +369,12 @@ class WifiLogger extends BaseWifiLogger {
return mRingBuffers != null;
}
+ private void resizeRingBuffers() {
+ for (ByteArrayRingBuffer byteArrayRingBuffer : mRingBufferData.values()) {
+ byteArrayRingBuffer.resize(mMaxRingBufferSizeBytes);
+ }
+ }
+
private boolean startLoggingAllExceptPerPacketBuffers() {
if (mRingBuffers == null) {
diff --git a/service/java/com/android/server/wifi/WifiStateMachine.java b/service/java/com/android/server/wifi/WifiStateMachine.java
index 179d1348b..7690d9976 100644
--- a/service/java/com/android/server/wifi/WifiStateMachine.java
+++ b/service/java/com/android/server/wifi/WifiStateMachine.java
@@ -1043,9 +1043,7 @@ public class WifiStateMachine extends StateMachine implements WifiNative.WifiRss
R.bool.config_wifi_enable_wifi_firmware_debugging);
if (enableFirmwareLogs) {
- int maxRingBufferSizeBytes = mContext.getResources().getInteger(
- R.integer.config_wifi_logger_ring_buffer_size_limit_kb) * 1024;
- mWifiLogger = facade.makeRealLogger(this, mWifiNative, maxRingBufferSizeBytes);
+ mWifiLogger = facade.makeRealLogger(this, mWifiNative);
} else {
mWifiLogger = facade.makeBaseLogger();
}