logd: report statistics memory overhead

am: 6d981af120

Change-Id: I69376a8783867a21f0cd85eea4b299f3d2c81a95
This commit is contained in:
Mark Salyzyn 2016-11-04 20:57:12 +00:00 committed by android-build-merger
commit 1970d994b6
2 changed files with 43 additions and 0 deletions

View File

@ -547,6 +547,7 @@ std::string LogStatistics::format(uid_t uid, pid_t pid,
}
spaces += spaces_total;
}
totalSize += sizeOf();
if (spaces < 0) spaces = 0;
output += android::base::StringPrintf("%*s%zu", spaces, "", totalSize);

View File

@ -42,8 +42,30 @@ class LogHashtable {
std::unordered_map<TKey, TEntry> map;
size_t bucket_size() const {
size_t count = 0;
for (size_t idx = 0; idx < map.bucket_count(); ++idx) {
size_t bucket_size = map.bucket_size(idx);
if (bucket_size == 0) bucket_size = 1;
count += bucket_size;
}
float load_factor = map.max_load_factor();
if (load_factor < 1.0) return count;
return count * load_factor;
}
static const size_t unordered_map_per_entry_overhead = sizeof(void*);
static const size_t unordered_map_bucket_overhead = sizeof(void*);
public:
// Estimate unordered_map memory usage.
size_t sizeOf() const {
return sizeof(*this) +
(map.size() * (sizeof(TEntry) + unordered_map_per_entry_overhead)) +
(bucket_size() * sizeof(size_t) + unordered_map_bucket_overhead);
}
typedef typename std::unordered_map<TKey, TEntry>::iterator iterator;
typedef typename std::unordered_map<TKey, TEntry>::const_iterator const_iterator;
@ -155,6 +177,7 @@ public:
}
return output;
}
};
namespace EntryBaseConstants {
@ -472,7 +495,26 @@ class LogStatistics {
// security tag list
tagTable_t securityTagTable;
size_t sizeOf() const {
size_t size = sizeof(*this) + pidTable.sizeOf() + tidTable.sizeOf() +
tagTable.sizeOf() + securityTagTable.sizeOf();
for(auto it : pidTable) {
const char* name = it.second.getName();
if (name) size += strlen(name) + 1;
}
for(auto it : tidTable) {
const char* name = it.second.getName();
if (name) size += strlen(name) + 1;
}
log_id_for_each(id) {
size += uidTable[id].sizeOf();
size += pidSystemTable[id].sizeOf();
}
return size;
}
public:
LogStatistics();
void enableStatistics() { enable = true; }