)]}'
{
  "log": [
    {
      "commit": "330af58f2b8582b855085655fae553cdfaf44e6c",
      "tree": "b93137833b438812155cac1ae1958cf963f7d8d3",
      "parents": [
        "73d6050edf397d38aa262f2eff19551a4458ca73"
      ],
      "author": {
        "name": "Yangster-mac",
        "email": "yanglu@google.com",
        "time": "Thu Feb 08 15:24:38 2018 -0800"
      },
      "committer": {
        "name": "Yangster-mac",
        "email": "yanglu@google.com",
        "time": "Tue Feb 13 23:30:39 2018 -0800"
      },
      "message": "Use elapsed realtime instead of times based on wall clock, which can jump around and go backwards.\n\nTest: statsd unit test passed\n\nChange-Id: Ib541df99231e171b3be2a24f75632693e36da90e\n"
    },
    {
      "commit": "66fe06183f3074554c524f6e2ee47ce6fd727941",
      "tree": "163443ae9589f76159fa24430ac33050ef056f8a",
      "parents": [
        "e8cf6110aed233019a41fddd4fdca0cc93bb8433"
      ],
      "author": {
        "name": "Bookatz",
        "email": "bookatz@google.com",
        "time": "Wed Feb 07 18:51:48 2018 -0800"
      },
      "committer": {
        "name": "Bookatz",
        "email": "bookatz@google.com",
        "time": "Mon Feb 12 12:28:47 2018 -0800"
      },
      "message": "Statsd Anomaly Detection fixes\n\nMinor fixes and notes regarding the setting of refractory periods and\nanomaly alarms.\nAlso changes the anomaly alarms from inexact to exact.\n\nTest: run cts-dev -m CtsStatsdHostTestCases -t android.cts.statsd.alert.AnomalyDetectionTests\nChange-Id: Ia4f4c84dd647ebbbad4bab66164cd7709f8628e8\n"
    },
    {
      "commit": "8a8d16ceea1e5b7a2f8c41e17b5d993035f50f5d",
      "tree": "f3c3ba9f29eebe1c22d79cd49516306093925e21",
      "parents": [
        "4f07fa4e748c4f259a7ae9c06f89e44a9c69acff"
      ],
      "author": {
        "name": "Yao Chen",
        "email": "yaochen@google.com",
        "time": "Thu Feb 08 14:50:40 2018 -0800"
      },
      "committer": {
        "name": "Yao Chen",
        "email": "yaochen@google.com",
        "time": "Mon Feb 12 10:38:45 2018 -0800"
      },
      "message": "Statsd CPU optimization.\n\nThe key change is to revamp how we parse/store/match a log event, especially how we match repeated\nfield and attribution nodes, and how we construct dimensions and compare them.\n\n+ We use a integer to encode the field of a log element. And also encode the FieldMatcher into an\ninteger and a bit mask. The log matching becomes 2 integer operations.\n\n+ Dimension is stored as encoded field and value pair. Checking if 2 dimensions are equal is then\n  becoming checking if the underlying integers are equal. The integers are stored contiguously\n  in memory, so it\u0027s much faster than previous tree structure.\n\nStart review from FieldValue.h\n\nTest: statsd_test + new unit tests\n\nBug: 72659059\n\nChange-Id: Iec8daeacdd3f39ab297c10ab9cd7b710a9c42e86\n"
    },
    {
      "commit": "484524a246ffe453f8cd89b698a279c23b0bde1f",
      "tree": "a7ea4f1f6a91693e7fd6552a0103aa70f4ec680c",
      "parents": [
        "a5ffafbfda3b5f6dd7f883045b6b0da0556b934c"
      ],
      "author": {
        "name": "Tej Singh",
        "email": "singhtejinder@google.com",
        "time": "Thu Feb 01 15:10:05 2018 -0800"
      },
      "committer": {
        "name": "Tej Singh",
        "email": "singhtejinder@google.com",
        "time": "Thu Feb 08 13:11:29 2018 -0800"
      },
      "message": "Turn off debug logging in statsd\n\nSets DEBUG to false everywhere and replaces all ALOGD with VLOG so they\ndo not print with DEBUG false. Leaves all ALOGI, ALOGW and ALOGE as is.\n\nTest: ran all CTS tests and checked \"adb logcat -s statsd\" to make sure\nit wasn\u0027t spammy\n\nChange-Id: Iaa8eb3a0a63723ffe40f94f2815f94df877fd432\n"
    },
    {
      "commit": "9ea3c99a95e2b5040e552dd02a3403c7c5b3ff40",
      "tree": "896c3fda18636363c2dcf00334ea8eecfcf333fb",
      "parents": [
        "6a00aac93ada980a08223f61e3021e5c0fcea2b8",
        "661f791a2580515eee5882ab9498aef94a0d33a5"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Feb 08 18:50:00 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Feb 08 18:50:00 2018 +0000"
      },
      "message": "Merge \"Statsd notifies listener with pendingintent.\""
    },
    {
      "commit": "661f791a2580515eee5882ab9498aef94a0d33a5",
      "tree": "8d18096fee7aca07d65dc1360decab2e8fddca56",
      "parents": [
        "171951d8e0bc09dc6882b3c97c17dc7ebb7dc636"
      ],
      "author": {
        "name": "David Chen",
        "email": "dwchen@google.com",
        "time": "Mon Jan 22 17:46:24 2018 -0800"
      },
      "committer": {
        "name": "David Chen",
        "email": "dwchen@google.com",
        "time": "Wed Feb 07 16:16:23 2018 -0800"
      },
      "message": "Statsd notifies listener with pendingintent.\n\nPreviously, statsd would inform interested listeners that it\u0027s time\nto collect data via a protected broadcast. However, the preferred\nsolution is to pass a PendingIntent via a separate setter. Whenever\nstatsd wants the listener to call getData, StatsCompanionService\nwill trigger the pending intent.\n\nTest: Tested in marlin-eng that functionality works as expected with\ndogfood app.\nBug: 72562867\nChange-Id: Ibcfcd5072a1a78947f8a7cbcd0bc429b54351da3\n"
    },
    {
      "commit": "80f9112aecf08845ef0b2b132d721b7ce850970f",
      "tree": "da65af99c55ee8ba03c5844c1d9256f691c515db",
      "parents": [
        "ecc00786d0398283be01981844822bab7154ebb3"
      ],
      "author": {
        "name": "Chenjie Yu",
        "email": "cjyu@google.com",
        "time": "Wed Jan 31 20:24:50 2018 -0800"
      },
      "committer": {
        "name": "Chenjie Yu",
        "email": "cjyu@google.com",
        "time": "Wed Feb 07 22:16:50 2018 +0000"
      },
      "message": "Pullers merge isolated process with host\n\nTest: unit test\nChange-Id: Idcb4d19e1f5182554b503c5a35fbde4da146835c\nFix: 72230210\n"
    },
    {
      "commit": "fa22d65f146c94873ba98b768b08c643424c4477",
      "tree": "ce7917ed552d5c095154f89e516eb5909c9be363",
      "parents": [
        "043863ac36e18b3a26c66199edee2cc403d92834"
      ],
      "author": {
        "name": "Chenjie Yu",
        "email": "cjyu@google.com",
        "time": "Mon Feb 05 14:37:48 2018 -0800"
      },
      "committer": {
        "name": "Chenjie Yu",
        "email": "cjyu@google.com",
        "time": "Tue Feb 06 11:11:46 2018 -0800"
      },
      "message": "puller cache clearing\n\n+ add adb command to manually clear puller cache\n+ try to clear puller cache every 10s\n\nTest: manual test\nChange-Id: I8005cacd189de1880fcaeb030efbe21e6d3c0244\n"
    },
    {
      "commit": "b223c4ecae9a101ef820ad71bf89461b5447a34b",
      "tree": "90952beb3cfb33bf18784152828296d14ba1c217",
      "parents": [
        "4a740846223aa58af065e2256fb0caa0ce6f9c53"
      ],
      "author": {
        "name": "Bookatz",
        "email": "bookatz@google.com",
        "time": "Thu Feb 01 15:35:04 2018 -0800"
      },
      "committer": {
        "name": "Bookatz",
        "email": "bookatz@google.com",
        "time": "Fri Feb 02 14:41:10 2018 -0800"
      },
      "message": "Statsd - adb cmd for AppHook; long compare support\n\n1. Create an adb command for statsd to let the adb user write AppHook to\nthe StatsLog buffer.\nThis can be used in the CTS tests (instead of relying on screen state\nchanges, etc. for conditioning), and for local testing.\n\n2. Fixes the fact that AppHook loggers can spoof uids (they can put\nwhatever uid they want and statsd doesn\u0027t validate it - now it will).\n\n3. Allow FieldValueMatcher to compare longs (not just ints).\n\nFix: 72266788\nFix: 72836157\nFix: 72872130\nFix: 72829733\n\nTest: manually did the adb command.\n\nTest: run cts-dev -m CtsStatsdHostTestCases -t android.cts.statsd.alert.AnomalyDetectionTests\n\nTest: locally modified\nandroid.cts.statsd.alert.BroadcastSubscriberTests#testBroadcastSubscriber\nto have the app attempt both valid and invalid AppHook writes.\n\nChange-Id: I68931a71805bcfa6fe56e7a0a0d3f07290cb78d1\n"
    },
    {
      "commit": "e72252b6886096eef308164b830fe84dd3c6c01d",
      "tree": "632fa7d5562b42b9ee57f32d4839c66b5325956c",
      "parents": [
        "731f9fa6b3ab28c48d3f8a29b2a16d9ca85c44e8"
      ],
      "author": {
        "name": "Chenjie Yu",
        "email": "cjyu@google.com",
        "time": "Thu Feb 01 13:19:35 2018 -0800"
      },
      "committer": {
        "name": "Chenjie Yu",
        "email": "cjyu@google.com",
        "time": "Thu Feb 01 13:22:27 2018 -0800"
      },
      "message": "Add command to clear puller cache\n\nTest: manual test\nChange-Id: Id1fa48b5a6f2200d22f4a746763f65d0c8d65f72\n"
    },
    {
      "commit": "884c8c130fde0d02ada1316f7c27f0f55e7e48b9",
      "tree": "8d6e118e7cc90ed46f40f461e1190a59dfaf7066",
      "parents": [
        "f8fc7235d46b605c845552c23912b0f7a9009013"
      ],
      "author": {
        "name": "Yao Chen",
        "email": "yaochen@google.com",
        "time": "Fri Jan 26 10:36:25 2018 -0800"
      },
      "committer": {
        "name": "Yao Chen",
        "email": "yaochen@google.com",
        "time": "Fri Jan 26 12:03:58 2018 -0800"
      },
      "message": "Add more statsd\u0027s debugging info to dumpsys.\n\n+ Bugreport will use the non-verbose mode\n+ Reuse the log_msg object in LogReader\n+ Add logd errors to StatsdStats\n\nBug: 72383073\n\nTest: manual + statsd_test\n\nChange-Id: Id5a8b103074d034f5ece3c9831c740d44a5df9cd\n"
    },
    {
      "commit": "73a331f52490f648d0347cd8856c1196d418a600",
      "tree": "8bf4bbc2edb5f4f815cf5c1174eab8f1a2f29f1f",
      "parents": [
        "6834ec8e54978d076fcf9c414d52f6cb173c24fc",
        "c697797d43b6932fc7cca1c8d7d850c3fb4d1452"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Jan 25 06:23:36 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jan 25 06:23:36 2018 +0000"
      },
      "message": "Merge \"Statsd broadcast subscriber\""
    },
    {
      "commit": "b2b547454bb7bf7258e40929f7fe8721c858be79",
      "tree": "f9f98c29f1acdd8fbdc1bfacb50f6be3f61f8e4b",
      "parents": [
        "e891dbaa4fe9180dc044ec0139e6422254ff5597",
        "e5f82927ae60fdff909e030434354a6ba164f333"
      ],
      "author": {
        "name": "Howard Ro",
        "email": "yro@google.com",
        "time": "Wed Jan 24 23:00:14 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jan 24 23:00:14 2018 +0000"
      },
      "message": "Merge \"Fix adb shell cmd config remove command when no (uid, id) pair is specified.\""
    },
    {
      "commit": "c697797d43b6932fc7cca1c8d7d850c3fb4d1452",
      "tree": "43037d273145230adad3e720cd798d729180a236",
      "parents": [
        "96c73a3c40316e5aa36ea59d40e901d2dd505021"
      ],
      "author": {
        "name": "Bookatz",
        "email": "bookatz@google.com",
        "time": "Tue Jan 16 16:55:05 2018 -0800"
      },
      "committer": {
        "name": "Bookatz",
        "email": "bookatz@google.com",
        "time": "Wed Jan 24 13:08:19 2018 -0800"
      },
      "message": "Statsd broadcast subscriber\n\nAllows a uid that uploads a statsd config to additionally\nregister a BroadcastSubscriber with statsd. If statsd\ndetects an anomaly (according to the config\u0027s Alert),\nstatsd can inform a BroadcastSubscriber provided in the config.\nThe config uses a subscriberId (just an int) to identify the\nBroadcastSubscriber. It then uses StatsManager.setBroadcastSubscriber\nto associate that subscriberId with a given PendingIntent.\nThen, when the anomaly is detected, statsd sends a broadcast\nusing that PendingIntent, alerting whoever was specified by\nthe config/setBroadcastSubscriber.\n\nBug: 70356901\nTest: cts-tradefed run cts-dev -m CtsStatsdHostTestCases -t android.cts.statsd.alert.BroadcastSubscriberTests\nChange-Id: I4d9ea9a6c8a85e61fadfd99c1513c55abbadd5e9\n"
    },
    {
      "commit": "bbd056ac4ac206bea36e6e8b40bf40c4a2d44f25",
      "tree": "6848813c5efe289ecaea32854b6a429c6086ea43",
      "parents": [
        "4953824b89bfbdd5a85a2a7182c0903d9283e1d1"
      ],
      "author": {
        "name": "Yangster-mac",
        "email": "yanglu@google.com",
        "time": "Mon Jan 22 13:37:02 2018 -0800"
      },
      "committer": {
        "name": "Yang Lu",
        "email": "yanglu@google.com",
        "time": "Tue Jan 23 16:41:52 2018 +0000"
      },
      "message": "Fix the crash when parsing empty config.\n\nTest: statsd test passed.\nChange-Id: Ice4bcb7368ba416a9ffe6e9c89129b307302980e\n"
    },
    {
      "commit": "e5f82927ae60fdff909e030434354a6ba164f333",
      "tree": "29501b07133947d5578bc9415107b0bed324ac38",
      "parents": [
        "f74e56af8c1ea49a87a73cdbc70a6b6ec540e22f"
      ],
      "author": {
        "name": "yro",
        "email": "yro@google.com",
        "time": "Mon Jan 22 18:37:27 2018 -0800"
      },
      "committer": {
        "name": "yro",
        "email": "yro@google.com",
        "time": "Mon Jan 22 18:41:49 2018 -0800"
      },
      "message": "Fix adb shell cmd config remove command when no (uid, id) pair is\nspecified.\n\n- Previous logic was omitting commands when only \u0027adb shell cmd config\nremove\u0027 was provided without any uid, id argument. This change fixes it.\n- Recent disk guardrail change flips the convention of file name in\nstatsd directories to begin with timestamps. So delete with prefix was\nchanged to delete with suffix.\n\nBug: 72265185\nTest: manual testing, statsd_test\nChange-Id: Ia727fbc7acf0d9268b9f4952fa59975f4a9134cb\n"
    },
    {
      "commit": "f5acabe9466af3571a4318852cdb26856e5ba100",
      "tree": "26287da433b356fd66c3b37575820f0f3cf4250c",
      "parents": [
        "af7b167f751f99ab583c0aa24d4ef9b8dfda4b6e"
      ],
      "author": {
        "name": "Yao Chen",
        "email": "yaochen@google.com",
        "time": "Wed Jan 17 14:10:34 2018 -0800"
      },
      "committer": {
        "name": "Yao Chen",
        "email": "yaochen@google.com",
        "time": "Wed Jan 17 18:38:09 2018 -0800"
      },
      "message": "Add StatsdStats in statsd\u0027s dumpsys\n\nBug: 72123656\nTest: manual + statsd_test\n\nChange-Id: I8ad9bb3abfa94ee099aa5fc3f28ad9b6fb7340f7\n"
    },
    {
      "commit": "d40053eb8bcb19c7c3b080a36714566bb4e4a748",
      "tree": "5df9cf4070508f1526ea1dbfcf19251a7af41dda",
      "parents": [
        "d6808dc0c00ba45fd589449647f792daf9fa8126"
      ],
      "author": {
        "name": "Yangster-mac",
        "email": "yanglu@google.com",
        "time": "Tue Jan 09 16:29:22 2018 -0800"
      },
      "committer": {
        "name": "Yangster-mac",
        "email": "yanglu@google.com",
        "time": "Tue Jan 09 21:45:46 2018 -0800"
      },
      "message": "Map isolated uid to host uid when processing log event in statsD.\n\nTest: added test case for isolated uid in Attribution e2e test.\nChange-Id: I63d16ebee3e611b1ef0c910e5154cf27766cb330\n"
    },
    {
      "commit": "94e197cceb2ba7df13ff8de04f60bfeec64015d9",
      "tree": "2f73f292c6f73304e39b6127b5eeec4166f34cd2",
      "parents": [
        "c77bb380ae281d0100b9e8c73f5d71822af6977b"
      ],
      "author": {
        "name": "Yangster-mac",
        "email": "yanglu@google.com",
        "time": "Tue Jan 02 16:03:03 2018 -0800"
      },
      "committer": {
        "name": "Yangster-mac",
        "email": "yanglu@google.com",
        "time": "Wed Jan 03 15:34:00 2018 -0800"
      },
      "message": "1/ Change all \"name\" to id in statsD.\n2/ Handle Subscription for alert.\n3/ Support no_report_metric\n\nBug: 69522276\nTest: all statsd unit tests passed.\nChange-Id: I851b235f2d149b8602b0cad632d5bf541962f40a\n"
    },
    {
      "commit": "2087716f2bdca90c7c3034d556ac12911bd8018e",
      "tree": "448895d8ce6f40644aa184b15fe024385d26d3c1",
      "parents": [
        "28bc987f61400b2862174149486e9f032c386a5f"
      ],
      "author": {
        "name": "Yangster-mac",
        "email": "yanglu@google.com",
        "time": "Fri Dec 22 17:19:39 2017 -0800"
      },
      "committer": {
        "name": "Yangster-mac",
        "email": "yanglu@google.com",
        "time": "Mon Jan 01 10:01:36 2018 -0800"
      },
      "message": "1/ Support nested message and repeated fields in statsd.\n2/ Filter gauge fields by FieldMatcher.\n3/ Wire up wakelock attribution chain.\n4/ e2e test: wakelock duration metric with aggregated predicate dimensions.\n5/ e2e test: count metric with multiple metric condition links for 2 predicates and 1 non-sliced predicate.\n\nTest: statsd unit test passed.\n\nChange-Id: I89db31cb068184a54e0a892fad710966d3127bc9\n"
    },
    {
      "commit": "7d8aa4ded5af280930418045edfb4450b455d2c8",
      "tree": "8164df63d1e648fa0f3759eadcd020ea4e79ee3b",
      "parents": [
        "cb37da8b13a8f70942d253ac56a9ad3ae3cbf7ba"
      ],
      "author": {
        "name": "David Chen",
        "email": "dwchen@google.com",
        "time": "Wed Dec 27 13:37:01 2017 -0800"
      },
      "committer": {
        "name": "David Chen",
        "email": "dwchen@google.com",
        "time": "Wed Dec 27 13:37:01 2017 -0800"
      },
      "message": "Small fix to addconfig in statsd.\n\nAddConfiguration now returns false if the incoming byte array can\u0027t\neven be parsed into the expected proto format. Unfortunately, we\ncan\u0027t fully evaluate if this configuration is valid. Still, this\ngives the caller a chance to know that the parameters it sent can\u0027t\neven be parsed.\n\nTest: Tested that statsd still builds.\nChange-Id: I7ba7c64adc4bc77549d5e9133e212a4870645786\n"
    },
    {
      "commit": "d10f7b1c7bdb1c66aa04148945cae9733ee4cadf",
      "tree": "a914badb372ba8663bddf2c6ea833819901c4e40",
      "parents": [
        "247791f9ceaed13e639587aa4d046078252e2c7a"
      ],
      "author": {
        "name": "Yao Chen",
        "email": "yaochen@google.com",
        "time": "Mon Dec 18 12:53:50 2017 -0800"
      },
      "committer": {
        "name": "Yao Chen",
        "email": "yaochen@google.com",
        "time": "Wed Dec 20 18:45:43 2017 -0800"
      },
      "message": "Add log source filtering in statsd to filter out spams.\n\n+ Add log source whitelist in StatsdConfig\n+ Some changes in UidMap API. Listener needs to be wp instead of sp.\n+ Update dogfood app config to have log source\n+ Increase the stats service thread pool size to 10 (9+1).\n\nTODO: add unit tests(b/70805664). This unit test takes some time to write.\n\nTest: statsd_test \u0026 manual\n\nChange-Id: I129b1cc13db5114db7417580962bd7cc4438519d\n"
    },
    {
      "commit": "2794da220fa853c109905586a87202eff361c175",
      "tree": "93e647c1c6d9b8eb1fd09a65b98a5b35cdaf2010",
      "parents": [
        "ad7cd2b9ae23c02fbb98046b2145dc5687c3ebbf"
      ],
      "author": {
        "name": "Yao Chen",
        "email": "yaochen@google.com",
        "time": "Wed Dec 13 16:01:55 2017 -0800"
      },
      "committer": {
        "name": "Yao Chen",
        "email": "yaochen@google.com",
        "time": "Wed Dec 13 16:14:28 2017 -0800"
      },
      "message": "Remove dead code in statsd\n\nRemove dead code and shared lib.\nAnd fix a bug in ValueMetricProducer\n\nTest: statsd_test \u0026 manual\nChange-Id: Ie76bfc02e14ae6a0fa9f8933751fd06397de9411\n"
    },
    {
      "commit": "03faf093301847f0ac293ce8d6fcb0bce657a841",
      "tree": "f6f49d07042a2a9f8aec5352fdec463628378db2",
      "parents": [
        "54edf5df21094b5cc62fd3014e31f8ab0bee1074"
      ],
      "author": {
        "name": "yro",
        "email": "yro@google.com",
        "time": "Tue Dec 12 00:17:50 2017 -0800"
      },
      "committer": {
        "name": "yro",
        "email": "yro@google.com",
        "time": "Tue Dec 12 00:17:50 2017 -0800"
      },
      "message": "Migrate disk directory from /data/system/ to /data/misc/\n\nTest: statsd, statsd_test\nChange-Id: I6d2fe97afd79fb9b36d180d5e6e6a7a166a228b7\n"
    },
    {
      "commit": "1d0136d322899cd9db4416c22873ee7ed01d843a",
      "tree": "95f260a1efbe1d74b5e2289da8710cddb210f62a",
      "parents": [
        "3834e91e1341af979c17def675369071da7ad882"
      ],
      "author": {
        "name": "Bookatz",
        "email": "bookatz@google.com",
        "time": "Fri Dec 01 11:13:32 2017 -0800"
      },
      "committer": {
        "name": "Bookatz",
        "email": "bookatz@google.com",
        "time": "Thu Dec 07 17:59:30 2017 -0800"
      },
      "message": "Anomaly detection statsdstats\n\nAdds statsdstats for tracking the number of anomaly alarms registered.\n\nTest: adb shell data/nativetest64/statsd_test/statsd_test\nBug: 67978682\nChange-Id: I4aa0539a13c60ccb3b7fd2a4f41c4ad867f3a4ea\n"
    },
    {
      "commit": "d5b9266f013f917dc314bb2151164a5a752fa548",
      "tree": "d6302929d4b524f749384ce51d5cd173e65f083c",
      "parents": [
        "c823b876c1f0afdf1e153f2cdbf3cbaef7b7db7c",
        "3accca05ddcad9d0b1b313eae49f273e39121d3c"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Dec 05 20:12:17 2017 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Dec 05 20:12:17 2017 +0000"
      },
      "message": "Merge \"Add major version code to platform.\""
    },
    {
      "commit": "3accca05ddcad9d0b1b313eae49f273e39121d3c",
      "tree": "7aca880abfecad17d7e3e1ad82e7891e480078a3",
      "parents": [
        "dc3a8c7f84bf3673e184ce4acc592a1df9402746"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Sep 20 09:32:11 2013 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Dec 04 13:02:10 2017 -0800"
      },
      "message": "Add major version code to platform.\n\nIt turns the version code into almost a 64-bit integer, with the\nnew major part being the upper 32 bits.\n\nThe only tricky part about this is the backup manager, since it\nstored 32-bit version codes in its backup data sets.  This is dealt\nwith by, when the major version code is not 0, writing MIN_INT as\nthe version code and following that by the full long version code,\nwhich we can detect when reading.  Note that this makes backup sets\ncontaining apps with major version codes incompatible with older\nversions of the platform.\n\nBug: 64459786\nTest: Added in Change-Id: Iab8a682b62103babd6c16a56b8dc1e97d7078658\nChange-Id: Ibfffe235bbfcf358b3741abd3f7197fdb063d3f3\n"
    },
    {
      "commit": "2e8f3807379f5d5d151ad2cb434d8a7aca910238",
      "tree": "0b67079827a7368229fbb39915907839b73189f1",
      "parents": [
        "d796c9062e9201ef8cbdb59abd982cd16f9b8ae1"
      ],
      "author": {
        "name": "David Chen",
        "email": "dwchen@google.com",
        "time": "Wed Nov 22 10:56:48 2017 -0800"
      },
      "committer": {
        "name": "David Chen",
        "email": "dwchen@google.com",
        "time": "Mon Dec 04 10:23:28 2017 -0800"
      },
      "message": "Adds new API to retrieve statsd metadata.\n\nThis API can be used by clients to gather stats about statsd, eg.\nmemory usage, number of metrics/matchers, etc. This data can be used\nto debug if devices are not providing expected metrics. The metadata\nwill be for all configurations, but will not contain the actual\ncollected metrics since those might have privacy implications.\n\nTest: Tests that statsd and Android still build.\nBug: 69522276\nChange-Id: I8e0fedc142f5deed7be6e6309f9444e67d8369ce\n"
    },
    {
      "commit": "aa39bc739aff77b23d1eb214cf05f65a3fb7ccf5",
      "tree": "93ff371d49e4ace0d3220291fc61d3175520ef66",
      "parents": [
        "61e1386b3ac290a42c6f9fd3048303db89fbe18f"
      ],
      "author": {
        "name": "Yao Chen",
        "email": "yaochen@google.com",
        "time": "Fri Dec 01 11:16:50 2017 -0800"
      },
      "committer": {
        "name": "Yao Chen",
        "email": "yaochen@google.com",
        "time": "Fri Dec 01 11:16:50 2017 -0800"
      },
      "message": "Return correct results in StatsManager APIs\n\nTest: manual\nChange-Id: I12f392beb082a8919b85a4f617a616c8344c1e3a\n"
    },
    {
      "commit": "4f0bb193bd2c8ca88d46a8ce4aa27cb7debb34c9",
      "tree": "c24addcba1874241a258c170f9f046209d844c7d",
      "parents": [
        "5235e10b70019af8248391f6c3cc7036c1e3658a",
        "b236c86b81a1e58fce6fe576dd336764138899d0"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Nov 30 23:11:49 2017 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Nov 30 23:11:49 2017 +0000"
      },
      "message": "Merge \"allow dump_report command to output proto binary in addition to text\""
    },
    {
      "commit": "b236c86b81a1e58fce6fe576dd336764138899d0",
      "tree": "c6477cbf7a04e238f88aedf6eb2f65f5ba2e9e87",
      "parents": [
        "409743395c13451e8324675775c8e0b03167771d"
      ],
      "author": {
        "name": "Chenjie Yu",
        "email": "cjyu@google.com",
        "time": "Tue Nov 28 22:20:44 2017 -0800"
      },
      "committer": {
        "name": "Chenjie Yu",
        "email": "cjyu@google.com",
        "time": "Thu Nov 30 09:59:04 2017 -0800"
      },
      "message": "allow dump_report command to output proto binary\nin addition to text\n\nTest: cts test\nChange-Id: I439a371d54a57116cf2ad85899850ac4783101e2\n"
    },
    {
      "commit": "c136f45aee2c193e954c107f35109ccc8b1146b3",
      "tree": "5a0d04c466e980fab634ba0eb2c55b200a7f8936",
      "parents": [
        "22b94c3f0f8d3937efd15aa787d3084fd8e01c9e"
      ],
      "author": {
        "name": "David Chen",
        "email": "dwchen@google.com",
        "time": "Mon Nov 27 11:52:26 2017 -0800"
      },
      "committer": {
        "name": "David Chen",
        "email": "dwchen@google.com",
        "time": "Wed Nov 29 14:55:15 2017 -0800"
      },
      "message": "Adds guardrail for memory usage for statsd uid map.\n\nChecks if current memory usage of uid map is above a configured limit\nand if so, we start deleting snapshots. If there are no more\nsnapshots, we begin deleting two of the deltas. Also records stats\nin the guardrail StatsdStats. Also fixes an edge case where a config\nis added after the snapshots are added. We request a snapshot of all\ninstalled uid\u0027s at that moment. Finally, adds the uid map memory size\nwhen determining if we should send a broadcast to trigger collection.\n\nTest: Added unit-tests and check they pass on marlin.\nChange-Id: Id5d86378bd1efe12a06b409164c777c0c6f4e3ab\n"
    },
    {
      "commit": "74fed9729fdabff8d2c5a3da89eac26b5aff21d4",
      "tree": "bd7b0bdb948bceadab3c8664f8792350e13a6c5f",
      "parents": [
        "6f45a394c55e7b2cfe58e52da3a2254e70d71e54"
      ],
      "author": {
        "name": "yro",
        "email": "yro@google.com",
        "time": "Mon Nov 27 14:42:42 2017 -0800"
      },
      "committer": {
        "name": "yro",
        "email": "yro@google.com",
        "time": "Tue Nov 28 22:58:24 2017 -0800"
      },
      "message": "Update adb command to remove all configs from statsd\n\nBefore this change we were only clearing configs from disk.\nThis change will allow clearing from memory as well. Also,\nthis change fixes a bug where the iterator moves to the next\nelement before removing the key from mConfigReceivers\n\nTest: statsd, statsd_test\n\nChange-Id: I9f5e0aced9b89bae7b19ae6d8490c076557fbb08\n"
    },
    {
      "commit": "3e585ecb513bf8294cc36a4d8d6da97b9726ab22",
      "tree": "01517a5213f421a592e013d41606dfdbd2bb24e0",
      "parents": [
        "aafee0d4e69be06be53e3b3c6ca478e628985b89",
        "69f1baf7dd3d6e595abdae000adf0f197558d0ea"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Nov 28 06:58:54 2017 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Nov 28 06:58:54 2017 +0000"
      },
      "message": "Merge \"Some fixes in StatsdStats, and add some unit tests\""
    },
    {
      "commit": "69f1baf7dd3d6e595abdae000adf0f197558d0ea",
      "tree": "7e5bf73441517148786c10d8a2f6312ba69d3ea3",
      "parents": [
        "c8862caf4f2deebe7e81f8a291233fa1035ecdd4"
      ],
      "author": {
        "name": "Yao Chen",
        "email": "yaochen@google.com",
        "time": "Mon Nov 27 17:25:36 2017 -0800"
      },
      "committer": {
        "name": "Yao Chen",
        "email": "yaochen@google.com",
        "time": "Mon Nov 27 20:45:16 2017 -0800"
      },
      "message": "Some fixes in StatsdStats, and add some unit tests\n\n+ Add timestamp for when metric data is reported.\n\nTest: statsd_test\n\nChange-Id: Ief5ec5172feed4ec74b7422b77cf69ec8361ef2f\n"
    },
    {
      "commit": "cc5adef2d0c5f96a225fd69517fd1eecb557f46d",
      "tree": "d2e3099200fb40ba1ff3b75c68d47f380a76a221",
      "parents": [
        "d12e276f6ae35a1e889c6d4de97688903c49001b"
      ],
      "author": {
        "name": "Bookatz",
        "email": "bookatz@google.com",
        "time": "Tue Nov 21 14:36:23 2017 -0800"
      },
      "committer": {
        "name": "Bookatz",
        "email": "bookatz@google.com",
        "time": "Mon Nov 27 15:35:40 2017 -0800"
      },
      "message": "Statsd anomaly detection - fixes\n\nFixes a few items in AnomalyTracker, especially to do with what happens\nwhen an anomaly alarm fires.\n\nTest: unit tests still pass\nChange-Id: Ia89bd617442e952e587336b890c3ca67430b5e21\n"
    },
    {
      "commit": "b356151e63140085cb96fa16804ee18b3862a4fc",
      "tree": "ecb892f399742cc0d7190b7700379b1a120bcb1e",
      "parents": [
        "16fd2e9a9a0a064491196d02957c7e94eaa870a7"
      ],
      "author": {
        "name": "Yao Chen",
        "email": "yaochen@google.com",
        "time": "Tue Nov 21 18:07:17 2017 -0800"
      },
      "committer": {
        "name": "Yao Chen",
        "email": "yaochen@google.com",
        "time": "Mon Nov 27 10:52:54 2017 -0800"
      },
      "message": "Add StatsdStats and guardrail.\n\n+ StatsdStats is the global class that tracks the stats about statsd.\n\n+ Added guardrail for classes that have a map which could potentially grow\n  unboundedly with the number of logs.\n\nTODO: add unit tests \u0026 CTS for StatsdStats, and guardrail\n      add stats for pulled atoms.\n\nTest: statsd_test\n\nChange-Id: I0ea562de4dd3f6162f7923a9c193420b482c1d51\n"
    },
    {
      "commit": "947fbce521d9e8377df03e3c1c31884ed5577f32",
      "tree": "cc8bda1b030cf36f30ac1a6a9078291c73d2db16",
      "parents": [
        "74b1513fe69cbf641e2dd84bc37194db80c39480"
      ],
      "author": {
        "name": "yro",
        "email": "yro@google.com",
        "time": "Wed Nov 15 22:50:23 2017 -0800"
      },
      "committer": {
        "name": "yro",
        "email": "yro@google.com",
        "time": "Wed Nov 22 18:39:23 2017 -0800"
      },
      "message": "Captures metrics on disk when devices reboot and shutdown. Specifically,\n\n1. Create intent receiver in StatsCompanionService to listen to shutdown\nevents.\n2. Create StatsWriter class to handle disk writes and deleting files.\n3. Update StatsLogProcessor, ConfigManager, and StatsService to handle\nfiles on disk using StatsWriter.\n4. Add a wrapper for ConfigMetricsReport.\n\nStill TODO is to be able to add a guardrail to prevent accumulating\nexcessive amount files on disk, which will be followed up by another\nchange.\n\nTest: statsd, statsd_test\nChange-Id: Ia0b3af315af545daa8b0078b3700c600aa7c285f\n"
    },
    {
      "commit": "7c334a129e93e405a72e8299a1cd928af079d14f",
      "tree": "654c6e4115c465fa69667a64e4628c9b2769ea28",
      "parents": [
        "916c83d2271d6d536e3ca2ea2b57892d9a15470c"
      ],
      "author": {
        "name": "Yangster",
        "email": "yanglu@google.com",
        "time": "Wed Nov 22 14:24:24 2017 -0800"
      },
      "committer": {
        "name": "Yangster",
        "email": "yanglu@google.com",
        "time": "Wed Nov 22 14:28:00 2017 -0800"
      },
      "message": "Make member function as const whenever possible.\n\nTest: unit tests passed.\nChange-Id: I751cabf305a4b5aa2095853cc951837da0df4c78\n"
    },
    {
      "commit": "d215a23179c90eb9f953704fa3ee9c5e9d6dc1df",
      "tree": "76c847b7788125f4d990317ade0c860e4ca1ed52",
      "parents": [
        "acabfe919883bc22c21c89f92a13fb6364b23e69",
        "8d9989bb376f3937d9c8fef07c9cc65ef78cbcae"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Nov 22 00:01:12 2017 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Nov 22 00:01:12 2017 +0000"
      },
      "message": "Merge \"The first step towards adding a guardrail.\""
    },
    {
      "commit": "e2cd6d509b17894b95d14523ae3e7c4c7a9a74e3",
      "tree": "2b7ad7cfd0e1f17634e62cea253cc013572fb4ee",
      "parents": [
        "809565b7690ee6d5a504f04c5730d07841a54443"
      ],
      "author": {
        "name": "Yangster-mac",
        "email": "yanglu@google.com",
        "time": "Thu Nov 09 20:38:30 2017 -0800"
      },
      "committer": {
        "name": "Yangster-mac",
        "email": "yanglu@google.com",
        "time": "Mon Nov 20 15:37:24 2017 -0800"
      },
      "message": "1/ Duration anomaly tracker with alarm.\n2/ Init anomaly from config based on the public language.\n3/ Unit tests for anomaly detection in count/gauge producer.\n4/ Revisit the duration tracker logic.\n\nTest: unit test passed.\nChange-Id: I2423c0e0f05b1e37626954de9e749303423963f2\n"
    },
    {
      "commit": "29f69e8f0442f78dba468a15e290fe94729263a5",
      "tree": "34551761c4019377408c1a7964fabf92c4a3dc6a",
      "parents": [
        "28306600e6769ce708897d2a2c6b852228e2a9de"
      ],
      "author": {
        "name": "yro",
        "email": "yro@google.com",
        "time": "Sun Nov 19 14:56:37 2017 -0800"
      },
      "committer": {
        "name": "yro",
        "email": "yro@google.com",
        "time": "Mon Nov 20 11:13:19 2017 -0800"
      },
      "message": "Remove IStatsCallback aidl from master\n\nTest: statsd, statsd_test\n\nChange-Id: Idd0fb945b62f3a139a0db07f1014a3c4a4e2f5f8\n"
    },
    {
      "commit": "8d9989bb376f3937d9c8fef07c9cc65ef78cbcae",
      "tree": "68e318840a296207746f8e2d5c43ebf04d76fa01",
      "parents": [
        "ae6a83a1cd729376fda3a849714b529f9666f4cb"
      ],
      "author": {
        "name": "Yao Chen",
        "email": "yaochen@google.com",
        "time": "Sat Nov 18 18:54:50 2017 -0800"
      },
      "committer": {
        "name": "Yao Chen",
        "email": "yaochen@google.com",
        "time": "Sat Nov 18 19:26:07 2017 -0800"
      },
      "message": "The first step towards adding a guardrail.\n\nAdded a malloc debug cmd to find memory leak and where\nthe most heap allocations are with backtrace.\n\nMore info: malloc_debug/README.md\n\nThe util class is borrowed from audio server.\n\nUsage:\n\nadb shell stop\nadb shell setprop libc.debug.malloc.program statsd\nadb shell setprop libc.debug.malloc.options backtrace\nadb shell start\nadb shell cmd stats meminfo\n\nAlso,\n\nadb shell dumpsys meminfo [statsd_pid]\n\nalso gives you the overall summary of the memory usage.\n\nTest: manual\n\nChange-Id: I4eb4167466a748ea0c3d9fd39e45d9900bc00fc2\n"
    },
    {
      "commit": "4d889e635d1def2a0475c509ef6f471d9371fcf0",
      "tree": "7144659ef2b33fd3df1059907bd2bfd0a9f815f4",
      "parents": [
        "b3bd84d71dec39ed8af73724ad8504fe9e5d0cfb"
      ],
      "author": {
        "name": "yro",
        "email": "yro@google.com",
        "time": "Fri Nov 17 15:44:48 2017 -0800"
      },
      "committer": {
        "name": "yro",
        "email": "yro@google.com",
        "time": "Fri Nov 17 17:36:07 2017 -0800"
      },
      "message": "Resolve segfault when running send-broadcast command while\nstatscompanion service is not connected\n\nTest: statsd, statsd_test\n\nChange-Id: Ie98de1884f8d852c31c14db146d3da44cfc5aa8b\n"
    },
    {
      "commit": "fe7a60e9ae193e3b7abe75412381be079f4ae390",
      "tree": "04e5e9dd8a8d2f6d63f1c1cd245f88106643b228",
      "parents": [
        "3b50381a137e34b97760b5956e010ae843cbae49",
        "1d7b0cd6b54e3b3ec8efdffd47b40cdd54c4e8d7"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Sat Nov 18 00:48:34 2017 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sat Nov 18 00:48:34 2017 +0000"
      },
      "message": "Merge \"Support StatsD sending broadcasts.\""
    },
    {
      "commit": "aedbfdfa4812ee16e24c6e7e07d97684b91f046a",
      "tree": "4af2194399493dabce24afab74a9007b29e1742e",
      "parents": [
        "24c992479799c8330f6b837d504bac7970310947",
        "3fca5ba3a7cb4a5090b0c9cd6c4710836afd9c3e"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Nov 17 23:06:50 2017 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Nov 17 23:06:50 2017 +0000"
      },
      "message": "Merge \"Fix incorrect adb shell cmd help command for pull-source\""
    },
    {
      "commit": "1d7b0cd6b54e3b3ec8efdffd47b40cdd54c4e8d7",
      "tree": "8bb111077bb65a183ae0ce0740c42e380981b4f6",
      "parents": [
        "24c992479799c8330f6b837d504bac7970310947"
      ],
      "author": {
        "name": "David Chen",
        "email": "dwchen@google.com",
        "time": "Wed Nov 15 14:20:04 2017 -0800"
      },
      "committer": {
        "name": "David Chen",
        "email": "dwchen@google.com",
        "time": "Fri Nov 17 14:57:50 2017 -0800"
      },
      "message": "Support StatsD sending broadcasts.\n\nStatsD will send a broadcast when we\u0027re 90% of the way to our\nallocated memory limit for the configuration. If the memory usage\ngoes over the limit, we just lose all the data for this config.\n\nAlso modifies the adb shell commands to facilitate debugging of the\nbroadcasts.\n\nTest: Manually tested on marlin-eng with custom gmscore code.\n\nChange-Id: I517a15bd4c959aa221802f84a51f13141a725102\n"
    },
    {
      "commit": "3fca5ba3a7cb4a5090b0c9cd6c4710836afd9c3e",
      "tree": "1e1fd136596a83e0e6d1118762629110fd1a7ac0",
      "parents": [
        "87c58f95e9485e24660f645216ac7d8b924741e7"
      ],
      "author": {
        "name": "yro",
        "email": "yro@google.com",
        "time": "Fri Nov 17 13:22:52 2017 -0800"
      },
      "committer": {
        "name": "yro",
        "email": "yro@google.com",
        "time": "Fri Nov 17 13:22:52 2017 -0800"
      },
      "message": "Fix incorrect adb shell cmd help command for pull-source\n\nTest: statsd should pass, but it\u0027s not required as it\u0027s just an update\nin help instruction.\n\nChange-Id: I36f4e4794ae8066abdeaac98db5e679a3bcf0a06\n"
    },
    {
      "commit": "13378dd01acefebfb872d0cdff123b98253ee43d",
      "tree": "f522cca6866e7a2b3eae96b83148efef668b6fef",
      "parents": [
        "3674b32218dc3bd38a30be2737b9f62234c90852",
        "7ee94150ab5ad435d8dd4e9715a5547e16863292"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Nov 17 20:14:01 2017 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Nov 17 20:14:01 2017 +0000"
      },
      "message": "Merge \"fix the permission check crash in statsd.\""
    },
    {
      "commit": "7ee94150ab5ad435d8dd4e9715a5547e16863292",
      "tree": "0ab3052ab3e95d823ec5c76db1a460b8f76fd8cf",
      "parents": [
        "902cb0b68bdd889063d90de52b24f2aea8990ae2"
      ],
      "author": {
        "name": "Yao Chen",
        "email": "yaochen@google.com",
        "time": "Fri Nov 17 09:44:40 2017 -0800"
      },
      "committer": {
        "name": "Yao Chen",
        "email": "yaochen@google.com",
        "time": "Fri Nov 17 10:20:30 2017 -0800"
      },
      "message": "fix the permission check crash in statsd.\n\nAnd change the fake config uid to be 1000, so we can dump it from the test app.\n\nTest: manual\nChange-Id: I99b4cd28b351add8cf3e315e1dccf8cf511a0be8\n"
    },
    {
      "commit": "87d983cf6f609cf3467d05d92bba30329953fbdb",
      "tree": "4ba4e72413ae7e66c680864c304bf9ed87475cbb",
      "parents": [
        "fb9ec66ef025fed04b12c90a0c279a8b0296cfb8"
      ],
      "author": {
        "name": "yro",
        "email": "yro@google.com",
        "time": "Tue Nov 14 21:31:43 2017 -0800"
      },
      "committer": {
        "name": "yro",
        "email": "yro@google.com",
        "time": "Thu Nov 16 16:25:34 2017 -0800"
      },
      "message": "Write statsd configuration to disk and add cmd to clear it\n\nTest: statsd, statsd_test\nChange-Id: Iba37a7f295256d24969185bdde6cbf28f9b89a55\n"
    },
    {
      "commit": "0feae94babf0518ac28b7c529b4e16762d48e6de",
      "tree": "e262d1057ceb7b7477430c21fbd3e84b0c8d6c74",
      "parents": [
        "1610206b04c16bccd0847b7af1faa2ece523850e"
      ],
      "author": {
        "name": "yro",
        "email": "yro@google.com",
        "time": "Wed Nov 15 14:38:48 2017 -0800"
      },
      "committer": {
        "name": "yro",
        "email": "yro@google.com",
        "time": "Wed Nov 15 14:39:22 2017 -0800"
      },
      "message": "Fix AOSP copyright years in statsd\n\nTest: no test needed\n\nChange-Id: I230b7d51eb00dafb16913d038475c3ac14b44096\n"
    },
    {
      "commit": "adaf8b344e312853530e276ceff05783133ecf17",
      "tree": "e650b5b1f29ba71f5eedbf16d57e4dad809fd1e6",
      "parents": [
        "2dd2cbcb12a21adccd3c349590a01e7ed009f679"
      ],
      "author": {
        "name": "David Chen",
        "email": "dwchen@google.com",
        "time": "Fri Nov 03 15:42:08 2017 -0700"
      },
      "committer": {
        "name": "David Chen",
        "email": "dwchen@google.com",
        "time": "Mon Nov 13 19:37:12 2017 -0800"
      },
      "message": "Adds client API for interacting with statsd.\n\nThis API will primarily be used by GmsCore to send updated configs.\nAlso, sending a config will implicitly notify the StatsD that this\nclient wants to know when it should request data for this config.\n\nWe send a broadcast so that all interested subscribers can know if\ndata needs to be pulled.\n\nTest: Manually tested that sending broadcast works via new adb\ncommand added in StatsService.\n\nChange-Id: I23cdd1df706036e14b32c3d01af30c3d4af819fa\n"
    },
    {
      "commit": "5305e1ddc22bfe9ad941cb2550987aaba8de234c",
      "tree": "6327d37eec07224d85b1e91f67dd2cfc582c7a92",
      "parents": [
        "36e94d071c5c590d70a552dd4daed1d39a0e83f9"
      ],
      "author": {
        "name": "Chenjie Yu",
        "email": "cjyu@google.com",
        "time": "Tue Oct 31 13:49:36 2017 -0700"
      },
      "committer": {
        "name": "Chenjie Yu",
        "email": "cjyu@google.com",
        "time": "Thu Nov 02 14:34:05 2017 -0700"
      },
      "message": "pull resource power manager stats into statsd\n\nTest: tested on device and check output\nChange-Id: I65932a5527d6099e12546b6928a24f3616e54e16\n"
    },
    {
      "commit": "b3dda41a5a48ddfa44dc8fa939ab495926a0195d",
      "tree": "452181236dd41eae227390d496ae691599cd29d7",
      "parents": [
        "34961873947d64896cd392af81b57ffa393f7175"
      ],
      "author": {
        "name": "Chenjie Yu",
        "email": "cjyu@google.com",
        "time": "Tue Oct 24 13:41:59 2017 -0700"
      },
      "committer": {
        "name": "Chenjie Yu",
        "email": "cjyu@google.com",
        "time": "Wed Nov 01 15:58:45 2017 -0700"
      },
      "message": "reretry ValueMetric implementation and pulling mechanism\n\nNote:\nThis is for value metric. The default operations is sum the diffs.\nThe test uses kernel wake lock, which also needs dimension by kernel\nwake lock name.\n\nThe test is a bit cumbersome as it needs StatsCompanionService to do\nthe alarm, which is not exact alarm.\n\nThe internal state of a slice of bucket would look something like this:\n\n4:ipc0000005e_727_android.hardwar\n0      0\n4:SensorService_wakelock\n40      64\n4:ipc0000005c_727_android.hardwar\n...\n\nTest: manual test on device.\nChange-Id: I2ed0ac7d3c5fcba8b7611d46f38a38ffd8bdc92a\n"
    },
    {
      "commit": "5154a379303ab90a2b2914676a4441917a329b5d",
      "tree": "eed7f5ea48e8f21770acd545faa1a03171c42de6",
      "parents": [
        "473b3345a763d45ee93214322f8d984ed4dd60af"
      ],
      "author": {
        "name": "Yao Chen",
        "email": "yaochen@google.com",
        "time": "Mon Oct 30 22:57:06 2017 -0700"
      },
      "committer": {
        "name": "Yao Chen",
        "email": "yaochen@google.com",
        "time": "Wed Nov 01 10:07:21 2017 -0700"
      },
      "message": "Adding multi layer aggregation in DurationMetric\n\nNewly supported metrics examples:\n\n1) Compute [Total|Max] duration of [an app] holding [ANY] wake lock while [this app] is in\n   [background] and [screen off], bucket size 30seconds, and slice output by uid.\n\n2) Compute [Total|Max] duration of [ANY app] holding [ANY] wake lock while [this app] is in\n   [background] and [screen off], bucket size 30 seconds.\n\n+ DurationMetric proto has a \"what\" which is a SimpleCondition. It defines the atom level start\n  and stop of the duration timer, and it has its atom dimension. e.g., for wake locks, the atom\n  dimensions wil be uid and wl name.\n\n+ Now dimension is explicitly specified in SimpleCondition proto instead of inferred from the \"link\"\n\n+ Added support for \"Or\" and \"Max\" through 2 layers of aggregation.\n\nTODO: (1) The way we track slicedCondition in duration metric is not efficient. optimize!\n      (2) The output dimension should all use int32 instead of KeyMatcher. Fix in a future cl.\n\nTest: Added some unit tests using gmock. Will add more unit tests.\n\nChange-Id: I58a827624f01f9a54fcb80709c4de4ff94a8bc67\n"
    },
    {
      "commit": "31eb67b3498d326659b2b164ff367a01a793d641",
      "tree": "ba4d304b2bf25127b99fb550f7684826c184ade2",
      "parents": [
        "ce7416809a6953ad2d421977de2aae81cc0549f8"
      ],
      "author": {
        "name": "yro",
        "email": "yro@google.com",
        "time": "Tue Oct 24 13:33:21 2017 -0700"
      },
      "committer": {
        "name": "yro",
        "email": "yro@google.com",
        "time": "Tue Oct 24 15:25:27 2017 -0700"
      },
      "message": "Adds aidl definitions and their implementations for binder transfer of\nstatsd entries to clients. This change only includes changes on statds\nside and does not include java library for clients to import. Java\nlibrary will be a separate change as it requires system api review.\n\nTest: statsd, statsd_test\nChange-Id: I306c6e9687801668cc0145b12d38406bfe634775\n"
    },
    {
      "commit": "1481fe142d36d5f0b36eeebc358d5a8aef7bf28a",
      "tree": "368875377232437bd13d8c3e856b75b640afee08",
      "parents": [
        "708f1b8cdca593155e4c572ebe2ebc3ee257c84c"
      ],
      "author": {
        "name": "David Chen",
        "email": "dwchen@google.com",
        "time": "Mon Oct 16 13:16:34 2017 -0700"
      },
      "committer": {
        "name": "David Chen",
        "email": "dwchen@google.com",
        "time": "Fri Oct 20 16:29:59 2017 -0700"
      },
      "message": "Changes pulled data to use Parcel objects.\n\nPreviously, pulled data was returned as a string. We instead\nreturn the data as an array of StatsLogEventWrapper, which encodes\nusing the binary-encoded format liblog uses. StatsD uses the same\nparsing as for pushed events to convert these. This CL also fixes\nthe parsing of log_msg since the strings were previously emptied\nbefore we had a chance to read the values.\n\nNote that the cpp-aidl can\u0027t support List of Parcelable, so we\nhave to return the results as an array.\n\nTest: Manual using the new command in StatsService to print results.\nAlso created a new unit-test by creating a dummy pull code of -1,\nbut this test is deleted since it required creating a fake output in\nStatsCompanionService.\n\nChange-Id: I1cfb9ea081a59292a60e934e8527adc40982ed80\n"
    },
    {
      "commit": "729093df0dd7d7038ad43b16ecdb59a1404f3b50",
      "tree": "a2a85c957fba0fdb38dd79723c6e1084c7f5bb48",
      "parents": [
        "c35ca6de375a1a17a3e070f85e7cf15272d92181"
      ],
      "author": {
        "name": "Yao Chen",
        "email": "yaochen@google.com",
        "time": "Mon Oct 16 10:33:26 2017 -0700"
      },
      "committer": {
        "name": "Yao Chen",
        "email": "yaochen@google.com",
        "time": "Thu Oct 19 15:40:55 2017 -0700"
      },
      "message": "Add support for dimension, and link with condition and added DurationMetric\n\nNow we support following metrics:\n  \u003cDuration\u003e of [app holding a wake lock], while [*this app*] is [in background] [AND] [screen is off]\n  [Slice] the output by [app name, wake lock name], with bucket size [30sec]\n\n+ Also added onDumpReport() api in MetricsManager, it can be called from client to fetch the data from\n  statsd\n\n+ Also added command line tool to dump the StatsLogReport from all metrics for debugging.\n\n+ Synced proto from google3. with a pending cl (cr/172359050)\n\nTODO: We need to add tons of tests to test the Metrics. I will work on it after this CL so people\ncan be unblocked.\n\nI locally test the duration metric with wake lock with an app that generates StatsLog events.\n\nTest: statsd_test\n\n      and manual test, and run:\n\n      adb shell cmd stats dump-report\n      We have a default config, which contains a metrics to count PROCESS_START event sliced by\n      package name.\n\nChange-Id: I4838cc6cf025c143b7e84f43040703a78121fd25\n"
    },
    {
      "commit": "c4dfae56c10a1dd571baa78c750f2e68c919d74f",
      "tree": "b44b1e9bf713e5a1935f9a89d6f2e2ae2e98370b",
      "parents": [
        "9fc9edf95a308f5884bf541cac81ce1f41aba0ba"
      ],
      "author": {
        "name": "Joe Onorato",
        "email": "joeo@google.com",
        "time": "Tue Oct 17 23:38:21 2017 -0700"
      },
      "committer": {
        "name": "Joe Onorato",
        "email": "joeo@google.com",
        "time": "Wed Oct 18 04:19:04 2017 -0700"
      },
      "message": "Introduce a new wrapper for log_msg -- LogEvent\n\nIt stores all of the parsed fields in a single vector, and\nprovides accessor methods to get at fields by index with\ntheir correct type.\n\nTest: statsd_test\nChange-Id: I4fa94e4ce52db3ac87f19b62f9c85398de6e8145\n"
    },
    {
      "commit": "9fc9edf95a308f5884bf541cac81ce1f41aba0ba",
      "tree": "6ffea92f07a143e2847ae692fd26301689f2345e",
      "parents": [
        "aeff5b880b095e148e0243907d384d6f1d0a4c20"
      ],
      "author": {
        "name": "Joe Onorato",
        "email": "joeo@google.com",
        "time": "Sun Oct 15 20:08:52 2017 -0700"
      },
      "committer": {
        "name": "Joe Onorato",
        "email": "joeo@google.com",
        "time": "Wed Oct 18 04:18:58 2017 -0700"
      },
      "message": "Clean up how we handle configurations, and other assorted cleanup\n\n- Add a ConfigManager class that tracks the configurations\n  that have been passed to us.  Configurations are now\n  tracked by tuples of (uid,tag), where the tag is an\n  app-defined string, in case a single uid has multiple\n  configurations.\n- Move all of the initialization into StatsService.\n- Get rid of the ability to have multiple LogListeners. Raw\n  events are now pushed directly into StatsService, which\n  can distribute them to the interested parties (and will\n  eventually be able to do the proper locking).\n- Add Log.h, which sets our LOG_TAG correctly.\n- Move some of the related files that I expect will grow some\n  into their own subdirectories.\n\nTest: statsd_test\nTest: adb shell cmd stats config ...\nTest: adb shell dumpsys stats\nChange-Id: I79487603003d8a842d5bd319741f1ecbf72063d1\n"
    },
    {
      "commit": "de70169109c57787a23c732ec4b361ade2e9850e",
      "tree": "bbef572032ab0651f905d180b4e03d7acb053cb8",
      "parents": [
        "32f38bde730a338017363e5afd275e1d888ae048"
      ],
      "author": {
        "name": "David Chen",
        "email": "dwchen@google.com",
        "time": "Thu Oct 05 13:16:02 2017 -0700"
      },
      "committer": {
        "name": "David Chen",
        "email": "dwchen@google.com",
        "time": "Tue Oct 10 14:33:23 2017 -0700"
      },
      "message": "UID mapping to provide app name and version.\n\nThe UID map is updated by StatsCompanionService, which listens to broadcast\nupdates indicating that an app was updated/installed or removed. Also,\nthe entire map is updated when statsd first connects to the companion\nservice. Also, there is a way for metrics producers to subscribe to\nupdates, so that they can know when an app was upgraded.\n\nTest: Created new unit-test for mapping and manually tested for install\nand remove. Did not manually test the app upgrade.\n\nChange-Id: I6676ae5c93b75c72d9badabb36aa9c40006db07d\n"
    },
    {
      "commit": "1a317baedaa79f015ad637353c81abb337890733",
      "tree": "5dcdc99a99fe5c379614c1d0a00bd3b0e2a5c60c",
      "parents": [
        "bac998a0cb4e8c19350129d2541bbb33cbd7d7f4"
      ],
      "author": {
        "name": "Chenjie Yu",
        "email": "cjyu@google.com",
        "time": "Thu Oct 05 16:05:32 2017 -0700"
      },
      "committer": {
        "name": "Chenjie Yu",
        "email": "cjyu@google.com",
        "time": "Mon Oct 09 12:47:45 2017 -0700"
      },
      "message": "refactor statspuller\n\nTest: manual test on device\nChange-Id: Ibdec6a821e47cd2b2e7435002219c0b2e3f4c5d2\n"
    },
    {
      "commit": "c68a9d21b47f4c2fb65139c10d646145a9ab9a73",
      "tree": "bbcbc14ff9cb2c8a159eae59e1b29d692eb2e1b2",
      "parents": [
        "0121af618995f93dc0fff92e8b0e1b98c5106a9e"
      ],
      "author": {
        "name": "Bookatz",
        "email": "bookatz@google.com",
        "time": "Wed Sep 27 14:09:55 2017 -0700"
      },
      "committer": {
        "name": "Bookatz",
        "email": "bookatz@google.com",
        "time": "Fri Sep 29 15:10:47 2017 -0700"
      },
      "message": "Statsd can pull kernel wakelock data\n\nWhen statsd is told that it is time to poll data, it asks\nStatsCompanionService to pull kernel wakelock data, receives the result\n(as a string), and outputs it to screen.\n\nStill to do:\n1. don\u0027t use a string; use a parcel instead\n2. don\u0027t output it to screen; do something useful instead\n3. do more than just kernel wakelocks\n4. pull data on demand, in addition to just on periodic pulling\n\nTest: added setPollingAlarms to statsd.main and confirmed that kernel\nwakelock information was written to screen\nChange-Id: I35f5164420699dea1a00c9e530b938904f1d3055\n"
    },
    {
      "commit": "ef99c4fa23b42fe6e58db706b9f4780018b6bf3e",
      "tree": "cbe5521166cbb3892dbda81d3c385948b69bbfd5",
      "parents": [
        "aee8eff3cfbd070f9fff3fba91f02c50d6cc4499"
      ],
      "author": {
        "name": "Yao Chen",
        "email": "yaochen@google.com",
        "time": "Fri Sep 22 16:26:54 2017 -0700"
      },
      "committer": {
        "name": "Yao Chen",
        "email": "yaochen@google.com",
        "time": "Fri Sep 22 16:26:54 2017 -0700"
      },
      "message": "clang-format existing code in statsd.\n\nAdded .clang-format, because there isn\u0027t an official .clang-format file for Android framework code.\n\nbefore we upload changes, do:\n\nclang-format -style\u003dfile -i [file list]\n\nto format the files that you touched.\n\nTest: formatting only. NO code changes.\nChange-Id: I90e87f1ee6618da8ea9bc2221c609c415a4046a8\n"
    },
    {
      "commit": "906a35c814817c8bd503c3f4df8af9a2f622169d",
      "tree": "cc469848a751a811d1b06081d7b6483d75a8de63",
      "parents": [
        "e63e6fc6437563a36fdd4ead0e1e543c2316f07e"
      ],
      "author": {
        "name": "Bookatz",
        "email": "bookatz@google.com",
        "time": "Wed Sep 20 15:26:44 2017 -0700"
      },
      "committer": {
        "name": "Bookatz",
        "email": "bookatz@google.com",
        "time": "Wed Sep 20 16:58:14 2017 -0700"
      },
      "message": "Statsd namespace is defined and used\n\nStatsd code now lives in android::os::statsd namespace. Existing files\nare largely modified to follow this convention.\n\nException: parse_util, since it seems a bit different.\n\nTest: code compiles and existing statsd_tests still pass\nChange-Id: Idf92a071b9ed172d01eb3087a4fa3609d67a038c\n"
    },
    {
      "commit": "b487b5533eba8635232009c7f32a54a0380a532d",
      "tree": "7cc21a51f462ac001bbc50a76c61cf6ca10d5e1e",
      "parents": [
        "1b0b114abca0a7c7642b0b7de343e1e2f982ebf0"
      ],
      "author": {
        "name": "Bookatz",
        "email": "bookatz@google.com",
        "time": "Mon Sep 18 11:26:01 2017 -0700"
      },
      "committer": {
        "name": "Bookatz",
        "email": "bookatz@google.com",
        "time": "Wed Sep 20 14:13:44 2017 -0700"
      },
      "message": "statsd \u0026 statscompanion communication more robust\n\nIf statsd or statsdcompanion crashes, or if one loads\nbefore the other, the other will be able to accomodate.\n\nWhen statsd loads, it will attempt to tell statscompanion that it\u0027s\nalive, and then get on to its business, while assuming that\nstatscompanion is not alive. Only when statscompanion tells statsd\nthat it is alive, statsd will then start to use it.\n\nWhen statscompanion loads, it will attempt to tell statsd that it\u0027s\nalive and then do nothing (since it has nothing to do). When statsd\ntells statscompanion that statsd is alive, statscompanion will respond,\ntelling statsd that it is alive and, if that binder call returns, will\nget to work.\n\nThis way, if statsd loads first, it can work unobstructed until\nstatscompanion informs statsd that it is alive, at which point they\nshake hands and work. Conversely, if statscompanion loads first, it will\ndo nothing until statsd contacts it, at which point they will shake\nhands and work.\n\nTest: manual\nChange-Id: I969ad47fb8060e27814d05ad37433a02711cfa6a\n"
    },
    {
      "commit": "1b0b114abca0a7c7642b0b7de343e1e2f982ebf0",
      "tree": "0ac75aa50a59ae3c3f49ed56f54a267dde2a43f1",
      "parents": [
        "52c0e916dda8f5580319288367c5449de21f56a3"
      ],
      "author": {
        "name": "Bookatz",
        "email": "bookatz@google.com",
        "time": "Fri Sep 08 11:58:42 2017 -0700"
      },
      "committer": {
        "name": "Bookatz",
        "email": "bookatz@google.com",
        "time": "Wed Sep 20 07:51:53 2017 -0700"
      },
      "message": "StatsCompanionService sends messages to statsd\n\nStatsCompanionService can now inform statsd that an alarm (for anomaly\nalerting and for polling) has fired, so that statsd can act accordingly.\n\nTest: manual created an alarm from statsd.main and checked logcat that\nstatsd received the broadcast that it fired\nChange-Id: I1d33dfbee0d3e213c91dd6973d2622ecacc890c8\n"
    },
    {
      "commit": "0656b7a158f6f71989e76ba55423217e3e75d8b4",
      "tree": "174bc9f6cf9d930d7fbd1e57e6cfd00d71b75d7f",
      "parents": [
        "e44481f7e00cd1cc48eeb890dd55fb6ac78d97ac"
      ],
      "author": {
        "name": "David Chen",
        "email": "dwchen@google.com",
        "time": "Wed Sep 13 15:53:39 2017 -0700"
      },
      "committer": {
        "name": "David Chen",
        "email": "dwchen@google.com",
        "time": "Fri Sep 15 14:07:52 2017 -0700"
      },
      "message": "Adding ability to add configs via adb command-line. The input\nmust be in serialized binary format. Also fixes small issue\nin build rule related to proto lib.\n\nTest: Manually tested that ADB command works without crashing.\n\nChange-Id: Iba2e677561ff500adb601a598f73e8a7b32540e5\n"
    },
    {
      "commit": "482d272d7c94201206518d6b37d32647838b15d7",
      "tree": "495bd3c9546a5816e4a01f9cc60f4c5b0a220ef7",
      "parents": [
        "ab273e2e13f87d57f66395c52df424710b8066e1"
      ],
      "author": {
        "name": "Yao Chen",
        "email": "yaochen@google.com",
        "time": "Tue Sep 12 13:25:43 2017 -0700"
      },
      "committer": {
        "name": "Yao Chen",
        "email": "yaochen@google.com",
        "time": "Wed Sep 13 16:58:41 2017 -0700"
      },
      "message": "Add a cmd line tool to StatsService to parse log files from Dropbox\n\nTest: adb shell cmd stats all-logs\nChange-Id: I7803c9c021a971619f60fbf6bdfabd33d2f476ef\n"
    },
    {
      "commit": "2cbc2cce80de4c98362c3b753e55c2478c18bd26",
      "tree": "6efdeb0808fc6b0bb6b4da8a4f1b4fc214d5cb04",
      "parents": [
        "5dcbc6c015fd56db9381cb7aff58506e8ebcc150"
      ],
      "author": {
        "name": "Joe Onorato",
        "email": "joeo@google.com",
        "time": "Wed Aug 30 17:03:23 2017 -0700"
      },
      "committer": {
        "name": "Joe Onorato",
        "email": "joeo@google.com",
        "time": "Wed Aug 30 17:03:50 2017 -0700"
      },
      "message": "Add \"adb shell cmd stats\" support to statsd.\n\nTest: adb shell cmd stats\nChange-Id: Idcca995af208153019be5faa1acd573037f931cb\n"
    },
    {
      "commit": "5dcbc6c015fd56db9381cb7aff58506e8ebcc150",
      "tree": "f2d471ce29ebc97de33b2772bae373bb4f7527bf",
      "parents": [
        "6ae44280f85cd0d8fddae11689b494e48deaa6e3"
      ],
      "author": {
        "name": "Joe Onorato",
        "email": "joeo@google.com",
        "time": "Tue Aug 29 15:13:58 2017 -0700"
      },
      "committer": {
        "name": "Joe Onorato",
        "email": "joeo@google.com",
        "time": "Wed Aug 30 12:36:31 2017 -0700"
      },
      "message": "Add statsd.\n\nIt doesn\u0027t start yet by default. When you start it manually, it sets\nitself up as a binder system service and starts a thread to read the\nevent log.\n\nTest: Run statsd, observe output. also run stats_test\nChange-Id: If435d6a80fef3c1d957aedb61699bf5e9aae7e56\n"
    }
  ]
}
