)]}'
{
  "log": [
    {
      "commit": "ca99fb8f65f3ea249c56fb6dccefffb54e87696e",
      "tree": "6071c87bf800c60d8c2f8dbd85a2f0c2b6e669f7",
      "parents": [
        "daeec8c5b335ba84aa932a80e6319be5d71f1956"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Apr 14 16:43:44 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Apr 14 16:43:44 2010 -0700"
      },
      "message": "fix [2594950] Flash: Zooming in on some content crashes the Nexus One and causes it to reboot (runtime restart)\n\nWe now limit the size of the surface to the maximum size supported by the GPU.\nOn Nexus One this will 2048 -- it could be different on other devices.\nSurface creation fails if the limit is exceeded.\n\nChange-Id: I9ecfc2e9c58c9e283782b61ebfc6b590f71df785\n"
    },
    {
      "commit": "d343e3d5e3177806205b9452b0b43907e28afd9a",
      "tree": "a094c9ea996f2d1ceb872340a192741ea6395635",
      "parents": [
        "80586f4230f974c2a3fe2b8aa398ffd6764e3a3a"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Mar 15 18:15:20 2010 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Mar 15 18:15:20 2010 -0700"
      },
      "message": "fix [2515291] Native crash and runtime restart while trying to preview captured picture on Sapphire\n\nif a buffer couldn\u0027t be allocated because of an OOM, SF could, in some case dereference\na null pointer.\n\nChange-Id: I5321248c38a21e56d5278b6aada2694e64451378\n"
    },
    {
      "commit": "fcfeb4b5970c8f361634429934a2518d7e8328dd",
      "tree": "5a8337f84c6d707b28c9be732842555c622786d6",
      "parents": [
        "8addafe823381addbb8b9ca4edeca846fa13122f"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Mar 08 11:14:20 2010 -0800"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Mar 08 11:14:20 2010 -0800"
      },
      "message": "fixes for [2474091] Saw Poor behaviour playing a video.\n\n- fix a bug when hacking video buffers into gralloc buffers\n where the buffer size was incorrect this was causing the\n \"direct-form-texture\" mode to fail\n\n- also when the above fails, make sure to revert to the\n \"mdp copy mode\" before going to \"slow mode\"\n\n- finally disable completely the \"direct-from-texture\" mode\n for now. It cannot work because the allocated buffers can\u0027t\n respect the GPU constraints (alignment and such). We\u0027ll\n have to find a solution for that.\n"
    },
    {
      "commit": "54ed4f6282bdea251455f39b978626026affdbef",
      "tree": "157d34806bbfab22e433c1eafe0e2bf72f832af2",
      "parents": [
        "39696474d715de575949a9cdf12e7ff339896f8d"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Feb 16 17:33:37 2010 -0800"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Feb 16 17:33:37 2010 -0800"
      },
      "message": "get rid off the YUV formats at the libui layer\n"
    },
    {
      "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": "f5430db059be3e771c004d0ada594bf8820d0517",
      "tree": "e291c558ae63d711f9570038ce2dd78ccdef3874",
      "parents": [
        "f414887b3c7af00a66c7f8b105dfd9fd2cb3ec2f"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Dec 11 00:56:10 2009 -0800"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Dec 11 00:56:10 2009 -0800"
      },
      "message": "fix [2269582] [TOP-10][Passion_1506][APT:Camera]Sometimes camera preview screen is truncated after launching and back to home screen by home key repeatedly\n\nWhen a surface is removed from the screen while it holds a \"freeze lock\", the\nrelease of that lock happens in the destructor as a \"safety net\". However, it\ndoesn\u0027t trigger an update at that point.\n\nMake sure that \"freeze locks\" are released from the transaction at the point\na surface is removed from the screen (if it\u0027s not on screen, it shouldn\u0027t\nprevent the screen to redraw, and therefore cannot hold a freeze lock).\nThe refresh corresponding to that transaction will pick it up as soon as possible.\n"
    },
    {
      "commit": "8f03b47432f007b1fb3438608361ebf4e3a1310b",
      "tree": "c2971689ed314285bc32d7b226e51cf364e9373f",
      "parents": [
        "c0012deacc14f871062ebc1756d5290d8a8b5ad3"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Dec 10 15:52:29 2009 -0800"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Dec 10 15:59:08 2009 -0800"
      },
      "message": "fix [2319255] crash in openGL : from the media recorder stress test.\n\nnever call eglCreateImageKHR() with a NULL native buffer, which can\nhappen in OOM conditions.\n"
    },
    {
      "commit": "c61de17f143b5f806c5bab9cc58910a322302b70",
      "tree": "f667e56ee0bce443f84bfcb6d40e781fb1ec167d",
      "parents": [
        "def563c45163fea9b53fc4627672fd43d4894b2f"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Nov 30 11:15:41 2009 -0800"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Nov 30 11:15:41 2009 -0800"
      },
      "message": "fixed [2260070] display stopped updating\n\nalways check that the visible region isn\u0027t empty after all visible regions are recomputed\nclear he freeze-lock if it is.\n"
    },
    {
      "commit": "54ba51dff21de666c5ae3bf3abd4f0634ebb0676",
      "tree": "58a69dccdbfd227b9de3c58a416de45d2a8d3513",
      "parents": [
        "36bc94173c957f33f70bcd16c369951f5b2dc3f6"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Oct 26 20:12:37 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Oct 27 13:13:29 2009 -0700"
      },
      "message": "    fix [2143798] Need to figure out how to do video\n\n    Use EGLImageKHR instead of copybit directly.\n    We now have the basis to use streaming YUV textures (well, in fact\n    we already are). When/if we use the GPU instead of the MDP we\u0027ll\n    need to make sure it supports the appropriate YUV format.\n\n    Also make sure we compile if EGL_ANDROID_image_native_buffer is not supported\n"
    },
    {
      "commit": "57720c384af81327d327ef8b88078f11a750fd05",
      "tree": "4125091c671e9fd56bb292f54b04b3668a8fadab",
      "parents": [
        "9521fc0f17c227fa79dd4d830d4607557d060f00"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Oct 21 16:27:21 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Oct 23 15:37:28 2009 -0700"
      },
      "message": "fix [2211532] improves sholes graphics performance\n\nInstead of using glTex{Sub}Image2D() to refresh the textures, we\u0027re using an EGLImageKHR object\nbacked up by a gralloc buffer. The data is updated using memcpy(). This is faster than\nglTex{Sub}Image2D() because the texture is not swizzled. It also uses less memory because\nEGLImageKHW is not limited to power-of-two dimensions.\n"
    },
    {
      "commit": "8f2d50521653f24c2a5e77b627dc015c7fbd656a",
      "tree": "49f7ced9cddff8187f64d4a28ecd5d8ddbd860c7",
      "parents": [
        "28541629e163399fd1cac126e06868ecf1b4811e"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Oct 07 17:58:29 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Oct 07 17:58:29 2009 -0700"
      },
      "message": "fix [2164183] sometimes device just wants to stay asleep\n\nWhen switching rapidily orientation back and forth, surfaces end-up\nacquiring the freeze-lock when the first orientation change happens,\nbut never release it because by the time the 2nd orientation change\ncomes in, the surface size is back to its original size and\ndoesn\u0027t appear to have resized.\n\nwe now always release the freeze-lock when we receive a buffer of the\nexpected size.\n"
    },
    {
      "commit": "e700501d0e888ead9ac6456c0a6fd74d634aa5fb",
      "tree": "25bb0963dd0b96b7c17285f6ddddd536f6465f30",
      "parents": [
        "8e53c5595dd6846ddbfd39549849ea7a289d9897"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Oct 07 16:44:10 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Oct 07 16:44:10 2009 -0700"
      },
      "message": "fix [2170319] gmail bulk operation checkbox latency on passion\n\nThis also fixes [2152536] ANR in browser\n\nWhen SF is enqueuing buffers faster than SF dequeues them.\nThe update flag in SF is not counted and under some situations SF will only\ndequeue the first buffer. The state at this point is not technically\ncorrupted, it\u0027s valid, but just delayed by one buffer.\n\nIn the case of the Browser ANR, because the last enqueued buffer was delayed\nthe resizing of the current buffer couldn\u0027t happen.\n\nThe system would always fall back onto its feet if anything -else- in\ntried to draw, because the \"late\" buffer would be picked up then.\n"
    },
    {
      "commit": "9ec430adaea1cb88eaa1e78c7f759cd42ab6cf7a",
      "tree": "1174b71aeaf88287d38538f8b7baa74532f6f638",
      "parents": [
        "ef8646344a7168643b50a51ebffa2e41e9717608"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Oct 06 19:00:57 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Oct 06 19:00:57 2009 -0700"
      },
      "message": "fix [2152536] ANR in browser\n\nA window is created and the browser is about to render into it the\nvery first time, at that point it does an IPC to SF to request a new\nbuffer. Meanwhile, the window manager removes that window from the\nlist and the shared memory block it uses is marked as invalid.\nHowever, at that point, another window is created and is given the\nsame index (that just go freed), but a different identity and resets\nthe \"invalid\" bit in the shared block. When we go back to the buffer\nallocation code, we\u0027re stuck because the surface we\u0027re allocating for\nis gone and we don\u0027t detect it\u0027s invalid because the invalid bit has\nbeen reset.\n\nIt is not sufficient to check for the invalid bit, I should\nalso check that identities match.\n"
    },
    {
      "commit": "a4b740ed89074cda898a30eb1b029b0d3a5de1a5",
      "tree": "2c7f89741b0d58e569b1392372ac344b8023267e",
      "parents": [
        "b26af23744fa73e8bc142b1eb98772fde5970c10"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Oct 05 18:20:39 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Oct 06 17:24:26 2009 -0700"
      },
      "message": "fix [2168528] enable glTexImage2D code path in SF for software-only buffers\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": "0b3ad46a26dc3717260fa9347c77f673f3198606",
      "tree": "e101cea80b6258fa478b702cfef622747f3f9e39",
      "parents": [
        "c91af0c12e24d56262a2c100d9e46de26b33fb91"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Oct 02 18:12:30 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Oct 02 18:12:30 2009 -0700"
      },
      "message": "Attempt to fix [2152536] ANR in browser\n\nThe ANR is caused by SurfaceFlinger waiting for buffers of a removed surface to become availlable.\nWhen it is removed from the current list, a Surface is marked as NO_INIT, which causes SF to return\nimmediately in the above case. For some reason, the surface here wasn\u0027t marked as NO_INIT.\n\nThis change makes the code more robust by always (irregadless or errors) setting the NO_INIT status\nin all code paths where a surface is removed from the list.\n\nAdditionaly added more information in the logs, should this happen again.\n"
    },
    {
      "commit": "df3e0b934f2822ea0a334777e51e681f04a64d7c",
      "tree": "188b19fa4ca3fdca0e9b56f1f712e8a5a99b2328",
      "parents": [
        "6656dbc81273424d9b4bf78c42a4e179dbe1cb71"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Sep 30 14:07:22 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Sep 30 14:07:22 2009 -0700"
      },
      "message": "fix [2152247] Windows sometimes drawn scaled up.\n"
    },
    {
      "commit": "6656dbc81273424d9b4bf78c42a4e179dbe1cb71",
      "tree": "8a4099c504d28f26b1e8cc33a4ff7b70303f12c1",
      "parents": [
        "7e4a587f6038bcf9b58ca615fce9e52fd47e30c3"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Sep 30 12:48:47 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Sep 30 12:48:47 2009 -0700"
      },
      "message": "invalidate the surface when the physical changes"
    },
    {
      "commit": "7e4a587f6038bcf9b58ca615fce9e52fd47e30c3",
      "tree": "702cbd56ed6a468aeb2c3f590dd7824984e4cb38",
      "parents": [
        "ba6be54876a19444f0b214b4b3b0749df227b013"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Sep 29 22:39:22 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Sep 29 22:44:28 2009 -0700"
      },
      "message": "introduce the notion of the requested size in the Layer state\n"
    },
    {
      "commit": "95a666b0e001ebf738418b89d8e8fd50b18110f8",
      "tree": "864a258efae49883ee0d85b66fbc6ba7201ef098",
      "parents": [
        "c5f0155d7f60b4eeb3194898c7772e18fd011402"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Sep 24 14:57:26 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Sep 24 14:57:26 2009 -0700"
      },
      "message": "minor SurfaceFlinger code cleanup and remove unnecessary tests\n"
    },
    {
      "commit": "401c257fba770a267f637184b1f532b4e03bed20",
      "tree": "5ed9e89c7436a7f738818287d7722ec6f98627b5",
      "parents": [
        "a2fe0a234bd6823f868742a3c137acb8875e1b03"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Sep 23 19:16:27 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Sep 23 19:16:27 2009 -0700"
      },
      "message": "turn dithering off if it\u0027s not needed\n"
    },
    {
      "commit": "8c0a3d75c8823e179d19c6303f64e669975a4d85",
      "tree": "049b3fe9067777c0da2eb94c5c5118d3bda557d6",
      "parents": [
        "dd3423c6247965bf67ea30c75e484a6f5d72b1a2"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Sep 23 16:44:00 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Sep 23 16:59:57 2009 -0700"
      },
      "message": "fix [2133214] STOPSHIP: revert I4a06bb4f: workaround for [2113743] Sholes: frozen then runtime restart going to list view\n\nRevert \"workaround for [2113743] Sholes: frozen then runtime restart going to list view\"\n\nThis reverts commit 4a06bb4f3355b0ef2b76aa883704da9d154c44ae.\n"
    },
    {
      "commit": "1f0ffc46fdb391a4d5a096f6b8c4554937ca081f",
      "tree": "f2520c83e88292384adb70bd2d8b03fdd58db92b",
      "parents": [
        "03268374fe506458e50b6c0ad6d333077883bb5e"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Sep 17 22:04:50 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Sun Sep 20 17:08:45 2009 -0700"
      },
      "message": "workaround for [2113743] Sholes: frozen then runtime restart going to list view\n"
    },
    {
      "commit": "6d9f69843bae31b2da9a8f2869547b1ff5d0654d",
      "tree": "ddf9997a99de47b84c5ca2e62218cf957dd2cae9",
      "parents": [
        "84adf49fa1f5fdcb749150436295aeb5054bc2ce"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Sep 17 19:19:08 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Sep 17 19:23:59 2009 -0700"
      },
      "message": "fix [2129080] Soft reboot after clicking around and then rubbing the screen\n"
    },
    {
      "commit": "caa600c4a1af1eefd108cf2ec3d86068af35111f",
      "tree": "52352fc6e797afa0cc59436e5bf7e317beccd131",
      "parents": [
        "378532fdb05814be7cbf03ec157abc95d296e203"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Sep 16 18:27:24 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Sep 16 18:27:24 2009 -0700"
      },
      "message": "fix [2119400] sholes: artifacting when switching orientation\n"
    },
    {
      "commit": "816d7d0268f98d891c44a8ac2e52711958abbf05",
      "tree": "b9a0abf4c6315c6984f9269b333f8f2b13ee8247",
      "parents": [
        "7ae8a14b7d18800e55befce263a6be9c7fc4f7e5"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Sep 14 18:10:30 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Sep 14 18:10:30 2009 -0700"
      },
      "message": "add support for RGBX_8888 surfaces in SurfaceFlinger\n"
    },
    {
      "commit": "48d819a1315f7d1b5abfec9d4fd34fb5aed27b1d",
      "tree": "610ef98303e468061f68511380991e4b65bd547a",
      "parents": [
        "b58b5d72d6877300fe39b2a30b4742c6f962833f"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Sep 10 19:41:18 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Sep 10 19:41:18 2009 -0700"
      },
      "message": "fix [2112575] stuck on DequeueCondition for a surface that doesn\u0027t exist anymore\n\nthis also fixes part of [2111536] Device is soft rebooted after ending the call through voice dialer\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": "d66a97950e8ef64051a4d497a91e5508254f77f6",
      "tree": "b4e1606b9113b79aee9e81cc2b5d68d7ae2ccbd6",
      "parents": [
        "238a66e67b155d7e1fcdb19b672ffc0ae4a6fc94"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Aug 13 19:08:00 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Aug 13 19:08:00 2009 -0700"
      },
      "message": "fix a bug that could cause a window to be hidden in some cases.\n\nthis would happen is the window is made visible but the client didn\u0027t render yet into it. This happens often with SurfaceView.\nInstead of filling the window with solid black, SF would simply ignore it which could lead to more disturbing artifacts.\n\nin theory the window manager should not display a window before it has been drawn into, but it does happen occasionnaly.\n"
    },
    {
      "commit": "ccde199f7ce916e42a45b5a50e937d9c17904da2",
      "tree": "5c2898152809f167bf29fbb723c027c49730e463",
      "parents": [
        "400f18045af0fc39f95c7e5736808648d19b28b4"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Aug 13 17:29:02 2009 -0700"
      },
      "committer": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Thu Aug 13 18:19:32 2009 -0700"
      },
      "message": "Surface::GPU and Surface::HARDWARE are now deprecated; they will be set automatically if needed.\n\nthis also ripples into the window manager API by making some constant there deprecated as well.\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": "9fbeb7c6e2b48ea5ee5696e7f8062a4118329567",
      "tree": "f73b2979645c688ba33de246b206bf2545f7c8a1",
      "parents": [
        "9cedf4c3f065f242380082a29434a47446b195c6"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Aug 07 19:08:18 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Aug 07 19:08:18 2009 -0700"
      },
      "message": "remove unused and confusing comment\n"
    },
    {
      "commit": "759fdb2ef735422d6b8c65e168fa9d1c24562a86",
      "tree": "043f7f5a9288a37b0e888ebb2d537930c154a149",
      "parents": [
        "84d1f7a09827fe195dd08b647b8c5092d03516f7"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Jul 02 17:33:40 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Jul 02 18:45:29 2009 -0700"
      },
      "message": "free gralloc buffers as soon as possible (when a surface is not visible any longer), client who have the buffers still mapped won\u0027t crash, btu may see garbage data\n"
    },
    {
      "commit": "1fed11c86a9d59d0f5282ae8ae25ceba2f802fdd",
      "tree": "940032f8fb572ae8096b79027382ddb0538404fd",
      "parents": [
        "9f8b0c909760aa5b866255fe08042a3200b736cc"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Jun 23 18:08:22 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Jun 23 18:08:22 2009 -0700"
      },
      "message": "checkpoint. bring back video/camera\n"
    },
    {
      "commit": "f9d932774e06d5122c48b47d8cabd791783f56d2",
      "tree": "e78c8148d0e3fcc166ebb3f4bd60c931ec956344",
      "parents": [
        "cd8c5e29c245e55a5f648b7a10f8586baf64e622"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Jun 19 17:00:27 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Jun 19 17:00:27 2009 -0700"
      },
      "message": "fix a memory corruption where a SF Client could be used after it\u0027s been destroyed\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": "0926f50664c739eaee60341f8e8c694dc9a4f3eb",
      "tree": "642597de2cc52f7636ae74f1a88f3706e3e54a4a",
      "parents": [
        "7be3e5d2d8101a8f5e12bbdf650431a734f88eba"
      ],
      "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": "7be3e5d2d8101a8f5e12bbdf650431a734f88eba",
      "tree": "d45d998a3a085ce95bc632095edd0f468391f0e7",
      "parents": [
        "18829d11aae5035b439dce157dca8867a0777d7a",
        "fb5982967eddeb19a2e6454961e37a32e0e1b986"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Apr 30 14:43:18 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Thu Apr 30 14:43:18 2009 -0700"
      },
      "message": "Merge commit \u0027goog/master\u0027 into merge_master\n\nConflicts:\n\tlibs/surfaceflinger/Layer.cpp\n\tlibs/surfaceflinger/SurfaceFlinger.cpp\n\topengl/libagl/egl.cpp\n\topengl/libs/EGL/egl.cpp\n\topengl/libs/GLES_CM/gl.cpp\n\topengl/libs/GLES_CM/gl_api.in\n\topengl/libs/gl_entries.in\n\topengl/libs/tools/glapigen\n"
    },
    {
      "commit": "2b42fa7fddafdfe27732813d79ca47a409a3b9c1",
      "tree": "fd60fb886045a715ba88f0b3dcf3f367fb8ceb6e",
      "parents": [
        "4c9ff468c94ff90f768ad933c50ffd9d9586f01c"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Apr 27 18:50:06 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon Apr 27 18:50:06 2009 -0700"
      },
      "message": "fix 1803886 android15 Translucent GLSurfaceView demo does not display properly\n"
    },
    {
      "commit": "550b79f4491909b0f223d8fb25155974f53b3f79",
      "tree": "9cd9235bdff13ba7d36a46ad83b3d1b4ca29a1be",
      "parents": [
        "cbc93ca8005d0a885d54b9a13c18ea07220feedf"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Apr 22 15:49:28 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Apr 24 16:31:11 2009 -0700"
      },
      "message": "get rid of an old hack to work around a bug around glDeleteTextures() in the adreno drivers\n"
    },
    {
      "commit": "0aa758d64ac530833ce9a311b164c9175a7a054c",
      "tree": "dffe53978839a5d7cf270d88a94f4c3b084a37fa",
      "parents": [
        "f1d8e87b09abf963cd5b6a026194c1940fadb7b4"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Wed Apr 22 15:23:34 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Apr 24 16:30:38 2009 -0700"
      },
      "message": "Surfaces are now destroyed properly in SurfaceFlinger.\n\nFirst, the window manager tells us when a surface is no longer needed. At this point, several things happen:\n- the surface is removed from the active/visible list\n- it is added to a purgatory list, where it waits for all clients to release their reference\n- it destroys all data/state that can be spared\n\nLater, when all clients are done, the remains of the Surface are disposed off: it is removed from the purgatory and destroyed.\nIn particular its gralloc buffers are destroyed at that point (when we\u0027re sure nobody is using them anymore).\n"
    },
    {
      "commit": "9a11206fe793363c0e8897b478cbe6ef8c52b543",
      "tree": "0b7fc29027a6803e1ab992f47f0dd66c2a3e3843",
      "parents": [
        "9f88afb013a7560bf1362d7999a4609e38d0ea77"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Apr 17 19:36:26 2009 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri Apr 24 15:00:41 2009 -0700"
      },
      "message": "more Surface lifetime management\n\nSurfaces are now destroyed once all references from the clients are gone, but they go through a partial destruction as soon as the window manager requests it.\nThis last part is still buggy. see comments in SurfaceFlinger::destroySurface()\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"
    }
  ]
}
