summaryrefslogtreecommitdiffstats
path: root/service/jni
diff options
context:
space:
mode:
authorVinit Deshpande <vinitd@google.com>2015-06-01 14:13:04 -0700
committerVinit Deshpande <vinitd@google.com>2015-06-03 18:07:51 -0700
commit0bf150b2d69ec62df905bc6f8603437dc4caee1f (patch)
tree4afa6fa87eddba5bbe3b2db3238784dfbcf5d6ca /service/jni
parent550ae0842c9ca95facfe8b310de5c6d2a0601a89 (diff)
downloadandroid_frameworks_opt_net_wifi-0bf150b2d69ec62df905bc6f8603437dc4caee1f.tar.gz
android_frameworks_opt_net_wifi-0bf150b2d69ec62df905bc6f8603437dc4caee1f.tar.bz2
android_frameworks_opt_net_wifi-0bf150b2d69ec62df905bc6f8603437dc4caee1f.zip
Enable ring buffer logging and auto-logging of failures
This change extracts ring buffer data from firmware; and automatically logs driver/firmware logs when any failure is detected. Change-Id: I20c8cc00e8ac1d1b4f35da6d309e972cd8ea5d19
Diffstat (limited to 'service/jni')
-rw-r--r--service/jni/com_android_server_wifi_WifiNative.cpp49
1 files changed, 14 insertions, 35 deletions
diff --git a/service/jni/com_android_server_wifi_WifiNative.cpp b/service/jni/com_android_server_wifi_WifiNative.cpp
index 806e7aef8..d100060fb 100644
--- a/service/jni/com_android_server_wifi_WifiNative.cpp
+++ b/service/jni/com_android_server_wifi_WifiNative.cpp
@@ -1583,7 +1583,7 @@ static jobject android_net_wifi_get_ring_buffer_status (JNIEnv *env, jclass cls,
if (result == WIFI_SUCCESS) {
ALOGD("status is %p, number is %d", status, num_rings);
jclass clsRingBufferStatus =
- (env)->FindClass("com/android/server/wifi/WifiLogger$RingBufferStatus");
+ (env)->FindClass("com/android/server/wifi/WifiNative$RingBufferStatus");
if (clsRingBufferStatus == NULL) {
ALOGE("Error in accessing class");
free(status);
@@ -1594,7 +1594,7 @@ static jobject android_net_wifi_get_ring_buffer_status (JNIEnv *env, jclass cls,
for(u32 i = 0; i < num_rings; i++, tmp++) {
jobject ringStatus = createObject(env,
- "com/android/server/wifi/WifiLogger$RingBufferStatus");
+ "com/android/server/wifi/WifiNative$RingBufferStatus");
if (ringStatus == NULL) {
ALOGE("Error in creating ringBufferStatus");
free(status);
@@ -1624,33 +1624,26 @@ static jobject android_net_wifi_get_ring_buffer_status (JNIEnv *env, jclass cls,
static void on_ring_buffer_data(char *ring_name, char *buffer, int buffer_size,
wifi_ring_buffer_status *status) {
+
if (!ring_name || !buffer || !status ||
(unsigned int)buffer_size <= sizeof(wifi_ring_buffer_entry)) {
ALOGE("Error input for on_ring_buffer_data!");
+ return;
}
+
JNIEnv *env = NULL;
mVM->AttachCurrentThread(&env, NULL);
ALOGD("on_ring_buffer_data called, vm = %p, obj = %p, env = %p buffer size = %d", mVM,
mCls, env, buffer_size);
- jobject wifiLoggerEvent = createObject(env,
- "com/android/server/wifi/WifiNative$WifiLoggerEvent");
-
- //jstring reportBuffer = env->NewStringUTF(buffer);
- //setStringField(env, wifiLoggerEvent, "buffer", buffer);
-
jobject ringStatus = createObject(env,
- "com/android/server/wifi/WifiLogger$RingBufferStatus");
+ "com/android/server/wifi/WifiNative$RingBufferStatus");
if (status == NULL) {
ALOGE("Error in creating ringBufferStatus");
return;
}
- char name[32];
- for(int j = 0; j < 32; j++) {
- name[j] = status->name[j];
- }
- setStringField(env, ringStatus, "name", name);
+ setStringField(env, ringStatus, "name", ring_name);
setIntField(env, ringStatus, "flag", status->flags);
setIntField(env, ringStatus, "ringBufferId", status->ring_id);
setIntField(env, ringStatus, "ringBufferByteSize", status->ring_buffer_byte_size);
@@ -1658,29 +1651,15 @@ static void on_ring_buffer_data(char *ring_name, char *buffer, int buffer_size,
setIntField(env, ringStatus, "writtenBytes", status->written_bytes);
setIntField(env, ringStatus, "readBytes", status->read_bytes);
setIntField(env, ringStatus, "writtenRecords", status->written_records);
- setObjectField(env, wifiLoggerEvent, "status",
- "Lcom/android/server/wifi/WifiLogger$RingBufferStatus;", ringStatus);
- //set entry
- wifi_ring_buffer_entry *buffer_entry = (wifi_ring_buffer_entry *) buffer;
- setIntField(env,wifiLoggerEvent, "entrySize", buffer_entry->entry_size);
- setIntField(env,wifiLoggerEvent, "flags", buffer_entry->flags);
- setIntField(env,wifiLoggerEvent, "type", buffer_entry->type);
- setLongField(env,wifiLoggerEvent, "timestamp", buffer_entry->timestamp);
- //set records
- int record_size = buffer_size - sizeof(wifi_ring_buffer_entry);
- if (buffer_entry->entry_size > 0) {
- jbyteArray records = env->NewByteArray(buffer_entry->entry_size);
- jbyte *bytes = (jbyte *) (buffer_entry + 1);
- env->SetByteArrayRegion(records, 0, buffer_entry->entry_size, bytes);
- setObjectField(env,wifiLoggerEvent, "entry", "[B", records);
- env->DeleteLocalRef(records);
- }
- reportEvent(env, mCls,"onWifiLoggerEvent",
- "(Lcom/android/server/wifi/WifiNative$WifiLoggerEvent;)V", wifiLoggerEvent);
+ jbyteArray bytes = env->NewByteArray(buffer_size);
+ env->SetByteArrayRegion(bytes, 0, buffer_size, (jbyte*)buffer);
+
+ reportEvent(env, mCls,"onRingBufferData",
+ "(Lcom/android/server/wifi/WifiNative$RingBufferStatus;[B)V", ringStatus, bytes);
+ env->DeleteLocalRef(bytes);
env->DeleteLocalRef(ringStatus);
- env->DeleteLocalRef(wifiLoggerEvent);
}
static void on_alert_data(wifi_request_id id, char *buffer, int buffer_size, int err_code){
@@ -2148,7 +2127,7 @@ static JNINativeMethod gWifiMethods[] = {
(void*) android_net_wifi_get_driver_version},
{"getFirmwareVersionNative", "(I)Ljava/lang/String;",
(void*) android_net_wifi_get_firmware_version},
- {"getRingBufferStatusNative", "(I)[Lcom/android/server/wifi/WifiLogger$RingBufferStatus;",
+ {"getRingBufferStatusNative", "(I)[Lcom/android/server/wifi/WifiNative$RingBufferStatus;",
(void*) android_net_wifi_get_ring_buffer_status},
{"startLoggingRingBufferNative", "(IIIIILjava/lang/String;)Z",
(void*) android_net_wifi_start_logging_ring_buffer},