Merge changes Icd2e9bc0,Ibe241c0b
* changes: logd: report last prune memory overhead logd: report statistics memory overhead
This commit is contained in:
commit
b5f062bde4
2 changed files with 49 additions and 0 deletions
|
|
@ -547,6 +547,7 @@ std::string LogStatistics::format(uid_t uid, pid_t pid,
|
||||||
}
|
}
|
||||||
spaces += spaces_total;
|
spaces += spaces_total;
|
||||||
}
|
}
|
||||||
|
totalSize += sizeOf();
|
||||||
if (spaces < 0) spaces = 0;
|
if (spaces < 0) spaces = 0;
|
||||||
output += android::base::StringPrintf("%*s%zu", spaces, "", totalSize);
|
output += android::base::StringPrintf("%*s%zu", spaces, "", totalSize);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -42,8 +42,32 @@ class LogHashtable {
|
||||||
|
|
||||||
std::unordered_map<TKey, TEntry> map;
|
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:
|
public:
|
||||||
|
|
||||||
|
size_t size() const { return map.size(); }
|
||||||
|
|
||||||
|
// Estimate unordered_map memory usage.
|
||||||
|
size_t sizeOf() const {
|
||||||
|
return sizeof(*this) +
|
||||||
|
(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>::iterator iterator;
|
||||||
typedef typename std::unordered_map<TKey, TEntry>::const_iterator const_iterator;
|
typedef typename std::unordered_map<TKey, TEntry>::const_iterator const_iterator;
|
||||||
|
|
||||||
|
|
@ -155,6 +179,7 @@ public:
|
||||||
}
|
}
|
||||||
return output;
|
return output;
|
||||||
}
|
}
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
namespace EntryBaseConstants {
|
namespace EntryBaseConstants {
|
||||||
|
|
@ -472,7 +497,30 @@ class LogStatistics {
|
||||||
// security tag list
|
// security tag list
|
||||||
tagTable_t securityTagTable;
|
tagTable_t securityTagTable;
|
||||||
|
|
||||||
|
size_t sizeOf() const {
|
||||||
|
size_t size = sizeof(*this) + pidTable.sizeOf() + tidTable.sizeOf() +
|
||||||
|
tagTable.sizeOf() + securityTagTable.sizeOf() +
|
||||||
|
(pidTable.size() * sizeof(pidTable_t::iterator)) +
|
||||||
|
(tagTable.size() * sizeof(tagTable_t::iterator));
|
||||||
|
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 += uidTable[id].size() * sizeof(uidTable_t::iterator);
|
||||||
|
size += pidSystemTable[id].sizeOf();
|
||||||
|
size += pidSystemTable[id].size() * sizeof(pidSystemTable_t::iterator);
|
||||||
|
}
|
||||||
|
return size;
|
||||||
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
LogStatistics();
|
LogStatistics();
|
||||||
|
|
||||||
void enableStatistics() { enable = true; }
|
void enableStatistics() { enable = true; }
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue