diff options
author | mukesh agrawal <quiche@google.com> | 2016-04-06 14:07:41 -0700 |
---|---|---|
committer | mukesh agrawal <quiche@google.com> | 2016-04-07 17:44:04 -0700 |
commit | d604bbd63d620244ef43408de10f65ead01d5026 (patch) | |
tree | 45a2d08d277375d0df2e0de58634ea15c418d92d /service | |
parent | ca0bac5826ab430d1b765b201a609f7bc38401ee (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')
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(); } |