)]}'
{
  "log": [
    {
      "commit": "9cce325fae8adcf7560a28eef394489f09bad74d",
      "tree": "3497604564acd2575016d3a331d661f22a8e6db3",
      "parents": [
        "4fae0fd0c9425318094d4c0059331c2c7a996c66"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Feb 09 17:46:37 2010 -0800"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Feb 11 13:16:22 2010 -0800"
      },
      "message": "split libsurfaceflinger_client and libcamera_client out of libui\n"
    },
    {
      "commit": "5994a330ac949e7706540f22cd73d76d9f2a96cb",
      "tree": "46250601cda14ac8a44572be4566a8ac0869701d",
      "parents": [
        "32f6863e218e19f8a3daab7e345bb4ae6587865a"
      ],
      "author": {
        "name": "Chih-Chung Chang",
        "email": "chihchung@google.com",
        "time": "Fri Jan 22 16:30:39 2010 -0800"
      },
      "committer": {
        "name": "Chih-Chung Chang",
        "email": "chihchung@google.com",
        "time": "Fri Jan 22 16:30:39 2010 -0800"
      },
      "message": "Add support for 180/270 degrees rotation.\n"
    },
    {
      "commit": "52e7200b6e020bba978c36e3a928493a3f2c8a92",
      "tree": "9c752d7d277ba2dfb9789763369a7373888557a2",
      "parents": [
        "d28d5be75b41fe48f486f9b83ae8685496983f5a"
      ],
      "author": {
        "name": "Chih-Chung Chang",
        "email": "chihchung@google.com",
        "time": "Thu Jan 21 17:31:06 2010 -0800"
      },
      "committer": {
        "name": "Chih-Chung Chang",
        "email": "chihchung@google.com",
        "time": "Thu Jan 21 20:20:08 2010 -0800"
      },
      "message": "Add an orientation parameter for overlay, so we can do camera preview in portrait mode.\n"
    },
    {
      "commit": "3330b203039dea366d4981db1408a460134b2d2c",
      "tree": "f165f7801f2ee8034ad1edfd34e2b554fdaf662f",
      "parents": [
        "0ad3f9f4009c76b56f41da5d26eb7712dee938f1"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Oct 05 17:07:12 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Oct 06 17:00:25 2009 -0700"
      },
      "message": "fix [2167050] glTexImage2D code path buggy in SurfaceFlinger\n\nWhen EGLImage extension is not available, SurfaceFlinger will fallback to using\nglTexImage2D and glTexSubImage2D instead, which requires 50% more memory and an\nextra copy. However this code path has never been exercised and had some bugs\nwhich this patch fix.\n\nMainly the scale factor wasn\u0027t computed right when falling back on glDrawElements.\nWe also fallback to this mode of operation if a buffer doesn\u0027t have the adequate\nusage bits for EGLImage usage.\n\nThis changes only code that is currently not executed. Some refactoring was needed to\nkeep the change clean. This doesn\u0027t change anything functionaly.\n"
    },
    {
      "commit": "cbb288bfe89f585bf48371bd31b2d4aafa32f32e",
      "tree": "73d20f36910dcab8c17c686cdd7014cee285bc39",
      "parents": [
        "f0780974fc31ae88135d1dcb67cb5fd86bb6deb6"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Sep 07 16:32:45 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Sep 07 16:32:45 2009 -0700"
      },
      "message": "fix [2068105] implement queueBuffer/lockBuffer/dequeueBuffer properly\n\nRewrote SurfaceFlinger\u0027s buffer management from the ground-up.\nThe design now support an arbitrary number of buffers per surface, however the current implementation is limited to four. Currently only 2 buffers are used in practice.\n\nThe main new feature is to be able to dequeue all buffers at once (very important when there are only two). \n\nA client can dequeue all buffers until there are none available, it can lock all buffers except the last one that is used for composition. The client will block then, until a new buffer is enqueued.\n\nThe current implementation requires that buffers are locked in the same order they are dequeued and enqueued in the same order they are locked. Only one buffer can be locked at a time.\n\neg. Allowed sequence:   DQ, DQ, LOCK, Q, LOCK, Q\neg. Forbidden sequence: DQ, DQ, LOCK, LOCK, Q, Q\n\n"
    },
    {
      "commit": "5221271375f361b84a6eeec3d7086f223997fbb3",
      "tree": "f65cab160cf38b9ed577f1cb5bc2f9882fc8631c",
      "parents": [
        "40ef81c7fce7cd1b028aec7b8b27b77ce6bf7b90"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Aug 11 22:34:02 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Aug 11 23:32:29 2009 -0700"
      },
      "message": "second take, hopefully this time it doesn\u0027t break one of the builds: \"SurfaceFlinger will now allocate buffers based on the usage specified by the clients. This allows to allocate the right kind of buffer automatically, without having the user to specify anything.\"\n"
    },
    {
      "commit": "b2fd4665e66fe81969f1f07fd724c6f68dd8f7f1",
      "tree": "8564d48ba85748bdb281a3bcda22b41ed17c72e8",
      "parents": [
        "01b535185805d5b22c5fffc30833decdca308b5b"
      ],
      "author": {
        "name": "Fred Quintana",
        "email": "fredq@google.com",
        "time": "Tue Aug 11 20:49:35 2009 -0700"
      },
      "committer": {
        "name": "Fred Quintana",
        "email": "fredq@google.com",
        "time": "Tue Aug 11 20:49:35 2009 -0700"
      },
      "message": "Revert \"SurfaceFlinger will now allocate buffers based on the usage specified by the clients. This allows to allocate the right kind of buffer automatically, without having the user to specify anything.\"\n\nThis reverts commit 8b76a0ac6fbf07254629ed1ea86af014d5abe050.\n"
    },
    {
      "commit": "df37b62c62f8efd3b5a433f9b4d40d30cec13a31",
      "tree": "43c783e665b9e1c47210d3c5a8f929b33acda72f",
      "parents": [
        "d779f052b4180f347ed0bd725fdfedda504773e5"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Aug 10 21:59:56 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Aug 11 16:12:56 2009 -0700"
      },
      "message": "SurfaceFlinger will now allocate buffers based on the usage specified by the clients. This allows to allocate the right kind of buffer automatically, without having the user to specify anything.\n\nThis change makes SurfaceHolder.setType(GPU) obsolete (it\u0027s now ignored).\nAdded an API to android_native_window_t to allow extending the functionality without ever breaking binary compatibility. This is used to implement the new set_usage() API. This API needs to be called by software renderers because the default is to use usage flags suitable for h/w.\n"
    },
    {
      "commit": "310f8da0c3122ed5419db8f12a6e98d3188325b2",
      "tree": "0f3435d35e7fe8fca8dc2b347ff46276a8c351c8",
      "parents": [
        "20f68782a4ea71c6a977d7f87d8288d3daa265ec",
        "bdbf6b094d61f694f162a5a5279caededcb1f0a5"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri May 22 01:27:01 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri May 22 02:16:08 2009 -0700"
      },
      "message": "merge master to master_gl\n"
    },
    {
      "commit": "c5b2c0bf8007562536b822eb060fc54a01f8e08b",
      "tree": "da6084f542177972cf72a985b5d2c10330f87de3",
      "parents": [
        "208059f67ed2dd9fa025e07fcb6954d3cb61c79e"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue May 19 19:08:10 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed May 20 12:55:03 2009 -0700"
      },
      "message": "move libbinder\u0027s header files under includes/binder\n"
    },
    {
      "commit": "7189c0054e29a66d945f5657c48d5ecf538ea511",
      "tree": "59ffcb8c9e9aa615b86dd3b033059e1014eda3ac",
      "parents": [
        "21c59d0070fe24a8e04e52ce04d511a924a9932f"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue May 05 18:11:11 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue May 05 18:11:11 2009 -0700"
      },
      "message": "move opengl/include/EGL/android_natives.h to include/ui/egl/android_natives.h and don\u0027t include it from egl.h\n\nthe android_native_ types are just forward declared in egl.h\n"
    },
    {
      "commit": "076b1cc3a9b90aa5b381a1ed268ca0b548444c9b",
      "tree": "b87f7863623b37fa9a6cc4ef48934aab46f79986",
      "parents": [
        "4ec21527096d0dcaa99634e6058aca3a415461af"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Apr 10 14:24:30 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Apr 10 14:24:30 2009 -0700"
      },
      "message": "Integrate from //sandbox/mathias/donut/...@145728\n\nSurfaceFlinger rework for new EGL driver model support.\n"
    },
    {
      "commit": "edbf3b6af777b721cd2a1ef461947e51e88241e1",
      "tree": "f09427b843b192cccf8c3b5328cb81dddf6489fa",
      "parents": [
        "d5193d9394c5e58176d7bcdf50ef017f8a3b9e1e"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 19:31:44 2009 -0800"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 19:31:44 2009 -0800"
      },
      "message": "auto import from //depot/cupcake/@135843\n"
    },
    {
      "commit": "d5193d9394c5e58176d7bcdf50ef017f8a3b9e1e",
      "tree": "4b825dc642cb6eb9a060e54bf8d69288fbee4904",
      "parents": [
        "43aa2b1cbf7a03e248e10f4d0fec0463257cd52d"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 18:28:45 2009 -0800"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Mar 03 18:28:45 2009 -0800"
      },
      "message": "auto import from //depot/cupcake/@135843\n"
    },
    {
      "commit": "ac65e0b172b33f7e068c14e3d95678fa20205577",
      "tree": "4c290a9665c829ec3774425563260a94564fcb71",
      "parents": [
        "a6938bab1f6fa76ae98ebbe44f4e534e05fa0993"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Fri Feb 13 12:57:50 2009 -0800"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Fri Feb 13 12:57:50 2009 -0800"
      },
      "message": "auto import from //branches/cupcake/...@131421\n"
    },
    {
      "commit": "a6938bab1f6fa76ae98ebbe44f4e534e05fa0993",
      "tree": "bc5a1f806bd06db8abb197e80be9ead3644c0bcc",
      "parents": [
        "e41dd756db5184519f4dacbf4d95b333822605c7"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Feb 10 15:44:00 2009 -0800"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Feb 10 15:44:00 2009 -0800"
      },
      "message": "auto import from //branches/cupcake/...@130745\n"
    },
    {
      "commit": "276293246ea9cbc0a578a7697cc48930376ec0e9",
      "tree": "03804488c60dda65699333d2311c8d1842ec4b65",
      "parents": [
        "e09fd9e819c23dc90bca68375645e15544861330"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Fri Jan 09 17:51:23 2009 -0800"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Fri Jan 09 17:51:23 2009 -0800"
      },
      "message": "auto import from //branches/cupcake/...@125939\n"
    },
    {
      "commit": "e09fd9e819c23dc90bca68375645e15544861330",
      "tree": "9a9fdadd1301625f875a3c126c986c79e3363ac4",
      "parents": [
        "7c1b96a165f970a09ed239bb4fb3f1b0d8f2a407"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Wed Dec 17 18:05:43 2008 -0800"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Wed Dec 17 18:05:43 2008 -0800"
      },
      "message": "Code drop from //branches/cupcake/...@124589\n"
    },
    {
      "commit": "7c1b96a165f970a09ed239bb4fb3f1b0d8f2a407",
      "tree": "df5a6539447324de36e95b057d6b9f0361b7a250",
      "parents": [],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Oct 21 07:00:00 2008 -0700"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Tue Oct 21 07:00:00 2008 -0700"
      },
      "message": "Initial Contribution\n"
    }
  ]
}
