Merge "Fix statsd dropping metrics data." into pi-dev
diff --git a/cmds/statsd/src/StatsLogProcessor.cpp b/cmds/statsd/src/StatsLogProcessor.cpp
index 82274a6..a35570b 100644
--- a/cmds/statsd/src/StatsLogProcessor.cpp
+++ b/cmds/statsd/src/StatsLogProcessor.cpp
@@ -360,7 +360,7 @@
         metricsManager.dropData(timestampNs);
         StatsdStats::getInstance().noteDataDropped(key);
         VLOG("StatsD had to toss out metrics for %s", key.ToString().c_str());
-    } else if (totalBytes > .9 * StatsdStats::kMaxMetricsBytesPerConfig) {
+    } else if (totalBytes > StatsdStats::kBytesPerConfigTriggerGetData) {
         // Send broadcast so that receivers can pull data.
         auto lastBroadcastTime = mLastBroadcastTimes.find(key);
         if (lastBroadcastTime != mLastBroadcastTimes.end()) {
diff --git a/cmds/statsd/src/guardrail/StatsdStats.h b/cmds/statsd/src/guardrail/StatsdStats.h
index c42514a..a4f64dd 100644
--- a/cmds/statsd/src/guardrail/StatsdStats.h
+++ b/cmds/statsd/src/guardrail/StatsdStats.h
@@ -96,9 +96,13 @@
 
     const static int kMaxLogSourceCount = 50;
 
-    // Max memory allowed for storing metrics per configuration. When this limit is approached,
-    // statsd will send a broadcast so that the client can fetch the data and clear this memory.
-    static const size_t kMaxMetricsBytesPerConfig = 128 * 1024;
+    // Max memory allowed for storing metrics per configuration. If this limit is exceeded, statsd
+    // drops the metrics data in memory.
+    static const size_t kMaxMetricsBytesPerConfig = 256 * 1024;
+
+    // Soft memory limit per configuration. Once this limit is exceeded, we begin notifying the
+    // data subscriber that it's time to call getData.
+    static const size_t kBytesPerConfigTriggerGetData = 128 * 1024;
 
     // Cap the UID map's memory usage to this. This should be fairly high since the UID information
     // is critical for understanding the metrics.