diff --git a/liblog/include/log/log_time.h b/liblog/include/log/log_time.h index 9ece0b328..3764faf75 100644 --- a/liblog/include/log/log_time.h +++ b/liblog/include/log/log_time.h @@ -22,6 +22,8 @@ /* struct log_time is a wire-format variant of struct timespec */ #define NS_PER_SEC 1000000000ULL +#define US_PER_SEC 1000000ULL +#define MS_PER_SEC 1000ULL #ifndef __struct_log_time_defined #define __struct_log_time_defined @@ -148,6 +150,14 @@ struct log_time { uint64_t nsec() const { return static_cast(tv_sec) * NS_PER_SEC + tv_nsec; } + uint64_t usec() const { + return static_cast(tv_sec) * US_PER_SEC + + tv_nsec / (NS_PER_SEC / US_PER_SEC); + } + uint64_t msec() const { + return static_cast(tv_sec) * MS_PER_SEC + + tv_nsec / (NS_PER_SEC / MS_PER_SEC); + } #ifdef _SYSTEM_CORE_INCLUDE_PRIVATE_ANDROID_LOGGER_H_ static const char default_format[]; diff --git a/logd/LogBuffer.cpp b/logd/LogBuffer.cpp index 4aa2c9fa0..a67ccb5a5 100644 --- a/logd/LogBuffer.cpp +++ b/logd/LogBuffer.cpp @@ -210,8 +210,7 @@ int LogBuffer::log(log_id_t log_id, log_time realtime, uid_t uid, pid_t pid, if (!__android_log_is_loggable(prio, tag, ANDROID_LOG_VERBOSE)) { // Log traffic received to total pthread_mutex_lock(&mLogElementsLock); - stats.add(elem); - stats.subtract(elem); + stats.addTotal(elem); pthread_mutex_unlock(&mLogElementsLock); delete elem; return -EACCES; @@ -322,8 +321,7 @@ int LogBuffer::log(log_id_t log_id, log_time realtime, uid_t uid, pid_t pid, pthread_mutex_unlock(&mLogElementsLock); return len; } - stats.add(currentLast); - stats.subtract(currentLast); + stats.addTotal(currentLast); delete currentLast; swab = total; event->payload.data = htole32(swab); @@ -339,8 +337,7 @@ int LogBuffer::log(log_id_t log_id, log_time realtime, uid_t uid, pid_t pid, } } if (count) { - stats.add(currentLast); - stats.subtract(currentLast); + stats.addTotal(currentLast); currentLast->setDropped(count); } droppedElements[log_id] = currentLast; diff --git a/logd/LogStatistics.cpp b/logd/LogStatistics.cpp index d3167ad3a..b41aca5bf 100644 --- a/logd/LogStatistics.cpp +++ b/logd/LogStatistics.cpp @@ -15,6 +15,7 @@ */ #include +#include #include #include #include @@ -70,20 +71,30 @@ char* pidToName(pid_t pid) { } } +void LogStatistics::addTotal(LogBufferElement* element) { + if (element->getDropped()) return; + + log_id_t log_id = element->getLogId(); + unsigned short size = element->getMsgLen(); + mSizesTotal[log_id] += size; + SizesTotal += size; + ++mElementsTotal[log_id]; +} + void LogStatistics::add(LogBufferElement* element) { log_id_t log_id = element->getLogId(); unsigned short size = element->getMsgLen(); mSizes[log_id] += size; ++mElements[log_id]; + // When caller adding a chatty entry, they will have already + // called add() and subtract() for each entry as they are + // evaluated and trimmed, thus recording size and number of + // elements, but we must recognize the manufactured dropped + // entry as not contributing to the lifetime totals. if (element->getDropped()) { ++mDroppedElements[log_id]; } else { - // When caller adding a chatty entry, they will have already - // called add() and subtract() for each entry as they are - // evaluated and trimmed, thus recording size and number of - // elements, but we must recognize the manufactured dropped - // entry as not contributing to the lifetime totals. mSizesTotal[log_id] += size; SizesTotal += size; ++mElementsTotal[log_id]; diff --git a/logd/LogStatistics.h b/logd/LogStatistics.h index 066b7de42..e171e4ac5 100644 --- a/logd/LogStatistics.h +++ b/logd/LogStatistics.h @@ -576,6 +576,7 @@ class LogStatistics { enable = true; } + void addTotal(LogBufferElement* entry); void add(LogBufferElement* entry); void subtract(LogBufferElement* entry); // entry->setDropped(1) must follow this call