)]}'
{
  "log": [
    {
      "commit": "e1361ed422b43c2d097b7bcdef55728e56994c76",
      "tree": "996a52596b67b404e4de2b6127173b2afcb07324",
      "parents": [
        "f0c438c35968ff9a83abbe6c71f73acd92919ea7"
      ],
      "author": {
        "name": "Chenjie Yu",
        "email": "cjyu@google.com",
        "time": "Mon Jul 23 17:33:09 2018 -0700"
      },
      "committer": {
        "name": "Chenjie Yu",
        "email": "cjyu@google.com",
        "time": "Fri Jul 27 10:53:38 2018 -0700"
      },
      "message": "Adjust 1st bucket start time\n\nadjust 1st bucket start time for a partial bucket\nalso make valuemetric and gauge metric pull on first bucket\n\nBug: 111607838\nBug: 111660710\nBug: 111842941\n\nTest: unit test\nChange-Id: I5932c2258f8deac57e7abbf26f3214f87914a964\n"
    },
    {
      "commit": "a0f0224906059ef4b08656567566654636cdc507",
      "tree": "67446223b2f941cf94438bcbde51376ef7858905",
      "parents": [
        "141d67c3a7b2429db48785b74ef7b6a7fa841254"
      ],
      "author": {
        "name": "Chenjie Yu",
        "email": "cjyu@google.com",
        "time": "Fri Jul 06 16:14:34 2018 -0700"
      },
      "committer": {
        "name": "Chenjie Yu",
        "email": "cjyu@google.com",
        "time": "Fri Jul 13 10:24:41 2018 -0700"
      },
      "message": "ValueMetric supports multiple aggregation types\n\n1. Add support for MIN, MAX, AVG\n2. ValueMetric also allow floats now, in addition to long data type.\nAnomalyDetection still takes long only. I am not sure if it makes\nsense to do anomaly on AVG. I will leave that for later.\n3. ValueMetric supports sliced condition change for pushed events.\nI don\u0027t think it makes sense for pulled events to have sliced condition\nchanges so leave it for now.\n\nTest: unit test\nChange-Id: I8bc510d98ea9b8a6eb16d04ff99dce6b574249cd\n"
    },
    {
      "commit": "5bfffb54daf4ccfd55d78a19a697d675c3df0dbc",
      "tree": "415ccac383d5a4b9e013a1727f4586e430969a88",
      "parents": [
        "54d7032b78e3b457aa618eb74ae644b95844ca54"
      ],
      "author": {
        "name": "Yao Chen",
        "email": "yaochen@google.com",
        "time": "Thu Jun 21 16:58:51 2018 -0700"
      },
      "committer": {
        "name": "Yao Chen",
        "email": "yaochen@google.com",
        "time": "Mon Jun 25 11:08:04 2018 -0700"
      },
      "message": "Clean up TODOs in statsd\n\n+ Created bugs for those TODOs that are still relevant.\n+ Remove obsolete TODOs.\n\nTest: no code change.\nChange-Id: I41c2a89a882f087817ee6cbc3f095e1d80e1928e\n"
    },
    {
      "commit": "e22192071d0abccd52091eb3bff07176f4bfb84c",
      "tree": "cdcc9c07db06d19bae63754922e6aa78389e86ae",
      "parents": [
        "b5e98161ddc8f5e5e88719dc4004204832facc31"
      ],
      "author": {
        "name": "Chenjie Yu",
        "email": "cjyu@google.com",
        "time": "Fri Jun 08 10:07:51 2018 -0700"
      },
      "committer": {
        "name": "Chenjie Yu",
        "email": "cjyu@google.com",
        "time": "Thu Jun 14 15:46:54 2018 -0700"
      },
      "message": "StatsPullerManager not use singleton\n\nThis is to be consistent with other patterns such as UidMap.\nThis also makes unit test simpler.\n\nChange-Id: I1558cd609e470481f269ecf2ae616277a95cfbf0\nBug: 72722120\nTest: unit test\n"
    },
    {
      "commit": "d27ab45ad3de8c828073fb063079d692a6d1a2cf",
      "tree": "07eb1ef2f1e90588a3ecb74f259453e58f371143",
      "parents": [
        "56b20ec67564e54f283293b50eaf8de04ad48f81"
      ],
      "author": {
        "name": "Bookatz",
        "email": "bookatz@google.com",
        "time": "Thu May 24 10:35:02 2018 -0700"
      },
      "committer": {
        "name": "Bookatz",
        "email": "bookatz@google.com",
        "time": "Thu May 24 10:35:02 2018 -0700"
      },
      "message": "Remove TODO in statsd AnomalyTracker_test\n\nThe underlying item the TODO is referencing had already been resolved\nso the test line can be properly added, per the TODO.\n\nChange-Id: I5c16e7ea319bd16e37475381def656b38f39d17f\nFixes: 80095149\nTest: make statsd_test \u0026\u0026 adb sync data \u0026\u0026 adb shell data/nativetest64/statsd_test/statsd_test\n"
    },
    {
      "commit": "1c58f04cd34291584b7bf2b45a54427e0ef650c8",
      "tree": "dab5a4012531878d059e505525814ae09fa443f4",
      "parents": [
        "644c94f1251b57e9a08196fb660ab909e9afe5a8"
      ],
      "author": {
        "name": "Yangster-mac",
        "email": "yanglu@google.com",
        "time": "Thu May 17 15:52:51 2018 -0700"
      },
      "committer": {
        "name": "Yangster-mac",
        "email": "yanglu@google.com",
        "time": "Fri May 18 10:39:50 2018 -0700"
      },
      "message": "Add a field in config to disable/enable the string hashing in metric report.\n\nStatsd hashes (using its own hashing function) raw strings to reduce the\nupload data size when there are duplicate strings in the report. And in cloud,\nthe clearcut translator would backfill the strings.\n\nIn a few droidfood users, we find the translator was unable to do that. While\ndebugging the root cause, we first decided to provide an option to disable\nthe hashing from the cloud.\n\nTest: statsd unit test, CTS test, tested manually\n\nBUG: b/79943763\nChange-Id: If0359c8cf3f3cf83a2938db9ebf95ea7906f0b0c\n"
    },
    {
      "commit": "021e25307d815452ceee7e189b36c7072b53c1df",
      "tree": "caa3684afb08cc12867aace6e7da051ece9bf988",
      "parents": [
        "98c2f7f9de9ada08b8d27243a243a17748282813"
      ],
      "author": {
        "name": "Chenjie Yu",
        "email": "cjyu@google.com",
        "time": "Wed May 16 12:23:07 2018 -0700"
      },
      "committer": {
        "name": "Chenjie Yu",
        "email": "cjyu@google.com",
        "time": "Wed May 16 14:50:11 2018 -0700"
      },
      "message": "ValueMetric pushed events should check condition\n\n+ fix unit test flakiness\n\nBug: 79873404\nChange-Id: I15b52a79b18c05603640781e4450e7b62fac24ba\nFix: 79873404\nTest: unit test\n"
    },
    {
      "commit": "092a5a9b85782afc2045087f9f29dfda16070f13",
      "tree": "bedbd5b08c5213a32ce0d643a7bdf4ff663163ce",
      "parents": [
        "4fd9dc11d018901714e08e5c040558da6d886d54"
      ],
      "author": {
        "name": "David Chen",
        "email": "dwchen@google.com",
        "time": "Tue May 15 17:50:32 2018 -0700"
      },
      "committer": {
        "name": "David Chen",
        "email": "dwchen@google.com",
        "time": "Tue May 15 17:51:47 2018 -0700"
      },
      "message": "Fixes Value metrics in statsd and app upgrades.\n\nPulled value metrics with conditions had a subtle bug that caused\nus to leave the condition on even if it should\u0027ve been false.\n\nBug: 79778783\nTest: Added unit-test and verified on marlin-eng.\nChange-Id: I31f34791118319b3471f7a6ea8a024e2d511cfe7\n"
    },
    {
      "commit": "56ae0d9a48212c6e886e5887a6f9191f3020af40",
      "tree": "bd522d30960d154169b65791791b1bccecd5e6b3",
      "parents": [
        "26111fc8997ef36ff9c7a368a09ab1e9aefe21b1"
      ],
      "author": {
        "name": "David Chen",
        "email": "dwchen@google.com",
        "time": "Fri May 11 16:00:22 2018 -0700"
      },
      "committer": {
        "name": "David Chen",
        "email": "dwchen@google.com",
        "time": "Fri May 11 17:04:56 2018 -0700"
      },
      "message": "Fixes statsd reports missing strings and SCS.\n\nReports written to disk don\u0027t contain the strings used, which will\nmake this report unusable if there are strings that don\u0027t show up\nagain. We should always include the strings, so this option is\nremoved entirely.\n\nAlso, we hard-coded the wrong number of fields when pulling\nModemActivityInfo. There are actually 10 fields, not 6.\n\nBug: 79601503\nTest: Tested unit-tests pass on marlin-eng.\nChange-Id: I6834b096ced77418a9cc2ddd79b08d1c9c447fae\n"
    },
    {
      "commit": "a159842161003ef038263655d60d163cd1f63a7d",
      "tree": "a9c0483deba9d8dded5604fb83094002e77a4a71",
      "parents": [
        "cac60f929083a12ff319a6d4a7767af5c74b1444",
        "58e609e33947fa912b50fc4fc0daed21facd28a0"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu May 10 01:02:10 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu May 10 01:02:10 2018 +0000"
      },
      "message": "Merge \"Fix the flaky gauge/value e2e test due to cached events.\" into pi-dev"
    },
    {
      "commit": "c3d079845579e64ec5b69ee1e1a2bf7699c10046",
      "tree": "45d75f595e985ee29ce42c3c302701e787bda3ae",
      "parents": [
        "6317df6e1e7bc1338089c8402efadccb39201aba",
        "cc884dfc946b9e34025f0d25bde768abdf64311e"
      ],
      "author": {
        "name": "android-build-team Robot",
        "email": "android-build-team-robot@google.com",
        "time": "Wed May 09 18:07:24 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed May 09 18:07:24 2018 +0000"
      },
      "message": "Merge \"Fix partial bucket unit tests.\" into pi-dev"
    },
    {
      "commit": "58e609e33947fa912b50fc4fc0daed21facd28a0",
      "tree": "7ffb6606c5d39f28f251e425e7791fe5acfa0982",
      "parents": [
        "efaec53af9722b5c3282f8f41f6e9aa764eb0b07"
      ],
      "author": {
        "name": "Yangster-mac",
        "email": "yanglu@google.com",
        "time": "Tue May 08 16:10:32 2018 -0700"
      },
      "committer": {
        "name": "Yangster-mac",
        "email": "yanglu@google.com",
        "time": "Tue May 08 16:19:48 2018 -0700"
      },
      "message": "Fix the flaky gauge/value e2e test due to cached events.\n\nTest: statsd test\nBUG: b/79265262\nChange-Id: I4d67f1c2edb6215a3cea23f8c7b2e8d5099c4aac\n"
    },
    {
      "commit": "9e6dbbdadf8de3bcc58a6c26784219217cd35b53",
      "tree": "19a27b3f7e37ef8bddb6eb17d871246a6d93075f",
      "parents": [
        "efaec53af9722b5c3282f8f41f6e9aa764eb0b07"
      ],
      "author": {
        "name": "David Chen",
        "email": "dwchen@google.com",
        "time": "Mon May 07 17:52:29 2018 -0700"
      },
      "committer": {
        "name": "David Chen",
        "email": "dwchen@google.com",
        "time": "Mon May 07 18:07:19 2018 -0700"
      },
      "message": "Fix statsd returning uidmap with empty reports.\n\nWe notice devices uploading a bunch of bytes for the uidmap even if\nthe device is running an empty config, so there are no actual metrics\nto report. This hardcodes some logic to skip the inclusion of the\nuidmap if there are exactly 0 metrics.\n\nBug: 79381210\nTest: Tested unit-tests on marlin-eng\nChange-Id: I96348235341a7faf15ff57d4d1eccac635a3a999\n"
    },
    {
      "commit": "cc884dfc946b9e34025f0d25bde768abdf64311e",
      "tree": "be47e2ae8a63f17280a9882ba9da3b879586ce85",
      "parents": [
        "fd3b398e91ed7b18aca27a0835c7599d0e4e66d3"
      ],
      "author": {
        "name": "Yao Chen",
        "email": "yaochen@google.com",
        "time": "Mon May 07 10:34:31 2018 -0700"
      },
      "committer": {
        "name": "Yao Chen",
        "email": "yaochen@google.com",
        "time": "Mon May 07 10:34:31 2018 -0700"
      },
      "message": "Fix partial bucket unit tests.\n\nBug: 79347749\nTest: statsd_test\nChange-Id: I69eee7172d6fe4ce895530f089193eb08653e269\n"
    },
    {
      "commit": "48944901f7e6334724efadda6c6b27d9e88fc9e2",
      "tree": "10a4c19530b68bd17727694622f3d712c74aeae4",
      "parents": [
        "11969b49191cfa156ada8d5034d5d39c2b77dc69"
      ],
      "author": {
        "name": "David Chen",
        "email": "dwchen@google.com",
        "time": "Thu May 03 10:29:11 2018 -0700"
      },
      "committer": {
        "name": "Yao Chen",
        "email": "yaochen@google.com",
        "time": "Fri May 04 17:09:16 2018 -0700"
      },
      "message": "Fixes statsd returning too much data at once.\n\nWe observe a single ConfigMetricsReportList can be greater than the\nsafe size for the binder transaction buffer since we only check the\nsize of the current metrics in progress, but we also return the\nprevious reports stored on disk.\n\nThis change will attempt to send another ConfigMetricsReportList\nas soon as possible if there\u0027s already a report on disk.\n\nAlso fixes a bug when trying to trigger data fetch before the client\nhas registered the corresponding dataFetchOperation.\n\nBug: 79201869\nTest: Tested manually on marlin-eng\nChange-Id: I2d3677162804a27e7a7a95d482d80c46bd994a67\n"
    },
    {
      "commit": "892f3d32293b8358c72da4a94633827abbda640b",
      "tree": "25f503d7970defa87309883fa7cd22adbcb58cd7",
      "parents": [
        "ee18fb21120b32036222770ba541c43613fbae3d"
      ],
      "author": {
        "name": "Yangster-mac",
        "email": "yanglu@google.com",
        "time": "Wed May 02 14:16:48 2018 -0700"
      },
      "committer": {
        "name": "Yangster-mac",
        "email": "yanglu@google.com",
        "time": "Thu May 03 17:05:24 2018 -0700"
      },
      "message": "Reset statsd and correctly record the dump reason when system\nserver restarts/crashes.\n\nTest: statsd test\nBUG: b/79161505\nChange-Id: I0646c764964f6eafde91f9ae0179a1c837af320d\n"
    },
    {
      "commit": "9def8e3995b1034d943a0fd22b6e512bfacdab77",
      "tree": "d58200532a17ab2c47e23e46769f877ce9f82b79",
      "parents": [
        "c76929eb926a4ba506a4dfa986ea33443e1df58a"
      ],
      "author": {
        "name": "Yangster-mac",
        "email": "yanglu@google.com",
        "time": "Tue Apr 17 13:55:51 2018 -0700"
      },
      "committer": {
        "name": "Yangster-mac",
        "email": "yanglu@google.com",
        "time": "Thu Apr 26 04:30:18 2018 -0700"
      },
      "message": "Reduce statsd log data size.\n\n1. Hash the strings in metric dimensions.\n2. Optimize the timestamp encoding in bucket.\n   Use bucket num for full bucket and millis for\n   partial bucket.\n3. Encode the dimension path per metric and avoid\n   deduping it across dimensons.\n\nTest: statsd test\nChange-Id: I18f69654de85edb21a9c835c73edead756295e05\nBUG: b/77813755\n"
    },
    {
      "commit": "e36018b2724b5ae40180f956b16c3e276855b99b",
      "tree": "4e933cd656f001c91e36213289e71b92dc489d7a",
      "parents": [
        "89b1a4ee0ff9c5b174ae1a229029edcdbc34b74f"
      ],
      "author": {
        "name": "Chenjie Yu",
        "email": "cjyu@google.com",
        "time": "Mon Apr 16 15:18:30 2018 -0700"
      },
      "committer": {
        "name": "Chenjie Yu",
        "email": "cjyu@google.com",
        "time": "Wed Apr 18 20:19:21 2018 +0000"
      },
      "message": "add dump report reason to reports\n\n+ also change uidmapping version numbers to int64_t\n\nBug: 78132855\nChange-Id: Iac7ea93e4bf651bd65bd03383e7ab4971af4fc29\nFix: 78132855\nTest: gts test\n"
    },
    {
      "commit": "81245fd53a0bd627fa87e3a69dd667c7d6696ede",
      "tree": "f1f736cb97473d604159206545a24b9b046b8e4d",
      "parents": [
        "34a0b18a5c730e4fa16e27c63ed0cd79a6df188e"
      ],
      "author": {
        "name": "David Chen",
        "email": "dwchen@google.com",
        "time": "Thu Apr 12 14:33:37 2018 -0700"
      },
      "committer": {
        "name": "David Chen",
        "email": "dwchen@google.com",
        "time": "Mon Apr 16 18:42:14 2018 -0700"
      },
      "message": "Adds option to drop small buckets for statsd.\n\nWe notice that some of the pulled metrics have a ton of data, and\nduring app upgrades, we\u0027re forming partial buckets that represent\nsmall periods of time but require many bytes of data. We now have an\noption to drop these buckets that are too short. Note that we still\nhave to pull the data to keep the metrics for the next bucket\ncorrect. We include a new field in the value and gauge metric outputs\nso that it\u0027s easy to tell when a bucket was dropped.\n\nWe drop the partial buckets also from anomaly detection since we\nshould be computing anomalies from the same data that is reported.\n\nTest: Added unit-tests for value and gauge metrics.\nBug: 77925710\nChange-Id: Ic370496377c6afd380e02278a6c1ed8b521a2731\n"
    },
    {
      "commit": "6b649257377b4ba2dd8a2a02b8dd692a72a2cc1e",
      "tree": "f06149447b480ee548d00896ec5847adee3896a8",
      "parents": [
        "167032ab002714d26a14735bbcdc072c5fa693b7"
      ],
      "author": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Apr 16 09:50:22 2018 -0600"
      },
      "committer": {
        "name": "Jeff Sharkey",
        "email": "jsharkey@android.com",
        "time": "Mon Apr 16 12:44:32 2018 -0600"
      },
      "message": "Protect usage data with OP_GET_USAGE_STATS.\n\nAPIs that return package usage data (such as the new StatsManager)\nmust ensure that callers hold both the PACKAGE_USAGE_STATS permission\nand the OP_GET_USAGE_STATS app-op.\n\nAdd noteOp() method that can be called from native code.\n\nAlso add missing security checks on command interface.\n\nBug: 77662908, 78121728\nTest: builds, boots\nChange-Id: Ie0d51e4baaacd9d7d36ba0c587ec91a870b9df17\n"
    },
    {
      "commit": "6b317915e8ffa28066744e597fd5404a09240f22",
      "tree": "35031577fccd8ab3250be79f6905727ce94308ed",
      "parents": [
        "87646514be50390c251e00e21b31b32f2eb10f1c",
        "4f71629002ae1da22ca1c07ce11b9cca9b272d97"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Apr 11 17:02:06 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Apr 11 17:02:06 2018 +0000"
      },
      "message": "Merge \"StatsManager throws exceptions\" into pi-dev"
    },
    {
      "commit": "163d2602dbc79133096b3dec7920ee157ff1a88b",
      "tree": "ea8f68e27b820748af245db7c90e36ff92a99bf8",
      "parents": [
        "5f91d5ee942ed2af54349a2a78f635237a84dbb4"
      ],
      "author": {
        "name": "Yao Chen",
        "email": "yaochen@google.com",
        "time": "Tue Apr 10 10:39:53 2018 -0700"
      },
      "committer": {
        "name": "Yangster",
        "email": "yanglu@google.com",
        "time": "Tue Apr 10 22:06:03 2018 -0700"
      },
      "message": "Handle logd reconnect.\n\nWhen statsd reconnects to logd, statsd will read all logs from buffer again. To prevent us from\nreprocessing old events, we do the following:\n\n1. At any given moment, record the largest timestamp(T_max) and last timestamp (check point) that\n   we\u0027ve seen before.\n2. When reconnection happens, we look for the check point until we see a new log with a timestamp\n   larger than T_max.\n   -\u003e If we found the CP, resume after the CP. Success\n   -\u003e If we can\u0027t find CP, there is definitely log loss. We reset all configs.\n\nNote:\n1. Logd has an API to read logs after a certain timestamp. But this api is vulnerable to\ntime changes from Settings. So we cannot rely on it.\n\n2. If logd inserts a new log (with older timestamp) before CP, we cannot detect it. It\u0027s not\n   possible to detect it without record all timestamps we have seen.\n\nTest: statsd_test\nBug: 77813113\n\nChange-Id: Ic3fdb47230807606ab11dc994cb162194adb8448\n"
    },
    {
      "commit": "15f6bbc24f4d7a3d4481d90a18df33d402ddacba",
      "tree": "cb4aa2c4131209f4fa8e2d623a951ce9b4cae0fd",
      "parents": [
        "4df92ef6f1fd4bc20c02a499b58d0fbe6fa1e20d"
      ],
      "author": {
        "name": "Yangster-mac",
        "email": "yanglu@google.com",
        "time": "Sun Apr 08 11:52:26 2018 -0700"
      },
      "committer": {
        "name": "Yangster-mac",
        "email": "yanglu@google.com",
        "time": "Tue Apr 10 20:25:13 2018 -0700"
      },
      "message": "Flush the bucket when creating the metric producer.\nUse int64 for value field.\nE2e test for gauge/value metric.\n\nBUG: b/74445671\n\nTest: statsd test.\nChange-Id: I823a0bade8f89834bdfb9cf48864852a47d7b63b\n"
    },
    {
      "commit": "4f71629002ae1da22ca1c07ce11b9cca9b272d97",
      "tree": "9df07317b627a0be00312edbb17969699da95b4f",
      "parents": [
        "135d82ac4526e2d5fa56484e80bce86dd10431ea"
      ],
      "author": {
        "name": "Bookatz",
        "email": "bookatz@google.com",
        "time": "Tue Apr 10 17:15:12 2018 -0700"
      },
      "committer": {
        "name": "Bookatz",
        "email": "bookatz@google.com",
        "time": "Tue Apr 10 19:07:32 2018 -0700"
      },
      "message": "StatsManager throws exceptions\n\nWhen StatsManager fails to connect to statsd, it now throws an exception\nfor the caller to catch. It also throws an exception of the config being\nadded is of an unreadable format.\n\nDue to backwards compatibility issues, the old APIs could not be\nchanged, so new ones were made to replace the old ones. The old ones are\nnow temporary and will be removed when the compatibility issue is\nresolved.\n\nBug: 77648233\nTest: gts-tradefed run gts-dev --module GtsStatsdHostTestCases\nChange-Id: Ibea05883a29b9b3ef9927d2f8fe295eb99832ab7\n"
    },
    {
      "commit": "ae63b0af946d921ca20aaf1916b12af593ec0e1d",
      "tree": "711c5a291b914b721f65d1be4af2fb761974a926",
      "parents": [
        "627596f6a50d77594f9d665bc563008a51b83caa"
      ],
      "author": {
        "name": "Chenjie Yu",
        "email": "cjyu@google.com",
        "time": "Tue Apr 10 14:59:31 2018 -0700"
      },
      "committer": {
        "name": "Chenjie Yu",
        "email": "cjyu@google.com",
        "time": "Tue Apr 10 14:59:31 2018 -0700"
      },
      "message": "Drop value if the bucket is totally tainted\n\nBug: 77870358\nChange-Id: Ia96970a3254de08f94b91ad53be2fdb9f4db7eb4\nFix: 77870358\nTest: unit test\n"
    },
    {
      "commit": "e68f3a5811209eeab71976bc583c6075d9a5979a",
      "tree": "44aa95c693275c1e6d22e51d2725183f41acb4be",
      "parents": [
        "203bbbf942e8675338b88ab67d49481d2bfcf904"
      ],
      "author": {
        "name": "Yangster-mac",
        "email": "yanglu@google.com",
        "time": "Wed Apr 04 00:01:43 2018 -0700"
      },
      "committer": {
        "name": "Yangster-mac",
        "email": "yanglu@google.com",
        "time": "Thu Apr 05 18:05:57 2018 -0700"
      },
      "message": "Flush the partial bucket when startd shuts down or config updated.\n\nTest: statsd test\n\nBUG: b/77556036\nChange-Id: Ie4a04ace55e07c4529cdff5906ba874f8815f620\n"
    },
    {
      "commit": "bd12527c90d55eefa657e6a71cfdd287ecdb4ab3",
      "tree": "eae5018191d2e8f4132237acaa0ec7d4ef7e030a",
      "parents": [
        "743d42d2990bd30195045a256f863d0ce6f51d79"
      ],
      "author": {
        "name": "David Chen",
        "email": "dwchen@google.com",
        "time": "Wed Apr 04 19:02:50 2018 -0700"
      },
      "committer": {
        "name": "David Chen",
        "email": "dwchen@google.com",
        "time": "Thu Apr 05 16:15:01 2018 -0700"
      },
      "message": "Fix uid map to be simpler and fix partial bucket.\n\nThe previous scheme captured periodic snapshots for each config with\ncomplex logic that\u0027s unnecessary and wasted memory. We actually don\u0027t\nneed to store any snapshots since we just convert the current state\ninto a snapshot and also include the deltas (change events) since the\nprevious report until now.\n\nTo make the system more robust, we also include up to 100 of the\ndeleted apps in the uid map.\n\nAlso, fix the wiring of the partial buckets so the metric producers\nform partial buckets on both app upgrade and removal, but not on\ninstallation of a new app.\n\nAlso, we update StatsCompanionService to also include disabled apps.\n\nBug: 77607583\nTest: Verified unit-tests pass and added new e2e tests.\nChange-Id: I98e1f544d6e6571545ae1581c4cebab807596f51\n"
    },
    {
      "commit": "b142cc8add29c8c97f6134d35873d23db666027c",
      "tree": "84821e80be1a6b2fd9f30d583442bade56f21657",
      "parents": [
        "a926126a8bc89c1a6bd7fa8a76332476eba0d954"
      ],
      "author": {
        "name": "Yangster-mac",
        "email": "yanglu@google.com",
        "time": "Fri Mar 30 15:22:08 2018 -0700"
      },
      "committer": {
        "name": "Yang Lu",
        "email": "yanglu@google.com",
        "time": "Wed Apr 04 15:59:43 2018 +0000"
      },
      "message": "Statsd config TTL\n\nRoughly check the config every hour to see whether the ttl expired.\nIf so, read the config from disk and recreate the metric manager.\n\nTest: statsd test\n\nBUG: b/77274363\n\nChange-Id: I16838afe5bbe966c3a0f638869751f9b59a5a259\n"
    },
    {
      "commit": "faa1af535bf6ede5fcab2e0bad5f6c16908916a9",
      "tree": "01fac7dc0d1609da17104e0778c97432e8a8da5e",
      "parents": [
        "a24ddf58c9b0ba41ee32ce892186ad5b315c9a28"
      ],
      "author": {
        "name": "David Chen",
        "email": "dwchen@google.com",
        "time": "Fri Mar 30 15:14:04 2018 -0700"
      },
      "committer": {
        "name": "David Chen",
        "email": "dwchen@google.com",
        "time": "Tue Apr 03 18:20:40 2018 -0700"
      },
      "message": "Includes annotations with statsd reports.\n\nIt\u0027s tricky to determine the source of the metrics on a device\ncurrently since we can take the union of multiple configs and send\nonly one giant statsd_config into statsd. We will use the int64 field\nto track the sub config id\u0027s and the int32 field to track the version\nfor each sub config, but the fields are named more generically as\nannotations.\n\nThe annotations are available in both the reports and metadata.\n\nTest: Check that all unit-tests pass on marlin-eng\nBug: 77327261\nChange-Id: Ic37c549c8b2991676f69948c515156765c9f5108\n"
    },
    {
      "commit": "c04feba805c5acde92638a062cc13030fc4d3308",
      "tree": "7d29877c09d42c900e904fb422a4d95233ab80ad",
      "parents": [
        "46eef8d0497d357e5fc2a3e63e7150f2b9372f03"
      ],
      "author": {
        "name": "Yangster-mac",
        "email": "yanglu@google.com",
        "time": "Mon Apr 02 14:37:33 2018 -0700"
      },
      "committer": {
        "name": "Yangster-mac",
        "email": "yanglu@google.com",
        "time": "Mon Apr 02 18:12:36 2018 -0700"
      },
      "message": "Move forward the alarm timestamp when config is added to statsd.\n\nTest: statsd test\nBUG: b/77344187\n\nChange-Id: Ieacffaa29422829b8956f2b3fcb2c647c8c3eed9\n"
    },
    {
      "commit": "46eef8d0497d357e5fc2a3e63e7150f2b9372f03",
      "tree": "087f2254e9f1666f459b5de150d8bd185a131549",
      "parents": [
        "fbe387ab8fba4628e51587e0e080d248422122a6",
        "684d195227bf9eaeb21698cbdcf865afb570c454"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Sat Mar 31 03:04:59 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sat Mar 31 03:04:59 2018 +0000"
      },
      "message": "Merge \"E2e test for periodic alarm.\" into pi-dev"
    },
    {
      "commit": "3b826c6075b12915ef3e0e1fdd83c62dd10e4f2e",
      "tree": "d21b443948949ec7b18169f52199fb11adc9576c",
      "parents": [
        "8b60ebc6a69cf28cfdc3a0dcc4ce15031a0b7b38",
        "0dbc7a434345fa318ee129eaa5cf83681de4936b"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Sat Mar 31 01:10:57 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sat Mar 31 01:10:57 2018 +0000"
      },
      "message": "Merge \"Statsd MAX now obeys refractory periods too\" into pi-dev"
    },
    {
      "commit": "0dbc7a434345fa318ee129eaa5cf83681de4936b",
      "tree": "648209a4dc79c5ea9f9af1729596d8f48b59c868",
      "parents": [
        "f50e78d8f790cd1bb5a6cc37dcdad7815857e471"
      ],
      "author": {
        "name": "Bookatz",
        "email": "bookatz@google.com",
        "time": "Fri Mar 30 16:21:17 2018 -0700"
      },
      "committer": {
        "name": "Bookatz",
        "email": "bookatz@google.com",
        "time": "Fri Mar 30 16:21:17 2018 -0700"
      },
      "message": "Statsd MAX now obeys refractory periods too\n\nThe logic of where refractory period enforcement was moved out of the\nanomaly tracker and into the metric\u0027s predictAnomalyTimestamp. It was\ndone for ORING, but not for MAX. This fixes MAX.\n\nBug: 74446029\nTest: adb sync data \u0026\u0026 adb shell data/nativetest64/statsd_test/statsd_test\nChange-Id: I51e43c7c132f424af8fe20a37f2ad10cc55b5989\n"
    },
    {
      "commit": "9fef2594f39474920c8f0552e10566727f9ba57f",
      "tree": "48a478fee5bd56540ce44e7096115f4d377e76e9",
      "parents": [
        "1b7162ad3de05b0e5f6c8666830ea8fb8bef2e3c",
        "5caaa9d8542585e537ac762c35879eb42dd6bbb4"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Mar 30 20:48:09 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Mar 30 20:48:09 2018 +0000"
      },
      "message": "Merge \"Clean up atoms.proto\" into pi-dev"
    },
    {
      "commit": "5caaa9d8542585e537ac762c35879eb42dd6bbb4",
      "tree": "0c6e6efda7a8a10af76d9a3cec1cf203dfb59f9b",
      "parents": [
        "7a33063b39c0a48e57d7146adfc4640a8944adec"
      ],
      "author": {
        "name": "Chenjie Yu",
        "email": "cjyu@google.com",
        "time": "Tue Mar 06 15:48:54 2018 -0800"
      },
      "committer": {
        "name": "Chenjie Yu",
        "email": "cjyu@google.com",
        "time": "Fri Mar 30 10:11:03 2018 -0700"
      },
      "message": "Clean up atoms.proto\n\nchanges are:\n1) for pushed atoms, use attribution node in place of uid when\nappropriate\n2) name changes to be more consistent\n\nBug: 73823969\nTest: manual test\nChange-Id: Iacf7186dbd7a2282f7fe481f43dbbf92e1165b47\n"
    },
    {
      "commit": "6d370f40fe011bc45967b8b9be50717ef6172fbd",
      "tree": "1a9cdcb1a4c245e9136cc270dbad45fce9ee853d",
      "parents": [
        "7a33063b39c0a48e57d7146adfc4640a8944adec"
      ],
      "author": {
        "name": "Chenjie Yu",
        "email": "cjyu@google.com",
        "time": "Sun Mar 25 14:57:30 2018 -0700"
      },
      "committer": {
        "name": "Chenjie Yu",
        "email": "cjyu@google.com",
        "time": "Thu Mar 29 21:54:54 2018 -0700"
      },
      "message": "Add unit test ValueMetricProducer on boundary\n\nMostly to add test to assure the corner cases are covered.\nOne minor logic change is if two true conditions happen, in the case\nwhen following happen:\n(bucket boundary1) -\u003e (condition false) -\u003e (condition true) -\u003e (pull\ntriggered for the boundary1)\nPreviously we take the latest. Now we skip the late boundary pull.\n\nBug: 76384731\nTest: unit test\nChange-Id: I345c2210a58bf03eb91d65742573073d2668358b\n"
    },
    {
      "commit": "1a0a941c20eb746868d0de52e3806f69c74d335f",
      "tree": "6e91ddbbc42dfcb901e6fac4488052fa9a9aeaa6",
      "parents": [
        "d1c5b6695f1f9a3e1ddefbbb5118809b1f76a9bb"
      ],
      "author": {
        "name": "Chenjie Yu",
        "email": "cjyu@google.com",
        "time": "Wed Mar 28 10:07:22 2018 -0700"
      },
      "committer": {
        "name": "Chenjie Yu",
        "email": "cjyu@google.com",
        "time": "Thu Mar 29 00:11:13 2018 -0700"
      },
      "message": "Fix StatsCompanionService pull on bucket ends\n\n+ change StatsPullerManager internal time units to be consistent\n+ use series of alarms for pullers, instead of use setRepeating\n\nBug: 76223345\nBug: 75970648\nTest: cts test\nChange-Id: I9e6ac0ce06541f5ceabd2a8fa444e13d40e36983\n"
    },
    {
      "commit": "684d195227bf9eaeb21698cbdcf865afb570c454",
      "tree": "afe86ecbb7e2eaf39dd9de799d59266a39f949f5",
      "parents": [
        "b3c20232f1c0f0edc81c52fb52bccfcf407f62e4"
      ],
      "author": {
        "name": "Yangster-mac",
        "email": "yanglu@google.com",
        "time": "Sat Mar 24 16:47:16 2018 -0700"
      },
      "committer": {
        "name": "Yangster-mac",
        "email": "yanglu@google.com",
        "time": "Tue Mar 27 13:26:20 2018 -0700"
      },
      "message": "E2e test for periodic alarm.\n\nTest: new test\n\nBUG: b/76281156\nChange-Id: I60cb28baaeec6996e946a7cb3358ec8e0aca80e5\n"
    },
    {
      "commit": "d9afdee26f01d1e0277749959094d9f396799a69",
      "tree": "d6791cb4eafeea9c9a84253149e2757449aec566",
      "parents": [
        "0cf0d1368a8530204229d09b030398df59f66f8e",
        "427d372552490a2c5ac4041fe345b15f69451f57"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Mar 27 18:27:27 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Mar 27 18:27:27 2018 +0000"
      },
      "message": "Merge \"Support sliced condition change in GaugeMetric\" into pi-dev"
    },
    {
      "commit": "427d372552490a2c5ac4041fe345b15f69451f57",
      "tree": "388592ab080b7cfcdd5a3a015b17afa924b19e8c",
      "parents": [
        "32a7c19c5b28623ebc54bedfa06aae5a2929060c"
      ],
      "author": {
        "name": "Yao Chen",
        "email": "yaochen@google.com",
        "time": "Thu Mar 22 15:21:52 2018 -0700"
      },
      "committer": {
        "name": "Yao Chen",
        "email": "yaochen@google.com",
        "time": "Tue Mar 27 09:21:19 2018 -0700"
      },
      "message": "Support sliced condition change in GaugeMetric\n\nTODO: We need CTS to verify the behavior.\n\nBug: 73958484\nTest: statsd_test\nChange-Id: I56406983ddede12bc6a2e12188693a0c51ccae5c\n"
    },
    {
      "commit": "cdc9d9008bc2ccbf35d345557b64c3f0d2f184eb",
      "tree": "7f505cd509d03fee753c516f301027812df88485",
      "parents": [
        "72e895fd9fdff36e891d1fee4d05226502566b9d",
        "be10ddfe46ba6371bcd02cb57a06782e6b18d371"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Mar 27 07:21:21 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Mar 27 07:21:21 2018 +0000"
      },
      "message": "Merge \"Flush the past buckets in anomaly tracker when time jumps forward\" into pi-dev"
    },
    {
      "commit": "be10ddfe46ba6371bcd02cb57a06782e6b18d371",
      "tree": "07868a4251013daca1f00d17952edf83aecc582e",
      "parents": [
        "651ac4d1195c1149d3715355aa8ba291a8fea36c"
      ],
      "author": {
        "name": "Yangster-mac",
        "email": "yanglu@google.com",
        "time": "Tue Mar 13 15:39:51 2018 -0700"
      },
      "committer": {
        "name": "Yangster-mac",
        "email": "yanglu@google.com",
        "time": "Mon Mar 26 18:44:01 2018 -0700"
      },
      "message": "Flush the past buckets in anomaly tracker when time jumps forward\n\nE2e test for count/duration anomaly trackers.\n\nTest: new statsd tests.\n\nBUG: b/74446029\n\nChange-Id: Ia9be0240ba5021d44c1e1f096d67563e9138bb59\n"
    },
    {
      "commit": "35045cbc3422224a49881baa4d96755d8f75c5d0",
      "tree": "e248f3934e827a46f596958ba18c9bfac7ce29a5",
      "parents": [
        "775e291c2e4a033ea8f721a1d7eb38391c5bf9ae"
      ],
      "author": {
        "name": "David Chen",
        "email": "dwchen@google.com",
        "time": "Fri Mar 23 22:21:47 2018 -0700"
      },
      "committer": {
        "name": "David Chen",
        "email": "dwchen@google.com",
        "time": "Sat Mar 24 15:01:04 2018 -0700"
      },
      "message": "Fix uidmap in statsd.\n\nPreviously tried an optimization that results in corrupted proto\noutput. This changes to a safer approach of storing the snapshot data\nin memory and only converting to proto output when the\nProtoOutputStream is provided.\n\nAlso fixes a security issue when trying to invoke triggerUidSnapshot\nsince we forgot to use SCS\u0027 permissions.\n\nTest: Added a unit-test to verify output of StatsLogProcessor.\nBug: 76231867\nChange-Id: Id410ce3505fda9d71caa71942ef3068b55872c66\n"
    },
    {
      "commit": "d50f2ae4875cea32662454090c308bb8c7b622eb",
      "tree": "834c16901640eb9235d4a79ee0e9b3ec34f287a0",
      "parents": [
        "32a7c19c5b28623ebc54bedfa06aae5a2929060c"
      ],
      "author": {
        "name": "Yao Chen",
        "email": "yaochen@google.com",
        "time": "Fri Mar 23 11:10:13 2018 -0700"
      },
      "committer": {
        "name": "Yao Chen",
        "email": "yaochen@google.com",
        "time": "Fri Mar 23 11:10:13 2018 -0700"
      },
      "message": "rename neq_all_string to neq_any_string in statsd_config\n\nBug: 73897465\nTest: statsd_test\nChange-Id: I1d020de873fc26fbb502f0b3487b85fdb3896753\n"
    },
    {
      "commit": "8512630f8baab094201b2d79793bded28cc90789",
      "tree": "07b89ca48ab5ef0b756a552486a7712f9ffc6608",
      "parents": [
        "6a505e2dab3bfb46108e5f30c1ec8d4d4b7db817",
        "9fdd40302e0f4409b2fd4e5a418037c07b42bbe5"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Mar 21 05:34:16 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Mar 21 05:34:16 2018 +0000"
      },
      "message": "Merge \"Allow statsd to be given empty config.\" into pi-dev"
    },
    {
      "commit": "e51af37475a758d5d6ec024d79d9d2b3a7358f85",
      "tree": "389380ed372d71b472b52093f4d59e7247dd3b49",
      "parents": [
        "35a4f4c4a6208774684aa9eaea9f00cbd66f3e22",
        "4beccbe3de7537365856bbd2a34be8d6f226b8b8"
      ],
      "author": {
        "name": "Howard Ro",
        "email": "yro@google.com",
        "time": "Wed Mar 21 00:31:23 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Mar 21 00:31:23 2018 +0000"
      },
      "message": "Merge \"Fix recovery of stats data from previous input while using ProtoOutputStream\" into pi-dev"
    },
    {
      "commit": "9fdd40302e0f4409b2fd4e5a418037c07b42bbe5",
      "tree": "0bbdd77ca2e471151cd6d23ce53a0fce08ced411",
      "parents": [
        "02a4219cb7ff9ad848456903ac939f019d2161fc"
      ],
      "author": {
        "name": "David Chen",
        "email": "dwchen@google.com",
        "time": "Tue Mar 20 14:38:56 2018 -0700"
      },
      "committer": {
        "name": "David Chen",
        "email": "dwchen@google.com",
        "time": "Tue Mar 20 15:56:11 2018 -0700"
      },
      "message": "Allow statsd to be given empty config.\n\nStatsd clients may want to set an empty config temporarily, so it\u0027s\nmore convenient to allow them to set an empty config instead of\nhaving to use the removeConfig and then having to remember to call\nStatsManager#setDataFetchOperation.\n\nTest: Added unit-tests and check they pass on marlin-eng.\nBug: 74997752\nChange-Id: I2e762e5ec01e5a2c9a3469fb330b53fefbd734d6\n"
    },
    {
      "commit": "4beccbe3de7537365856bbd2a34be8d6f226b8b8",
      "tree": "738d70b846789652142014497c50398f8a783d4d",
      "parents": [
        "ebc30594e01f5a873a600483f3b8e233bbb59659"
      ],
      "author": {
        "name": "yro",
        "email": "yro@google.com",
        "time": "Thu Mar 15 19:42:05 2018 -0700"
      },
      "committer": {
        "name": "yro",
        "email": "yro@google.com",
        "time": "Tue Mar 20 15:00:59 2018 -0700"
      },
      "message": "Fix recovery of stats data from previous input while using\nProtoOutputStream\n\n- Specify the length of message to avoid libprotoutil from thinking that\nwe are trying to write bool\n- We only attach the previous dump file to the upload file where config\nkey matches\n- Store ConfigMetricsReport (instead of ConfigMetricsReportList) onto\ndisk\n- Stop use stack after scope in StorageManager\n- Migrate UidMap to use ProtoOutputStream and renaming variables to\nprevent confusion\n\nBug: 74021554\nBug: 75968524\nTest: manual test, statsd_test, CTS tests\nChange-Id: Iedf52633d7f5b985f5a934a3fb5a0c3c3b2e7fd1\n"
    },
    {
      "commit": "f5de606f5139cf21d1198190bda62965dd2028e9",
      "tree": "7986ee17b5281e223498dbab8a5f59e646074872",
      "parents": [
        "a6268f8c9d7e59c77cf8e144ccd21547a1ffaede",
        "8faaa01489d81b815e62e4416e78e4b5500b487a"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Mar 19 18:14:18 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Mar 19 18:14:18 2018 +0000"
      },
      "message": "Merge \"Deletes default allowed_log_sources in statsd.\" into pi-dev"
    },
    {
      "commit": "ad121b9fdc2de38fb79dfd3c7444e00743629f27",
      "tree": "3d7d5046437c8d2879c934c11ed0073a4147e8bd",
      "parents": [
        "0487601e57fa1d808ede432a86337bc1625677a6",
        "6a1d3af7f5167be234cf8b77b927c6b366660bfa"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Mar 19 05:49:27 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Mar 19 05:49:27 2018 +0000"
      },
      "message": "Merge changes I3ffb6e97,I689df136,Ia67a8eb6 into pi-dev\n\n* changes:\n  Statsd: remove DurationAnomalyTracker.resetStorage\n  Statsd AnomalyDetection stopAlarm also checks old\n  Statsd AnomalyDetection improvements\n"
    },
    {
      "commit": "6bf9825b1575bfc3c62ef0a5129f94b6a776ef66",
      "tree": "c7b7c9115869bf497e70ec88fcb8354839cfea04",
      "parents": [
        "d357342a4a761598742f4b1b60f70a4e9b88f997"
      ],
      "author": {
        "name": "Bookatz",
        "email": "bookatz@google.com",
        "time": "Wed Mar 14 10:44:24 2018 -0700"
      },
      "committer": {
        "name": "Bookatz",
        "email": "bookatz@google.com",
        "time": "Fri Mar 16 11:34:21 2018 -0700"
      },
      "message": "Statsd AnomalyDetection improvements\n\nVarious fixes and improvements to statsd\u0027s anomaly detection.\n\nBug: 74607818\nTest: make statsd_test \u0026\u0026 adb sync data \u0026\u0026 adb shell data/nativetest64/statsd_test/statsd_test\n\nChange-Id: Ia67a8eb6da0ea9293f698949e1565f7f024a7cb9\n"
    },
    {
      "commit": "8faaa01489d81b815e62e4416e78e4b5500b487a",
      "tree": "97127c6dd26878d62a543770ec791c8822de3244",
      "parents": [
        "edd7215f1c719e49d3ceb4f60e4f06b83402a51b"
      ],
      "author": {
        "name": "David Chen",
        "email": "dwchen@google.com",
        "time": "Wed Feb 28 15:54:36 2018 -0800"
      },
      "committer": {
        "name": "David Chen",
        "email": "dwchen@google.com",
        "time": "Thu Mar 15 17:45:58 2018 -0700"
      },
      "message": "Deletes default allowed_log_sources in statsd.\n\nWe should fail right away if someone forgets to set this field\ninstead of setting default values since this may lead to hard to\nexplain bugs in the future (eg, why isn\u0027t systemui logging an atom\nto a config).\n\nBug: 74608359\nTest: Verified unit-tests still pass on marlin-eng.\nChange-Id: Ibd8a6ccbc5cc8d2dfb8a1577c64bf9b49822a2c3\n"
    },
    {
      "commit": "f384b900498b552c776931c8873e4bd03af36fe5",
      "tree": "e48bef946e80a43e27e37c61297a1bf0ee93914e",
      "parents": [
        "50f118a1214d00a4be1cadc9efb2bcf787927f3f"
      ],
      "author": {
        "name": "David Chen",
        "email": "dwchen@google.com",
        "time": "Wed Mar 14 18:36:45 2018 -0700"
      },
      "committer": {
        "name": "David Chen",
        "email": "dwchen@google.com",
        "time": "Thu Mar 15 13:33:04 2018 -0700"
      },
      "message": "Removes stats_log proto from uid map in statsd.\n\nWe don\u0027t need to parse the proto of uid map, so we use the\nProtoOutputStreame class to generate the binary form of the proto\noutput that\u0027s needed for parsing the uid map data.\n\nTest: Verified unit-tests still pass.\nBug: 74010813\nChange-Id: Ia2f7572f3b78bb6f7b60e8b14cf5d65428469ab6\n"
    },
    {
      "commit": "a825c8ee5d3b0c2dac954f2994d70968759eb1d2",
      "tree": "d9356cb1d32e87a3fb320501bec4ede53501ca84",
      "parents": [
        "9ba6ed4d129918848e8e4bada20478beacd7c666",
        "e06cfd777a501eca17f8dd796b32ad61002c5875"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Mar 15 02:27:15 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Mar 15 02:27:15 2018 +0000"
      },
      "message": "Merge \"Support slicing by chain.\" into pi-dev"
    },
    {
      "commit": "e06cfd777a501eca17f8dd796b32ad61002c5875",
      "tree": "3622c797a04cc76d2a68ac0ca9bd014aee22611d",
      "parents": [
        "d357342a4a761598742f4b1b60f70a4e9b88f997"
      ],
      "author": {
        "name": "Yangster-mac",
        "email": "yanglu@google.com",
        "time": "Sat Mar 10 23:22:59 2018 -0800"
      },
      "committer": {
        "name": "Yangster-mac",
        "email": "yanglu@google.com",
        "time": "Wed Mar 14 15:36:24 2018 -0700"
      },
      "message": "Support slicing by chain.\n\nBUG: b/73975181\n\nTest: statsd test\nChange-Id: I913ae0f68ff21ed0703bb5da9c60d3eaa3bf5981\n"
    },
    {
      "commit": "c7ce1a09783e7b1d32576d381e9bfe312c57c089",
      "tree": "33ae598c75afc5773d5fa796f40e3fea98c5b8f6",
      "parents": [
        "a9e73469c59df4ea596d3872e90b1d13fcbac779",
        "3fa5d7fb236f263125bc6364ea693e5e9f122976"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Mar 14 19:03:06 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Mar 14 19:03:06 2018 +0000"
      },
      "message": "Merge \"Add wall clock timestamp for ConfigMetricsReport and gauge atoms.\" into pi-dev"
    },
    {
      "commit": "3f5ab3ff1d66e53c26e3a5951dc0804bca5467a8",
      "tree": "d56380984386bb9d0fc93f7a2a5a8b981cf2d7bf",
      "parents": [
        "b90670cf1752d79ffed020bf4653b300c417d57b"
      ],
      "author": {
        "name": "Bookatz",
        "email": "bookatz@google.com",
        "time": "Tue Mar 13 12:18:21 2018 -0700"
      },
      "committer": {
        "name": "Bookatz",
        "email": "bookatz@google.com",
        "time": "Tue Mar 13 12:18:21 2018 -0700"
      },
      "message": "Statsd: Remove storage of bucketNum\n\nPast buckets had a field mBucketNum, storing the\n\"bucket number\" they represented. Currently, the concept\nof bucket number is used by Anomaly Detection (although this\nmay not be necessary), but these stored values are not used at all,\nso removing them will save RAM.\n\nTest: statsd tests still pass\nBug: 74607818\nChange-Id: Iacc343bc39c5035f6e2f236c03de1d91606eff4c\n"
    },
    {
      "commit": "3fa5d7fb236f263125bc6364ea693e5e9f122976",
      "tree": "5815d5d4dfd07d906f79d65346651ba875c2ee9b",
      "parents": [
        "3dc91c1426ef4da53ea85039c047d25b2de4ef47"
      ],
      "author": {
        "name": "Yangster-mac",
        "email": "yanglu@google.com",
        "time": "Sat Mar 10 21:50:27 2018 -0800"
      },
      "committer": {
        "name": "Yangster-mac",
        "email": "yanglu@google.com",
        "time": "Sat Mar 10 22:25:28 2018 -0800"
      },
      "message": "Add wall clock timestamp for ConfigMetricsReport and gauge atoms.\n\nFix the bug when serializing multiple atoms in gauge metric\n\nBUG: b/74159560\n\nTest: new test for ALL_CONDITION_CHANGES sampling method.\nChange-Id: I6d33c1efbac92b6e13be2d64c323e090cb1f84aa\n"
    },
    {
      "commit": "13fb7e4eeaf7aee408821afe7ee55a5167e49e59",
      "tree": "a9276dfa03587fdaae989e4090d8dacbafd6778d",
      "parents": [
        "c8a6305ddf61bb87bad9639cace9307886597714"
      ],
      "author": {
        "name": "Yangster",
        "email": "yanglu@google.com",
        "time": "Wed Mar 07 17:30:49 2018 -0800"
      },
      "committer": {
        "name": "Yangster",
        "email": "yanglu@google.com",
        "time": "Wed Mar 07 17:36:07 2018 -0800"
      },
      "message": "Statsd cpu optimizaton\n\n- cache the changed dimensions in condition tracker.\n- avoid query condition wizard when unnecessary.\n- avoid copy dimension keys in condition key generation.\n\nTest: statsd tests.\n\nBUG: b/73959649\nChange-Id: I17d68e2a82643de3f421309841e75f84c6fd8f43\n"
    },
    {
      "commit": "ec67661bdfe1814039f625575176678219acc7b1",
      "tree": "e73405411d9c04b9c9932fa32a3bfb0a6a0aca0f",
      "parents": [
        "8c76ca03418884d8e60bda1f5695d44563b20007"
      ],
      "author": {
        "name": "Chenjie Yu",
        "email": "cjyu@google.com",
        "time": "Wed Mar 07 09:19:17 2018 -0800"
      },
      "committer": {
        "name": "Chenjie Yu",
        "email": "cjyu@google.com",
        "time": "Wed Mar 07 21:43:00 2018 +0000"
      },
      "message": "Refactor cpu stats pullers\n\nuse same cpu stats readers with BatteryStats so that\n1) both throttle to avoid too frequent pulls\n2) cached value is served within throttle interval to avoid double\npulling by both statsd and BatteryStats\n\nTo run unit tests:\nbit\nFrameworksCoreTests:com.android.internal.os.KernelUidCpuFreqTimeReaderTest\nbit\nFrameworksCoreTests:com.android.internal.os.KernelUidCpuClusterTimeReaderTest\nbit\nFrameworksCoreTests:com.android.internal.os.KernelUidCpuActiveTimeReaderTest\n\nmake -j56 statsd_test \u0026\u0026 adb sync data \u0026\u0026 adb shell\n/data/nativetest64/statsd_test/statsd_test\n\nTest: cts test, unit test\nBug: 73745189\nBug: 73780619\nBug: 73360959\n\nMerged-In: I10a9bc91ca67fa812f4cd71c4fbd73c1a5ba580e\n\nChange-Id: I10a9bc91ca67fa812f4cd71c4fbd73c1a5ba580e\n"
    },
    {
      "commit": "b603fb06ba2dfd459f2e9043f3e5432d23834704",
      "tree": "c7199e8f03f1e0caf7738ef5fdccc94a9f7aeb96",
      "parents": [
        "9055c1b6afc2b1afc7b3bb112d994572f858a216",
        "06dba5d79c096b02d3ba6fb73e64451ff12e388d"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Mar 02 23:38:21 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Mar 02 23:38:21 2018 +0000"
      },
      "message": "Merge \"Add API to let metrics directly drop data without writing to an output.\""
    },
    {
      "commit": "644e15d5bd476009178bdfb16e0a4ed94255f3e6",
      "tree": "e33bad2f9ec243feda9c2106362d740b42c50e02",
      "parents": [
        "8e4419a087a6112d1a656636175fe765d0cd1916",
        "20e9e6231a1aba79b4e5ae47f3ccfb066920e60f"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Mar 02 19:41:56 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Mar 02 19:41:56 2018 +0000"
      },
      "message": "Merge \"Reduce statsd binary size from 730KB-\u003e 664KB\""
    },
    {
      "commit": "06dba5d79c096b02d3ba6fb73e64451ff12e388d",
      "tree": "b9b61d75abe1019a931afaa6428f0b3a16482126",
      "parents": [
        "aec6950118319e93084f4c3d2ba6087e8f7e15df"
      ],
      "author": {
        "name": "Yao Chen",
        "email": "yaochen@google.com",
        "time": "Fri Jan 26 13:38:16 2018 -0800"
      },
      "committer": {
        "name": "Yao Chen",
        "email": "yaochen@google.com",
        "time": "Thu Mar 01 15:22:55 2018 -0800"
      },
      "message": "Add API to let metrics directly drop data without writing to an output.\n\n+ Metrics will do flushIfNeeded() to correctly move the clock and informing\n  AnomalyTracker the past bucket info, and then clear past buckets.\n\n+ We will still keep the current bucket data for the validity of the future metrics.\n\nBug: 70571383\nTest: statsd_test\nChange-Id: Ib13c45574974e7b4e82bd8f305091dc93bda76f5\n"
    },
    {
      "commit": "580ea321b16c71ddec515553761d6f37359bd3a0",
      "tree": "bbc7c757480eac4e3db44e6be7bd389cfc8369a0",
      "parents": [
        "aec6950118319e93084f4c3d2ba6087e8f7e15df"
      ],
      "author": {
        "name": "Yao Chen",
        "email": "yaochen@google.com",
        "time": "Mon Feb 26 14:21:54 2018 -0800"
      },
      "committer": {
        "name": "Yao Chen",
        "email": "yaochen@google.com",
        "time": "Wed Feb 28 16:57:03 2018 -0800"
      },
      "message": "Add StateTracker.\n\nStateTracker is a special condition tracker that\u0027s based on a state atom.\nState atoms are annotated in atoms.proto.\n\nThe rules for StateTracker:\n 1. must not have \"stop\". must have \"dimension\"\n 2. must be based on a state atom.\n 3. it must have the all primary fields and the exclusive state field in its dimension.\n\n For example UidProcessStateTracker, will have output dimension {uid, state}.\n\nTest: unit tests added.\nChange-Id: I6b77e58e9fabe61f7326daf929577d8b2cfbf27b\n"
    },
    {
      "commit": "20e9e6231a1aba79b4e5ae47f3ccfb066920e60f",
      "tree": "6489cfba8c2a90806b580ff15f076afeec1d82d6",
      "parents": [
        "aec6950118319e93084f4c3d2ba6087e8f7e15df"
      ],
      "author": {
        "name": "Yao Chen",
        "email": "yaochen@google.com",
        "time": "Wed Feb 28 11:18:51 2018 -0800"
      },
      "committer": {
        "name": "Yao Chen",
        "email": "yaochen@google.com",
        "time": "Wed Feb 28 16:20:54 2018 -0800"
      },
      "message": "Reduce statsd binary size from 730KB-\u003e 664KB\n\n1. StatsdStats does not use the proto object in memory anymore.\n2. lite_static -\u003e lite\n3. don\u0027t use sstream\n\nBug: 72129300\nTest: statsd_test\n\nChange-Id: I8a5adaf222d4d5034e8bf115215fb6dd5f042cac\n"
    },
    {
      "commit": "99e8972919da38a7981021f949e83be19adcc602",
      "tree": "5ffa9579de74b13aa09ca85069e1ba8919996755",
      "parents": [
        "69f99c8e1f10add1d2d1ef72978afbc46fe5faf3",
        "9b1140eecdf1b7c0ce56289e91d945312eceebea"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Feb 28 04:50:17 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Feb 28 04:50:17 2018 +0000"
      },
      "message": "Merge \"Add the option to match a whitelist of strings in FieldValueMatcher.\""
    },
    {
      "commit": "9b1140eecdf1b7c0ce56289e91d945312eceebea",
      "tree": "4f5cfc57ec3838efbb8d788fe22f11495fd2e017",
      "parents": [
        "3f8237f356ee03712ac7379aa7a173991f3017ce"
      ],
      "author": {
        "name": "Yao Chen",
        "email": "yaochen@google.com",
        "time": "Tue Feb 27 10:55:54 2018 -0800"
      },
      "committer": {
        "name": "Yao Chen",
        "email": "yaochen@google.com",
        "time": "Tue Feb 27 14:52:31 2018 -0800"
      },
      "message": "Add the option to match a whitelist of strings in FieldValueMatcher.\n\n+ This is useful when we want to build Anomaly detection on wakelocks, but want to whitelist\nwakelocks held by some apps that are whitelisted. It reduces the number of matchers needed\nin such a config.\n\n+ Also added the ability to match an AID by string name.\n\nBug: 73897465\nTest: unit tests added.\nChange-Id: I19315ae4d7d27fc467655d3a29866049cd8c9a2b\n"
    },
    {
      "commit": "932ececa1674c59a8da9f3e32d2651e781b86fc4",
      "tree": "a4a50f201dcf483eb24deacccc12479aff097757",
      "parents": [
        "f34ad9509df18aff1f36123b839c62003216245c"
      ],
      "author": {
        "name": "Yangster-mac",
        "email": "yanglu@google.com",
        "time": "Thu Feb 01 10:23:52 2018 -0800"
      },
      "committer": {
        "name": "Yangster-mac",
        "email": "yanglu@google.com",
        "time": "Tue Feb 27 13:30:48 2018 -0800"
      },
      "message": "Alarm: wakes up statsd and notifies the subscribers.\n\nTest: manually tested it.\nChange-Id: Id796a68976aeb1611183023ba4e9c6a8b8c44bb8\n"
    },
    {
      "commit": "868688ed1610b55461175db752bf4ef1900f7fcc",
      "tree": "eee2c51ff18348ca27429c431c9729e38653c819",
      "parents": [
        "2cb882d61a6f213eaf231f106c8aa735ca28ccfc",
        "9c1debe330006b2b4d5c08a55905789c57369609"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Feb 22 05:36:45 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Feb 22 05:36:45 2018 +0000"
      },
      "message": "Merge \"Add annotation to atoms that represent a state change in atoms.proto\""
    },
    {
      "commit": "9c1debe330006b2b4d5c08a55905789c57369609",
      "tree": "ec02b691f65a16d75d5cee817b404012706ea961",
      "parents": [
        "75c515effa72b2e7af774ee2c513cff7ec1dbd0e"
      ],
      "author": {
        "name": "Yao Chen",
        "email": "yaochen@google.com",
        "time": "Mon Feb 19 14:39:19 2018 -0800"
      },
      "committer": {
        "name": "Yao Chen",
        "email": "yaochen@google.com",
        "time": "Wed Feb 21 16:46:56 2018 -0800"
      },
      "message": "Add annotation to atoms that represent a state change in atoms.proto\n\n+ A state change atom can have one exclusive state field, and any\n  number of primary key fields.\n\n  When there is primary key in the atom, it means the state belongs to the primary key.\n  For example,\n  message UidProcessStateChanged {\n    optional int32 uid \u003d 1 [(stateFieldOption).option \u003d PRIMARY];\n    optional android.app.ProcessStateEnum state \u003d 2 [(stateFieldOption).option \u003d EXCLUSIVE];\n  }\n\n  When there is no primary key fields in the atom, the state is global.\n  For example,\n  message ScreenStateChanged {\n     optional android.view.DisplayStateEnum state \u003d 1 [(stateFieldOption).option \u003d EXCLUSIVE];\n  }\n\n+ The annotation is consumed by stats_log_api_gen to generate a static map from the state\n  atoms to its primary fields, and exclusive fields\n\n+ stats_log.proto is splitted into 2 proto files, because statsd needs proto lite, and c++\n  lite proto library cannot properly ignore the field options which requires full proto.\n\n This CL doesn\u0027t change any logic in the statsd yet. A separate CL will use the field option\n information to correctly track the state.\n\nTest: added unit tests in stats_log_api_gen_test. and statsd_test pases.\nChange-Id: I9e8a979fe81ba60efd4d854bb7087ce4b2b147ec\n"
    },
    {
      "commit": "3d7f2d40d4c1f78d5bb5c8941dc71bf8d2dcded8",
      "tree": "f21e107daa714330d1681417662c53b91cd172a6",
      "parents": [
        "4550becca1055ba3faaead5bc209a4e112987683",
        "2e414b99f44f00000d84765b3a095490415695af"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Feb 20 23:38:00 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Feb 20 23:38:00 2018 +0000"
      },
      "message": "Merge \"Adds anomaly detection to max duration metrics.\""
    },
    {
      "commit": "2e414b99f44f00000d84765b3a095490415695af",
      "tree": "1233cb7da17d422af1030247fd2d3300e7d72952",
      "parents": [
        "f4546316cdf70079e944729c6e2fd63ca066bc17"
      ],
      "author": {
        "name": "David Chen",
        "email": "dwchen@google.com",
        "time": "Mon Feb 12 17:24:40 2018 -0800"
      },
      "committer": {
        "name": "David Chen",
        "email": "dwchen@google.com",
        "time": "Tue Feb 20 13:45:25 2018 -0800"
      },
      "message": "Adds anomaly detection to max duration metrics.\n\nStatsd supports anomaly detection for max duration, which is\nconceptually like asking for an anomaly on the current duration.\nThere was a bug previously in the logic for max duration since we\nrecorded a duration every time a dimension went into pause. Now, we\nonly record a max duration when the dimension goes into stop.\n\nWhen a dimension inside the MaxDurationTracker leaves the started\nstate, we need to check if we still need to keep an anomaly alarm\nset. It\u0027s possible that we just immediately set an alarm with the\nsame timestamp as what was just deleted.\n\nTest: Added some unit-tests and tested on marlin-eng.\nChange-Id: I09c82cd266b4cc6e1c893ad166e602bf08baca0e\n"
    },
    {
      "commit": "db15052ae2ea34807644e2e97afa908e43ae59fd",
      "tree": "1d98487a749efcd2dcb89cf6d2c0de9170d2605c",
      "parents": [
        "d69c65f368e01893618a28520a6849776e70789b",
        "59cc24dbfda4148c1f5ef4de9c8763caa8672443"
      ],
      "author": {
        "name": "Howard Ro",
        "email": "yro@google.com",
        "time": "Thu Feb 15 00:18:22 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Feb 15 00:18:22 2018 +0000"
      },
      "message": "Merge \"Add a guardrail to limit minimum bucket duration to be 5 minutes except when configured through adb command\""
    },
    {
      "commit": "2f5b9c9b03a3945945e5b4f09c696c25bcd3ddb5",
      "tree": "6a1aca0f52415e0baf71be63c3a6aeb495b39808",
      "parents": [
        "f979bcfaba477a5a73bed76b178f1cdeb46dd1d9",
        "0b5c90cd8ce9ccc6cb1a431e52f18225d60a5cd6"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Feb 14 19:18:39 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Feb 14 19:18:39 2018 +0000"
      },
      "message": "Merge \"Updates statsd atoms.proto with small changes.\""
    },
    {
      "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": "59cc24dbfda4148c1f5ef4de9c8763caa8672443",
      "tree": "0d59c3b09bffc9a9c23ba0808e9dbb2df3d84ac3",
      "parents": [
        "147e799606a642d1e5a779c44550260890f6c2ce"
      ],
      "author": {
        "name": "yro",
        "email": "yro@google.com",
        "time": "Tue Feb 13 20:17:32 2018 -0800"
      },
      "committer": {
        "name": "yro",
        "email": "yro@google.com",
        "time": "Tue Feb 13 20:26:31 2018 -0800"
      },
      "message": "Add a guardrail to limit minimum bucket duration to be 5 minutes except\nwhen configured through adb command\n\nBug: 73287251\nTest: statsd_test\nChange-Id: Iee51fedbaabb2c1f534a6edef3c564da88ef658b\n"
    },
    {
      "commit": "0b5c90cd8ce9ccc6cb1a431e52f18225d60a5cd6",
      "tree": "6c75e799dfafb3daf388f7ef38d1d0723cf536ea",
      "parents": [
        "85a6db68f1860bbaacc1cc21e29c4f61aabe0abb"
      ],
      "author": {
        "name": "David Chen",
        "email": "dwchen@google.com",
        "time": "Thu Jan 25 16:51:49 2018 -0800"
      },
      "committer": {
        "name": "David Chen",
        "email": "dwchen@google.com",
        "time": "Tue Feb 13 16:17:25 2018 -0800"
      },
      "message": "Updates statsd atoms.proto with small changes.\n\nRenames the apphook atom to be more descriptive. Renames time\nsuffixes to match more clear convention (ms and msec are ambiguous).\n\nAdds a field to CPU active time that\u0027s required for the metrics\nto be usable.\n\nTest: Test that statsd can still build.\nChange-Id: I94866510738db994e8d757260f30e599ba995dbd\n"
    },
    {
      "commit": "14e0d854d75a2f30cb544c42998dc6e626d1cf48",
      "tree": "6a469c98e09ce7fcb6836aeca303ffe88192c080",
      "parents": [
        "501406650aea091ada396d6f71d7dc2264a2a9b1"
      ],
      "author": {
        "name": "Bookatz",
        "email": "bookatz@google.com",
        "time": "Tue Feb 13 15:55:14 2018 -0800"
      },
      "committer": {
        "name": "Bookatz",
        "email": "bookatz@google.com",
        "time": "Tue Feb 13 15:55:14 2018 -0800"
      },
      "message": "Statsd_test update for rounding up alarms\n\nIn ag/3580546 we now round up when setting anomaly alarms. This means\nthe test needs to be updated by 1s in one place.\n\nTest: make statsd_test \u0026\u0026 adb sync data \u0026\u0026 adb shell data/nativetest64/statsd_test/statsd_test\nChange-Id: Ibd3548833dcc2c1b9ca3a1da2c183bb771799775\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": "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": "27785a8a4a684c831c18f7189a6fa1b98c3573e6",
      "tree": "dd4bac285defe0f60e912970cf1d0bc606357118",
      "parents": [
        "c326b50fa009be5e30797f37c23ec7fa2c3c29aa"
      ],
      "author": {
        "name": "David Chen",
        "email": "dwchen@google.com",
        "time": "Fri Jan 19 17:06:45 2018 -0800"
      },
      "committer": {
        "name": "David Chen",
        "email": "dwchen@google.com",
        "time": "Fri Feb 02 13:30:10 2018 -0800"
      },
      "message": "Partial buckets on app upgrade and fix duration.\n\nStatsd will create partial buckets in all metrics producers when an\napp is upgraded so that we can separate metrics between different\nversions of an app. By looking at the uid map changes, we can tell\nwhich app versions belong to a bucket; for metrics that are not\naffected by an app version, we can instead join the buckets together.\n\nTo simplify the logic, the ends of the full buckets are always\naligned to when the metric producers were created. These boundaries\nare computed on the fly by using the bucket number and the metric\nproducers\u0027 start times.\n\nWe keep the anomaly trackers to only be given full buckets; we buffer\nthe partial buckets within each metric producer.\n\nDuration metric\u0027s MAX_SPARSE is fixed to be implemented as such. In\naddition, after further discussion, we find anomaly detection on\nMAX_SPARSE to be unnecessary, so this functionality is removed.\n\nTest: Unit-tests added and modified, passed on marlin-eng.\nChange-Id: I5ff7a9c7f05c406e9faf400c6a39162970ded102\n"
    },
    {
      "commit": "9369446f0b04945d6674550728ae81196d6fb5c2",
      "tree": "6d333c7fb29ce69e4262b37eab21daee75d03ccb",
      "parents": [
        "321ef3a5afb4cb9a9b47c5e028b43261b4fc8370"
      ],
      "author": {
        "name": "Yangster-mac",
        "email": "yanglu@google.com",
        "time": "Mon Jan 22 20:49:31 2018 -0800"
      },
      "committer": {
        "name": "Yangster-mac",
        "email": "yanglu@google.com",
        "time": "Tue Jan 30 13:33:57 2018 -0800"
      },
      "message": "Support dimension in condition in metric producers.\n\nTest: added e2e tests for count/duration metrics sliced by fields in condition and with/without links.\n\nChange-Id: Ie34deba68e6780abdde458be3f0ce5284e76a1a2\n"
    },
    {
      "commit": "641e29df46c94015abea0ad2ffc202dd8e8325d0",
      "tree": "2bc97ed8868b23246aef01cbf814f941869aa947",
      "parents": [
        "4307efc89eccc773a50036e83ccec734b23bdb95",
        "34ea1103a0faa0e01df0e2b0ac1ce98e7ec3e3f1"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Jan 30 19:08:41 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jan 30 19:08:41 2018 +0000"
      },
      "message": "Merge \"Extend gauge metric to support memory metric.\""
    },
    {
      "commit": "34ea1103a0faa0e01df0e2b0ac1ce98e7ec3e3f1",
      "tree": "19a58dee26e2fdf029ba45e8a3b218511b509f23",
      "parents": [
        "752d7ca14c668df04a25e1565d5058ba7dc9ffe8"
      ],
      "author": {
        "name": "Yangster-mac",
        "email": "yanglu@google.com",
        "time": "Mon Jan 29 12:40:55 2018 -0800"
      },
      "committer": {
        "name": "Yangster-mac",
        "email": "yanglu@google.com",
        "time": "Tue Jan 30 09:14:54 2018 -0800"
      },
      "message": "Extend gauge metric to support memory metric.\n\nTest: statd unit test passed.\n\nTest: statsd unit test passed\nChange-Id: I2e3f26563678ae77d44afe168454b6d1ea449f3a\n"
    },
    {
      "commit": "7ba8fc357e44ee3bb8e614c202852a1c46a9d4a8",
      "tree": "6d5a63f0653abb15820b5340e6594e9de5cb1e1e",
      "parents": [
        "94713885ae90fc925ac9be38311269c8527f490e"
      ],
      "author": {
        "name": "Yangster-mac",
        "email": "yanglu@google.com",
        "time": "Wed Jan 24 16:16:46 2018 -0800"
      },
      "committer": {
        "name": "Yang Lu",
        "email": "yanglu@google.com",
        "time": "Fri Jan 26 23:17:02 2018 +0000"
      },
      "message": "Cpu usage optimization:\n1/ Avoid unnecessary field/dimension proto construction.\n2/ use unordered_map for slicing.\n3/ Use dimension fields to compare dimension keys.\n\nTest: all statsd tests passed.\nChange-Id: I2f74f78589b7f6ecd0803a2ead822b8d0399f334\n"
    },
    {
      "commit": "1a1b0464cb43903ed540f4c43fd423b16e398c04",
      "tree": "38d855525144f027e91afcfc2e0827bd531499ce",
      "parents": [
        "a70703175c1f5bcdfea44e5f665c51457a88b126"
      ],
      "author": {
        "name": "Bookatz",
        "email": "bookatz@google.com",
        "time": "Fri Jan 12 11:47:03 2018 -0800"
      },
      "committer": {
        "name": "Bookatz",
        "email": "bookatz@google.com",
        "time": "Thu Jan 25 15:47:57 2018 -0800"
      },
      "message": "Statsd and frameworks reference proto enums\n\nFor frameworks constants that don\u0027t have intrinsic meaning (i.e. their actual\nvalue and order don\u0027t matter), so that it is unlikely that their values\nwill be changed:\nThis cl introduces proto enums representing some constants found in\nthe Android codebase, and connects the two.\n\nBy using the Proto enum as the source-of-truth, it means that Java and\nproto can be kept in sync. Otherwise, when the Java frameworks code\nchanges, it silently breaks the protos from working properly, since the enums\nare wrong. By having the Java code reference the proto enums, it ensures\nthat everything is in sync. The values of the constants are unchanged.\nBut future changes to these constants will need to be done in the proto\nfile, which the Java file merely references.\n\nThe protos are necessary for incidentd and statsd and, in the future,\npossibly dumpsys. In this way, the logging mechanism is much less likely\nto get broken when new constants are added, and we can be ensured that\nthe logging accurately reflects the underlying codebase.\n\nBug: 69478930\nTest: cts-tradefed run cts-dev -m CtsStatsdHostTestCases\nTest: cts-tradefed run cts-dev -m CtsIncidentHostTestCases\nChange-Id: If79032c34b2799db1e3e70cb47b1312fd72092b9\n"
    },
    {
      "commit": "cfc311d2f098de441bb2eeb7d27ea158773e281b",
      "tree": "3df06360fb7023ced8a9ee92d5a805408f560a51",
      "parents": [
        "70553693523fe3c770a34d634241465f9e6e3bf9"
      ],
      "author": {
        "name": "David Chen",
        "email": "dwchen@google.com",
        "time": "Tue Jan 23 17:55:54 2018 -0800"
      },
      "committer": {
        "name": "David Chen",
        "email": "dwchen@google.com",
        "time": "Tue Jan 23 18:04:03 2018 -0800"
      },
      "message": "Statsd always includes snapshot of uid map.\n\nStatsd will contain at least one snapshot of the uid map. The\nprevious design was not very robust in case a snapshot was missing.\n\nAlso fixes subtle bug with updating the isolated uid mapping since\nthis should always be kept up to date even if there are no metrics\nbeing used (since metrics may be added later after the isolated uid\nwas created).\n\nTest: Checked that unit-tests pass on marlin-eng.\nChange-Id: I99754ed9016d980564e409b0946a46b398fd12b7\n"
    },
    {
      "commit": "5e1f854620ecf48febb6ef8ddc3bff856efda7b1",
      "tree": "0820ad826cee20a6677afaa4184fe69b417e8a1b",
      "parents": [
        "bf2d3fa9b98c0deb05333c6779ee714e49130452",
        "2c6dc474acc3087c273cd2501d0769458a769f40"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Jan 19 17:39:57 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jan 19 17:39:57 2018 +0000"
      },
      "message": "Merge \"Rename the dimension_in_what/condition as fields_in_what/condition in MetricConditionLink proto.\""
    },
    {
      "commit": "2c6dc474acc3087c273cd2501d0769458a769f40",
      "tree": "e8f4cc3be750bbad72c3e84ef2b84a510c83cfe8",
      "parents": [
        "940ba0c8fe9f24e2696f4910262be098bb152fc1"
      ],
      "author": {
        "name": "Yangster-mac",
        "email": "yanglu@google.com",
        "time": "Thu Jan 18 16:17:43 2018 -0800"
      },
      "committer": {
        "name": "Yangster-mac",
        "email": "yanglu@google.com",
        "time": "Thu Jan 18 16:17:43 2018 -0800"
      },
      "message": "Rename the dimension_in_what/condition as fields_in_what/condition in MetricConditionLink proto.\n\nTest: statsd cts tests passed.\nChange-Id: I4c21b0da3d153c8d0c368a78647c44699a3161a5\n"
    },
    {
      "commit": "5503f5caae9496585da928a85c563ee28e683496",
      "tree": "d0d0a67eb91c9e0d7f1b376174383320de024810",
      "parents": [
        "940ba0c8fe9f24e2696f4910262be098bb152fc1"
      ],
      "author": {
        "name": "Yangster-mac",
        "email": "yanglu@google.com",
        "time": "Mon Jan 15 23:20:44 2018 -0800"
      },
      "committer": {
        "name": "Yangster-mac",
        "email": "yanglu@google.com",
        "time": "Thu Jan 18 14:51:51 2018 -0800"
      },
      "message": "condition dimension query.\n\nTest: Modified the metric link test to query a subset of the predicate/condition dimensions.\n\nChange-Id: I693f14e0b11693fc8ee0bf4fc550977c20d31f71\n"
    },
    {
      "commit": "2c41460bc81f8f6139afe387e7ad85e5d9f32104",
      "tree": "1425b838b551d17f446260fd529ca2364471e678",
      "parents": [
        "7bd63192154dc5e75b3331b1f25009e448cac5f3",
        "6e304ec6901484157b9cae1cafc5713a825720bc"
      ],
      "author": {
        "name": "Howard Ro",
        "email": "yro@google.com",
        "time": "Thu Jan 18 19:38:38 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jan 18 19:38:38 2018 +0000"
      },
      "message": "Merge \"Reinstate configs from disk across boots by fixing bugs\""
    },
    {
      "commit": "468ff04fd4cb43a384a3d4948cccd4438be7202a",
      "tree": "6211636e6d6723ac6d65923ca7d2251e04c432f6",
      "parents": [
        "5736685560ebdacd9c9ab4205014f2298c08b523"
      ],
      "author": {
        "name": "Yangster-mac",
        "email": "yanglu@google.com",
        "time": "Wed Jan 17 12:26:34 2018 -0800"
      },
      "committer": {
        "name": "Yangster-mac",
        "email": "yanglu@google.com",
        "time": "Wed Jan 17 21:19:45 2018 -0800"
      },
      "message": "Proto change for dimension from condition.\n\nTest: all statsd unit tests and cts tests passed.\n\nChange-Id: I955143aca7c76e2e22a10d7ba42eb797bd32e147\n"
    },
    {
      "commit": "6e304ec6901484157b9cae1cafc5713a825720bc",
      "tree": "30071b40565169b7650ecb2a0ab89ac05e6102de",
      "parents": [
        "b01e18c3eec608f737ab4dcc280224a389750ec1"
      ],
      "author": {
        "name": "yro",
        "email": "yro@google.com",
        "time": "Tue Jan 16 21:00:30 2018 -0800"
      },
      "committer": {
        "name": "yro",
        "email": "yro@google.com",
        "time": "Wed Jan 17 13:44:34 2018 -0800"
      },
      "message": "Reinstate configs from disk across boots by fixing bugs\n\n- Update configName to configID in StorageManager reflecting ag/3410772\n- Fix a bug of using strtok destructivelyand correctly parse file name\n- Fix a unit test to call StartupForTest of config manager\n\nBug: 70667694\nTest: statsd, statsd_test\nChange-Id: If32c02982d1f0c509bdd4e6f445924257bbc074b\n"
    },
    {
      "commit": "87718e283a62660eaa0e39fd780c97a290da988f",
      "tree": "23c2899a0c1228fb19d7a12fc875fac204b4e0c6",
      "parents": [
        "278050ed4e63a2d68547336f8ecd5501ed29eddb"
      ],
      "author": {
        "name": "Yangster-mac",
        "email": "yanglu@google.com",
        "time": "Thu Jan 11 16:16:26 2018 -0800"
      },
      "committer": {
        "name": "Yangster-mac",
        "email": "yanglu@google.com",
        "time": "Mon Jan 15 20:41:08 2018 -0800"
      },
      "message": "Gauge metric e2e test\n\nTest: new test passed\nChange-Id: I6a8bceb43fbb6e7b82f47951e71b5620779f2ceb\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": "d6808dc0c00ba45fd589449647f792daf9fa8126",
      "tree": "e0437e8d8ac2e63f4f9b0502825921a569703942",
      "parents": [
        "032626a7edd3f76a8f21540fbf3bc86104beeee1",
        "b5bc74122fb95c81bedad625160fb8d144a863cd"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Jan 10 00:22:45 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jan 10 00:22:45 2018 +0000"
      },
      "message": "Merge \"E2e test: attribution matching and slicing by attribution.\""
    },
    {
      "commit": "1bf94382d036fa8d61258205c5f4e18cd53cb61d",
      "tree": "2a376b76bc68439756cc4a0941c819efb4b76971",
      "parents": [
        "26d5b41fdbb5fe9f42dd33d78ccafd2ea8e38aff"
      ],
      "author": {
        "name": "Bookatz",
        "email": "bookatz@google.com",
        "time": "Thu Jan 04 11:43:20 2018 -0800"
      },
      "committer": {
        "name": "Bookatz",
        "email": "bookatz@google.com",
        "time": "Tue Jan 09 11:29:41 2018 -0800"
      },
      "message": "Anomaly detection is per dimension\n\nAnomalies are now detected and declared per dimension. This means that\ndeclareAnomaly now gets access to the key that is responsible for the\nanomaly. Moreover, the refractory period is per dimension, not overall.\nSo a second anomaly for the same metric but a different dimension can\nfire within the first dimension\u0027s refractory period. Thus, if app A\nmisbehaves and app B misbehaves shortly thereafter, they will both be\ndetected.\n\nEventually this key will be passed to the subscribers, although this cl\ndoesn\u0027t do anything with it.\n\nTest: adb shell data/nativetest64/statsd_test/statsd_test\nChange-Id: Id76856dc44fe9ecf91ac81a423e84f97c81d30ab\n"
    },
    {
      "commit": "c131a9297b4acadce2127c950e3ffec5a7e40973",
      "tree": "ec91a3fbe18d1abcf1851e992f0eb9167819ed04",
      "parents": [
        "0b921eacb59d5683f08c7759049c4fb235ce9a9f",
        "b0d0628a2915449db2c4ec071bea0cdeff3af210"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Jan 09 10:03:01 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jan 09 10:03:01 2018 +0000"
      },
      "message": "Merge changes Ibe8c8d3c,I4a475d6f\n\n* changes:\n  Thread-safety at log processor level.\n  Handle null string in jni and c++ stats-log-api interfaces.\n"
    },
    {
      "commit": "b0d0628a2915449db2c4ec071bea0cdeff3af210",
      "tree": "84e7ce65a57bfd5b2b0f1711c574f457debef1a2",
      "parents": [
        "20ac944ea00dbef78574b37e490ebe66c9190c13"
      ],
      "author": {
        "name": "Yangster-mac",
        "email": "yanglu@google.com",
        "time": "Fri Jan 05 15:44:07 2018 -0800"
      },
      "committer": {
        "name": "Yangster-mac",
        "email": "yanglu@google.com",
        "time": "Mon Jan 08 14:59:42 2018 -0800"
      },
      "message": "Thread-safety at log processor level.\n\nTest: statsd unit test passed.\n\nChange-Id: Ibe8c8d3cc8297875b16ee385c077b71c87353147\n"
    },
    {
      "commit": "d59a6589faeb8a1b7b3c23e5ac95671bda736cdd",
      "tree": "f69cf30239cbe29ebad1a1061471b907bc94c4df",
      "parents": [
        "c7dca1bddf49cbe4219258cbd71f4cabc4388543"
      ],
      "author": {
        "name": "Yao Chen",
        "email": "yaochen@google.com",
        "time": "Mon Jan 08 11:17:11 2018 -0800"
      },
      "committer": {
        "name": "Yao Chen",
        "email": "yaochen@google.com",
        "time": "Mon Jan 08 11:17:11 2018 -0800"
      },
      "message": "Some fixes in duration metrics\n\n+ Don\u0027t need to keep the condition key if the condition is not sliced.\n+ Whiten the hash before returning.\n\nTest: statsd_test\nChange-Id: Ie0bcb14b3adc4a15b79ba3be050431a672a68c28\n"
    }
  ],
  "next": "b5bc74122fb95c81bedad625160fb8d144a863cd"
}
