diff options
author | Chih-Hung Hsieh <chh@google.com> | 2014-10-13 16:30:24 -0700 |
---|---|---|
committer | Chih-Hung Hsieh <chh@google.com> | 2014-10-14 15:37:20 -0700 |
commit | 2d3150e73679193ebfba48cd0d4549ff0db95f9e (patch) | |
tree | 3171e35017834161f1a67be2e552d5dc7e7b0a50 | |
parent | e63fb8bd8086a280cae61612da965cb13e75194f (diff) | |
download | system_core-2d3150e73679193ebfba48cd0d4549ff0db95f9e.zip system_core-2d3150e73679193ebfba48cd0d4549ff0db95f9e.tar.gz system_core-2d3150e73679193ebfba48cd0d4549ff0db95f9e.tar.bz2 |
Do not inline rarely used trace function bodies.
When atrace_* functions are inlined,
the rarely used 1024-byte buffers are allocated on stack.
BUG: 17444504
Change-Id: I773512aeb70e8b79f3803c6d59cba064d2aa65b6
-rw-r--r-- | include/cutils/trace.h | 50 | ||||
-rw-r--r-- | libcutils/trace.c | 57 |
2 files changed, 68 insertions, 39 deletions
diff --git a/include/cutils/trace.h b/include/cutils/trace.h index fd9bc6a..1b0089c 100644 --- a/include/cutils/trace.h +++ b/include/cutils/trace.h @@ -85,13 +85,6 @@ __BEGIN_DECLS #ifdef HAVE_ANDROID_OS /** - * Maximum size of a message that can be logged to the trace buffer. - * Note this message includes a tag, the pid, and the string given as the name. - * Names should be kept short to get the most use of the trace buffer. - */ -#define ATRACE_MESSAGE_LENGTH 1024 - -/** * Opens the trace file for writing and reads the property for initial tags. * The atrace.tags.enableflags property sets the tags to trace. * This function should not be explicitly called, the first call to any normal @@ -183,11 +176,8 @@ static inline uint64_t atrace_is_tag_enabled(uint64_t tag) static inline void atrace_begin(uint64_t tag, const char* name) { if (CC_UNLIKELY(atrace_is_tag_enabled(tag))) { - char buf[ATRACE_MESSAGE_LENGTH]; - size_t len; - - len = snprintf(buf, ATRACE_MESSAGE_LENGTH, "B|%d|%s", getpid(), name); - write(atrace_marker_fd, buf, len); + void atrace_begin_body(const char*); + atrace_begin_body(name); } } @@ -217,12 +207,8 @@ static inline void atrace_async_begin(uint64_t tag, const char* name, int32_t cookie) { if (CC_UNLIKELY(atrace_is_tag_enabled(tag))) { - char buf[ATRACE_MESSAGE_LENGTH]; - size_t len; - - len = snprintf(buf, ATRACE_MESSAGE_LENGTH, "S|%d|%s|%" PRId32, - getpid(), name, cookie); - write(atrace_marker_fd, buf, len); + void atrace_async_begin_body(const char*, int32_t); + atrace_async_begin_body(name, cookie); } } @@ -231,20 +217,14 @@ static inline void atrace_async_begin(uint64_t tag, const char* name, * This should have a corresponding ATRACE_ASYNC_BEGIN. */ #define ATRACE_ASYNC_END(name, cookie) atrace_async_end(ATRACE_TAG, name, cookie) -static inline void atrace_async_end(uint64_t tag, const char* name, - int32_t cookie) +static inline void atrace_async_end(uint64_t tag, const char* name, int32_t cookie) { if (CC_UNLIKELY(atrace_is_tag_enabled(tag))) { - char buf[ATRACE_MESSAGE_LENGTH]; - size_t len; - - len = snprintf(buf, ATRACE_MESSAGE_LENGTH, "F|%d|%s|%" PRId32, - getpid(), name, cookie); - write(atrace_marker_fd, buf, len); + void atrace_async_end_body(const char*, int32_t); + atrace_async_end_body(name, cookie); } } - /** * Traces an integer counter value. name is used to identify the counter. * This can be used to track how a value changes over time. @@ -253,12 +233,8 @@ static inline void atrace_async_end(uint64_t tag, const char* name, static inline void atrace_int(uint64_t tag, const char* name, int32_t value) { if (CC_UNLIKELY(atrace_is_tag_enabled(tag))) { - char buf[ATRACE_MESSAGE_LENGTH]; - size_t len; - - len = snprintf(buf, ATRACE_MESSAGE_LENGTH, "C|%d|%s|%" PRId32, - getpid(), name, value); - write(atrace_marker_fd, buf, len); + void atrace_int_body(const char*, int32_t); + atrace_int_body(name, value); } } @@ -270,12 +246,8 @@ static inline void atrace_int(uint64_t tag, const char* name, int32_t value) static inline void atrace_int64(uint64_t tag, const char* name, int64_t value) { if (CC_UNLIKELY(atrace_is_tag_enabled(tag))) { - char buf[ATRACE_MESSAGE_LENGTH]; - size_t len; - - len = snprintf(buf, ATRACE_MESSAGE_LENGTH, "C|%d|%s|%" PRId64, - getpid(), name, value); - write(atrace_marker_fd, buf, len); + void atrace_int64_body(const char*, int64_t); + atrace_int64_body(name, value); } } diff --git a/libcutils/trace.c b/libcutils/trace.c index f57aac2..4396625 100644 --- a/libcutils/trace.c +++ b/libcutils/trace.c @@ -30,6 +30,13 @@ #define LOG_TAG "cutils-trace" #include <log/log.h> +/** + * Maximum size of a message that can be logged to the trace buffer. + * Note this message includes a tag, the pid, and the string given as the name. + * Names should be kept short to get the most use of the trace buffer. + */ +#define ATRACE_MESSAGE_LENGTH 1024 + volatile int32_t atrace_is_ready = 0; int atrace_marker_fd = -1; uint64_t atrace_enabled_tags = ATRACE_TAG_NOT_READY; @@ -183,3 +190,53 @@ void atrace_setup() { pthread_once(&atrace_once_control, atrace_init_once); } + +void atrace_begin_body(const char* name) +{ + char buf[ATRACE_MESSAGE_LENGTH]; + size_t len; + + len = snprintf(buf, ATRACE_MESSAGE_LENGTH, "B|%d|%s", getpid(), name); + write(atrace_marker_fd, buf, len); +} + + +void atrace_async_begin_body(const char* name, int32_t cookie) +{ + char buf[ATRACE_MESSAGE_LENGTH]; + size_t len; + + len = snprintf(buf, ATRACE_MESSAGE_LENGTH, "S|%d|%s|%" PRId32, + getpid(), name, cookie); + write(atrace_marker_fd, buf, len); +} + +void atrace_async_end_body(const char* name, int32_t cookie) +{ + char buf[ATRACE_MESSAGE_LENGTH]; + size_t len; + + len = snprintf(buf, ATRACE_MESSAGE_LENGTH, "F|%d|%s|%" PRId32, + getpid(), name, cookie); + write(atrace_marker_fd, buf, len); +} + +void atrace_int_body(const char* name, int32_t value) +{ + char buf[ATRACE_MESSAGE_LENGTH]; + size_t len; + + len = snprintf(buf, ATRACE_MESSAGE_LENGTH, "C|%d|%s|%" PRId32, + getpid(), name, value); + write(atrace_marker_fd, buf, len); +} + +void atrace_int64_body(const char* name, int64_t value) +{ + char buf[ATRACE_MESSAGE_LENGTH]; + size_t len; + + len = snprintf(buf, ATRACE_MESSAGE_LENGTH, "C|%d|%s|%" PRId64, + getpid(), name, value); + write(atrace_marker_fd, buf, len); +} |