)]}'
{
  "log": [
    {
      "commit": "e5c6584a402fb3b1fe0507e4e00e601bec8f1bbc",
      "tree": "724a7a9622fe905b79f6efd37391c8daf135c1bc",
      "parents": [
        "c66f3baa42b8a732952abf1967c68f77d3e26131"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Mar 02 17:50:26 2015 -0800"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Mar 02 17:56:06 2015 -0800"
      },
      "message": "Constructor cleanup\n\nChange-Id: Ic39911d08f44c3174de91fb92fcd4cab73fe4654\n"
    },
    {
      "commit": "6b109c74982033d4a220cd10a0eab8b024b351c9",
      "tree": "1e812780630475ff43c9a7f84bcf392996b43ac0",
      "parents": [
        "26bf34200e40a0fa8c66366559aa016380cd8c6f"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Feb 27 10:55:28 2015 -0800"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Feb 27 16:13:26 2015 -0800"
      },
      "message": "Fix glop rendering within unclipped saveLayers\n\nbug:19541881\n\nAdditionally, clean up GlopBuilders\nand rename onGetSnapshot() for clarity\n\nChange-Id: I0303e4cd61eef87cf80af2d968c4aa67193cd008\n"
    },
    {
      "commit": "26bf34200e40a0fa8c66366559aa016380cd8c6f",
      "tree": "40603e6acbcd9f1d3a3b6f0c0a84314e70ca6f94",
      "parents": [
        "b11be294b1e721c08f3756626edfedea35711eb2"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Feb 26 16:28:17 2015 -0800"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Feb 27 10:50:12 2015 -0800"
      },
      "message": "Glop TextureLayer support\n\nChange-Id: I348a926bd4a2f47be9fdbe74058c0aa2f8dc6276\n"
    },
    {
      "commit": "f27133df2d179c99d6bc1ae644af09e9153a0071",
      "tree": "af4365366840b8a6c4be4ab337ea3edd22ebba99",
      "parents": [
        "a42d2eaf2d6b3cb6072e99b4904b76c8cc263cf3"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Feb 19 09:51:53 2015 -0800"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Feb 19 18:06:05 2015 -0800"
      },
      "message": "Glop layer mesh rendering\n\nChange-Id: I2d902819d5d77f496b67d4d25a298782903e410d\n"
    },
    {
      "commit": "117bdbcfa3e8306dad21e7e01fa71b00cdfa7265",
      "tree": "aa54e4a5538818cd946bbd6e7eb771b83d0cfebd",
      "parents": [
        "34725687748cc2b4ace2bdb49becfdcd569e9a5d"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Feb 05 10:12:38 2015 -0800"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Feb 06 13:42:25 2015 -0800"
      },
      "message": "Glop ColorFilter \u0026 VertexBuffer support, initial enable\n\nEnables Glop rendering for supported Rects and VertexBuffers\nAlso removes unused Query object\n\nChange-Id: Ibe227bc362685a153159f75077664f0947764e06\n"
    },
    {
      "commit": "44eb2c00861098dd3e2950d923646814b4cc57c2",
      "tree": "2d232b14b931137cc7ebb3b012c3ce4530fa5cf4",
      "parents": [
        "1b68ce327aa37ee0c4e9580d75cb6781337c4312"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Jan 29 09:45:09 2015 -0800"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Jan 30 10:49:05 2015 -0800"
      },
      "message": "Refactor blending and texture gl state\n\nChange-Id: Ia6b3c8b2afd3dfcee7f3ce401d846b789612054a\n"
    },
    {
      "commit": "65fe5eeb19e2e15c8b1ee91e8a2dcf0c25e48ca6",
      "tree": "2283afa7268a8c9c488eb533066881e2b24d73a5",
      "parents": [
        "d05d91358d89953a1374601a5b04b7ed65403e8c"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Jan 26 18:06:29 2015 -0800"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue Jan 27 17:12:39 2015 -0800"
      },
      "message": "Move scissor state to RenderState\n\nChange-Id: I1227a3886fb24e4d9fad79fca469794f06cfb15e\n"
    },
    {
      "commit": "d41c4d8c732095ae99c955b6b82f7306633004b1",
      "tree": "dbb2e26c6c5a80c7ccf43e5cd5fb1554cc603555",
      "parents": [
        "8dfaa4904205772cdceee63ef3989bcdedf1a914"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Jan 05 15:51:13 2015 -0800"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Jan 05 16:49:13 2015 -0800"
      },
      "message": "Add overrides and switch to nullptr keyword for all files\n\nAdds remaining missing overrides and nullptr usages, missed due to\nan extreme failure in tool usage.\n\nChange-Id: I56abd72975a3999ad13330003c348db40f59aebf\n"
    },
    {
      "commit": "06e7fe5a70409d2050b2b3e1286500f5223099da",
      "tree": "b7eea29ebe9ffc345f68a879199e2904c5c78423",
      "parents": [
        "b946358bb5afd9db6a0914171d3f237c77abbfea",
        "f2235b6a48db2e16b52711570bf2a0d0cb0b0d90"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Nov 20 17:27:36 2014 -0800"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Nov 20 17:27:36 2014 -0800"
      },
      "message": "resolve merge conflicts of f2235b6 to master.\n\nChange-Id: Ibcef3a37ca0749931d509b53bd52e53a7d30ddbb\n"
    },
    {
      "commit": "70850ea258cbf91477efa57a1f1a23cc0044cc93",
      "tree": "674621c2adc816afae2a1d09291fcd4af12b08e7",
      "parents": [
        "6c912b7d056c67b41fd46f31de168795e97c2336"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue Nov 18 10:49:23 2014 -0800"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Nov 19 17:24:30 2014 -0800"
      },
      "message": "Improve logging around performance critical events\n\nbug:17702227\n\nAdd details useful to developers (such as layer size/View name), and\nswitch away from logging implementation names/details, since they\nare generally not relevant to developers.\n\nChange-Id: Iee605d182f241450f7e75a6d0c283d51fa1312f5\n"
    },
    {
      "commit": "984162fb7e4010b6e2908352dbff17ed47eecf06",
      "tree": "0b15f1e5bdd1485862dd1f9098e4c94bc033df77",
      "parents": [
        "a5545d24c7289c25707ffa8704b57a37cea6535a"
      ],
      "author": {
        "name": "Tom Hudson",
        "email": "tomhudson@google.com",
        "time": "Fri Oct 10 13:38:16 2014 -0400"
      },
      "committer": {
        "name": "Tom Hudson",
        "email": "tomhudson@google.com",
        "time": "Tue Nov 04 17:16:36 2014 -0500"
      },
      "message": "Replace StatefulBaseRenderer inheritance with CanvasState member\n\nIncrementally disentangles DisplayListRenderer and OpenGLRenderer.\nIntroduces abstract CanvasStateClient class to share three functions\nbetween the two.\n\nDesign doc at https://docs.google.com/a/google.com/document/d/1PY1JF7AfPEF2UOUAnETS5j_4_tnJShTAMExvpCJfP8o/edit?usp\u003dsharing.\n\nBUG:15672762\nR\u003ddjsollen@google.com,ccraik@google.com,jreck@google.com\n\nChange-Id: Ic9fdffe18808e7d921ad06d01ea1ca25b2ad6f23\n"
    },
    {
      "commit": "107843de4507b3511006cb9c77b8d0364374385a",
      "tree": "02b2f6181dbd8665638b174c2819f289a40551fd",
      "parents": [
        "daccecb263cad36b55dd84e25709d543ee887202"
      ],
      "author": {
        "name": "Tom Hudson",
        "email": "tomhudson@google.com",
        "time": "Mon Sep 08 11:26:26 2014 -0400"
      },
      "committer": {
        "name": "Tom Hudson",
        "email": "tomhudson@google.com",
        "time": "Tue Nov 04 15:49:44 2014 -0500"
      },
      "message": "Remove status return from all uirenderer::Renderer functions\n\nThis moves the interface closer to android::Canvas. The only use of\nreturn values was in the OpenGLRenderer subclass; that is replaced\nwith an internal dirty flag: returned from finish(), checked by\nCanvasContext.\n\nThis is part of a series of CLs to refactor the Graphics JNI bindings.\n\nBUG:15672762\nR\u003ddjsollen@google.com,ccraik@google.com\n\nChange-Id: Ifd533eb8839a254b0d3a5d04fc5a2905afdfc89e\n"
    },
    {
      "commit": "0e89e2b7bcb2c035e8cee77f93120e7c5617f8d2",
      "tree": "8fcd1f768f08fbeb2cd13425a2bf15b7670428f2",
      "parents": [
        "141823ec6313d9545b8354ea1e3e017a1da3cfa8"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Fri Oct 31 14:49:06 2014 -0700"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Fri Oct 31 15:30:10 2014 -0700"
      },
      "message": "Layer changes\n\nBug: 17208461\n\n* Switch Layer to be VirtualLightRefBase instead of\n  Caches\u0027 side-channel ref-counting\n* Include active layers in gfxinfo dump\n* Run gfxinfo dump on the correct thread\n* Dump gfxinfo on Layer creation failure\n\nChange-Id: I28d195699e2334518e215ab28c7a17355aee9678\n"
    },
    {
      "commit": "8a226d24b8b2fde4c855d0051cb7bfc5b5813c36",
      "tree": "dff0340b91172e35a5e2bff67e013e2fd27623ca",
      "parents": [
        "95e71085e2d6f9482679a2a5c34d3d7fbc7d39c6"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Sep 08 16:40:21 2014 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Sep 08 16:44:47 2014 -0700"
      },
      "message": "Don\u0027t track TextureLayer lifecycles in RenderState\n\nbug:17208461\n\nThey are destroyed via finalizer-enqueued destroy method, so it\u0027s not\nvalid to check that they\u0027ve been destroyed at gl context destruction\ntime.\n\nChange-Id: I670f69825547facd5f31d44acb406418881fee00\n"
    },
    {
      "commit": "ec4cefc152749f9805d3a971a4a395687b5a3831",
      "tree": "175982729ee6838969d9cdcfa96cc0a84b1f18e0",
      "parents": [
        "ea4f01070a9c8f5147eb228c413a84de78d98973"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Tue Jul 29 09:49:13 2014 -0700"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Tue Jul 29 10:04:01 2014 -0700"
      },
      "message": "Add layer/texture creation tracing\n\nChange-Id: I0af6a36c97a9f5f35d28e0e36539ba8d8011ea7c\n"
    },
    {
      "commit": "1103b3255945d2eb2fa9c191e84e2270b343cca9",
      "tree": "3dd01f46c6a3479974410024250408950ad9859f",
      "parents": [
        "a3bf3e5c849bfb3bf0a74dcc06ef032355183c2e"
      ],
      "author": {
        "name": "Mike Reed",
        "email": "reed@google.com",
        "time": "Tue Jul 08 12:36:44 2014 -0400"
      },
      "committer": {
        "name": "Mike Reed",
        "email": "reed@google.com",
        "time": "Tue Jul 08 15:05:38 2014 -0400"
      },
      "message": "SkBitmap::Config is deprecated, use SkColorType\n\nChange-Id: Ic953741325607bf85598c097bb3ab648d4a08996\n"
    },
    {
      "commit": "3b20251a355c88193c439f928a84ae69483fb488",
      "tree": "33c878ebacf17cf03d089404474fa66ca041ffb9",
      "parents": [
        "97a6c20a6a52c9429ed2c8837086f3003e5da274"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Mon Jun 23 13:13:08 2014 -0700"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Mon Jun 23 15:26:49 2014 -0700"
      },
      "message": "No-fail invokeFunctor\n\n Bug: 15513308\n Bug: 15449247\n\nChange-Id: I13a29f9c8d4975cdda6dcb33b6332c2555ff0f7c\n"
    },
    {
      "commit": "11a8d4f8b99549262bcc9b64efe8ca21801c8f91",
      "tree": "825eae667d1106b0b25cca7be6532ab1a4376b13",
      "parents": [
        "658639c6bc43d06557be68f3b48d3263531b90e5",
        "678886fde5cd779de79f8e38479aa6de82f8e755"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@android.com",
        "time": "Tue Jun 17 01:31:16 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Jun 17 01:31:16 2014 +0000"
      },
      "message": "am 678886fd: am b1fc06a4: am 5e7ef948: Merge \"hwui: fix possible null pointer de-refrence\"\n\n* commit \u0027678886fde5cd779de79f8e38479aa6de82f8e755\u0027:\n  hwui: fix possible null pointer de-refrence\n"
    },
    {
      "commit": "1fa4cef34a8ac07e2ef15f2fef3dcfe520848c8d",
      "tree": "a04c06f56688c59682bc753a012ca73d30bbb448",
      "parents": [
        "1a3908e95926acd8add3858be571fe23fa9d047a"
      ],
      "author": {
        "name": "Digish Pandya",
        "email": "digishp@codeaurora.org",
        "time": "Thu Jun 12 10:42:54 2014 +0530"
      },
      "committer": {
        "name": "Digish Pandya",
        "email": "digishp@codeaurora.org",
        "time": "Fri Jun 13 17:14:50 2014 +0530"
      },
      "message": "hwui: fix possible null pointer de-refrence\n\nadd layer check for  null before de-refrencing it.\n\nissue link: http://code.google.com/p/android/issues/detail?id\u003d61622\n\nChange-Id: I54fc21ec594effcfb1eededd80dd5b0b52645c4c\n"
    },
    {
      "commit": "797b95b26bbb7557678af78b9a2a61830158920f",
      "tree": "b2e895c064c511446b2709160c9d614819f871b2",
      "parents": [
        "d6a91b0bb64b17dcf4ae635f428dfd4ad310f73e"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue May 20 18:10:25 2014 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed May 21 13:50:29 2014 -0700"
      },
      "message": "Define light position (using new lighting spec) in Java\n\nAlso updates the relative shadow strengths.\n\nChange-Id: I6cac7275d38df98aea9f0dda463cd7207102986a\n"
    },
    {
      "commit": "a64a2bef1048db5a742843f1e3bea9e80d0defc5",
      "tree": "7c66edd8039821862469a79602220a8041d01b10",
      "parents": [
        "a7e089f28c494f3c34e77f924b273acdbcf3ddd2"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed May 14 14:17:01 2014 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed May 14 17:27:52 2014 -0700"
      },
      "message": "Combine projection matrix, and viewport management\n\nMerge management of ortho projection matrix with the viewport size,\nsince they should always be changed together.\n\nChange-Id: Iccb8f30828f4fb7848999ac54852e7ed2d6f2eb1\n"
    },
    {
      "commit": "9757ac0b9d62f6aea5e47cfb375f445c78bb7897",
      "tree": "d17c80970154798e66dbf914974926b15fa33f61",
      "parents": [
        "5eb4adcbda0ff22e48716d3cf9356a9a720475b5"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue Feb 25 18:50:17 2014 -0800"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue Feb 25 18:50:17 2014 -0800"
      },
      "message": "Fix TextureView texture filtering.\n\nbug:11748993\n\nTextureView should always be drawn with linear filtering if drawing a\nbuffer sized differently from the layer.\n\nThis fixes a bug where TextureViews that were sized differently from\ntheir contents wouldn\u0027t be drawn with texture filtering, causing\nvisible scaling artifacts.\n\nChange-Id: I8a5d27452fe7269ec53896992f37cff51e3ce15a\n"
    },
    {
      "commit": "04fc583c3dd3144bc6b718fcac4b3e1afdfdb067",
      "tree": "4682660942c57456293a88bd3e78a28569ae9c71",
      "parents": [
        "740dfefcfcba7a254e65bda3ac0d965ca161458b"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Wed Feb 05 16:38:25 2014 -0800"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Mon Feb 10 20:55:39 2014 -0800"
      },
      "message": "Refactor HardwareLayer\n\n Defer all the things!\n Groundwork to allow hardware layers to work in a renderthread world\n\nChange-Id: Ib3aa47525f393083621254a743dbaa6352f933bd\n"
    },
    {
      "commit": "d6b65f67717025b1162f86f04e2caa5723566cac",
      "tree": "4905e0300916badc0fadf76018bf4d53fbe56669",
      "parents": [
        "14e513058ed4168c94e015638d16f5f87fd8063a"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Jan 01 14:45:21 2014 -0800"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Jan 02 12:57:41 2014 -0800"
      },
      "message": "Use const access to snapshot from OpenGLRenderer\n\nAdditionally, move clipping methods to StatefulBaseRenderer\n\nChange-Id: Iff232bf16fc1ad3b7d89493da6d8915db7bc5e4f\n"
    },
    {
      "commit": "14e513058ed4168c94e015638d16f5f87fd8063a",
      "tree": "1e66d02d2986e211d9e003ea2a3d09b9920f0dec",
      "parents": [
        "539394ec3aee7b5868c14e5e692684c8a875a3d4"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Dec 30 15:32:54 2013 -0800"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Jan 01 13:59:13 2014 -0800"
      },
      "message": "Move Snapshot management to intermediate StatefulBaseRenderer class\n\nThe eventual goal is for the StatefulBaseRenderer to serve as the\ncommon base class between the DisplayListRenderer and OpenGLRenderer.\n\nThis will separate DisplayList recording, Snapshot stack management,\nand the GL in OpenGLRenderer.\n\nAdditionally, avoid sp\u003c\u003e parameters, and use const parameters in\nseveral places, with the intent of greatly reducing the surface area\nwhere renderer subclasses can modify snapshot stack.\n\nNext steps:\n-move bulk of clipping logic into StatefulBaseRenderer\n-disable direct snapshot access\n\nChange-Id: Ibc3c6747134ec7daf8ea535866239fa73b874390\n"
    },
    {
      "commit": "448455fe783b0a711340322dca272b8cc0ebe473",
      "tree": "e67a3894b8d1fc2cdfd08e7f45ff54c37070d279",
      "parents": [
        "e4d4e20e8f84d53b4b7198300baaf3e21ff9be58"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Jul 22 13:57:50 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Jul 22 14:37:21 2013 -0700"
      },
      "message": "Use global indices array to draw layers\n\nAn array of indices local to a layer would only be necessary if\nwe changed the way we resolve T-junctions. Since we only ever\ndraw quads, let\u0027s just use the indices we use everywhere else.\n\nThis change also uses the global indices array to render list\nof colored rectangles to save on the number of vertices generated\nCPU-side.\n\nChange-Id: Ia6d1970b0e9247805af5a114ca2a84b5d0b7c282\n"
    },
    {
      "commit": "4c2547fa9244e78115cde0a259291053108c3dc7",
      "tree": "4337937e216918e4febe861daa7ef093b99aff03",
      "parents": [
        "fadd2081443dd2f59f8e8143256a34b7485fe72e"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jun 11 16:19:24 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jun 11 17:14:59 2013 -0700"
      },
      "message": "Avoid 9patch cache lookups when possible\n\nThis optimization saves up to 0.3ms per frame on the Play Store\u0027s\nfront page, on a Nexus 4 device.\n\nChange-Id: Iaa4ef33c6e3b37e175efd5b9eea9ef59b43f14f3\n"
    },
    {
      "commit": "be1b127c7bec252e0c6ab0e06ed6babed07d496f",
      "tree": "eaab57886d7cd44e10da155d3dc6188a30b2b17b",
      "parents": [
        "f69913056b8c6000ff0306573a97971702e8d35a"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jun 06 14:02:54 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jun 06 16:26:51 2013 -0700"
      },
      "message": "Assume a texture is unbound after deleting it\nBug #9316260\n\nThe GL specification indicates that deleting a bound texture has\nthe side effect of binding the default texture (name\u003d0). This change\nreplaces all calls to glDeleteTextures() by Caches::deleteTexture()\nto properly keep track of texture bindings.\n\nChange-Id: Ifbc60ef433e0f9776a668dd5bd5f0adbc65a77a0\n"
    },
    {
      "commit": "8aa195d7081b889f3a7b1f426cbd8556377aae5e",
      "tree": "6cd0ab4181c25d3113c4e39b49e8f8a0c7d12b8b",
      "parents": [
        "84f3c5689cffbfc1e45a0101d5bb636323769f54"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jun 04 18:00:09 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jun 04 18:58:36 2013 -0700"
      },
      "message": "Introduce Caches::bindTexture() to reduce glBindTexture calls\n\nChange-Id: Ic345422567c020c0a9035ff51dcf2ae2a1fc59f4\n"
    },
    {
      "commit": "0908764b2b3cf5075df4178a5f0a8547dcb7b317",
      "tree": "c69db8d815ad1d0b0172e7a20827254627800dad",
      "parents": [
        "df1dc28ba0c63b195016ad0453fc58025ee82acb"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Apr 04 12:27:54 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Apr 04 12:27:54 2013 -0700"
      },
      "message": "First OpenGL ES 3.0 based optimization\n\nThis change uses a new OpenGL ES 3.0 feature to upload less data when\nthe font cache needs to be update. This can result in significant\nperformance improvements on device with large textures or with locales\nthat use a lot of glyphs (CJK for instance.)\n\nThis change also fixes various unpack alignment issues. The unpack\nalignment, as well as the unpack row length, is not texture specific\nbut a global state that affect all glTex/SubImage2D calls. Some of\nthem were missing the appropriate glPixelStorei() call. This could\nresult in corrupted textures.\n\nChange-Id: Iefb429d4d0d0b4e0faeadf27daafee6d30a21d85\n"
    },
    {
      "commit": "ce4a7dfc516ee61301e9af91fad17ca1320efaab",
      "tree": "3e0cfe4e2be851d15a5e240c4983ea5ecff1513b",
      "parents": [
        "4500a8d5d7fbec9dba5e693212da160849e401ff"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Mar 28 11:32:33 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Mar 28 11:32:33 2013 -0700"
      },
      "message": "Don\u0027t crash when making a layer larger than supported dimensions\nBug #8437401\n\nA misplaced ref count decrement was causing a crash when attempting to\nresize a layer to dimensions larger than the max texture size supported\nby the GPU.\n\nThis change fixes the crash and clarifies the warnings to make it more\nobvious what\u0027s happening.\n\nChange-Id: I632dc1b90aaa2605969e10523491a81c4922d3dc\n"
    },
    {
      "commit": "96885eb480c5e0526fe2f77d30f6e551f3f3ceab",
      "tree": "17bee5ff04c63bf1415696b02374c60e584a0542",
      "parents": [
        "7c566bf3e4a10d74588b3e92ea3f6af310930f37"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Mar 26 15:05:58 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Mar 26 15:25:07 2013 -0700"
      },
      "message": "Avoid multiple font cache texture uploads\nBug #8378964\n\nThis change defers drawing into layers until after the renderer for FBO0\nis ready to draw. At that point, all the precaching is done which means\nall glyphs can be uploaded at once in the font caches.\n\nChange-Id: Ie1f7a7ff30f76f06fb3dbc72c7d05e66207d1ecb\n"
    },
    {
      "commit": "624234f69b2a4781d24f3e4c6ae6450729e38397",
      "tree": "d6ae0bfd751e0e59329cb678c1d9f1cec447ee3e",
      "parents": [
        "0b58a3deab66c30a8d35072e55aac6279dd367cc"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Mar 05 16:43:31 2013 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Mar 05 18:12:35 2013 -0800"
      },
      "message": "Take only the scale params into account to rasterize text\n\nThis change extracts the scale parameters of the current transform\nto pass then to the font renderer. Rotation and perspective are\napplied to the generated mesh inside the vertex shader. This limits\nthe number of glyphs we have to create in the font cache and thus\nreduces memory churn.\n\nChange-Id: Ic5b3bae2b2b0e0250a8ee723b071a1709725c749\n"
    },
    {
      "commit": "6c5b9be7450903762f676522c32d65f7545730df",
      "tree": "4f0930eca0d1481506628100dbc3def1bdf24c45",
      "parents": [
        "be1a8cda3e8113d1fd3a6e56d8bc6c4f2d350423"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Feb 27 14:03:19 2013 -0800"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Feb 27 14:03:19 2013 -0800"
      },
      "message": "Fix T-junctions in layers\u0027 generated meshes\n\nbug:4128442\n\nCurrently we fix T-junctions for hardware layers, and for\nCanvas.saveLayer if the transform isn\u0027t rectAsRect. Ideally, hardware\nlayers should lazily re-generate T-junction free geometry if the\ntransform becomes non-rectAsRect\n\nDepends on frameworks/native change:\nhttps://googleplex-android-review.googlesource.com/#/c/277668/\nwhich adds Region::createTJunctionFreeRegion()\n\nChange-Id: Ice75b4a1a4459ff835059ea81d70f7d1563fd96d\n"
    },
    {
      "commit": "3bbacf27c0be1bae4e4483577fc89ae3113abe5d",
      "tree": "102ffa5362c1782af27f2f0abad3e9f481479e79",
      "parents": [
        "c2a972131f1870042eb63847d4b24fbe718d8e3f"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Feb 06 16:51:04 2013 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Feb 07 12:11:22 2013 -0800"
      },
      "message": "Add a RenderBuffer object to store stencil buffers.\nBug #7146141\n\nThis change is needed to add a render buffer cache to avoid\ncreating and destroying stencil buffers on every frame.\n\nThis change also allows the renderer to use a 1 bit or 4 bit\nstencil buffer whenever possible.\n\nFinally this change fixes a bug introduced by a previous CL\nwhich causes the stencil buffer to not be updated in certain\nconditions. The fix relies on a new optional parameter in\ndrawColorRects() that can be used to avoid performing a\nquickReject on rectangles generated by the clip region.\n\nChange-Id: I2f55a8e807009887b276a83cde9f53fd5c01199f\n"
    },
    {
      "commit": "c3fedafc5f50100219449125a000e3138f6fb987",
      "tree": "830bacf80a5b9e4194de2d221199dc86efe75555",
      "parents": [
        "8c47e856b067057b5fcbb6eccfc79d1da4cff8f1"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jan 29 17:26:25 2013 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jan 29 17:46:17 2013 -0800"
      },
      "message": "Fix graphical corruption on QCOM GPU\nBug #7146141\n\nThe GL_QCOM_tiled_rendering extension requires careful use of\nstart/endTiling when attaching a renderbuffer dynamically.\n\nChange-Id: I20036683ed3909ffaf40cc3d57a25257e35b6fa2\n"
    },
    {
      "commit": "2055abaa0a590c35e27e1ae2e7d7cfccdfb98b59",
      "tree": "1e302d08b6aa3714048a4d8435aa44f155c998c9",
      "parents": [
        "f25febf01453733e8bdd1ac241ecd9d3bcbef475"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Jan 18 16:42:51 2013 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Jan 18 16:42:51 2013 -0800"
      },
      "message": "Allow layers with a stencil buffer to be resized on the fly\nBug #7146141\n\nThis change moves the resizeLayer() from LayerCache (where it should\nnever have been anyway) to Layer. This makes a little more sense.\n\nChange-Id: I8b2f9c19c558e738405a58b9e71ec5799fc6be88\n"
    },
    {
      "commit": "8ce00301a023eecaeb8891ce906f67b513ebb42a",
      "tree": "3b14c80a49cbec537aad39aa4bb266cac41102f7",
      "parents": [
        "0f8d155363c361199a9d9aa5dcdbc4088990f893"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jan 15 18:51:42 2013 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jan 17 15:39:31 2013 -0800"
      },
      "message": "Implement clipRect with a transform, clipRegion \u0026 clipPath\nBug #7146141\n\nWhen non-rectangular clipping occurs in a layer the render buffer\nused as the stencil buffer is not cached. If this happens on a\nView\u0027s hardware layer the render buffer will live for as long\nas the layer is bound to the view. When a stencil buffer is\nrequired because of a call to Canvas.saveLayer() it will be allocated\non every frame. A future change will address this problem.\n\nIf \"show GPU overdraw\" is enabled, non-rectangular clips are not\nsupported anymore and we fall back to rectangular clips instead.\nThis is a limitation imposed by OpenGL ES that cannot be worked\naround at this time.\n\nThis change also improves the Matrix4 implementation to easily\ndetect when a rect remains a rect after transform.\n\nChange-Id: I0e69fb901792d38bc0c4ca1bf9fdb02d7db415b9\n"
    },
    {
      "commit": "7c25aab491707f7324f9941b8cfa9bd2b4b97e76",
      "tree": "2e670c818c33bf2ead5342dad73b48e000d2e94c",
      "parents": [
        "b2e2f2470693e78baed20617f989d9a166864ed4"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Oct 18 15:05:02 2012 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Oct 18 15:05:02 2012 -0700"
      },
      "message": "Defer layer rendering to avoid stalls\nBug #7326824\n\nWhen a layer is taken out of the cache and initialized it gets cleared\nto prepare it for future rendering. This triggers the following sequence\nof operations:\n\nglBindFramebuffer(layer.fbo)\nattach texture storage to FBO\nglClear()\nglBindFramebuffer(defaultFbo)\n\nThe clear forces a resolve on tilers which stalls the CPU for a little\nwhile, thus producing jank during animations. This change moves the\nclear to the next frame when we know we will have to execute a resolve\nanyway.\n\nChange-Id: Ic1939c25df20ed65a4c48dc81ee549b2cd8b6ec3\n"
    },
    {
      "commit": "98d3a64ffa13596e3ea9125bbff40c51ec96bd8d",
      "tree": "306cfeea0b0834f3b832a4dba12f6395ea9da097",
      "parents": [
        "4e1ab15b305aac26ad8819fc3b2951e20985944d"
      ],
      "author": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Wed Sep 26 10:27:40 2012 -0700"
      },
      "committer": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Wed Sep 26 11:01:42 2012 -0700"
      },
      "message": "Assign default texture id of 0\n\nSome logic depends on a default value of 0, which was not being\nassigned.\n\nIssue #7195815 chrome url bar is corrupted\nIssue #7190656 Textures corrupted on mr1\n\nChange-Id: I346b7b76e885bf8f04740e711fd88f917a5418c7\n"
    },
    {
      "commit": "56257aff8a55c847be72be9924c392033fd8151d",
      "tree": "5e31b76ebbf03e281ccaeceec24882660e7de47e",
      "parents": [
        "8a1374946a928fcba7495c87ff6adda327fdfb9f"
      ],
      "author": {
        "name": "Dave Burke",
        "email": "daveburke@google.com",
        "time": "Tue Sep 25 20:30:09 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Sep 25 20:30:09 2012 -0700"
      },
      "message": "Revert \"Deleting objects on the wrong thread is a silly idea Bug #7195815\"\n\nThis reverts commit 8a1374946a928fcba7495c87ff6adda327fdfb9f\n\nChange-Id: I53564a6c531d334afcc1fce0bea1e57ae266aa78\n"
    },
    {
      "commit": "8a1374946a928fcba7495c87ff6adda327fdfb9f",
      "tree": "ab6b1d092aec1b19751e820c3e18a10c21a40759",
      "parents": [
        "1ab8a08a9b85aa62045a6a78fd93859382c88b0f"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Sep 25 15:49:03 2012 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Sep 25 15:49:03 2012 -0700"
      },
      "message": "Deleting objects on the wrong thread is a silly idea\nBug #7195815\n\nTurns out that multi-threading is hard.\n\nChange-Id: Ib0b4bd6dc3caea27f7ced22cbb363bb955fe58ab\n"
    },
    {
      "commit": "61d37041ac76a95aedb98d3550bb5efa33d898a1",
      "tree": "cffd7916bceba166b3cff01054a092ca52c7bc44",
      "parents": [
        "739bc9e3f51c203fc0b58c30d67cacda985e95c6",
        "710f46d9d6a5bf9ea1c1833384caf61e1934124f"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Sep 21 11:03:59 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Sep 21 11:03:59 2012 -0700"
      },
      "message": "Merge \"Polygonal rendering of simple fill shapes\" into jb-mr1-dev"
    },
    {
      "commit": "11cb642756093a4af901b1525375b1eb2b5c3e2b",
      "tree": "b412ad763bb1cc240c65c7545a208e4e709c0b30",
      "parents": [
        "3e87eafc7d1aef95801f1758bb78da8b2f960a75"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Sep 21 00:39:43 2012 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Sep 21 00:39:43 2012 -0700"
      },
      "message": "Update layers in a single batch at the beginning of a frame\nBug #7186819\n\nChange-Id: Ice5926dfedfb3be3a3064e65008dafa2852407da\n"
    },
    {
      "commit": "710f46d9d6a5bf9ea1c1833384caf61e1934124f",
      "tree": "5dbc56cf9b6bb957f9cbdaaff7283d44897b265d",
      "parents": [
        "5ca88a103c2841b64bfa01b4848aec4b8aa64687"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Sep 17 17:25:49 2012 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Sep 20 13:08:20 2012 -0700"
      },
      "message": "Polygonal rendering of simple fill shapes\n\nbug:4419017\n\nChange-Id: If0428e1732139786cba15f54b285d880e4a56b89\n"
    },
    {
      "commit": "35643ddc689913f5b5f80ceed864470d987bd6cd",
      "tree": "db2ac0933bc52d1c71aa7d0edfd94c06dcc2cf2a",
      "parents": [
        "29d0aa73a099fde05c506857b5d215cde87b78d6"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Sep 18 15:40:58 2012 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Sep 18 15:41:16 2012 -0700"
      },
      "message": "Minimize state changes when updating layers\n\nChange-Id: I407fcc80bd3178f9f09a3b379ceb7f7ce0749e08\n"
    },
    {
      "commit": "603f6de35f21d74ae242d52d501f4f5c25ff4f4c",
      "tree": "b249a7750a60b445a43670b7ba540beecbe715db",
      "parents": [
        "cc5dd18d15a174799ad79d26633c268e8860c8ab"
      ],
      "author": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Fri Sep 14 15:31:25 2012 -0700"
      },
      "committer": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Mon Sep 17 11:21:34 2012 -0700"
      },
      "message": "Fix occasional crash bug with layers\n\nLauncher occasionally crashes with a stack trace indicating that the memory\nof a Layer object is corrupt. It is possible for us to delete a Layer\nstructure and then, briefly, use it to draw a DisplayList again before\nthat DisplayList gets recreated (without the layer that got deleted).\n\nWhen this happens, if the memory got corrupted, it\u0027s possible to crash.\n\nThe fix is to add Layer to the other objects which we currently refcount\n(bitmaps, shaders, etc.). Then instead of deleting a Layer, we decrement the\nrefcount. We increment when creating it, then increment it again when it\u0027s\nreferenced from a DisplayList. Then we decrement the refcount instead of\ndeleting it, and decrement when we clear a DisplayList that refers to it.\nThen when the refcount reaches 0, we delete it.\n\nIssue #6994632 Native crash in launcher when trying to launch all apps screen\n\nChange-Id: I0627be8d49bb2f9ba8d158a84b764bb4e7df934c\n"
    },
    {
      "commit": "45e4c3df6c00ac98ff6144de9af574877d4fff19",
      "tree": "206209b5faf3bb4c63366d29e8891bc53783d232",
      "parents": [
        "f625436cc741932518e5f1a41586c72ac8297ece"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Sep 11 17:17:07 2012 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Sep 11 17:30:43 2012 -0700"
      },
      "message": "Discard framebuffer commands when we redraw the entire buffer\n\nChange-Id: I32e3014832cbd3bdbace8c3d2206eb20a2002d64\n"
    },
    {
      "commit": "e49d7ec36132f33b7c9e2c044ab9dd3585aa3747",
      "tree": "1321a0c086c3b17de0d3c4a62645f672fa511d6d",
      "parents": [
        "1558cf1498ecc687532f2dad3de720053dca9309"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Sep 07 18:42:38 2012 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Sep 07 18:42:38 2012 -0700"
      },
      "message": "Fix memory corruption in LayerRenderer::copyLayer\n\nThe pixel store pack alignment was not set for the source texture,\ncausing a write to occur outside of the destination bitmap\u0027s\nbounds.\n\nChange-Id: Iaa5767acf7b5943fbc2765c3810a142f06b1a796\n"
    },
    {
      "commit": "4ff0cf4b83605bff630c4e6f1fabe4f72a3f93a1",
      "tree": "2616ad1230b8ebc22a720945c5841a36572b9545",
      "parents": [
        "bec1d13da2ef3c8c2c4cc4f740474d095068bd8b"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Aug 06 14:51:10 2012 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Aug 06 14:51:10 2012 -0700"
      },
      "message": "Add new debug tool to track hardware layers updates\n\nYou can setprop debug.hwui.show_layers_updates true to flash\nhw layers in green when they update. This is also a setting\nin the Dev. section of the settings app.\n\nChange-Id: Ibe1d63a4f81567dc1d590c9b088d2e7505df8abf\n"
    },
    {
      "commit": "586cae3ac69c0c667fbf8a954edbd399f620a717",
      "tree": "400d845a02c1ff3e36db59835072bf23efa789e7",
      "parents": [
        "9c0b188e4231bcb967234f3646c178d22d8a9f50"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Jul 13 15:28:31 2012 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Jul 13 15:28:31 2012 -0700"
      },
      "message": "Improve rendering speed by disabling scissor tests\n\nThis change improves execution of display lists, particularly on\ntiled renderers. The goal is to disable the scissor test as\noften as possible. Drawing commands are rarely clipped by View\nbounds so most of them can be drawn without doing a scissor test.\n\nThe speed improvements scale with the number of views and drawing\ncommands.\n\nChange-Id: Ibd9b5e051a3e4300562463805acc4fd744ba6266\n"
    },
    {
      "commit": "44b2fe3fc114ee5f7273c6b0fee2cc999bf244a2",
      "tree": "8d54bda8c5b7021be5d923beb641a9efb22dcf30",
      "parents": [
        "43fa4c5261a732decae3bbfaea2a00f8bb9b709c"
      ],
      "author": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Wed Jun 06 19:03:58 2012 -0700"
      },
      "committer": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Thu Jun 07 06:25:04 2012 -0700"
      },
      "message": "Track canvas clearing for swap buffers logic.\n\nA previous fix made it necessary for a frame to render something to GL\nin order to cause a call to eglSwapBuffers(). Besides the calls being\ntracked as part of issuing a DisplayList, there is also a potential call\nto clear the canvas (via glClear()) on non-opaque surfaces. This call is also\ngood to track, since a surface that gets cleared without any other drawing operations\nis worth flipping to the screen (to erase old contents on that surface).\n\nThis fix tracks the status of the pre-draw operations to find out whether\nglClear() was called and then sets the drawing status appropriately.\n\nIssue #6606422 QuickContact dismissal is janky again (Tracking)\n\nChange-Id: I5fcaccfdc9293dd46b83f2fc279730a5d2740ebf\n"
    },
    {
      "commit": "5c88fc744db977ef26887df9605beaa409394806",
      "tree": "3c782510909ace46a555514d9b08044289107406",
      "parents": [
        "6db53c34a7fe8fdc2a8775dc5a400776e2716d38"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Apr 02 17:43:05 2012 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Apr 02 17:45:25 2012 -0700"
      },
      "message": "Prevent crash when flushing the layers cache\nBug #6258973\n\nWhen flushing the layer caches we would attempt to delete the FBOs\nassociate with layers in the cache. The FBO property was however not\nalways properly cleared when recycling layers.\n\nChange-Id: I7dedfe391d659a0849f1e1d84df17313b2c6e2b2\n"
    },
    {
      "commit": "8564c8da817a845353d213acd8636b76f567b234",
      "tree": "71acbd8ace822c769aef917629bf5a079f63274d",
      "parents": [
        "c42e6a0bed2c88fd03466c5104d62d7f98e68768"
      ],
      "author": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Thu Jan 05 23:22:43 2012 +0000"
      },
      "committer": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Fri Jan 06 10:07:54 2012 +0000"
      },
      "message": "Rename (IF_)LOGW(_IF) to (IF_)ALOGW(_IF)  DO NOT MERGE\n\nSee https://android-git.corp.google.com/g/157065\n\nBug: 5449033\nChange-Id: I00a4b904f9449e6f93b7fd35eac28640d7929e69\n"
    },
    {
      "commit": "5baa3a62a97544669fba6d65a11c07f252e654dd",
      "tree": "109755e1595b438873d34b981e31f84ea64bd2a5",
      "parents": [
        "173ab4d61077c49f115b82eff34f97fda5a7273a"
      ],
      "author": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Tue Dec 20 16:23:08 2011 +0000"
      },
      "committer": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Tue Jan 03 22:38:27 2012 +0000"
      },
      "message": "Rename (IF_)LOGD(_IF) to (IF_)ALOGD(_IF)  DO NOT MERGE\n\nSee https://android-git.corp.google.com/g/156016\n\nBug: 5449033\nChange-Id: I4c4e33bb9df3e39e11cd985e193e6fbab4635298\n"
    },
    {
      "commit": "a1d3c91afbd52c7e8b01f4a9060c5459f02ae7a5",
      "tree": "25fabe19bc7667a756c27aec7b541acee0f49def",
      "parents": [
        "e829bc0f0364e942bed01536d115a5c08d25d776"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Dec 13 14:55:06 2011 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Dec 13 14:58:14 2011 -0800"
      },
      "message": "Further reduce the number of GL commands sent to the driver\n\nChange-Id: Id922b2a166ea4573b767c27d3195e11c70320b23\n"
    },
    {
      "commit": "39d252a6632d057d5077f7eaf1b8ed7a142f3397",
      "tree": "c840b4084ba7fb8be54b0d387953cc6a15decbdd",
      "parents": [
        "f44e66fcf70aa4a354deca72dfbd3b29c29302be"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Dec 12 18:14:06 2011 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Dec 12 18:14:06 2011 -0800"
      },
      "message": "Various OpenGL optimizations\n\nChange-Id: Ib0742c96f10f5f50e7e5148b742c31b6c232d127\n"
    },
    {
      "commit": "3e263fac8c9c0e0fb242186b514a7af8efb40961",
      "tree": "c4333a2489886c933172a5cd271c8bda0796324a",
      "parents": [
        "6752d0ab029a185a42e34e7a933b669e6ed19e89"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Dec 12 16:47:48 2011 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Dec 12 16:47:48 2011 -0800"
      },
      "message": "Keep shaders to render properly\n\nI don\u0027t know who\u0027s to blame, SGX or Tegra2 but one of those two GPUs is not\nfollowing the OpenGL ES 2.0 spec.\n\nChange-Id: I2624e0efbc9c57d571c55c8b440a5e43f08a54f2\n"
    },
    {
      "commit": "9c4b79af221b53f602f946faa9ff317a596a0c39",
      "tree": "134a3a19b685c55dc23a08ae8929fb292333f768",
      "parents": [
        "e98ae0a050d6ce4b3e2aec7c070a87922086c256"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Nov 10 19:23:58 2011 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Dec 06 16:37:10 2011 -0800"
      },
      "message": "Discard framebuffer rendering queues when discarding layers\nBug #5581817\n\nChange-Id: Ie30700a29059d2ea60eb7bd3f8bd20ac48a149ab\n"
    },
    {
      "commit": "d21b6e1fe337b35f62cf2028e9bd0637fd009a75",
      "tree": "8831d34e2dd0335c158c2aa12bee68452745c8c5",
      "parents": [
        "28147b654bba8ae2b7976e58aa7869255e436b0b"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Nov 30 20:21:23 2011 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Nov 30 20:21:23 2011 -0800"
      },
      "message": "Optimize away unnecessary state changes\n\nChange-Id: I0f6816f9f6234853575ecee5033186ad19e76380\n"
    },
    {
      "commit": "7077506f9945b87b02bdd47ffce75a5b813c821c",
      "tree": "303448affa31375afa0a721d8d5555801ead8454",
      "parents": [
        "cde433c5f75fd4ac2ab31e9fc34654750d1e83f8"
      ],
      "author": {
        "name": "Dave Burke",
        "email": "daveburke@google.com",
        "time": "Mon Nov 14 11:39:30 2011 -0800"
      },
      "committer": {
        "name": "Dave Burke",
        "email": "daveburke@google.com",
        "time": "Mon Nov 14 11:39:30 2011 -0800"
      },
      "message": "Revert \"Discard framebuffer rendering queues when discarding layers\"\n\nThis reverts commit da96f8ac2c1c35a54f3f36e6d776cb386a251d03.\n"
    },
    {
      "commit": "da96f8ac2c1c35a54f3f36e6d776cb386a251d03",
      "tree": "646abfdfeee4346b422943924182162f4a3cdf84",
      "parents": [
        "50a66f0e9c5a85a6af4a99eb66656a69eba24572"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Nov 10 19:23:58 2011 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Nov 10 19:23:58 2011 -0800"
      },
      "message": "Discard framebuffer rendering queues when discarding layers\nBug #5581817\n\nChange-Id: If612846ec5f7793710fc4df152791fb32c506551\n"
    },
    {
      "commit": "5cd5c3f7e4df99f47e3def6e3707b9eb8205aef3",
      "tree": "30b4ba78109dad6bfdf2f22136740c01ec4fecb3",
      "parents": [
        "856d4e1a872b5aed6792b33e0360554cb3d19eed"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Oct 17 17:10:02 2011 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Oct 17 17:10:02 2011 -0700"
      },
      "message": "Return early when we cannot allocate a hardware layer\nBug #5462308\n\nChange-Id: I52dab809662f6f42a49ca03edc50f6b98fc35a06\n"
    },
    {
      "commit": "7953745dd565167113f8cbfc461bc0521d32d870",
      "tree": "f45d34b4b7a6c19c0a639be68e6455a116a93bca",
      "parents": [
        "0bbd8d8273c1dde9e0504f67bd8eb159bef2406a"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Oct 12 13:48:51 2011 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Oct 12 13:48:51 2011 -0700"
      },
      "message": "Reduce the size of libhwui by 50%\n\nThis change removes unnessary symbols. All symbols are hidden by\ndefault, public APIs with exported symbols are explicitly marked\nwith ANDROID_API.\n\nChange-Id: I692fde432a86c12108de1cfd1f6504919a7d5f3f\n"
    },
    {
      "commit": "a9dc86b21defc26db0d71f276aff5c3af0b62ff5",
      "tree": "e4274c53c5839ef4d6c658bc8b145a67db9568fb",
      "parents": [
        "098ffcd521cd272ee3a63174759cceeda618d2ef"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Oct 11 14:06:21 2011 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Oct 11 14:06:21 2011 -0700"
      },
      "message": "Correctly apply transforms when getting a TextureView\u0027s bitmap\nBug #5439406\n\nChange-Id: I271a9a2e38f5b3600dc158f8f442a6b0893f472b\n"
    },
    {
      "commit": "8a3957d43bcae93fbb9f6b4b4c3de8abdb3c953c",
      "tree": "53c8d8bbf6c229316644bdc8d492a658ceb8a4e3",
      "parents": [
        "7a57009c3ab5e4a55db448596a650261e878c975"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Sep 07 17:55:15 2011 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Sep 07 17:55:15 2011 -0700"
      },
      "message": "Add reminder in the code to fix T-junctions\n\nChange-Id: I52b112694f930e641f01fb78dc55412986023411\n"
    },
    {
      "commit": "65b345fa22b878e141b8fd8ece9c208df00fa40f",
      "tree": "587ba028a74320da19f8eeddbd4a2fb377e68cb4",
      "parents": [
        "6d7475d666baefaa3ba9f0dcee25238739454241"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jul 27 18:51:50 2011 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jul 27 18:51:50 2011 -0700"
      },
      "message": "Reclaim more memory, more often.\n\nYay.\n\nChange-Id: I04557ad575c307a55088549f48f0e9ad994b7275\n"
    },
    {
      "commit": "eea60692b060737faeaa02bb30f5b79e2202b482",
      "tree": "3dcf0aee4e80c38b0475250767a37901e686fde7",
      "parents": [
        "912a7b32d0c59ba38265c5dd6ff84ce93f909a7f"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jul 26 20:35:55 2011 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jul 26 20:35:55 2011 -0700"
      },
      "message": "Improve layers debugging\n\nChange-Id: Ia4950dd5f0e0a224ecb69c581d33aa4f32260a7c\n"
    },
    {
      "commit": "ec19b4a764d512091a780fc93ced567dfbf80914",
      "tree": "d984af1d55edf6bb305ca36617db679bc546f23a",
      "parents": [
        "9ace8f5e79e76893fe4ca9e4d10f6c4056330485"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jul 07 21:05:04 2011 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jul 07 21:27:14 2011 -0700"
      },
      "message": "Use NEAREST filtering mode for TextureView.getBitmap().\n\nChange-Id: I4649062bbdf18ebba7924bdf578f39ad8f6576ac\n"
    },
    {
      "commit": "9ace8f5e79e76893fe4ca9e4d10f6c4056330485",
      "tree": "dac712f57ecba04e50aac7c5934498d9be89c8a1",
      "parents": [
        "f61970fc79e9c5cf340fa942597628242361864a"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jul 07 20:50:11 2011 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jul 07 20:50:11 2011 -0700"
      },
      "message": "Use NEAREST filtering for layers whenever possible.\n\nChange-Id: Id5bee1bd4a322cf93e8000b08e18f1e1b058648e\n"
    },
    {
      "commit": "4a5a71518a71a44dbccb3af9a08b82056ea748b3",
      "tree": "d04dafb488a7bfde32e153980a6831c84f93833e",
      "parents": [
        "80429c458506485904715180d10584092a5cd082"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Jun 24 17:53:53 2011 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Jun 24 17:53:53 2011 -0700"
      },
      "message": "Don\u0027t set texture parameters on every frame.\n\nChange-Id: Iec368405ad6a4ccfd569a0b3b4d681871a770396\n"
    },
    {
      "commit": "80429c458506485904715180d10584092a5cd082",
      "tree": "7a7daee4889e2f9dd679a98b12e38ccb2dbed743",
      "parents": [
        "58f4edb7701bf20925468fa5fd1a06a461ff085b"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Jun 24 17:20:32 2011 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Jun 24 17:20:32 2011 -0700"
      },
      "message": "Properly tear down TextureView\n\nChange-Id: Ic23cd9257889d0abe8cc3fc1d04a66d0505e383e\n"
    },
    {
      "commit": "a9489274d67b540804aafb587a226f7c2ae4464d",
      "tree": "2e181f440cfdda41da82e3763523b437af0fcf8f",
      "parents": [
        "d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jun 22 20:58:11 2011 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jun 22 20:58:11 2011 -0700"
      },
      "message": "Add the ability to specify the opacity of a TextureView\n\nTextureView assumes its content is opaque by default.\n\nChange-Id: Iba873423566a5b67c388081838bd910dceba32ba\n"
    },
    {
      "commit": "d6b2a00dd43257d1498b09175bff63663f6cb861",
      "tree": "458956fbcc18eb53ddc81fd7a4d1bf64ee3c7a92",
      "parents": [
        "98029c825b9234e6b90721d910cc180885fcab1d"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Jun 17 17:45:59 2011 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Jun 17 17:45:59 2011 -0700"
      },
      "message": "Add error checking to LayerRenderer::copyLayer\n\nThis method is invoked by TextureView.getBitmap() and failures must be\ncaught to avoid leaving the GL context in a potentially bad state.\n\nChange-Id: I620de395ba1bc20154de58c81963223dc55cac78\n"
    },
    {
      "commit": "77a811610f99e21da7f88dafef60d09f345d0506",
      "tree": "f9342ace8ae4541f75c17a3f8531d3c6090de474",
      "parents": [
        "113543c909baadb911cfda6acef056137e16f191"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jun 14 16:45:55 2011 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jun 14 17:06:53 2011 -0700"
      },
      "message": "Add TextureView.getBitmap()\n\nThis API can be used to get a Bitmap copy of the content of a\nTextureView.\n\nChange-Id: I07522216c353720fba5cab333174f58f484eb911\n"
    },
    {
      "commit": "8f0095cd33558e9cc8a440047908e53b68906f5f",
      "tree": "2f55d779bf102e0c134357d89c7de69d0444634a",
      "parents": [
        "3a5c227279011f850036c29e7c0bc96023298d5c"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon May 02 17:24:22 2011 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon May 02 18:32:29 2011 -0700"
      },
      "message": "Allows to render with an OpenGL context inside a TextureView.\n\nChange-Id: I59453f7fc3997f0502a1c5d325d37fed376fabc7\n"
    },
    {
      "commit": "aa6c24c21c727a196451332448d4e3b11a80be69",
      "tree": "27114ab3852d31723d885f3846ee874a07247126",
      "parents": [
        "9fc27819d75e24ad63d7b383d80f5cb66a577a0d"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Apr 28 18:40:04 2011 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Apr 28 18:46:19 2011 -0700"
      },
      "message": "New widget: TextureView\nBug #4343984\n\nTextureView can be used to render media content (video, OpenGL,\nRenderScript) inside a View.\n\nThe key difference with SurfaceView is that TextureView does\nnot create a new Surface. This gives the ability to seamlessly\ntransform, animate, fade, etc. a TextureView, which was hard\nif not impossible to do with a SurfaceView.\nA TextureView also interacts perfectly with ScrollView,\nListView, etc. It allows application to embed media content\nin a much more flexible way than before.\n\nFor instance, to render the camera preview at 50% opacity,\nall you need to do is the following:\n\nmTextureView.setAlpha(0.5f);\nCamera c \u003d Camera.open();\nc.setPreviewTexture(mTextureView.getSurfaceTexture());\nc.startPreview();\n\nTextureView uses a SurfaceTexture to get the job done. More\nAPIs are required to make it easy to create OpenGL contexts\nfor a TextureView. It can currently be done with a bit of\nJNI code.\n\nChange-Id: Iaa7953097ab5beb8437bcbbfa03b2df5b7f80cd7\n"
    },
    {
      "commit": "9fc27819d75e24ad63d7b383d80f5cb66a577a0d",
      "tree": "a5d490bc034404c4a2ddcba95c4fdbfd0d01d6db",
      "parents": [
        "2d039219adbeaad1a481267bca021b1a8645b481"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Apr 27 14:21:41 2011 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Apr 27 14:21:41 2011 -0700"
      },
      "message": "Correctly compute tex coords for rect layers.\nBug #4192695\n\nThis change also fixes Javadoc links in the framework.\n\nChange-Id: Ia548bcb18baba5d6fe6a4a04a2278e3a3bd465b2\n"
    },
    {
      "commit": "40667676e542a9daeafeac9904c30004e8706fd3",
      "tree": "601160198237fde4f32a152f5ee03ab1de55e7fd",
      "parents": [
        "b18a047de574f188b2c7633164f15ab3c9e40b5b"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Mar 18 14:34:03 2011 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Mar 18 14:36:44 2011 -0700"
      },
      "message": "Optimize rect-shaped layers.\n\nThis brings back an optimization disabled in HC-MR1. This time the\ncorrect geometry is generated to avoid unnecessary blending.\n\nChange-Id: Id56404dc46bb84c75facc25c18488a690741b592\n"
    },
    {
      "commit": "6217a71cd281003a376d998269d577d26a61c206",
      "tree": "3fbaaf391a24d8d4f3c009accb4b9c911a939709",
      "parents": [
        "ad37cd3b5d3de9dd0858af04fbccd102e8ff4b0e"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Mar 15 16:32:28 2011 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Mar 15 16:32:28 2011 -0700"
      },
      "message": "Fix performance issue in Launcher\nBug #3515248\n\nThe problem is caused by the fast path when compositing layers on screen.\nThe fast path draws a single quad using glDrawArrays() whereas the general\npath draws an arbitrary mesh using glDrawElements(). It looks like there\u0027s\nan issue in the driver since glDrawArrays() is significantly slower than\nglDrawElements() for a quad (6 vertices!)\n\nThis change just gets rid of the fast path.\n\nChange-Id: Ib2361253ec67f44a988270f76c183422f12ce537\n"
    },
    {
      "commit": "40a787f89a6f4c20f2c7fce29e5bc53954305f34",
      "tree": "35f7fe50165268be3a05768cbb72aab4e7a8a9a4",
      "parents": [
        "ffe2c7a071911b6a24954d41bbaeecd367286ba8"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Mar 02 15:15:42 2011 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Mar 02 15:15:42 2011 -0800"
      },
      "message": "Properly initialize FBO textures for linear filtering.\n\nChange-Id: I67fc4fd760483ef85809be8d6e608cf4f469650f\n"
    },
    {
      "commit": "09b7c91de73b59aa3f679b3ae3ba299f82ec9f8a",
      "tree": "9eb49f2fedb60e6df37b54216ed20f054a6f55fd",
      "parents": [
        "62687ec12cb8e0b1d4044a235b1387b9a8c3b4b4"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Feb 02 20:28:09 2011 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Feb 02 20:28:09 2011 -0800"
      },
      "message": "Allocate layers from the layers pool.\nBug #3413433\n\nThis change will be beneficial to Launcher to avoid hiccups when\nswiping pages of icons. When a layer is discarded, it is kept\nin the layers pool instead of being destroyed right away. This\nfavors memory reuse over allocations.\n\nChange-Id: Ifb6944ba83d6ceb67c331527c0827b26ce648eb1\n"
    },
    {
      "commit": "62687ec12cb8e0b1d4044a235b1387b9a8c3b4b4",
      "tree": "e8cb9417b98e79ad06813201e8081f1df894486b",
      "parents": [
        "8257e4d7e2b1ac9b8310a326cf8f4b53aba760ec"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Feb 02 15:44:19 2011 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Feb 02 15:44:19 2011 -0800"
      },
      "message": "Don\u0027t clobber the local dirty rect after rendering a layer.\nBug #3417254\nBug #3413433\n\nChange-Id: I8045e9ec414ebe4ce4d38124142a00726d2c634d\n"
    },
    {
      "commit": "beff8d83ef062975459f149ad0c632a3797d78ce",
      "tree": "c385cc6dc79a61c2e68cf9c72464ca038142caae",
      "parents": [
        "3a3133d876caf60ebff2176ad75c3dcf0259148d"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Feb 01 23:53:34 2011 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Feb 01 23:53:34 2011 -0800"
      },
      "message": "Fix incorrect dirty rectangle transformation in hardware layers.\nBug #3413433\n\nChange-Id: Iba201c7c4b4f11937797f3afcbf20c5a7395be25\n"
    },
    {
      "commit": "3a3133d876caf60ebff2176ad75c3dcf0259148d",
      "tree": "dca8a743e3e8b99eb6b7aaddba3402c82132a9c5",
      "parents": [
        "849d0a37cf2ca6c6a6c2d4d4456495e32e363120"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Feb 01 22:59:58 2011 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Feb 01 23:01:43 2011 -0800"
      },
      "message": "Update layers based on the dirty region.\nBug #3413433\n\nThis helps Launcher when a widget updates during a scroll, or when interacting\nwith widgets on the workspace if layers are still turned on.\n\nChange-Id: Ic7a42eb34f74f4ae988039754f815e2efd1d1e4f\n"
    },
    {
      "commit": "a45c056e62be0ca97edbdd6f6660822cf453c886",
      "tree": "4bd46b25738c401070275c90ee33a84f8710edc1",
      "parents": [
        "f02853f211f0b7f698f82305e30c23e527192584",
        "678e0adbdbac5fa3f25ca8371fdff1b3182f67e9"
      ],
      "author": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Wed Jan 26 23:49:23 2011 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jan 26 23:49:23 2011 -0800"
      },
      "message": "Merge \"Fix display List bugs\" into honeycomb"
    },
    {
      "commit": "678e0adbdbac5fa3f25ca8371fdff1b3182f67e9",
      "tree": "b2e047fff8eaac69b0b3d0e4b4323d8a067d3e11",
      "parents": [
        "e193c4688f9062e1d4dba97413788b6ffa122a55"
      ],
      "author": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Tue Jan 25 09:37:18 2011 -0800"
      },
      "committer": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Wed Jan 26 22:44:52 2011 -0800"
      },
      "message": "Fix display List bugs\n\nVarious property setters in View need to invalidate the parent\u0027s\ncache to get redrawn properly when accelerated with display lists.\n\nAlso, fix logic around display lists and old-style Animations in\nViewGroup.\n\nChange-Id: I70e1c2fa49e62228ee4a1301a006ce50bda4c305\n"
    },
    {
      "commit": "4f09f5417b5c14fd31336dacfff86972e7885a03",
      "tree": "3f086cfaccb190108c414f598e996e5769c1d17b",
      "parents": [
        "3b1fd35c6876f7eb1d15db3095c3e57969783302"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jan 26 22:41:43 2011 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jan 26 22:45:16 2011 -0800"
      },
      "message": "Don\u0027t draw the same triangles several times.\nBug #3388197\n\nChange-Id: Ief1dfd9447f144e9992340a173d2893e5e049129\n"
    },
    {
      "commit": "7d7b5490a0b0763e831b31bc11f17d8159b5914a",
      "tree": "7326e41a76618cba25a9757b43db779a607b9bdf",
      "parents": [
        "3dd0908a65095cb6946001ae3039ab87a47b4f33"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Jan 24 16:33:45 2011 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Jan 24 18:39:56 2011 -0800"
      },
      "message": "Enable partial invalidates when rendering with OpenGL.\n\nChange-Id: Ie8be06c4776b815e8737753eb8003b4fd8936130\n"
    },
    {
      "commit": "c88e357d1ed9dadfc0efb3dfbe92f24460674ef5",
      "tree": "af36de378d845f6db755c13191d8118f9711fd8b",
      "parents": [
        "acf36126e4620a0cc36d4e5b1268d15777ea4361"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Sat Jan 22 00:32:12 2011 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Sat Jan 22 00:35:23 2011 -0800"
      },
      "message": "Fix regression with hardware layers.\n\nThe renderer was checking whether the layer\u0027s region is a rect to\ndraw it with a simple quad. This test was done against the layer\u0027s\nregion structure, which was cleared after generating the mesh.\nUnfortunately Region::isRect() returns true when the region is\nempty, which was causing the renderer to always use a quad to\ndraw a mesh on screen.\n\nChange-Id: If4b874579ee0cedcb67367c9efa5c0c98ca55231\n"
    },
    {
      "commit": "42f3a4b7c35dd1ea1922356eb3611af8cde05179",
      "tree": "aac476548acfc97b0dd5785ce06008c40b98753a",
      "parents": [
        "a3311ed7a9ddd7ecb066f4731ce4bc3bd3ffd939"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jan 19 13:42:26 2011 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jan 19 13:42:26 2011 -0800"
      },
      "message": "Make embedded hardware layers work.\nBug #3369474\n\nChange-Id: Ib6d7fb44eedda9dc2933b5e1b176f307968af91d\n"
    },
    {
      "commit": "fb13abd800cd610c7f46815848545feff83e5748",
      "tree": "299f1c241fc360cbf3016adee07ac3db46750203",
      "parents": [
        "90fc03bc493fc2c984599b198b9d50bc387134f2"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Sun Jan 16 15:16:38 2011 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Sun Jan 16 15:16:38 2011 -0800"
      },
      "message": "Fix 9patch rendering in ExpandableListView.\n\nChange-Id: I60843d61a40b0cb7dd09923cb4489a5a76f20486\n"
    },
    {
      "commit": "f219da5e32e85deb442468ee9a63bb28eb198557",
      "tree": "3d27f5c3a1fcce028ca12aa7dc7331f95d8ae8c0",
      "parents": [
        "a47aa87a19c733e28d9d2db1c4eb7f29d668db7b"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Sun Jan 16 12:54:25 2011 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Sun Jan 16 12:54:25 2011 -0800"
      },
      "message": "Don\u0027t blend transparent pixels when rendering layers.\n\nWith this change, the rendere keeps track of what regions are rendered into\nand generates a mesh that matches these regions exactly. The mesh is used\nto composite the layer on screen.\n\nChange-Id: I1f342576b9134fb29caff7fb8f4c1da179fe956d\n"
    },
    {
      "commit": "ada830f639591b99c3e40de22b07296c7932a33f",
      "tree": "308f469469e96ce7f99d2ec5135e7d44eb858a35",
      "parents": [
        "4f6aff386045000c2c03b903c7109cb42092b7ea"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jan 13 12:13:20 2011 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jan 13 12:13:20 2011 -0800"
      },
      "message": "Cleanup implementation of hardware layers.\n\nThe new implementation relies on OpenGLRenderer\u0027s existing layer\ncode instead of duplicating it. The new code is much cleaner, with\nsimpler and better APIs and allows tracking of drawn regions inside\nlayers. Region tracking is not yet enabled but this will be done\nin a future CL.\n\nChange-Id: Ie826121a2227de8252c77b992a61218defea5143\n"
    },
    {
      "commit": "1fc883b271707c4206ae20cc9a935d7bd4a7485e",
      "tree": "e17af17553a2fb593d5819dc3e4b005205f0d455",
      "parents": [
        "3aaff3aef4998156226486d1fad297150dd7a6bf"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jan 12 14:30:59 2011 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jan 12 14:31:55 2011 -0800"
      },
      "message": "Add logging to the new layers API.\n\nChange-Id: I78b9426eb17de3e775aca9fafe4a50bd9c0785c4\n"
    },
    {
      "commit": "57066eb64c9a190d1afc87bb060bbb2d31e5b86c",
      "tree": "09c71b4431b6146e08d12e792b4c3dcea6ff57ed",
      "parents": [
        "9454fe1080458812db76599dd02a8b91a2e1e8f4"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jan 12 12:53:32 2011 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jan 12 12:53:32 2011 -0800"
      },
      "message": "Cleanup GL objects on the correct thread.\n\nChange-Id: Iddfea6e08a6591a4fab147151098ef27005f373d\n"
    },
    {
      "commit": "a9d0711392689a94b9f76eb0c16d0718c005603e",
      "tree": "350a11e1e89131f097c1d7f6f7b05aa765e0a40e",
      "parents": [
        "6c319ca1275c8db892c39b48fc54864c949f9171"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jan 11 17:58:03 2011 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jan 11 17:59:10 2011 -0800"
      },
      "message": "Don\u0027t break the build!\n\nChange-Id: I42f68c7b023c03adeedc4e979e5f4705188ee9f4\n"
    },
    {
      "commit": "6c319ca1275c8db892c39b48fc54864c949f9171",
      "tree": "d89e4222487db2ccd9a6b03b0d55f8361a7d1856",
      "parents": [
        "b796889671c089fb7e2fc4498aa701d3e8e552a3"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jan 11 14:29:25 2011 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jan 11 17:53:19 2011 -0800"
      },
      "message": "Better backend for hardware layers.\n\nWith this new backend, a hardware layer is only recreated when\nits associated view is udpated. This offers fast composition\nin GL and fast update of the layer in GL as well.\n\nChange-Id: I97c43a612f5955c6bf1c192c8ca4af10fdf1d076\n"
    }
  ]
}
