)]}'
{
  "log": [
    {
      "commit": "081bc5c47d8a980e6eafa70ddafcd89981586391",
      "tree": "7f69e950394cfd54a2bd5083345fba31fb330d9c",
      "parents": [
        "8896783dc1d31c5274b277c364da0ffe7cc27cca"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Jun 24 21:22:43 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Jun 24 21:28:59 2010 -0700"
      },
      "message": "fix [2793164] Spam 2x/second with TOT master in SurfaceFlinger\n\nMake sure to not use GL_TEXTURE_EXTERNAL when it\u0027s not supported\nby the GL. The error was harmless, but annoying.\n\nChange-Id: I571a9a9b05d35da51420950a6a6e95629067efd0\n"
    },
    {
      "commit": "e91a5db35b0faecb9387ba09341713568b1ae86c",
      "tree": "c066471d9aa6ba58ea3f3d4b3f5da2e8c3e160d5",
      "parents": [
        "69a4817e3e1e368e758ff8c238deb5ee26963c04"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Wed Jun 23 16:50:30 2010 -0700"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Wed Jun 23 16:51:07 2010 -0700"
      },
      "message": "Remember to initialize timestamps in the dispatch allocator\n\nChange-Id: I83a2d353c34ff84a7d130e602c6dedc6a5541944\n"
    },
    {
      "commit": "a95e4cb62f3642cb190d032dbf7dc40d9ecc6973",
      "tree": "ae4437444a3d3ebeff48dabfd1e9c11fc14620ac",
      "parents": [
        "ef730e6ececa96a3e0576140eea707f7c48cd66c"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Jun 18 18:09:33 2010 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Tue Jun 22 11:21:50 2010 -0700"
      },
      "message": "First stab at attaching native event dispatching.\n\nProvides the basic infrastructure for a\nNativeActivity\u0027s native code to get an object representing\nits event stream that can be used to read input events.\n\nStill work to do, probably some API changes, and reasonable\ndefault key handling (so that for example back will still\nwork).\n\nChange-Id: I6db891bc35dc9683181d7708eaed552b955a077e\n"
    },
    {
      "commit": "07ccf5ad7edfeeebb79208ad3e8a52917fe038a8",
      "tree": "9c1f269584648a4c4591ec0b885eb3811952538a",
      "parents": [
        "875500b47ac74a164f7792ce89a16d600ea72695"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Jun 21 17:45:29 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Jun 21 18:22:09 2010 -0700"
      },
      "message": "remove unused YUV formats\n\nChange-Id: Id0ae28b1700cf771cdbe0ca27b139d32cab90b2a\n"
    },
    {
      "commit": "ef8f96a717554a85aa63a60f8c61be2afbd12a5c",
      "tree": "0a6550aabca59a3e91a5a3d88bdd5351ce14d043",
      "parents": [
        "d91ac98a8ead216b12af6df61d90229b74c7f0f6",
        "27b3a7a75960d026655f3acd1de8a672e80a5776"
      ],
      "author": {
        "name": "Brad Fitzpatrick",
        "email": "bradfitz@android.com",
        "time": "Mon Jun 21 15:31:01 2010 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jun 21 15:31:01 2010 -0700"
      },
      "message": "Merge \"Start of work on passing around StrictMode policy over Binder calls.\" into gingerbread"
    },
    {
      "commit": "d91ac98a8ead216b12af6df61d90229b74c7f0f6",
      "tree": "6d30e2403c332266e81949da0e7b780a054e5a10",
      "parents": [
        "28333315c6f62b303de2ec0ac9e48158ed419f06"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Jun 21 15:19:26 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Jun 21 15:19:26 2010 -0700"
      },
      "message": "fix [2785833] valgrind error in android::Layer::requestBuffer\n\nfix uninitialized variable\n\nChange-Id: I99e1b619ae8c88dd9d77b3abf4762f801019047e\n"
    },
    {
      "commit": "28333315c6f62b303de2ec0ac9e48158ed419f06",
      "tree": "119e2b116d4d13b1dd2b8e59c53290e0f3cf70a9",
      "parents": [
        "7e73a2ce17740abd028d9944c423e191e5b4854c",
        "f8b4b4408cb864bf604608221eafa9d37323d348"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Jun 21 15:11:18 2010 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jun 21 15:11:18 2010 -0700"
      },
      "message": "Merge \"Added support for the GL_TEXTURE_EXTERNAL target\" into gingerbread"
    },
    {
      "commit": "7fbdc84e87dd3a0e196b9803bb04495d11e9cb8a",
      "tree": "32691f639ef71365b602795db215f11f457397a5",
      "parents": [
        "e47e3f3855a062ba0338a57eeda2f12a0f7a1fa8"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Jun 17 20:52:56 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Jun 21 13:59:34 2010 -0700"
      },
      "message": "More native input event dispatching.\n\nAdded ANRs handling.\nAdded event injection.\nFixed a NPE ActivityManagerServer writing ANRs to the drop box.\nFixed HOME key interception.\nFixed trackball reporting.\nFixed pointer rotation in landscape mode.\n\nChange-Id: I50340f559f22899ab924e220a78119ffc79469b7\n"
    },
    {
      "commit": "27b3a7a75960d026655f3acd1de8a672e80a5776",
      "tree": "cc5036a00b976b7757f26212abf49ed11f779cd9",
      "parents": [
        "f25c560dcdc0c04e11152fff11f521dae03522cd"
      ],
      "author": {
        "name": "Brad Fitzpatrick",
        "email": "bradfitz@android.com",
        "time": "Fri Jun 18 13:07:53 2010 -0700"
      },
      "committer": {
        "name": "Brad Fitzpatrick",
        "email": "bradfitz@android.com",
        "time": "Mon Jun 21 12:56:35 2010 -0700"
      },
      "message": "Start of work on passing around StrictMode policy over Binder calls.\n\nThis is (intendend to be) a no-op change.\n\nAt this stage, Binder RPCs just have an additional uint32 passed around\nin the header, right before the interface name.  But nothing is actually\ndone with them yet.  That value should right now always be 0.\n\nThis now boots and seems to work.\n\nChange-Id: I135b7c84f07575e6b9717fef2424d301a450df7b\n"
    },
    {
      "commit": "5c225b1680e696ae8bbf505a1997d6f720672f74",
      "tree": "932326fd02ee91d8a64adfcc9415027646c56563",
      "parents": [
        "3a0146cd29fae3c5bc29d8d535d67826284f8cc9"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Wed Jun 16 01:53:36 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Jun 17 13:27:16 2010 -0700"
      },
      "message": "Even more native input dispatch work in progress.\n\nAdded more tests.\nFixed a regression in Vector.\nFixed bugs in pointer tracking.\nFixed a starvation issue in PollLoop when setting or removing callbacks.\nFixed a couple of policy nits.\n\nModified the internal representation of MotionEvent to be more\nefficient and more consistent.\n\nAdded code to skip/cancel virtual key processing when there are multiple\npointers down.  This helps to better disambiguate virtual key presses\nfrom stray touches (such as cheek presses).\n\nChange-Id: I2a7d2cce0195afb9125b23378baa94fd2fc6671c\n"
    },
    {
      "commit": "f8b4b4408cb864bf604608221eafa9d37323d348",
      "tree": "ede6098c2dd841e667123e238562ad796519be3b",
      "parents": [
        "2d468c5d73cc1cefbcfa8d98e30622c54756918c"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Jun 14 21:20:00 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Jun 15 17:31:17 2010 -0700"
      },
      "message": "Added support for the GL_TEXTURE_EXTERNAL target\n\nThis will allow us to support YUV surfaces.\n\nChange-Id: I2d4da75f1006a5285bdc552695d4caeecccf2183\n"
    },
    {
      "commit": "92266a7894becc1cdf2298fd02380749ab036131",
      "tree": "f759cbe807243a216ec4ecb4ba12793c8550b62a",
      "parents": [
        "a6c52938b144c2bbd8c1e22d24629b12e35c99a3",
        "9c3cda04d969912bc46184f2b326d1db95e0aba5"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Jun 15 16:44:23 2010 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jun 15 16:44:23 2010 -0700"
      },
      "message": "Merge \"More work in progress on native events.\" into gingerbread"
    },
    {
      "commit": "9c3cda04d969912bc46184f2b326d1db95e0aba5",
      "tree": "cdeb4a4bfa83aa335ab840969fe214058a0d566e",
      "parents": [
        "60e8c33d6f6caad2e963e91abca16a85cd3be82a"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Jun 15 01:31:58 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Tue Jun 15 16:43:18 2010 -0700"
      },
      "message": "More work in progress on native events.\n\nRefactored the code to eliminate potential deadlocks due to re-entrant\ncalls from the policy into the dispatcher.  Also added some plumbing\nthat will be used to notify the framework about ANRs.\n\nChange-Id: Iba7a10de0cb3c56cd7520d6ce716db52fdcc94ff\n"
    },
    {
      "commit": "f1d3802ea2e0c68f3f6e7524c2450379aae670a8",
      "tree": "09f253a46061d984df1e08f1f69300878698536c",
      "parents": [
        "7e900cbf1d600a8895e63a0247f45c116ff05172"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Mon Jun 14 15:44:41 2010 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Mon Jun 14 15:46:08 2010 -0700"
      },
      "message": "Support for multiple tests\n\nThe build system enforces some invariants that were being ignored\nbefore.\n\nChange-Id: Ie7675042af7f961a507386c13b2a0b592b591af8\n"
    },
    {
      "commit": "d890cbf700695c869e6b45cddf7f132484697588",
      "tree": "c9a77409aa8525c35cd1d00e3e7d819b3fef95fa",
      "parents": [
        "43a9527c54b71cb17515591af37eeeef6c22e3ff"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Sun Jun 13 20:21:19 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Sun Jun 13 20:21:19 2010 -0700"
      },
      "message": "Remove PollLoop from host build.\n\nWe can\u0027t build (and we don\u0027t need) PollLoop in the SDK on all platforms.\n\nChange-Id: I3b0f327bbb8bc58b9b8630b0161cf360403fea68\n"
    },
    {
      "commit": "43a9527c54b71cb17515591af37eeeef6c22e3ff",
      "tree": "9a14a3a9ba426fabd07a761a5cf0e0a4714428cb",
      "parents": [
        "46b9ac0ae2162309774a7478cd9d4e578747bfc2"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Sun Jun 13 19:35:19 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Sun Jun 13 19:35:19 2010 -0700"
      },
      "message": "Fix include paths.\n\nChange-Id: Ifda45688f9f02710a74d5d7a7d902bacf1441e2e\n"
    },
    {
      "commit": "46b9ac0ae2162309774a7478cd9d4e578747bfc2",
      "tree": "46ad021a41e25ca9f1250b709a29b724dc6b504d",
      "parents": [
        "f62c57d684b83df7d2817db976c0afdb500ae92a"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Apr 22 18:58:52 2010 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Sun Jun 13 17:42:16 2010 -0700"
      },
      "message": "Native input dispatch rewrite work in progress.\n\nThe old dispatch mechanism has been left in place and continues to\nbe used by default for now.  To enable native input dispatch,\nedit the ENABLE_NATIVE_DISPATCH constant in WindowManagerPolicy.\n\nIncludes part of the new input event NDK API.  Some details TBD.\n\nTo wire up input dispatch, as the ViewRoot adds a window to the\nwindow session it receives an InputChannel object as an output\nargument.  The InputChannel encapsulates the file descriptors for a\nshared memory region and two pipe end-points.  The ViewRoot then\nprovides the InputChannel to the InputQueue.  Behind the\nscenes, InputQueue simply attaches handlers to the native PollLoop object\nthat underlies the MessageQueue.  This way MessageQueue doesn\u0027t need\nto know anything about input dispatch per-se, it just exposes (in native\ncode) a PollLoop that other components can use to monitor file descriptor\nstate changes.\n\nThere can be zero or more targets for any given input event.  Each\ninput target is specified by its input channel and some parameters\nincluding flags, an X/Y coordinate offset, and the dispatch timeout.\nAn input target can request either synchronous dispatch (for foreground apps)\nor asynchronous dispatch (fire-and-forget for wallpapers and \"outside\"\ntargets).  Currently, finding the appropriate input targets for an event\nrequires a call back into the WindowManagerServer from native code.\nIn the future this will be refactored to avoid most of these callbacks\nexcept as required to handle pending focus transitions.\n\nEnd-to-end event dispatch mostly works!\n\nTo do: event injection, rate limiting, ANRs, testing, optimization, etc.\n\nChange-Id: I8c36b2b9e0a2d27392040ecda0f51b636456de25\n"
    },
    {
      "commit": "b8bb78f54b48868465a9d69d65fda08524ab5ae1",
      "tree": "fadbdd8dd989ce2b3b29cd780fabc91d7f98dd09",
      "parents": [
        "2fd73a452268d2acb6e72a1d23a422085ed3c510"
      ],
      "author": {
        "name": "Chih-Chung Chang",
        "email": "chihchung@google.com",
        "time": "Thu Jun 10 13:32:16 2010 +0800"
      },
      "committer": {
        "name": "Chih-Chung Chang",
        "email": "chihchung@google.com",
        "time": "Fri Jun 11 16:47:33 2010 +0800"
      },
      "message": "Change camera interface to support multiple cameras.\n\nChange-Id: Ie88fe706d2278acf762eca87780de349434778a4\n"
    },
    {
      "commit": "62a2aa01528e70c63aef60a6f48929da5a06761a",
      "tree": "605561d8fddc392de300c72b5acd95a410f535ae",
      "parents": [
        "66b89a62aa6d5599ad4d11d891b5028587d4c6be"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Thu Jun 10 11:14:26 2010 -0700"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Thu Jun 10 11:25:51 2010 -0700"
      },
      "message": "Fix String8 to free its memory only after assignment operations based on pointers are finished in case that pointer referred to the string\u0027s original contents.\n\nChange-Id: I6961f3cf10ba3b728579ea63262db750a4cf8577\n"
    },
    {
      "commit": "5e14010b1fc066dfcbc0a577d59492687c99667d",
      "tree": "221d256bf258e97b3e7e7c953a679a9104792374",
      "parents": [
        "1debc66521f699bbf0a8eb80cababaef8bc63607"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Jun 08 19:54:15 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Jun 08 20:10:02 2010 -0700"
      },
      "message": "allow re-targetting of surfaces\n\nSurfaces can now be parcelized and sent to remote\nprocesses. When a surface crosses a process\nboundary, it looses its connection with the\ncurrent process and gets attached to the new one.\n\nChange-Id: I39c7b055bcd3ea1162ef2718d3d4b866bf7c81c0\n"
    },
    {
      "commit": "1debc66521f699bbf0a8eb80cababaef8bc63607",
      "tree": "718d23f3d018d6d30c2428cd121464cab6ff85bc",
      "parents": [
        "c44c4742e7d79f6fe846f807bb26ad8b3cd16f68"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Jun 08 15:40:56 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Jun 08 15:40:56 2010 -0700"
      },
      "message": "fix [2751143] Device crashes when in a text box for too long"
    },
    {
      "commit": "fae5cb2b356a1fef172b43066180a7ab4c32dbac",
      "tree": "55e73b81c3a666ab1165603238e7ca43495ff99c",
      "parents": [
        "7623da435e45c7c03ef6a00a43675deb6645f070"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Jun 04 18:26:32 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Jun 04 18:57:41 2010 -0700"
      },
      "message": "optimize Surface.readFromParcel()\n\nthis is called for each relayout() and used to create a full Surface (cpp)\nwhich in turn did some heavy work (including an IPC with surfaceflinger),\nmost of the time to destroy it immediatelly when the returned surface\n(the one in the parcel) was the same.\n\nwe now more intelligentely read from the parcel and construct the new\nobject only if needed.\n\nChange-Id: Idfd40d9ac96ffc6d4ae5fd99bcc0773e131e2267\n"
    },
    {
      "commit": "7623da435e45c7c03ef6a00a43675deb6645f070",
      "tree": "b789cdc5e60ccc4474bd319b1dbb4e1a7e3f3858",
      "parents": [
        "593c05ce7bcf7b6d94bd8c50da2b818cf05116b1"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Jun 01 15:12:58 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Jun 04 18:57:41 2010 -0700"
      },
      "message": "split surface management from surface\u0027s buffers management\n\nChange-Id: If3c5655d1231f8f0c49ba68f972b1b20c93b3f87\n"
    },
    {
      "commit": "593c05ce7bcf7b6d94bd8c50da2b818cf05116b1",
      "tree": "7dd70eab8cf6b3dc140e5eedbe01164349d987de",
      "parents": [
        "66236db38dbaae229a86005309b9f7c74eabc998"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Jun 02 23:28:45 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Jun 04 18:57:40 2010 -0700"
      },
      "message": "clean-up client management.\n\nsimplified things a lot, the biggest change is that the concept\nof \"ClientID\" is now gone, instead we simply use references.\n\nChange-Id: Icbc57f80865884aa5f35ad0d0a0db26f19f9f7ce\n"
    },
    {
      "commit": "cefb01abbfdb175e0c4b298126bcb4a98bf6371f",
      "tree": "fdf01eb997e5a8053bd8527ba7ad6994b8e8776a",
      "parents": [
        "2ea200c5a7c13e6a7e8bfdb04e96066a38b19240",
        "8aba232dbce3d7a1e3efd5fa41c37810de79d0ea"
      ],
      "author": {
        "name": "Wu-cheng Li",
        "email": "wuchengli@google.com",
        "time": "Fri Jun 04 03:38:25 2010 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jun 04 03:38:25 2010 -0700"
      },
      "message": "Merge \"Add KEY_SUPPORTED_METERING_MODES and fix some typos.\" into kraken"
    },
    {
      "commit": "8aba232dbce3d7a1e3efd5fa41c37810de79d0ea",
      "tree": "895d4ec947f9974da6bd1152ea393893863e9239",
      "parents": [
        "5f5df382e5b87f02399f21c916e0ebb6c48c759d"
      ],
      "author": {
        "name": "Wu-cheng Li",
        "email": "wuchengli@google.com",
        "time": "Fri Jun 04 14:18:32 2010 +0800"
      },
      "committer": {
        "name": "Wu-cheng Li",
        "email": "wuchengli@google.com",
        "time": "Fri Jun 04 17:18:17 2010 +0800"
      },
      "message": "Add KEY_SUPPORTED_METERING_MODES and fix some typos.\n\nbug:2737111\nChange-Id: I108ae7057786921bf99385ad66dbc1f02d6a1448\n"
    },
    {
      "commit": "2ea200c5a7c13e6a7e8bfdb04e96066a38b19240",
      "tree": "4cce0e6e3096c7cf4c22fe668687b49e6bfc3c50",
      "parents": [
        "5f5df382e5b87f02399f21c916e0ebb6c48c759d",
        "65b65459e6ac59f8a257009df8014467ae0838ee"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri Jun 04 00:14:46 2010 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jun 04 00:14:46 2010 -0700"
      },
      "message": "Merge \"Issue 2667801: [Audio Effect Framework] AudioFlinger, AudioMixer AudioTrack modifications.\" into kraken"
    },
    {
      "commit": "5f5df382e5b87f02399f21c916e0ebb6c48c759d",
      "tree": "17291c68df4f7836674bf9a0f53753261795a83f",
      "parents": [
        "266b74e8759e76fedec60ec1ffa88cfbd86cc91d",
        "f7f6333831e7b991d92abeddfbd46c2884afa405"
      ],
      "author": {
        "name": "Wu-cheng Li",
        "email": "wuchengli@google.com",
        "time": "Thu Jun 03 22:32:05 2010 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jun 03 22:32:05 2010 -0700"
      },
      "message": "Merge \"Add camera metering mode API.\" into kraken"
    },
    {
      "commit": "65b65459e6ac59f8a257009df8014467ae0838ee",
      "tree": "5f9ba01afd1e0ffe85f4b700c1a16f9b998c807d",
      "parents": [
        "501b2b400a15a43849ff84c5da4e68d23ed726cf"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Tue Jun 01 23:49:17 2010 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Thu Jun 03 03:21:53 2010 -0700"
      },
      "message": "Issue 2667801: [Audio Effect Framework] AudioFlinger, AudioMixer AudioTrack modifications.\n\nFirst drop of audio framework modifications for audio effects support.\n\n- AudioTrack/AudioRecord:\nAdded support for auxiliary effects in AudioTrack\nAdded support for audio sessions\nFixed left right channel inversion in setVolume()\n\n- IAudioFlinger:\nAdded interface methods for effect enumeraiton and instantiation\nAdded support for audio sessions.\n\n- IAudioTrack:\nAdded method to attach auxiliary effect.\n\n- AudioFlinger\nCreated new classes to control effect engines in effect library and manage effect connections to tracks or\noutput mix:\n  EffectModule: wrapper object controlling the effect engine implementation in the effect library. There\n\tis one EffectModule per instance of an effect in a given audio session\n  EffectChain: group of effects associated to one audio session. There is one EffectChain per audio session.\n\tEffectChain for session 0 is for output mix effects, other chains are attached to audio tracks\n\twith same session ID. Each chain contains a variable number of EffectModules\n  EffectHandle: implements the IEffect interface. There is one EffectHandle object for each application\n\tcontrolling (or using) an effect module. THe EffectModule maintians a list of EffectHandles.\n\nAdded support for effect modules and effect chains creation in PlaybackThread.\nmodified mixer thread loop to allow track volume control by effect modules and call effect processing.\n\n-AudioMixer\nEach track now specifies its output buffer used by mixer for accumulation\nModified mixer process functions to process tracks by groups of tracks with same buffer\nModified track process functions to support accumulation to auxiliary channel\n\nChange-Id: I26d5f7c9e070a89bdd383e1a659f8b7ca150379c\n"
    },
    {
      "commit": "f7f6333831e7b991d92abeddfbd46c2884afa405",
      "tree": "bbe6fb84932164301709ddde62af18ad95ad405e",
      "parents": [
        "00e21f8eb57a7ae2c19516aa0290ab4fb5f251c2"
      ],
      "author": {
        "name": "Wu-cheng Li",
        "email": "wuchengli@google.com",
        "time": "Thu Jun 03 16:34:18 2010 +0800"
      },
      "committer": {
        "name": "Wu-cheng Li",
        "email": "wuchengli@google.com",
        "time": "Thu Jun 03 16:34:18 2010 +0800"
      },
      "message": "Add camera metering mode API.\n\nbug:2737111\nChange-Id: Ie986fee56ebeaaed2d2efb757701dfe3ffdec8d8\n"
    },
    {
      "commit": "a0612e41dd5e6e9ec0a89e8e7437a3dafec0ee10",
      "tree": "f3ec2ef02455cab9e515b5fe0d8dbec32e7efa87",
      "parents": [
        "1e1e292edcb75fdef93fe63b12355bfef642e5bc"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Apr 12 15:34:55 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Jun 01 15:57:44 2010 -0700"
      },
      "message": "fix a bug where fading in/out of opaque 32-bits windows wasn\u0027t working\n\nopaque 32-bits windows are now allocated as RGBX_8888 buffers and\nSurfaceFlinger always uses GL_MODULATE instead of trying to\noptimize to GL_REPLACE when possible (makes no sense on\nh/w accelerated GL).\n\nwe still have a small hack for devices that don\u0027t support\nRGBX_8888 in their gralloc implementation where we revert to\nRGBA_8888.\n"
    },
    {
      "commit": "770492cb2b19f6a36ad748cd05fbedfbb9a67dfa",
      "tree": "3c87a789492e52b3c26b1de9608f42690b86c2cd",
      "parents": [
        "cdfd5fe2c89a30a31f9de5a5481e8997f014a89b"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri May 28 14:22:23 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri May 28 17:19:16 2010 -0700"
      },
      "message": "more clean-up in preparation of bigger changes\n\nthe most important change here is the renaming of\nISurfaceFlingerClient to ISurfaceComposerClient\n\nChange-Id: I94e18b0417f50e06f21377446639c61f65f959b3\n"
    },
    {
      "commit": "198975bb010531e6e21f35582fb7040960364473",
      "tree": "ce4cb91c18415d9d5fec44f88828c138c2d3160e",
      "parents": [
        "64ff6ab4df0fa7660584b2a2bfe9a003ca481ac5",
        "d2c2929c94bec68741b85f4174e11307fb65157f"
      ],
      "author": {
        "name": "Wu-cheng Li",
        "email": "wuchengli@google.com",
        "time": "Fri May 28 04:34:13 2010 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri May 28 04:34:13 2010 -0700"
      },
      "message": "Merge \"Add video frame parameter.\" into kraken"
    },
    {
      "commit": "d2c2929c94bec68741b85f4174e11307fb65157f",
      "tree": "510d29a3a37649ae4ff7111450404b6c041ee5f1",
      "parents": [
        "df0364de6f7be68e003729c262fe2731b82ae10e"
      ],
      "author": {
        "name": "Wu-cheng Li",
        "email": "wuchengli@google.com",
        "time": "Fri May 28 17:32:41 2010 +0800"
      },
      "committer": {
        "name": "Wu-cheng Li",
        "email": "wuchengli@google.com",
        "time": "Fri May 28 17:32:41 2010 +0800"
      },
      "message": "Add video frame parameter.\n\nThe image format of preview frames and video frames may be different.\nWe need another parameter for video frame format.\n\nbug:2720893\nChange-Id: I966a31b0ce8cab25cdde65db65a18c8cbe9c7bd6\n"
    },
    {
      "commit": "c7b388c2b3a9558c85e3730a7c6b261392ce493e",
      "tree": "38725561e04c5e754c0c3b2a240a507ea98f6cf4",
      "parents": [
        "df0364de6f7be68e003729c262fe2731b82ae10e"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu May 27 19:41:15 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu May 27 19:55:43 2010 -0700"
      },
      "message": "more clean-up of Surfaceflinger\u0027s client management\n\nSurfaceComposerClient now only exist on the WindowManager side,\nthe client side uses the new SurfaceClient class, which only\nexposes what a client needs.\n\nalso instead of keeping mappings from IBinder to SurfaceComposerClients\nwe have a SurfaceClient per Surface (referring to the same IBinder), this\nis made possible by the fact that SurfaceClient is very light.\n\nChange-Id: I6a1f7015424f07871632a25ed6a502c55abfcfa6\n"
    },
    {
      "commit": "0d3c0063aa998bc32e7f22114e38a0f8df61ad65",
      "tree": "81c52a94a3a163d92468078e58d06fbcb134faca",
      "parents": [
        "7d1508b854dff2b9b3469b5eef7e2123eada1cd7"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed May 26 22:26:12 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed May 26 22:26:12 2010 -0700"
      },
      "message": "minor clean-up GLclampx -\u003e GLclampf"
    },
    {
      "commit": "7d1508b854dff2b9b3469b5eef7e2123eada1cd7",
      "tree": "7929ad907515ffa138023614a2163d219e1f4dcc",
      "parents": [
        "923770333574fd71674781a9a62f40e8acaf5ef1"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed May 26 22:19:19 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed May 26 22:19:19 2010 -0700"
      },
      "message": "clean-up dead-code"
    },
    {
      "commit": "923770333574fd71674781a9a62f40e8acaf5ef1",
      "tree": "f7ac29b5c4b207305d9c3972d763009a20f8cb3f",
      "parents": [
        "663baddda9de01d0a7eccffaeb7ce39899e95146"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed May 26 22:08:52 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed May 26 22:10:04 2010 -0700"
      },
      "message": "Make sure to use filtering while in fixed-size mode"
    },
    {
      "commit": "663baddda9de01d0a7eccffaeb7ce39899e95146",
      "tree": "31f08ccadbdb385ab1920e0ced067f21d49f5d78",
      "parents": [
        "64f7549b0e0e2b77e698ae88389465342d3f28d7"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed May 26 21:31:09 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed May 26 21:31:09 2010 -0700"
      },
      "message": "oopsie. forgot to displatch SET_BUFFERS_GEOMETRY\n"
    },
    {
      "commit": "2ce19af45bf4c5e311a73df474ffe88d96d118c5",
      "tree": "3df75d3e86308a618a3ddc47d301731af30769a8",
      "parents": [
        "d6ddcb7f00a7af95b452233d965b922632f78f21"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue May 25 17:51:34 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue May 25 17:51:34 2010 -0700"
      },
      "message": "fix [2712278] The preview buffer left some black borders in left and bottom edges\n\nwe were incorrectly flagging push_buffer surfaces as invalid\n\nChange-Id: I4dfd4ffbbe8a71f7e23e835db8d71966416c29bb\n"
    },
    {
      "commit": "2be352adab7f11646fda7c0240e496bbb37f7bd1",
      "tree": "e7a168546a256cd4f7c57261690796cf527ae8a2",
      "parents": [
        "57d89899c9fb978a1c097f298aa94c5db1f61bb6"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri May 21 17:24:35 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon May 24 18:26:01 2010 -0700"
      },
      "message": "added the notion of fixed-size buffers\n\nthe new native_window_set_buffers_geometry allows\nto specify a size and format for all buffers to be\ndequeued. the buffer will be scalled to the window\u0027s\nsize.\n\nChange-Id: I2c378b85c88d29cdd827a5f319d5c704d79ba381\n"
    },
    {
      "commit": "57d89899c9fb978a1c097f298aa94c5db1f61bb6",
      "tree": "85e1c021f67a2fdb5ed33547872a769b7d55fba6",
      "parents": [
        "884372842bac11f854aa42a9c4de05a3a22cb11f"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri May 21 14:51:33 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon May 24 13:47:24 2010 -0700"
      },
      "message": "fix a bug when reallocating a window\u0027s buffers is needed\n\nwe need to mark the buffers that need to be reallocated,\nNOT the buffer\u0027s indices.\n\nChange-Id: I809e2e1b03b56c4d2ab983c25523dae99aa1da74\n"
    },
    {
      "commit": "25f0bdaea6d1a34aae3faf6688cad4fbebcca969",
      "tree": "8600372f2cb6f54254d2c7e0f7018c039e07c4b6",
      "parents": [
        "4f5f2786b2c850ad0d772c7707ddbe55c3b7adf6"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri May 21 14:19:50 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri May 21 14:34:32 2010 -0700"
      },
      "message": "added native_window_set_buffer_count()\n\nthis method can be used to change the number of buffers\nassociated to a native window. the default is two.\n\nChange-Id: I608b959e6b29d77f95edb23c31dc9b099a758f2f\n"
    },
    {
      "commit": "898c4c91be8e11b6d5388c623ae80f12ac25fd27",
      "tree": "8f59a103707c25a05bcf4fa074e944e766c15503",
      "parents": [
        "66c46a6bd15422fe898d533d1350d6df748dd95b"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue May 18 17:06:55 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu May 20 18:00:42 2010 -0700"
      },
      "message": "fix the threading issue for setBuffercount()\n\nthis change introduces R/W locks in the right places.\non the server-side, it guarantees that setBufferCount()\nis synchronized with \"retire\" and \"resize\".\non the client-side, it guarantees that setBufferCount()\nis synchronized with \"dequeue\", \"lockbuffer\" and \"queue\"\n"
    },
    {
      "commit": "35b1a93d1925fbae83c654e627647b66539b8d90",
      "tree": "a6f277c93bbb186bc1cf797d62d72c3f56551172",
      "parents": [
        "662be102ee3a89645ca60650a6094003f35894e0"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon May 17 20:08:22 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon May 17 20:08:22 2010 -0700"
      },
      "message": "add a few tests to SharedBufferStackTest\n\nChange-Id: I1c46c07aa1483aee4d4ebd8745638a2c462cc1b3\n"
    },
    {
      "commit": "662be102ee3a89645ca60650a6094003f35894e0",
      "tree": "1476092bbc6c60e1e588ad767b85e15e4b48bfc2",
      "parents": [
        "be6c8fc4d5f8144cbfc715da0d2ef3c704db279d"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon May 17 18:56:10 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon May 17 18:56:10 2010 -0700"
      },
      "message": "improve SharedBufferStack test\n\nChange-Id: I32683bfe0916918757280db89113595867acd5a7\n"
    },
    {
      "commit": "be6c8fc4d5f8144cbfc715da0d2ef3c704db279d",
      "tree": "94899c9146765d814bf7bb81e1e7a2954ad24499",
      "parents": [
        "cd30f4f849bb215509bd2645726048271b5db01e"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon May 17 18:54:19 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon May 17 18:54:19 2010 -0700"
      },
      "message": "fix a bug where queueBuffer() would fail after the SharedbufferStack is resized\n\nChange-Id: I12bf13a62018ce1349bab7be0b0cad7fad13fee8\n"
    },
    {
      "commit": "cd30f4f849bb215509bd2645726048271b5db01e",
      "tree": "6182174b30879d9bbee5532faa2b098b9c81715c",
      "parents": [
        "c5859388bd6c666a83017869bf8a9935defe0bd0"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon May 17 17:27:26 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon May 17 17:27:26 2010 -0700"
      },
      "message": "fix some bugs in SharedBufferStack::resize\n\nadded buffers should now be labeled properly.\n\nChange-Id: I28aa753fbe89ab89134e7753575319478934c7fa\n"
    },
    {
      "commit": "eb8f850d0b7e53956e917fd9645f808c1a09bc88",
      "tree": "07b5194b348dcd40b46fbf049066e45320099fdb",
      "parents": [
        "533844d9688f7c9269372f97db17c9bc4d19c04b"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri May 14 03:26:45 2010 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Mon May 17 02:23:47 2010 -0700"
      },
      "message": "Fix issue 2553359: Pandora does not work well with Passion deskdock / Cardock.\n\nThe problem is due to a too big difference between the buffer size used at the hardware interface and at the A2DP interface.\nWhen no resampling occurs we don\u0027t notice problems but the timing is very tight. As soon as resampling is activated, the AudioTrack underruns.\nThis is because the AudioTrack buffers are not resized when moving the AudioTrack from hardware to A2DP output.\nThe AudioTrack buffers are calculated based on a hardware output buffer size of 3072 bytes. Which is much less than the A2DP output buffer size (10240).\n\nThe solution consists in creating new tracks with new buffers in AudioFlinger when the A2DP output is opened\ninstead of just transfering active tracks from hardware output mixer thread to the new A2DP output mixer thread.\nTo avoid synchronization issues between mixer threads and client processes, this is done by invalidating tracks\nby setting a flag in their control block and having AudioTrack release the handle on this track (IAudioTrack)\nand create a new IAudioTrack when this flag is detected next time obtainBuffer() or start() is executed.\n\nAudioFlinger modifications:\n- invalidate the tracks when setStreamOutput() is called\n- make sure that notifications of output opening/closing and change of stream type to output mapping are sent synchronously to client process.\nThis is necessary so that AudioSystem has the new stream to output mapping when the AudioTrack detects the invalidate flag in the client process.\nPreviously their were sent when the corresponding thread loop was executed.\n\nAudioTrack modifications:\n- move frame count calculation and verification from set() to createTrack() so that is is updated every time a new IAudioTrack is created.\n- detect track invalidate flag in obtainBuffer() and start() and create a new IAudioTrack.\n\nAudioTrackShared modifications\n- group all flags (out, flowControlFlag, forceReady...) into a single bit filed to save space.\n\nChange-Id: I9ac26b6192230627d35084e1449640caaf7d56ee\n"
    },
    {
      "commit": "ae7ca4c32cb37ea82e77ad1462fbfcd4d6dfabd3",
      "tree": "e76e4f72db70f1d1291f6fa0ae334545906617c5",
      "parents": [
        "e339c5edbebedf446581f18ad70214007309bf4b"
      ],
      "author": {
        "name": "Wu-cheng Li",
        "email": "wuchengli@google.com",
        "time": "Sat May 15 13:05:04 2010 +0800"
      },
      "committer": {
        "name": "Wu-cheng Li",
        "email": "wuchengli@google.com",
        "time": "Sat May 15 13:06:19 2010 +0800"
      },
      "message": "Fix build error.\n\nOriginal name INFINITY conflicts with the macro in math.h.\n\nChange-Id: I9845ed84fca17813dd971239a902cc1e0bad1e3e\n"
    },
    {
      "commit": "e339c5edbebedf446581f18ad70214007309bf4b",
      "tree": "7d03e881cb3e1300aef948eafb85396a58d38e1c",
      "parents": [
        "aef87aa90cf3a6cf9098477683b07994697c45fe"
      ],
      "author": {
        "name": "Wu-cheng Li",
        "email": "wuchengli@google.com",
        "time": "Thu May 13 19:31:02 2010 +0800"
      },
      "committer": {
        "name": "Wu-cheng Li",
        "email": "wuchengli@google.com",
        "time": "Sat May 15 12:40:54 2010 +0800"
      },
      "message": "Add camera focus distances API.\n\nApplications can use this API to estimate the distance\nbetween the subject and the camera.\n\nbug:1955650\nChange-Id: Ie6c8ea4971759cab6c9bcdda2c5ceb5925791c27\n"
    },
    {
      "commit": "4606d5dd95b3dcf3a874f54e6d3d8d1ee95fcdca",
      "tree": "842125fd1c897093f236329f2407381fc657091b",
      "parents": [
        "5d75a181884ad8dbcdf238af422e5c38467b4410",
        "51c66aa4ce2797e21e880824e08de3b1228b3b0a"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri May 14 18:35:34 2010 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri May 14 18:35:34 2010 -0700"
      },
      "message": "Merge \"fix uninitialized variable in DisplayHardware\" into kraken"
    },
    {
      "commit": "51c66aa4ce2797e21e880824e08de3b1228b3b0a",
      "tree": "aa072b9a1cee264d661fc1e6c75fbe1f0f2ed624",
      "parents": [
        "d95266c6a8f059770b1799958530156a2f537468"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri May 14 18:33:30 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri May 14 18:33:30 2010 -0700"
      },
      "message": "fix uninitialized variable in DisplayHardware\n\nthis fixes the issue where the display is all messed-up sometimes.\n\nChange-Id: I20be91b5166bfff0c6d353a777351842c9df8e95\n"
    },
    {
      "commit": "bfb776acf20652801b88a53f362cb4e0ac517515",
      "tree": "f48b9d737940bbef0a0419ff8d32ae94e3fa80eb",
      "parents": [
        "7450c02a35d7c1f8580f906d6f1c1a11bc5c4fd0",
        "ce2cbe4c9605bfc4843968ff6e9746d23643f031"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Fri May 14 15:28:09 2010 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri May 14 15:28:09 2010 -0700"
      },
      "message": "Merge \"Get rid of warnings when compiled with -Wformat-security\" into kraken"
    },
    {
      "commit": "7450c02a35d7c1f8580f906d6f1c1a11bc5c4fd0",
      "tree": "220d07ff6bd81691db9f8089e2f44c520845d9b5",
      "parents": [
        "b42bc06675174d58dabc5efc032cfc43dac10393",
        "900b6157f5dee2ed7b2c73cf320b2baf293230ff"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Fri May 14 15:12:17 2010 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri May 14 15:12:17 2010 -0700"
      },
      "message": "am 900b6157: merge from open-source master\n\nMerge commit \u0027900b6157f5dee2ed7b2c73cf320b2baf293230ff\u0027 into kraken\n\n* commit \u0027900b6157f5dee2ed7b2c73cf320b2baf293230ff\u0027:\n  Only hold a weak pointer on SurfaceComposerClients\n"
    },
    {
      "commit": "900b6157f5dee2ed7b2c73cf320b2baf293230ff",
      "tree": "15fabaeae78d67b8ee40afa76c5fabff20582d2b",
      "parents": [
        "fb580943133d3e9ad3e342b8038726b04686f283",
        "5b9fb5ab7ee81fc9b22f9aaea478db65e9b56c43"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Fri May 14 15:04:52 2010 -0700"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Fri May 14 15:04:52 2010 -0700"
      },
      "message": "merge from open-source master\n\nChange-Id: I0249c6d796b35af9ba08cbccd463a1f5cf779ecd\n"
    },
    {
      "commit": "29f5d9b61da0f496fc243edfc838f09a9b5c6eaf",
      "tree": "f6e4bbf707f7a79ad77cda3f471336a6babe4f78",
      "parents": [
        "6c034325a856f4cfb1e8b5bc97adbc7f9dffd0a2",
        "553447b8ff949618f299bba38ef04c2b6740f1d3"
      ],
      "author": {
        "name": "Chih-Chung Chang",
        "email": "chihchung@google.com",
        "time": "Fri May 14 12:05:06 2010 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri May 14 12:05:06 2010 -0700"
      },
      "message": "Merge \"Fix deadlock if the last reference of ICameraClient is removed in ICamera::connect()\" into kraken"
    },
    {
      "commit": "b0a0147f344a2d26d86be2b1bdf5bfde50ef86c2",
      "tree": "8820f5f5979f699ef5903fe65f4fe3541bff5371",
      "parents": [
        "bfcbd9a9e1bc3a8d721e906e4c621f85104c7d93"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri May 14 05:45:46 2010 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Fri May 14 05:45:46 2010 -0700"
      },
      "message": "AudioFlinger: rename variables to clarify reference to track channel count or channel mask\n\nSome variables and structure members should be renamed to reflect the fact that they contain the\nnumber of channels in a track (channel count) or the actual channels used by a track (channel mask).\nEspecially member \"channels\" of track control block (struct audio_track_cblk_t) is actually the\nnumber of channels (channels count).\n\nChange-Id: I220c8dede9fc00c8a5693389e790073b6ed307b8\n"
    },
    {
      "commit": "553447b8ff949618f299bba38ef04c2b6740f1d3",
      "tree": "0b9f8777a5f5253525318cbe58514c3103117571",
      "parents": [
        "ffd104a903651ca1c64e662df8465c9490da4144"
      ],
      "author": {
        "name": "Chih-Chung Chang",
        "email": "chihchung@google.com",
        "time": "Thu May 13 15:14:24 2010 +0800"
      },
      "committer": {
        "name": "Chih-Chung Chang",
        "email": "chihchung@google.com",
        "time": "Fri May 14 11:34:20 2010 +0800"
      },
      "message": "Fix deadlock if the last reference of ICameraClient is removed in\nICamera::connect()\n\nChange-Id: I34ab3e4f07435c62168175e9bb159022c8fb99f4\n"
    },
    {
      "commit": "ce2cbe4c9605bfc4843968ff6e9746d23643f031",
      "tree": "9c9fea0a2960c9975b48bf45d3f95dd7fde364b1",
      "parents": [
        "8b518577ceba9746fe5566274bd9deb09d450779"
      ],
      "author": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Thu May 13 14:46:27 2010 -0700"
      },
      "committer": {
        "name": "Nick Kralevich",
        "email": "nnk@google.com",
        "time": "Thu May 13 14:46:27 2010 -0700"
      },
      "message": "Get rid of warnings when compiled with -Wformat-security\n\nChange-Id: I63c3bf786bbe7a0276624e71a4ba80c4a9aaa4bb\n"
    },
    {
      "commit": "ca20104a3ab0c10d570080e3d3b4ff94fedf60ee",
      "tree": "f6320d88fe69d960de3c53dfc3e8e86ffcd49cb3",
      "parents": [
        "c247328dfd86f7967846ffceb5ef99405dd22ab0",
        "4f0f17d2f10ceb22c2e23b593bab434fc899ecb7"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed May 12 23:40:28 2010 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed May 12 23:40:28 2010 -0700"
      },
      "message": "Merge \"Fix issue 2678048: binder death detection in AudioFlinger is broken.\" into kraken"
    },
    {
      "commit": "c247328dfd86f7967846ffceb5ef99405dd22ab0",
      "tree": "c03fbe9f822918ebd89c961205bee688dd9ffa99",
      "parents": [
        "c195965893da2003a3da9936391c27db05d47dd8",
        "fc1246640f1ac7f562c6a05ab34d7847ff8cca05"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed May 12 23:21:42 2010 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed May 12 23:21:42 2010 -0700"
      },
      "message": "Merge \"Several fixes in AudioDumpInterface:\" into kraken"
    },
    {
      "commit": "2f0e6753d6c0d67e0e133105bf3fdc8596749412",
      "tree": "b3733f32dd6d0cb954db0c17c8b6d17ad2460b61",
      "parents": [
        "6a70cb8a3813a60b92618892188bc4e2f9e0ab2c",
        "59751dbf7d8f12aeb5c4c07719b7dbbf1f9b5d4b"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed May 12 17:36:46 2010 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed May 12 17:36:46 2010 -0700"
      },
      "message": "Merge \"SharedBufferStack now can grow up to 16 buffers.\" into kraken"
    },
    {
      "commit": "6a70cb8a3813a60b92618892188bc4e2f9e0ab2c",
      "tree": "92f3ef4bf2cda78827fa0df16f11f0d62cefc0df",
      "parents": [
        "ca64ed6a8114f08e153b065cf429d006ab210f2b",
        "9f2c4fd9a14ea79e4cbbd3ab8925794711a6411c"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed May 12 17:35:24 2010 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed May 12 17:35:24 2010 -0700"
      },
      "message": "Merge \"Refactor some code in surfaceflinger in preparation of upcoming changes\" into kraken"
    },
    {
      "commit": "ca64ed6a8114f08e153b065cf429d006ab210f2b",
      "tree": "18ae651222e0298b1e56809506fd1644e05c0ecc",
      "parents": [
        "8b518577ceba9746fe5566274bd9deb09d450779",
        "aca2ee8a7045e6b3d0399736d7d1adf7e1dbf825"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed May 12 17:35:12 2010 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed May 12 17:35:12 2010 -0700"
      },
      "message": "Merge \"remove the \"memcpy\" hack\" into kraken"
    },
    {
      "commit": "59751dbf7d8f12aeb5c4c07719b7dbbf1f9b5d4b",
      "tree": "a1f1d7119a8109d06cfc2f24b26284ff7627de7a",
      "parents": [
        "9f2c4fd9a14ea79e4cbbd3ab8925794711a6411c"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri May 07 15:58:44 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed May 12 17:28:20 2010 -0700"
      },
      "message": "SharedBufferStack now can grow up to 16 buffers.\n\nthere is a new resize() api, which currently only allows growing.\n\nChange-Id: Ia37b81b73be466d2491ffed7f3a23cd8e113c6fe\n"
    },
    {
      "commit": "9f2c4fd9a14ea79e4cbbd3ab8925794711a6411c",
      "tree": "59ef7201919232e3fe9b0bd044339608db459128",
      "parents": [
        "aca2ee8a7045e6b3d0399736d7d1adf7e1dbf825"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon May 10 20:06:11 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed May 12 17:26:22 2010 -0700"
      },
      "message": "Refactor some code in surfaceflinger in preparation of upcoming changes\n\nthe new TextureMagager class now handle texture creation and upload\nas well as EGL image creation and binding to GraphicBuffers. This is\nused indirectly by Layer and directly by LayerBuffer\n\nthe new BufferManager class handles the set of buffers used for a\nLayer (Surface), it abstracts how many buffer there is as well as\nthe use of EGLimage vs. regular texture ops (glTexImage2D).\n\nChange-Id: I2da1ddcf27758e6731400f6cc4e20bef35c0a39a\n"
    },
    {
      "commit": "aca2ee8a7045e6b3d0399736d7d1adf7e1dbf825",
      "tree": "fc96b9731e668b9a4c5fa54bcf9457a375be2f62",
      "parents": [
        "e46defea3ae15787aa6afbb91cb9dc83d4a074e4"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon May 10 20:10:10 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed May 12 15:44:26 2010 -0700"
      },
      "message": "remove the \"memcpy\" hack\n\nthis hack was used for gpus that don\u0027t support cached buffers\nfor s/w clients. currently we have no gpu with this issue.\nthis removes quite a bit of complexity.\n\nChange-Id: I72564669f124f92805030e61983711f61c76b6d9\n"
    },
    {
      "commit": "e8621534db97070cc40f729d1eb8074f2e69df9d",
      "tree": "54b8857783ced454e0b05b185753a652d4899b37",
      "parents": [
        "2a2174a7bdd7a557d3e17b78876b6887a02ebf80",
        "68246dcec17c245a434dad70b778960dc5c84af1"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed May 12 14:54:42 2010 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed May 12 14:54:42 2010 -0700"
      },
      "message": "Merge \"ZipUtilsRO rewrite based on Dalvik Zip rewrite\" into kraken"
    },
    {
      "commit": "fc1246640f1ac7f562c6a05ab34d7847ff8cca05",
      "tree": "a66df8aae9d213a51d5ebbc4d71d0732412c75e7",
      "parents": [
        "2cd841d485968181eb362338b9e66067767bd2eb"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed May 12 08:24:18 2010 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed May 12 08:31:04 2010 -0700"
      },
      "message": "Several fixes in AudioDumpInterface:\n\n- forward setMode() and getInputBufferSize() calls to underlying audio hardware interface.\n- Allow capture of more than one output stream (previous implementation was only capturing\nthe first output opened, namely the hardware output).\n- Allow capture of input streams: previous implementation was only simulating input streams\nwhen more than one was open at a time by reading from a file on SD card). Now the default\nbehavior is to capture PCM data read from input stream if it was successfully opened or\nsimulate capture otherwise.\n\nChange-Id: I7e2892b25e295fc3c19c7eb0f71bfaea5816b73a\n"
    },
    {
      "commit": "b3390135890800b9c5f0ab58ae3af80ab200dd8e",
      "tree": "8b150157548ef4b694037810a881142b8e1c85f9",
      "parents": [
        "2cd841d485968181eb362338b9e66067767bd2eb",
        "d8c33747afbe98e893e0569f3bf45b67a9e8e728"
      ],
      "author": {
        "name": "Wu-cheng Li",
        "email": "wuchengli@google.com",
        "time": "Wed May 12 07:55:00 2010 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed May 12 07:55:00 2010 -0700"
      },
      "message": "am d8c33747: am 78624e41: Add remove method in CameraParameters class.\n\nMerge commit \u0027d8c33747afbe98e893e0569f3bf45b67a9e8e728\u0027 into kraken\n\n* commit \u0027d8c33747afbe98e893e0569f3bf45b67a9e8e728\u0027:\n  Add remove method in CameraParameters class.\n"
    },
    {
      "commit": "4f0f17d2f10ceb22c2e23b593bab434fc899ecb7",
      "tree": "6c32547260c8783db72d1c8baf210adafbfda4c3",
      "parents": [
        "2cd841d485968181eb362338b9e66067767bd2eb"
      ],
      "author": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed May 12 02:05:53 2010 -0700"
      },
      "committer": {
        "name": "Eric Laurent",
        "email": "elaurent@google.com",
        "time": "Wed May 12 06:29:16 2010 -0700"
      },
      "message": "Fix issue 2678048: binder death detection in AudioFlinger is broken.\n\nThere is a bug in the way notification client list is managed when the client binder\ninterface dies that makes that the dead client is not removed from the list: the week\nreference passed by binderDied() cannot be promoted and compared to the strong\nreferences in the list.\n\nThe fix consists in creating a new NotificationClient class that implements the\nbinder DeathRecipient and holds a strong reference to the IAudioFlingerClient interface.\nA new instance of this class is created for each cient and a strong reference to this\nobject is added to the notification client list maintained by AudioFlinger.\nWhen binderDied() is called on this object, it is removed from the list preventing\nAudioFlinger to notify this client for further io changes.\n\nAlso added code to disable LifeVibes effects when the client that has enabled the\nenhancements dies.\n\nChange-Id: Icedc4af171759e9ae9a575d82d44784b4e8267e8\n"
    },
    {
      "commit": "68246dcec17c245a434dad70b778960dc5c84af1",
      "tree": "00aaacdfd3147c87c0d0d4761817a797e7af346a",
      "parents": [
        "dc3e26071399789c5966b9cd67180437f44eb9dd"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Thu Apr 22 18:28:29 2010 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Wed May 12 05:07:48 2010 -0700"
      },
      "message": "ZipUtilsRO rewrite based on Dalvik Zip rewrite\n\nChange the way zip archives are handled.  This is necessary to deal with\nvery large (~1GB) APK files, for which our current approach of mapping\nthe entire file falls over.\n\nWe now do the classic scavenger hunt for the End Of Central Directory\nmagic on a buffer of data read from the file, instead of a memory-mapped\nsection.  We use what we find to create a map that covers the Central\nDirectory only.\n\nIf the caller is interested in unpacking the file contents, we have to\ndo an additional file read to discover the size of the Local File Header\nsection so we can skip past it.\n\nThis is based on Change I745fb15abb in the dalvik tree. Both\nimplementations share a common ancestry, but the cost of unifying them\noutweighs the benefits of wrapping C calls.\n\nChange-Id: Iddacb50fe913917c2845708a530872d65fdbe620\n"
    },
    {
      "commit": "78624e41da166712aaa5ae47e4d3467337ac810a",
      "tree": "b7e1e6c75b4837d34bf29180974052167ac5d3f0",
      "parents": [
        "be65399baf23855094596e27c25763ff92e9e027"
      ],
      "author": {
        "name": "Wu-cheng Li",
        "email": "wuchengli@google.com",
        "time": "Tue May 11 12:11:56 2010 +0800"
      },
      "committer": {
        "name": "Wu-cheng Li",
        "email": "wuchengli@google.com",
        "time": "Tue May 11 12:54:14 2010 +0800"
      },
      "message": "Add remove method in CameraParameters class.\n\nbug:2672651\nChange-Id: I537c817b5ca6a3d925f22febe9a5769156354d00\n"
    },
    {
      "commit": "e1b2b3b0d23c964470badb7faa2569b0fa0f182e",
      "tree": "87b29cd56e384b392f0493fcb31b4ea3c98361d1",
      "parents": [
        "e88ae544e3e54958dfb6e866d4444f7f7b5d2d68",
        "ca099614841bc619f217dfa088da630a7eb1ab65"
      ],
      "author": {
        "name": "Wu-cheng Li",
        "email": "wuchengli@google.com",
        "time": "Mon May 10 20:04:14 2010 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon May 10 20:04:14 2010 -0700"
      },
      "message": "Merge \"Add continuous focus mode constant.\" into kraken"
    },
    {
      "commit": "4cfc21ecd914ac89a3160e5b19105b768546853f",
      "tree": "05a6ed40f42340bba2b1a5c33508fd0fc9843ac0",
      "parents": [
        "47de84c359ad46a7b4dd47eaac6af6ceb21b4772",
        "56aed6bde0c52658d2cb1207c0cfe8ba0a764c59"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon May 10 09:49:19 2010 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon May 10 09:49:19 2010 -0700"
      },
      "message": "am 56aed6bd: am c69775d6: Merge \"fix [2664345] Flash: Bad flicker at the end of a pinch zoom.\" into froyo\n\nMerge commit \u002756aed6bde0c52658d2cb1207c0cfe8ba0a764c59\u0027 into kraken\n\n* commit \u002756aed6bde0c52658d2cb1207c0cfe8ba0a764c59\u0027:\n  fix [2664345] Flash: Bad flicker at the end of a pinch zoom.\n"
    },
    {
      "commit": "ca099614841bc619f217dfa088da630a7eb1ab65",
      "tree": "7c804ef7da518a1193d481e325909e0240bff1c7",
      "parents": [
        "7768892c82f3b037c19c608c6d8309938fd5ca21"
      ],
      "author": {
        "name": "Wu-cheng Li",
        "email": "wuchengli@google.com",
        "time": "Thu May 06 16:47:30 2010 +0800"
      },
      "committer": {
        "name": "Wu-cheng Li",
        "email": "wuchengli@google.com",
        "time": "Mon May 10 15:14:56 2010 +0800"
      },
      "message": "Add continuous focus mode constant.\n\nbug:2612447\nChange-Id: I9bc3f5a47ad50722a265d50b1d28fb82a2253dc9\n"
    },
    {
      "commit": "e25cc656392d8866e163f78b60c7791455d0fb44",
      "tree": "d264b1c05e9edb2851c5ddc21a662617ea1d4ebc",
      "parents": [
        "a0a126a060b6b9ba51bc99f82ff4d322f779325e"
      ],
      "author": {
        "name": "Chih-Chung Chang",
        "email": "chihchung@google.com",
        "time": "Thu May 06 16:36:58 2010 +0800"
      },
      "committer": {
        "name": "Chih-Chung Chang",
        "email": "chihchung@google.com",
        "time": "Mon May 10 11:21:14 2010 +0800"
      },
      "message": "Support multiple cameras in framework.\n\nChange-Id: I081f0fbdca4b633715ea7c3b3d42f8662d27598a\n"
    },
    {
      "commit": "2df6f515675917a7a2812cf35faa5a1f47a6305f",
      "tree": "c4003c9d32f22adcc3e387a1aa9a80c5d3c90389",
      "parents": [
        "8a8658a5de261c2da72d431940877bd054bc9837"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu May 06 20:21:45 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu May 06 20:21:45 2010 -0700"
      },
      "message": "fix [2664345] Flash: Bad flicker at the end of a pinch zoom.\n\nthe window manger puts SurfaceViews up before they have been\nrendered into, because of that surfaceflinger doesn\u0027t have\nanything ready to draw for that surface when an udpate occurs\nand responds by filling the surface with black.\nWith this fix, we only fill those areas of the framebuffer\nthat would otherwise be undefined (no content at all).\n\nin the Flash case, the \"flash\" window is not drawn at all\nuntil it has some content, instead the underlaying browser\nwindow is shown.\n\nChange-Id: Ifb610f7f8c27b88edf83e09adc4803fc295c15a1\n"
    },
    {
      "commit": "a269d195d41ced934d2153fd81fa69ffe7854740",
      "tree": "cbfe9a5b063aa4aa860f4c2e3e26f1acde99780b",
      "parents": [
        "94886d9774d11b8bc93e56103d2f0ab61458ada0",
        "ca48c88c3d5733c4405a2fc4f7d9bb7fbba3d43f"
      ],
      "author": {
        "name": "Dan Egnor",
        "email": "egnor@google.com",
        "time": "Thu May 06 17:35:06 2010 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu May 06 17:35:06 2010 -0700"
      },
      "message": "am ca48c88c: am 8a8658a5: Merge \"Make static versions of libutils and libbinder.\" into froyo\n\nMerge commit \u0027ca48c88c3d5733c4405a2fc4f7d9bb7fbba3d43f\u0027 into kraken\n\n* commit \u0027ca48c88c3d5733c4405a2fc4f7d9bb7fbba3d43f\u0027:\n  Make static versions of libutils and libbinder.\n"
    },
    {
      "commit": "08b3d2e5ef01a5114424a871934dd9fc153352c0",
      "tree": "7768ecd2c0308f149cb8abb1746a0e7bc1bdae8b",
      "parents": [
        "df7ccbc8ff0d93a708a7fa1e57469d3f93ceda5c"
      ],
      "author": {
        "name": "Dan Egnor",
        "email": "egnor@google.com",
        "time": "Thu May 06 00:55:09 2010 -0700"
      },
      "committer": {
        "name": "Dan Egnor",
        "email": "egnor@google.com",
        "time": "Thu May 06 01:03:31 2010 -0700"
      },
      "message": "Make static versions of libutils and libbinder.\n\nFix some small static-initialization-order issues (and a static-\ninitializers-missing issue) that result from doing so.  The static\nlibraries don\u0027t actually get used for anything real at the moment --\nthey\u0027re used for perf tests of bug 2660235.\n\nBug: 2660235\nChange-Id: Iee2f38f79cc93b395e8d0a5a144ed92461f5ada0\n"
    },
    {
      "commit": "3b91e13ec7cdf7d607a221feda2eb0afc1e02050",
      "tree": "3aeeb3c837519b517f370add6b09cd60c64e9831",
      "parents": [
        "1bb8b670f99c1029def72ec408142077abd66cc4"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Apr 30 12:59:21 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Apr 30 13:05:36 2010 -0700"
      },
      "message": "make sure the server-side validates pointers/indices visible on the client side\n\nChange-Id: I604f58d3fcd2d09ec7998123c627401081345cd6\n"
    },
    {
      "commit": "1bb8b670f99c1029def72ec408142077abd66cc4",
      "tree": "5417838dd9cbf4b7fd21a4af4f06e1e18ad8b7e5",
      "parents": [
        "b205dabaa73843e1de8f4a27d15736a8dcd7cb2b",
        "bfe7f0b12165a1ad4a73b6d8f013cb9e115a3c60"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Apr 30 12:58:11 2010 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Apr 30 12:58:11 2010 -0700"
      },
      "message": "Merge \"Add support for enqueuing buffers in arbitrary order\" into kraken"
    },
    {
      "commit": "daedd81f089c296ac7355e9be47f1e4c6d645b04",
      "tree": "e8e1c014f2bbb43346478e006dedb89c02aabf94",
      "parents": [
        "1d0fa397ce6c7f654fc3086e6267e1c611dd19ea",
        "f590f702c8142fa5225a6d2ea6649515c1a2961f"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Apr 29 14:17:12 2010 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Apr 29 14:17:12 2010 -0700"
      },
      "message": "Merge \"cleanup. waitForCondition() now uses polymorphsim instead of templtes\" into kraken"
    },
    {
      "commit": "1d0fa397ce6c7f654fc3086e6267e1c611dd19ea",
      "tree": "39cd07fb59f20ecd68af68c64326b56325c56f13",
      "parents": [
        "9eef63113652dc0f0df92295a9fb0b0c71b92934",
        "c54c12713b98f308f848d2eb9ed7ef28ecc62c55"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Apr 29 14:16:14 2010 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Apr 29 14:16:14 2010 -0700"
      },
      "message": "Merge \"fix a race condition in undoDequeue(), where \u0027tail\u0027 could be computed incorrectly.\" into kraken"
    },
    {
      "commit": "14cee9f688c32d63d8521188e7422811629bb7c2",
      "tree": "16c2f2356519a2552bb3b7e2b1de6735793c4b1a",
      "parents": [
        "3fd6419fe542c4ecb8e838d1754a83ce8591b288"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Apr 23 17:51:26 2010 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Apr 28 16:51:52 2010 -0700"
      },
      "message": "New xlarge screen size.\n\nNot complete, only for experimentation at this point.\n\nThis includes a reworking of how screen size configurations are matched,\nso that if you are on a larger screen we can select configurations for\nsmaller screens if there aren\u0027t any exactly matching the current screen.\n\nThe screen size at which we switch to xlarge has been arbitrarily\nchosen; the compatibility behavior has not yet been defined.\n\nChange-Id: I1a33b3818eeb51a68fb72397568c39ab040a07f5\n"
    },
    {
      "commit": "bfe7f0b12165a1ad4a73b6d8f013cb9e115a3c60",
      "tree": "0d55794a9fa47b81998aae8c2abb6c7f0af8ee76",
      "parents": [
        "f590f702c8142fa5225a6d2ea6649515c1a2961f"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Apr 27 21:08:20 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Apr 28 16:12:54 2010 -0700"
      },
      "message": "Add support for enqueuing buffers in arbitrary order\n\nAlso added a very simple SharedBufferStack unit test.\n\nChange-Id: I253dbbe98a53c966b78d22d4d6dd59f8aefc8c40\n"
    },
    {
      "commit": "f590f702c8142fa5225a6d2ea6649515c1a2961f",
      "tree": "5165d6b04f34f8b90d36bbec3cc9949aa69f2fd6",
      "parents": [
        "c54c12713b98f308f848d2eb9ed7ef28ecc62c55"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Apr 27 16:41:19 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Apr 28 16:12:54 2010 -0700"
      },
      "message": "cleanup. waitForCondition() now uses polymorphsim instead of templtes\n\nthe reason for the above change is that waitForCondition() had become\nlarge over time, mainly to handle error cases, using inlines to\nevaluate the condition doesn\u0027t buys us much anymore while it increases\ncode size.\n\nChange-Id: I2595d850832628954b900ab8bb1796c863447bc7\n"
    },
    {
      "commit": "c54c12713b98f308f848d2eb9ed7ef28ecc62c55",
      "tree": "cee4c74a6421cd6b128ed3c2538c836469c6ba06",
      "parents": [
        "3fd6419fe542c4ecb8e838d1754a83ce8591b288"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Apr 27 16:11:38 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Apr 28 16:12:54 2010 -0700"
      },
      "message": "fix a race condition in undoDequeue(), where \u0027tail\u0027 could be computed incorrectly.\n\nin the undoDequeue() case, \u0027tail\u0027 was recalculated from \u0027available\u0027 and \u0027head\u0027\nhowever there was a race between this and retireAndLock(), which could cause\n\u0027tail\u0027 to be recalculated wrongly.\n\nthe interesting thing though is that retireAndLock() shouldn\u0027t have any impact\non the value of \u0027tail\u0027, which is client-side only attribute.\nwe fix the race by saving the value of \u0027tail\u0027 before dequeue() and restore it\nin the case of undoDequeue(), since we know it doesn\u0027t depend on retireAndLock().\n\nChange-Id: I4bcc4d16b6bc4dd93717ee739c603040b18295a0\n"
    },
    {
      "commit": "9bce8737f2f7581ade57445286aa150de051ff89",
      "tree": "19afa0f5dff514a7d555e94c8a81c05d6d9e111b",
      "parents": [
        "33c8e2b8e082555115e5f25735c7611fb80004fe"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Apr 20 17:55:49 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Apr 21 22:28:20 2010 -0700"
      },
      "message": "more surfaceflinger cleanups\n\nget rid of the \"fake rtti\" code, and use polymorphism instead.\nalso simplify how we log SF\u0027s state (using polymorphism)\n\nChange-Id: I2bae7c98de4dd207a3e2b00083fa3fde7c467922\n"
    },
    {
      "commit": "a8a0aa8b922c45fb4633f51610f264a19f9bd825",
      "tree": "367c5b004195a5dbdca46e5f4049b029d3e570c9",
      "parents": [
        "a8624186a6f7a29697bf5a112e46a80ca796c9c5"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Apr 21 15:24:11 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Apr 21 22:25:35 2010 -0700"
      },
      "message": "better fix for [2420565] Surface.lockCanvas() updates the dirty region too often\n\nChange-Id: I83438b40effd21538f1c74396dc665254b9d5ab6\n"
    },
    {
      "commit": "83512d4dfc06137bc2d9db0cb62644c54f41a771",
      "tree": "fe0ed7cbeafab7f97e7898d83c31928fbc53c00e",
      "parents": [
        "22caecda8a24c971972d78a112279c48f242d529"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Apr 20 21:55:40 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Apr 20 21:55:40 2010 -0700"
      },
      "message": "DO NOT MERGE fix [2557396] Adreno200: glDrawTexi() doesn\u0027t work with height \u003c\u003d 16\n\ndon\u0027t use glDrawTexi() anymore\n\nChange-Id: If71334de39114b0edce7771366f8d8dc26f6911e\n"
    },
    {
      "commit": "b834b38a28660a46357e652ac2524e9947a13ba5",
      "tree": "594d5bdd485fc0a93c0109ec87771339b0f96775",
      "parents": [
        "827cda456a469777c9da60b3aaf491049a999515",
        "16a86ee30b70aea8c254b836c708f54a608d25f3"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Apr 20 16:28:24 2010 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Apr 20 16:28:24 2010 -0700"
      },
      "message": "Merge \"added setCrop() to android_native_window_t\" into kraken"
    },
    {
      "commit": "827cda456a469777c9da60b3aaf491049a999515",
      "tree": "af2d5341665243f3e6b74679a0b4351a29fa244c",
      "parents": [
        "219dbb67a6cd4a64abd6e9ec2f376eb982a032d3",
        "6bb5ebaa0305a30b5037f6533b3b989e0437d26c"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "pixelflinger@google.com",
        "time": "Tue Apr 20 16:28:14 2010 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Apr 20 16:28:14 2010 -0700"
      },
      "message": "Merge \"add support for up to 16 buffers per surface\" into kraken"
    },
    {
      "commit": "360865e26c1e6078a1d8363e469fc0ef2e05a159",
      "tree": "5a2e8f0f414901e71efb6d365f9451b7f184b90a",
      "parents": [
        "0c64ff7568f0e1e37e300005ea0de3f21faa08e0",
        "e5c0a7b7810092a593ff386843927238c175bdbd"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Apr 20 15:59:57 2010 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Apr 20 15:59:57 2010 -0700"
      },
      "message": "Merge \"clean-up surfaceflinger a bit\" into kraken"
    },
    {
      "commit": "e5c0a7b7810092a593ff386843927238c175bdbd",
      "tree": "0118a020f4e43c025fbfaadb2d91460aa893894d",
      "parents": [
        "796c5fc6abf01b1864223156d578288657fe9923"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Apr 20 14:51:04 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Apr 20 15:58:36 2010 -0700"
      },
      "message": "clean-up surfaceflinger a bit\n\nget rid of the glDrawTexi path and use floating points instead of fixed point maths\n\nChange-Id: I3aa9ce2dc082f702160e605a16ba5fe987cdf087\n"
    },
    {
      "commit": "bb331f7333b643794062a7c9e9eac329699f6502",
      "tree": "cefff690248bc9a13ac6eddb583883beab1214da",
      "parents": [
        "796c5fc6abf01b1864223156d578288657fe9923",
        "0fabf2e81559106cb4aaf9e8ba45b0bed37d5eb8"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Tue Apr 20 14:48:15 2010 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Apr 20 14:48:15 2010 -0700"
      },
      "message": "am 0fabf2e8: am 8ccbd4ba: Merge \"Fix bug 2604132 40s skip after undocking In case of A2DP write errors, there is an overflow in the calculation of the sleep duration to simulate the timing of a successful write.\" into froyo\n\nMerge commit \u00270fabf2e81559106cb4aaf9e8ba45b0bed37d5eb8\u0027 into kraken\n\n* commit \u00270fabf2e81559106cb4aaf9e8ba45b0bed37d5eb8\u0027:\n  Fix bug 2604132 40s skip after undocking\n"
    },
    {
      "commit": "16a86ee30b70aea8c254b836c708f54a608d25f3",
      "tree": "9e30bb72015eeaedcc5c7d9f8303cebd2cc3e07f",
      "parents": [
        "6bb5ebaa0305a30b5037f6533b3b989e0437d26c"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Apr 15 18:48:26 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Apr 20 13:36:29 2010 -0700"
      },
      "message": "added setCrop() to android_native_window_t\n\nhooked up the new method up to Surface.cpp\nthe actual crop is not implemented in SF yet\n\nChange-Id: Ic6e313c98fd880f127a051a0ccc71808bd689751\n"
    },
    {
      "commit": "6bb5ebaa0305a30b5037f6533b3b989e0437d26c",
      "tree": "68048832ea2c2560a94bf506647e9fee0357f548",
      "parents": [
        "796c5fc6abf01b1864223156d578288657fe9923"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "pixelflinger@google.com",
        "time": "Mon Apr 05 16:21:53 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Apr 20 13:36:29 2010 -0700"
      },
      "message": "add support for up to 16 buffers per surface\n\nalso increase the dirtyregion size from 1 to 6 rectangles.\nOverall we now need 27KiB process instead of 4KiB\n\nChange-Id: Iebda5565015158f49d9ca8dbcf55e6ad04855be3\n"
    },
    {
      "commit": "2f22d35936d5e9dfaec529ebbe1fbd2a27e843d7",
      "tree": "97863a9587f3ab5c56ead4ee4f6cb9c83ea56c36",
      "parents": [
        "9b8b417cd1ddfb81c1b0314f033a1439fd627aa2"
      ],
      "author": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Tue Apr 20 12:12:13 2010 -0700"
      },
      "committer": {
        "name": "Jean-Michel Trivi",
        "email": "jmtrivi@google.com",
        "time": "Tue Apr 20 12:12:13 2010 -0700"
      },
      "message": "Fix bug 2604132 40s skip after undocking\nIn case of A2DP write errors, there is an overflow in the calculation\nof the sleep duration to simulate the timing of a successful write.\n\nChange-Id: Ic4e570aebf07fac69735aab1bbc2fc73512ee795\n"
    }
  ],
  "next": "732c73e1e76fef4f3857a1649b03021305639c3c"
}
