)]}'
{
  "log": [
    {
      "commit": "528f144e779dfd18b550d9176aecf36e1130f449",
      "tree": "f8b8faf502550eabda14c99bcaffd4f3d25a205d",
      "parents": [
        "70fda27eb2a72958636c8026be7cc72881bdff25"
      ],
      "author": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Wed Nov 29 18:06:11 2017 -0800"
      },
      "committer": {
        "name": "Dan Willemsen",
        "email": "dwillemsen@google.com",
        "time": "Wed Nov 29 21:37:28 2017 -0800"
      },
      "message": "Fix / suppress new unused warnings for mingw+clang\n\nBug: 69933068\nTest: mmma system/core\nChange-Id: I089166a979d3d8c5ada38a7745d507b555048499\n"
    },
    {
      "commit": "22dbf3947fedf988e714a4703ddf85fc41413f90",
      "tree": "ad823e9592de58265e4740a4d1ae251bfa260348",
      "parents": [
        "6048d9db5f11045412504b533ea9a92a7df6354c"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Feb 28 15:06:51 2017 -0800"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Mar 03 14:47:47 2017 -0800"
      },
      "message": "clean-up libutils includes\n\nmoved Foo.h as first include of Foo.cpp, and\nremoved redundant includes.\n\nMade NativeHandle non virtual.\n\n\nTest: run \u0026 compile\nBug: n/a\n\nChange-Id: I37fa746cd42c9ba23aba181f84cb6c619386406a"
    },
    {
      "commit": "e71b9147756ab4da306e4c16461ad23936769603",
      "tree": "497e16299cfd324400925dfb12182e2c6565d863",
      "parents": [
        "1ef5bf839e5b467e8014c751390045cd02b4128f"
      ],
      "author": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Sat Mar 12 16:08:12 2016 -0800"
      },
      "committer": {
        "name": "Brian Carlstrom",
        "email": "bdc@google.com",
        "time": "Sat Mar 12 21:32:52 2016 -0800"
      },
      "message": "system/core: Make Thread::run threadName argument required\n\nBug: 27557176\nChange-Id: Iae83a1e5489c86c2858fc8481f246b8480f0eec4\n"
    },
    {
      "commit": "9b828adfad09200f3f1bd3602187fe3dd5335774",
      "tree": "dbea9a10676206346b39e428e74ee630a1a71219",
      "parents": [
        "dcf890914c7571d3068046b9df1f672e9f45b4d2"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jul 30 08:47:35 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Jul 30 09:33:43 2015 -0700"
      },
      "message": "Use __ANDROID__ instead of HAVE_ANDROID_OS.\n\nChange-Id: I9967f3fd758c2a5b40be5b60ae72be7e2fb75136\n"
    },
    {
      "commit": "6ed68cc412752e4c78755df9a1516e610ec66fa8",
      "tree": "287929b99130bf3a06b67b5abf2d3b4b6d8199f3",
      "parents": [
        "692dc75d9fbf5c256cd8c66219a930ae0fe9f523"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jun 30 08:22:24 2015 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Tue Jun 30 10:41:15 2015 -0700"
      },
      "message": "Consistently use strerror in libutils.\n\nIt\u0027s easier for people to debug, and side-steps the problem that errno\nvalues differ between architectures.\n\nBug: http://b/17458391\nChange-Id: I1db9b2cbb653839d3936b91e37e5cff02671318a\n"
    },
    {
      "commit": "4a6e5a3b641dd99b658c4c336490371a3a5ae180",
      "tree": "3048f441498f5d5aed8bb218ecaca5e9a80cbf40",
      "parents": [
        "fb538fb13d930a7398695d1044ceaaf854949018"
      ],
      "author": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Mon Jan 26 19:48:54 2015 -0800"
      },
      "committer": {
        "name": "Yabin Cui",
        "email": "yabinc@google.com",
        "time": "Tue Jan 27 14:23:22 2015 -0800"
      },
      "message": "Kill HAVE_PTHREADS.\n\nBug: 19083585\nChange-Id: Ic09eb3dd250bc5c5b63cac7998f99f5fa007f407\n"
    },
    {
      "commit": "292ccd3c181d7e005561c4a009b1f6b411e56179",
      "tree": "ac95776941eb8b36ef5217c8567d8b422825e5e5",
      "parents": [
        "fae953ebccfabfa500b3ebca93202063c8e3501d"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Dec 15 12:52:53 2014 -0800"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Dec 15 12:52:53 2014 -0800"
      },
      "message": "Fix references to HAVE_PRCTL.\n\nChange-Id: I8343b398f2ce0d743487fdd086e67763c7dd67f1\n"
    },
    {
      "commit": "7bf5f209cec9fcf5f6eb744bcc05e4f97a37648a",
      "tree": "b749b288a64393ea8bd6fca5c9ecaefbb2ca2c23",
      "parents": [
        "f9b9693bab9d6d614ac0da12734dca7bab487c44"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Sep 12 10:19:08 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Fri Sep 12 10:19:08 2014 -0700"
      },
      "message": "Move libutils over to pthread_gettid_np.\n\nBug: 17476168\nChange-Id: I934d93a023eb00e036ed3cee8c52efaeb17b8915\n"
    },
    {
      "commit": "b7659613b2eed5df47e3e7ec536012772cc08b61",
      "tree": "ee1840891b5f8031b7085326eed4a1418068e937",
      "parents": [
        "5f231a43b342fcfbd778d14f953b0b63715ee7f2"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Aug 18 10:47:37 2014 -0700"
      },
      "committer": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Mon Aug 18 10:47:37 2014 -0700"
      },
      "message": "Remove androidGetTid.\n\nBug: 17048545\nChange-Id: I93cbb2d7bd18d506b5f5f7f262dd9ac0fca053b4\n"
    },
    {
      "commit": "9516139c03e7e48b2c23a5b53dc4309989e54c6b",
      "tree": "eb37070cc5c2164fb975dd182a1ae13c2cef4b26",
      "parents": [
        "cddc97cb3a927d179a42e0fec77f0d267fcd74d1"
      ],
      "author": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Thu Jul 31 10:21:00 2014 -0700"
      },
      "committer": {
        "name": "Dmitriy Ivanov",
        "email": "dimitry@google.com",
        "time": "Thu Jul 31 10:21:00 2014 -0700"
      },
      "message": "Exclude bionic private headers from include path\n\nChange-Id: I8b1269a739a690af91c63fa0f7f8f01d2d43bb97\n"
    },
    {
      "commit": "5bed8036644f552210a7cfcbed2d6d20cf2981b0",
      "tree": "37f784e181086e99b17e00d46b6da30529751539",
      "parents": [
        "bf0f25905b12581f05b65b1ebe95211c727ae483"
      ],
      "author": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Wed Apr 30 11:10:46 2014 -0700"
      },
      "committer": {
        "name": "Mark Salyzyn",
        "email": "salyzyn@google.com",
        "time": "Mon Jun 02 15:57:50 2014 -0700"
      },
      "message": "libutils: turn on -Werror\n\n- Deal with some -Wunused issues\n- Override PRI macros (windows)\n- Revert use of PRI macros on off64_t (linux)\n- Deal with a gnu++11 complaince issue\n\nChange-Id: Ie66751293bd84477a5a6dfd8a57e700a16e36964\n"
    },
    {
      "commit": "d98e07fdf9c338589f263c47ce5c844ed43efad5",
      "tree": "d4ff9849df225df1e4c46386fdabe30407ba5513",
      "parents": [
        "be06210c508d5878dcc7d185e5613f4c7e38dfe8"
      ],
      "author": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Fri Aug 02 14:40:08 2013 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Fri Aug 02 14:40:08 2013 -0700"
      },
      "message": "move libs/utils to libutils\n\nChange-Id: I6cf4268599460791414882f91eeb88a992fbd29d\n"
    },
    {
      "commit": "e45a9acd6390d68e902b1f0a25f90b96b8849a3c",
      "tree": "4f9e22bbd515e695dc9e8c0e0b13f0a2f3875ae7",
      "parents": [
        "8db925f7777834eae5af386f7f92a22478c88346"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Fri May 17 11:06:39 2013 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:57:01 2013 -0700"
      },
      "message": "Remove unnecessary header file.\n\nIn b2cac4ff37ed2a3521efb307b807b12f649634b8, the last\nreference to property_get was removed, but the include\nfile remained. Remove it.\n\nThis is causing me unrelated problems.\n\nChange-Id: I87bbfbfa5871f6da4a1b00037a225f67bbd75881\n"
    },
    {
      "commit": "31ba37f1c80801ee128749d4772c47f23323a3be",
      "tree": "d8a4c8bc38b8e8eda1e189d6de2b29b88b122b1b",
      "parents": [
        "6090df85a8a227db0bf407b7877b2777937e6427"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Mar 11 14:34:56 2013 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:57:01 2013 -0700"
      },
      "message": "Add Thread::isRunning and Condition::signal(WakeUpType)\n\nThe signal() method is useful to choose whether to wake up one or\nall threads.\n\nChange-Id: I062ab6d3ddd306a9fb735549ea140e2a76eed75a\n"
    },
    {
      "commit": "6090df85a8a227db0bf407b7877b2777937e6427",
      "tree": "a51930614eb84a2269cc4800cd98e4ed38180f33",
      "parents": [
        "769828d2d44fca3829e628bb424aa426aa468ee9"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Mar 07 15:34:28 2013 -0800"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:57:01 2013 -0700"
      },
      "message": "rename binder services main thread to Binder_*\n\nWhen a binder service\u0027s main thread joins the thread pool\nit retains its name (whatever the exec name was), which is\nvery confusing in systrace.\n\nwe now rename that thread just like its friends in the\nthread pool.\n\nChange-Id: Ibb3b6ff07304b247cfc6fb1694e72350c579513e\n"
    },
    {
      "commit": "d30884aa0cb6e8286aca78fc73d9b239f727627e",
      "tree": "16b4d6509b01885efce0b91516c339cbfed5bddb",
      "parents": [
        "0656c9764a77b919d707624404546b10ec7fa9f8"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Sat Feb 02 18:09:15 2013 -0800"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:57:00 2013 -0700"
      },
      "message": "Revert \"try to fix win_sdk build.\"\n\nA better change was checked into system/core. See commit\n941daef629bd571032851edf7ae1dce24266640e\n\nThis reverts commit fa99d30ec773c5f9653d96570fb8961426bfe966.\n"
    },
    {
      "commit": "0656c9764a77b919d707624404546b10ec7fa9f8",
      "tree": "3b93244fc07a231362b17ab5d2ef461b76c03f72",
      "parents": [
        "99ec303e459ea4ded9981337e10651aee08016b0"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Fri Feb 01 16:09:23 2013 -0800"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:57:00 2013 -0700"
      },
      "message": "try to fix win_sdk build.\n\nChange-Id: I55e78e339874a6d6a3381c2550556b65c7ec1ca0\n"
    },
    {
      "commit": "fe34e45c217e67e32fa56b7e01fd4163a621c647",
      "tree": "1635e289020fd98874604241920af541df218f42",
      "parents": [
        "61db1669f491b221411269f62bd1cb458a543181"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Apr 30 16:03:30 2012 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:57:00 2013 -0700"
      },
      "message": "Continue removing property debug.sys.noschedgroups\n\nAlso 0 means gettid() for get_sched_policy() and set_sched_policy().\n\nChange-Id: Ic12edc3df6c9b3e99eae5cffaf9f6fe56cf14043\n"
    },
    {
      "commit": "2b1d4999b86523f27a22bcaf9eb134173b60fb9b",
      "tree": "e35d4bc46659eb5fb7074b2da539122c2e28f0a8",
      "parents": [
        "c1309d74e8929f73e1b9cdb5dbf70aa8a2b09af3"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu May 10 15:50:19 2012 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:59 2013 -0700"
      },
      "message": "Workaround for add_tid_to_cgroup failed to write\n\nBug: 6467109\nChange-Id: I6dff8e608d83c7a7c453c25c94ad100f113769b9\n"
    },
    {
      "commit": "77ed15a31ad314a1e6052299108362388c1169fe",
      "tree": "c92dc0c49477a8fff5ccef094a859a86ce2e3ce4",
      "parents": [
        "2c1627dc49994f83a636efd1970825b519bd93cb"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Mar 16 07:15:23 2012 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:59 2013 -0700"
      },
      "message": "Scheduling group cleanup\n\nRemove C++ APIs androidSetThreadSchedulingGroup and\nandroidGetThreadSchedulingGroup, and the ANDROID_TGROUP_* constants.\n\nFormer callers of these should now use the C APIs set_sched_policy and\nget_sched_policy, and the SP_* constants.\n\nNote: debug.sys.noschedgroups is not supported by the C APIs,\nthis needs to be discussed.\n\nChange-Id: I32bbfc539ef4090faf9ef0320380e8cca9eae07c\n"
    },
    {
      "commit": "27e6eaae879309d6bbfb708e1e1aa75d7431a3a4",
      "tree": "e4324bc2f24f90092627d0c9922dea3d6675c546",
      "parents": [
        "9a0a76df1e961ef4621e81814d8bf891a09bef66"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Mar 16 22:18:39 2012 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:59 2013 -0700"
      },
      "message": "Add a simple work queue abstraction.\n\nMakes it easy to schedule a bunch of work to happen in parallel.\n\nChange-Id: Id9c0e52fc8b6d78d2b9ed4c2ee47abce0a01775c\n"
    },
    {
      "commit": "d731f07cc9ca7e8fc327c7910de7bea7e22c2fd3",
      "tree": "145e4330f3f66cd445df9b02e0fc830aa10b5420",
      "parents": [
        "4cc144c4fbbcef72b1af3ec3ea86356790397025"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jul 11 15:59:22 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:58 2013 -0700"
      },
      "message": "Thread::getTid returns pid_t gettid() after run\n\nThis is needed when the parent or any other thread besides the child\nneeds access to the child\u0027s kernel tid.\n\nChange-Id: Ib148505913eb78314cfd76657c30d7b20663dffd\n"
    },
    {
      "commit": "1b781ab0e0e8d59a7a8d1140bf6dee96a48a160c",
      "tree": "3714a0510c545d8420a0b9e33c6328fe0ca63aa4",
      "parents": [
        "61d341b8d3d771f4ef3dd54df0502b19b7a2ab4d"
      ],
      "author": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Fri Jan 06 19:20:56 2012 +0000"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:58 2013 -0700"
      },
      "message": "Rename (IF_)LOGE(_IF) to (IF_)ALOGE(_IF)  DO NOT MERGE\n\nSee https://android-git.corp.google.com/g/#/c/157220\n\nBug: 5449033\nChange-Id: Ic9c19d30693bd56755f55906127cd6bd7126096c\n"
    },
    {
      "commit": "61d341b8d3d771f4ef3dd54df0502b19b7a2ab4d",
      "tree": "91ab1ceb2a6e3ea784109793c138211acb4becee",
      "parents": [
        "a1d3391b1ec04dece202baf288f1741006afa552"
      ],
      "author": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Thu Jan 05 23:22:43 2012 +0000"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:58 2013 -0700"
      },
      "message": "Rename (IF_)LOGW(_IF) to (IF_)ALOGW(_IF)  DO NOT MERGE\n\nSee https://android-git.corp.google.com/g/157065\n\nBug: 5449033\nChange-Id: I00a4b904f9449e6f93b7fd35eac28640d7929e69\n"
    },
    {
      "commit": "8b4cf779b29144d6d469afb4daabcbf069725db2",
      "tree": "c6190597cea636dbebc96fdecb08699375cd930c",
      "parents": [
        "ea45b01f9bc2d1ef1f8d97ca0480336d23e0aa97"
      ],
      "author": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Wed Oct 12 17:27:03 2011 +0100"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:58 2013 -0700"
      },
      "message": "Rename (IF_)LOG() to (IF_)ALOG()  DO NOT MERGE\n\nSee https://android-git.corp.google.com/g/#/c/141576\n\nBug: 5449033\nChange-Id: I42575e7c29cf1c0f465c357a5c97ab118df6f473\n"
    },
    {
      "commit": "7b4ce614cf350e08680a71712c00dc152c3fa6cc",
      "tree": "688c374be86f77621f6ae0dacff929c897718deb",
      "parents": [
        "8ddbed9efdd879cee3553d7be2f534dc76c191d2"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Fri Sep 16 11:47:13 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:58 2013 -0700"
      },
      "message": "Fix androidGetThreadPriority for non-pthread configurations.\n\nrelated-to-build\n\nChange-Id: Ic865af0865906f96fd615a56a030c8e3adaf13c4\n"
    },
    {
      "commit": "8ddbed9efdd879cee3553d7be2f534dc76c191d2",
      "tree": "980c7a3d05b5c9287bc91e0c9b066a645b6e9f2a",
      "parents": [
        "f71114b6a4e350d389c6cdd314a4cbb970c71f5b"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Thu Sep 15 12:21:40 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:58 2013 -0700"
      },
      "message": "A new API \"androidGetThreadPriority\"\n\nChange-Id: I6baeead8c70460863343fd557250635fb1e6a170\n"
    },
    {
      "commit": "d8734d19ec3a24f62b5c61af0dd20ec19dc145ec",
      "tree": "9d75ed5861b75981e2d174af8822266956c18e8a",
      "parents": [
        "bbbd761de125b50ac83047bccb0b6e0e32ce74a1"
      ],
      "author": {
        "name": "Le-Chun Wu",
        "email": "lcwu@google.com",
        "time": "Thu Jul 14 14:27:18 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:57 2013 -0700"
      },
      "message": "Add a call to pthread_attr_destroy to avoid potential memory leaks.\n\nChange-Id: Ib57efc3530e9793298190cc9cab19c9af54e11a7\n"
    },
    {
      "commit": "6fbe0a86a8bb9da0ff879c3d237c2637eb0d5a8d",
      "tree": "76e280fdf5c11f10ba4334c1dcfb36cdf17789b0",
      "parents": [
        "82e14f67803d3457b639a8aea772a6490b34165c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jun 22 16:20:37 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:57 2013 -0700"
      },
      "message": "Add C++ thread API androidGetThreadSchedulingGroup\n\nThis API is intended for applications that need to read a thread\u0027s\nscheduling group, while using the higher-level (C++) family of thread APIs.\n\nChange-Id: I5e58017f74c3989b20b5b1cc2bc4483c95720520\n"
    },
    {
      "commit": "6839e8e9ee894191e3fa857859311337357fe191",
      "tree": "76c1c6dc6e672093bf7e8f174a861cd180494bf8",
      "parents": [
        "5e0243f4d6313419fdc3affc205b790a2a965208"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jun 23 12:55:29 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:57 2013 -0700"
      },
      "message": "Add Thread::join\n\nThis new API will be used by applications that previously used the\nlower-level pthread APIs (including pthread_join).  Centralizing on the\nThread class instead of pthread will permit additional functionality to\nbe added later in only one location.\n\nChange-Id: I8460169ac9c61ac9f85752405ed54c94651058d7\n"
    },
    {
      "commit": "5e0243f4d6313419fdc3affc205b790a2a965208",
      "tree": "4b4a0de4b4807d6a8273090e999f9b4bc0d94d49",
      "parents": [
        "7f57eac6a706b471f2dcadd15868797ea081306a"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jun 22 17:42:23 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:57 2013 -0700"
      },
      "message": "Thread ID zero for androidSetThreadSchedulingGroup\n\nAlready implemented by androidSetThreadPriority but not documented\n\nChange-Id: I85302b17092952065f3f3a4214d8d8abdd465dbd\n"
    },
    {
      "commit": "47f48572db6a5b4b1b890f93f07ff2bd7c7dc95c",
      "tree": "dbc4b0df7976155eb4a1f3befdc21b0b3122a5ba",
      "parents": [
        "9b6259aa579291deb7334a968bd30878a5fec386"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jun 14 10:35:34 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:57 2013 -0700"
      },
      "message": "Bug 4608375\n\nUpdate priority and policy together for audio threads\n\nChange-Id: Ib3b07b32586c222c4aacbf23414ae8b05db502be\n"
    },
    {
      "commit": "a538e268e653d8fa1ea27659f507bc0ce5ceead0",
      "tree": "4426a4dd3204a61e166868bd789dac6783e43157",
      "parents": [
        "bf7a884f22299ad424e350c497248bf6cdcd6467"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jun 02 08:59:28 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:57 2013 -0700"
      },
      "message": "Remove redundant memory barrier\n\npthread_create already includes the necessary memory barriers:\n - parent at pthread_create : pthread_mutex_unlock(start_mutex)\n - child at __thread_entry : pthread_mutex_lock(start_mutex)\n\nAdd lock around uses of mThread.\n\nAdded comments:\n - uses of mThread require lock\n - androidCreateRawThreadEtc returned ID is not safe for direct use from non-parent threads.\n\nChange-Id: I18cb296b41ddaf64cf127b57aab31154319b5970\n"
    },
    {
      "commit": "966a48f3e78e75c3a4f3a2f23b98e970f06bf983",
      "tree": "991c30600b750da2568dc4255bb2692e79d2748d",
      "parents": [
        "84a23fa4a9a2dca0f53fae2283b57fff988d1c74"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Feb 01 11:32:29 2011 -0800"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:55 2013 -0700"
      },
      "message": "Bug 3362814 Fix SMP race in access to mRequestExit\n\nAlso fix an unlikely SMP race in access to mHoldSelf on entry to _threadLoop.\n\nChange-Id: I6cbc0b94739c7dd5e77e8a5ba0da22cdc0b1a4db\n"
    },
    {
      "commit": "dafff0bcc10fe1ff80e68a31793bbdea2ec8d0c3",
      "tree": "d6d10a1a8d8a2478e2a737bb34b0a1b74d60b9f8",
      "parents": [
        "ff49de731f3361afc77abe9b60bc7c8e6708f886"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Feb 16 10:13:53 2011 -0800"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:55 2013 -0700"
      },
      "message": "Clean up use of HAVE_ANDROID_OS\n\nHAVE_ANDROID_OS was defined as \"1\" for targets, but never defined as \"0\"\nfor non-targets. Changing them to #ifdef should be safe and matches\nall the other uses of HAVE_ANDROID_OS throughout the system.\n\nChange-Id: I82257325a8ae5e4e4371ddfc4dbf51cea8ea0abb\n"
    },
    {
      "commit": "741cbc33820cb7c8891f3ed0eae820ec447e298d",
      "tree": "a4f8424cfc6857217d01a51b3ab46f237bedad45",
      "parents": [
        "a25d2caf15c8f75f94f49807e749cde298b7f631"
      ],
      "author": {
        "name": "Ritu Srivastava",
        "email": "rsrivast@sta.samsung.com",
        "time": "Tue Jan 25 16:23:08 2011 -0800"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:55 2013 -0700"
      },
      "message": "fix failing thread object run\n\nA previously exited Thread object refuses to run again, if the\nthread-id of the caller, conincides with the thread-id it previously\nused in the worker thread. Hence reset the previously used worker\nthread-id to -1 when it exits.\n\n Signed-off-by: Ritu Srivastava \u003crsrivast@sta.samsung.com\u003e\n\nChange-Id: I873925c312a43ec8a16392b98cc959042ff6bfd2\n\nSigned-off-by: Madan Ankapura \u003cmankapur@sta.samsung.com\u003e\n"
    },
    {
      "commit": "a25d2caf15c8f75f94f49807e749cde298b7f631",
      "tree": "3906130b5809beae00c3bf04d565346a16cca153",
      "parents": [
        "ac61abe286a768445670a2d0e0cf99de0e697718"
      ],
      "author": {
        "name": "Mike Lockwood",
        "email": "lockwood@android.com",
        "time": "Tue Jan 25 09:41:20 2011 -0800"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:55 2013 -0700"
      },
      "message": "Revert \"libutils: Fix race condition in Thread::requestExitAndWait()\"\n\nThis change turned out to be unnecessary\n\nThis reverts commit 4a7f412e1d932f46f6adf079df4d9ee7279bd795.\n"
    },
    {
      "commit": "ac61abe286a768445670a2d0e0cf99de0e697718",
      "tree": "2218519038f526716b150447b7d5fde2475de0d8",
      "parents": [
        "b90c51a7258966c0372a84ec2059fd1b03e2a782"
      ],
      "author": {
        "name": "Mike Lockwood",
        "email": "lockwood@android.com",
        "time": "Mon Jan 24 15:20:05 2011 -0800"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:55 2013 -0700"
      },
      "message": "libutils: Fix race condition in Thread::requestExitAndWait()\n\nHold a reference to the thread in requestExitAndWait() so the\ncondition variable it is waiting on will not be destroyed before\nits wait() call returns.\n\nChange-Id: If8b6cf84117203926a4180f43f0224469e92a500\nSigned-off-by: Mike Lockwood \u003clockwood@android.com\u003e\n"
    },
    {
      "commit": "fe2c46327ff4bf5639d1634261797456a06d6ac4",
      "tree": "dd979eded564feacf06ffa9fb49d74e209e21146",
      "parents": [
        "b69f49bab9502ddb0850280f2aea12fb34475777"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jan 04 11:58:04 2011 -0800"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:55 2013 -0700"
      },
      "message": "Fix issue 3302649.\n\nThe cause of the problem is that AudioTrack::start() can fail if it is called from a newly created\nthread that has the same ID as the AudioTrack callback thread that has just been stopped and not yet exited.\nThis is possible as the thread ID used by the Thread class is not the TID.\n\nThe fix consists in clearing the thread ID before exiting the thread loop.\n\nChange-Id: I66e679665c384403cb3ba2c31746f5de72d5836d\n"
    },
    {
      "commit": "a78bab0359fb60f46f89978dbb4e135fb11ea68e",
      "tree": "2e057c7e84fcd1b73e2d910cf3dd84b17c5b4658",
      "parents": [
        "4e30623bdabfe392d5ef902666aad9be291cce73"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Sep 09 15:50:18 2010 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:54 2013 -0700"
      },
      "message": "Always set the scheduling group when starting a new thread.\n\nChange-Id: Ia33acf13fc3752707f3819928c36315e223fa1bd\n"
    },
    {
      "commit": "193c18ca8a61116b74496e9bd0954ee864337dc3",
      "tree": "fa6aafe17d0b71a5b790fbe8ebe73495fdd6479b",
      "parents": [
        "16d217efbbeb1fde5e3925ad4340856730ad0c98"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Sep 07 12:32:19 2010 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:54 2013 -0700"
      },
      "message": "Hopefully fix the build.\n\nChange-Id: Id8cd92c0895c9939e1386ef488bd1309a3be3568\n"
    },
    {
      "commit": "16d217efbbeb1fde5e3925ad4340856730ad0c98",
      "tree": "ad6c4af608678db4f8b0e3222bf312039587cf94",
      "parents": [
        "6bdd470cf1a74d136c911294f8c380bc13e9f3a2"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Sep 03 17:07:07 2010 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:54 2013 -0700"
      },
      "message": "Add system property to turn off scheduling groups.\n\nDo this:\n\nadb shell setprop debug.sys.noschedgroups 1\n\nChange-Id: I6e06a74205fd45ee1526ce71fe33944465d39984\n"
    },
    {
      "commit": "aaa7ef86c623541b85a36f208ca1c0c9f8c2c2c6",
      "tree": "dbbdc1113e9b4b415e314a656656c9eb3b1c58fc",
      "parents": [
        "3432efa95e93776f0e45ff9729a0e4580b4c8eba"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Dec 08 19:45:59 2009 -0800"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:52 2013 -0700"
      },
      "message": "Maybe really fix windows build.\n"
    },
    {
      "commit": "3432efa95e93776f0e45ff9729a0e4580b4c8eba",
      "tree": "583a11e00d25dd4467feebc99c4b0f10600799e5",
      "parents": [
        "235af97debd4b75263dfdb9e3be78e50eff2a53a"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Dec 08 16:38:01 2009 -0800"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:52 2013 -0700"
      },
      "message": "Hopefully fix Windows build\n"
    },
    {
      "commit": "235af97debd4b75263dfdb9e3be78e50eff2a53a",
      "tree": "f9607c32075ec433e3c2702cbe3ab335ff768ee0",
      "parents": [
        "9a2d83e698b16ec86ad2751b6e7cf103ad645cce"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Dec 07 17:59:37 2009 -0800"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:52 2013 -0700"
      },
      "message": "Propagate background scheduling class across processes.\n\nThis is a very simply implementation: upon receiving an IPC, if the handling\nthread is at a background priority (the driver will have taken care of\npropagating this from the calling thread), then stick it in to the background\nscheduling group.  Plus an API to turn this off for the process, which is\nused by the system process.\n\nThis also pulls some of the code for managing scheduling classes out of\nthe Process JNI wrappers and in to some convenience methods in thread.h.\n"
    },
    {
      "commit": "51ce3ad7607a4b5ac533e6a3fd90709b30dba03f",
      "tree": "ffc3a9c2a4160f51677170ed4ad39c0912f0a06f",
      "parents": [
        "641b630d2b08fa1cc48ee8e03b69b498f246c08e"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Sep 09 02:38:13 2009 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:52 2013 -0700"
      },
      "message": "use broadcast() instead of signal() when signaling the condition-variable Thread::RequestExitAndWait() is waiting for\n\nwe could have several thread waiting on the condition and they all need to wake-up.\nalso added a debug \"mTid\" field in the class, which contains the tid of the thread (as opposed to pthread_t), this\nis useful when debugging under gdb for instance.\n"
    },
    {
      "commit": "9bafd12fa18b74e30995525a32b1be5d7804656a",
      "tree": "ecafc7f5073874b9cb169080d30246cb6ea44e75",
      "parents": [
        "ce87c24b3ab6f06a04c1e480814d7d66881aa007"
      ],
      "author": {
        "name": "David \u0027Digit\u0027 Turner",
        "email": "digit@google.com",
        "time": "Sat Aug 01 00:20:17 2009 +0200"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:51 2013 -0700"
      },
      "message": "Fix Win32 libutils to get a working SDK build.\n"
    },
    {
      "commit": "1555436473afd296488235f0aa22bb17162a929f",
      "tree": "6add1b33f4a6b47c2b6a46fa28ada3a71801ce52",
      "parents": [
        "d8cc052fafdc7a5580a36d1b27f819551e6f06ac"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Sun Jul 12 23:11:20 2009 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:51 2013 -0700"
      },
      "message": "implement Mutex and Condition with pthread instead of calling futex directly.\n\ninternally pthread uses futex. the implementation consists of simple inlines\nthere are no implementation files anymore.\n"
    },
    {
      "commit": "7a4c83922e551506fdc6c5fbca6d107ebdeef867",
      "tree": "de87f6c1506f42d898eddaa8d90c70192e356ed2",
      "parents": [
        "cbb1011c95e0c25c29e40e203a6a31bccd029da3"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Thu Mar 05 14:34:35 2009 -0800"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:49 2013 -0700"
      },
      "message": "auto import from //depot/cupcake/@136594\n"
    },
    {
      "commit": "cbb1011c95e0c25c29e40e203a6a31bccd029da3",
      "tree": "4697a3a86867bf33c2d9dd4e4a2743d3eb947523",
      "parents": [
        "cf59fa8dc7ddca5a172860223b06afed5d4ec0e0"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 19:31:44 2009 -0800"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:49 2013 -0700"
      },
      "message": "auto import from //depot/cupcake/@135843\n"
    },
    {
      "commit": "cf59fa8dc7ddca5a172860223b06afed5d4ec0e0",
      "tree": "e780750523e4f032abf902a0e6ff8b9d52c54e54",
      "parents": [
        "7aa707a5d654b7af67b133955c454c8e23a12abc"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 18:28:45 2009 -0800"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:49 2013 -0700"
      },
      "message": "auto import from //depot/cupcake/@135843\n"
    },
    {
      "commit": "7aa707a5d654b7af67b133955c454c8e23a12abc",
      "tree": "bf445487740866dcc015ab85001f00573db0fc7e",
      "parents": [
        "c739660fb7c06a845f829a86302bd4a91641318f"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 14:04:24 2009 -0800"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:49 2013 -0700"
      },
      "message": "auto import from //depot/cupcake/@132589\n"
    },
    {
      "commit": "c739660fb7c06a845f829a86302bd4a91641318f",
      "tree": "88425ebcbf224552a7580088f123ba5e769aa190",
      "parents": [
        "3fec108e6c2a90fbb1976f69407805ff653eb0e7"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Mon Mar 02 22:54:33 2009 -0800"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:49 2013 -0700"
      },
      "message": "auto import from //depot/cupcake/@137055\n"
    },
    {
      "commit": "d245d1d09731d6a19e8a25559d3907f54441ac3d",
      "tree": "b79df48666f286bd33efb4ffdbf4b3fa28f5dd91",
      "parents": [
        "13f4c9fb279f1b34a3b47a6eac80b8a09d2d3a79"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Oct 21 07:00:00 2008 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:46 2013 -0700"
      },
      "message": "Initial Contribution\n"
    }
  ]
}
