)]}'
{
  "log": [
    {
      "commit": "7a4d92af9bdcf94d770bfa8313ad5b21c829ed96",
      "tree": "547b7020c3b87ee0f011ff4227f4e64b6d0b5aa7",
      "parents": [
        "44c1f012c4ffa75853a068963b212ee1c965b6ea"
      ],
      "author": {
        "name": "Al Sutton",
        "email": "al@funkyandroid.com",
        "time": "Sun Feb 19 08:31:19 2012 +0000"
      },
      "committer": {
        "name": "Al Sutton",
        "email": "al@funkyandroid.com",
        "time": "Sun Feb 19 08:31:19 2012 +0000"
      },
      "message": "Xcode 4.3 compatibility checkin\n\nThe update compiler in Xcode 4.3 (and 4.4) requires lookups into dependant\nbases of class templates to be qualified. This checkin fixes the issues\nraised by the compiler by implementing the this-\u003e recommendation from\nthe llvm page at http://clang.llvm.org/compatibility.html#dep_lookup_bases\n\nSigned-off-by: Al Sutton \u003cal@funkyandroid.com\u003e\n"
    },
    {
      "commit": "933e85615059b85a87747da57288384541cc56da",
      "tree": "5475260306fb9ddb48b2c7fcfe939ed59752e900",
      "parents": [
        "1afd5bab4e0eaba8b5bc2ab5c7b556cd602cf2e7"
      ],
      "author": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Wed Jan 04 20:05:49 2012 +0000"
      },
      "committer": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Thu Jan 19 14:44:56 2012 -0800"
      },
      "message": "Rename (IF_)LOGI(_IF) to (IF_)ALOGI(_IF)\n\nChange-Id: I26f76452ac49e2890b14d133c065493d8df0fb4a\n"
    },
    {
      "commit": "9d9768dbd7d8fe7af55fbd570dff9cf79a4d1807",
      "tree": "8de623b36e6c49a695fe17760f2011dd4e42bb5c",
      "parents": [
        "94c1f148bb655a3dd3c2a2167476239b41305ff0"
      ],
      "author": {
        "name": "Jamie Gennis",
        "email": "jgennis@google.com",
        "time": "Thu May 12 17:39:03 2011 -0700"
      },
      "committer": {
        "name": "Jamie Gennis",
        "email": "jgennis@google.com",
        "time": "Mon Oct 31 18:49:32 2011 -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": "94c1f148bb655a3dd3c2a2167476239b41305ff0",
      "tree": "0a7bf345bb97a55b7cdcfa2c29d1493734027e92",
      "parents": [
        "62015f5d0d1104dfc682b3eb3b6c0be4f63b985a"
      ],
      "author": {
        "name": "Jamie Gennis",
        "email": "jgennis@google.com",
        "time": "Sun Oct 30 18:10:41 2011 -0700"
      },
      "committer": {
        "name": "Jamie Gennis",
        "email": "jgennis@google.com",
        "time": "Mon Oct 31 18:48:31 2011 -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": "7953745dd565167113f8cbfc461bc0521d32d870",
      "tree": "f45d34b4b7a6c19c0a639be68e6455a116a93bca",
      "parents": [
        "0bbd8d8273c1dde9e0504f67bd8eb159bef2406a"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Oct 12 13:48:51 2011 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Oct 12 13:48:51 2011 -0700"
      },
      "message": "Reduce the size of libhwui by 50%\n\nThis change removes unnessary symbols. All symbols are hidden by\ndefault, public APIs with exported symbols are explicitly marked\nwith ANDROID_API.\n\nChange-Id: I692fde432a86c12108de1cfd1f6504919a7d5f3f\n"
    },
    {
      "commit": "d0ff68da6a606602235fb8749473999e3d1bde53",
      "tree": "d77988a2bfec755a4cf116d333fe188f55fe723c",
      "parents": [
        "aa32c30b81134fc7ebd9408f4757d1dc4410f338"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Oct 07 13:28:18 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Oct 07 13:28:18 2011 -0700"
      },
      "message": "Fix regression in CursorWindow.copyStingToBuffer.\nBug: 5332296\n\nChange-Id: Iff9eed786f0a8293b6156f883a66a322ddad5e99\n"
    },
    {
      "commit": "9ecebbfbf768fd63e9a6c9a09c86d81c7737ee2d",
      "tree": "08d24c5413fa49ac6386f8b396f29e297e728fbd",
      "parents": [
        "8ebf1efd66516340bedbf0d0a19d5e96cc28fa20"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Sep 28 23:19:47 2011 -0400"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Oct 03 16:58:41 2011 -0700"
      },
      "message": "Add mechanism for Parcel to not allow FDs to be written to it.\n\nThis is to help implement issue #5224703.\n\nChange-Id: I026a5890495537d15b57fe61227a640aac806d46\n"
    },
    {
      "commit": "bcba155942705de42174871fc1215b3f4655797b",
      "tree": "eea9f615be119d03fee1060dae391ff1841fd3b8",
      "parents": [
        "5908eaef126c746aa88448b53cdc69623dee4fb4"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Thu Sep 15 12:21:40 2011 -0700"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Fri Sep 16 09:33:22 2011 -0700"
      },
      "message": "A new API \"androidGetThreadPriority\"\n\nChange-Id: I6baeead8c70460863343fd557250635fb1e6a170\n"
    },
    {
      "commit": "b4bf90b40e30096479a4d4cc9cf135e991ef1994",
      "tree": "c00cccd8405fc51990f0f7cf2f92ace2b394e0ea",
      "parents": [
        "bce1667e7ae69ff575e73e776040524fb5515c5f",
        "33eafef1a9ef508f7b1ae1edf4caf29b81a80255"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Aug 29 14:38:52 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Aug 29 14:38:52 2011 -0700"
      },
      "message": "Merge \"Add C++ thread API androidGetThreadSchedulingGroup\""
    },
    {
      "commit": "32f684651674469eb3bf2a618c239a5bf9846c21",
      "tree": "3660fa46633c99ebc91a5cef25a067b788e6e117",
      "parents": [
        "45add1abe3c6a96aa170f5321bb14fb8e16e9a6b",
        "ddf155b8338eb894a97612e4cb21257c11d8434a"
      ],
      "author": {
        "name": "Xavier Ducrohet",
        "email": "xav@android.com",
        "time": "Wed Aug 17 14:40:57 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Aug 17 14:40:57 2011 -0700"
      },
      "message": "am ddf155b8: am 5dcda1fd: am 88512f59: am a8313e71: Merge \"Fix String16 operator+ to actually work\"\n\n* commit \u0027ddf155b8338eb894a97612e4cb21257c11d8434a\u0027:\n  Fix String16 operator+ to actually work\n"
    },
    {
      "commit": "ddf155b8338eb894a97612e4cb21257c11d8434a",
      "tree": "61b261474cdd94124eef612647faf6e542dbffda",
      "parents": [
        "51beb81a8e901020293b7a30a68b405bca71d258",
        "5dcda1fda53bdc6dfe80cf37e62cacdc216224b1"
      ],
      "author": {
        "name": "Xavier Ducrohet",
        "email": "xav@android.com",
        "time": "Wed Aug 17 14:38:15 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Aug 17 14:38:15 2011 -0700"
      },
      "message": "am 5dcda1fd: am 88512f59: am a8313e71: Merge \"Fix String16 operator+ to actually work\"\n\n* commit \u00275dcda1fda53bdc6dfe80cf37e62cacdc216224b1\u0027:\n  Fix String16 operator+ to actually work\n"
    },
    {
      "commit": "5dcda1fda53bdc6dfe80cf37e62cacdc216224b1",
      "tree": "f077ab3af42f4fd0e2d98a39ae6e693da0b4c2a9",
      "parents": [
        "ee93fd5c0d7b0296fca17363ec00dc2ee63a0841",
        "88512f59bc051a42f4dd70acc8af5622f7e99db6"
      ],
      "author": {
        "name": "Xavier Ducrohet",
        "email": "xav@android.com",
        "time": "Wed Aug 17 14:35:20 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Aug 17 14:35:20 2011 -0700"
      },
      "message": "am 88512f59: am a8313e71: Merge \"Fix String16 operator+ to actually work\"\n\n* commit \u002788512f59bc051a42f4dd70acc8af5622f7e99db6\u0027:\n  Fix String16 operator+ to actually work\n"
    },
    {
      "commit": "88512f59bc051a42f4dd70acc8af5622f7e99db6",
      "tree": "1160596c095f0991d9ac7cb2cecf7cfc347c83cb",
      "parents": [
        "7a0d746bf2eaca4ff9d150e2cd2604b72ec5a2cb",
        "a8313e71fe8b483448d14e22610101c5f3672744"
      ],
      "author": {
        "name": "Xavier Ducrohet",
        "email": "xav@android.com",
        "time": "Wed Aug 17 14:31:08 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Aug 17 14:31:08 2011 -0700"
      },
      "message": "am a8313e71: Merge \"Fix String16 operator+ to actually work\"\n\n* commit \u0027a8313e71fe8b483448d14e22610101c5f3672744\u0027:\n  Fix String16 operator+ to actually work\n"
    },
    {
      "commit": "4d07453ded674f5116ed4098cd4cec3b79cca3ba",
      "tree": "08214092d9af9dc22c164a24ff75f8127d2e8dab",
      "parents": [
        "d144748d4767b2ccfb13857e23f78bc944e9531d"
      ],
      "author": {
        "name": "Josiah Gaskin",
        "email": "josiahgaskin@google.com",
        "time": "Tue Aug 16 15:16:04 2011 -0700"
      },
      "committer": {
        "name": "Josiah Gaskin",
        "email": "josiahgaskin@google.com",
        "time": "Tue Aug 16 15:16:04 2011 -0700"
      },
      "message": "Fix String16 operator+ to actually work\n\nThis change fixes the String16 utility\u0027s operator+ function.\n\nChange-Id: Ibed7b07277b50bf178febc72b6ce497893e66f17\n"
    },
    {
      "commit": "6fe248139223a9dfaab709bc13849bdc16f27564",
      "tree": "4089c0d358a6dcecdb0baf2aa1239ff1ef8ea569",
      "parents": [
        "91b539801833012798b1998c30440136add7e7d4"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Aug 10 21:07:02 2011 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Aug 11 22:33:02 2011 -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": "1478836d2a3c1b93dadda13397dda1f71bbed667",
      "tree": "208d5c15bad2aab89d19948e0a6f611ccc440c35",
      "parents": [
        "3aa7bf7330eaf231d00f7dfdcb504215822148be"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Aug 09 18:57:37 2011 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Aug 09 18:57:37 2011 -0700"
      },
      "message": "Fix typos and use new HAL_PRIORITY_URGENT_DISPLAY constant\n\nChange-Id: I703f8a96dd0dfec427e74363ad95729bfefc95c7\n"
    },
    {
      "commit": "be1aa8250cee7819c49741e819e81659d1d03823",
      "tree": "3041a44459110da304f930b1a3ebcbd042291999",
      "parents": [
        "ad65b46d5f6c569b588556dcf85b64d59600b175"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Jul 27 16:04:54 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Sun Jul 31 15:38:09 2011 -0700"
      },
      "message": "Refactor input reader to add stylus support.\nBug: 5064702\n\nIntroduced the concept of an InputListener to further decouple\nthe InputReader from the InputDispatcher.  The InputListener\nexposes just the minimum interface that the InputReader needs\nto communicate with the outside world.  The InputReader\npasses arguments to the InputListener by reference, which makes\nit easy to queue them up.\n\nConsolidated all of the InputReader locks into one simple global\nMutex.  The reason this wasn\u0027t done before was due to potential\nre-entrance in outbound calls to the InputDispatcher.  To fix this,\nthe InputReader now queues up all of the events it wants to send\nusing a QueuedInputListener, then flushes them outside of the\ncritical section after all of the event processing is finished.\nRemoving all of the InputMapper locks greatly simplifies the\nimplementation.\n\nAdded tests for new stylus features such as buttons, tool types,\nand hovering.\n\nAdded some helpers to BitSet32 to handle common code patterns\nlike finding the first marked bit and clearing it.\n\nFixed a bug in VelocityTracker where the wrong pointer trace\ncould get cleared when handling ACTION_POINTER_DOWN.  Oops.\n\nChanged PointerCoords so it no longer stores useless zero\naxis values.  Removed editAxisValue because it is not very\nuseful when all zero value axes are absent and therefore\ncannot be edited in place.\n\nAdded dispatch of stylus hover events.\n\nAdded support for distance and tool types.\n\nChange-Id: I4cf14d134fcb1db7d10be5f2af7b37deef8f8468\n"
    },
    {
      "commit": "913a5a3cc600b496da937010160cd326bd98798f",
      "tree": "29f4c9e14d4b165b4334091f6f5497c9e1cce960",
      "parents": [
        "b0878223db87700cdc988a6d9197ca4e3c4772db"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Jun 14 11:50:22 2011 -0700"
      },
      "committer": {
        "name": "Xavier Ducrohet",
        "email": "xav@android.com",
        "time": "Wed Jul 27 11:31:57 2011 -0700"
      },
      "message": "DO NOT MERGE. may fix build on some version of gcc\n\nChange-Id: Id99d390862731fd3fbc009dbffdf1d2a59dbe348\n"
    },
    {
      "commit": "66269ea6f68f2f25888ce1080c94ac782742fafc",
      "tree": "0ecbefcdbecf98cbacd428a422e6a2a846ac726e",
      "parents": [
        "e432a0005180ba9ac2c1d7822c4761b475fddc51"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Jul 12 14:14:01 2011 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Jul 26 10:14:58 2011 -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": "ac386073df2514b79a2ca169f4a89f129733002f",
      "tree": "a3ac8faca1a1f1dc118403b019bd05f652de52a8",
      "parents": [
        "cf4cfc6fc88f204e2e496e37337f7e70809bbf6f"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Jul 20 15:19:50 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Jul 20 15:19:50 2011 -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": "33eafef1a9ef508f7b1ae1edf4caf29b81a80255",
      "tree": "04dc8a4d34e5aeb78b35bf0ae3ae13e3146487f7",
      "parents": [
        "b75a798471342da5e4624048c5516773dfecf4ca"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jun 22 16:20:37 2011 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jul 08 10:11:08 2011 -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": "5161eb7b233cf3b806046fd935f248b3844d9bd7",
      "tree": "59ec630bb655b3c66819a8ce35dfa0b0101f7da7",
      "parents": [
        "55aaccd7e8e3f5a4b0f4333c6bd2404eeac7bbb1",
        "697283e9177ee5730bf5c652c3c05d3aa3838ace"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jul 06 11:37:53 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jul 06 11:37:53 2011 -0700"
      },
      "message": "Merge \"Add Thread::join\""
    },
    {
      "commit": "4431c05f136bc1073b368221e3515aaf7fe8424e",
      "tree": "d93ce746f59b3bdd16dd3acae3de81676e21f802",
      "parents": [
        "324a1f6a125637269d3955e5a0935d3eb873b015",
        "60d47796ccfb3db3ab73017897f648678daddc83"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Jul 05 15:08:31 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jul 05 15:08:31 2011 -0700"
      },
      "message": "Merge \"Thread ID zero for androidSetThreadSchedulingGroup\""
    },
    {
      "commit": "6894a2947eb1f9d499fd7f1a1ec4e7098e07d25d",
      "tree": "5aaf199228185826ea5deb9200adfc1633519994",
      "parents": [
        "63acea6ad4a9316e1450dea47840f45df4aaed25"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Jul 01 17:59:27 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Jul 01 19:08:15 2011 -0700"
      },
      "message": "Workaround apps that make assumptions about pointer ids.\n\nModified the touch input mapper to assign pointer ids sequentially\nstarting from 0 instead of using the tracking id or slot index\nsupplied by the driver.  Applications should not depend on this\nordering but some do.  (sigh)\n\nBug: 4980884\nChange-Id: I0dfeb3ac27c57a7102a13c960c760e2a02eb7669\n"
    },
    {
      "commit": "272aaa382f95c38221739f2287c29e414523a5cc",
      "tree": "53b22ed4bd672af3edc9fc9d3e1c5d63661a37b1",
      "parents": [
        "5231b0af515db51c722d4764ecf9412c145c93b6",
        "439863f3b3e725b5de1cba4940a21900369961c0"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Jun 29 16:15:56 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jun 29 16:15:56 2011 -0700"
      },
      "message": "Merge \"SF transactions are now O(1) wrt IPC instead of O(N).\""
    },
    {
      "commit": "439863f3b3e725b5de1cba4940a21900369961c0",
      "tree": "90ab56432c2436c3392b02ba08876c86796a36ef",
      "parents": [
        "f1bfa84ccf61cad2b6ea9f2e6a612a54a38b79bc"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Jun 28 19:09:31 2011 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Jun 29 15:05:41 2011 -0700"
      },
      "message": "SF transactions are now O(1) wrt IPC instead of O(N).\n\nChange-Id: I57669852cbf6aabae244ea86940a08a5a27ffc43\n"
    },
    {
      "commit": "e0947693c9984727dfa775a747dd32aaaeb90284",
      "tree": "378c1b6621a3fa395ba903bea3451d53281d1495",
      "parents": [
        "af08ddbc42fb51de76958d859cf0e87d0b9e475e",
        "54146a634e0e66a5e4732ba1a80079a1e93bdd8a"
      ],
      "author": {
        "name": "Xavier Ducrohet",
        "email": "xav@google.com",
        "time": "Tue Jun 28 18:53:51 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Jun 28 18:53:51 2011 -0700"
      },
      "message": "am 54146a63: Merge \"DO NOT MERGE. may fix build on some version of gcc\" into gingerbread\n\n* commit \u002754146a634e0e66a5e4732ba1a80079a1e93bdd8a\u0027:\n  DO NOT MERGE. may fix build on some version of gcc\n"
    },
    {
      "commit": "aa11965bd55b8344104ebb0c9ebf39ee0cced03f",
      "tree": "f5ccad9b1e3f186483349b1fd03b16e230ec71e9",
      "parents": [
        "fa487ca830cb150be5822d8d73c3d832672f7108"
      ],
      "author": {
        "name": "Jason Simmons",
        "email": "jsimmons@google.com",
        "time": "Tue Jun 28 17:43:30 2011 -0700"
      },
      "committer": {
        "name": "Jason Simmons",
        "email": "jsimmons@google.com",
        "time": "Tue Jun 28 17:43:30 2011 -0700"
      },
      "message": "Add a linear transform library to libutils\n\nChange-Id: Icdec5a6bebd9d8f24b3f335f8ec8b09a5810a774\n"
    },
    {
      "commit": "697283e9177ee5730bf5c652c3c05d3aa3838ace",
      "tree": "a17ef92257437f6e130a2c73a53e92fc4bdca5a2",
      "parents": [
        "0ff6d7ee17de33d314ef726e7506b39c64a3ed35"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jun 23 12:55:29 2011 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jun 23 12:55:29 2011 -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": "60d47796ccfb3db3ab73017897f648678daddc83",
      "tree": "87e3bfde59e5edb34e139e15414d7e05ebab41f0",
      "parents": [
        "df02afe8355e1e7a6f8f02549f41a166c3ee6932"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jun 22 17:42:23 2011 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Wed Jun 22 17:45:30 2011 -0700"
      },
      "message": "Thread ID zero for androidSetThreadSchedulingGroup\n\nAlready implemented by androidSetThreadPriority but not documented\n\nChange-Id: I85302b17092952065f3f3a4214d8d8abdd465dbd\n"
    },
    {
      "commit": "ec15afca08fcc342d6f22cf02a21975af13091cf",
      "tree": "3163f1bee8e9bb66011950745aaeaf507c578036",
      "parents": [
        "d76baeb4d836c33cc68cbb0c2e237c066f368529"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Jun 14 11:50:22 2011 -0700"
      },
      "committer": {
        "name": "Xavier Ducrohet",
        "email": "xav@android.com",
        "time": "Thu Jun 16 18:26:14 2011 -0700"
      },
      "message": "DO NOT MERGE. may fix build on some version of gcc\n\nChange-Id: Id99d390862731fd3fbc009dbffdf1d2a59dbe348\n"
    },
    {
      "commit": "3b916233cbbbcc5bbc703213af5e647910956cbc",
      "tree": "76052a00a29909da662272928bb130c87dbec30d",
      "parents": [
        "e21217af6480c45212517a68b2b6e583c4dc27c9",
        "48294b0d9388cff632f0e6ae5220305d342c76fb"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Jun 16 18:15:19 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Jun 16 18:15:19 2011 -0700"
      },
      "message": "am 48294b0d: am e7d3ee9d: Revert \"merge various SF fixes from gingerbread to honeycomb-mr2\" (DO NOT MERGE)\n\n* commit \u002748294b0d9388cff632f0e6ae5220305d342c76fb\u0027:\n  Revert \"merge various SF fixes from gingerbread to honeycomb-mr2\" (DO NOT MERGE)\n"
    },
    {
      "commit": "e7d3ee9d81de13e992c7d063ca472d480956b0c6",
      "tree": "ccc17e58c35296b985c69a0319f8ec23981cf928",
      "parents": [
        "c826f92e6f90f4157afd4ed69c6907ff768a0d6b"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Jun 16 17:15:51 2011 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Jun 16 17:22:28 2011 -0700"
      },
      "message": "Revert \"merge various SF fixes from gingerbread to honeycomb-mr2\" (DO NOT MERGE)\n\nAlso revert all dependent changes:\nThis reverts commit 8e18668d14adf601cbe5973030c310ec23d88461.\nThis reverts commit 69b4587bfbb3e98f793959d9123340360fa233a2.\nThis reverts commit a9c9a4baf24700e8817d47d8ea8da1742caea0b5.\nThis reverts commit 2c0042b666a969091c931614f2fc0dce2f1cfac8.\nThis reverts commit f6c8206735e7e078461e5f2aef6e1a1446fdd075.\nThis reverts commit 24855c09173a6caaec7dcedd0c2d7ce15121d39b.\n\nChange-Id: I33e699640f3f59e42fa03c99a9a1b7af0d27d4d8\n"
    },
    {
      "commit": "35e6d6867c63ad254e95325206aa7a927edd6797",
      "tree": "f97feb4c06ceed98684b0431931c2eb6403d3999",
      "parents": [
        "552bd670071b519d97124621a3c11dc98062c12b",
        "0887b8c2e583e682cd2c1bc909cb3fdbec704004"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Jun 15 22:42:52 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Jun 15 22:42:52 2011 -0700"
      },
      "message": "am 0887b8c2: am 8e18668d: revert surfaceflinger leak fix as it uncovered a crasher on xoom (DO NOT MERGE)\n\n* commit \u00270887b8c2e583e682cd2c1bc909cb3fdbec704004\u0027:\n  revert surfaceflinger leak fix as it uncovered a crasher on xoom (DO NOT MERGE)\n"
    },
    {
      "commit": "552bd670071b519d97124621a3c11dc98062c12b",
      "tree": "315fd0e01a5311701273eb5552f4f3593d5a6733",
      "parents": [
        "85c14352a4f8946a6908eac140936080536fa575",
        "d5244e0a88ed2f843651aa5ffdc71a45c968e0f3"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Jun 15 22:12:32 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Jun 15 22:12:32 2011 -0700"
      },
      "message": "am d5244e0a: am 52a43990: Revert \"revert surfaceflinger leak fix as it uncovered a crasher on xoom\"\n\n* commit \u0027d5244e0a88ed2f843651aa5ffdc71a45c968e0f3\u0027:\n  Revert \"revert surfaceflinger leak fix as it uncovered a crasher on xoom\"\n"
    },
    {
      "commit": "e04f826fef44b85108be85fb6d3a16c35a9e5c29",
      "tree": "13afd43678741a6439d23a966950cd7c6d40bdaa",
      "parents": [
        "a27ad3cca3f17e394ce96011422a0131c15939a9"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Jun 15 20:41:15 2011 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed Jun 15 20:55:49 2011 -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": "8e18668d14adf601cbe5973030c310ec23d88461",
      "tree": "744609586edc74feee7b236de068f587de6545b1",
      "parents": [
        "52a43990880b27808bcf562afcc4209d34728e6e"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Jun 15 20:42:47 2011 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Jun 15 20:45:32 2011 -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": "52a43990880b27808bcf562afcc4209d34728e6e",
      "tree": "413d422aa5827ad63c62125278a633b78ae77dff",
      "parents": [
        "d20d72d193ab0d7f33c839d8bf9573b55abfebdc"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Jun 15 20:41:24 2011 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Jun 15 20:42:25 2011 -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": "85c14352a4f8946a6908eac140936080536fa575",
      "tree": "f97feb4c06ceed98684b0431931c2eb6403d3999",
      "parents": [
        "f28f1de391d53b590f5ed963dcb9ae634e3196db",
        "7ecdeb6e548ff71d4f70b343e30136e89eaa3e33"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Jun 15 20:21:31 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Jun 15 20:21:31 2011 -0700"
      },
      "message": "am 7ecdeb6e: am d20d72d1: Merge \"revert surfaceflinger leak fix as it uncovered a crasher on xoom\" into honeycomb-mr2\n\n* commit \u00277ecdeb6e548ff71d4f70b343e30136e89eaa3e33\u0027:\n  revert surfaceflinger leak fix as it uncovered a crasher on xoom\n"
    },
    {
      "commit": "af6edba59e250adbdfa5b3c3be134f70d8c38a16",
      "tree": "755773c8989097f0880ec9f134861c91527573de",
      "parents": [
        "f409604122f959653fb789e9133e94a51e369693"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Jun 15 19:20:52 2011 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Jun 15 19:31:04 2011 -0700"
      },
      "message": "revert surfaceflinger leak fix as it uncovered a crasher on xoom\n\nBug: 4600244\nChange-Id: Ia68ebf0f243a051ff6a21b3863e3e5d259bbf7ac\n"
    },
    {
      "commit": "5137711109783dcbb20143d3e5cab2fa931218dd",
      "tree": "62cf965ceb33e20e3dfb357564f8d7bdbedc48cc",
      "parents": [
        "d8f9a83cab34de38981dc3ba5ca9df8dda02dbc0",
        "afffa8fa9f82a7343e1158bf921931fd3e3df615"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Jun 15 14:13:04 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Jun 15 14:13:04 2011 -0700"
      },
      "message": "am afffa8fa: fix RefBase so it retains binary-compatibility with gingerbread (DO NOT MERGE)\n\n* commit \u0027afffa8fa9f82a7343e1158bf921931fd3e3df615\u0027:\n  fix RefBase so it retains binary-compatibility with gingerbread (DO NOT MERGE)\n"
    },
    {
      "commit": "9ee3975883cc4356d7b44f4e86d8c61589d2f42c",
      "tree": "b65457665ce65340c7f520b6e13973fbbe2e50fa",
      "parents": [
        "8a73d211845671880b0d50fbb0c5caa065066c80",
        "a9007fbdae6671f66535da4b9dad04b19aaf9186"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Jun 14 13:30:34 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Jun 14 13:30:34 2011 -0700"
      },
      "message": "am a9007fbd: am 69b4587b: DO NOT MERGE. may fix build on some version of gcc\n\n* commit \u0027a9007fbdae6671f66535da4b9dad04b19aaf9186\u0027:\n  DO NOT MERGE. may fix build on some version of gcc\n"
    },
    {
      "commit": "69b4587bfbb3e98f793959d9123340360fa233a2",
      "tree": "2682adec63c6a4dbb58f22395c16cb5ba9600c3b",
      "parents": [
        "700a1f25719138b94c453beb6325e627a11a9883"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Jun 14 11:50:22 2011 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Jun 14 12:05:42 2011 -0700"
      },
      "message": "DO NOT MERGE. may fix build on some version of gcc\n\nChange-Id: Iff6d9ab3a7caf58f65fc3f60633a3bd577b7af25\n"
    },
    {
      "commit": "f1df0407c6c399cdc9e222efe2d50176d7853100",
      "tree": "a134fb5b75f7d3fb0a742082d4d748cc30a8f879",
      "parents": [
        "2714abff5cc50b1487c0979c99cc685f5ea113b1"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Jun 14 11:50:22 2011 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Jun 14 11:50:22 2011 -0700"
      },
      "message": "may fix build on some version of gcc\n\nChange-Id: Ia88787c0432ec84d51fe505fd6a2b6f98ebe8f33\n"
    },
    {
      "commit": "eb99f0d9f05dd37f988a815e6bc01bbd7152c31a",
      "tree": "eab0217d74f5887e680f0dbc57aca49acba2913a",
      "parents": [
        "a934219ca8d23a63e5a9f443fafd6d4ac9847c71"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Sun Jun 12 18:05:53 2011 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Jun 13 18:39:45 2011 -0700"
      },
      "message": "fix RefBase so it retains binary-compatibility with gingerbread\n\nBug: 4595257\nChange-Id: I0d5e10f497e3f39868bff58f6ded510c38b44b12\n"
    },
    {
      "commit": "c031afc8e9ad6c940c7d67a15b9c53092987377e",
      "tree": "71f384a3f6592d8acfa591db59bae6c26f9c8d50",
      "parents": [
        "c793f521e5ace1dca39d65de3ed60d7c8242f661",
        "77079399fca3e9c71e2ac06f3da26934e1c278b9"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Jun 13 14:15:00 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Jun 13 14:15:00 2011 -0700"
      },
      "message": "am 77079399: am a9c9a4ba: fix RefBase so it retains binary-compatibility with gingerbread (DO NOT MERGE)\n\n* commit \u002777079399fca3e9c71e2ac06f3da26934e1c278b9\u0027:\n  fix RefBase so it retains binary-compatibility with gingerbread (DO NOT MERGE)\n"
    },
    {
      "commit": "afffa8fa9f82a7343e1158bf921931fd3e3df615",
      "tree": "04e6d9721d21895ca93b209f98db8b5b65ab9991",
      "parents": [
        "d027329cd6105c05c157e3858a170e4f04eb0e3e"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Sun Jun 12 18:05:53 2011 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Jun 13 13:58:34 2011 -0700"
      },
      "message": "fix RefBase so it retains binary-compatibility with gingerbread (DO NOT MERGE)\n\nBug: 4595257\nChange-Id: I4773cf4fe59b2509db0ed733739eb6961d473b25\n"
    },
    {
      "commit": "a9c9a4baf24700e8817d47d8ea8da1742caea0b5",
      "tree": "ebc1fd1110292ff2f544838ddc7a85dd72b423a0",
      "parents": [
        "fd63814abe8e81d5e1e0eb75b5a5a18034e9b4c6"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Sun Jun 12 18:05:53 2011 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Jun 13 13:44:28 2011 -0700"
      },
      "message": "fix RefBase so it retains binary-compatibility with gingerbread (DO NOT MERGE)\n\nBug: 4595257\nChange-Id: I1db83149107d7dab1f0b7e73c684e0ff82e17e62\n"
    },
    {
      "commit": "dfc7958a2eafba52db90743a4707eed1d780b63b",
      "tree": "842497b93890e32563cf187ec4060bf7ff1121d3",
      "parents": [
        "fde45f58644c351ad9f662bc272fc5ac57d9c6a9",
        "9539d9f65a28b676e0a03322ad848b24786a515d"
      ],
      "author": {
        "name": "Jamie Gennis",
        "email": "jgennis@google.com",
        "time": "Mon Jun 13 12:32:46 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jun 13 12:32:46 2011 -0700"
      },
      "message": "Merge \"libutils: add a binary blob cache implementation.\""
    },
    {
      "commit": "041120754aa59ddd28927fa6c5db0c90bb8f5e95",
      "tree": "6e2bc633ab17347da11c06ebaffaf1b33f81d6fe",
      "parents": [
        "622d5441975fa16636d3304d42d27659af14cb49",
        "9dbd7d818916dca77e53ababdaf05311d5c7bce2"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Jun 13 10:30:29 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jun 13 10:30:29 2011 -0700"
      },
      "message": "Merge \"Remove redundant memory barrier\""
    },
    {
      "commit": "9dbd7d818916dca77e53ababdaf05311d5c7bce2",
      "tree": "bfabae474c823f0772712a322265af2d980959ef",
      "parents": [
        "679dd99cdce72683816e6ac75e4f0e68ca6ad51c"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Thu Jun 02 08:59:28 2011 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Fri Jun 10 17:07:46 2011 -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": "6b592723c9a9fc816a8ab75c935e8cd20ff65a0e",
      "tree": "00b93945a1c8051172316575208f14c355e663c3",
      "parents": [
        "08b992c88e60a95b629a70cd197b3d3b9b27fb8d",
        "f51ded0f8f593d17af82946eb65c05fc04f688b4"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Jun 10 12:45:36 2011 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Jun 10 12:45:36 2011 -0700"
      },
      "message": "resolved conflicts for merge of f51ded0f to master\n\nChange-Id: Ida356524a68aeb2b9b0013dfbb6ab4bd11e616e2\n"
    },
    {
      "commit": "f51ded0f8f593d17af82946eb65c05fc04f688b4",
      "tree": "32b39d7d93170aed01c11e7353afc53a2b306cb4",
      "parents": [
        "5a8455c3c625201f3ae6b9ce32913bf97ba61cc8",
        "a8d7ea067cf22baeee2ff0a33e5a8c5a35936942"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Jun 09 16:06:07 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Jun 09 16:06:07 2011 -0700"
      },
      "message": "am a8d7ea06: am 220cd77d: Merge \"Enforce public resource restriction on bag parents.\" into honeycomb-mr2\n\n* commit \u0027a8d7ea067cf22baeee2ff0a33e5a8c5a35936942\u0027:\n  Enforce public resource restriction on bag parents.\n"
    },
    {
      "commit": "426431adcc220b6adfbe1d9530247f897e60fa36",
      "tree": "e9dd34ae5151de5bf9f57edb3055d0d228e1f006",
      "parents": [
        "1d3173c3dc93bb4f2efc5b059fec8e7577b3258a"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Jun 09 11:29:08 2011 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Jun 09 15:27:39 2011 -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": "24855c09173a6caaec7dcedd0c2d7ce15121d39b",
      "tree": "1b72c39ca375da3f4c43ba5afcf9cde70dd7a53d",
      "parents": [
        "b16b020dd32147fbaaf7de47d5de16bfee10967a"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Jun 06 09:55:15 2011 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Jun 06 15:14:25 2011 -0700"
      },
      "message": "merge various SF fixes from gingerbread to honeycomb-mr2 (DO NOT MERGE)\n\n  Fix a race that could cause GL commands to be executed from the wrong thread.\n  RefBase subclasses can now decide how they want to be destroyed.\n  Fix a race in SurfaceFlinger that could cause layers to be leaked forever.\n  Fix a race-condtion in SurfaceFlinger that could lead to a crash.\n\ninitial cherry-pick:\nresolved conflicts for merge of b9783b49 to honeycomb-plus-aosp\n\nChange-Id: I2a335e03fff219e35c18a7b0089b3a11d636576f\n"
    },
    {
      "commit": "b2fd84ad1d470d607af4a83da378d4e317421634",
      "tree": "7f3004f80d6e46b33317676d8d11b79aa3c6bb69",
      "parents": [
        "fc51aaec82ecedb554d158e4284761c9348d09fd",
        "b9783b49f4727a0365f2297bb903db8682855adf"
      ],
      "author": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Mon Jun 06 09:55:15 2011 -0700"
      },
      "committer": {
        "name": "Marco Nelissen",
        "email": "marcone@google.com",
        "time": "Mon Jun 06 09:55:15 2011 -0700"
      },
      "message": "resolved conflicts for merge of b9783b49 to honeycomb-plus-aosp\n\nChange-Id: I1d86ea56b3d1d1b69f6671e5b0df0ca3f0c79643\n"
    },
    {
      "commit": "8a7d44e8248cf7078da6094068b039dacc0a3971",
      "tree": "dbb6847bc8af2033321069e3ff1a2e0506f0ba14",
      "parents": [
        "0e5e16a656b0002f377f1bcda2e43a97206e4046",
        "54cb63e26e41b80c013b8665878b9c7c7fb328c1"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Jun 02 16:44:52 2011 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Jun 02 16:44:52 2011 -0700"
      },
      "message": "resolved conflicts for merge of 54cb63e2 to master\n\nChange-Id: I5b741a1781e3f76c03fc1534ffce871117effd10\n"
    },
    {
      "commit": "0e5e16a656b0002f377f1bcda2e43a97206e4046",
      "tree": "8559a3390986053feb375f09caa34439da7271ab",
      "parents": [
        "2170a992daa97c25fc9c5f946a63121b3bee9a35",
        "da9837fb61c8aa53c67921682016d97655332089"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Jun 02 16:24:12 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Jun 02 16:24:12 2011 -0700"
      },
      "message": "am da9837fb: am c058d386: am ff762299: Merge \"Small fixes and cleanup of resource config handling.\" into honeycomb-mr2\n\n* commit \u0027da9837fb61c8aa53c67921682016d97655332089\u0027:\n  Small fixes and cleanup of resource config handling.\n"
    },
    {
      "commit": "54cb63e26e41b80c013b8665878b9c7c7fb328c1",
      "tree": "a3c15960d5aef66a6df3370cb5ad0b12a9fa1dee",
      "parents": [
        "da9837fb61c8aa53c67921682016d97655332089",
        "528c49f112dce5f9687f30a9751e783196eca0c6"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri May 27 14:27:46 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri May 27 14:27:46 2011 -0700"
      },
      "message": "am 528c49f1: am b96cbbd1: Add \"tv\" density for 720p screens.\n\n* commit \u0027528c49f112dce5f9687f30a9751e783196eca0c6\u0027:\n  Add \"tv\" density for 720p screens.\n"
    },
    {
      "commit": "b96cbbd11c4590bec846212c33361e02293f18b5",
      "tree": "ac02f12136339bb608c07d8b26eaae1cddccf792",
      "parents": [
        "ff7622992f39d8e401ab23c5ce6a84f318906e52"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri May 27 13:40:26 2011 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri May 27 13:40:26 2011 -0700"
      },
      "message": "Add \"tv\" density for 720p screens.\n\nChange-Id: I028969b007f2fceea66947d77a2ae31ef1d1a630\n"
    },
    {
      "commit": "da9837fb61c8aa53c67921682016d97655332089",
      "tree": "5b6771f3f923114dc942c98b5498098c2c593f3f",
      "parents": [
        "ef9be207152d54cbc1382121053e25414b3b2ed3",
        "c058d38602a1ffe00e14b4ab32c876c252eabe6d"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri May 27 12:47:59 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri May 27 12:47:59 2011 -0700"
      },
      "message": "am c058d386: am ff762299: Merge \"Small fixes and cleanup of resource config handling.\" into honeycomb-mr2\n\n* commit \u0027c058d38602a1ffe00e14b4ab32c876c252eabe6d\u0027:\n  Small fixes and cleanup of resource config handling.\n"
    },
    {
      "commit": "3904d03dd01dcd43c446744e44b34615825d9679",
      "tree": "90a8c911753fe69f0ab5bbfe273c08c086f8839d",
      "parents": [
        "94250ac69c6e07534e4781d3479dccb79d8c366c"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri May 27 12:09:11 2011 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri May 27 12:09:11 2011 -0700"
      },
      "message": "Small fixes and cleanup of resource config handling.\n\nChange-Id: I402c31b68f2b4825cb4c610a65ee8e1da471c7bb\n"
    },
    {
      "commit": "8e5799ed16ab605d8de775e1644f1fa59ff6627e",
      "tree": "cc7f1fd4b865123a2ee50ddebd628004e186112f",
      "parents": [
        "7d0fb57044576fd4bbaf9683997bab288c3b759c",
        "af685f3bb566f297deee1615d55d4f33d5580ba3"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed May 25 14:42:20 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed May 25 14:42:20 2011 -0700"
      },
      "message": "am af685f3b: am 85a7f99c: Merge \"Refactor how timeouts are calculated. (DO NOT MERGE)\" into honeycomb-mr2\n\n* commit \u0027af685f3bb566f297deee1615d55d4f33d5580ba3\u0027:\n  Refactor how timeouts are calculated. (DO NOT MERGE)\n"
    },
    {
      "commit": "7d0fb57044576fd4bbaf9683997bab288c3b759c",
      "tree": "e5a83713aaaf0d82170bba4da24f32b5f7465f39",
      "parents": [
        "4e3ba25cc718bbc6db0a332c4105debc4b3552d3",
        "16330e249663fed890df0e95fce4016c2971120a"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed May 25 14:42:06 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed May 25 14:42:06 2011 -0700"
      },
      "message": "am 16330e24: am 94e838f6: Merge \"Improve VelocityTracker numerical stability. (DO NOT MERGE)\" into honeycomb-mr2\n\n* commit \u002716330e249663fed890df0e95fce4016c2971120a\u0027:\n  Improve VelocityTracker numerical stability. (DO NOT MERGE)\n"
    },
    {
      "commit": "4e3ba25cc718bbc6db0a332c4105debc4b3552d3",
      "tree": "41ea26bf7a101268ac614d362393b7bd2705f4fb",
      "parents": [
        "cfb046dead49568de6f6808a697e0508ef39a3a6",
        "4bd89fb00f319c5d6d4f17b39fd4c0b3dc827ad1"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed May 25 14:42:01 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed May 25 14:42:01 2011 -0700"
      },
      "message": "am 4bd89fb0: am 82e4373e: Merge \"Use touch pad gestures to manipulate the pointer. (DO NOT MERGE)\" into honeycomb-mr2\n\n* commit \u00274bd89fb00f319c5d6d4f17b39fd4c0b3dc827ad1\u0027:\n  Use touch pad gestures to manipulate the pointer. (DO NOT MERGE)\n"
    },
    {
      "commit": "b9783b49f4727a0365f2297bb903db8682855adf",
      "tree": "0d4831587eed29e6e2366280543ed0f226051807",
      "parents": [
        "10b364b4bea8537f955bbbb8b9b40061264b29c9",
        "c9cd2387b6938a6fbefc731d2177902266f2a130"
      ],
      "author": {
        "name": "Simon Wilson",
        "email": "simonwilson@google.com",
        "time": "Tue May 24 17:29:12 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue May 24 17:29:12 2011 -0700"
      },
      "message": "am c9cd2387: Merge changes I37f0f315,I8cbf6044,Ibb598931,I5262bf11 into gingerbread\n\n* commit \u0027c9cd2387b6938a6fbefc731d2177902266f2a130\u0027:\n  Fix a race that could cause GL commands to be executed from the wrong thread.\n  RefBase subclasses can now decide how they want to be destroyed.\n  Fix a race in SurfaceFlinger that could cause layers to be leaked forever.\n  Fix a race-condtion in SurfaceFlinger that could lead to a crash.\n"
    },
    {
      "commit": "e2c7715c772d5121397591b532d04a31b3ffcc99",
      "tree": "a528b89349ba2b367aeae8b442b5c696a7c8c99e",
      "parents": [
        "6895c4994350bc10a06481ecf42c4ba8abb3eedb",
        "bbca81334e3603c7328dc526bd63032b23d5261d"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue May 24 11:27:11 2011 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue May 24 11:27:11 2011 -0700"
      },
      "message": "resolved conflicts for merge of bbca8133 to master\n\nChange-Id: I81493674dceab848e41d380a77a37e5a9be06db6\n"
    },
    {
      "commit": "68d6075b4ad2205c10064c78cde552e3210cca91",
      "tree": "a8f8e79d5bddb76dd0578a02c17646a05021bbd9",
      "parents": [
        "5b2b4d9c0a56c4b5e869c828a6c36a1b9e27d61b"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Mar 17 01:34:19 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Mon May 23 17:20:42 2011 -0700"
      },
      "message": "Refactor how timeouts are calculated. (DO NOT MERGE)\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: I89c1171c9326c6e413042e3ee13aa9f7f1fc0454\n"
    },
    {
      "commit": "5b2b4d9c0a56c4b5e869c828a6c36a1b9e27d61b",
      "tree": "0e00adeba7368949783dd598b57b70a4936f8e9b",
      "parents": [
        "96ad3979f328a1aa098917ca1c35575e85345526"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Mar 14 19:39:54 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Mon May 23 17:19:59 2011 -0700"
      },
      "message": "Improve VelocityTracker numerical stability. (DO NOT MERGE)\n\nReplaced VelocityTracker with a faster and more accurate\nnative implementation.  This avoids the duplicate maintenance\noverhead of having two implementations.\n\nThe new algorithm requires that the sample duration be at least\n10ms in order to contribute to the velocity calculation.  This\nensures that the velocity is not severely overestimated when\nsamples arrive in bursts.\n\nThe new algorithm computes the exponentially weighted moving\naverage using weights based on the relative duration of successive\nsample periods.\n\nThe new algorithm is also more careful about how it handles\nindividual pointers going down or up and their effects on the\ncollected movement traces.  The intent is to preserve the last\nknown velocity of pointers as they go up while also ensuring\nthat other motion samples do not count twice in that case.\n\nBug: 4086785\nChange-Id: I95054102397c4b6a9076dc6a0fc841b4beec7920\n"
    },
    {
      "commit": "96ad3979f328a1aa098917ca1c35575e85345526",
      "tree": "a703eeeda8430c955738efd047616bc6a47a32e1",
      "parents": [
        "40277df7c33c0fc381eec589c768fe86de4b4404"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Mar 09 17:39:48 2011 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@android.com",
        "time": "Mon May 23 17:19:38 2011 -0700"
      },
      "message": "Use touch pad gestures to manipulate the pointer. (DO NOT MERGE)\n\n1. Single finger tap performs a click.\n2. Single finger movement moves the pointer (hovers).\n3. Button press plus movement performs click or drag.\n   While dragging, the pointer follows the finger that is moving\n   fastest.  This is important if there are additional fingers\n   down on the touch pad for the purpose of applying force\n   to an integrated button underneath.\n4. Two fingers near each other moving in the same direction\n   are coalesced as a swipe gesture under the pointer.\n5. Two or more fingers moving in arbitrary directions are\n   transformed into touches in the vicinity of the pointer.\n   This makes scale/zoom and rotate gestures possible.\n\nAdded a native VelocityTracker implementation to enable intelligent\nswitching of the active pointer during drags.\n\nChange-Id: I7b7ddacc724fb1306e1590dbaebb740d3130d7cd\n"
    },
    {
      "commit": "bbca81334e3603c7328dc526bd63032b23d5261d",
      "tree": "c29dd1ed7c2119cd50bbc4e56be9ee36d89891c7",
      "parents": [
        "98a8231e838d7d624c5862d81d1975ef4f8d0d57",
        "4bb78889d04594c01a6af7f6d38c1764e9f575f9"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon May 23 16:16:54 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon May 23 16:16:54 2011 -0700"
      },
      "message": "am 4bb78889: am 40277df7: Merge \"Add \"television\" mode.\" into honeycomb-mr2\n\n* commit \u00274bb78889d04594c01a6af7f6d38c1764e9f575f9\u0027:\n  Add \"television\" mode.\n"
    },
    {
      "commit": "9e7636681eda094dd328ce9bf54d0b0166be1e67",
      "tree": "daa994e6a3ed671ec6e09e31a8408bd7d6240871",
      "parents": [
        "fa21cb2e58838761157d3ee929a77e23b602bd01"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu May 19 18:03:31 2011 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon May 23 16:13:48 2011 -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\nBug: 4483050\nChange-Id: I8cbf6044a6fd3f01043a45592b5a60fa1e5fade2\n"
    },
    {
      "commit": "e360bb6bd8ea84b8d37604fc11dfc744b18fb0de",
      "tree": "7e833a630e8108be1345d8595438eea5a30e7173",
      "parents": [
        "1b144e625fb0d34cd680c44cbcfb2deb8a76d4c6"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri May 20 16:11:04 2011 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon May 23 15:11:08 2011 -0700"
      },
      "message": "Add \"television\" mode.\n\nChange-Id: Ida1fdb61b036a8b489dbeda196fb4bc82e651b2b\n"
    },
    {
      "commit": "161e67ff3ba26408eea09221734ad2e29a1eed11",
      "tree": "6e98ff836fb5f134e01a7e9ef420ec35a78ad5d2",
      "parents": [
        "9e735541beed238d3b99d4bd284af1fc953c3775",
        "06a8ceacb0dc2713cb0bb2c93d2a750f2a58db68"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu May 19 21:44:52 2011 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu May 19 21:44:52 2011 -0700"
      },
      "message": "resolved conflicts for merge of 06a8ceac to master\n\nChange-Id: Id51574c825affddfac14ad7214c5496d6a3d6e69\n"
    },
    {
      "commit": "6db8c505398a0979853f6c166e0a8bcafd9268f8",
      "tree": "af906178d8b458e0030034809bccc962bfdd59ac",
      "parents": [
        "14a2935809e73a9d824888dc837f2f017100fd26"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu May 19 18:03:31 2011 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu May 19 19:40:01 2011 -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": "06a8ceacb0dc2713cb0bb2c93d2a750f2a58db68",
      "tree": "14cda7bbbdc5e6cabb492d7af1977a2f5548062b",
      "parents": [
        "90177e59e5211dd9ab33761ce800e8a86a49d1e2",
        "c851ea5672f6e042c2e89b2a2ce4a2467e1fcd2a"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu May 19 19:34:21 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu May 19 19:34:21 2011 -0700"
      },
      "message": "am c851ea56: am 69cb8757: Add new \"-swNNNdp\" resource qualifier.\n\n* commit \u0027c851ea5672f6e042c2e89b2a2ce4a2467e1fcd2a\u0027:\n  Add new \"-swNNNdp\" resource qualifier.\n"
    },
    {
      "commit": "69cb87576ba163b61bb0e6477a3b7c57a9b11d40",
      "tree": "a44be0af3d008409403be133358bdcd628741c01",
      "parents": [
        "b9537db8d9ee27efb4a98415ad2d6b50c1806e5d"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu May 19 18:13:32 2011 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu May 19 18:23:29 2011 -0700"
      },
      "message": "Add new \"-swNNNdp\" resource qualifier.\n\nChange-Id: I0101e88ca9d8d44138bdcaf571f24b0352f4f6ce\n"
    },
    {
      "commit": "9539d9f65a28b676e0a03322ad848b24786a515d",
      "tree": "5a21ee7567f748fa171a1e566e689afb5dabe04d",
      "parents": [
        "8318561e9a69f692531647fe28deecfee303a1dc"
      ],
      "author": {
        "name": "Jamie Gennis",
        "email": "jgennis@google.com",
        "time": "Thu Apr 28 16:19:45 2011 -0700"
      },
      "committer": {
        "name": "Jamie Gennis",
        "email": "jgennis@google.com",
        "time": "Tue May 17 16:58:37 2011 -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": "2e4a3236a7634d17f89288e9739a438ecbea0471",
      "tree": "45e1c4c61f4eb9775572d94a55dd91b071b84916",
      "parents": [
        "15f8a6a726658bfb195924bd5d7bb86684a22de0",
        "46a282f323bc05606e4fe1eba795bd9ac7c99819"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri May 13 11:21:26 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri May 13 11:21:26 2011 -0700"
      },
      "message": "am 46a282f3: am 0ed2e845: Merge \"DO NOT MERGE.  Integrate add new screen width/height in \"dp\" configs.\" into honeycomb-mr2\n\n* commit \u002746a282f323bc05606e4fe1eba795bd9ac7c99819\u0027:\n  DO NOT MERGE.  Integrate add new screen width/height in \"dp\" configs.\n"
    },
    {
      "commit": "ebff8f92f13513ce37bd74759eb1db63f2220590",
      "tree": "909da02ab7ff47483e227f032828dbdbe7f959af",
      "parents": [
        "a8138732a01b92f0a40f72050b74a3bd4cf6d215"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu May 12 18:07:47 2011 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu May 12 18:39:51 2011 -0700"
      },
      "message": "DO NOT MERGE.  Integrate add new screen width/height in \"dp\" configs.\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: I4acb73d82677b74092c1da9e4046a4951921f9f4\n"
    },
    {
      "commit": "4a627c71ff53a4fca1f961f4b1dcc0461df18a06",
      "tree": "270190b1e030424210b6375ca886c45db10c4fb6",
      "parents": [
        "2bb51bb203c117649db10ad8bd497f199ca797b0"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Fri Apr 01 14:43:32 2011 -0700"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Tue May 10 17:52:51 2011 -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": "1d38d936a159a73ad06e481bd960d37c5ae1efed",
      "tree": "ea741faa897427ca4dbe745fbd28793abfb87801",
      "parents": [
        "641e093f28b0c1b4b3c5c399b9941479fd760eae"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Apr 25 22:56:54 2011 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Apr 25 22:59:07 2011 -0700"
      },
      "message": "fix typo in Vector\u003c\u003e:: push_back and push_front\n\nparameter were inverted.\n\nChange-Id: I867b01de5f58354bb9668fa662dd2a7d78dd3b37\n"
    },
    {
      "commit": "589b64a64be16d04d35113bc7f2644e200cb4a3e",
      "tree": "3e288340aeb11469b98a85d6e65b1efce727aaab",
      "parents": [
        "9f0df630fda450571e097ab6b1f1b1e5fa71e981"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Apr 25 15:28:17 2011 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Apr 25 15:28:17 2011 -0700"
      },
      "message": "Add some basic STL compatibility to Vector\u003c\u003e\n\nChange-Id: Iaf72623170ee415372c7989d7ba9ff627167449e\n"
    },
    {
      "commit": "461fa8b05dfb4fd334980365e27002a7520e866e",
      "tree": "19238dece6998ee2121503d18b4548163e9e2704",
      "parents": [
        "d3a6956a6d69d7399931c403cd31cb0236278fc6",
        "18490fb93e206fd899c3258096cc32f293373c92"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Apr 12 12:51:08 2011 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Apr 12 12:51:08 2011 -0700"
      },
      "message": "resolved conflicts for merge of 18490fb9 to master\n\nChange-Id: I6c68e6fb0f9c1182a955689bbffc161a8f30bd37\n"
    },
    {
      "commit": "18490fb93e206fd899c3258096cc32f293373c92",
      "tree": "e45db3abacf59a0cba4604cde390c310e38e4153",
      "parents": [
        "0b9b8711a1a2107dc913cc751b7d981fce4f3082",
        "87b3c0dcc45223ff9d5ab2e39d7b9a6953e03f50"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Apr 12 10:27:15 2011 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Tue Apr 12 10:27:15 2011 -0700"
      },
      "message": "resolved conflicts for merge of 87b3c0dc to honeycomb-plus-aosp\n\nChange-Id: Ia1a0024aabf531438203eb9fea3a10dd15eabe53\n"
    },
    {
      "commit": "87b3c0dcc45223ff9d5ab2e39d7b9a6953e03f50",
      "tree": "8c64414e6f079c9511163657f200d2ee132309f4",
      "parents": [
        "4430670f48f75661293371dab8db55865f5f56e0",
        "08d9d9a46250c4fad66e9b637e8898a3524c4286"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@android.com",
        "time": "Mon Apr 11 15:33:19 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Apr 11 15:33:19 2011 -0700"
      },
      "message": "am 08d9d9a4: Merge \"Runtime resource overlay, iteration 1.\"\n\n* commit \u002708d9d9a46250c4fad66e9b637e8898a3524c4286\u0027:\n  Runtime resource overlay, iteration 1.\n"
    },
    {
      "commit": "3fc982f41fda1f254bfbc35490d81cd82a0ed90a",
      "tree": "6f9ba92dc2c9001a156f298c37dcdef9c9552600",
      "parents": [
        "fb84ce0df6b2db84981e4efa4530397a85240d4a"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Mar 30 16:20:26 2011 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Apr 06 11:00:37 2011 -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": "57f4b77c89bafedf9468f9a636561c0c193405c9",
      "tree": "9e73065411411858c9c6ae350c5ee8ffe14598c3",
      "parents": [
        "c6b22e2727bd3730edd5ad72831a9bb4670d00f3"
      ],
      "author": {
        "name": "Mårten Kongstad",
        "email": "marten.kongstad@sonyericsson.com",
        "time": "Thu Mar 17 14:13:41 2011 +0100"
      },
      "committer": {
        "name": "Kenneth Andersson",
        "email": "kenneth.andersson@sonyericsson.com",
        "time": "Fri Apr 01 14:12:10 2011 +0200"
      },
      "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": "6ed6f6d82d7b9f8d82f3ab3a9f718a0e59ffa476",
      "tree": "4376f402d02d4fea5371ccebb11d78e44171af2b",
      "parents": [
        "315f19be8ef26fee77db2455f8c2997680755f6d",
        "aa3855d5836d2a2d83baafdf6e40caf90d3dad1c"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Mar 17 20:16:42 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Mar 17 20:16:42 2011 -0700"
      },
      "message": "Merge \"Refactor how timeouts are calculated.\""
    },
    {
      "commit": "aa3855d5836d2a2d83baafdf6e40caf90d3dad1c",
      "tree": "5f19b7bd1c42abf7e145637ed3459cf377fa94b9",
      "parents": [
        "843e29d3751017267b96565c543df0301c31a9f7"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Mar 17 01:34:19 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Mar 17 17:29:09 2011 -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": "48e122891afec8bfadaa9d7fdf731b8f711b5b91",
      "tree": "0c103210fc83805f971426337a4adbdfcb59aa1d",
      "parents": [
        "607a10c5c94e1f7a657a54c9ee8a9a9f31b50e25",
        "e22aa62362a3007ee59ac62d4b5969e216987995"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Mar 17 00:13:49 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Mar 17 00:13:49 2011 -0700"
      },
      "message": "am e22aa623: am 25594e19: am f40e638e: fix [4093196] Device lock up - log spam with SharedBufferStack: waitForCondition(LockCondition) timed out\n\n* commit \u0027e22aa62362a3007ee59ac62d4b5969e216987995\u0027:\n  fix [4093196] Device lock up - log spam with SharedBufferStack: waitForCondition(LockCondition) timed out\n"
    },
    {
      "commit": "f40e638ec62cd9e1a1851809b7c8bf5e4187fad2",
      "tree": "fce830323935d7c7171c501278fb6c7ea9fdf9c8",
      "parents": [
        "7af7e00b9112f15d1683ae93975a6fcd9dd34da8"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Mar 16 23:18:07 2011 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Mar 17 00:04:42 2011 -0700"
      },
      "message": "fix [4093196] Device lock up - log spam with SharedBufferStack: waitForCondition(LockCondition) timed out\n\na memory corruption happned when the buffer pool was resized\n(like when playing a video or using camera) and there was\nno current active buffer. In this case, the faulty code\nwould index into an array at position -1 which corrupted\n24 bytes of data.\n\nalso improved region validation code (ifdef\u0027ed out by default)\n\nBug: 4093196\nChange-Id: I915c581d131148959d720e00e3892e9186ab733d\n"
    },
    {
      "commit": "a30f43624f76a7d49fcb48944c310cb4dbfc6522",
      "tree": "33802c8360cead9e9dd88ecfe8e8d8e167dc5b3d",
      "parents": [
        "d50349de17784f924f8cca6ef2fb2708b9fd2ecd",
        "72064c66e20b9cc86900a9d833c228c345a2b2a4"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Mar 16 17:31:30 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Mar 16 17:31:30 2011 -0700"
      },
      "message": "am 72064c66: am b0204d0a: am c2b91a61: Merge \"Modify the GL renderer\\\u0027s functor to pass the clip to WebView\" into honeycomb-mr1\n\n* commit \u002772064c66e20b9cc86900a9d833c228c345a2b2a4\u0027:\n  Modify the GL renderer\u0027s functor to pass the clip to WebView\n"
    },
    {
      "commit": "80911b851764b073310fd0bffdf4a7db0d8fdd0b",
      "tree": "854e09626693907162ed479408abd619e280ddc4",
      "parents": [
        "fc59176241f498ad4eeb4237800c2eb5edd9efcd"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Mar 16 15:30:12 2011 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Mar 16 15:31:33 2011 -0700"
      },
      "message": "Modify the GL renderer\u0027s functor to pass the clip to WebView\n\nChange-Id: If5efe399ca58f3000b2883e24e9f3736a2025184\n"
    },
    {
      "commit": "843e29d3751017267b96565c543df0301c31a9f7",
      "tree": "80277ab21b62650bb613dc6b7df062c4c7cc9963",
      "parents": [
        "437c2c1620d0a485a4f81fdb0aaf706d89b865e7",
        "2ed2462aa29c564f5231f317c27b3188da875e52"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Mar 15 20:01:16 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Mar 15 20:01:16 2011 -0700"
      },
      "message": "Merge \"Improve VelocityTracker numerical stability.\""
    },
    {
      "commit": "2ed2462aa29c564f5231f317c27b3188da875e52",
      "tree": "63209b0ae028c1353e79d79b5e4000e7c4402ecc",
      "parents": [
        "ace13b17866dc9136aeecf6dfaf7077f37434469"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Mar 14 19:39:54 2011 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Mar 15 19:59:47 2011 -0700"
      },
      "message": "Improve VelocityTracker numerical stability.\n\nReplaced VelocityTracker with a faster and more accurate\nnative implementation.  This avoids the duplicate maintenance\noverhead of having two implementations.\n\nThe new algorithm requires that the sample duration be at least\n10ms in order to contribute to the velocity calculation.  This\nensures that the velocity is not severely overestimated when\nsamples arrive in bursts.\n\nThe new algorithm computes the exponentially weighted moving\naverage using weights based on the relative duration of successive\nsample periods.\n\nThe new algorithm is also more careful about how it handles\nindividual pointers going down or up and their effects on the\ncollected movement traces.  The intent is to preserve the last\nknown velocity of pointers as they go up while also ensuring\nthat other motion samples do not count twice in that case.\n\nBug: 4086785\nChange-Id: I2632321232c64d6b8faacdb929e33f60e64dcdd3\n"
    },
    {
      "commit": "e5eb43b5d9dfd02890dc7f729a4892b518c30570",
      "tree": "599c6804f1d32844c6241354f8f36e450151d2f7",
      "parents": [
        "7896f1bd551a466168144f58b6b5a9932cafa749",
        "7d7dcb5ea891ad4c3252ed832ebd06accc96153d"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Tue Mar 15 13:51:17 2011 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Mar 15 13:51:17 2011 -0700"
      },
      "message": "am 7d7dcb5e: am 4528a7db: Merge \"Bug 4016329 do full string comparisons\" into honeycomb-mr1\n\n* commit \u00277d7dcb5ea891ad4c3252ed832ebd06accc96153d\u0027:\n  Bug 4016329 do full string comparisons\n"
    },
    {
      "commit": "f8a1842e07d5c018b33762a72a1b1b5117947579",
      "tree": "38a13589cc1a40364e8a8b3bcc3ccd0c797ef47d",
      "parents": [
        "e21110f8b1e4aa884f7a4e2164ae90dab8d5f3fa"
      ],
      "author": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 14 11:32:29 2011 -0700"
      },
      "committer": {
        "name": "Glenn Kasten",
        "email": "gkasten@google.com",
        "time": "Mon Mar 14 17:59:51 2011 -0700"
      },
      "message": "Bug 4016329 do full string comparisons\n\nUse full string comparisons instead of partial for\n  file extension and MIME type.\nDo case-insensitive comparison of MIME type and file extensions.\nFix error in comment for String8::getPathExtension.\nRemove dead code -- StringTokenizer is unused.\n\nChange-Id: I322be6235abbdaab5f7eafa48926dbb2cf46dc29\n"
    },
    {
      "commit": "ace13b17866dc9136aeecf6dfaf7077f37434469",
      "tree": "0ec5d01ef83b4d5148525f5befa28ca026b294c7",
      "parents": [
        "fd10d5cf56e5b1ba7692400e4fe4ae26b61f3285"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Mar 09 17:39:48 2011 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Mar 14 14:12:03 2011 -0700"
      },
      "message": "Use touch pad gestures to manipulate the pointer.\n\n1. Single finger tap performs a click.\n2. Single finger movement moves the pointer (hovers).\n3. Button press plus movement performs click or drag.\n   While dragging, the pointer follows the finger that is moving\n   fastest.  This is important if there are additional fingers\n   down on the touch pad for the purpose of applying force\n   to an integrated button underneath.\n4. Two fingers near each other moving in the same direction\n   are coalesced as a swipe gesture under the pointer.\n5. Two or more fingers moving in arbitrary directions are\n   transformed into touches in the vicinity of the pointer.\n   This makes scale/zoom and rotate gestures possible.\n\nAdded a native VelocityTracker implementation to enable intelligent\nswitching of the active pointer during drags.\n\nChange-Id: I5ada57e7f2bdb9b0a791843eb354a8c706b365dc\n"
    },
    {
      "commit": "f7098ce95dde39a33ca280bd1ef9a13259e7b7e5",
      "tree": "d65b1a845662999e02de568916d65af1eacfd0a1",
      "parents": [
        "8b4a4207f6683ee3d9aaf9510a64c2f3589a5d69",
        "d00353fe3191571a6773ef2d11921cfcff260bc4"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Mar 07 22:45:52 2011 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Mar 07 22:45:52 2011 -0800"
      },
      "message": "am d00353fe: am bc8a8e8c: Merge \"Add support for partial invalidates in WebView Bug #3461349\" into honeycomb-mr1\n\n* commit \u0027d00353fe3191571a6773ef2d11921cfcff260bc4\u0027:\n  Add support for partial invalidates in WebView Bug #3461349\n"
    }
  ],
  "next": "cabfcc1364eb7e4de0b15b3574fba45027b45cfc"
}
