)]}'
{
  "log": [
    {
      "commit": "ed2daf21545604995de2442e806faa54284cadee",
      "tree": "fdb08006538e8b2871f7b2443c1c24cc364b728b",
      "parents": [
        "641a14bc022e38f346d7008d122e6c3c83695832"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Dec 08 15:15:44 2023 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Dec 12 15:25:05 2023 +0000"
      },
      "message": "Inline a single-use function.\n\nTest: treehugger\nChange-Id: I02f63abb01bb6adf9c0f77e66ff078e0cea704ac\nMerged-In: I02f63abb01bb6adf9c0f77e66ff078e0cea704ac\n"
    },
    {
      "commit": "5e5119c437d75f0f53c237ff86265122cda8ea18",
      "tree": "2b07a81366daac93a9b73a804ea9f44058943654",
      "parents": [
        "980c23127041df810af0e8a043d69cb7878862b7",
        "af09bbef01b6602689f3cb5ee1d2de17f1912034"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Dec 08 21:25:38 2023 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Fri Dec 08 21:25:38 2023 +0000"
      },
      "message": "logd: stop recording per-pid/tid statistics. am: ad5833d53e am: 1a5c1a0ee0 am: af09bbef01\n\nOriginal change: https://android-review.googlesource.com/c/platform/system/logging/+/2862763\n\nChange-Id: I534dbeddd3bbf1db7df8f81ab170b0454163cda8\nSigned-off-by: Automerger Merge Worker \u003candroid-build-automerger-merge-worker@system.gserviceaccount.com\u003e\n"
    },
    {
      "commit": "1a5c1a0ee070c38fc511ada2047e5cac0e50f83f",
      "tree": "93ae4520154a4d57452f03b336631a97f9309d0e",
      "parents": [
        "cec21555af5a0bb01228c1c4dde894d6c943839d",
        "ad5833d53e99aeb2f4746d0c8d398aac28bf7556"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Dec 08 20:21:58 2023 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Fri Dec 08 20:21:58 2023 +0000"
      },
      "message": "logd: stop recording per-pid/tid statistics. am: ad5833d53e\n\nOriginal change: https://android-review.googlesource.com/c/platform/system/logging/+/2862763\n\nChange-Id: I3ee8bebc95bb060adf2e2ca16f5d5402cc9a04ce\nSigned-off-by: Automerger Merge Worker \u003candroid-build-automerger-merge-worker@system.gserviceaccount.com\u003e\n"
    },
    {
      "commit": "ad5833d53e99aeb2f4746d0c8d398aac28bf7556",
      "tree": "2b07a81366daac93a9b73a804ea9f44058943654",
      "parents": [
        "dde42d98702e0e29bad31c258bf93fc44ebdaa1d"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Dec 08 09:29:12 2023 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Dec 08 09:29:12 2023 -0800"
      },
      "message": "logd: stop recording per-pid/tid statistics.\n\nThis doesn\u0027t remove any of the code (nor does it remove any of the other\nstatistics), but it does disable the expensive bookkeeping. If this\nsticks, we can come back and actually remove the code.\n\nBug: http://b/235157236\nTest: treehugger\nChange-Id: I748eb909e1ff16c588f4336d48df9a0a4ae6b83e\n"
    },
    {
      "commit": "87b90e4a0567cff5f7d5e6d2b624cec8523e26cd",
      "tree": "58988fd1ebbaad7de8541214fb7b49ef2cfa4855",
      "parents": [
        "927bd74653f4889a3a8d49c9c2201ddb7b61e7cd"
      ],
      "author": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Thu Aug 31 15:45:15 2023 +0000"
      },
      "committer": {
        "name": "Steven Moreland",
        "email": "smoreland@google.com",
        "time": "Thu Aug 31 15:51:56 2023 +0000"
      },
      "message": "Revert \"DO NOT MERGE: logd: limit LogStatistics to eng builds\"\n\nThis reverts commit 85d89819f56fc4b2bd2df04f4a8c9a61baed2d4a.\n\nReason for revert: appears to have gone in git_main accidentally\n\nBug: 295566425\nBug: 298414124 (udc \"DO NOT MERGE\" configured to land in main)\n\nChange-Id: I37fdea38fbeb027b19c50335f27493e6f9a87e6f\n"
    },
    {
      "commit": "2e10810a227317377fdf767d06e06df1f7e3f193",
      "tree": "7156ad81515e16eae3e1dd519fbd1c888532d5a0",
      "parents": [
        "01a4e22ce2ebe35520c2105034e1e67d5b41cb58",
        "85d89819f56fc4b2bd2df04f4a8c9a61baed2d4a"
      ],
      "author": {
        "name": "Tim Murray",
        "email": "timmurray@google.com",
        "time": "Thu Aug 17 20:29:09 2023 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Thu Aug 17 20:29:09 2023 +0000"
      },
      "message": "DO NOT MERGE: logd: limit LogStatistics to eng builds am: 85d89819f5\n\nOriginal change: https://googleplex-android-review.googlesource.com/c/platform/system/logging/+/24358560\n\nChange-Id: I43543fa70d26fb772b2fe02ead014da6e57f9643\nSigned-off-by: Automerger Merge Worker \u003candroid-build-automerger-merge-worker@system.gserviceaccount.com\u003e\n"
    },
    {
      "commit": "85d89819f56fc4b2bd2df04f4a8c9a61baed2d4a",
      "tree": "37f6f778e67d7847f929172338b5b071f7532a5a",
      "parents": [
        "00c3e86c5c3a2ab926d67bb073c042095c6bbf75"
      ],
      "author": {
        "name": "Tim Murray",
        "email": "timmurray@google.com",
        "time": "Wed Jul 26 15:44:32 2023 -0700"
      },
      "committer": {
        "name": "Tim Murray",
        "email": "timmurray@google.com",
        "time": "Wed Aug 09 16:00:25 2023 -0700"
      },
      "message": "DO NOT MERGE: logd: limit LogStatistics to eng builds\n\nStoring the command line of every thread that logs requires grabbing\n/proc/\u003cpid\u003e/cmdline, which calls __access_remote_vm and grabs the\nmmap_sem of the logging process. However, because this is run in a\nvery low priority logd thread, this can result in uninterruptible\nsleeps that significantly perturb performance results.\n\nPer userdebug policy, this is now limited to eng targets or when the\n\"logd.statistics\" or \"persist.logd.statistics\" properties are enabled.\n\nIgnore-AOSP-First: starting in udc-qpr-dev before improving in main so\ntests continue to run\n\nTest: stop, simpleperf record -a --exclude-perf -g --kprobe \"p:access_remote_vm __access_remote_vm\" -e kprobes:access_remote_vm, start\nBug: 294570513\n\nChange-Id: I5da92981734de044f0692558b99de53ca223518b\n"
    },
    {
      "commit": "fffa6888e02b312e0f5d2e2f1e7f1c4dd3f2993c",
      "tree": "8402c14402fae120c4d7ac9cd9021dc37d4dfe41",
      "parents": [
        "281e3c8e9811915018194d1aca1dc45cc57517a5"
      ],
      "author": {
        "name": "LongPing Wei",
        "email": "weilongping@oppo.com",
        "time": "Fri Jul 14 16:54:15 2023 +0800"
      },
      "committer": {
        "name": "LongPing Wei",
        "email": "weilongping@oppo.com",
        "time": "Fri Jul 14 09:22:42 2023 +0000"
      },
      "message": "Remove start marker solution to get rid of ratelimit devkmsg.\n\nBug: 290965837\n\nTest:\necho off \u003e /proc/sys/kernel/printk_devkmsg\nstop logd\nstart logd\nlogcat -b kernel\n\nChange-Id: Ic6f39c9f4bd6e8cba4f94e2f095aa05df555d470\n"
    },
    {
      "commit": "225e5c65d11f32a4613099ff0f5cacf8c49e9c2a",
      "tree": "c8e2faa83270cbcc564421f6cc39fb508b71e6df",
      "parents": [
        "4860765ea310d149eea1f57682558771155771c0"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Sep 16 23:01:59 2022 +0000"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Sep 19 21:28:27 2022 +0000"
      },
      "message": "Remove chatty.\n\nWe\u0027ve been using compressed logs instead for the past two releases,\nthe only feedback we\u0027ve had from partners has been (\"can we backport\nthis further?\"), and \"simple\" is the best alternative for debugging\nanyway, so time to remove the dead \"chatty\" option.\n\nTest: treehugger\nChange-Id: I108a7b2a634bcc17e97d0c92556698d96e7f4b56\n"
    },
    {
      "commit": "0e6014f918f3116d623cb7f2c035a88b0b5184fb",
      "tree": "3816d5fead8c5fd820922305ae9fc893c709d7de",
      "parents": [
        "f3cf4050be614e532596a764a836c44a635b817e"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Tue Jun 07 08:25:32 2022 -0700"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Tue Jun 07 15:30:19 2022 +0000"
      },
      "message": "Re-enable Trusty log reading by logd\n\nFix a potential problem with unterminated lines, and re-enable Trusty\nlog reading by logd.\n\nBug: 232472073\nTest: make Trusty generate unterminated line and see it appear in logcat\nChange-Id: I0a47ed20a94a5778e7244067ae295bc476e94058\n"
    },
    {
      "commit": "2b37645b5955449f7f55312700161f6848163260",
      "tree": "4b5915ff020b3b2cf6ddd346cc03c1c5e11039b3",
      "parents": [
        "8fd49a15356db19f7caeefbc0569fb7baa36b257"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Tue May 17 08:56:31 2022 -0700"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Tue May 17 19:59:04 2022 +0000"
      },
      "message": "Disable Trusty log reading for now\n\nDisable Trusty log reading until we know why poll()ing the trusty log file\nnever blocks on some devices.\n\nBug: 232472073\nTest: build, boot\nChange-Id: I2052d7e68eba2748625168b89f3718760e98ae5b\n"
    },
    {
      "commit": "9357be431bf6eb4236043116a19f712d07930838",
      "tree": "084ff19cdfa089aa7d4c3ad44da923c9130f2e94",
      "parents": [
        "77e1eaf3507311b2174cfdc0ddf854aecd170787"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Thu Dec 02 10:49:52 2021 -0800"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Tue Feb 01 15:33:46 2022 -0800"
      },
      "message": "logd: read Trusty log\n\nMake logd read the Trusty log, similar to how it reads the kernel log.\n\nBug: 190050919\nTest: boot, logcat\nChange-Id: I2c72e756405953cd844fdfbfceddcf3e47099ad3\n"
    },
    {
      "commit": "7ceed100c8882f956f43c31c40446f6590f277a6",
      "tree": "fc37ead611cb401886b122274ffa7b6d80b96ed9",
      "parents": [
        "393bc053b387ee2b50f914a08e42b9d67c9f4e3e"
      ],
      "author": {
        "name": "Jiyong Park",
        "email": "jiyong@google.com",
        "time": "Mon Nov 22 14:21:30 2021 +0900"
      },
      "committer": {
        "name": "Jiyong Park",
        "email": "jiyong@google.com",
        "time": "Tue Nov 30 16:05:24 2021 +0900"
      },
      "message": "Add logd.ready\n\nlogd.ready is a system property that logd sets when it is ready to\nserve incoming socket requests for reading and writing log. Clients of\nlogd (e.g. logcat) can use this to synchornize with logd, otherwise they\nmay experience a crash due to the refused socket connection to logd. The\nproperty is automatically unset when logd is not running (e.g. being\nrestarted due to a crash, etc.).\n\nBug: 206826522\nTest: run microdroid. see logcat logs are shown immediately.\nChange-Id: I4397fcfd1b5dfe478005f5956a150ec94705ff14\n"
    },
    {
      "commit": "a94e70763b5468ab075ac3832c45a3ab44174c04",
      "tree": "1fe50483529a8ec1d2c378704d99d4da0f7d25dc",
      "parents": [
        "c8b89f99f18150b80c039955cca3b0b786911303"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Nov 17 15:07:55 2021 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Nov 17 15:09:59 2021 -0800"
      },
      "message": "Remove a bunch of unnecessarily unclear memsets.\n\nJust initialize instead; it\u0027s easier to read, and the compiler can do a\nbetter job.\n\nTest: treehugger\nChange-Id: I159b41e3206a7b828f25289a9d1d9019872fc322\n"
    },
    {
      "commit": "025217cdff8dc1149f75a91c422d8c9bd0a3e8d5",
      "tree": "24ccad1a0debd64407ba6c6c7c226138008a08c0",
      "parents": [
        "0912a01daa9df75797041821b9b23a4d9d49ebea"
      ],
      "author": {
        "name": "eric.yan",
        "email": "eric.yan@oneplus.com",
        "time": "Thu Oct 15 12:08:56 2020 +0800"
      },
      "committer": {
        "name": "eric.yan",
        "email": "eric.yan@oneplus.com",
        "time": "Tue Oct 27 09:48:47 2020 +0800"
      },
      "message": "caching uid/pkgname pairs to improve efficiency\n\nSigned-off-by: eric.yan \u003ceric.yan@oneplus.com\u003e\nChange-Id: I82a17e7b286bd0e700332677bccbbb783025caa4\n"
    },
    {
      "commit": "c02841dccf89a4a1143de5cf14ef2df3e82c04f3",
      "tree": "e5713f7c2d2e04766eabe36924f27804c3189102",
      "parents": [
        "4b05d23b75aa6244890968c345d3a0ad16a4f130"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Fri Oct 16 16:26:03 2020 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Oct 19 17:07:14 2020 +0000"
      },
      "message": "logd: don\u0027t use SCHED_BATCH\n\nReceiving logs is interactive, particularly since processes may block\non having their logs be processed.  Receiving logs is not a batch\nactivity, since processing individual log messages is \u003c10us on\naverage.  Further, the original commit that moved logd to SCHED_BATCH\ndoesn\u0027t show conclusive evidence that it helps solve any problems.\n\nRecently, we\u0027ve seen perfetto traces that show SCHED_BATCH actively\nharming the system.  The below happens:\n1) A process crashes and its recent logs are read to generate the\n   tombstone\n2) A log.reader.per thread is started, and since it has plenty of logs\n   to send, remains scheduled for the full 1.5s timeslice that\n   SCHED_BATCH allows.\n3) The log.writer thread cannot run due to the above\n   thread holding the logd lock.\n4) Processes get blocked waiting for their messages to be processed by\n   logd.\n\nThis change has logd use the default scheduler, which should give\nlog.writer cycles to handle incoming log messages, instead of allowing\nlog.reader.per to hog all of them.\n\nBug: 164973960\nTest: pending\nChange-Id: Icda6c9171ec98236fb91e0f29e6e09a6b443fc12\n"
    },
    {
      "commit": "e4134f86421f9715efbca9ca7b85956266d43349",
      "tree": "159096a358248ca1ac65b6b5c767b63e8898b201",
      "parents": [
        "9568de484c6a3b06e3f282fd4d426830d4b82b31"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Fri Jul 31 15:21:54 2020 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Fri Jul 31 15:53:18 2020 -0700"
      },
      "message": "SocketClient: don\u0027t ignore SIGPIPE\n\n1) All current users are better off ignoring SIGPIPE at the beginning\n   of their process instead of ignoring it just for SocketClient\n2) This isn\u0027t thread safe if users did want it, since sigaction()\n   ignores SIGPIPE for the entire process\n3) This costs 5-10% of logd CPU time when logcat is reading logs\n\nAlso clean up the error handling in SocketClient::sendDataLockedv().\n\nTest: kill logcat and see that logd doesn\u0027t crash\nTest: run simpleperf and see that no cycles are going to sigaction\nChange-Id: I6532c8a0d71338e534411707b9a9bd785145c730\n"
    },
    {
      "commit": "5555265f56f5cd33efa33b98099aceb1c9ab3a6e",
      "tree": "3ed4684416086bad1850913fa37831c3b42c04c2",
      "parents": [
        "02a37890fbf955afe60fcf16b92170a187268446"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Jul 28 09:51:54 2020 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Jul 28 13:16:11 2020 -0700"
      },
      "message": "logd: remove users of __android_logger_property_get_bool()\n\n__android_logger_property_get_bool() has a clunky API and doesn\u0027t\nbelong in liblog, since a vast majority of liblog users will never\nquery this property.\n\nSpecifically\n1) Replace with GetBoolProperty() when completely equivalent.\n2) Remove checking if property values are \u0027eng\u0027 or \u0027svelte\u0027, since\n   there\u0027s no evidence that those values were ever used.\n3) Remove checking \u0027persist.logd.statistics\u0027 and \u0027ro.logd.statistics\u0027,\n   since there\u0027s no evidence that those values were ever used.\n4) Set ro.logd.kernel explicitly, so other processes don\u0027t need to\n   replicate the defaults that logd uses.\n\nTest: build\nChange-Id: I7c37af64ba7754e839185f46da66bf077f09d9c3\n"
    },
    {
      "commit": "729d9339e02497b00341e2464762cda5e8a08b97",
      "tree": "367ab24c604367e52407250085085020c825654a",
      "parents": [
        "b4c1e953287bb8fce1a8c3dafe965758369a6efc"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed Jul 22 15:30:02 2020 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed Jul 22 20:21:09 2020 -0700"
      },
      "message": "logd: use the compressed (serialized) log buffer by default\n\nThe serialized log buffer along with compression results in:\n* ~3.5x more logs than chatty\n* Less CPU usage\n* Less memory usage\n* Equivalent log range\n\nAlso, delete tests that assume that the device logd implementation is\nchatty.  There are actual unit tests for this same behavior that don\u0027t\nrely on the device logd.\n\nTest: serialized log buffer is used\nChange-Id: Ie12898617429a75b6caff92725aa7145650f8fc6\n"
    },
    {
      "commit": "3429ee207bca9491dea155509e3557578f182063",
      "tree": "2f44186755cdb6988000564b7f8d049bae3a06c5",
      "parents": [
        "028207e5d01081fe84c6a456826a8a29208f5c9f"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Jul 14 09:52:24 2020 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue Jul 14 11:52:06 2020 -0700"
      },
      "message": "logd: allow opting into simple or serialized log buffers\n\nTest: set properties and see logd use the appropriate buffer.\nChange-Id: I2dcce7d9661a43adfafb69427d9271ee7ee29f43\n"
    },
    {
      "commit": "e71dc9984d0d5ab8b84d55facc9654e22eeb8229",
      "tree": "ffe063a792e979341a646a5e430ea8bd56fedb28",
      "parents": [
        "5d41ad37fbec30765251aaec739a1c8a19305742"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Fri Jun 19 12:21:21 2020 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed Jul 01 14:35:33 2020 -0700"
      },
      "message": "logd: optionally track the full size of log buffers\n\nChattyLogBuffer ignores the metadata (timestamp, pid, std::list\u003c\u003e\niterators, etc) of log entries when calculating the size used by a\ngiven log buffer. For example, if 1MB is the specified size of the\n\u0027main\u0027 log buffer, logd will use between ~1.3MB and ~2MB of overall\nmemory for \u0027main\u0027 log buffer.  LogStatistics does track the overall\nmemory used and labels it \u0027Overhead\u0027, however this \u0027Overhead\u0027 is only\ninformative and is not used for Pruning or Chatty calculations.\n\nThis is problematic, since it makes logd\u0027s memory usage inconsistent:\ndepending on the pattern of logging, there can be substantially more\nmemory used than the specified log buffer size.  This is further\ncomplicated by the fact that chatty messages are entirely metadata and\ntherefore not counted as contributing to the log buffer size.\n\nThis change would switch logd to always track the full size of log\nbuffers, but there are two problems with this approach:\n1) Unless users double their buffer sizes, then they\u0027d have\n   substantially fewer logs after the change\n2) Chatty logic would change and it\u0027s difficult to evaluate.\n\nTherefore this change only provides the framework to track the full\nsize of log buffers.  This allows an apples to apples comparison of\nChattyLogBuffer and SerializedLogBuffer.  With this option enabled,\nlogd reports the following values:\n\nChattyLogBuffer:\nTotal log size (logcat -g), \u0027Total\u0027 / \u0027Now\u0027 (logcat -S), and\n\u0027Overhead\u0027 (logcat -S) all report the full size of log entries\nincluding metadata.\n\nSerializedLogBuffer:\nTotal log size (logcat -g) and \u0027Overhead\u0027 (logcat -S) report the\ncompressed size of the log entries including metadata.\n\u0027Total\u0027 / \u0027Now\u0027 (logcat -S) reports the uncompressed size of the log\nentries that are available including metadata.\n\nTest: logging statistics are correct\nChange-Id: If17682af8bb605f31387d7b210b69a301dd48f07\n"
    },
    {
      "commit": "2e8c4dba47e3b2f5b7244eeabd080165e911f2ff",
      "tree": "00e9904d1d7c6e7eb315b127b307b64a309b3a25",
      "parents": [
        "c38d675c49fc724f4ee0520df5d956560e5546bb"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Mon Jun 22 10:15:04 2020 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Mon Jun 22 10:20:44 2020 -0700"
      },
      "message": "logd: make drop_privs work if neither klogd or auditd are used\n\nFix a bug that was causing cap_set_flag() fail and logd to exit.\n\nBug: 159588327\nTest: caps are set correctly and logd functions with both, one of, or\n      none of klogd and auditd enabled.\nChange-Id: Ia51f078ad848535ce1ac29edd8a56a2b686a12cc\n"
    },
    {
      "commit": "47fdbce9165d4001fbfb8584d0f16fa46ea897fb",
      "tree": "abd914066750f380dc2d39cd58bf7735b5829d32",
      "parents": [
        "a8df678a43d5bf408d277e113ff22944c695c17e"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed May 13 09:28:37 2020 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Fri Jun 12 14:35:30 2020 -0700"
      },
      "message": "logd: add a SerializedLogBuffer suitable for compression\n\nInitial commit for a SerializedLogBuffer.  The intention here is for\nthe serialized data to be compressed (currently using zlib) to allow\nfor substantially longer logs in the same memory footprint.\n\nTest: unit tests\nChange-Id: I2528e4e1ff1cf3bc91130173a107f371f04d911a\n"
    },
    {
      "commit": "01d8ce761d538e1b9602a50942fec7eda669e990",
      "tree": "eaeb43cfb9328592fa4814756656ab5dad42897c",
      "parents": [
        "9abd4695b7875471af4d0486e0b9d639c309c234"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed Jun 03 09:23:49 2020 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed Jun 03 16:29:48 2020 -0700"
      },
      "message": "logd: use libbase logging\n\nWe can use libbase logging to output to the kernel log instead of the\n\u0027prdebug\u0027 function, so use that instead.\n\nBonus #1: we can now use CHECK().\nBonus #2: logging unit tests automatically output to stderr.\nBonus #3: We see dependent library\u0027s logs instead of losing them to\nthe void.\n\nTest: logging unit tests\nTest: logs show appropriately in dmesg / stderr\nTest: CHECK() works\nChange-Id: I92f8056b4820dc4998996cf46460568085299700\n"
    },
    {
      "commit": "29a65d809a8ad12594844b0ef2b7bf7c4c5cbc38",
      "tree": "65871c2bf0a1d3d71656354ebbbdc15e226d3f05",
      "parents": [
        "f9401144a6db9de5251db860707cf3927b72b271"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue May 12 12:46:43 2020 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Thu May 21 14:23:45 2020 -0700"
      },
      "message": "logd: create SimpleLogBuffer and implement ChattyLogBuffer in terms of it\n\nTest: unit tests with SimpleLogBuffer\nChange-Id: If6e29418645b5491df9b8aeef8f95bb786aeba93\n"
    },
    {
      "commit": "a84fb7361e60b3278776cb96bdb162f39dfc3d3c",
      "tree": "8b6c4ee14e2585537de748295e48d4ac020576a3",
      "parents": [
        "3ee5bad50bdbb44c40fb9800581f49b2b95a34d0",
        "079768c275a2eedbd0e68c408fd47185cd4d5109"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Mon May 18 15:37:03 2020 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Mon May 18 15:37:03 2020 +0000"
      },
      "message": "Merge \"logd: don\u0027t use libcutils properties\""
    },
    {
      "commit": "079768c275a2eedbd0e68c408fd47185cd4d5109",
      "tree": "3c544c012ad5ab997d30687ff61a469e5697ac13",
      "parents": [
        "9b415497050c8e4a51506222b68a8625f57b8ac6"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Fri May 15 09:11:52 2020 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Fri May 15 10:26:09 2020 -0700"
      },
      "message": "logd: don\u0027t use libcutils properties\n\nThis is the only non-socket usage of libcutils.\n\nTest: logging unit tests\nChange-Id: Ia9877ddb32da4955a818299c109e5c639423a9fd\n"
    },
    {
      "commit": "1371b084125399c60d028c857162101cba0f076b",
      "tree": "30a1cd430b63670f148c80262e375be0aaa2d9ec",
      "parents": [
        "9b415497050c8e4a51506222b68a8625f57b8ac6"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Thu May 14 19:25:05 2020 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Thu May 14 19:53:45 2020 -0700"
      },
      "message": "logd: remove SocketClient from LogBuffer and LogBufferElement\n\nIn the future, we\u0027ll want to be able to write to outputs that are not\nnecessarily a libsysutils SocketClient, for example host tests of\nLogBuffer.  Therefore, we add a LogWriter class to be used instead of\nSocketClient.\n\nTest: logging unit tests\nChange-Id: I4385be65e14e83a635691a7ba79e9bf060e49484\n"
    },
    {
      "commit": "3fe5042c843cd645024cbe7a1e4eb13a15ceb246",
      "tree": "37c62b9efc7fd36bc7d952e2276c08d3377521c8",
      "parents": [
        "7e8f910457ba35f3b61d1380ae003b0b19c5c79f"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue May 12 13:16:41 2020 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue May 12 15:39:19 2020 -0700"
      },
      "message": "logd: make LogBuffer an interface\n\nWe may use different implementations of LogBuffer in the future, so we\nmake it interface and create a concrete ChattyLogBuffer class that\nimplements it.\n\nTest: logging unit tests\nChange-Id: I5731d6404640664c9acc26b7c677dff3110c6a11\n"
    },
    {
      "commit": "7e8f910457ba35f3b61d1380ae003b0b19c5c79f",
      "tree": "c8ec71e296bb8b47dddc9077edfde4d7b0665148",
      "parents": [
        "40cc094a6cef98b1ad7f7d3f81a5c3033e08db70"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Mon May 11 16:29:29 2020 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue May 12 15:39:11 2020 -0700"
      },
      "message": "logd: refactor LastLogTimes a bit\n\nThere\u0027s still plenty of work that can be done here, particularly\nre-doing the locking so each LogReaderThread does not mutually exclude\nthe others, but that\u0027s out of the scope here.\n\nThis change primarily removes the public \u0027mTimes\u0027 from LogBuffer and\ncreates a new LogReaderList class instead.  It would have merged this\ninto LogReader, but that creates a circular dependency.\n\nThis change also removes the need to reference LogReader or\nLogReaderList from LogAudit, LogKLog, and LogListener, instead relying\non LogBuffer()::log() to call LogReaderList::NotifyNewLog().\n\nTest: logging unit tests\nChange-Id: Ia874b57a9ec1254af1295bfa6f7af2f92a75755b\n"
    },
    {
      "commit": "40cc094a6cef98b1ad7f7d3f81a5c3033e08db70",
      "tree": "d89e28f5418f0c72cd9addf688a6bbbdf34a2875",
      "parents": [
        "cfbf414db4f71d5e99597739aa1bf0c32c423329",
        "523026f803c474fd8cb16f50aa31d37031ab029b"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue May 12 15:55:50 2020 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue May 12 15:55:50 2020 +0000"
      },
      "message": "Merge changes I9d6dde2c,I38bfcba5\n\n* changes:\n  logd: separate LogStatistics from LogBuffer\n  logd: remove LogFindWorst\n"
    },
    {
      "commit": "cfbf414db4f71d5e99597739aa1bf0c32c423329",
      "tree": "e67bc27127511c3b1ad7a074a03ab8edb06ecc6f",
      "parents": [
        "da350ca855ea822de6a9bfc69287c646edfd532f",
        "346f1e4142dc1d74eb22c3a3906ef84ecdcaede4"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Tue May 12 00:31:37 2020 +0000"
      },
      "committer": {
        "name": "Gerrit Code Review",
        "email": "noreply-gerritcodereview@google.com",
        "time": "Tue May 12 00:31:37 2020 +0000"
      },
      "message": "Merge \"logd: don\u0027t poll() before recvmsg()\""
    },
    {
      "commit": "523026f803c474fd8cb16f50aa31d37031ab029b",
      "tree": "62563838967562aff711db7beef8d107469afc47",
      "parents": [
        "f3ef05b2ff1fccbed1f3f62ea84a5fd910eef6fb"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Thu May 07 14:44:43 2020 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Mon May 11 07:55:52 2020 -0700"
      },
      "message": "logd: separate LogStatistics from LogBuffer\n\nLogStatistics is intertwined with LogBuffer, even relying on it for\nthread safety.  This needs to change to have a proper\nLogBufferInterface, so this CL separates them.  Specifically:\n\n1) Adding a lock to LogStatistics and adding thread annotations to\n   ensure that data structures are protected appropriately.\n2) Moving prune_rows calculation into LogStatistics so it is done\n   while holding this lock.\n3) Using LogStatistics instead of LogBuffer where appropriate.\n\nNote that there should not be a significant performance regression\nwith this lock, as it will almost always been uncontended.  If\nanything, it should alleviate pressure from LogBuffer\u0027s lock.\n\nTest: logging unit tests\nChange-Id: I9d6dde2c96c9f024fa0341711c7bc63379e8e406\n"
    },
    {
      "commit": "da350ca855ea822de6a9bfc69287c646edfd532f",
      "tree": "f8b6c1dd5d7f80af2a0c7e08c1f3d18c7c8789f4",
      "parents": [
        "60f4c12a5332e6d17ef814ab3300fe2f0ace4084"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed Apr 29 15:38:19 2020 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed May 06 13:57:57 2020 -0700"
      },
      "message": "logd: enable -Wextra\n\nAlso drop -Wall and -Werror since they\u0027re included by default now.\n\nTest: build\nChange-Id: Ib0f33d2f02e00aaf544cb0ce5acec5d8acaa8a81\n"
    },
    {
      "commit": "346f1e4142dc1d74eb22c3a3906ef84ecdcaede4",
      "tree": "6ad57b90aa97f23302d7168e8f8ac89b7d885e8c",
      "parents": [
        "7842e26fb3312dcfd3e2dfa7c711cd1af1328afb"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed May 06 12:04:09 2020 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed May 06 13:44:10 2020 -0700"
      },
      "message": "logd: don\u0027t poll() before recvmsg()\n\nLogListener uses the libsysutils SocketListener class to read incoming\nlog messages, which means that it poll()\u0027s to wait for new data then\ncalls recvmsg() when this data is available.  That is unnecessary,\nsince this is a blocking socket, it already has a dedicated thread,\nand we\u0027re not using any other SocketListner features, so a tight loop\nof recvmsg() is sufficient.\n\nBelow are the stats from simpleperf during a framework restart.  To\nget an apples to apples comparison, these stats calculate the overhead\nof receiving the message as 1 - (\u003cnumber of perf events dispatching\nthe logs in logd\u003e/\u003ctotal number of perf events for the listener thread\u003e).\n\nWith SocketListener / poll()\n378563153 total events for the listener thread - SocketListener::runListener()\n245799364 events for reading and dispatching logs + recvmsg() - LogListener::onDataAvailable()\n67622952 events for recvmsg() inside LogListener::onDataAvailable()\n\u003d\u003e (378563153 - 245799364) \u003d 132763789 SocketListener + poll() overhead\n\u003d\u003e (132763789 + 67622952) \u003d 200386741 total overhead to for recvmsg() + poll() + SocketListener\n\u003d\u003e (200386741 / 378563153) \u003d 52.9% overhead to read each log message.\n\nWithout SocketListener / poll()\n324802401 total events for the new listener thread - LogListener::ThreadFunction()\n133208105 events for recvmsg()\n\u003d\u003e (133208105 / 324802401) \u003d 41% overhead to read each log message.\n\nThis shows a 22.5% \u003d (41 - 52.9)/52.9 reduction in cost spent for each log message.\n\nTest: logging unit tests\nTest: simpleperf\nChange-Id: I1f93b7a06fac6adce8e64e727bf6d8c5935c77c9\n"
    },
    {
      "commit": "d3eebf83c7dc240c02dd7e7d846e8a07aaf92d18",
      "tree": "6704ade7ae0c374fe703d70246ec0973e3e605e4",
      "parents": [
        "7842e26fb3312dcfd3e2dfa7c711cd1af1328afb"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed Apr 08 14:36:05 2020 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed May 06 13:37:33 2020 -0700"
      },
      "message": "Remove the monotonic option for logging\n\nThis has been around for ~5 years but there has been roughly no\nadoption, so remove this as we clean up the logging code.\n\nFuture efforts may track the monotonic timestamp in all cases.\n\nTest: logging unit tests\nChange-Id: I55ed565669f923988e741f6b384141bba893630d\n"
    },
    {
      "commit": "dcef3b571749d98998f727769b39d64c5eabe0bb",
      "tree": "6b4a06d174fab0bfcba4e41f9d72845df5da6737",
      "parents": [
        "de7a9e8a873334837ac3fc4c2a243cc3b3e996f2"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Fri May 01 17:03:20 2020 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Mon May 04 10:02:55 2020 -0700"
      },
      "message": "logd: separate PruneList from LogBuffer\n\nlogd needs a pointer to PruneList, but it should not own it and it\nshould not have initPrune() or formatPrune() functions.\n\nTest: logging unit tests\nChange-Id: Id1668c26d07eb5d1e4cf267f5748c20a79f711ae\n"
    },
    {
      "commit": "de7a9e8a873334837ac3fc4c2a243cc3b3e996f2",
      "tree": "4906083cdd38a7fbc71294d6ab87d7c9d3e0e4a9",
      "parents": [
        "fed20c924633f5ca2bfa7a3d6df00f4ec703ba42"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Fri May 01 16:45:25 2020 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Mon May 04 10:02:51 2020 -0700"
      },
      "message": "logd: don\u0027t use SIGHUP to reinitialize\n\nIt doesn\u0027t look like there are any users, since there is a much better\nmechanism, `logd --reinit` that exists for this behavior.  The\nsettings app and init.rc use that mechanism and they are the two major\nclients that force logd to reinitialize.\n\nThis saves us from creating a thread and marginally cleans up\nmain.cpp.\n\nTest: log reinitialization works\nChange-Id: Icdb56b6f59adbba82812231a4f3a6ffd1a7955fc\n"
    },
    {
      "commit": "fed20c924633f5ca2bfa7a3d6df00f4ec703ba42",
      "tree": "adb99741f2fbdbc8c8146503939d0fc99839a814",
      "parents": [
        "30dc388340b2f7caabeed7be81bdd1f4d426f360"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Fri May 01 16:13:18 2020 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Mon May 04 10:01:37 2020 -0700"
      },
      "message": "logd: decouple LogTags from LogBuffer\n\nLogBuffer needs a pointer to LogTags, but it should not own the\ninstance.  It should not provide accessors into LogTags either.\n\nAlso, clean up CommandListener a bit.\n\nTest: logging unit tests\nChange-Id: Ic0c86a2bac0c4dd80262278588b9fdc2326dbe5b\n"
    },
    {
      "commit": "26d72815d3c0da5f45b65ebac621444174eb54e0",
      "tree": "05a92f44d383f7c9b7bbd91269bae7138181cfda",
      "parents": [
        "f31db823380c0cd767f7f34c20c87cc1d4dbe43f"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Wed Sep 06 10:07:37 2017 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Fri Jun 07 11:39:24 2019 -0700"
      },
      "message": "logd: handle uidToName() directly\n\nuidToName() originally used a separate worker thread with additional\ngroup permissions.  Threads are not security boundaries however, so\nthese group permissions are removed in a previous change.\n\nThis change handles the lookup for uidToName() directly without using\na separate thread.\n\nTest: boot CF, logd unit tests\nChange-Id: If245388bc221bc77102a0bbcee82c8f42b140760\n"
    },
    {
      "commit": "024aa2ea7eb85baa357b41b2098b64d4f7beb760",
      "tree": "a06ed6ecee30bb8143b8bfdf446c864bc159c01b",
      "parents": [
        "0daeefa1f66fbd90e4cf3205b3efca64bd4c674d"
      ],
      "author": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Thu Jun 06 13:41:20 2019 -0700"
      },
      "committer": {
        "name": "Tom Cherry",
        "email": "tomcherry@google.com",
        "time": "Fri Jun 07 15:52:27 2019 +0000"
      },
      "message": "logd: don\u0027t drop user/groups/capabilities/priority in drop_privs()\n\nOn Android, unlike POSIX, groups and capabilities are able to be set\nper thread.  This is useless however, since threads are not a security\nboundary.  This change drops the logic to set groups and capabilities\nper thread and instead leaves all threads running with the initial\nuser and groups.\n\nThis does still drop some capabilities if they\u0027re unneeded due to\nfeatures being disabled.\n\nThis also moves the setpriority() call from code into the init script.\n\nTest: logd runs with the expected user/groups and with the expected\n      capabilities and priority without any errors\n\nChange-Id: Ibb0e529ea1574a2b8ec391a2678504ca9fbe19be\n"
    },
    {
      "commit": "e8229ca96a8349abc645814407ad65c27caf216b",
      "tree": "f33fe402fab4b0937d63fdd67c8fd78297b2d5ad",
      "parents": [
        "8de8048884f9ee774ce2b00a5649ed095459a4ec"
      ],
      "author": {
        "name": "Suren Baghdasaryan",
        "email": "surenb@google.com",
        "time": "Fri Jan 25 05:32:52 2019 +0000"
      },
      "committer": {
        "name": "Suren Baghdasaryan",
        "email": "surenb@google.com",
        "time": "Fri Jan 25 16:49:18 2019 +0000"
      },
      "message": "DO NOT MERGE: Revert \"Revert \"Add dependencies on libprocessgroup for sched_policy users\"\"\n\nThis reverts commit 8de8048884f9ee774ce2b00a5649ed095459a4ec.\n\nReason for revert: AOSP is fixed with new vendor image\n\nChange-Id: Ib341ac80e2f88c13a7815a490ea2d9422ebdf55f\nSigned-off-by: Suren Baghdasaryan \u003csurenb@google.com\u003e\n"
    },
    {
      "commit": "8de8048884f9ee774ce2b00a5649ed095459a4ec",
      "tree": "b312c2eed655b39c9d3ca9a168626192349ee111",
      "parents": [
        "a342460a6858717b454f803fb18312e4b6b9e15b"
      ],
      "author": {
        "name": "Suren Baghdasaryan",
        "email": "surenb@google.com",
        "time": "Wed Jan 23 20:43:03 2019 -0800"
      },
      "committer": {
        "name": "Suren Baghdasaryan",
        "email": "surenb@google.com",
        "time": "Wed Jan 23 20:43:28 2019 -0800"
      },
      "message": "DO NOT MERGE: Revert \"Add dependencies on libprocessgroup for sched_policy users\"\n\nThis reverts commit e8383761dcae60ed6a7203ca172c528f8f06b3dc.\n\nReason for revert: Broke AOSP\n\nChange-Id: I62f91c0adf440b5da0a145862b04dd27a7016faf\nSigned-off-by: Suren Baghdasaryan \u003csurenb@google.com\u003e\n"
    },
    {
      "commit": "e8383761dcae60ed6a7203ca172c528f8f06b3dc",
      "tree": "0a8fc8c4d5f56dd7dee9434237e0245e6442fb80",
      "parents": [
        "f2b41ad6ce553461d4dcff6b8bb4a982c640b630"
      ],
      "author": {
        "name": "Suren Baghdasaryan",
        "email": "surenb@google.com",
        "time": "Fri Dec 21 12:30:16 2018 -0800"
      },
      "committer": {
        "name": "Suren Baghdasaryan",
        "email": "surenb@google.com",
        "time": "Tue Jan 22 18:19:45 2019 +0000"
      },
      "message": "Add dependencies on libprocessgroup for sched_policy users\n\nAfter moving sched_policy functions into libprocessgroup its users require\nadditional dependency and inclusion of sched_policy_ctrl.h header.\n\nExempt-From-Owner-Approval: janitorial\n\nBug: 111307099\nTest: builds, boots\n\nMerged-In: Icc052080e1bce46ce06f7264446950cab0490a95\nChange-Id: Icc052080e1bce46ce06f7264446950cab0490a95\nSigned-off-by: Suren Baghdasaryan \u003csurenb@google.com\u003e\n"
    },
    {
      "commit": "2a07735dc701fe5e72adee99a7a15e1b94222a5d",
      "tree": "aa78564f2cd97a488825f5458c51040b10878848",
      "parents": [
        "75e670b1ef226a1f8e6a20c1a59232a6fceb9dd8"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Wed Aug 15 12:17:18 2018 -0700"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Wed Aug 22 20:09:34 2018 +0000"
      },
      "message": "logd: crash dumps on userdebug only\n\nTest: none\nChange-Id: I98ff8743d787b8edc013e49380b6321dfbd9b660\n"
    },
    {
      "commit": "7c3a50e696108a45a711f860640e65766d31c3f5",
      "tree": "c26a9813ce08863bea082984704bdeaa1deb3d13",
      "parents": [
        "ba37eaf4888f0f02fb614ef986d6bcca84a6be70"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jun 13 10:33:45 2018 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Wed Jun 13 10:34:43 2018 -0700"
      },
      "message": "logd: make behavior more consistent across builds.\n\nBug: 110127913\nTest: boots\nChange-Id: I0c1efacfb5ac0407e896ddde0bcc63927edc0525\n"
    },
    {
      "commit": "ba37eaf4888f0f02fb614ef986d6bcca84a6be70",
      "tree": "baf1b80fd7580d999ea76ca5afbde395af1677ea",
      "parents": [
        "90a0561468e71adb12c0892b5112ab1828ff0576"
      ],
      "author": {
        "name": "Luis Hector Chavez",
        "email": "lhchavez@google.com",
        "time": "Wed Jun 13 07:35:24 2018 -0700"
      },
      "committer": {
        "name": "Luis Hector Chavez",
        "email": "lhchavez@google.com",
        "time": "Wed Jun 13 07:36:23 2018 -0700"
      },
      "message": "logd: Stop calling prctl(PR_SET_KEEPCAPS, 1)\n\nThis change removes the call to prctl(PR_SET_KEEPCAPS, 1), because now\nthat logd is being run with ambient capabilities, init will set the\nKEEP_CAPS / KEEP_CAPS_LOCKED securebits.\n\nBug: 110127913\nTest: liblog-unit-tests, logd-unit-tests, logcat-unit-tests\n      (on an aosp_sailfish-userdebug)\n\nChange-Id: I72b6a49c5cd1552085f9ad44cb19a7333a13eeea\n"
    },
    {
      "commit": "131fe8577b3c39db844bf5db3debc664fcd9a39a",
      "tree": "1535c74456b1ea67973f224cacd1e22c289f9706",
      "parents": [
        "8101b8158fd0100e57609cdada00368b39103296"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue May 08 13:00:06 2018 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue May 08 13:00:06 2018 -0700"
      },
      "message": "Remove more bogus \u003cstdbool.h\u003e #includes from C++.\n\nBug: N/A\nTest: builds\nChange-Id: I794cd28667c6c65b38940d8f443315ad116b7ac3\n"
    },
    {
      "commit": "69eb3e8e4ddbd81cd9bc0cead2cb19873b213cc3",
      "tree": "8ca1a65f0123d48f27baa9d7b312dfeb037661d2",
      "parents": [
        "3eea987cdcee7f07f953faaa52c9b4a7a566b943"
      ],
      "author": {
        "name": "Siarhei Vishniakou",
        "email": "svv@google.com",
        "time": "Thu Dec 28 14:13:22 2017 -0800"
      },
      "committer": {
        "name": "Siarhei Vishniakou",
        "email": "svv@google.com",
        "time": "Tue Jan 02 10:47:50 2018 -0800"
      },
      "message": "Use ro.logd.kernel for kernel logcat\n\nPrevent a possible DOS of the kernel logs because the runtime result\ncould differ from the boottime result.\n\nTest: adb bugreport, then examine kernel log\nChange-Id: I140fd465f2e691c751d92af50dbdf95e23c121d8\n"
    },
    {
      "commit": "767a4e7563d708eef122ee61b1290594e01cfa6e",
      "tree": "f5e8b123bf345fbaef86d5d3e0dab040aca68ac3",
      "parents": [
        "67ad9359f34f4e38fec4bc249bee39b06f9f8cad"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Thu Apr 27 14:46:31 2017 -0700"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Wed May 03 14:35:14 2017 -0700"
      },
      "message": "logd: refine permissions to access /data/system/packages.list\n\nRefine DAC security surrounding logd.daemon worker thread and add a\npositive test for logd failure to access /data/system/packages.list.\n\n- Add AID_PACKAGE_INFO to groups of worker thread.\n- Move AID_SYSTEM to groups, setgid to AID_LOGD.\n- Do not drop capabilities until after setting the uid and gids.\n- Add a test that is part of logd.statistics test to check when\n  packagelistparser appears broken.\n- If /data/system/packages.list is encrypted, ensure we do not pick\n  up the existing inode to ensure strong positive when finding access\n  problems.\n- Replace all occurrences of NULL with nullptr in gTest code for\n  compliance with best practices.\n\nTest: gTest logd-unit-tests --gtest_filter\u003dlogd.statistics\n      (expect consistent failure, later CLs fix)\nBug: 37751120\nBug: 36645158\nChange-Id: I01b26fe5e25203246ae432d272c8daa9c07cab54\n"
    },
    {
      "commit": "3ecf0727bf6ce600b7011f50d1e2d98bd25a34cc",
      "tree": "fd18e93671dd9fc58641e22e81da8366eec0e2df",
      "parents": [
        "857fdaf9555ef0cd33b8385cbb810a751fd4d687"
      ],
      "author": {
        "name": "Hidehiko Abe",
        "email": "hidehiko@google.com",
        "time": "Wed Mar 29 17:41:17 2017 +0900"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Wed Apr 12 14:33:17 2017 -0700"
      },
      "message": "Force set timezone to UTC in logd.\n\n(cherry picked from commit c27f12a3d396f113c5ae09d2f2c8ff7de3f8b551)\n\nlogd assumes that it is running in UTC time zone.\nHowever, if persist.sys.timezone is set at some point later,\nthat affects and confuses logd behavior.\nTo avoid such a case, this CL sets TZ to UTC, which overrides\nthe property\u0027s behavior.\n\nTest: Ran CtsOsTestCases.\nTest: gTest liblog-unit-tests, logd-unit-tests and logcat-unit-tests\nBug: 33566779\nChange-Id: Ib9edd4cb06f019a33aaf8d77d33bd82fdbbda480\n"
    },
    {
      "commit": "4a1a09f616f78be21210866c7a2d322cb6dac067",
      "tree": "6e61df3372819d169af810c3fd8247e9eebac1da",
      "parents": [
        "32363381b25aceb70bbc8db9b811490d53043bbe"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Thu Aug 11 08:02:06 2016 -0700"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Mon Mar 27 13:32:57 2017 -0700"
      },
      "message": "logd: ASAN cleansing\n\nA mixture of fixes and cleanup for LogKlog.cpp and friends.\n\n- sscanf calls strlen.  Check if the string is missing a nul\n  terminator, if it is, do not call sscanf.\n- replace NULL with nullptr for stronger typechecking.\n- pass by reference for simpler code.\n- Use ssize_t where possible to check for negative values.\n- fix FastCmp to add some validity checking since ASAN reports that\n  callers are not making sure pre-conditions are met.\n- add fasticmp templates for completeness.\n- if the buffer is too small to contain a meaningful time, do not\n  call down to log_time::strptime() because it does not limit its\n  accesses to the buffer boundaries, instead stopping at a\n  terminating nul or invalid match.\n- move strnstr to LogUtils.h, drop size checking of needle and\n  clearly report the list of needles used with android::strnstr\n- replace \u0027sizeof(static const char[]) - 1\u0027 with strlen.\n\nTest: gTest liblog-unit-test, logd-unit-tests \u0026 logcat-unit-tests\nBug: 30792935\nBug: 36536248\nBug: 35468874\nBug: 34949125\nBug: 34606909\nBug: 36075298\nBug: 36608728\nChange-Id: I161bf03ba029050e809b31cceef03f729d318866\n"
    },
    {
      "commit": "da65bcb8f186ad44bf0a3c15596dd8eb64993944",
      "tree": "09c69fd1d48ddf92991a76f70625da4ccf828bec",
      "parents": [
        "11fc1e7227d6c5e380df2db4ec545c7d9390b45a"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Fri Mar 10 14:31:54 2017 -0800"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Mon Mar 13 10:31:09 2017 -0700"
      },
      "message": "logd: specify clang format\n\nSwitch _all_ file\u0027s coding style to match to ease all future changes.\n\nSideEffects: None\nTest: compile\nBug: 35373582\nChange-Id: I470cb17f64fa48f14aafc02f574e296bffe3a3f3\n"
    },
    {
      "commit": "db9d0f601547f6537fdd3476862b0626f80650eb",
      "tree": "30ca7356ccc644e44b03288707ce35033f1dc962",
      "parents": [
        "ed4ed9c7d9e7ed5962b8225fe3b1925d59acb013"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Mon Sep 12 14:51:54 2016 -0700"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Thu Feb 02 14:24:18 2017 -0800"
      },
      "message": "logd: add getEventTag command and service\n\nWill register a new event tag by name and format, and return an\nevent-log-tags format response with the newly allocated tag.\nIf format is not specified, then nothing will be recorded, but\na pre-existing named entry will be listed. If name and format are\nnot specified, list all dynamic entries. If name\u003d* list all\nevent log tag entries.\n\nStickiness through logd crash will be managed with the tmpfs file\n/dev/event-log-tags and through a reboot with add_tag entries in\nthe pmsg last logcat event log. On debug builds we retain a\n/data/misc/logd/event-log-tags file that aids stickiness and that\ncan be picked up by the bugreport.\n\nIf we detect truncation damage to /dev/event-log-tags, or to\n/data/misc/logd/event-log-tags, rebuild file with a new first line\nsignature incorporating the time so mmap\u0027d readers of the file can\ndetect the possible change in shape and order.\n\nManual testing:\n\nMake sure nc (netcat) is built for the target platform on the host:\n$ m nc\n\nThen the following can be used to issue a request on the platform:\n$ echo -n \u0027getEventTag name\u003d\u003cname\u003e format\u003d\"\u003cformat\u003e\"\\0EXIT\\0\u0027 |\n\u003e nc -U /dev/socket/logd\n\nTest: gTest logd-unit-test --gtest_filter\u003dgetEventTag*\nBug: 31456426\nChange-Id: I5dacc5f84a24d52dae09cca5ee1a3a9f9207f06d\n"
    },
    {
      "commit": "df79e9564537c83a7cbabd5c3ce8ab9f5c1156cf",
      "tree": "96df1eadf111b8574ead78b267671db3a064b049",
      "parents": [
        "f7d2731c6555cce6e6f6f93f4f32d02c3d7a7415"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Thu Dec 29 15:16:06 2016 -0800"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Tue Jan 03 09:44:42 2017 -0800"
      },
      "message": "logd: Add support for ro.logd.auditd.[main|events]\n\nlog selinux audit messages boolean (true or false, default true)\nselection for logging destinations:\n\nro.logd.auditd - turn on logd.auditd to pick up violations.\nro.logd.auditd.dmesg - to the kernel log.\nro.logd.auditd.main - to the \"main\" log buffer.\nro.logd.auditd.events - to the \"events\" log buffer.\n\nWe used to also read logd.auditd.dmesg and persist.logd.auditd.dmesg\nwhich do not get refreshed when /data mounts internally.  This is a\nconfusing state as these properties will be read after a logd crash\nand restart, adjusting the behavior of the logger.  Same can be said\nfor logd.auditd as well.  Drop reading these other parameters.\n\nTest: manual set r/o parameters, stop/start logd to confirm behavior\nBug: 33969000\nBug: 27878170\nChange-Id: I1a6bb4a903074c9aa7b227cf583a0094d49cbefd\n"
    },
    {
      "commit": "8679a98889eba9fe8a588e48db2b2e0ca8536394",
      "tree": "f7b0b4a6e0044601e238e4ef2295f0c8ba840c86",
      "parents": [
        "b589374aa2ec8c0da1b3e1efc4c02e9669f96df0"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Fri Nov 11 09:48:56 2016 -0800"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Mon Nov 21 11:13:02 2016 -0800"
      },
      "message": "system/core: replace EVENT_TAG_MAP_FILE with NULL\n\nNULL represents system default.  In the future, NULL could represent\nstatic and dynamic tags, which can come from multiple files based on\nimplementation details in the liblog library.\n\nTest: gTest logd-unit-tests \u0026 liblog-unit-tests\nBug: 31456426\nChange-Id: I0e3d296de81ca299ae63d7b83781639ee67ec298\n"
    },
    {
      "commit": "1189588187faf75571638e95eeb973840e0c8fdb",
      "tree": "c22fbad428572eef1a454ec24307b0af2e972de5",
      "parents": [
        "51bcfc05cbfbb850a0da9e82830f57c2a0740593"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Mon Nov 07 09:39:30 2016 -0800"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Wed Nov 16 15:56:56 2016 -0800"
      },
      "message": "libcutils: move cutils/files.h to cutils/android_get_control_file.h\n\nfiles.[h|cpp] is bound to be abused with junk, replace with\nandroid_get_control_file.[h|cpp]. Plus some sundry cleanup.\n\nTest: gTest libcutils-tests, logd-unit-tests, liblog-unit-tests,\n      logcat-unit-tests and init_tests\nBug: 32450474\nChange-Id: Ibd4a7aa4624ea19a43d1f98a3c71ac37805d36b5\n"
    },
    {
      "commit": "16f90a2042e1be6c9ab70d7363c1bd5be6360cd2",
      "tree": "638b94eac46ddb913048444b53484bda59815ee0",
      "parents": [
        "f8220fbe33dc1d98d4a4a9345a197cf07ff5b7c1"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Fri Oct 28 15:51:03 2016 -0700"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Thu Nov 03 13:34:27 2016 -0700"
      },
      "message": "logd: if eng build, be a bit more permissive about failures\n\nAllows us some leaway to investigate logd issues on eng builds\n\nTest: gTests logd-unit-tests, liblog-unit-tests and logcat-unit-tests\n      Manual on eng builds, bad logd.rc to fake permission issues\nBug: 32450474\nChange-Id: I432016e29e5601d67c502076ead941cecdcbebe7\n"
    },
    {
      "commit": "411278be51a8b6bac3566d84749e20d31c42aa17",
      "tree": "e2ecab4516ae4579d0e677ab4eb894ba9c8fb5c7",
      "parents": [
        "d7eb08cda4a1aa34b2aba628b9d2bc182cb12925"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Fri Oct 28 15:11:46 2016 -0700"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Thu Nov 03 13:34:27 2016 -0700"
      },
      "message": "logd: auditd + klogd control CAPS\n\nTest: gTest logd-unit-tests, liblog-unit-tests and logcat-unit-testsa\nBug: 32450474\nChange-Id: Icdaf9e352e86c9e140928509201da743004aeedb\n"
    },
    {
      "commit": "d7eb08cda4a1aa34b2aba628b9d2bc182cb12925",
      "tree": "962c35016efd193bfe54dfcdc2777f02c32b1a00",
      "parents": [
        "d0c59e27e16a1bcf503473a04bf48330f39880a6"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Mon Oct 31 13:49:44 2016 -0700"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Thu Nov 03 13:34:27 2016 -0700"
      },
      "message": "logd: drop capabilities in logd --reinit and logd.daemon\n\nTest: gTest logd-unit-tests, liblog-unit-tests and logcat-unit-tests\nBug: 32450474\nChange-Id: I842a7a64f0ba695acef66caf54270f9475c9f9ac\n"
    },
    {
      "commit": "d0c59e27e16a1bcf503473a04bf48330f39880a6",
      "tree": "295e26ff9f0d54a06e40b3e897805261f30100ab",
      "parents": [
        "eb12b07896def5c21a559448194f134355daddf0"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Fri Oct 28 14:49:53 2016 -0700"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Thu Nov 03 13:34:27 2016 -0700"
      },
      "message": "logd: drop libminijail dependency\n\nUse libcap instead of libminijail.  Set CAP_SETGID before setgroups,\nthen clear it afterwards.\n\nTest: gTest logd-unit-tests, liblog-unit-tests and logcat-unit-tests\nBug: 32450474\nChange-Id: I2ed027fd5efd95f76b1dd4c5791bae5f2ea94c28\n"
    },
    {
      "commit": "8cd27854c1f57d683cff2b3b8e32e020ca6eda07",
      "tree": "9ea042b7ee21a412e22bc9aff0a8e577c747f1e5",
      "parents": [
        "bfe805f0b6581beb2b8acaf829f27286218f8660"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Thu Oct 27 08:21:35 2016 -0700"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Thu Nov 03 13:34:27 2016 -0700"
      },
      "message": "logd: inherit android_get_control_file()\n\nSetup and then collect from the environment /proc/kmsg and /dev/kmsg\nfile descriptors. Do not do so for logcat --reinit.\n\nTest: gTest logd-unit-tests, liblog-unit-tests and logcat-unit-tests\nBug: 32450474\nChange-Id: Ied537ca561fcd4e71a9ad9c57398a23ba23f6ced\n"
    },
    {
      "commit": "e8ee90940fdc6426d6c81135176a1d97bba628bd",
      "tree": "95b8b1da1c10b593abf9e15f6487579a8f0c41bb",
      "parents": [
        "050bf91203a93f0ee3875958c4f137f22fd92aad"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Fri Oct 28 14:49:53 2016 -0700"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Thu Nov 03 11:20:59 2016 -0700"
      },
      "message": "logd: clear DUMPABLE\n\nDo not allow anyone to see logd memory.\n\nTest: gTest logd-unit-tests, liblog-unit-tests and logcat-unit-tests\nBug: 32450474\nChange-Id: Ic7377efcb7e1d3cd91b50741061037a0fb589045\n"
    },
    {
      "commit": "f4693f3a1221daab6d0a2a77a182368a073ef1fd",
      "tree": "d9ee9419cf454705cf61ab2464216d1f1a076f14",
      "parents": [
        "ea744eba08821a86d4e953e0e4d29e69472c295a"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Tue Sep 27 13:08:23 2016 -0700"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Tue Oct 18 09:49:51 2016 -0700"
      },
      "message": "logd: Use private interfaces for buffer size properties\n\nTest: gTest logd-unit-tests, liblog-unit-tests and logcat-unit-tests\nBug: 31750617\nChange-Id: I692577cfdf4bf8c93616f32df4b56786918aef1c\n"
    },
    {
      "commit": "486d174a3e66819d2e3c32e6ec62edef42186059",
      "tree": "7eb21f07231f2757a274f41f8075b0b46fbc8025",
      "parents": [
        "f1d5aef7a8b388e6110a15ff56a15c907230a179"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Mon Mar 28 15:42:08 2016 -0700"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Fri Oct 14 08:04:21 2016 -0700"
      },
      "message": "logd: use __android_log_is_debuggable()\n\nTest: gTest logd-unit-tests\nBug: 27566046\nBug: 31456426\nChange-Id: I9faf88263fe62ce5bba80dc2cb928e6dbe73dbb2\n"
    },
    {
      "commit": "0da1b4793c02a318f6abf7d43039da1b0f574d43",
      "tree": "448caed51913722177466680eec82b4e6c42e891",
      "parents": [
        "3e1c4a4aa7306d86383cd6dfb0d215d3759989e9"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Thu Sep 22 09:56:51 2016 -0700"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Mon Oct 03 11:08:34 2016 -0700"
      },
      "message": "liblog: logd: Add android_lookupEventTag_len()\n\nAllows us to mitigate the impact of MAP_PRIVATE and copy on write by\ncalling android_lookupEventTag_len instead of android_lookupEventTag,\nand delaying the copy on write impact to the later.  We return a\nstring length in a supplied location along with the string pointer\nwith android_lookupEventTag_len(const EventTagMap* map, size_t* len,\nint tag).  The string is not guaranteed to be nul terminated.  Since\nandroid_lookupEventTag() called even once can cause the memory\nimpact, we will mark it as deprecated, but we currently have no\ntimeframe for removal since this is a very old interface.\n\nAdd an API for __android_log_is_loggable_len() that accepts the non\nnull terminated content and fixup callers that would gain because the\nlength is known prior to the call either in the compiler or at\nruntime.  Tackle transition to android_lookupEventTag_len() and\nfixup callers.\n\nOn any application that performs logging (eg: com.android.phone)\n\n/proc/\u003cpid\u003e/smaps before:\n\nxxxxxxxxxx-xxxxxxxxxx rw-p 00000000 fd:00 463 /system/etc/event-log-tags\nSize:                 20 kB\nRss:                  20 kB\nPss:                   1 kB\nShared_Clean:          0 kB\nShared_Dirty:         20 kB\nPrivate_Clean:         0 kB\nPrivate_Dirty:         0 kB\nReferenced:            0 kB\nAnonymous:            20 kB\nAnonHugePages:         0 kB\nSwap:                  0 kB\nSwapPss:               0 kB\nKernelPageSize:        4 kB\nMMUPageSize:           4 kB\nLocked:                0 kB\nVmFlags: rd wr mr mw me ac\n\n/proc/\u003cpid\u003e/smaps after:\n\nxxxxxxxxxx-xxxxxxxxxx rw-p 00000000 fd:00 1773 /system/etc/event-log-tags\nSize:                 20 kB\nRss:                  20 kB\nPss:                   1 kB\nShared_Clean:         20 kB  (was 0kB)\nShared_Dirty:          0 kB  (was 20kB)\nPrivate_Clean:         0 kB\nPrivate_Dirty:         0 kB\nReferenced:           20 kB  (was 0kB)\nAnonymous:             0 kB  (was 20kB)\nAnonHugePages:         0 kB\nSwap:                  0 kB\nSwapPss:               0 kB\nKernelPageSize:        4 kB\nMMUPageSize:           4 kB\nLocked:                0 kB\nVmFlags: rd wr mr mw me ac\n\nAdded liblog-unit-tests --gtest_filter\u003dliblog.event_log_tags to\ncheck for Shared_Clean: to not be 0 and Anonymous: to be 0 for\nall processes referencing event-log-tags.  Which can include multiple\nreferences to /system/etc/event-log-tags and future possible refs to\n/data/misc/logd/event-log-tags and /dev/event-log-tags.  We want\nfailure messages to help point to errant code using the deprecated\ninterface.\n\nThis change saves 1/4MB of memory or more on a typical system.\n\nTest: gTest liblog-unit-tests\nBug: 31456426\nChange-Id: I9e08e44d9092bd96fe704b5709242e7195281d33\n"
    },
    {
      "commit": "e274ab1ebbb6df49409a5f3ad61a553928d3c3b7",
      "tree": "95688d6d9a27aaef143b76eb7a9c143e84725bb5",
      "parents": [
        "b1878e65d6f09361cccc204c3d24c82083659a28",
        "88e835fc6e084498c254e63645ac36587ec051ce"
      ],
      "author": {
        "name": "Jorge Lucangeli Obes",
        "email": "jorgelo@google.com",
        "time": "Wed Jul 20 15:07:32 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed Jul 20 15:07:32 2016 +0000"
      },
      "message": "Merge \\\"logd: Use Minijail for privilege dropping.\\\"\nam: d3dfd95728\n\nChange-Id: I4ee161fac939c57f273e4af669c3e845b81a4b45\n"
    },
    {
      "commit": "88e835fc6e084498c254e63645ac36587ec051ce",
      "tree": "21258a74b98028ba61ec353c44d2adbc08deded6",
      "parents": [
        "c572fc65547a5ed864c23a2dc080b366200901e1"
      ],
      "author": {
        "name": "Jorge Lucangeli Obes",
        "email": "jorgelo@google.com",
        "time": "Fri Jul 15 13:57:08 2016 -0400"
      },
      "committer": {
        "name": "Jorge Lucangeli Obes",
        "email": "jorgelo@google.com",
        "time": "Tue Jul 19 11:15:06 2016 -0400"
      },
      "message": "logd: Use Minijail for privilege dropping.\n\nMakes code smaller, removes duplication. Using Minijail also allows\nadding further sandboxing down the road.\n\nBug: 30156807\nChange-Id: I8fa242fba545049ee82f6655fe6ecc14c53fcab7\n"
    },
    {
      "commit": "477adcff348096d6e285fd948215f82752e4eb5d",
      "tree": "5ef26a0693b8eae3102957d822b3b18641f050fc",
      "parents": [
        "8950fccaf18ab6b42e84abfaed82ad46983626c7",
        "d3b9cb3f6b3f3d126bb8b94afc7d3698ce4c4e83"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Fri Jul 15 22:39:51 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri Jul 15 22:39:51 2016 +0000"
      },
      "message": "Merge changes If992b53b,Ieab60fd1\nam: 7c50033e9f\n\nChange-Id: Ie0fb615394eea100dbcc12519c52bbdba8fb8fe0\n"
    },
    {
      "commit": "4e4373263b8946d87562f30373cc25c578acc5e6",
      "tree": "77c3d60561dab19accc9151f2ac9093c4ffad67d",
      "parents": [
        "d16b0197da0113d1c31d9c432c310449958fc39a"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Fri Jul 15 09:55:41 2016 -0700"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Fri Jul 15 14:36:50 2016 -0700"
      },
      "message": "logd: drop prdebug inline\n\nMakes the prdebug helper accessible for debugging\n\nBug: 30118730\nChange-Id: Ieab60fd18221108ae27c54140a25061ab29ca1a3\n"
    },
    {
      "commit": "94b08ae838944e7c7289097fb4a99a4dbd2fde02",
      "tree": "4f1292f0995702bec471dec183f7596de9506d0a",
      "parents": [
        "03abb05fd3695c3e6b6be3cf96ffbc7ed52b17b0",
        "7a586890355ce8ecf021912e34325cd2d644dad6"
      ],
      "author": {
        "name": "Sami Tolvanen",
        "email": "samitolvanen@google.com",
        "time": "Tue Jun 14 15:55:40 2016 -0700"
      },
      "committer": {
        "name": "Sami Tolvanen",
        "email": "samitolvanen@google.com",
        "time": "Tue Jun 14 15:55:40 2016 -0700"
      },
      "message": "resolve merge conflicts of 7a58689 to nyc-dev-plus-aosp\n\nChange-Id: Icf3257ee8a47f31ba812a5f47899b8022f4eedb7\n"
    },
    {
      "commit": "7a586890355ce8ecf021912e34325cd2d644dad6",
      "tree": "688b72762c0710e233a67b94e36cab1045931e99",
      "parents": [
        "fff430bb87f7fa7b2bf05463b70c29aa5e284149"
      ],
      "author": {
        "name": "Sami Tolvanen",
        "email": "samitolvanen@google.com",
        "time": "Tue Jun 14 18:04:43 2016 +0000"
      },
      "committer": {
        "name": "Sami Tolvanen",
        "email": "samitolvanen@google.com",
        "time": "Tue Jun 14 11:14:51 2016 -0700"
      },
      "message": "Revert \"logd: enforce policy integrity\"\n\nThis reverts commit d63fbc560f5e4044ebb222a585cc6444a84ae1c8.\n\nBug: 26902605\nChange-Id: I6ce8fa7bef63c45821628265c379970eb64963a2\n"
    },
    {
      "commit": "8db3a7fe363f7a49daec07d315584e952ce92b3f",
      "tree": "3fe01e0cd4ee5ef6297a717ae42eeb591af35dd9",
      "parents": [
        "ce1a10f3e16865007d6bfb8fcf2d75c64ff6c321",
        "8bbe6db68db38d948bb4ff580509a8772a1f7edf"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Wed Mar 02 19:47:17 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed Mar 02 19:47:17 2016 +0000"
      },
      "message": "logd: check return values\nam: 8bbe6db68d\n\n* commit \u00278bbe6db68db38d948bb4ff580509a8772a1f7edf\u0027:\n  logd: check return values\n"
    },
    {
      "commit": "8bbe6db68db38d948bb4ff580509a8772a1f7edf",
      "tree": "5a8211e4d6378a6cf8bb25a7bcd7b00d718cbe2b",
      "parents": [
        "8954cf448d581aa2e969256a5f32e5779b125b78"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Wed Mar 02 07:51:48 2016 -0800"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Wed Mar 02 11:37:21 2016 -0800"
      },
      "message": "logd: check return values\n\n(cherry pick from commit bf7d0b887561929d22c8e2efa5d86cb0d7c50b51)\n\nThe setgid() and setuid() call failure in logd.daemon thread\ndo not block overall functionality, so clearly tell static\nanalyzer and developers that we do not care to check their\nreturn values.\n\nSideEffects: None\n\nBug: 27434072\nChange-Id: I6fdc87e8311ebc0173716080bbd72c86b3f00f78\n"
    },
    {
      "commit": "24212f10684ffa50d5275e0261ca3d520f2e9e48",
      "tree": "3fe01e0cd4ee5ef6297a717ae42eeb591af35dd9",
      "parents": [
        "d3e8cb447acbd79fe20c277148ce8d7a96d687f8"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Wed Mar 02 07:51:48 2016 -0800"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Wed Mar 02 07:54:45 2016 -0800"
      },
      "message": "logd: check return values\n\nThe setgid() and setuid() call failure in logd.daemon thread\ndo not block overall functionality, so clearly tell static\nanalyzer and developers that we do not care to check their\nreturn values.\n\nSideEffects: None\n\nBug: 27434072\nChange-Id: I6fdc87e8311ebc0173716080bbd72c86b3f00f78\n"
    },
    {
      "commit": "d63fbc560f5e4044ebb222a585cc6444a84ae1c8",
      "tree": "187359ae028e3af2aabd8c9b92a4bf58c44bb0ca",
      "parents": [
        "dce60496eed8a18ceb12db0049540071730bf8c3"
      ],
      "author": {
        "name": "Sami Tolvanen",
        "email": "samitolvanen@google.com",
        "time": "Fri Feb 05 14:27:52 2016 -0800"
      },
      "committer": {
        "name": "Sami Tolvanen",
        "email": "samitolvanen@google.com",
        "time": "Mon Feb 22 14:00:43 2016 -0800"
      },
      "message": "logd: enforce policy integrity\n\nIf a SELinux policy change or a switch to permissive mode is detected\non a user build, restart the device into safe mode, and keep it there\nuntil an OTA is applied or user data is wiped.\n\nThis change deprecates the ro.logd.auditd property.\n\nNeeds matching changes from\n  I781c3059ea8d4fb2f0c923e4488b1932d69678d3\n  Ica825cf2af74f5624cf4091544bd24bb5482dbe7\n  Id3ca7889ede30b54b7af73dd50653ca1a20d59aa\n\nBug: 26902605\nChange-Id: Idcdc5bff133f13c1267f0ec0a75cc8cf1ddbda0d\n(cherry picked from commit d122ee65b66b5b33d51302dabbaa0d6c84597549)\n"
    },
    {
      "commit": "b5ca95f39b8bc3ae4d5b62105062590e7e9546e5",
      "tree": "b88e5e3f001e3ff9919f8d515cb632e7162cf952",
      "parents": [
        "bc81ca909f1d9e14bd035de05ef0dd183b50cc37"
      ],
      "author": {
        "name": "Sami Tolvanen",
        "email": "samitolvanen@google.com",
        "time": "Fri Feb 05 14:27:52 2016 -0800"
      },
      "committer": {
        "name": "Sami Tolvanen",
        "email": "samitolvanen@google.com",
        "time": "Tue Feb 16 12:54:54 2016 -0800"
      },
      "message": "logd: enforce policy integrity\n\nIf a SELinux policy change or a switch to permissive mode is detected\non a user build, restart the device into safe mode, and keep it there\nuntil an OTA is applied or user data is wiped.\n\nThis change deprecates the ro.logd.auditd property.\n\nNeeds matching changes from\n  I781c3059ea8d4fb2f0c923e4488b1932d69678d3\n  Ica825cf2af74f5624cf4091544bd24bb5482dbe7\n  Id3ca7889ede30b54b7af73dd50653ca1a20d59aa\n\nBug: 26902605\nChange-Id: Idcdc5bff133f13c1267f0ec0a75cc8cf1ddbda0d\n"
    },
    {
      "commit": "f689276e02908761aec77e2a92fa38159c7e935d",
      "tree": "5bdeeaa30f91f504a573568a3636f561b0ee6110",
      "parents": [
        "c8dc59969df6608374d15326ea6fd3804f7cb59b"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Tue Feb 09 15:49:29 2016 -0800"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Wed Feb 10 10:23:03 2016 -0800"
      },
      "message": "logd: use ro.debuggable instead of ro.build.type\n\nChange-Id: Ic644f1f78e68094f700834675f4acc63386a6b92\n"
    },
    {
      "commit": "2ec9cb4bf20bb25fd77c630652bd90131824ae2b",
      "tree": "5c6f78352015a7b70ab9d80943fd6b5ef39ec554",
      "parents": [
        "b013bfb798e5a5ef711d2b65aeaacda493379cd7"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Mon Feb 08 10:28:12 2016 -0800"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Tue Feb 09 07:46:39 2016 -0800"
      },
      "message": "logd: add internal prdebug function\n\nUsage: android::prdebug(const char *fmt, ...) __printflike(1, 2);\n\nWill add logd prefix tag, log as debug priority in kernel logs,\nand will suffix a newline if one is not supplied. To be used to\naid debugging of the logger only.\n\nChange-Id: I217326ef34dc4eb0ea076bacb7a7a8b564c931c3\n"
    },
    {
      "commit": "e19143e34c526e51a17633a7ef6a46de56e75543",
      "tree": "e902f89a7e71b2113c3ef8a449c91c99609eb6a3",
      "parents": [
        "3f73ae65ef5cc3599483643c40fdf14bec0250a9"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Mon Dec 14 16:40:12 2015 -0800"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Tue Dec 22 07:44:31 2015 -0800"
      },
      "message": "logd: Allow flags \"eng\" and \"svelte\" in boolean\n\n- enhance property_get_bool, drop property_get_bool_svelte\n- enhance base properties with ro and persist variants\n- update and fortify README.property\n- primarily move auditd and kernel logger into a realm where\n  they can be controlled by build properties.\n- Move logd.klogd to logd.kernel, and add ro.logd.kernel\n  and persist.logd.kernel.\n- Add ro.logd.auditd and persist.logd.auditd.\n- Document persist.logd.security\n- Document log.tag and persist.logd.tag properties.\n- Document ro.logd.size, persist.logd.size and logd.size\n  properties.\n\nBug: 26178938\nBug: 26029733\nBug: 17760225\nChange-Id: Ibc1a497e45d69db5cf52133937f7ba6fb1d6cd21\n"
    },
    {
      "commit": "973d18cbe78d3d087d3e683a81343ffe7c984c1e",
      "tree": "06ed17565ecdbac4d70c39630ce3b9cbdcd7eef1",
      "parents": [
        "e9f2b0469153c1c69e543c6b0e6af16e044c9082"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Mon Dec 14 13:07:12 2015 -0800"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Mon Dec 14 14:37:07 2015 -0800"
      },
      "message": "logd: ro.config.low_ram set buffer size to 64K\n\nBug: 25792367\nChange-Id: Icae85a7de70b3a71f89b2bf8c80866649f727177\n"
    },
    {
      "commit": "b32a3cd5640f7650430ba134219ef48236c8375a",
      "tree": "ec41bdf37fb4f74823924c8e51a883f8f67cb00b",
      "parents": [
        "540ec7c59d0e1e1edd25508d3c5d509be0c965ff"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Thu Dec 10 11:27:03 2015 -0800"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Thu Dec 10 12:26:08 2015 -0800"
      },
      "message": "logd: logd-reinit exits with 194\n\nBug: 26115803\nChange-Id: I6e8843ce9766756a40e6d176e0a822f62045c2af\n"
    },
    {
      "commit": "2565c26f30f8e7794f53040db066a4a8638dee25",
      "tree": "93eb1bb918b64e0a83b1bbf4adb0b07c2f73ddad",
      "parents": [
        "a3113e3cd75aedf514b8d4bf1149a4b91f587226"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Sat Nov 07 16:52:17 2015 -0800"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Mon Nov 09 09:08:46 2015 -0800"
      },
      "message": "Enable hidepid\u003d2 on /proc\n\nAdd the following mount options to the /proc filesystem:\n\n  hidepid\u003d2,gid\u003d3009\n\nThis change blocks /proc access unless you\u0027re in group 3009\n(aka AID_READPROC).\n\nPlease see\n  https://github.com/torvalds/linux/blob/master/Documentation/filesystems/proc.txt\nfor documentation on the hidepid option.\n\nhidepid\u003d2 is preferred over hidepid\u003d1 since it leaks less information\nand doesn\u0027t generate SELinux ptrace denials when trying to access\n/proc without being in the proper group.\n\nAdd AID_READPROC to processes which need to access /proc entries for\nother UIDs.\n\nBug: 23310674\nChange-Id: I22bb55ff7b80ff722945e224845215196f09dafa\n"
    },
    {
      "commit": "2b4a763f6a6f1ac0fefbf498edb5626257c67a95",
      "tree": "0b2a5b9ba38c410802f3d08605f79c5685e8860c",
      "parents": [
        "212de559774b52667a6a201ce77699002177550e"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Tue Sep 08 08:56:32 2015 -0700"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Tue Nov 03 15:15:51 2015 -0800"
      },
      "message": "liblog: logd: support logd.timestamp \u003d monotonic\n\nif ro.logd.timestamp or persist.logd.timestamp are set to the value\nmonotonic then liblog writer, liblog printing and logd all switch to\nrecording/printing monotonic time rather than realtime. If reinit\ndetects a change for presist.logd.timestamp, correct the older entry\ntimestamps in place.\n\nToDo: A corner case condition where new log entries in monotonic time\n      occur before logd reinit detects persist.logd.timestamp, there\n      will be a few out-of-order entries, but with accurate\n      timestamps. This problem does not happen for ro.logd.timestamp\n      as it is set before logd starts.\n\nNB: This offers a nano second time accuracy on all log entries\n    that may be more suitable for merging with other system\n    activities, such as systrace, that also use monotonic time. This\n    feature is for debugging.\n\nBug: 23668800\nChange-Id: Iee6dab7140061b1a6627254921411f61b01aa5c2\n"
    },
    {
      "commit": "3f29c5a349a4159e39030511a8e4109a87ed83c0",
      "tree": "d3fab6455cb63c634267bf54043872949ac12abe",
      "parents": [
        "a4b53aa26c652676c6439cccf020b8b8587509b3"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Fri Aug 28 08:02:59 2015 -0700"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Fri Oct 30 14:54:17 2015 -0700"
      },
      "message": "logd: Add support for *.logd.filter\n\n- Add device (ro.logd.filter), persistent (persist.logd.filter)\n  properties to control the default filters\n- Allow logcat -P default to produce expected results\n- Allow logcat -P disable to produce expected results\n\nChange-Id: I651cb705373ec1e88a99e4b9086da4f9668a468a\n"
    },
    {
      "commit": "792683e912ae18d88fcf63876f97bbcad80cc957",
      "tree": "2cdb12f079486a216dde1b2fae0aed468f43e127",
      "parents": [
        "d745c72af8f367b2b1595c36fa922ca1f44388e6"
      ],
      "author": {
        "name": "William Roberts",
        "email": "william.c.roberts@intel.com",
        "time": "Fri Jul 31 13:10:36 2015 -0700"
      },
      "committer": {
        "name": "William Roberts",
        "email": "william.c.roberts@intel.com",
        "time": "Wed Oct 14 20:22:44 2015 -0700"
      },
      "message": "logd: use libpackageparser\n\nSwitch from the internal packages.list file parser\nimplementation to a common parser library.\n\nChange-Id: I87a406802f95d8e7bfd8ee85f723f80e9e6b6c0c\nSigned-off-by: William Roberts \u003cwilliam.c.roberts@intel.com\u003e\n"
    },
    {
      "commit": "76458ae8020b828f8fd847cf34262fb0feff738f",
      "tree": "7de4dbb911c04b69fc895614d55ba0bba5cd0b17",
      "parents": [
        "f816b3fb54c853194dfc4418d26cea9c29d4acb7",
        "f777ac784470f68acd561683c7586d423d49165e"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Mon Oct 05 16:25:53 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Oct 05 16:25:53 2015 +0000"
      },
      "message": "am 72146b93: Merge \"logd: Add LogUtils.h\"\n\n* commit \u002772146b931ca61e942df91407b561f22648a70bf2\u0027:\n  logd: Add LogUtils.h\n"
    },
    {
      "commit": "f777ac784470f68acd561683c7586d423d49165e",
      "tree": "b499345e074b87d7050873b13271c35347e8e258",
      "parents": [
        "a91bd37363736e3ba90b51b817e55b28ae95cdb0"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Fri Aug 28 08:02:59 2015 -0700"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Fri Oct 02 16:36:41 2015 -0700"
      },
      "message": "logd: Add LogUtils.h\n\nMove prototypes from LogBufferElement.h to LogUtils.h\n\nChange-Id: I55e42e17e6c997e35b2b78b87fd2f84f8f393282\n"
    },
    {
      "commit": "978b53b4dd4eebe17f4e3120c5a5a1bb57624d17",
      "tree": "7c3dce70501838f29bc566efc810d76da9a6b4dc",
      "parents": [
        "e5c2fb7b4595abc80c526c4ca7fb7fad59308e2e",
        "92fd0812d78b3ff167f9abf534ee32709bef4b7e"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Wed Sep 30 20:04:53 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Sep 30 20:04:53 2015 +0000"
      },
      "message": "am 92fd0812: Merge changes I42162365,Ia72f1305,I57d1f86c,I026d074e\n\n* commit \u002792fd0812d78b3ff167f9abf534ee32709bef4b7e\u0027:\n  logd: klogd deal with nuls in dmesg\n  logd: log_strtok_r deal with nuls\n  liblog: logprint: printable nul\n  logd: klogd: sniff for time correction on Mediatek\n"
    },
    {
      "commit": "16f0c0dc0e5df35a6a8a502885c65d3815c360b5",
      "tree": "6f1000dda4b0d54ebb4de35ee91d442a60e43a27",
      "parents": [
        "46ab1bff5a940da59bd10e4e5c1ad96bd939fa6f"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Fri Sep 04 11:37:42 2015 -0700"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Tue Sep 29 15:51:38 2015 -0700"
      },
      "message": "logd: klogd deal with nuls in dmesg\n\nSwitch to using string and length in all transactions, treating\ntrailing nuls the same as spaces.\n\nToDo: change dumpstate (bugreport) to use logcat -b printable _regardless_\n\nBug: 23517551\nChange-Id: I42162365e6bf8ed79d356e7b689a673902116fdb\n"
    },
    {
      "commit": "46ab1bff5a940da59bd10e4e5c1ad96bd939fa6f",
      "tree": "e8d7946b5688a0a1f6ff83e402e299b978457729",
      "parents": [
        "612e59e748d886623ef52222c3f6f3f9858e7d26"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Wed Sep 02 07:39:53 2015 -0700"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Tue Sep 29 15:43:34 2015 -0700"
      },
      "message": "logd: log_strtok_r deal with nuls\n\nRename to log_strntok_r and change from dealing with strings\nto dealing with a string and an associated length.\n\nBug: 23517551\nChange-Id: Ia72f1305a53f55eeef9861ac378fb8205fd2378e\n"
    },
    {
      "commit": "c8d9b656898daad7145e519502ebc0e8cddddeb8",
      "tree": "d0c2c1c4f94b9d0e2aa0b6f3bcbbfcf002aa4d94",
      "parents": [
        "66008dfd5b6fb26c2a57b37536cfce141722be8f",
        "0a329a666836a9c592d293fc21c0fad2fd127081"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Mon Sep 28 15:50:02 2015 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Sep 28 15:50:02 2015 +0000"
      },
      "message": "am 0a329a66: Merge \"logd: increase dgram_max_qlen to 600\"\n\n* commit \u00270a329a666836a9c592d293fc21c0fad2fd127081\u0027:\n  logd: increase dgram_max_qlen to 600\n"
    },
    {
      "commit": "fe958db609c293e3be651a80d3cc2926cfe99fb1",
      "tree": "c8aff4cd61a44fce48a5be03d9bb9870b49022c3",
      "parents": [
        "b1688018f8960727bd67b77f95dff2c55050288a"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Tue Sep 08 11:24:07 2015 -0700"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Fri Sep 25 14:15:53 2015 +0000"
      },
      "message": "logd: increase dgram_max_qlen to 600\n\nSeeing liblog messages on system_server runtime restart\n(too much system_server spam, 566 messages in 72ms)\n\nBug: 23788621\nChange-Id: I5171f2c19a3538da190fc6c2b40e978d89bf0e20\n"
    },
    {
      "commit": "239cd87854ae4e3878a09aca5c60dd4eac23c5ad",
      "tree": "39f829847eeeaca13d066c5cea5cbb5b7221b327",
      "parents": [
        "f4f3a07b0ae3bed3852c4f8ef69cbaf0483f48ef"
      ],
      "author": {
        "name": "Jeff Vander Stoep",
        "email": "jeffv@google.com",
        "time": "Thu Jul 23 15:18:36 2015 -0700"
      },
      "committer": {
        "name": "Jeffrey Vander Stoep",
        "email": "jeffv@google.com",
        "time": "Fri Jul 24 16:22:06 2015 +0000"
      },
      "message": "logd: allow logd to write to /dev/cpuset files\n\nRequired by logd on devices with USE_CPUSETS defined.\n\nMake /dev/cpuset/background, /dev/cpuset/foreground and\n/dev/cpuset/task writeable by system gid. Add logd to system\ngroup for writing to cpuset files and to root group to avoid\nregressions. When dropping privs, also drop supplementary groups.\n\nBug: 22699101\nChange-Id: Icc01769b18b5e1f1649623da8325a8bfabc3a3f0\n"
    },
    {
      "commit": "b56ed326b2529b0baac8425afcc6950d1625d88d",
      "tree": "c93292576d3610366846fe44964267e17cde9eb0",
      "parents": [
        "8b24dc36316d3b2e36e3c584c9d8fdf7e89536ea"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Fri Jun 12 14:59:42 2015 -0700"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Mon Jun 15 14:22:02 2015 -0700"
      },
      "message": "logd: missing klogd content\n\n(cherry pick from commit ee49c6a670a54e0636f81f39ddc93c87c9a4d766)\n\n- regression in log_strtok_r (part deux) In commit\n      \u0027logd: fix kernel logline stutter\u0027\n  2c3b300fd8307e8da13608197d0a89bc613de5fb we introduced log_strtok_r.\n  as a replacement for strtok_r that dealt with a problem with\n  some kernel log messages. Fix is to refine definition of\n  is_timestamp to not match on patterns like [0], requiring\n  a single period. Another fix is to refine definition of\n  is_prio to properly escape non-digit content.\n- Missing content because SYSLOG_ACTION_SIZE_BUFFER with added logging\n  is too short for full read of SYSLOG_ACTION_READ_ALL dropping\n  initial content. Add a margin for additional 1024 bytes.\n- Absolute _first_ log entry has sequence number of 1, which is\n  specifically dropped, start sequence count at 1 rather than 0.\n- Remove trailing space for efficiency.\n- If tag exists but no content, trick into kernel logging.\n\nBug: 21851884\nChange-Id: I0867a555a3bca09bbf18d18e75e41dffffe57a23\n"
    },
    {
      "commit": "12c8efc09bcb9d591788aa6bbb920fc909c17be7",
      "tree": "e3f3adf5f4bb7cbd1e1a3b8321cf56043f5ac33f",
      "parents": [
        "5559a21a288c387394b906614487b75fa3e12ac8"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Fri Jun 12 14:59:42 2015 -0700"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Mon Jun 15 21:19:10 2015 +0000"
      },
      "message": "logd: missing klogd content\n\n- regression in log_strtok_r (part deux) In commit\n      \u0027logd: fix kernel logline stutter\u0027\n  4c722959e6018207fd5e5cfbc17dfada2eef8ca8 we introduced log_strtok_r.\n  as a replacement for strtok_r that dealt with a problem with\n  some kernel log messages. Fix is to refine definition of\n  is_timestamp to not match on patterns like [0], requiring\n  a single period. Another fix is to refine definition of\n  is_prio to properly escape non-digit content.\n- Missing content because SYSLOG_ACTION_SIZE_BUFFER with added logging\n  is too short for full read of SYSLOG_ACTION_READ_ALL dropping\n  initial content. Add a margin for additional 1024 bytes.\n- Absolute _first_ log entry has sequence number of 1, which is\n  specifically dropped, start sequence count at 1 rather than 0.\n- Remove trailing space for efficiency.\n- If tag exists but no content, trick into kernel logging.\n\nBug: 21851884\nChange-Id: I0867a555a3bca09bbf18d18e75e41dffffe57a23\n"
    },
    {
      "commit": "757dd132376cdeaa5377dd659432921d0c35087d",
      "tree": "22eb2f3e4018e307a3393d88052bad79906786be",
      "parents": [
        "7c07506b42b2e1ca5c1bc69a27e3b8efffa9958d",
        "98b580b4857f81fc32e9e84954704ee0278029b1"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Tue Jun 09 19:42:44 2015 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jun 09 19:42:45 2015 +0000"
      },
      "message": "Merge \"Lower the priority of the threads in logd/logcat.\" into mnc-dev"
    },
    {
      "commit": "3de4bb966bea192ef999b5c2154e5d91d4fab513",
      "tree": "6a45725e574ffabbdad7b9337a9ea8fd24a5e834",
      "parents": [
        "fcfc798b6f59ec873efc2bf00b5555ec51eec2ce"
      ],
      "author": {
        "name": "Riley Andrews",
        "email": "riandrews@google.com",
        "time": "Mon Jun 08 23:36:34 2015 -0700"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Tue Jun 09 12:40:20 2015 -0700"
      },
      "message": "Lower the priority of the threads in logd/logcat.\n\n(cherry pick from commit 98b580b4857f81fc32e9e84954704ee0278029b1)\n\nsched_batch implies only a penalty to latency in scheduling, but\ndoes not imply that the process will be given less cpu time. Increase\nthe nice level to 10 to prioritize it below ui threads.\n\nBug: 21696721\nChange-Id: I075af059dc755402f7df9b0d7a66cca921ff04b2\n"
    },
    {
      "commit": "98b580b4857f81fc32e9e84954704ee0278029b1",
      "tree": "35baead36981756af66ccdbc63c2aa598aa33649",
      "parents": [
        "2ff5f71ee13f62538532be42be8cd92e8766c3d1"
      ],
      "author": {
        "name": "Riley Andrews",
        "email": "riandrews@google.com",
        "time": "Mon Jun 08 23:36:34 2015 -0700"
      },
      "committer": {
        "name": "Riley Andrews",
        "email": "riandrews@google.com",
        "time": "Tue Jun 09 12:36:45 2015 -0700"
      },
      "message": "Lower the priority of the threads in logd/logcat.\n\nsched_batch implies only a penalty to latency in scheduling, but\ndoes not imply that the process will be given less cpu time. Increase\nthe nice level to 10 to prioritize it below ui threads.\n\nBug: 21696721\nChange-Id: I075af059dc755402f7df9b0d7a66cca921ff04b2\n"
    },
    {
      "commit": "beb62dd4b090e1023a028f7a8753ec10d5671a7e",
      "tree": "1f8573f15fa142ba399a7c9d07c78f8450a18518",
      "parents": [
        "b924d6dbfd86ee34ecf3cf64a471c2e24fdbf05d"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Fri May 22 15:23:44 2015 -0700"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Mon Jun 08 13:55:14 2015 -0700"
      },
      "message": "logd: fix kernel logline stutter\n\n(cherry pick from commit 2c3b300fd8307e8da13608197d0a89bc613de5fb)\n\n- look for cases where one log line contains two without a newline.\n- rare condition, occurs when a printk does not have\n  a terminating newline under certain race conditions.\n- the newline may be performed broken up as a second call\n- the timestamps can be reversed (showing the race effects).\n- driver(s) should really have the newline in their log messages.\n\nChange-Id: Ibfb56b32047da3d6513db059ca6edad0f0105168\n"
    }
  ],
  "next": "4c722959e6018207fd5e5cfbc17dfada2eef8ca8"
}
