)]}'
{
  "log": [
    {
      "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": "bfd1cd620991ac2fa9202fdce6c00ec47d071935",
      "tree": "cc0460e5066d0a765610fb5eb4a3e30ef9bc28a5",
      "parents": [
        "fc81bfe3fb43296ca7040b8f259e1cbec50898ca"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Sep 10 13:04:31 2014 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Sep 10 16:10:24 2014 -0700"
      },
      "message": "Additional layer logging\n\nbug:17208461\n\nTrack layer\u0027s last known state.\n\nChange-Id: Ic1799191f5839a1d6cc56f598f2ac2671dc27a6f\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": "443a714fa7c0dd07fee3527cc5bc3d3ca1fb7d44",
      "tree": "4e1fd44948c6bc7324d6e3cb66af261f864530e5",
      "parents": [
        "2388750612b1fe54d31a47e0a40c1e6cf5a0cedd"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Thu Sep 04 17:40:05 2014 -0700"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Thu Sep 04 17:40:05 2014 -0700"
      },
      "message": "Yet more layer tracking logging\n\n Bug: 17208461\n\nChange-Id: I55e7d0921eb565867e966d68b798b7b92c391b55\n"
    },
    {
      "commit": "1d4774233304c484673e2af2c1de2ab41021c979",
      "tree": "68f78af2c5f7562d7bfd726f7b793831cca4d8b7",
      "parents": [
        "780617faa2c9b3dbcb902da06a486149c5bddbb3"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue Aug 26 17:30:15 2014 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue Aug 26 17:30:15 2014 -0700"
      },
      "message": "Crash instead of leaking layers/textures between GL contexts\n\nbug:17208461\nChange-Id: I4d58f301cf0f5e8145e808a5d6ade4de7801970b\n"
    },
    {
      "commit": "69e5adffb19135d51bde8e458f4907d7265f3e23",
      "tree": "022fc23512ae5adfbe3f86351305bc9f4538a68a",
      "parents": [
        "e222e359a0aab985488a711f6edb76820fe8c6df"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Aug 14 13:34:01 2014 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Aug 15 00:59:44 2014 +0000"
      },
      "message": "Define shadow casting behavior within layers\n\nbug:15860114\n\nSavelayers and HW layers both now support shadow casting.\n\nFor save layers, the light source should always be correct, for HW\nlayers, the light source position is set when the layer is created,\nand updated when it is resized.\n\nChange-Id: Ie85567dd43c2bb0a0b08fd0bd4db41efa793ac2b\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": "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": "a7090e0cfd7c719a6d4c03aae34f5db98754cbdd",
      "tree": "7bfae2588126476042f33b9dd01ca0b9cf368e2e",
      "parents": [
        "104ef50048a1d12f323b3e70ccc28dd509d3ea24"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Jun 20 16:01:00 2014 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Jun 23 09:57:07 2014 -0700"
      },
      "message": "Update \u0027DisplayList\u0027 vs \u0027RenderNode\u0027 naming in several places\n\nChange-Id: I635c6627d098b661fb9b0ba1bd42fa6d7277d287\n"
    },
    {
      "commit": "3281442aa75872b8947f0b0a5203257c6849129d",
      "tree": "6484ad9c30a42eec7ac2bc83179114cb0e0df591",
      "parents": [
        "6ab7c1e7da4047e3fbfee03ef6b199418ff570de",
        "80d4902196899d1325cd9f52c06ae0174cf9bd4c"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Jun 20 23:21:20 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jun 20 02:09:17 2014 +0000"
      },
      "message": "Merge \"Wrap ViewGroup content in save/restore to protect composited children\""
    },
    {
      "commit": "80d4902196899d1325cd9f52c06ae0174cf9bd4c",
      "tree": "659794797f8161ca9580fc17cc5c44bbbe3c304e",
      "parents": [
        "6b2df21ecacfa6826a85cabdf8d6fe0e81fe11d9"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Jun 20 15:03:43 2014 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Jun 20 16:18:58 2014 -0700"
      },
      "message": "Wrap ViewGroup content in save/restore to protect composited children\n\nbug:15570351\n\nPos Z composited children are drawn before the primary restore for a\nRenderNode. This means that without an additional save/restore (which\nwraps the content) they aren\u0027t protected from transformations/clips\nthat happen within the ViewGroup\u0027s DisplayList.\n\nAlso changes RenderNode to use OpenGLRenderer tag for displaylist\ndumping consistency, and simplifies the entry points into RenderNode\ndrawing, since the distinction between tree root vs tree internal is\nno longer important.\n\nChange-Id: I2621eba0592c74d71f85a91a4ab3d0da2d7468d3\n"
    },
    {
      "commit": "0732ba5756296f1ae3da48a39e4d498aba366386",
      "tree": "c0b4ab3461d2ac90ebfa51a0b1519880bc23f06f",
      "parents": [
        "11a8d4f8b99549262bcc9b64efe8ca21801c8f91",
        "88b1c9ad87ca6d6faaf824bff4ee9d3c799362e5"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@android.com",
        "time": "Tue Jun 17 01:31:21 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Jun 17 01:31:21 2014 +0000"
      },
      "message": "am 88b1c9ad: am e709d53f: am 0d28bb47: Merge \"Fix the texture ID reuse issue in HWUI.\"\n\n* commit \u002788b1c9ad87ca6d6faaf824bff4ee9d3c799362e5\u0027:\n  Fix the texture ID reuse issue in HWUI.\n"
    },
    {
      "commit": "4a473c7d9406a2d6f6792f0f48d933424740ec5c",
      "tree": "dbbeedb8b150c6f5531dd152fcefe10208129167",
      "parents": [
        "1a3908e95926acd8add3858be571fe23fa9d047a"
      ],
      "author": {
        "name": "jiayuanr",
        "email": "jiayuanr@codeaurora.org",
        "time": "Tue Jun 10 17:41:49 2014 +0800"
      },
      "committer": {
        "name": "Digish Pandya",
        "email": "digishp@codeaurora.org",
        "time": "Mon Jun 16 09:29:22 2014 +0530"
      },
      "message": "Fix the texture ID reuse issue in HWUI.\n\nIssue: When the layer of previous frame is destroyed, it doesn\u0027t clear the\ntexture id in mBoundTextures[mTextureUnit], so in the next frame, if\nglGenTexture returns same texture ID of the previous frame,\nthe new texture is not bound.\n\nCRs-fixed: 671736\n\nChange-Id: Ifc5fd2115fb1863b3c006ab14b0faabeaeb4eab4\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": "3f085429fd47ebd32ac2463b3eae2a5a6c17be25",
      "tree": "2930b7ee50ce98092fde97546a3d546c817038f1",
      "parents": [
        "fbb54b8363b66e0b22d519ee20d1a50e8b5340ee"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue Apr 15 16:18:08 2014 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Apr 23 16:15:11 2014 -0700"
      },
      "message": "Clip TouchFeedbackDrawable effect to receiver Outline\n\nProjected RenderNodes are now wrapped with a ClipRect or masked\nSaveLayer, so that they are clipped to the outline of the projection\nreceiver surface.\n\nChange-Id: I1d4afc1bb5d638d650bc0b1dac51a498f216773e\n"
    },
    {
      "commit": "087bc0c14bdccf7c258dce0cdef46a69a839b427",
      "tree": "cab73aeed8e9a0bc8e74243a35c026ab0b321e08",
      "parents": [
        "ce16215d7b4d9bedfc62e172dc44ab439afef13a"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Fri Apr 04 16:20:08 2014 -0700"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Mon Apr 07 14:53:08 2014 -0700"
      },
      "message": "Refcount RenderNode\n\nChange-Id: I7a86db8acc2b78ef33d987a43a119f5933d7d752\n"
    },
    {
      "commit": "b265e2ca50b6ceb2fd2987ef1f7d063b1bde19ae",
      "tree": "c5dd068e025de701ebfdeacf00247368fbecb12a",
      "parents": [
        "08c96b5515f061f61e13b348f6022ce7c586e4c4"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Mar 27 15:50:09 2014 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Mar 28 14:43:22 2014 -0700"
      },
      "message": "Support shadows on the root RenderNode\n\nbug:13211941\n\nCleans up some of the RenderNode method naming\n\nAlso removes unnecessary clip/save/restores, clipping shadows\npredictably, as drawn by the parent, before drawing (and clipping,\netc.) the shadow casting child.\n\nChange-Id: I795115e1fb869bbbdd7be43e279b97490fecc7e0\n"
    },
    {
      "commit": "668f0e38ef0277d55d3118af37e17b8c435df85c",
      "tree": "d0703be6cce376c8a982d7c491445d2e94009375",
      "parents": [
        "bcad68ad80e5a44e5dc6988eddb8acabdc01a737"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Wed Mar 26 15:10:40 2014 -0700"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Thu Mar 27 10:00:04 2014 -0700"
      },
      "message": "Async drawing!\n\nChange-Id: I7e728356f58af88174328a8c0b90d27b128bfe01\n"
    },
    {
      "commit": "bfb07a03777af424e99bca1dac4c903aaf44e99d",
      "tree": "a34ac04cc56a06ea54bc7010bb1169f71d9f355b",
      "parents": [
        "41c2d2cec3f46b28f535e9cd7f5b9da02280ccfe"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Mon Mar 24 21:00:18 2014 -0700"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Mon Mar 24 21:00:18 2014 -0700"
      },
      "message": "Move where updateProperties is called\n\nChange-Id: I27da448996019094c44487ce28c5689d098d6535\n"
    },
    {
      "commit": "d0a0b2a3140bfb1819a116413ce9d81886697a07",
      "tree": "0040f371f29280deb83d1fd55f2db86e30d58c37",
      "parents": [
        "de02cdc1e95cea19b2ddef26d60ad1d109bd507c"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Thu Mar 20 16:28:56 2014 -0700"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Mon Mar 24 15:31:34 2014 -0700"
      },
      "message": "Add stagingProperties\n\nChange-Id: Ic7de551f8843fd70a77f738e33028e25c020bb3c\n"
    },
    {
      "commit": "113e0824d6bddf4376240681f9cf6a2deded9498",
      "tree": "2f69dbe16fef8fa7ccae1d1fe2ee68e1c162d062",
      "parents": [
        "db62c232b953fd882a8f55daf736ae4098e8f278"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Tue Mar 18 09:22:59 2014 -0700"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Wed Mar 19 16:40:04 2014 -0700"
      },
      "message": "Move RenderNode to own file\n\nChange-Id: I9380d161fd3ddd7b569c262dd8e7aa0c96151b1e\n"
    },
    {
      "commit": "e18264b079481a244b30e3f71012c53bbd861f92",
      "tree": "0127f3fc60aa351108ee8abd8ee180a5b193b03e",
      "parents": [
        "5b568aa04a91786962af1ab372b5a62481eea8cc"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Wed Mar 12 13:56:30 2014 -0700"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Wed Mar 12 13:56:30 2014 -0700"
      },
      "message": "Rename DisplayList-\u003eRenderNode\n\nChange-Id: Id42e23c9a1a6eb6eaeafef707ced7fa6887b03d0\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": "674554fc36932ca50b15bba41ac6f650254d4e72",
      "tree": "ec0fc936ce4fdbd15d8bf6e15348676194855b8a",
      "parents": [
        "96f0369b25811319398a268071eb147fe14a09e3"
      ],
      "author": {
        "name": "Derek Sollenberger",
        "email": "djsollen@google.com",
        "time": "Wed Feb 19 16:47:32 2014 +0000"
      },
      "committer": {
        "name": "Derek Sollenberger",
        "email": "djsollen@google.com",
        "time": "Thu Feb 20 16:20:33 2014 -0500"
      },
      "message": "Reapply \"Refactor setting an SkPaint onto a hwui Layer.\"\n\nThis reverts commit 90d0c75e94a32fb7d993fae69762820aabc2fcbb.\n\nChange-Id: Ie807761231edf7c848b019931dccbf466208c0be\n"
    },
    {
      "commit": "90d0c75e94a32fb7d993fae69762820aabc2fcbb",
      "tree": "d67ca852f275b8362e15144e4a7c02bdaf8b6c74",
      "parents": [
        "e889298cd6ae1fc0d76bc00d7d12586db03eb261"
      ],
      "author": {
        "name": "Derek Sollenberger",
        "email": "djsollen@google.com",
        "time": "Wed Feb 12 18:59:05 2014 +0000"
      },
      "committer": {
        "name": "Derek Sollenberger",
        "email": "djsollen@google.com",
        "time": "Wed Feb 12 18:59:05 2014 +0000"
      },
      "message": "Revert \"Refactor setting an SkPaint onto a hwui Layer.\"\n\nThis reverts commit e889298cd6ae1fc0d76bc00d7d12586db03eb261.\n\nChange-Id: I4b1d609b2d4280595d40cb10d6c18875c22999f8\n"
    },
    {
      "commit": "e889298cd6ae1fc0d76bc00d7d12586db03eb261",
      "tree": "a2f5114d1ea5ff1265e28e2b01b4750d5d2741f3",
      "parents": [
        "826e51c4da2beac50c0ed1e1359787a0b69c878c"
      ],
      "author": {
        "name": "Derek Sollenberger",
        "email": "djsollen@google.com",
        "time": "Tue Feb 11 11:46:49 2014 -0500"
      },
      "committer": {
        "name": "Derek Sollenberger",
        "email": "djsollen@google.com",
        "time": "Wed Feb 12 11:26:06 2014 -0500"
      },
      "message": "Refactor setting an SkPaint onto a hwui Layer.\n\nThis CL removes the unecessary JNI call to set the colorFilter on\na layer.\n\nChange-Id: I9e088f888938d4315745aa618334bfdb9e61343a\n"
    },
    {
      "commit": "76d3a1b8d035d27bc80b0f2fc480a903bd001514",
      "tree": "a6346bbf593d565d89990f0bddecd2a5df92de9d",
      "parents": [
        "8852ab4357ffb653bafb36f3b9272866834f7a72"
      ],
      "author": {
        "name": "Derek Sollenberger",
        "email": "djsollen@google.com",
        "time": "Tue Dec 10 12:28:58 2013 -0500"
      },
      "committer": {
        "name": "Derek Sollenberger",
        "email": "djsollen@google.com",
        "time": "Fri Feb 07 17:06:14 2014 -0500"
      },
      "message": "Removing SkiaColorFilter and inspecting the native object directly.\n\nbug: 10650594\nChange-Id: I4fcf66d008765afa0e35d011f58bc792183cb74f\n"
    },
    {
      "commit": "3783e70b557fe58f51d551242a42e7232e991c10",
      "tree": "71a91426fa2cef638fc2ad83566f8456d105d51f",
      "parents": [
        "2d434c8bdf5f980956854ea022db9588e66f445e"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Jan 27 14:26:14 2014 -0800"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Jan 27 14:29:37 2014 -0800"
      },
      "message": "Remove logging of DisplayList staleness\n\nChange-Id: Ie6b3af3065d4d10ec0bc9b419223d3458d297ea8\n"
    },
    {
      "commit": "bb615a6ffbc8a051007163916f1ed085d10b5327",
      "tree": "2ba39cf5b57deb8f00ba478de8f904918a51d0de",
      "parents": [
        "8435cf0d8b9e24715d5b310ed569fda918dcaa46"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Jan 24 13:22:35 2014 -0800"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Jan 24 15:01:40 2014 -0800"
      },
      "message": "Clear root level reorder lists to prevent accessing stale DisplayLists\n\nbug:12581401\n\nAdds temporary logging which should log/crash earlier on incorrectly\nreordering hierarchies.\n\nChange-Id: Iee00940718c3cc868161e754aff93cd3b2747094\n"
    },
    {
      "commit": "f57776b2d195f0937906eb88b777bb55ccc36967",
      "tree": "f2c160bb0860a6f3d0f883cdf0c520892a1bde24",
      "parents": [
        "c3c4d36df01631883a79163da841ca222497c9d3"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Oct 25 18:30:17 2013 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Dec 12 10:18:23 2013 -0800"
      },
      "message": "3d view system!\n\nTrue 3d transformations are now supported by DisplayLists and the\nrenderer, initially with the translationZ property on view.\n\nRenderer operations used directly by DisplayList (formerly,\nclip/save/restore/saveLayer) are now more simply managed by allocating\nthem temporarily on the handler\u0027s allocator, which exists for a single\nframe. This is much simpler than continuing to expand the pool of\npre-allocated DisplayListOps now that more operations are called\ndirectly by DisplayList, especially with z ordered drawing.\n\nStill TODO:\n-APIs for camera positioning, shadows\n-Make Z apis public, and expose through XML\n-Make invalidation / input 3d aware\n\nChange-Id: I95fe6fa03f9b6ddd34a7e0c6ec8dd9fe47c6c6eb\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": "fb5c9050978afad2c1df570a13a6747f438c27f7",
      "tree": "5ad303b8842436dccb104e46d19aea14d5617cfb",
      "parents": [
        "61e1ca68fa82e5228b5bfcdad8deecd9383fb183",
        "e93482f5eac3df581d57e64c2a771a96aa868585"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Jun 17 20:39:45 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jun 17 20:39:45 2013 +0000"
      },
      "message": "Merge \"Cancel layer update when a layer is about to be destroyed Bug #9310706\""
    },
    {
      "commit": "e93482f5eac3df581d57e64c2a771a96aa868585",
      "tree": "009afbdf49655b35ee29f857aa554a42c4e96048",
      "parents": [
        "6410c0aaf13c9aec606b90ee942f2ac2d98b1609"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Jun 17 13:14:51 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Jun 17 13:35:03 2013 -0700"
      },
      "message": "Cancel layer update when a layer is about to be destroyed\nBug #9310706\n\nChange-Id: I73eea6314c326f15a979617e3a05b525935f0d3f\n"
    },
    {
      "commit": "8c6e17c2a9b0ad7864a261cc9a30b9623e20bdcb",
      "tree": "4072dc4f15f545c8a8cad311ef6e412e6c2a6829",
      "parents": [
        "4aaf8b3d4b160aea5ceb5ccf799e44c1d5a3f14b"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Jun 17 13:02:12 2013 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Jun 17 13:04:45 2013 -0700"
      },
      "message": "Check for layer renderer in flush\n\nbug:9310706\n\nIn some cases flush will occur after a layer is destroyed. Avoid\ntrying to draw after putting the layer in the layer cache.\n\nChange-Id: I55d66f420e7354fe552c82eb3145a7d91b4441e3\n"
    },
    {
      "commit": "28ce94a4ffc7576f40776d212f1ada79fafaa061",
      "tree": "644d590fb3ccb5db34ecf68bb3360923f3d65c29",
      "parents": [
        "97f41383eb2bb098767ca153e470009fea810540"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri May 31 11:38:03 2013 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Jun 12 14:46:52 2013 -0700"
      },
      "message": "Overdraw avoidance and merging of clipped ops\n\nbug:8951267\n\nIf an opaque op, or group of opaque ops covers the invalidate region,\nskip draw operations that precede it.\n\nClipped operations may now be merged, but only if they share a\nclipRect - this is a very case for e.g. ListView, where all background\nelements may now be a part of the same MergingDrawBatch.\n\nIt is this more aggressive merging that groups together clipped\nbackground elements in the ListView case, enabling the overdraw\navoidance skipping the window background.\n\nChange-Id: Ib0961977e272c5ac37f59e4c67d828467422d259\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": "34416eaa1c07b3d7a139e780cea8f8d73219650e",
      "tree": "76047dada59721c749e61801351017a56980b5c2",
      "parents": [
        "5584737fff6350ab09fb53e6a73bbff770930727"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Apr 15 16:08:28 2013 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue Apr 16 15:05:49 2013 -0700"
      },
      "message": "Make layer double drawing visible in overdraw debug mode\n\nA clipped saveLayer will cause two draws - first to an onscreen\nbuffer, then again back to the framebuffer. This change - when in\noverdraw debug - reissues draws associated with a clipped saveLayer,\nbut only to the stencil buffer. Operations within a saveLayer are\nshown correctly to be twice drawn, and View.setAlpha() without an\nassociated hardware layer, or hasOverlappingRendering() are made more\nvisible.\n\nHardware layers, on any frame that they are updated, similarly draw\ntwice, and will also be counted against the stencil buffer doubly.\n\nNote: greater depths of layers - e.g. a saveLayer within a saveLayer -\nare not respected, as that would require additional region tracking.\n\nChange-Id: I61fb0e61038fe66013d59914c20bb47a550dea7d\n"
    },
    {
      "commit": "a151ef8c667a52d9fae28c09f780784f19bdb039",
      "tree": "a0e43a7a4da4df3e9ae4812479f6ee44e77f6d42",
      "parents": [
        "faec826bd6051e41e1299cd14d580a4f50f6fe97",
        "0908764b2b3cf5075df4178a5f0a8547dcb7b317"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Apr 04 22:47:53 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Apr 04 22:51:38 2013 +0000"
      },
      "message": "Merge \"First OpenGL ES 3.0 based optimization\" into jb-mr2-dev"
    },
    {
      "commit": "1206b9bba91f7ed899c5c87427cce725fe5aadfc",
      "tree": "68c8a89796bd1395722b92cdd49f2fbba50269c5",
      "parents": [
        "599efc3aa34351e02bfa6e8b9e3fd530b8d9c632"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Apr 04 14:46:24 2013 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Apr 04 14:55:43 2013 -0700"
      },
      "message": "Traverse layers in update order\n\nbug:8540150\n\nLayers now require traversal in update order, as it will be child\nfirst, then parent for layer-in-layer\n\nFixes issue with deferred layer playback not flushing in order, and\nthus child not painting before parent\n\nAlso fixes DisplayList to only be cleared after flush in deferred list\n\nChange-Id: I2f284d00079cdb20798aeef6a1c94e823940db40\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": "02b49b70ede0b9eb760ff334823aee1d9520ed85",
      "tree": "3d55433752c547beb594edec21d56ce1b3080889",
      "parents": [
        "964a6a7e209b0db262c827721ae5fde3f98ca763"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Mar 29 12:37:16 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Mar 29 12:37:16 2013 -0700"
      },
      "message": "Prevent crash when a single layer is enqueued several times for updates\nBug #8504687\n\nChange-Id: I9b01bbc4e3f37af23dfe5e68d3d03ad3d238b94a\n"
    },
    {
      "commit": "696dcf84a382fcc5ef7041e0bbf3af20b0ecb99f",
      "tree": "82deda082ad2fd191e8e9991cecba1e3365004b6",
      "parents": [
        "ce4a7dfc516ee61301e9af91fad17ca1320efaab"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Mar 28 13:06:58 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Mar 28 13:06:58 2013 -0700"
      },
      "message": "Update layers to clear them\nBug #8489505\n\nA layer should be updated even with an empty deferred display list. It is\npossible for a layer to request an update just to execute a clear which\nwill be handled by LayerRenderer::prepareDirty().\n\nChange-Id: Iffb98bd71d6caa8d4a701df98197676f9423c0c2\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": "8d4aeb7111afac0c3c7e56d4ad5d92f9cfce2ffd",
      "tree": "d526296ca8e54842b15b60adaad484ee29feccf2",
      "parents": [
        "d1a84242a7ba807310d8f8d389796c7163cb97a0"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Feb 12 16:08:55 2013 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Feb 13 11:27:05 2013 -0800"
      },
      "message": "Add a render buffer cache to reuse stencil buffers\nBug #7146141\n\nThis new cache is used in a similar way to LayerCache. It helps\nreuse already allocated stencil buffers and thus avoid churning\nmemory on every frame.\n\nChange-Id: I19551d72da52c40039e65904563600e492c8b193\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": "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": "5bb3c730f5ebd2a0db1b02a8981c6fdbea6c1a2e",
      "tree": "b049bafac199be2d7e5cd4e86e4d8b03c1416616",
      "parents": [
        "db69db1510e77052f702a997894af5ca4b87e9e0"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Nov 29 17:52:58 2012 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Nov 30 16:29:33 2012 -0800"
      },
      "message": "Apply dev. settings at runtime\nBug #7434649\n\nChange-Id: I16f00eaa8a5eefd9f9849e196cf2cb1659215390\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": "97dc9172b0e58979c63de0dedbab656399a62281",
      "tree": "291da7b2a7b35e73821fa3660c7e1a96e983a5e4",
      "parents": [
        "4285de3c8bc77856a2df98894f74bb7333f1d348"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Sun Sep 23 17:46:45 2012 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Sun Sep 23 17:49:24 2012 -0700"
      },
      "message": "Avoid deadlock when deleting layers\nBug #7217459\n\nChange-Id: I12bfa6c30c5030bd1b23ea6a3ce64240ab1dfba3\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": "d15ebf25c595b855f6978d0600218e3ea5f31e92",
      "tree": "35154bd1ec18cf8299a0d737847291ab28a5c98b",
      "parents": [
        "4db5d23deab9ea8de34cdb1c56af31e6e3cff79b"
      ],
      "author": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Wed Sep 05 11:40:29 2012 -0700"
      },
      "committer": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Fri Sep 07 13:27:02 2012 -0700"
      },
      "message": "Enable changing properties of layer paint\n\nPreviously, to draw a layered view with a changed Paint object for the\ndrawLayer operation, you\u0027d have to invalidate the parent view, to get the\nnative DisplayList to pick up the new Paint properties. This change adds\nAPI and functionality so that the developer can call setLayerPaint(), which\ndoes the proper invalidation (lightweight, doesn\u0027t cause redrawing the view).\n\nIssue #6923810 Make it easy to efficiently animate a layer\u0027s Paint\n\nChange-Id: I7fea79788d50f6d9c86dd5e5b2a4490cb95142bb\n"
    }
  ]
}
