)]}'
{
  "log": [
    {
      "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": "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"
    }
  ]
}
