summaryrefslogtreecommitdiffstats
path: root/metrics
diff options
context:
space:
mode:
authorArne Juul <arnej@yahoo-inc.com>2018-10-06 11:56:34 +0000
committerArne Juul <arnej@yahoo-inc.com>2018-10-07 17:29:37 +0000
commit8ade6a2dddcf4e258dec8c291ddfb193ffc88b8d (patch)
tree4a1ed13fee5a084b8ce45fe2d4a7e6056333e27a /metrics
parent5312c1442e304727396fb7e4f933940ceb247ed3 (diff)
fix memory accounting
Diffstat (limited to 'metrics')
-rw-r--r--metrics/src/vespa/metrics/memoryconsumption.cpp18
-rw-r--r--metrics/src/vespa/metrics/memoryconsumption.h1
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;