Add metric computation skeleton to statsd.

This cl is to let statsd understand statsd_config, and compute metrics
 defined in the config.

+ StatsLogProcessor is given a StatsdConfig (hard coded right now).
  We construct a MetricProducer for each of the metric, and the metrics
  share Condition and LogEntryMatchers

+ Added the CountMetricProducer type for CountMetric.

We can now count times of SCREEN_ON events given a config.

TODO: 1) conditions are not implemented.
      2) slicings are not implemented in CountMetric
      3) move the interaction to dropbox to a separate thread
      4) decide how the in memory metrics would be used by anomaly detection

Test: manual test.

      $ adb shell /system/bin/statsd

      $ cat config_file.dat | adb shell cmd stats config

Change-Id: I38f4059c0dc5a827c338131d4a6fa7d4cbe865db
diff --git a/cmds/statsd/tests/LogEntryMatcher_test.cpp b/cmds/statsd/tests/LogEntryMatcher_test.cpp
index 81d93b6..473704a 100644
--- a/cmds/statsd/tests/LogEntryMatcher_test.cpp
+++ b/cmds/statsd/tests/LogEntryMatcher_test.cpp
@@ -14,13 +14,13 @@
 
 #define LOG_TAG "statsd_test"
 
-#include "frameworks/base/cmds/statsd/src/statsd_config.pb.h"
+#include <gtest/gtest.h>
+#include <log/log_event_list.h>
+#include <log/log_read.h>
+#include <log/logprint.h>
 #include "../src/matchers/LogEntryMatcherManager.h"
 #include "../src/parse_util.h"
-#include <log/logprint.h>
-#include <log/log_read.h>
-#include <log/log_event_list.h>
-#include <gtest/gtest.h>
+#include "frameworks/base/cmds/statsd/src/statsd_config.pb.h"
 
 #include <stdio.h>
 
@@ -38,12 +38,10 @@
     auto simpleMatcher = matcher.mutable_simple_log_entry_matcher();
     simpleMatcher->add_tag(kTagIdWakelock);
 
-    unordered_map<int, long> intMap;
-    unordered_map<int, string> strMap;
-    unordered_map<int, float> floatMap;
-    unordered_map<int, bool> boolMap;
+    LogEventWrapper wrapper;
+    wrapper.tagId = kTagIdWakelock;
 
-    EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap, floatMap, boolMap));
+    EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, wrapper));
 }
 
 TEST(LogEntryMatcherTest, TestBoolMatcher) {
@@ -54,24 +52,18 @@
     auto keyValue = simpleMatcher->add_key_value_matcher();
     keyValue->mutable_key_matcher()->set_key(kKeyIdState);
 
-
-    unordered_map<int, long> intMap;
-    unordered_map<int, string> strMap;
-    unordered_map<int, float> floatMap;
-    unordered_map<int, bool> boolMap;
+    LogEventWrapper wrapper;
+    wrapper.tagId = kTagIdWakelock;
 
     keyValue->set_eq_bool(true);
-    boolMap[kKeyIdState] = true;
-    EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap, floatMap,
-        boolMap));
+    wrapper.boolMap[kKeyIdState] = true;
+    EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, wrapper));
 
     keyValue->set_eq_bool(false);
-    EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap,
-        floatMap, boolMap));
+    EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, wrapper));
 
-    boolMap[kKeyIdState] = false;
-    EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap, floatMap,
-        boolMap));
+    wrapper.boolMap[kTagIdWakelock] = false;
+    EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, wrapper));
 }
 
 TEST(LogEntryMatcherTest, TestStringMatcher) {
@@ -83,14 +75,12 @@
     keyValue->mutable_key_matcher()->set_key(kKeyIdState);
     keyValue->set_eq_string("wakelock_name");
 
-    unordered_map<int, long> intMap;
-    unordered_map<int, string> strMap;
-    unordered_map<int, float> floatMap;
-    unordered_map<int, bool> boolMap;
+    LogEventWrapper wrapper;
+    wrapper.tagId = kTagIdWakelock;
 
-    strMap[kKeyIdState] = "wakelock_name";
+    wrapper.strMap[kKeyIdState] = "wakelock_name";
 
-    EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap, floatMap, boolMap));
+    EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, wrapper));
 }
 
 TEST(LogEntryMatcherTest, TestIntComparisonMatcher) {
@@ -101,32 +91,24 @@
     auto keyValue = simpleMatcher->add_key_value_matcher();
     keyValue->mutable_key_matcher()->set_key(kKeyIdState);
 
-    unordered_map<int, long> intMap;
-    unordered_map<int, string> strMap;
-    unordered_map<int, float> floatMap;
-    unordered_map<int, bool> boolMap;
+    LogEventWrapper wrapper;
+    wrapper.tagId = kTagIdWakelock;
 
     keyValue->set_lt_int(10);
-    intMap[kKeyIdState] = 11;
-    EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap,
-        floatMap, boolMap));
-    intMap[kKeyIdState] = 10;
-    EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap,
-        floatMap, boolMap));
-    intMap[kKeyIdState] = 9;
-    EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap,
-        floatMap, boolMap));
+    wrapper.intMap[kKeyIdState] = 11;
+    EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, wrapper));
+    wrapper.intMap[kKeyIdState] = 10;
+    EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, wrapper));
+    wrapper.intMap[kKeyIdState] = 9;
+    EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, wrapper));
 
     keyValue->set_gt_int(10);
-    intMap[kKeyIdState] = 11;
-    EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap,
-        floatMap, boolMap));
-    intMap[kKeyIdState] = 10;
-    EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap,
-        floatMap, boolMap));
-    intMap[kKeyIdState] = 9;
-    EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap,
-        floatMap, boolMap));
+    wrapper.intMap[kKeyIdState] = 11;
+    EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, wrapper));
+    wrapper.intMap[kKeyIdState] = 10;
+    EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, wrapper));
+    wrapper.intMap[kKeyIdState] = 9;
+    EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, wrapper));
 }
 
 TEST(LogEntryMatcherTest, TestIntWithEqualityComparisonMatcher) {
@@ -137,32 +119,24 @@
     auto keyValue = simpleMatcher->add_key_value_matcher();
     keyValue->mutable_key_matcher()->set_key(kKeyIdState);
 
-    unordered_map<int, long> intMap;
-    unordered_map<int, string> strMap;
-    unordered_map<int, float> floatMap;
-    unordered_map<int, bool> boolMap;
+    LogEventWrapper wrapper;
+    wrapper.tagId = kTagIdWakelock;
 
     keyValue->set_lte_int(10);
-    intMap[kKeyIdState] = 11;
-    EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap,
-        floatMap, boolMap));
-    intMap[kKeyIdState] = 10;
-    EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap,
-        floatMap, boolMap));
-    intMap[kKeyIdState] = 9;
-    EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap,
-        floatMap, boolMap));
+    wrapper.intMap[kKeyIdState] = 11;
+    EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, wrapper));
+    wrapper.intMap[kKeyIdState] = 10;
+    EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, wrapper));
+    wrapper.intMap[kKeyIdState] = 9;
+    EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, wrapper));
 
     keyValue->set_gte_int(10);
-    intMap[kKeyIdState] = 11;
-    EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap,
-        floatMap, boolMap));
-    intMap[kKeyIdState] = 10;
-    EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap,
-        floatMap, boolMap));
-    intMap[kKeyIdState] = 9;
-    EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap,
-        floatMap, boolMap));
+    wrapper.intMap[kKeyIdState] = 11;
+    EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, wrapper));
+    wrapper.intMap[kKeyIdState] = 10;
+    EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, wrapper));
+    wrapper.intMap[kKeyIdState] = 9;
+    EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, wrapper));
 }
 
 TEST(LogEntryMatcherTest, TestFloatComparisonMatcher) {
@@ -173,26 +147,20 @@
     auto keyValue = simpleMatcher->add_key_value_matcher();
     keyValue->mutable_key_matcher()->set_key(kKeyIdState);
 
-    unordered_map<int, long> intMap;
-    unordered_map<int, string> strMap;
-    unordered_map<int, float> floatMap;
-    unordered_map<int, bool> boolMap;
+    LogEventWrapper wrapper;
+    wrapper.tagId = kTagIdWakelock;
 
     keyValue->set_lt_float(10.0);
-    floatMap[kKeyIdState] = 10.1;
-    EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap,
-        floatMap, boolMap));
-    floatMap[kKeyIdState] = 9.9;
-    EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap,
-        floatMap, boolMap));
+    wrapper.floatMap[kKeyIdState] = 10.1;
+    EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, wrapper));
+    wrapper.floatMap[kKeyIdState] = 9.9;
+    EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, wrapper));
 
     keyValue->set_gt_float(10.0);
-    floatMap[kKeyIdState] = 10.1;
-    EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap,
-        floatMap, boolMap));
-    floatMap[kKeyIdState] = 9.9;
-    EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap,
-        floatMap, boolMap));
+    wrapper.floatMap[kKeyIdState] = 10.1;
+    EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, wrapper));
+    wrapper.floatMap[kKeyIdState] = 9.9;
+    EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, wrapper));
 }
 
 // Helper for the composite matchers.
@@ -209,23 +177,23 @@
     auto combination = matcher.mutable_combination();
     combination->set_operation(LogicalOperation::AND);
 
-    addSimpleMatcher(combination->add_matcher()->mutable_simple_log_entry_matcher(), kTagIdWakelock, kKeyIdState, 3);
-    addSimpleMatcher(combination->add_matcher()->mutable_simple_log_entry_matcher(), kTagIdWakelock, kKeyIdPackageVersion, 4);
+    addSimpleMatcher(combination->add_matcher()->mutable_simple_log_entry_matcher(),
+                     kTagIdWakelock, kKeyIdState, 3);
+    addSimpleMatcher(combination->add_matcher()->mutable_simple_log_entry_matcher(),
+                     kTagIdWakelock, kKeyIdPackageVersion, 4);
 
-    unordered_map<int, long> intMap;
-    unordered_map<int, string> strMap;
-    unordered_map<int, float> floatMap;
-    unordered_map<int, bool> boolMap;
+    LogEventWrapper wrapper;
+    wrapper.tagId = kTagIdWakelock;
 
-    intMap[kKeyIdPackageVersion] = 4;
-    EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap, floatMap, boolMap));
-    intMap.clear();
-    intMap[kKeyIdState] = 3;
-    EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap, floatMap, boolMap));
-    intMap.clear();
-    intMap[kKeyIdState] = 3;
-    intMap[kKeyIdPackageVersion] = 4;
-    EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap, floatMap, boolMap));
+    wrapper.intMap[1003] = 4;
+    EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, wrapper));
+    wrapper.intMap.clear();
+    wrapper.intMap[1] = 3;
+    EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, wrapper));
+    wrapper.intMap.clear();
+    wrapper.intMap[1] = 3;
+    wrapper.intMap[1003] = 4;
+    EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, wrapper));
 }
 
 TEST(LogEntryMatcherTest, TestOrMatcher) {
@@ -239,26 +207,20 @@
     addSimpleMatcher(combination->add_matcher()->mutable_simple_log_entry_matcher(),
         kTagIdWakelock, kKeyIdPackageVersion, 4);
 
-    unordered_map<int, long> intMap;
-    unordered_map<int, string> strMap;
-    unordered_map<int, float> floatMap;
-    unordered_map<int, bool> boolMap;
+    LogEventWrapper wrapper;
+    wrapper.tagId = kTagIdWakelock;
 
     // Don't set any key-value pairs.
-    EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap, floatMap,
-        boolMap));
-    intMap[kKeyIdPackageVersion] = 4;
-    EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap, floatMap,
-        boolMap));
-    intMap.clear();
-    intMap[kKeyIdState] = 3;
-    EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap, floatMap,
-        boolMap));
-    intMap.clear();
-    intMap[kKeyIdState] = 3;
-    intMap[kKeyIdPackageVersion] = 4;
-    EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap, floatMap,
-        boolMap));
+    EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, wrapper));
+    wrapper.intMap[1003] = 4;
+    EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, wrapper));
+    wrapper.intMap.clear();
+    wrapper.intMap[1] = 3;
+    EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, wrapper));
+    wrapper.intMap.clear();
+    wrapper.intMap[1] = 3;
+    wrapper.intMap[1003] = 4;
+    EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, wrapper));
 }
 
 TEST(LogEntryMatcherTest, TestNotMatcher) {
@@ -271,15 +233,12 @@
     addSimpleMatcher(combination->add_matcher()->mutable_simple_log_entry_matcher(),
         kTagIdWakelock, kKeyIdState, 3);
 
-    unordered_map<int, long> intMap;
-    unordered_map<int, string> strMap;
-    unordered_map<int, float> floatMap;
-    unordered_map<int, bool> boolMap;
+    LogEventWrapper wrapper;
+    wrapper.tagId = kTagIdWakelock;
 
     // Don't set any key-value pairs.
-    intMap[kKeyIdState] = 3;
-    EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap, floatMap,
-        boolMap));
+    wrapper.intMap[kKeyIdState] = 3;
+    EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, wrapper));
 }
 
 TEST(LogEntryMatcherTest, TestNANDMatcher) {
@@ -293,20 +252,15 @@
     addSimpleMatcher(combination->add_matcher()->mutable_simple_log_entry_matcher(),
         kTagIdWakelock, kKeyIdPackageVersion, 4);
 
-    unordered_map<int, long> intMap;
-    unordered_map<int, string> strMap;
-    unordered_map<int, float> floatMap;
-    unordered_map<int, bool> boolMap;
+    LogEventWrapper wrapper;
+    wrapper.tagId = kTagIdWakelock;
 
     // Don't set any key-value pairs.
-    EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap, floatMap,
-        boolMap));
-    intMap[kKeyIdState] = 3;
-    EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap, floatMap,
-        boolMap));
-    intMap[kKeyIdPackageVersion] = 4;
-    EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap, floatMap,
-        boolMap));
+    EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, wrapper));
+    wrapper.intMap[kKeyIdState] = 3;
+    EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, wrapper));
+    wrapper.intMap[kKeyIdPackageVersion] = 4;
+    EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, wrapper));
 }
 
 TEST(LogEntryMatcherTest, TestNORMatcher) {
@@ -320,20 +274,15 @@
     addSimpleMatcher(combination->add_matcher()->mutable_simple_log_entry_matcher(),
         kTagIdWakelock, kKeyIdPackageVersion, 4);
 
-    unordered_map<int, long> intMap;
-    unordered_map<int, string> strMap;
-    unordered_map<int, float> floatMap;
-    unordered_map<int, bool> boolMap;
+    LogEventWrapper wrapper;
+    wrapper.tagId = kTagIdWakelock;
 
     // Don't set any key-value pairs.
-    EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap, floatMap,
-        boolMap));
-    intMap[kKeyIdState] = 3;
-    EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap, floatMap,
-        boolMap));
-    intMap[kKeyIdPackageVersion] = 4;
-    EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap, floatMap,
-        boolMap));
+    EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, wrapper));
+    wrapper.intMap[kKeyIdState] = 3;
+    EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, wrapper));
+    wrapper.intMap[kKeyIdPackageVersion] = 4;
+    EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, wrapper));
 }
 
 // Tests that a NOT on top of AND is the same as NAND
@@ -350,22 +299,17 @@
     addSimpleMatcher(combination->add_matcher()->mutable_simple_log_entry_matcher(),
         kTagIdWakelock, kKeyIdPackageVersion, 4);
 
-    unordered_map<int, long> intMap;
-    unordered_map<int, string> strMap;
-    unordered_map<int, float> floatMap;
-    unordered_map<int, bool> boolMap;
+    LogEventWrapper wrapper;
+    wrapper.tagId = kTagIdWakelock;
 
     // Don't set any key-value pairs.
-    EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap, floatMap,
-        boolMap));
-    intMap[kKeyIdState] = 3;
-    EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap, floatMap,
-        boolMap));
-    intMap[kKeyIdPackageVersion] = 4;
-    EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, kTagIdWakelock, intMap, strMap, floatMap,
-        boolMap));
+    EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, wrapper));
+    wrapper.intMap[kKeyIdState] = 3;
+    EXPECT_TRUE(LogEntryMatcherManager::matches(matcher, wrapper));
+    wrapper.intMap[kKeyIdPackageVersion] = 4;
+    EXPECT_FALSE(LogEntryMatcherManager::matches(matcher, wrapper));
 }
 
 #else
-            GTEST_LOG_(INFO) << "This test does nothing.\n";
+GTEST_LOG_(INFO) << "This test does nothing.\n";
 #endif