)]}'
{
  "log": [
    {
      "commit": "0de171b0d490a5928d54d2fb67c912d140aac643",
      "tree": "abba5dd93cbdc076224ea3da2a92254c553a8112",
      "parents": [
        "7699c18a079d232280c2701fb20d36f75d379e03"
      ],
      "author": {
        "name": "Ted Bonkenburg",
        "email": "tedbo@google.com",
        "time": "Fri Jul 15 15:10:10 2011 -0700"
      },
      "committer": {
        "name": "Ted Bonkenburg",
        "email": "tedbo@google.com",
        "time": "Fri Jul 22 16:36:44 2011 -0700"
      },
      "message": "Add support for creating a Surface from a a SurfaceTexture.\n\nThe Surface is already using SurfaceTexture internally and it is parcelable. This\nis intended to replace and phase out ParcelSurfaceTexture in favor of creating a\nnew Surface.java object from an existing SurfaceTexture.\n\nChange-Id: I8e2dd86614523da6abed6403e1d705a68fa19fdf\n"
    },
    {
      "commit": "50c24a2000c785f8be2367e1fc7938a5eda5c9e8",
      "tree": "4f6b33dae6fad115e014290b2535c0b931c9d0a1",
      "parents": [
        "f07b8a3f691be39083fb5163f9456bcfa566f93f"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Jul 20 16:46:11 2011 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Jul 20 16:53:13 2011 -0700"
      },
      "message": "clean-up. get rid ofunused code and members in Surface[Control].cpp\n\nChange-Id: Ia7790ae28af2c2ac99eae01c2c5044ace4a490a4\n"
    },
    {
      "commit": "949be32b671304d5281ac0abbf30dcf4ebaa9eaf",
      "tree": "f12cbc9997bd2270f1a7604ba4d78739688975c3",
      "parents": [
        "8d96f19692815aa14979c811a130b38eafc1bf65"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Jul 13 17:39:11 2011 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Jul 15 17:47:08 2011 -0700"
      },
      "message": "move lock/unlock implementaion outside of Surface into SurfaceTextureClient\n\nThis makes ANativeWindow_lock/ANativeWindow_unlockAndPost work\nwith ANativeWindows implemented by Surface and SurfaceTextureClient.\n\nAlso, Surface now inherits directly from SurfaceTextureClient.\n\nBug: 5003724\nChange-Id: I9f285877c7bae9a262e9a7af91c2bae78804b2ef\n"
    },
    {
      "commit": "4e8a5c922c287ec97fec847194e930f8598a1941",
      "tree": "4cb995f8d142f646a8c99d9818b6cdee456de398",
      "parents": [
        "0f5d8441ef3ee88855df71b15d81f4c14f12d63d"
      ],
      "author": {
        "name": "tedbo",
        "email": "tedbo@google.com",
        "time": "Wed Jun 22 15:52:53 2011 -0700"
      },
      "committer": {
        "name": "tedbo",
        "email": "tedbo@google.com",
        "time": "Wed Jun 22 16:18:09 2011 -0700"
      },
      "message": "Add method to create a ParcelSurfaceTexture from android.view.Surface.\n\nChange-Id: I05e343ab7e327478f60322af9373574b70c148f5\n"
    },
    {
      "commit": "7bb843ca0777111dae7daf8f1b0705817cf523c4",
      "tree": "10545edc3ce21f38282d5e67e5bc08ff729884b3",
      "parents": [
        "dfc7958a2eafba52db90743a4707eed1d780b63b"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Apr 20 14:20:59 2011 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Jun 13 15:51:35 2011 -0700"
      },
      "message": "unify SurfaceTexture and Surface\n\nAdd the concept of synchronous dequeueBuffer in SurfaceTexture\nImplement {Surface|SurfaceTextureClient}::setSwapInterval()\nAdd SurfaceTexture logging\nfix onFrameAvailable\n"
    },
    {
      "commit": "b2a153adc9860616acdb96d7cdd64494d5a2a0f2",
      "tree": "3e87a5d9681d86ad68c14222774f77bc4bd3ae4a",
      "parents": [
        "be0cc36525f090032d1b84d95e1d8ba5fc714fc2"
      ],
      "author": {
        "name": "Iliyan Malchev",
        "email": "malchev@google.com",
        "time": "Sun May 01 11:33:26 2011 -0700"
      },
      "committer": {
        "name": "Iliyan Malchev",
        "email": "malchev@google.com",
        "time": "Tue May 03 16:40:14 2011 -0700"
      },
      "message": "frameworks/base: android_native_buffer_t -\u003e ANativeWindowBuffer\n\nChange-Id: Idc2eabaa805bb6d308ebb315872623f28d428417\nSigned-off-by: Iliyan Malchev \u003cmalchev@google.com\u003e\n"
    },
    {
      "commit": "4d7c1ce651bd5e283e694fa34641e1dc080613c0",
      "tree": "cfb1f708b760f20b08ec81a6bc4d25c59ec8cc04",
      "parents": [
        "9c7ac0d142eaf4b083a309299ab023932a9bb109"
      ],
      "author": {
        "name": "Iliyan Malchev",
        "email": "malchev@google.com",
        "time": "Thu Apr 14 16:54:38 2011 -0700"
      },
      "committer": {
        "name": "Iliyan Malchev",
        "email": "malchev@google.com",
        "time": "Tue May 03 15:49:40 2011 -0700"
      },
      "message": "frameworks/base: make the ANativeWindow query() method const\n\nquery() does not modify the object\u0027s data, so it needs to be a const method\n\nChange-Id: I67c40a3c865461e6f1cc2193fd2d74286ff6ac8f\nSigned-off-by: Iliyan Malchev \u003cmalchev@google.com\u003e\n"
    },
    {
      "commit": "c8a04b536bb8ad12a87e6dd68d66cff1e7fcd7e7",
      "tree": "8e8018a9898f9785eeef5e8484c93d51cee4f052",
      "parents": [
        "fb96b5ece35ed3c0f3e682d1f9864d7700fe63fc"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Apr 05 15:44:20 2011 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Apr 05 20:11:55 2011 -0700"
      },
      "message": "remove more unused references to ISurface\n\nChange-Id: I2201f1ca2bb8f203a081d94a0134f798778dfbef\n"
    },
    {
      "commit": "c5f94d8a4779050125145396ca83fbc862c7ed6b",
      "tree": "83d016c9670032683faa39fda755b236a9010954",
      "parents": [
        "262564df9613e8950fb3828ecc6dfffe79cc1b31"
      ],
      "author": {
        "name": "Eino-Ville Talvala",
        "email": "etalvala@google.com",
        "time": "Fri Feb 18 11:02:42 2011 -0800"
      },
      "committer": {
        "name": "Eino-Ville Talvala",
        "email": "etalvala@google.com",
        "time": "Thu Mar 17 13:10:03 2011 -0700"
      },
      "message": "Add support for timestamps into SurfaceTexture.\n\nAPI addition: The timestamps are represented as nanoseconds from some\narbitrary time point. Like the SurfaceTexture transform matrix, the\ntimestamp retrieved by getTimestamp is for the last frame sent to the\nGL texture using updateTexImage().\n\nCamera HAL change: Expect vendors to set these timestamps using\nnative_window_set_buffers_timestamp().  For now, they are\nautogenerated by SurfaceTextureClient if set_buffers_timestamp() is\nnever called, but such timing is likely not accurate enough to pass a\nCTS test.\n\nbug:3300707\n\nChange-Id: Ife131a0c2a826ac27342e11b8a6c42ff49e1bea7\n"
    },
    {
      "commit": "96dcc978430f0daf6d73fee96a01779ed537a0ce",
      "tree": "683c5986dd007030e5a98e57aa6c0764d19da51b",
      "parents": [
        "8e79442c4fdabd2f82d0ed8e23d394816edee495"
      ],
      "author": {
        "name": "Jamie Gennis",
        "email": "jgennis@google.com",
        "time": "Sun Feb 27 14:10:20 2011 -0800"
      },
      "committer": {
        "name": "Jamie Gennis",
        "email": "jgennis@google.com",
        "time": "Mon Feb 28 12:24:40 2011 -0800"
      },
      "message": "Add the MIN_UNDEQUEUED_BUFFERS query to ANW.\n\nThis change adds a new query to ANativeWindow for getting the minimum\nnumber of buffers that must be left un-dequeued during the steady-state\noperation of the ANativeWindow.\n\nChange-Id: Ie8c461fc26b02ecde02ddb4f95bf763662cf1551\nRelated-Bug: 3356050\n"
    },
    {
      "commit": "3b3cddccc105a7eaade4bb98f0eead3d3d3a2cc9",
      "tree": "36b8fb5fa189c1b20f057e095d554454571a3fe5",
      "parents": [
        "981df1d9931c1bd48dbb735437823b92db51e1a1"
      ],
      "author": {
        "name": "Dharmaray Kundargi",
        "email": "dharmaray@google.com",
        "time": "Sun Jan 16 16:43:20 2011 -0800"
      },
      "committer": {
        "name": "Dharmaray Kundargi",
        "email": "dharmaray@google.com",
        "time": "Sun Jan 16 16:43:20 2011 -0800"
      },
      "message": "integrate videoeditor preview player.\n\nChange-Id: I83084f494605c8e6f4d198afa8c36f9e29579667\n"
    },
    {
      "commit": "afc724b907336c043a38487fb5620074c9777d45",
      "tree": "874193599e69223abda180d5cf8f02376307599a",
      "parents": [
        "853548287ffe4eb85d1bd10669270292336d137a"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Jan 14 11:04:34 2011 -0800"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Jan 14 11:04:34 2011 -0800"
      },
      "message": "Fix error reporting in Surface::cancelBuffer()\n\nwhen we validate the surface there, most errors are in fact allowed\nbecause it is legal to cancel a buffer after a surface has been\ndestroyed (for instance). in that case make sure to not log\nerror messages as they are very confusing.\n\nChange-Id: Iecdfbaf6d9ee5da54d56cd7ea7a0d430c30934b0\n"
    },
    {
      "commit": "06f9ebf4f6178d6b6970cace263ee180d4b61d36",
      "tree": "9abc50dcbf3cee3ba65dc95bf59f9eb647a208c3",
      "parents": [
        "f7d63cf2cbab403b14778ec45839107078e20824"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Dec 13 16:47:31 2010 -0800"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Dec 13 16:47:31 2010 -0800"
      },
      "message": "minor clean-up. SurfaceFlinger doesn\u0027t need libpixelflinger.so.\n\nChange-Id: I3bdca74351c8e480a05084bc412a96c5f685221d\n"
    },
    {
      "commit": "499f518400d54f2f14753a674edd95c5bb11acfd",
      "tree": "4a985755f7752b22cdea5d7cbaa4f5417d53da65",
      "parents": [
        "7930b5bc068e92a1eaaa6c890b77aebbdf01e259",
        "ff04e97faf75c435e453d4c1caf7eeac8b9c1ceb"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Oct 06 17:07:39 2010 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Oct 06 17:07:39 2010 -0700"
      },
      "message": "am ff04e97f: am f4619308: Merge \"fix [2835280] Add support for cancelling buffers to ANativeWindow\" into gingerbread\n\nMerge commit \u0027ff04e97faf75c435e453d4c1caf7eeac8b9c1ceb\u0027\n\n* commit \u0027ff04e97faf75c435e453d4c1caf7eeac8b9c1ceb\u0027:\n  fix [2835280] Add support for cancelling buffers to ANativeWindow\n"
    },
    {
      "commit": "8ddd2c72ee7dd6f45e5375a197774b8671b982b7",
      "tree": "b3a346d011b76c96b986f831036ff95652f067cf",
      "parents": [
        "19058877df9bf94f197a72855f810f7f6bf8d068"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Oct 01 16:22:41 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Oct 04 20:10:11 2010 -0700"
      },
      "message": "fix [2835280] Add support for cancelling buffers to ANativeWindow\n\nThere is a new ANativeWindow::cancelBuffer() API that can be used to\ncancel any dequeued buffer, BEFORE it\u0027s been enqueued. The buffer is\nreturned to the list of availlable buffers. dequeue and cancel are not\nmutually thread safe, they must be called from the same thread or\nexternal synchronization must be used.\n\nChange-Id: I86cc7985bace8b6a93ad2c75d2bef5c3c2cb4d61\n"
    },
    {
      "commit": "bce2e90ca9bc2277a4816b7996f84506df411cf9",
      "tree": "2a1902282acfebe7f68a202a4c43ffbeb0e9df6d",
      "parents": [
        "8d9d751a8f09a0199d1d22a3f8267eb51f919cc0",
        "bc4389edfbb5777aec1a9af7863b2ca3ade2fa64"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Aug 24 17:56:40 2010 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Aug 24 17:56:40 2010 -0700"
      },
      "message": "am bc4389ed: am 8395b462: Merge \"fix [2931513] Add support for setting the orientation of an ANativeWindow\" into gingerbread\n\nMerge commit \u0027bc4389edfbb5777aec1a9af7863b2ca3ade2fa64\u0027\n\n* commit \u0027bc4389edfbb5777aec1a9af7863b2ca3ade2fa64\u0027:\n  fix [2931513] Add support for setting the orientation of an ANativeWindow\n"
    },
    {
      "commit": "e96aa3e859cb747e241dfa2999fcd142a688ed57",
      "tree": "8b725f12dd84b37345eebaa40951bc401b2e0a3f",
      "parents": [
        "0c76c7c5eedf90b5fa1a95b6a9944b4e58747007"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Aug 19 17:01:19 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Aug 24 15:40:50 2010 -0700"
      },
      "message": "fix [2931513] Add support for setting the orientation of an ANativeWindow\n\nAlso implement support for cropping.\n\nChange-Id: Iba5888dd242bf2feaac9e9ce26e404c1f404c280\n"
    },
    {
      "commit": "85cfdd011241a5f2fb7fabc65b5943a39af7e1de",
      "tree": "556bd6f34ae8d300d9fa05fe46bb0dc4d8aa43e0",
      "parents": [
        "7fdaa2329e755c0e5c25724a43b8c361b88e9623"
      ],
      "author": {
        "name": "Jamie Gennis",
        "email": "jgennis@google.com",
        "time": "Tue Aug 10 16:37:53 2010 -0700"
      },
      "committer": {
        "name": "Jamie Gennis",
        "email": "jgennis@google.com",
        "time": "Mon Aug 23 14:31:30 2010 -0700"
      },
      "message": "Change the framework to use the new camera preview path.\n\nThis change makes the camera HAL interface take an ANativeWindow interface from\nwhich all the camera preview buffers will be allocated.  The framework code\nrunning in application processes now passes a Surface object rather than an\nISurface to the camera server via Binder when setting the preview surface.  The\ncamera server then forwards that Surface object (which implements the\nANativeWindow interface) to the camera HAL, which uses it to communicate with\nSurfaceFlinger to allocate the camera preview buffers.\n\nChange-Id: Ie438f721559cd7de5e4f848a26d96360dda07b5f\n"
    },
    {
      "commit": "e3c01832fc741e9908f047d86cd40db1ea5d78c8",
      "tree": "6765bad7dbcf95dc5ca28ba5b2de5f7a70047712",
      "parents": [
        "ed23e3b87906d367304dbf5bd49ed17448d5d684"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Mon Aug 16 08:49:37 2010 -0700"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Mon Aug 23 12:30:24 2010 -0700"
      },
      "message": "Squashed commit of the following:\n\ncommit 35cc68814a9537c31fde146e171e7b0bbdfe211e\nAuthor: Andreas Huber \u003candih@google.com\u003e\nDate:   Mon Aug 16 08:48:42 2010 -0700\n\n    Only enable support for yuv to yuv conversion on passion, where it\u0027s available, use the slower yuv-\u003ergb565 path everywhere else.\n\ncommit d8ac5a8814103e60d11d2acf61997fc31a1dc58d\nAuthor: Andreas Huber \u003candih@google.com\u003e\nDate:   Fri Aug 13 13:56:44 2010 -0700\n\n    The software renderer takes over all rendering, converting from yuv to yuv if possible and rgb565 otherwise.\n\ncommit 684972074b74318bdcb826ed9b5b0864d2d2e273\nAuthor: Andreas Huber \u003candih@google.com\u003e\nDate:   Fri Aug 13 09:34:35 2010 -0700\n\n    A first shot at supporting the new rendering APIs.\n\nChange-Id: Iea9b32856da46950501f1a700f616b5feac710fd\n"
    },
    {
      "commit": "5ee65f0d441ca558bc95b60c1468f2aadfeeddbd",
      "tree": "fe143a0721ac44a3d2c34a46ad5240ea2d586f76",
      "parents": [
        "eec69d2923636b2aaa51df93bacc2b3bbb742736"
      ],
      "author": {
        "name": "Jamie Gennis",
        "email": "jgennis@google.com",
        "time": "Thu Jul 15 17:29:15 2010 -0700"
      },
      "committer": {
        "name": "Jamie Gennis",
        "email": "jgennis@google.com",
        "time": "Fri Jul 16 13:03:15 2010 -0700"
      },
      "message": "Re-use existing Surface objects when reading them from parcels.\n\nThis change adds a process-global cache of previously deserialized Surface\nobjects so that if a Surface object wrapping the same ISurface gets received\nagain the same Surface can be used.  This is important because the \u0027tail\u0027\npointer in the SharedBufferClient is stored only on the client side, and needs\nto be the same for all the Surface objects wrapping an ISurface instance.  This\nsolves the problem by making there only be one Surface object wrapping an\nISurface per process.\n\nChange-Id: I4bf0b8787885c56277622fca053022d2bb638902\n"
    },
    {
      "commit": "8b49bd1a2f8117e1c22884f0150e72cbcf838f32",
      "tree": "ec6e43ed118268b09cbb61c8eed02c757e9602ed",
      "parents": [
        "3c80a4a044865bdf1289c7896baffa1c082d835c"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Jun 30 13:56:17 2010 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Wed Jun 30 15:32:04 2010 -0700"
      },
      "message": "Introduce official public NativeWindow type.\n\nNot yet hooked up to anything in the NDK, but requires renaming\nthe existing android_native_window_t type everywhere.\n\nChange-Id: Iffee6ea39c93b8b34e20fb69e4d2c7c837e5ea2e\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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "8b138323d54e36fd66b22a634494648e20c53373",
      "tree": "e403ffb6131b32a5156e5f9868e0ae1408c96128",
      "parents": [
        "5c7a69c3d6f41f60f4bfc3f7e3123941d382f3a7"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Apr 12 16:22:15 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Apr 12 16:29:36 2010 -0700"
      },
      "message": "don\u0027t hardcode \"mSurface\" throughout our source code\n\nthis is used in a few places to get access to the android.view.Surface\nnative surface. use a macro instead. Also rename the field to mNativeSurface.\n\nChange-Id: I1c6dea14abd6b8b1392c7f97b304115999355094\n"
    },
    {
      "commit": "2f7540e78f2a0952ddbbd9b953e186b90f401734",
      "tree": "a507541a85465b755372d2e8e638dc0fe3a5bb92",
      "parents": [
        "f6331a497455fdb6618bf4c634c9326695304c24"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Mar 11 15:06:54 2010 -0800"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Mar 11 15:06:54 2010 -0800"
      },
      "message": "implement connect/disconnect in our native_window_t implementations\n\nthe framebuffer implementation doesn\u0027t do anything special with this\nbut the surfaceflinger implementation makes sure the surface is not used\nby two APIs simultaneously.\n\nChange-Id: Id4ca8ef7093d68846abc2ac814327cc40a64b66b\n"
    },
    {
      "commit": "000479f9e325b4e426a67033abd92d47da412725",
      "tree": "16b93ea777744aa24ffe7d3a191bb90529ad4ce5",
      "parents": [
        "28a5dc229ed25c771cde25668928edc788073029"
      ],
      "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": "18e026066a95e5d63c2ece8007883b46599373ca",
      "tree": "e7c8d0f1e1cc5283222d635c595da3a2ce1bfc5f",
      "parents": [
        "73f8aa678055598738dfba54c60a1674bcbf02b1"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Nov 13 15:26:29 2009 -0800"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Nov 13 15:26:29 2009 -0800"
      },
      "message": "fix some aspects of [2258746] native crash in launcher2\n\nSurface::validate() could sometimes dereference a null pointer before checking it wasn\u0027t null.\nThis will prevent the application to crash when given bad parameters or used incorrectly.\nHowever, the bug above probably has another cause.\n"
    },
    {
      "commit": "6950e428feaccc8164b989ef64e771a99948797a",
      "tree": "f6520613c5355eef110f3820469d7dc477598629",
      "parents": [
        "521f4f3af94e3a093a37af887d3e317a526b61a1"
      ],
      "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": "e611a6ed33d157b7ae15bdfe4e1873dc20ce7d48",
      "tree": "fc1e8f0b97d6f2c4cb43c52055e5f015ffe8204a",
      "parents": [
        "dd8f6186775f69a8fef6213bcdc23be633d1ab6f"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Sep 15 19:10:47 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Sep 15 19:21:31 2009 -0700"
      },
      "message": "fix [2122448] android_native_window_t::setUsage() only reallocates the first buffer\n\nTake 2. We needed to check that the usage flags are \"good enough\" as opposed to \"the same\".\n\nThis reverts commit 8f17a762fe9e9f31e4e86cb60ff2bfb6b10fdee6.\n"
    },
    {
      "commit": "8f17a762fe9e9f31e4e86cb60ff2bfb6b10fdee6",
      "tree": "f9500ecdcefae8e859433c2153dcc1b2fe642909",
      "parents": [
        "d6b10fb86229ed0e904138ec4604066ea85059db"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Sep 15 18:57:06 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Sep 15 18:57:06 2009 -0700"
      },
      "message": "Revert \"fix [2122448] android_native_window_t::setUsage() only reallocates the first buffer\"\n\nThis reverts commit 486aa963b63e20b7910e1004cebb4f0afabbd80f.\n"
    },
    {
      "commit": "486aa963b63e20b7910e1004cebb4f0afabbd80f",
      "tree": "b615e2ca3a60bf05a1315410df8fb4b7501105ad",
      "parents": [
        "a4fe2aca527ee45ddde6ace2316cad27dd487379"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Sep 15 17:34:04 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Sep 15 17:34:04 2009 -0700"
      },
      "message": "fix [2122448] android_native_window_t::setUsage() only reallocates the first buffer\n"
    },
    {
      "commit": "9779b221e999583ff89e0dfc40e56398737adbb3",
      "tree": "76b185d252b95b05e8d74e7a1644b843f8839725",
      "parents": [
        "a4eb91da03bd785bc91bed0d25a9efaa9baba1c1"
      ],
      "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": "321abdb092bfc925749d528de590680ae8bc3d5c",
      "tree": "affc2bd081141dca59b9cc053bf47f321ca6497b",
      "parents": [
        "c4915de8bb9454b8f10b0c9b7ac21e2bb7f65202"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Aug 14 18:52:17 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Aug 14 18:52:17 2009 -0700"
      },
      "message": "make sure to update a surface\u0027s usage bits when it changes, instead of only the first time.\n\nalso fixed a few locking issues in Surface and commented how each member is protected.\n"
    },
    {
      "commit": "5cec4742b3a1d7448bd32ae57cb4cf70b484c64c",
      "tree": "9a3d6adb933fd0947ffc643e3d11f432a4baec4b",
      "parents": [
        "064dbd076d431a7508b864aa0993cd59ef743e4e"
      ],
      "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": "64e89a8aff9a45a491f1d7064a655b9021fe644a",
      "tree": "5cad5d20370d2d77335324e55551ce2a2fe8b903",
      "parents": [
        "50cb54ff5cdb233d01e1dd94b355cbfe0a371520"
      ],
      "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": "8b76a0ac6fbf07254629ed1ea86af014d5abe050",
      "tree": "e492e09655269fff3ca14b6a62f9b07f2d484038",
      "parents": [
        "c5ea43920919eeaec4ec0686de9fa3d034d82337"
      ],
      "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": "ccf8b94169197875af6c89172015b9644919b064",
      "tree": "8ac3af6d1e44dd5dfd37168dc635e17329c990ae",
      "parents": [
        "07cbacc11705f1f05a1150083aad000c53942dea"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Fri Aug 07 12:01:29 2009 -0700"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Mon Aug 10 12:58:05 2009 -0700"
      },
      "message": "Expose a variation of the createRenderer API that works on a plain Surface.\n"
    },
    {
      "commit": "1de13168a9d9f55464dc98748ea28ef785f1048e",
      "tree": "753f84ecd1e109e4c0c2e2d8285c90b777ed9ef5",
      "parents": [
        "1b0efec3473134fb7de226f3e1fdade5b3529ad9"
      ],
      "author": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Fri Jul 31 11:52:50 2009 -0700"
      },
      "committer": {
        "name": "Andreas Huber",
        "email": "andih@google.com",
        "time": "Fri Jul 31 12:48:53 2009 -0700"
      },
      "message": "The IOMX interface now instantiates IOMXRenderers to hide the details of hardware accelerated blitting.\n"
    },
    {
      "commit": "5b5c9144872b4e31ba5a041dce585a8ddbbe495d",
      "tree": "a87a028c1485452127f0ec9c0e8214d419fe6753",
      "parents": [
        "5e631892fb9ac4da83b70ba129ceb6a3f501bad9"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Jul 30 18:14:56 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Jul 30 18:14:56 2009 -0700"
      },
      "message": "fixed some issues with the software renderer when surfaces are made current.\n\nthere was several issues:\n- when a surface was made non-current, the last frame wasn\u0027t shown and the buffer could stay locked\n- when a surface was made current the 2nd time, it would not dequeue a new buffer\n\nnow, queue/dequeue are done when the surface is made current.\n\nfor this to work, a new query() hook had to be added on android_native_window_t, it allows to retrieve some attributes of a window (currently only width and height).\n"
    },
    {
      "commit": "ac2523b161df2bb507cc88906bb070878266770d",
      "tree": "30ee897d6e8fa63e067627a91697f13f1fbd919d",
      "parents": [
        "e633f9339a2556771c79c784b0b23a9aade30485"
      ],
      "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": "e633f9339a2556771c79c784b0b23a9aade30485",
      "tree": "bb334508992dc3a8320957bb39e0016d047530ad",
      "parents": [
        "430f2ed5c03312700131a70c858b98e1cc6bc161"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue May 05 00:59:23 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue May 05 00:59:23 2009 -0700"
      },
      "message": "get rid of android_native_buffer_t::getHandle() and replace it with an handle field\n\nthis abstraction was not necessary. things are easier now.\n"
    },
    {
      "commit": "430f2ed5c03312700131a70c858b98e1cc6bc161",
      "tree": "9ca0a2fbaeab0b932002818f2a33bd0de2e80623",
      "parents": [
        "6279619e4279daf77feff0c76e089b26ad66124f"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue May 05 00:37:46 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue May 05 00:37:46 2009 -0700"
      },
      "message": "removed the \"bits\" attribute from android_native_buffer_t.\n\n\"bits\" can never be trusted now that we need to call lock() on the handle to get the virtual address of the buffer.\n"
    },
    {
      "commit": "dff8e58d47ede6e748c0b02e128ca33b42a4f362",
      "tree": "716d70cda74aa625d6e67c4debc2eb7c6b81bfc9",
      "parents": [
        "fa6eda01a9f3df0102ce6a65302c8674cc9c7e50"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon May 04 14:17:04 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon May 04 14:17:04 2009 -0700"
      },
      "message": "update surfaceflinger, libui and libagl to the new gralloc api\n\n- Currently the lock/unlock path is naive and is done for each drawing operation (glDrawElements and glDrawArrays). this should be improved eventually.\n- factor all the lock/unlock code in SurfaceBuffer.\n- fixed \"showupdate\" so it works even when we don\u0027t have preserving eglSwapBuffers().\n- improved the situation with the dirty-region and fixed a problem that caused GL apps to not update.\n- make use of LightRefBase() where needed, instead of duplicating its implementation\n- add LightRefBase::getStrongCount()\n- renamed EGLNativeWindowSurface.cpp to FramebufferNativeWindow.cpp\n\n- disabled copybits test, since it clashes with the new gralloc api\n\n- Camera/Video will be fixed later when we rework the overlay apis\n"
    },
    {
      "commit": "69d62097e8195c947de7e4cdc4a491181aa56e61",
      "tree": "9711d12c764f5ff8bfac6fb285b41ea6c4314a8e",
      "parents": [
        "17f638b39f2e8b610ecfa1290e5bc42ab7700c98"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Apr 16 20:30:22 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Apr 16 20:30:22 2009 -0700"
      },
      "message": "cleanup, remove unused fields. Also make sure that we don\u0027t systematically allocate a Surface in Surface.java if only a SurfaceControl is needed (Common case).\n"
    },
    {
      "commit": "17f638b39f2e8b610ecfa1290e5bc42ab7700c98",
      "tree": "536b2865736b9498d70304db00a64897c472f65f",
      "parents": [
        "6d2c0bc7bfe10a9b70ca608baf626c47a228fa6b"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Apr 16 20:04:08 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Apr 16 20:04:08 2009 -0700"
      },
      "message": "more splitting of Surface/SurfaceControl. Surface.java is now implemented in terms of Surface and SurfaceControl.\n\nThe WindowManager side of Surface.java holds a SurfaceControl, while the client-side holds a Surface. When the client is in the system process, Surface.java holds both (which is a problem we\u0027ll try to fix later).\n"
    },
    {
      "commit": "6d2c0bc7bfe10a9b70ca608baf626c47a228fa6b",
      "tree": "e38029de5af80839a44ae01e03c231535b20bd03",
      "parents": [
        "ed81f2216a0f200e279de61ec96fbedf5c21f0c7"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Apr 16 16:19:50 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Apr 16 16:19:50 2009 -0700"
      },
      "message": "split Surface.cpp into Surface and SurfaceControl\n\nSurfaceControl is used for controling the geometry of the surface (for the WM), while Surface is used to access the buffers (for SF\u0027s clients).\nSurfaceFlingerClient now uses the SurfaceID instead of Surface*.\n\nCurrently Surface still has the SurfaceControl API and is implemented by calling into SurfaceControl.\n"
    },
    {
      "commit": "402c34649f514669517c2208e35caa58ff8bb2b9",
      "tree": "aabdf56e5b05fceebb44c76376344ac1fbc55051",
      "parents": [
        "a6b40ba521d5c2fc23da74015531bd4ed8657921"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Apr 14 18:21:47 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Apr 16 12:29:34 2009 -0700"
      },
      "message": "fix some issues with Surface\u0027s lifetime management.\n\nTo deal with Java\u0027s lack of destructors and delayed garbage collection, we used to duplicate Surface.cpp objects in some case; this caused some issues because Surface is supposed to be reference-counted and unique.\n"
    },
    {
      "commit": "1473f46cbc82aa6f0ba744cc896a36923823d55b",
      "tree": "1a03737c7eb71b32735693e5cfdd91d0b57a2ad5",
      "parents": [
        "71d83c04897a10394009b02808bb6b86886b27e1"
      ],
      "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": "9066cfe9886ac131c34d59ed0e2d287b0e3c0087",
      "tree": "d88beb88001f2482911e3d28e43833b50e4b4e97",
      "parents": [
        "d83a98f4ce9cfa908f5c54bbd70f03eec07e7553"
      ],
      "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": "d83a98f4ce9cfa908f5c54bbd70f03eec07e7553",
      "tree": "4b825dc642cb6eb9a060e54bf8d69288fbee4904",
      "parents": [
        "076357b8567458d4b6dfdcf839ef751634cd2bfb"
      ],
      "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": "9266c558bf1d21ff647525ff99f7dadbca417309",
      "tree": "1630b1ba80f4793caf39d865528e662bdb1037fe",
      "parents": [
        "b798689749c64baba81f02e10cf2157c747d6b46"
      ],
      "author": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Thu Jan 15 16:12:10 2009 -0800"
      },
      "committer": {
        "name": "The Android Open Source Project",
        "email": "initial-contribution@android.com",
        "time": "Thu Jan 15 16:12:10 2009 -0800"
      },
      "message": "auto import from //branches/cupcake/...@126645\n"
    },
    {
      "commit": "f013e1afd1e68af5e3b868c26a653bbfb39538f8",
      "tree": "7ad6c8fd9c7b55f4b4017171dec1cb760bbd26bf",
      "parents": [
        "e70cfafe580c6f2994c4827cd8a534aabf3eb05c"
      ],
      "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": "54b6cfa9a9e5b861a9930af873580d6dc20f773c",
      "tree": "35051494d2af230dce54d6b31c6af8fc24091316",
      "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"
    }
  ]
}
