)]}'
{
  "log": [
    {
      "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": "ae07445e9793724324b93bb593fe20be2a386707",
      "tree": "21b2375319af1a9810b23628351d8d6863de837c",
      "parents": [
        "1b781ab0e0e8d59a7a8d1140bf6dee96a48a160c"
      ],
      "author": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Mon Jan 09 18:35:44 2012 +0000"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:58 2013 -0700"
      },
      "message": "Rename LOG_ASSERT to ALOG_ASSERT  DO NOT MERGE\n\nSee https://android-git.corp.google.com/g/157519\n\nBug: 5449033\nChange-Id: I8ceb2dba1b031a0fd68d15d146960d9ced62bbf3\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": "a1d3391b1ec04dece202baf288f1741006afa552",
      "tree": "a99b7cd9fb3f45cb7f3991a95daba97f6819f139",
      "parents": [
        "eb0953307ce75cec031aedbf21abff08e5a737e5"
      ],
      "author": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Wed Jan 04 20:05:49 2012 +0000"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:58 2013 -0700"
      },
      "message": "Rename (IF_)LOGI(_IF) to (IF_)ALOGI(_IF)  DO NOT MERGE\n\nSee https://android-git.corp.google.com/g/156801\n\nBug: 5449033\nChange-Id: Ib08fe86d23db91ee153e9f91a99a35c42b9208ea\n"
    },
    {
      "commit": "eb0953307ce75cec031aedbf21abff08e5a737e5",
      "tree": "f68629af933e04983e26db5503983990de9b2881",
      "parents": [
        "53ddace1a585c0515ea1c2e2091c4a8cd3a94864"
      ],
      "author": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Tue Dec 20 16:23:08 2011 +0000"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:58 2013 -0700"
      },
      "message": "Rename (IF_)LOGD(_IF) to (IF_)ALOGD(_IF)  DO NOT MERGE\n\nSee https://android-git.corp.google.com/g/156016\n\nBug: 5449033\nChange-Id: I4c4e33bb9df3e39e11cd985e193e6fbab4635298\n"
    },
    {
      "commit": "e735f23018b398f45bd052b63616d7a45e29515b",
      "tree": "49b0eac2a5288a2d3c99fb15cc079f9ff1e0834d",
      "parents": [
        "11189f5f797ef29ee670ab4683f97c2cfc109899"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Nov 14 18:29:15 2011 -0800"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:58 2013 -0700"
      },
      "message": "Add a basic hashtable data structure, with tests!\n\nThe basic hashtable is intended to be used to support a variety\nof different datastructures such as map, set, multimap,\nmultiset, linkedmap, generationcache, etc.\n\nConsequently its interface is fairly primitive.\n\nThe basic hashtable supports copy-on-write style functionality\nusing SharedBuffer.\n\nThe change introduces a simple generic function in TypeHelpers for\nspecifying hash functions.  The idea is to add template\nspecializations of hash_type\u003cT\u003e next to the relevant data structures\nsuch as String8, String16, sp\u003cT\u003e, etc.\n\nChange-Id: I2c479229e9d4527b4fbfe3b8b04776a2fd32c973\n"
    },
    {
      "commit": "11189f5f797ef29ee670ab4683f97c2cfc109899",
      "tree": "5cf6e6ffbf472a8d7a7e28808263e2de4f255d09",
      "parents": [
        "f36821289cfa4a1924be4c0800f0e1ac29241c0a"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Nov 21 21:04:55 2011 -0800"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:58 2013 -0700"
      },
      "message": "Use libcorkscrew to format the stack trace.\n\nChange-Id: I3a5439ada76bc77c2dd491eaed2272e16a811cc7\n"
    },
    {
      "commit": "e7f371657255d0b407d375a3342d4fea3cf3cfa1",
      "tree": "623d6ac6d435ea0e1d5dbf002b8cf580bcefa1fa",
      "parents": [
        "7451bb44100d9d4915c3c4e4366ab92213947b4b"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Nov 03 17:30:54 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:58 2013 -0700"
      },
      "message": "Slight change to the unwinder API.\n\nChange-Id: I5424de76a21b74842e004e0281936b3f492d3c7a\n"
    },
    {
      "commit": "7451bb44100d9d4915c3c4e4366ab92213947b4b",
      "tree": "5cc6f1f4ef52d4fcbafa52a766ed4d628c8c64c7",
      "parents": [
        "90f43dce840b2a815426b6bfcdbe5f92358ab956"
      ],
      "author": {
        "name": "Jamie Gennis",
        "email": "jgennis@google.com",
        "time": "Thu May 12 17:39:03 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:58 2013 -0700"
      },
      "message": "BlobCache: implement cache serialization\n\nThis change adds serialization and deserialization functionality to\nBlobCache, conforming to the Flattenable interface.\n\nChange-Id: Ibc99cb1c3d015f363d57d0713eabccec07ff975e\n"
    },
    {
      "commit": "90f43dce840b2a815426b6bfcdbe5f92358ab956",
      "tree": "7c2ce777441fce483f62885c32c6b46181727a24",
      "parents": [
        "b37fbe9f810545bf62468fea5958325caa3635be"
      ],
      "author": {
        "name": "Jamie Gennis",
        "email": "jgennis@google.com",
        "time": "Sun Oct 30 18:10:41 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:58 2013 -0700"
      },
      "message": "BlobCache: remove the mutex locking\n\nThis change removes the mutex from the BlobCache class.  The caller must\nbe responsible for thread synchronization in order to properly implement\nthe Flattenable interface, which is coming soon.  Otherwise would be the\npotential for the cache contents to change between the call to the\ngetFlattenedSize and flatten methods.  Because the caller must do this\nsynchronization anyway there\u0027s no reason to also some synchronization\ninside BlobCache.\n\nChange-Id: Ie1f4f6f82b78744f46a41ce863cac0cad276a20e\n"
    },
    {
      "commit": "b37fbe9f810545bf62468fea5958325caa3635be",
      "tree": "948cb4f6c9742003740e5a53655d5446e9312463",
      "parents": [
        "8b4cf779b29144d6d469afb4daabcbf069725db2"
      ],
      "author": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Thu Oct 20 11:56:00 2011 +0100"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:58 2013 -0700"
      },
      "message": "Rename (IF_)LOGV(_IF) to (IF_)ALOGV(_IF)  DO NOT MERGE\n\nSee https://android-git.corp.google.com/g/#/c/143865\n\nBug: 5449033\nChange-Id: I0122812ed6ff6f5b59fe4a43ab8bff0577adde0a\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": "ea45b01f9bc2d1ef1f8d97ca0480336d23e0aa97",
      "tree": "f1a630a8a121c81bd7b153edf084cf9efef3d6cd",
      "parents": [
        "26ad34522e85b4427ec0ae662dd43eb78a2c5f95"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Oct 19 20:32:43 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:58 2013 -0700"
      },
      "message": "Use libcorkscrew for stack unwinding.\n\nChange-Id: Iee1ee5a2018ab8cfc1ce12ec2a124809245eaa02\n"
    },
    {
      "commit": "26ad34522e85b4427ec0ae662dd43eb78a2c5f95",
      "tree": "913a390b42ca4cff87f061103a70da098ab3bd47",
      "parents": [
        "5cd324794ccadfefcdcde849fb6d682622773944"
      ],
      "author": {
        "name": "Iliyan Malchev",
        "email": "malchev@google.com",
        "time": "Wed Oct 19 22:35:56 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:58 2013 -0700"
      },
      "message": "add -ldl to host executables\n\nThis fixes the build on Linux when RefBase is compiled with reference tracking\nenabled.\n\nChange-Id: I3e931e0b463ce836f6fdb30c37068d77144631a3\nSigned-off-by: Iliyan Malchev \u003cmalchev@google.com\u003e\n"
    },
    {
      "commit": "aa983c91caf848b9659599336a4156c28a125fa9",
      "tree": "0c7a851cafa35df4426b7ad754a8397e31675f26",
      "parents": [
        "6c31a2fb6080049e444b4aac71b037eccd0d3ddc"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Oct 07 13:28:18 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:58 2013 -0700"
      },
      "message": "Fix regression in CursorWindow.copyStingToBuffer.\nBug: 5332296\n\nChange-Id: Iff9eed786f0a8293b6156f883a66a322ddad5e99\n"
    },
    {
      "commit": "9c63a80f1f39fb969ec439e6b51614abb883d370",
      "tree": "283225a1e21badf656ccf5b38bc2c29a6a851907",
      "parents": [
        "7b4ce614cf350e08680a71712c00dc152c3fa6cc"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Sep 28 17:33:11 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:58 2013 -0700"
      },
      "message": "may fix the build\n\nChange-Id: I065b1e6652f0e800ba5674a6d9aa954c3ac6c790\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": "f71114b6a4e350d389c6cdd314a4cbb970c71f5b",
      "tree": "6912466ac3e2bfb480e088b137a011331bb2545c",
      "parents": [
        "9ee3fc4dc3219bc68f2efdffa38d6dfc158d8961"
      ],
      "author": {
        "name": "Andy McFadden",
        "email": "fadden@android.com",
        "time": "Wed Aug 31 07:43:40 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:57 2013 -0700"
      },
      "message": "Resurrect verbose binder logging\n\nUpdated the command name lists, and masked off the additional bits in\nthe command word when doing the name lookup.\n\nMade descriptor values easier to grep for and consistent with kernel\noutput (i.e. decimal rather than hex).  Attempt to show transaction\ndescriptors as such (they\u0027re in a union with a pointer).\n\nAlso, the writeLines() function in Static was using a no-op\nlogging call to write an iovec.  It looks like all callers are using\nN\u003d1, so I just added a log for the first string.\n\nBug 5155269\n\nChange-Id: I417b8d77da3eb6ee1d2069ba94047210f75738bc\n"
    },
    {
      "commit": "ad09965050f8226fda6f5238db060ce65abaa71c",
      "tree": "ea9fe13c4be2839f0677ea8f7a4392053518892c",
      "parents": [
        "c3a5225d4ec0e98ca671ada8cba17878c656e3d5"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Aug 10 21:07:02 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:57 2013 -0700"
      },
      "message": "fix a memory leak and memory corruption in RefBase\n\nwe would leak a weakref_impl if a RefBase was never incWeak()\u0027ed.\nthere was also a dangling pointer that would cause memory corruption\nand double-delete when a custom destroyer was used to delay the\nexecution of ~RefBase.\n\nit turns out that the custom destroyer feature caused most of the\nproblems, so it\u0027s now gone. The only client was SurfaceFlinger\nwho now handles things on its own.\n\nRefBase is essentially back its \"gingerbread\" state, but the\ncode was slightly cleaned-up.\n\nBug: 5151207, 5084978\nChange-Id: Id6ef1d707f96d96366f75068f77b30e0ce2722a5\n"
    },
    {
      "commit": "88761b2796cf7b57be99d8141dae4a7e78ab5494",
      "tree": "26f8d43038f6f9b5d5dea8df6e39df4e6418a12a",
      "parents": [
        "7e01e60e5ee3f833d3017b575d5c449a5068148b"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Jul 12 14:14:01 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:57 2013 -0700"
      },
      "message": "Move extract native libraries to JNI code\n\nThe built-in ZipFile class was quite a long time to find an unpack\nlibraries. Move everything to using the libutils ZipFileRO class that\ngoes quite a bit faster. Initial measurements are 6 times faster than\nthe Java code.\n\nAlso, read files off the disk and compare their CRC against the APK\u0027s\nCRC to see if we need to write the new file to disk. This also cuts down\nthe bootup time by up to a second per APK that has native files.\n\nChange-Id: Ic464a7969a17368fb6a6b81d026888c4136c7603\n"
    },
    {
      "commit": "7e01e60e5ee3f833d3017b575d5c449a5068148b",
      "tree": "5edd27b861f932024356974b1f5ab1a8c4f4dd79",
      "parents": [
        "d8734d19ec3a24f62b5c61af0dd20ec19dc145ec"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Jul 20 15:19:50 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:57 2013 -0700"
      },
      "message": "Remove unimplemented memory pool.\n\ndlmalloc does such a great job that we don\u0027t need a pool anyways.\n\nChange-Id: I105b28c4a5c491543959190c7c0a9de75a5b8052\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": "bbbd761de125b50ac83047bccb0b6e0e32ce74a1",
      "tree": "8f2a344c42416f8a006e296c07157a7faeeb97fa",
      "parents": [
        "aa5daede6a9e72f7611b19aa4e580a98878e6825"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Jul 14 00:29:49 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:57 2013 -0700"
      },
      "message": "Minor code cleanups in vector.\n\nFixed a potential bug where calling replaceAt with a reference to\nan existing element in the vector at the same index would cause\nthe element to be destroyed while being copied to itself.\n\nRefactored the conditions in _grow and _shrink for clarity.\nThe computations are exactly the same but I think it reads better\nthis way.  In particular, the ssize_t variable \u0027s\u0027 is gone: it didn\u0027t\nneed to be signed anyways because its value could never be negative.\n\nChange-Id: If087841c15e6a87160eee874720c4a77eb0e99a6\n"
    },
    {
      "commit": "aa5daede6a9e72f7611b19aa4e580a98878e6825",
      "tree": "1bf95642f96886e8a593e6c305bf0f11be9f2eca",
      "parents": [
        "8c79cc91e4962339a4680fd5cfdb94fcd7e022f6"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Jul 13 22:22:02 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:57 2013 -0700"
      },
      "message": "Replace Vector _grow/_shrink checks with assert.\n\nOn review of the code, _grow and _shrink are checking for conditions\nthat cannot happen and that don\u0027t even really make sense.  For\nexample, if _shrink is called with where + amount \u003e mCount then\nthis is really bad, however the check only considered the case\nwhen where \u003e\u003d mCount and then it would arbitrarily choose a new\nvalue for where.  Huh?\n\nAs it happens, the callers are correctly validating the\narguments before passing them down to these methods so we can\nget rid of this code.\n\nChange-Id: I921852dba8997065bb0e9cac733e82028d14afcd\n"
    },
    {
      "commit": "8c79cc91e4962339a4680fd5cfdb94fcd7e022f6",
      "tree": "996d5da7aa8299dd569bd115c4efd038a973331b",
      "parents": [
        "37ba34b48775afb4bfe8d472b3ddd7632f8338da"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Mon Jul 11 11:31:57 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:57 2013 -0700"
      },
      "message": "Compress the backup output stream\n\nZlib compression, with a full flush between each application\u0027s\ndata.  Encryption will be performed on the already-compressed data\nonce that\u0027s implemented.\n\nOn restore, the streamed data is similarly uncompressed on the fly.\n\nChange-Id: I19b65c88e759a66527d10913d18fffa9df0bc011\n"
    },
    {
      "commit": "37ba34b48775afb4bfe8d472b3ddd7632f8338da",
      "tree": "ef1cfd3cb27228a0172af6aeb00b8d148c2a1a5b",
      "parents": [
        "266a7d6223c90dd9707304f581d5e6c340335604"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Jul 11 22:12:16 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:57 2013 -0700"
      },
      "message": "Remove the simulator target from all makefiles.\nBug: 5010576\n\nChange-Id: I04d722f258951a3078fe07899f5bbe8aac02a8e8\n"
    },
    {
      "commit": "266a7d6223c90dd9707304f581d5e6c340335604",
      "tree": "06a6f72efffc90fe203dcf5ac01a5f19b85f189b",
      "parents": [
        "6fbe0a86a8bb9da0ff879c3d237c2637eb0d5a8d"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Jul 11 16:26:18 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:57 2013 -0700"
      },
      "message": "Fix typo in an assert\u0027s log\n\nChange-Id: I94883a23a0a92eaf3e4976f942f747a2137499ac\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": "b86c8e4e55c860a6a7e1009fda2a4803da45b412",
      "tree": "00a05380bf97b123429fcfda914a130bfc772e9d",
      "parents": [
        "9d05973685fc6ebe8e2878597128c41a61e149f9"
      ],
      "author": {
        "name": "Jason Simmons",
        "email": "jsimmons@google.com",
        "time": "Tue Jun 28 17:43:30 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:57 2013 -0700"
      },
      "message": "Add a linear transform library to libutils\n\nChange-Id: Icdec5a6bebd9d8f24b3f335f8ec8b09a5810a774\n"
    },
    {
      "commit": "9d05973685fc6ebe8e2878597128c41a61e149f9",
      "tree": "52ff99393c1ee18cf7e392c70a5b69801a2f9079",
      "parents": [
        "6839e8e9ee894191e3fa857859311337357fe191"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Fri Jun 24 15:06:48 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:57 2013 -0700"
      },
      "message": "Fix settings restore\n\nAlso correct the debug-mode logging of error locations in backup data.\nBug 4914182\n\nChange-Id: Ie7dda0192afa819e42490b7ffd2d3db6f11968f6\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": "967ad860da30d09c2003274389cb53abe165b6cc",
      "tree": "6ad64c4c8be1d7e9889a3101d9f0116cc779d22e",
      "parents": [
        "9c8fa9ed4111c69c82ace01c8a7ac3beeacdce78"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Jun 15 20:41:15 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:57 2013 -0700"
      },
      "message": "Use rand() for MinGW\n\nThe version of MinGW we use doesn\u0027t have nrand48() which is really lame,\nbut we need to use libutils in the Windows SDK.\n\nChange-Id: If854c03dbf02bc29e79f49e4539f08c2bf057517\n"
    },
    {
      "commit": "9c8fa9ed4111c69c82ace01c8a7ac3beeacdce78",
      "tree": "f04e23041d0b4dd0c2585bd8f461061652d8d4d5",
      "parents": [
        "267ba69c2e4ae39b9fe98d4be592c7b59e7e57a1"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Jun 15 20:42:47 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:57 2013 -0700"
      },
      "message": "revert surfaceflinger leak fix as it uncovered a crasher on xoom (DO NOT MERGE)\n\nThis reverts commit 52a43990880b27808bcf562afcc4209d34728e6e.\n\nChange-Id: I1856a48f863b051395b8091ddfd1e01292fa1b1e\n"
    },
    {
      "commit": "267ba69c2e4ae39b9fe98d4be592c7b59e7e57a1",
      "tree": "ec1160244d799eab869ab7f65aabe26943df4ef2",
      "parents": [
        "dace0b45d00814dda275d81b82c1673dd88cf3e9"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Jun 15 20:41:24 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:57 2013 -0700"
      },
      "message": "Revert \"revert surfaceflinger leak fix as it uncovered a crasher on xoom\"\n\nThis reverts commit af6edba59e250adbdfa5b3c3be134f70d8c38a16.\n\nChange-Id: I7793d3ca8a4d20a2b188364f47854328ab5f586d\n"
    },
    {
      "commit": "dace0b45d00814dda275d81b82c1673dd88cf3e9",
      "tree": "f04e23041d0b4dd0c2585bd8f461061652d8d4d5",
      "parents": [
        "0151ac8945216bb6c7ae23b6a7e449e5ede8a69c"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Jun 15 19:20:52 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:57 2013 -0700"
      },
      "message": "revert surfaceflinger leak fix as it uncovered a crasher on xoom\n\nBug: 4600244\nChange-Id: Ia68ebf0f243a051ff6a21b3863e3e5d259bbf7ac\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": "9b6259aa579291deb7334a968bd30878a5fec386",
      "tree": "fe824d4cba3dc2b8c8fabb06948ccc9801b1e74c",
      "parents": [
        "a538e268e653d8fa1ea27659f507bc0ce5ceead0"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Sun Jun 12 18:05:53 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:57 2013 -0700"
      },
      "message": "fix RefBase so it retains binary-compatibility with gingerbread (DO NOT MERGE)\n\nBug: 4595257\nChange-Id: I1db83149107d7dab1f0b7e73c684e0ff82e17e62\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": "bf7a884f22299ad424e350c497248bf6cdcd6467",
      "tree": "ecd6ea25601af77c2545f65cce34d09fa8f383d0",
      "parents": [
        "384f13a078cd6ac36b4c15be732036cdfb572ca8"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Jun 09 11:29:08 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:56 2013 -0700"
      },
      "message": "Enforce public resource restriction on bag parents.\n\nNeed to put some more styles in the SDK to avoid breaking apps.\n\nAlso, welcome Android 3.2.\n\nChange-Id: Ia31d07c9b1b91ad868d8630437fdc1b5ae24f37d\n"
    },
    {
      "commit": "384f13a078cd6ac36b4c15be732036cdfb572ca8",
      "tree": "a91b0253bcca71078aaefbefe4695b543df74e85",
      "parents": [
        "f90c1e290acc7e5b68fcf6bf1fd7c9ea5136dd89"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Wed Jun 08 20:09:31 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:56 2013 -0700"
      },
      "message": "Fix handling of directory entries\n\nDon\u0027t emit tar blocks for directories with an invalid nonzero size.  Also, if\nsuch an entry is encountered during restore, don\u0027t actually attempt to treat\nit as valid and thus skip over the next actual tar entry.\n\nThis patch also adds tracking of the data actually consumed during restore,\nand reports a total at the end of stream.\n\nChange-Id: I625173f76df3c007e899209101ff2b587841f184\n"
    },
    {
      "commit": "f90c1e290acc7e5b68fcf6bf1fd7c9ea5136dd89",
      "tree": "b187d5cd0fe9dbd4f178983af363ccf84358a1be",
      "parents": [
        "4571143fd31f03a63e7d251b28bb58f2c8b584e0"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Jun 07 14:09:47 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:56 2013 -0700"
      },
      "message": "Work on issue #4518815: Compatibility mode introduces compatibility regression...\n\n...for Market App iRunner\n\nThere were a lot of serious issues with how we updated (or often didn\u0027t update)\nthe display and resource state when switching compatibility mode in conjunction\nwith restarting and updating application components.  This addresses everything\nI could find.\n\nUnfortunately it does *not* fix this particular app.  I am starting to think this\nis just an issue in the app.  This change does fix a number of other problems\nI could repro, such as switching the compatibility mode of an IME.\n\nAlso a few changes here and there to get rid of $#*\u0026^!! debug logs.\n\nChange-Id: Ib15572eac9ec93b4b9966ddcbbc830ce9dec1317\n"
    },
    {
      "commit": "4571143fd31f03a63e7d251b28bb58f2c8b584e0",
      "tree": "60d1ea6fd629f0e4611433ba5a321671358a488a",
      "parents": [
        "7c9f673ed619f0054dc6de45ac9c9396112c30d4"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Jun 08 16:05:30 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:56 2013 -0700"
      },
      "message": "Fix a leak in RefBase (DO NOT MERGE)\n\nthis bug was introduced recently. it caused RefBase\u0027s weakref_impl\nstructure to be leaked for every RefBase object (about 20 bytes).\n\nChange-Id: Ia9b155fbfa643ef72cfb8129e96260a3b806a78c\n"
    },
    {
      "commit": "7c9f673ed619f0054dc6de45ac9c9396112c30d4",
      "tree": "e65b7165de85c978f65197daeca2bf8ddc525b65",
      "parents": [
        "9ac51b0991a2a9f00f3b452eec805873781463cd"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Tue Jun 07 13:17:17 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:56 2013 -0700"
      },
      "message": "Fix embedded spaces in tar stream EVEN HARDER\n\nChange-Id: I97ac586ff3541a05d73e1e53f680517c15e6c662\n"
    },
    {
      "commit": "9ac51b0991a2a9f00f3b452eec805873781463cd",
      "tree": "4b097d9b210003b9488256f87779628db52b5001",
      "parents": [
        "8deb51e8e492219c72b5f143868958af2ad56459"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Thu Jun 02 15:08:13 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:56 2013 -0700"
      },
      "message": "Implement shared-storage full backup/restore\n\nEvery available shared-storage volume is backed up, tagged with its\nordinal in the set of mounted shared volumes.  This is an approximation\nof \"internal + the external card\".  This lets us restore things to the\nsame volume [or \"equivalent\" volume, in the case of a cross-model\nrestore] as they originated on.\n\nAlso fixed a bug in the handling of files/dirs with spaces in\ntheir names.\n\nChange-Id: I380019da8d0bb5b3699bd7c11eeff621a88e78c3\n"
    },
    {
      "commit": "8deb51e8e492219c72b5f143868958af2ad56459",
      "tree": "e65b7165de85c978f65197daeca2bf8ddc525b65",
      "parents": [
        "2d57c038725fb59587600e0b74e1c9b4ad01c4ab"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Wed May 18 16:28:19 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:56 2013 -0700"
      },
      "message": "Restore from a previous full backup\u0027s tarfile\n\nUsage:  adb restore [tarfilename]\n\nRestores app data [and installs the apps if necessary from the backup\nfile] captured in a previous invocation of \u0027adb backup\u0027.  The user\nmust explicitly acknowledge the action on-device before it is allowed\nto proceed; this prevents any \"invisible\" pushes of content from the\nhost to the device.\n\nKnown issues:\n\n* The settings databases and wallpaper are saved/restored, but lots\n  of other system state is not yet captured in the full backup.  This\n  means that for practical purposes this is usable for 3rd party\n  apps at present but not for full-system cloning/imaging.\n\nChange-Id: I0c748b645845e7c9178e30bf142857861a64efd3\n"
    },
    {
      "commit": "2be848de6b7041da7f335a1053cbfbf841a5d1e3",
      "tree": "8d66cb55e2fcf7a2c7bbd47f144416d01fbf80a0",
      "parents": [
        "d781137601c05b623305592fbbe7b2d7d69087dd"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu May 19 20:41:27 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:56 2013 -0700"
      },
      "message": "Call RefBase::destroy() when OBJECT_LIFETIME_* is not the default\n\nChange-Id: Ifb2069e095dba57b7d97e9f2d942fd85fa975f58\n"
    },
    {
      "commit": "d781137601c05b623305592fbbe7b2d7d69087dd",
      "tree": "88a065a261a10f9915618a003b03cf4c3a92ac4f",
      "parents": [
        "23138b63df8788333f09a468cce36fd76d562577"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu May 19 18:03:31 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:56 2013 -0700"
      },
      "message": "RefBase subclasses can now decide how they want to be destroyed.\n\nThis adds a destroy() virtual on RefBase which\nsublasses can implement. destroy() is called\nin lieu of the destructor whenthe last strong\nref goes away.\n"
    },
    {
      "commit": "23138b63df8788333f09a468cce36fd76d562577",
      "tree": "13b9fc4070170b53089d21c10f7c6b837afebdf1",
      "parents": [
        "b0ce850fac6b14a54990b98b3ac0b34bd2416653"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu May 19 18:13:32 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:56 2013 -0700"
      },
      "message": "Add new \"-swNNNdp\" resource qualifier.\n\nChange-Id: I0101e88ca9d8d44138bdcaf571f24b0352f4f6ce\n"
    },
    {
      "commit": "b0ce850fac6b14a54990b98b3ac0b34bd2416653",
      "tree": "ac9d16e6802bbfe6cc8f40a4886b3140a4dc3aa4",
      "parents": [
        "1a20993c1000da3f008b34b7a5e6dbbd6fe291a6"
      ],
      "author": {
        "name": "Mårten Kongstad",
        "email": "marten.kongstad@sonyericsson.com",
        "time": "Thu May 19 16:02:35 2011 +0200"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:56 2013 -0700"
      },
      "message": "Continue idmap generation even if name lookup fails.\n\nIn resources.arsc files, a resource is represented by a specification\nblock and one or more value blocks. In rare cases, a resource name\nis also given a new resource ID, a specification block and no values\nblocks. This commit ensures idmap generation does not fail if such an\nentry is encountered.\n\nChange-Id: I32302a0b07a7a320b7eeb31886931be3bb7b7e9a\n"
    },
    {
      "commit": "1a20993c1000da3f008b34b7a5e6dbbd6fe291a6",
      "tree": "b6a731f27074e2c13f55d59e65726f0416af49aa",
      "parents": [
        "cd122333c9c45b531004f33f0cc9e059a0cd9d1e"
      ],
      "author": {
        "name": "Jamie Gennis",
        "email": "jgennis@google.com",
        "time": "Thu Apr 28 16:19:45 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:56 2013 -0700"
      },
      "message": "libutils: add a binary blob cache implementation.\n\nThis change adds an implementation of a cache that stores key/value\npairs of unstructured binary blobs.\n\nChange-Id: Idd01fdabedfa3aed6d359a6efb0592967af52651\n"
    },
    {
      "commit": "cd122333c9c45b531004f33f0cc9e059a0cd9d1e",
      "tree": "8368ae7f7f9bbc28a6ca57578260408d0ee8e458",
      "parents": [
        "fc5e703bce2a2998985ed487b168fe5477c9d360"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Fri May 13 15:38:02 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:56 2013 -0700"
      },
      "message": "Full backup tweaks\n\n* provide placeholder UI showing backup/restore start/stop/timeout\n* don\u0027t kill the progress UI in mid stream\n* tidy up the pax extended header data writing a little\n\nChange-Id: Ife0cb78e3facb541d8327f1d5ca5fe77faa6cbca\n"
    },
    {
      "commit": "fc5e703bce2a2998985ed487b168fe5477c9d360",
      "tree": "1319130d123b90791bc90614c187cfa3b671a739",
      "parents": [
        "424ec5a8aa268e56520ed0c099109f400ebc40be"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Thu May 12 17:47:12 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:56 2013 -0700"
      },
      "message": "Use pax extended tar format to support long filenames etc.\n\n\u0027tar\u0027 supports only 100-character paths; \u0027ustar\u0027 supports only\n155+100 character prefix + paths; neither supports files larger\nthan about 8 gigabytes.  We now use the POSIX.1-2001 \u0027pax\u0027\nextended tar format for those files in the backup stream that\nare too large or have too-long paths for the \u0027ustar\u0027 format.\n\nChange-Id: I2f256823091deaec9b1ccea685d2344753c6cb67\n"
    },
    {
      "commit": "424ec5a8aa268e56520ed0c099109f400ebc40be",
      "tree": "1440149c73e8a9757f6a0a4ad5209197561ab0e4",
      "parents": [
        "90d59043de5bf940c23688d7e1c9feadd1a85ddb"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Fri Apr 01 14:43:32 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:56 2013 -0700"
      },
      "message": "Full local backup infrastructure\n\nThis is the basic infrastructure for pulling a full(*) backup of the\ndevice\u0027s data over an adb(**) connection to the local device.  The\nbasic process consists of these interacting pieces:\n\n1. The framework\u0027s BackupManagerService, which coordinates the\n   collection of app data and routing to the destination.\n\n2. A new framework-provided BackupAgent implementation called\n   FullBackupAgent, which is instantiated in the target applications\u0027\n   processes in turn, and knows how to emit a datastream that contains\n   all of the app\u0027s saved data files.\n\n3. A new shell-level program called \"bu\" that is used to bridge from\n   adb to the framework\u0027s Backup Manager.\n\n4. adb itself, which now knows how to use \u0027bu\u0027 to kick off a backup\n   operation and pull the resulting data stream to the desktop host.\n\n5. A system-provided application that verifies with the user that\n   an attempted backup/restore operation is in fact expected and to\n   be allowed.\n\nThe full agent implementation is not used during normal operation of\nthe delta-based app-customized remote backup process.  Instead it\u0027s\nused during user-confirmed *full* backup of applications and all their\ndata to a local destination, e.g. via the adb connection.\n\nThe output format is \u0027tar\u0027.  This makes it very easy for the end\nuser to examine the resulting dataset, e.g. for purpose of extracting\nfiles for debug purposes; as well as making it easy to contemplate\nadding things like a direct gzip stage to the data pipeline during\nbackup/restore.  It also makes it convenient to construct and maintain\nsynthetic backup datasets for testing purposes.\n\nWithin the tar format, certain artificial conventions are used.\nAll files are stored within top-level directories according to\ntheir semantic origin:\n\napps/pkgname/a/  : Application .apk file itself\napps/pkgname/obb/: The application\u0027s associated .obb containers\napps/pkgname/f/  : The subtree rooted at the getFilesDir() location\napps/pkgname/db/ : The subtree rooted at the getDatabasePath() parent\napps/pkgname/sp/ : The subtree rooted at the getSharedPrefsFile() parent\napps/pkgname/r/  : Files stored relative to the root of the app\u0027s file tree\napps/pkgname/c/  : Reserved for the app\u0027s getCacheDir() tree; not stored.\n\nFor each package, the first entry in the tar stream is a file called\n\"_manifest\", nominally rooted at apps/pkgname.  This file contains some\nmetadata about the package whose data is stored in the archive.\n\nThe contents of shared storage can optionally be included in the tar\nstream. It is placed in the synthetic location:\n\nshared/...\n\nuid/gid are ignored; app uids are assigned at install time, and the\napp\u0027s data is handled from within its own execution environment, so\nwill automatically have the app\u0027s correct uid.\n\nForward-locked .apk files are never backed up.  System-partition\n.apk files are not backed up unless they have been overridden by a\npost-factory upgrade, in which case the current .apk *is* backed up --\ni.e. the .apk that matches the on-disk data.  The manifest preceding\neach application\u0027s portion of the tar stream provides version numbers\nand signature blocks for version checking, as well as an indication\nof whether the restore logic should expect to install the .apk before\nextracting the data.\n\nSystem packages can designate their own full backup agents.  This is\nto manage things like the settings provider which (a) cannot be shut\ndown on the fly in order to do a clean snapshot of their file trees,\nand (b) manage data that is not only irrelevant but actively hostile\nto non-identical devices -- CDMA telephony settings would seriously\nmess up a GSM device if emplaced there blind, for example.\n\nWhen a full backup or restore is initiated from adb, the system will\npresent a confirmation UI that the user must explicitly respond to\nwithin a short [~ 30 seconds] timeout.  This is to avoid the\npossibility of malicious desktop-side software secretly grabbing a copy\nof all the user\u0027s data for nefarious purposes.\n\n(*) The backup is not strictly a full mirror.  In particular, the\n    settings database is not cloned; it is handled the same way that\n    it is in cloud backup/restore.  This is because some settings\n    are actively destructive if cloned onto a different (or\n    especially a different-model) device: telephony settings and\n    AndroidID are good examples of this.\n\n(**) On the framework side it doesn\u0027t care that it\u0027s adb; it just\n    sends the tar stream to a file descriptor.  This can easily be\n    retargeted around whatever transport we might decide to use\n    in the future.\n\nKNOWN ISSUES:\n\n* the security UI is desperately ugly; no proper designs have yet\n  been done for it\n* restore is not yet implemented\n* shared storage backup is not yet implemented\n* symlinks aren\u0027t yet handled, though some infrastructure for\n  dealing with them has been put in place.\n\nChange-Id: Ia8347611e23b398af36ea22c36dff0a276b1ce91\n"
    },
    {
      "commit": "90d59043de5bf940c23688d7e1c9feadd1a85ddb",
      "tree": "e50494c64651721a76833beffed9c82617a45171",
      "parents": [
        "0897fe5eaa3a7ad9529ba059cf8b1a5375cb8940"
      ],
      "author": {
        "name": "Mårten Kongstad",
        "email": "marten.kongstad@sonyericsson.com",
        "time": "Thu May 05 10:40:42 2011 +0200"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:56 2013 -0700"
      },
      "message": "Add missing clean-up of idmap file descriptors.\n\nChange-Id: I9bdc9a4b7962f1a8dce77f4b213c8b9dc26e4b0f\n"
    },
    {
      "commit": "8bb27951f592713bcb2c0e6605d89da665131637",
      "tree": "25e7f2513b03c4209b0a7f1daf336f26b0a2a3b3",
      "parents": [
        "aa13c1b90e5d9cae064bb425dd094ccbd411e073"
      ],
      "author": {
        "name": "Josh Stone",
        "email": "cuviper@gmail.com",
        "time": "Fri Apr 22 11:13:35 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:56 2013 -0700"
      },
      "message": "libutils: Fix an improper const-cast in RefBase\n\nUnder Fedora 15 Beta, gcc 4.6.0 warns:\n\n  frameworks/base/libs/utils/RefBase.cpp: In member function\n    ‘void android::RefBase::weakref_type::trackMe(bool, bool)’:\n  frameworks/base/libs/utils/RefBase.cpp:483:67: error: passing\n    ‘const android::RefBase::weakref_impl’ as ‘this’ argument of\n    ‘void android::RefBase::weakref_impl::trackMe(bool, bool)’\n    discards qualifiers [-fpermissive]\n\ntrackMe is not a const function, so don\u0027t use const in the static_cast\nto a weakref_impl pointer.\n\nChange-Id: I3c9ba73eb127985f5f54197ffecf2939c50f632c\n"
    },
    {
      "commit": "aa13c1b90e5d9cae064bb425dd094ccbd411e073",
      "tree": "395abb3eac486afb5f532a5834abb99245dc95c5",
      "parents": [
        "aa3a2c561323b7c68594b2079b9d4f02ca9178d0"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Apr 12 22:39:53 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:56 2013 -0700"
      },
      "message": "Initial checkin of spot presentation for touchpad gestures.\n\nAdded a new PointerIcon API (hidden for now) for loading\npointer icons.\n\nFixed a starvation problem in the native Looper\u0027s sendMessage\nimplementation which caused new messages to be posted ahead\nof old messages sent with sendMessageDelayed.\n\nRedesigned the touch pad gestures to be defined in terms of\nmore fluid finger / spot movements.  The objective is to reinforce\nthe natural mapping between fingers and spots which means there\nmust not be any discontinuities in spot motion relative to\nthe fingers.\n\nRemoved the SpotController stub and folded its responsibilities\ninto PointerController.\n\nChange-Id: I5126b1e69d95252fda7f2a684c9287e239a57163\n"
    },
    {
      "commit": "aa3a2c561323b7c68594b2079b9d4f02ca9178d0",
      "tree": "42052987b83010284ac3680ce9a4c566ab07b3f0",
      "parents": [
        "3145b384626d8ddb4ff7673a29fee322374c0131"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Mar 30 16:20:26 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:56 2013 -0700"
      },
      "message": "Add new resource configurations for screen width/height in \"dp\".\n\nYou can now specify resource configuration variants \"wNNNdp\"\nand \"hNNNdp\".  These are the minimum screen width/height in \"dp\"\nunits.  This allows you to do things like have your app adjust\nits layout based only on the about of horizontal space available.\n\nThis introduces a new configuration change flag for screen size.\nNote that this configuration change happens each time the orientation\nchanges.  Applications often say they handle the orientation change\nto avoid being restarted at a screen rotation, and this will now\ncause them to be restarted.  To address this, we assume the app can\nhandle this new config change if its target SDK version is \u003c ICS.\n\nChange-Id: I22f8afa136b4f274423978c570fa7c9855040496\n"
    },
    {
      "commit": "3145b384626d8ddb4ff7673a29fee322374c0131",
      "tree": "2fa395baf6ff44450efafa5395f9adfab83583ca",
      "parents": [
        "36357bd7a7941265dca9e1905aaad06ccc66593c"
      ],
      "author": {
        "name": "Mårten Kongstad",
        "email": "marten.kongstad@sonyericsson.com",
        "time": "Thu Mar 17 14:13:41 2011 +0100"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:56 2013 -0700"
      },
      "message": "Runtime resource overlay, iteration 1.\n\nRuntime resource overlay allows unmodified applications to appear\nas if they had been compiled with additional resources defined. See\nlibs/utils/README for more information.\n\nThis commit is the first iteration of runtime resource overlay. It\nprovides the actual overlay modifications and loading of trusted overlay\npackages (ie residing in /vendor) targeting framework-res.apk.\n\nThis commit loads exactly one overlay package. The overlay,\nif present, must target framework-res.apk and be located at\n/vendor/overlay/framework/framework-res.apk.\n\nChange-Id: If26ee7754813004a96c043dba37fbe99fa3919db\n"
    },
    {
      "commit": "36357bd7a7941265dca9e1905aaad06ccc66593c",
      "tree": "23d6ecdf8fcfff1bab6c5267d1bbf3cf9a410a8e",
      "parents": [
        "43550eee5bfeaf7832487a2285ae86be0f7ce561"
      ],
      "author": {
        "name": "Carl Shapiro",
        "email": "cshapiro@google.com",
        "time": "Mon Mar 21 20:26:25 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:56 2013 -0700"
      },
      "message": "Include strings.h for the strcasecmp prototype.\n\nChange-Id: I0659ce2186547274e58f8b2027e16d3e45189353\n"
    },
    {
      "commit": "43550eee5bfeaf7832487a2285ae86be0f7ce561",
      "tree": "416b1750a40bced1f92c0d6025b7ca95755eed3e",
      "parents": [
        "7c123375ffee76d6e15b611e8146c13bb67a8c9f"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Mar 17 01:34:19 2011 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:56 2013 -0700"
      },
      "message": "Refactor how timeouts are calculated.\n\nAdded a timeout mechanism to EventHub and InputReader so that\nInputMappers can request timeouts to perform delayed processing of\ninput when needed.\n\nChange-Id: Iec2045baaf4e67690b15eef3c09a58d5cac76897\n"
    },
    {
      "commit": "3e2e38bc5bbf658eb9940f72974270b11c5b84e1",
      "tree": "c12801c6970564997eb4f18406eace6ad338a514",
      "parents": [
        "5a14f4a721fe052be8cfbfaf603c4d262edd686a"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Mar 02 14:41:58 2011 -0800"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:56 2013 -0700"
      },
      "message": "Fade out the mouse pointer after inactivity or other events.\n\nFades out the mouse pointer:\n- after 15 seconds of inactivity normally\n- after 3 seconds of inactivity in lights out mode\n- after a non-modifier key down\n- after a touch down\n\nExtended the native Looper to support enqueuing time delayed\nmessages.  This is used by the PointerController to control\npointer fade timing.\n\nChange-Id: I87792fea7dbe2d9376c78cf354fe3189a484d9da\n"
    },
    {
      "commit": "7332f80db5b942253f69b9b2e6cc3ae08d957d0e",
      "tree": "eb51d063b42cbe247c0216337318f6b7a80fd204",
      "parents": [
        "3e0f87541f7871ffde51c722d54550774fe1b7c3"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Feb 25 16:11:44 2011 -0800"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:56 2013 -0700"
      },
      "message": "Fix sp\u003c\u003e conversion operator / constructor\n\nsome of the conversion operators were not using the proper\npointer type when calling incStrong/decStrong, usually it\nhas no bad consequences, but for some implementation\nof the ref-counted object it could lead to recording the wrong\nowner id.\n\nChange-Id: If574b9069b8a4cf6e0911a992c8f095aba799995\n"
    },
    {
      "commit": "b26ea8b30f11cf0ad11ac7983208514a1bfafb75",
      "tree": "ce7599f183785ee8caccfa83b0a19283f500e761",
      "parents": [
        "966a48f3e78e75c3a4f3a2f23b98e970f06bf983"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Feb 16 20:23:43 2011 -0800"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:56 2013 -0700"
      },
      "message": "Fix some issues with RefBase debugging.\n\nFirst slipt sp\u003c\u003e out of RefBase into StrongPointer.h so it can be reused\nmore easily and to make it clear that it doesn\u0027t require RefBase.\n\nNote: the rest of the change only affects the system when DEBUG_REFS is enabled.\n\nThe main problem we fix here is that the owner id associated with each\nreference could get out of date when a sp\u003c\u003e or wp\u003c\u003e was moved, for\ninstance when they\u0027re used in a Vector\u003c \u003e.\n\nWe fix this issue by calling into RefBase::moveReferences from\na template specialization for sp\u003cTYPE\u003e and wp\u003cTYPE\u003e of the\ntype helpers. RefBase::moveReferences() has then a chance to\nupdate the owner ids.\n\nThere is a little bit of trickery to implement this generically in\nRefBase, where we need to use a templatized functor that can turn\na sp\u003cTYPE\u003e* casted to a void* into a RefBase*.\n\nIntroduced a new debug option DEBUG_REFS_FATAL_SANITY_CHECKS\ncurrently set to 0 by default as there seem to be an issue\nwith sp\u003cANativeWindow\u003e which trips the sanity checks.\n\nChange-Id: I4825b21c8ec47d4a0ef35d760760ae0c9cdfbd7f\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": "84a23fa4a9a2dca0f53fae2283b57fff988d1c74",
      "tree": "5991d8c7dd73ace2abd9df291972dd1c70a02cf1",
      "parents": [
        "dafff0bcc10fe1ff80e68a31793bbdea2ec8d0c3"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Feb 16 15:23:08 2011 -0800"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:55 2013 -0700"
      },
      "message": "Remove RefBase.h dependency on TextOutput.h\n\nChange-Id: I72cd6b98ef82b4868fe1c8ec87862cf43fb4ee73\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": "da74bc06a8e5c5c102fa06b0c64cd5dc00efeb97",
      "tree": "8ec03309ebfa3c35b859984c862521252ba77840",
      "parents": [
        "741cbc33820cb7c8891f3ed0eae820ec447e298d"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Jan 27 19:37:40 2011 -0800"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:55 2013 -0700"
      },
      "message": "Fix issue #3392073: At times soft keyboard comes up in...\n\n...gallery while attaching picture to gmail message\n\nIn various places we could block switching the IME target incorrectly.\n\nChange-Id: I7e647fb35f4ea6f2e39eb7efd911420ea9ee64fa\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": "b69f49bab9502ddb0850280f2aea12fb34475777",
      "tree": "c19984ab47ac05f303bd35048d417cd77557e87e",
      "parents": [
        "8659f0be9a7cac99d55f58601d68c0c6da55af7b"
      ],
      "author": {
        "name": "Shachar Shemesh",
        "email": "lingnu@gmail.com",
        "time": "Mon Dec 20 17:38:33 2010 +0200"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:55 2013 -0700"
      },
      "message": "Normalize output from aapt d\n\nMake the output from aapt dump --values resources and aapt dump xmltree normalized, so that it is unambigously displayed\nregardless of the content of the strings.\n\nChange-Id: Ia3bff36c4ee1e9a44f474534e154830948beabdf\n"
    },
    {
      "commit": "8659f0be9a7cac99d55f58601d68c0c6da55af7b",
      "tree": "a3cc83dcbb27f428bd759d8f9718f67dde16a5f1",
      "parents": [
        "c974d4dbe00c46bb9f12e4802b47d4b41bc1fca6"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Dec 23 17:50:18 2010 -0800"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:55 2013 -0700"
      },
      "message": "Add initial support for cursor-based pointing devices.\n\nSome parts stubbed out but you can plug in a mouse and move\na green cursor around to interact with the UI.\n\nChange-Id: I80d597a7f11d3bd92041890f74b3c77326975e6e\n"
    },
    {
      "commit": "e2fa7dc58eaf34f30b89350d143d97fd4a501199",
      "tree": "34ffbf4a781908c261dba8559aa160ff937030f4",
      "parents": [
        "1d618d63c1bb99728b5b0afe320f5a6afa95436c"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Nov 24 12:56:06 2010 -0800"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:55 2013 -0700"
      },
      "message": "Change assets to use 64-bit API\n\nThe asset system and supporting libraries were using off_t instead of\noff64_t to access files larger than 2GB (32-bit signed). This change\nreplaces all off_t with off64_t and lseek64.\n\nThere is a new utils/Compat.h added for Mac OS compatibility.\n\nAlso fixed some size-related compiler warnings.\n\nBug: 3205336\nChange-Id: I9097b3cb7a602e811fe52f245939d8975da55e9e\n"
    },
    {
      "commit": "1d618d63c1bb99728b5b0afe320f5a6afa95436c",
      "tree": "063d271af206fc8f3e098fe77aea64e96c045b62",
      "parents": [
        "04cbbc1c47c68e805d2674d9fc702fc44385805f"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Dec 02 13:50:46 2010 -0800"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:55 2013 -0700"
      },
      "message": "Improve support for external keyboards.\n\nUse Vendor ID, Product ID and optionally the Version to\nlocate keymaps and configuration files for external devices.\n\nMoved virtual key definition parsing to native code so that\nEventHub can identify touch screens with virtual keys and load\nthe appropriate key layout file.\n\nCleaned up a lot of old code in EventHub.\n\nFixed a regression in ViewRoot\u0027s fallback event handling.\n\nFixed a minor bug in FileMap that caused it to try to munmap\nor close invalid handled when released if the attempt to map\nthe file failed.\n\nAdded a couple of new String8 conveniences for formatting strings.\n\nModified Tokenizer to fall back to open+read when mmap fails since\nwe can\u0027t mmap sysfs files as needed to open the virtual key\ndefinition files in /sys/board_properties/.\n\nChange-Id: I6ca5e5f9547619fd082ddac47e87ce185da69ee6\n"
    },
    {
      "commit": "04cbbc1c47c68e805d2674d9fc702fc44385805f",
      "tree": "748cb86324be63e01f58d2468abbb2aa8bce3977",
      "parents": [
        "d36ec3afdac0ca4158a786b96599ee8bdf64b043"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Nov 29 17:37:49 2010 -0800"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:55 2013 -0700"
      },
      "message": "Support non-orientation aware keyboards and other devices.\n\nFixed a bug with dpad keys on external keyboards being rotated\naccording to the display orientation by adding a new input device\nconfiguration property called \"keyboard.orientationAware\".\n\nAdded a mechanism for overriding the key layout and key character\nmap in the input device configuration file using the new\n\"keyboard.layout\" and \"keyboard.characterMap\" properties.\n\nAlso added \"trackball.orientationAware\", \"touch.orientationAware\" and\n\"touch.deviceType\" configuration properties.\n\nRewrote the configuration property reading code in native code\nso that it can be used by EventHub and other components.\n\nAdded basic support for installable idc, kl, and kcm files\nin /data/system/devices.  However, there is no provision for\ncopying files there yet.\n\nDisabled long-press character pickers on full keyboards so that\nkey repeating works as expected.\n\nChange-Id: I1bd9f0c3d344421db444e7d271eb09bc8bab4791\n"
    },
    {
      "commit": "d36ec3afdac0ca4158a786b96599ee8bdf64b043",
      "tree": "1c2df24c5b08f67b2c971bc06a9e88737156fdd0",
      "parents": [
        "647925ddf053989b641b4c5c8a51efd55c931f22"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Nov 19 13:13:07 2010 -0800"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:55 2013 -0700"
      },
      "message": "Fix SDK build on Windows due to use of mmap.\n\nChange-Id: Id4bd9a6f932285c93c5853e540efc20b99876564\n"
    },
    {
      "commit": "647925ddf053989b641b4c5c8a51efd55c931f22",
      "tree": "3747458d4bf0306bea06b3910ef24a38c9fd78e5",
      "parents": [
        "ba0165bef09729a33ab8e0ca329342be05e0d859"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Nov 10 16:03:06 2010 -0800"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:55 2013 -0700"
      },
      "message": "Added support for full PC-style keyboards.\n\nBREAKING CHANGE: Redesigned the key character map format to\naccomodate full keyboards with more comprehensive suite of modifiers.\nOld key character maps will not work anymore and must be updated.\nThe new format is plain text only and it not compiled to a binary\nfile (so the \"kcm\" tool will be removed in a subsequent check-in).\n\nAdded FULL keyboard type to support full PC-style keyboards.\n\nAdded SPECIAL_FUNCTION keyboard type to support special function\nkeypads that do not have any printable keys suitable for typing\nand only have keys like HOME and POWER\n\nAdded a special VIRTUAL_KEYBOARD device id convention that maps\nto a virtual keyboard with a fixed known layout.  This is designed\nto work around issues injecting input events on devices whose\nbuilt-in keyboard does not have a useful key character map (ie.\nwhen the built-in keyboard is a special function keyboard only.)\n\nModified several places where events were being synthesized\nto use the virtual keyboard.\n\nRemoved support for the \"qwerty\" default layout.\nThe new default layout is \"Generic\".  For the most part \"qwerty\"\nwas being used as a backstop in case the built-in keyboard did\nnot have a key character map (probably because it was a special\nfunction keypad) and the framework needed to be able to inject\nkey events anyways.  The latter issue is resolved by using the\nspecial VIRTUAL_KEYBOARD device instead of BUILT_IN_KEYBOARD.\n\nAdded the concept of a key modifier behavior so that\nMetaKeyKeyListener can distinguish between keyboards that use\nchorded vs. toggled modifiers.\n\nWrote more robust key layout and key character map parsers\nto enable support for new keyboard features and user installable\nkey maps.\n\nFixed a bug in InputReader generating key ups when keys\nare released out of sequence.\n\nUpdated tons of documentation.\n\nCurrently QwertyKeyListener is being used for full keyboards\nwith autotext and capitalization disabled.  This mostly works\nbut causes some problems with character pickers, etc.\nThese issues will be resolved in subsequent changes.\n\nChange-Id: Ica48f6097a551141c215bc0d2c6f7b3fb634d354\n"
    },
    {
      "commit": "ba0165bef09729a33ab8e0ca329342be05e0d859",
      "tree": "2f961146c3c8c625a01902207485fed0d7a2cdcd",
      "parents": [
        "3a91fca00c6b3db62b4dc0da95ba30671caf3283"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Nov 09 14:37:23 2010 -0800"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:55 2013 -0700"
      },
      "message": "Split UTF functions from String8/16\n\nSplit out all the UTF-8/16/32 handling code from String8/16 to its own\nfile to allow better reuse of code.\n\nChange-Id: If9ce63920edc75472c38da4adce0d13cda9ad2f7\n"
    },
    {
      "commit": "3a91fca00c6b3db62b4dc0da95ba30671caf3283",
      "tree": "6fc3969e92dc4eb4e1659739190348e22b0041b9",
      "parents": [
        "328f501eb99e5b2502deb909de4209cf2dbdecc8"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Nov 02 11:27:21 2010 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:55 2013 -0700"
      },
      "message": "Fix default return code for getResource\n\nReorganization of getResource to allow for other densities accidentally\noverrode the default return code for getResource from BAD_VALUE to\nBAD_INDEX. This corrects the default return to BAD_VALUE which restores\nother things to working.\n\nBug: 3155824\nChange-Id: I13dafff85bc6978c5f5435fc09ab0474c7885c4d\n"
    },
    {
      "commit": "328f501eb99e5b2502deb909de4209cf2dbdecc8",
      "tree": "1eb4ee7d5f7aa5892ee6accf767e64f05f003d87",
      "parents": [
        "e76184c81fba004b2a72fd8b98baef2b15ff1779"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Oct 28 14:47:01 2010 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:55 2013 -0700"
      },
      "message": "Add path to get different DPI drawables\n\nAllow a caller to request a different density than their current display\nallows. This can mean a device displaying mdpi can get a resource that\u0027s\nin hdpi and have it pretend to be in mdpi resolution. If a drawable\nthat\u0027s returned is not in the requested density, it will set it at the\nappropriate density to be scaled up later on.\n\nThe API for this is hidden currently.\n\nBug: 3134688\nChange-Id: I6c3908cbdef4907b8d3f1576df9e3b0e7af1755a\n"
    },
    {
      "commit": "e76184c81fba004b2a72fd8b98baef2b15ff1779",
      "tree": "956336a42d2266ee6ac352941ccc6ced4443f2eb",
      "parents": [
        "9d589aa0d63e1eb088b10f065ee7fb0765d2e285"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Oct 21 15:18:28 2010 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:55 2013 -0700"
      },
      "message": "Initialized check in ZipFileRO::findEntryByName\n\nIf a ZipFileRO object is uninitialized, the hash table will not have\nbeen initialized. This condition wasn\u0027t checked in findEntryByName.\n\nBug: 3121109\nChange-Id: Ib696e0e7e0cb4dd0fb2e456d6a847e5e8f4fe14e\n"
    },
    {
      "commit": "d85b55697218655763eb644e677504e6cc66b5a2",
      "tree": "ebbcd0fc291590eabe352e171da839f0cefbd7ca",
      "parents": [
        "48da31b735ebbc6a00c4e9fe9631f4af79e2c9df"
      ],
      "author": {
        "name": "Joe Onorato",
        "email": "joeo@google.com",
        "time": "Mon Oct 18 19:13:23 2010 -0400"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:55 2013 -0700"
      },
      "message": "Reduce logging.\n\nRemember, the system and main logs are\n    - Shared resources\n    - Primarily for recording problems\n    - To be used only for large grained events during normal operation\n\nBug: 3104855\nChange-Id: I136fbd101917dcbc8ebc3f96f276426b48bde7b7\n"
    },
    {
      "commit": "48da31b735ebbc6a00c4e9fe9631f4af79e2c9df",
      "tree": "9ca0eb140cb6a3a701672804a43324efed9df315",
      "parents": [
        "929e4ef26a7920dd6f3593f60d45a59ffeaedb14"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Sun Sep 12 17:55:08 2010 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:55 2013 -0700"
      },
      "message": "Add keycodes and meta-key modifiers to support external keyboards.\n\nAdded new key maps for external keyboards.  These maps are intended to\nbe shared across devices by inheriting the \"keyboards.mk\" product\nmakefile as part of the device\u0027s product definition.\n\nOne of the trickier changes here was to unwind some code in\nMetaKeyKeyListener that assumed that only the low 8 bits of the meta key\nstate were actually used.  The new code abandons bitshifts in favor\nof simple conditionals that are probably easier to read anyways.\nThe special meta key state constants used by MetaKeyKeyListener\nare now (@hide) defined in KeyEvent now so as to make it clearer that they\nshare the same code space even if those codes are not valid for KeyEvents.\n\nThe EventHub now takes care of detecting the appropriate key layout\nmap and key character map when the device is added and sets system\nproperties accordingly.  This avoids having duplicate code in\nKeyCharacterMap to probe for the appropriate key character map\nalthough the current probing mechanism has been preserved for legacy\nreasons just in case.\n\nAdded support for tracking caps lock, num lock and scroll lock and\nturning their corresponding LEDs on and off as needed.\n\nThe key character map format will need to be updated to correctly support\nPC style external keyboard semantics related to modifier keys.\nThat will come in a later change so caps lock doesn\u0027t actually do\nanything right now except turn the shiny LEDs on and off...\n\nAdded a list of symbolic key names to KeyEvent and improved the toString()\noutput for debug diagnosis.  Having this list in a central place in the\nframework also allows us to remove it from Monkey so there is one less\nthing to maintain when we add new keycodes.\n\nBug: 2912307\nChange-Id: If8c25e8d50a7c29bbf5d663c94284f5f86de5da4\n"
    },
    {
      "commit": "929e4ef26a7920dd6f3593f60d45a59ffeaedb14",
      "tree": "41b589160424b143e2ab0ef12569546c725720e8",
      "parents": [
        "60cbc840393ccd98efd9963013bc61f2621d95ab"
      ],
      "author": {
        "name": "Raphael Moll",
        "email": "raphael@google.com",
        "time": "Wed Oct 13 19:13:48 2010 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:55 2013 -0700"
      },
      "message": "MinGW/Cygwin requires open() in O_BINARY mode.\n\nAlsso printf %zd is not supported on MinGW/Cygwin.\n\nChange-Id: I03811dabb46e2b05dd1d8abcc0ff97b125c77d54\n"
    },
    {
      "commit": "60cbc840393ccd98efd9963013bc61f2621d95ab",
      "tree": "239f010426a39b8152836e3dedb007501cab931a",
      "parents": [
        "fcefac26820933abeb40170b476b9d04efa3d35d"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Oct 13 15:00:07 2010 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:55 2013 -0700"
      },
      "message": "OBB: use PBKDF2 for key generation.\n\nSwitch to using PBKDF2 for the key generation for OBBs. Any previously\ngenerated OBBs will stop being read correctly. A small pbkdf2gen program\nis available to allow generation of appropriate keys with the salts.\n\nBug: 3059950\nChange-Id: If4305c989fd692fd1150eb270dbf751e09c37295\n"
    },
    {
      "commit": "8d15c74d50fd01d6e63970aadd261a9d3bed27e7",
      "tree": "c83dbedf5e1e2aa63c4b19c45998bcfe84aa3e21",
      "parents": [
        "bf2ad6dd136ba456cd48f15da59828e2f6743dd6"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Oct 05 15:35:37 2010 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:55 2013 -0700"
      },
      "message": "Switch Looper back to using poll() instead of epoll().\n\nAdded a couple of micro-optimizations to avoid calling wake() unnecessarily\nand reduce JNI overhead slightly.\n\nFixed a minor issue where we were not clearing the \"next\" field of Messages\nreturned by the MessageQueue so the Message would hold on to its successor\nand potentially prevent the GC from collecting it if the message were leaked\nsomehow.\n\nChange-Id: I488d29417ce0cdd7d0e447cda76ec978ef7f811c\n"
    },
    {
      "commit": "bf2ad6dd136ba456cd48f15da59828e2f6743dd6",
      "tree": "4044c5ce8ff0227330cfa574f4923eed6341739b",
      "parents": [
        "a1ef2e020664860de562eccd63c2c5895519763c"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Oct 04 14:20:14 2010 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:55 2013 -0700"
      },
      "message": "Use pread() in ZipFileRO for Linux\n\nAssetManager instances are created by zygote and passed to all its\nchildren so that they don\u0027t have to individually open\nframeworks-res.apk. This creates a problem for determining the current\nfile offset when using lseek() on those files, because you can\u0027t\nguarantee the cross-process locking of a mutex. Luckily, Linux\nimplements pread() to get around this suckiness.\n\nThe problem is that only Linux implements this, so we have to keep the\nold locking for use on host builds with aapt and friends. aapt doesn\u0027t\nhave this same problem of sharing file descriptors across forked\nprocesses, so we can keep the local AutoMutex to protect accesses of\nthose files.\n\nChange-Id: Ibe9f11499a53fe345f50fbaea438815ec0fd363e\n"
    },
    {
      "commit": "a1ef2e020664860de562eccd63c2c5895519763c",
      "tree": "57005e4ff576850a57e2642a2f68a7fc9001acaa",
      "parents": [
        "7d90df8dc30e7b22aea030f7dca01095529cc6b1"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Oct 01 18:28:28 2010 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:55 2013 -0700"
      },
      "message": "ZipFileRO: moar logging and wrap close\n\nThere is apparently still a race upon reading the entry Local File\nHeader that can\u0027t be tracked down, so move the LFH check inside the\nmutex-protected block so we can call lseek again to see where we are\nwhen we log an error.\n\nAlso, close() can fail so use TEMP_FAILURE_RETRY on it so we don\u0027t\nunwittingly leak file descriptors when Mean Mr. EINTR comes a-knocking.\n\nChange-Id: I753abad0bd882fe28f7281c406fa76f64393ef4c\n"
    },
    {
      "commit": "cea2778d14a84e4dff261b82f5d8d9badfaafa85",
      "tree": "3b785e3678fed59d3853d147d6666604d2c48b6a",
      "parents": [
        "f7c1be0e62dea8a3f8b2d9b97689de964484f4db"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Sep 24 09:11:28 2010 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:55 2013 -0700"
      },
      "message": "Revert \"Revert \"Free created FileMap when uncompressing files\"\"\n\nThis revert reverts commit a19ef306bd0a257c67b50f5e0e669e9fe52b0889.\n"
    },
    {
      "commit": "f7c1be0e62dea8a3f8b2d9b97689de964484f4db",
      "tree": "821179728ff1aa1d5272318af659f2f52ff9bbdf",
      "parents": [
        "d18051870e8e2a5f55237a2c11fde75f46082639"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri Sep 24 07:57:37 2010 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:55 2013 -0700"
      },
      "message": "Add locking around ZIP seeking\n\nSince we switched to seeking to the LFH to verify its existence instead\nof a huge mmap of the file, we have to guarantee that another seek\ndoesn\u0027t happen before we finish our read on the LFH.\n\nChange-Id: If8135d9cb6f2f5cc4db734eafa4f6b5f6269c62a\n"
    },
    {
      "commit": "d18051870e8e2a5f55237a2c11fde75f46082639",
      "tree": "a3d25c52dd42dc7ae773fc0c8ed2c5ce2795bdac",
      "parents": [
        "9da1810050d8825e51dabdd0262173432d49c16c"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Sep 21 15:11:18 2010 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:54 2013 -0700"
      },
      "message": "Looper: use pthread_once for TLS key initialization.\n\nAlso fix a Valgrind complaint by zeroing out the entire epoll event\nstruct since otherwise the data field union would be partly\nuninitialized (but not in a harmful way).\n\nChange-Id: I2091ce517e87fcad7c9caf90e2c5e4854a7ca465\n"
    },
    {
      "commit": "9da1810050d8825e51dabdd0262173432d49c16c",
      "tree": "3eeaa9c346cecb27e4de8f5db596a8bf4a929f23",
      "parents": [
        "905682a19609e862633f01e69bec58384df2cdf7"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Sep 17 17:01:23 2010 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:54 2013 -0700"
      },
      "message": "Reduce lock thrashing in native Looper.\n\nIn the common case, there is nothing interesting happening on the native\nLooper besides occasional wake ups.  There is no point grabbing the\nsemaphore then.\n\nChange-Id: Ib5c426d0e158dfa37891b7ff5537b6f833592fad\n"
    },
    {
      "commit": "171bf9e69792f4796e27334c8a97dbd8576ad78a",
      "tree": "0f87a1626d21e2871aa54b4be08a686645061b3f",
      "parents": [
        "7901eb25c60b1df00050d6c3772505d8dcfcdab9"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Sep 16 17:04:52 2010 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:54 2013 -0700"
      },
      "message": "Ensure input dispatcher and native looper handles EINTR.\n\nChange-Id: I0a42db5f273b9bfe4ab174e4ee65d5d852f9f6bc\n"
    },
    {
      "commit": "7901eb25c60b1df00050d6c3772505d8dcfcdab9",
      "tree": "d71cf01b5c79ea9e8125c1669f164b931e501a90",
      "parents": [
        "ac84a0a25d27b8dc537f1dff47581d3eff321014"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Sep 13 23:17:30 2010 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:54 2013 -0700"
      },
      "message": "Replace epoll() with poll() and rename PollLoop to Looper.\n\nAs part of this change, consolidated and cleaned up the Looper API so\nthat there are fewer distinctions between the NDK and non-NDK declarations\n(no need for two callback types, etc.).\n\nRemoved the dependence on specific constants from sys/poll.h such as\nPOLLIN.  Instead looper.h defines events like LOOPER_EVENT_INPUT for\nthe events that it supports.  That should help make any future\nunder-the-hood implementation changes easier.\n\nFixed a couple of compiler warnings along the way.\n\nChange-Id: I449a7ec780bf061bdd325452f823673e2b39b6ae\n"
    },
    {
      "commit": "ac84a0a25d27b8dc537f1dff47581d3eff321014",
      "tree": "8e6ccdc4022c9dac630df99f226aeae7674a2631",
      "parents": [
        "a78bab0359fb60f46f89978dbb4e135fb11ea68e"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Sep 08 11:49:43 2010 -0700"
      },
      "committer": {
        "name": "Alex Ray",
        "email": "aray@google.com",
        "time": "Tue Jul 30 13:56:54 2013 -0700"
      },
      "message": "Input dispatcher ANR handling enhancements.\n\nThis change is essentially a rewrite of the main input dispatcher loop\nwith the target identification folded in.  Since the input dispatcher now\nhas all of the window state, it can make better decisions about\nwhen to ANR.\n\nAdded a .5 second deadline for processing app switch keys.  This behavior\npredates Gingerbread but had not previously been ported.\n\nFixed some timing inaccuracies in the ANR accounting that could cause\napplications to ANR sooner than they should have.\n\nAdded a mechanism for tracking key and motion events that have been\ndispatched to a window so that appropriate cancelation events can be\nsynthesized when recovering from ANR.  This change helps to keep\napplications in sync so they don\u0027t end up with stuck buttons upon\nrecovery from ANRs.\n\nAdded more comments to describe the tricky parts of PollLoop.\n\nChange-Id: I13dffca27acb436fc383980db536abc4d8b9e6f1\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"
    }
  ],
  "next": "b03e56d704af1a66b4552fb606418f3882e56a80"
}
