diff options
author | Jeff Brown <jeffbrown@google.com> | 2015-04-29 01:17:56 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-04-29 01:18:09 +0000 |
commit | 28e84a147f7f88db0f2e24b81b1280ea22604184 (patch) | |
tree | d1250ebc4488305086dc6181bdf83423b0747f4b | |
parent | 0a866ea450d9fec88e9e15988afdf9265f021c34 (diff) | |
parent | b1993b637fd9f9106f411ea951a4bf3346e4f540 (diff) | |
download | system_core-28e84a147f7f88db0f2e24b81b1280ea22604184.zip system_core-28e84a147f7f88db0f2e24b81b1280ea22604184.tar.gz system_core-28e84a147f7f88db0f2e24b81b1280ea22604184.tar.bz2 |
Merge "Add float support to binary event log." into mnc-dev
-rw-r--r-- | include/log/log.h | 8 | ||||
-rw-r--r-- | liblog/logprint.c | 30 | ||||
-rw-r--r-- | logcat/event.logtags | 1 |
3 files changed, 36 insertions, 3 deletions
diff --git a/include/log/log.h b/include/log/log.h index ce253e2..f9299b0 100644 --- a/include/log/log.h +++ b/include/log/log.h @@ -492,6 +492,7 @@ typedef enum { EVENT_TYPE_LONG = 1, EVENT_TYPE_STRING = 2, EVENT_TYPE_LIST = 3, + EVENT_TYPE_FLOAT = 4, } AndroidEventLogType; #define sizeof_AndroidEventLogType sizeof(typeof_AndroidEventLogType) #define typeof_AndroidEventLogType unsigned char @@ -510,6 +511,13 @@ typedef enum { sizeof(longBuf)); \ } #endif +#ifndef LOG_EVENT_FLOAT +#define LOG_EVENT_FLOAT(_tag, _value) { \ + float floatBuf = _value; \ + (void) android_btWriteLog(_tag, EVENT_TYPE_FLOAT, &floatBuf, \ + sizeof(floatBuf)); \ + } +#endif #ifndef LOG_EVENT_STRING #define LOG_EVENT_STRING(_tag, _value) \ (void) __android_log_bswrite(_tag, _value); diff --git a/liblog/logprint.c b/liblog/logprint.c index 7ba4c8e..0f01542 100644 --- a/liblog/logprint.c +++ b/liblog/logprint.c @@ -26,6 +26,7 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> +#include <inttypes.h> #include <sys/param.h> #include <log/logd.h> @@ -432,7 +433,7 @@ static inline uint64_t get8LE(const uint8_t* src) low = src[0] | (src[1] << 8) | (src[2] << 16) | (src[3] << 24); high = src[4] | (src[5] << 8) | (src[6] << 16) | (src[7] << 24); - return ((long long) high << 32) | (long long) low; + return ((uint64_t) high << 32) | (uint64_t) low; } @@ -490,7 +491,7 @@ static int android_log_printBinaryEvent(const unsigned char** pEventData, case EVENT_TYPE_LONG: /* 64-bit signed long */ { - long long lval; + uint64_t lval; if (eventDataLen < 8) return -1; @@ -498,7 +499,30 @@ static int android_log_printBinaryEvent(const unsigned char** pEventData, eventData += 8; eventDataLen -= 8; - outCount = snprintf(outBuf, outBufLen, "%lld", lval); + outCount = snprintf(outBuf, outBufLen, "%" PRId64, lval); + if (outCount < outBufLen) { + outBuf += outCount; + outBufLen -= outCount; + } else { + /* halt output */ + goto no_room; + } + } + break; + case EVENT_TYPE_FLOAT: + /* float */ + { + uint32_t ival; + float fval; + + if (eventDataLen < 4) + return -1; + ival = get4LE(eventData); + fval = *(float*)&ival; + eventData += 4; + eventDataLen -= 4; + + outCount = snprintf(outBuf, outBufLen, "%f", fval); if (outCount < outBufLen) { outBuf += outCount; outBufLen -= outCount; diff --git a/logcat/event.logtags b/logcat/event.logtags index 1b5c6f4..909f8e2 100644 --- a/logcat/event.logtags +++ b/logcat/event.logtags @@ -21,6 +21,7 @@ # 2: long # 3: string # 4: list +# 5: float # # The data unit is a number taken from the following list: # 1: Number of objects |