diff options
author | Mark Salyzyn <salyzyn@google.com> | 2015-10-02 09:22:52 -0700 |
---|---|---|
committer | Steve Kondik <steve@cyngn.com> | 2015-11-01 04:29:12 -0800 |
commit | 75e80775d98d1d6e4fd3e6f3a8059a23413e031e (patch) | |
tree | ee6eff375a8b9ee19d2528429264107f81d44720 /logd/LogBufferElement.cpp | |
parent | c5a324fe084901a93215498f983703e483d9c000 (diff) | |
download | system_core-75e80775d98d1d6e4fd3e6f3a8059a23413e031e.zip system_core-75e80775d98d1d6e4fd3e6f3a8059a23413e031e.tar.gz system_core-75e80775d98d1d6e4fd3e6f3a8059a23413e031e.tar.bz2 |
logd: optimize code hotspots
Discovered that we had a few libc hotspots. Adjust code to generally
reduce or nullify the number of calls to malloc, free, strlen,
strcmp, strncmp, memcmp & strncasecmp. Total gain looks to be about
3% of logd's processing time. malloc still contributes to 3%, but all
others are now total 0.5%.
Bug: 23685592
Change-Id: Ife721121667969260cdb8b055524ae90f5911278
Diffstat (limited to 'logd/LogBufferElement.cpp')
-rw-r--r-- | logd/LogBufferElement.cpp | 27 |
1 files changed, 15 insertions, 12 deletions
diff --git a/logd/LogBufferElement.cpp b/logd/LogBufferElement.cpp index 9fb1439..150ce22 100644 --- a/logd/LogBufferElement.cpp +++ b/logd/LogBufferElement.cpp @@ -91,7 +91,8 @@ char *android::tidToName(pid_t tid) { size_t retval_len = strlen(retval); size_t name_len = strlen(name); // KISS: ToDo: Only checks prefix truncated, not suffix, or both - if ((retval_len < name_len) && !strcmp(retval, name + name_len - retval_len)) { + if ((retval_len < name_len) + && !fast<strcmp>(retval, name + name_len - retval_len)) { free(retval); retval = name; } else { @@ -123,14 +124,16 @@ size_t LogBufferElement::populateDroppedMessage(char *&buffer, commName = parent->pidToName(mPid); parent->unlock(); } - size_t len = name ? strlen(name) : 0; - if (len && commName && !strncmp(name, commName, len)) { - if (commName[len] == '\0') { - free(commName); - commName = NULL; - } else { - free(name); - name = NULL; + if (name && name[0] && commName && (name[0] == commName[0])) { + size_t len = strlen(name + 1); + if (!strncmp(name + 1, commName + 1, len)) { + if (commName[len + 1] == '\0') { + free(commName); + commName = NULL; + } else { + free(name); + name = NULL; + } } } if (name) { @@ -150,9 +153,9 @@ size_t LogBufferElement::populateDroppedMessage(char *&buffer, } } // identical to below to calculate the buffer size required - len = snprintf(NULL, 0, format_uid, mUid, name ? name : "", - commName ? commName : "", - mDropped, (mDropped > 1) ? "s" : ""); + size_t len = snprintf(NULL, 0, format_uid, mUid, name ? name : "", + commName ? commName : "", + mDropped, (mDropped > 1) ? "s" : ""); size_t hdrLen; if (mLogId == LOG_ID_EVENTS) { |