diff options
Diffstat (limited to 'metrics')
-rw-r--r-- | metrics/src/vespa/metrics/memoryconsumption.cpp | 18 | ||||
-rw-r--r-- | metrics/src/vespa/metrics/memoryconsumption.h | 1 |
2 files changed, 19 insertions, 0 deletions
diff --git a/metrics/src/vespa/metrics/memoryconsumption.cpp b/metrics/src/vespa/metrics/memoryconsumption.cpp index 7cfda8f28af..0e69defa558 100644 --- a/metrics/src/vespa/metrics/memoryconsumption.cpp +++ b/metrics/src/vespa/metrics/memoryconsumption.cpp @@ -30,6 +30,24 @@ MemoryConsumption::getStringMemoryUsage(const std::string& s, uint32_t& uniqueCo return s.capacity(); } + +uint32_t +MemoryConsumption::getStringMemoryUsage(const vespalib::string& s, uint32_t& uniqueCount) { + ++_totalStringCount; + const char* internalString = s.c_str(); + if (_seenStrings->find(internalString) != _seenStrings->end()) { + return 0; + } + ++uniqueCount; + _seenStrings->insert(internalString); + const void *p = &s; + if ((p <= internalString) && (internalString - sizeof(vespalib::string) < p)) { + // no extra space allocated outside object + return 0; + } + return s.capacity(); +} + void MemoryConsumption::addSnapShotUsage(const std::string& name, uint32_t usage) { _snapShotUsage->push_back(std::pair<std::string, uint32_t>(name, usage)); diff --git a/metrics/src/vespa/metrics/memoryconsumption.h b/metrics/src/vespa/metrics/memoryconsumption.h index 8ac724b7a43..1cbd8f1deab 100644 --- a/metrics/src/vespa/metrics/memoryconsumption.h +++ b/metrics/src/vespa/metrics/memoryconsumption.h @@ -87,6 +87,7 @@ public: /** Get memory usage of a string that is not included when doing sizeof */ uint32_t getStringMemoryUsage(const std::string& s, uint32_t& uniqueCount); + uint32_t getStringMemoryUsage(const vespalib::string& s, uint32_t& uniqueCount); void addSnapShotUsage(const std::string& name, uint32_t usage); uint32_t getTotalMemoryUsage() const; |