summaryrefslogtreecommitdiffstats
path: root/logd/LogBufferElement.cpp
diff options
context:
space:
mode:
authorMark Salyzyn <salyzyn@google.com>2015-10-02 09:22:52 -0700
committerSteve Kondik <steve@cyngn.com>2015-11-01 04:29:12 -0800
commit75e80775d98d1d6e4fd3e6f3a8059a23413e031e (patch)
treeee6eff375a8b9ee19d2528429264107f81d44720 /logd/LogBufferElement.cpp
parentc5a324fe084901a93215498f983703e483d9c000 (diff)
downloadsystem_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.cpp27
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) {