)]}'
{
  "log": [
    {
      "commit": "750ca6dbdb259aea0ca5b77380a9303e586ef3ea",
      "tree": "c24155dbc56810e618ee8a837470145d77aee38d",
      "parents": [
        "0e14f2d45557527242f27ce7de9027e6ccaa45d6"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Fri Mar 28 16:33:18 2014 -0700"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Fri Mar 28 16:43:15 2014 -0700"
      },
      "message": "Remove kStatusInvoke \u0026 kStatusDraw\n\n They are unused\n\nChange-Id: I44ecf1164dc6bc1b09438e733976d5a97a25f00e\n"
    },
    {
      "commit": "8c271ca63b62061fd22cfee78fd6a574b44476fd",
      "tree": "e4b6a9d863aec687273be89373d2fc432cf29c30",
      "parents": [
        "5e44cadfd69c210c11f80cfe599718617a0e6676"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue Mar 25 10:33:01 2014 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue Mar 25 16:03:48 2014 -0700"
      },
      "message": "Add private circular reveal API on View/RenderNode\n\nChange-Id: I139c8e12b354083149a665f6768f3f6931a8dd15\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": "af6f7ed8dd4288a41d0a07a1f0f0be7d6d035b33",
      "tree": "1004e5d8a1120b83102fd82e0e9484f410c9d319",
      "parents": [
        "31dc8f701fb14e185bf1c1b35d68bd7d1a42a54a"
      ],
      "author": {
        "name": "ztenghui",
        "email": "ztenghui@google.com",
        "time": "Tue Mar 18 17:25:49 2014 -0700"
      },
      "committer": {
        "name": "ztenghui",
        "email": "ztenghui@google.com",
        "time": "Thu Mar 20 15:25:47 2014 -0700"
      },
      "message": "Early rejection on shadows which are outside of the clip bound.\n\nAll the computations are estimated using bounding box.\nTODO: Spot shadow could have more accurate but also more expensive methods, we need\nmore experiments to decide.\n\nChange-Id: I9c10c419576cee55daf0f9f278b0db78cb847447\n"
    },
    {
      "commit": "50ecf849cb7ccc3482517b74d2214b347927791e",
      "tree": "ae48db1ce35bf2d35b5bd126dc78fd5cca0a5d4e",
      "parents": [
        "de69575dd1bdafabda8afda8b4251b830ba0c551"
      ],
      "author": {
        "name": "ztenghui",
        "email": "ztenghui@google.com",
        "time": "Tue Mar 11 16:52:30 2014 -0700"
      },
      "committer": {
        "name": "ztenghui",
        "email": "ztenghui@google.com",
        "time": "Mon Mar 17 10:10:02 2014 -0700"
      },
      "message": "Create one hole inside the umbra area to avoid overdraw.\n\nbug:13439450\n\nChange-Id: I859575196bd5a3029f447883025a6ec3a1f1face\n"
    },
    {
      "commit": "361fd3d2ff302d60a49ae2d2d1cc61cb5fdb0ece",
      "tree": "d658ae309a8b5aa44e487083aba0c0886f9416a5",
      "parents": [
        "141d88916647cada1c90448d5739a927fa508724",
        "e18264b079481a244b30e3f71012c53bbd861f92"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Wed Mar 12 21:03:03 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Mar 12 21:03:03 2014 +0000"
      },
      "message": "Merge \"Rename DisplayList-\u003eRenderNode\""
    },
    {
      "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": "b98f2116f5896acb4b221015b22624a3c5d5a7fe",
      "tree": "4bf1d02992d5fd3d0b333eb5e042d7337a572667",
      "parents": [
        "d84133af441caed8102b2da79cdb6f50673b80cb"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue Mar 11 17:42:29 2014 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Mar 12 11:19:42 2014 -0700"
      },
      "message": "Force shadow casters above the Z\u003d0 plane\n\nChange-Id: Ifee75414829d4bfb3c7aa6219f1f9bcfd50ff0c6\n"
    },
    {
      "commit": "b79a3e301a8d89b9e1b1f6f3d7fd6aa56610a6f0",
      "tree": "6b92898b802b665b62127766baa87e8261569062",
      "parents": [
        "e361ad7ab15fcf4919a56a6293689d968ee8dcff"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue Mar 11 12:20:17 2014 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Mar 12 09:44:41 2014 -0700"
      },
      "message": "Fix orthographic shadows projection, simplify shadow reordering\n\nSeparate matrix passed to shadow system into two parts, one for\ntransforming the polygon XY points (using the actual draw matrix) and\na separate one which respects correct 4x4 3d rotations and\ntranslations for determining Z values.\n\nChange-Id: I7e30a84774a8709df6b2241e8f51fc5583648fe8\n"
    },
    {
      "commit": "e361ad7ab15fcf4919a56a6293689d968ee8dcff",
      "tree": "19107b2e2deff5044db0580ab6701c2857d6a8e8",
      "parents": [
        "b26264948c01b097fe5bc12d5b486a759693ceb7"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue Mar 11 10:48:43 2014 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue Mar 11 15:41:40 2014 -0700"
      },
      "message": "Remove experimental perspective projection\n\nChange-Id: Iad688c8395ccd4673cc129973802b5f01dfb45ba\n"
    },
    {
      "commit": "67862524056ee2e73a94395139bb8bd0ec1ef38a",
      "tree": "20273dae825bf5256ca8703038f7357825d090c2",
      "parents": [
        "9f6a372ca08c657447ef4b8dc6c80a89202247f8"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Feb 28 12:26:34 2014 -0800"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Feb 28 12:26:34 2014 -0800"
      },
      "message": "Fix use of Skia deprecated methods\n\nChange-Id: Ib89c20fc94bcce29b7490d6f55c73492735befda\n"
    },
    {
      "commit": "da3f525759d4b875fd6a498cbe22f7bc9e53aa83",
      "tree": "9bee37b2bbc11f876f76a8e2398d3ebe2d4e877f",
      "parents": [
        "98bab263500b258025c9c6ca64f8aaff7dc914f4",
        "9757ac0b9d62f6aea5e47cfb375f445c78bb7897"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Feb 27 22:20:31 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Feb 27 22:20:31 2014 +0000"
      },
      "message": "Merge \"Fix TextureView texture filtering.\""
    },
    {
      "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": "8198c3a8f525c07e2b848852f6ad3e351e3b5461",
      "tree": "342d10b2f40fd3db65e41cb98b7ee29412b34683",
      "parents": [
        "a1f1a3c573acd91024fda0ceb3b921c73b186963",
        "63d41abb40b3ce40d8b9bccb1cf186e8158a3687"
      ],
      "author": {
        "name": "ztenghui",
        "email": "ztenghui@google.com",
        "time": "Tue Feb 25 23:20:06 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Feb 25 23:20:06 2014 +0000"
      },
      "message": "Merge \"Use pre-computed index to draw the shadow.\""
    },
    {
      "commit": "63d41abb40b3ce40d8b9bccb1cf186e8158a3687",
      "tree": "53ef1d5d691afa904e390e211f6adde28fb5f4ae",
      "parents": [
        "ef94c6f88fbb1deb095b1494378befcdb9722839"
      ],
      "author": {
        "name": "ztenghui",
        "email": "ztenghui@google.com",
        "time": "Fri Feb 14 13:13:41 2014 -0800"
      },
      "committer": {
        "name": "ztenghui",
        "email": "ztenghui@google.com",
        "time": "Tue Feb 25 14:18:25 2014 -0800"
      },
      "message": "Use pre-computed index to draw the shadow.\n\nAlso draw the umbra part as triangle fans instead of zig zag fashion.\n\nb/12840179\n\nChange-Id: Iaa5d15e77351acdd71f076bd8f9bb2d4d2b92faf\n"
    },
    {
      "commit": "919e95cc23d3567345719f2466e089682608638e",
      "tree": "b3ebd4482516c19781462af5c4fd330ce26afa16",
      "parents": [
        "550267f72b6217f797e7f93bb312ecbe6541ff49"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Feb 21 17:13:45 2014 -0800"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Feb 21 17:15:12 2014 -0800"
      },
      "message": "Modulate shadow alpha by caster alpha\n\nChange-Id: Ibc4b3958feb3b5dba91d30af470d76555a6209c8\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": "ef94c6f88fbb1deb095b1494378befcdb9722839",
      "tree": "d0917ce76760da1e439a94ee3ddabb10af2026dc",
      "parents": [
        "b9122c672e76923018198ab0eda07fa6a2145dbc"
      ],
      "author": {
        "name": "ztenghui",
        "email": "ztenghui@google.com",
        "time": "Thu Feb 13 17:09:45 2014 -0800"
      },
      "committer": {
        "name": "ztenghui",
        "email": "ztenghui@google.com",
        "time": "Thu Feb 13 17:09:45 2014 -0800"
      },
      "message": "Separate spot and ambient shadow strength setting\n\nChange-Id: I4530e618b09a7f44b5382f8a40646c0ebf5f214c\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": "d44fbe55a9f434cb5bb0e34c143ba1445141990d",
      "tree": "782e860830dd48fb9b7e667d64a038a45045b936",
      "parents": [
        "8eea3ea5591e59f55cbb4f6b2b7e9363a285ced3"
      ],
      "author": {
        "name": "Derek Sollenberger",
        "email": "djsollen@google.com",
        "time": "Wed Feb 05 16:47:00 2014 -0500"
      },
      "committer": {
        "name": "Derek Sollenberger",
        "email": "djsollen@google.com",
        "time": "Fri Feb 07 13:33:29 2014 -0500"
      },
      "message": "Keep the SkPaint used when creating a layer.\n\nThis will allow us to inspect the paint for thing other than\ncolor and xfermode, such as SkColorFilters and SkShaders.\n\nbug: 10650594\nChange-Id: I2c3ddd07a3966e1e77af34136307e2b59b2898c1\n"
    },
    {
      "commit": "a2fe7affd3d077ac163da90996cb2e5e0ca3b8d1",
      "tree": "42c447fe36d1eac576243ec2442e5b52dcbcc4c3",
      "parents": [
        "f3560a133e3ec19c698a8c9d6cfc7d17fd95adc5"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue Jan 28 17:25:06 2014 -0800"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Jan 30 16:04:16 2014 -0800"
      },
      "message": "Add initial hidden outline APIs\n\nBackground drawable outline usage and drawable outline calculation\nstill to come.\n\nChange-Id: I8c7539f1638f86e1f8eb11f4fe49f705f61d58ba\n"
    },
    {
      "commit": "5e1814e2ebf5614f8f4f7edd063e1a79bd929844",
      "tree": "38049d5e13a13fcec11ce969a8215733b58406c9",
      "parents": [
        "ab5e089585e01fd14ad7854391c10e6d8ae07144",
        "3783e70b557fe58f51d551242a42e7232e991c10"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue Jan 28 23:18:05 2014 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jan 28 23:18:05 2014 +0000"
      },
      "message": "Merge \"Remove logging of DisplayList staleness\""
    },
    {
      "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": "15a07a21eb33e8ca1c7444944fe0541a53380c0c",
      "tree": "fa5dd5158982a1ef11d105ac463fb34b07087147",
      "parents": [
        "bb615a6ffbc8a051007163916f1ed085d10b5327"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Sun Jan 26 13:43:53 2014 -0800"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Sun Jan 26 13:43:53 2014 -0800"
      },
      "message": "Use path outlines to define shadow shapes\n\nFixes the simplifying assumption that shadow casters were always\nrectangular.\n\nJava side APIs + plumbing to pass down correct shapes still need to be added.\n\nChange-Id: Ic4fee90af15679951a44bb5cc6ae454b98c4c194\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": "cc3c25622c731d14a6f01bce684330eccba7db5a",
      "tree": "6e35c1358b88c77410f066f309590a0e87bc023b",
      "parents": [
        "3a3bdd042d8bd056d31a1b37332e91c1307060a0"
      ],
      "author": {
        "name": "ztenghui",
        "email": "ztenghui@google.com",
        "time": "Fri Jan 17 10:34:10 2014 -0800"
      },
      "committer": {
        "name": "ztenghui",
        "email": "ztenghui@google.com",
        "time": "Fri Jan 17 13:42:09 2014 -0800"
      },
      "message": "Property support for light positioning.\n\nTune up the light size to make it look better.\n\nChange-Id: I139a05f3dd53dacbe55759b91188f0e1cc2c7f80\n"
    },
    {
      "commit": "3197cded4e265bc99dc82d695bbb7163fe134ed4",
      "tree": "1e466d046d1b38af09318b4de59dd33f6a1c08eb",
      "parents": [
        "c46809e9979204aa9a131d8933da23d298411441"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Jan 16 14:03:39 2014 -0800"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Jan 16 14:03:39 2014 -0800"
      },
      "message": "Map shadow light position globally\n\nChange-Id: Ic3201cecdf5d2a1dd628e7e40aee912ef516d3b2\n"
    },
    {
      "commit": "7b4516e7ea552ad08d6e7277d311ef11bd8f12e8",
      "tree": "a97549bff020af39946aabd5a5c27c1151a90539",
      "parents": [
        "0ffd9ca5798d6c55d2a02f453dd181899639dce2"
      ],
      "author": {
        "name": "ztenghui",
        "email": "ztenghui@google.com",
        "time": "Tue Jan 07 10:42:55 2014 -0800"
      },
      "committer": {
        "name": "ztenghui",
        "email": "ztenghui@google.com",
        "time": "Fri Jan 10 17:18:53 2014 -0800"
      },
      "message": "Calculate and show the shadow from a spot light.\n\nChange-Id: Ia558852e8cde5d33866b22875eb501e4c6858819\n"
    },
    {
      "commit": "d218a92c0afb8c0d98135b20b52ac87236e1c935",
      "tree": "3eef804e9948ca463e720ac636db46b2637fdabb",
      "parents": [
        "8523706236b0b2536ed4359d92ec6ccdca060d78"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Jan 02 17:13:34 2014 -0800"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Jan 03 13:55:08 2014 -0800"
      },
      "message": "Use const where possible for drawing parameters\n\nThey should never be modified by a Renderer, only read and copied.\n\nChange-Id: I9d8d55dca19115ee9dfeb2bb3f092ba2fb327cd4\n"
    },
    {
      "commit": "564acf7c9bff822f608cda0d5df0a64a9f9aaefd",
      "tree": "93a3203fc99098dedd4df5660c96d6800c97ae93",
      "parents": [
        "e459367a3a49cbe94dfe38c50369431614dddc9c"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Jan 02 16:46:18 2014 -0800"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Jan 02 16:52:32 2014 -0800"
      },
      "message": "Fix Clang warnings/errors\n\nFix several build warnings (struct !\u003d class, int !\u003d size_t) and errors\n(variable leng non-POD arrays).\n\nChange-Id: I70b4e784365514303d8954bfcb1f39d7c22c1321\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": "b458942bb6e6cf13c68341dda35ef5cee060f5ae",
      "tree": "7421a2e45b1260472640b715150b84b317e09570",
      "parents": [
        "6debfb90eea84959ab51a6c3585549dd48e277f3"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Dec 26 15:13:13 2013 -0800"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Dec 27 14:40:06 2013 -0800"
      },
      "message": "Create abstract base class for OpenGLRenderer\n\nThis will eventually serve as a base class to allow\nDisplayListRenderer to split off from OpenGLRenderer, and could\neventually support other rendering approaches, such as an\nSkCanvas/SkPicture.\n\nThis will also be the main source of (implementation-independent)\ndocumentation of the canvas/renderer methods.\n\nChange-Id: I52047f338f5cf86a3b0b3002af7154bff5c3c227\n"
    },
    {
      "commit": "ba9b613437c34873fa95800a25fc51720638267c",
      "tree": "c47ac384de0306a48956ad6efaa3c5c5e51553c0",
      "parents": [
        "d83adf00ae6cb073fa0e4fbb837c2b87d824ec4f"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Sun Dec 15 17:10:19 2013 -0800"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Dec 16 14:57:00 2013 -0800"
      },
      "message": "Create private properties on GLCanvas for experimentation with 3d\n\nChange-Id: I17772f61efce727cb4c1111f4d97f58c741786b8\n"
    },
    {
      "commit": "55bfb4e728fe1db619af5d2c287f4abe711b3343",
      "tree": "3b9c9eb0902fdb0f8991259a04c342f89f65bcaa",
      "parents": [
        "d08eadd287991ec18eafe620b24e2b1bf0ce1f2d"
      ],
      "author": {
        "name": "ztenghui",
        "email": "ztenghui@google.com",
        "time": "Tue Dec 03 10:38:55 2013 -0800"
      },
      "committer": {
        "name": "ztenghui",
        "email": "ztenghui@google.com",
        "time": "Fri Dec 13 17:25:47 2013 -0800"
      },
      "message": "Calculate and show Ambient shadow.\n\nBasically we compute the shadow as a strip of triangles, whose alpha value\nis the strength of the shadow.\nWe use the normal to extend the geometry.\nAnd we use static function and try to avoid new/malloc in the computation.\n\nChange-Id: I382286f1cad351bd5ff983f76f446c075819dcaf\n"
    },
    {
      "commit": "18809c063b89d9b235401d080b952885a4ef9628",
      "tree": "7a73454d7d3007b5d08032bfff6515b435947fb2",
      "parents": [
        "f8bc964289df5ea53672df401c6d51dd47c02e53",
        "f57776b2d195f0937906eb88b777bb55ccc36967"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Dec 13 21:55:49 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Dec 13 21:55:50 2013 +0000"
      },
      "message": "Merge \"3d view system!\""
    },
    {
      "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": "630491973269da1b260e69d6a3f9490b97705037",
      "tree": "3219a8c0c46d5465320afd8cf5f5ac795f7047d4",
      "parents": [
        "1290d8e64fabc0b32487e2dfb599e5f288ecfd94"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Tue Dec 10 15:22:01 2013 -0800"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Tue Dec 10 15:22:01 2013 -0800"
      },
      "message": "Unbreak display list debug dumping\n\nChange-Id: I1c6a79f047b29fa60907f6e128cb843a45b88bff\n"
    },
    {
      "commit": "4b9a19a8f865970e0079f431c8c2c2a8e4333ae9",
      "tree": "8133e88dfa631ab30311375f3751f7b7ff09e58b",
      "parents": [
        "8af04d8b85183978aa6182c281325394bf47a593"
      ],
      "author": {
        "name": "Leon Scroggins III",
        "email": "scroggo@google.com",
        "time": "Tue Dec 03 15:06:30 2013 -0500"
      },
      "committer": {
        "name": "Leon Scroggins III",
        "email": "scroggo@google.com",
        "time": "Tue Dec 03 15:23:11 2013 -0500"
      },
      "message": "Call SkBitmap::config() instead of  ::getConfig()\n\ngetConfig() has been deprecated.\n\nChange-Id: I32066256ab82ac4760c752c80856d1b56d291fae\n"
    },
    {
      "commit": "f0a590781b2c3e34132b2011d3956135add73ae0",
      "tree": "336c6ca241497181743671e2f6e1af4405ab0237",
      "parents": [
        "e6a408ed31a7d1fb8ace6b80487d179b2f085fd3"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue Nov 19 18:00:46 2013 -0800"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Nov 22 11:36:12 2013 -0800"
      },
      "message": "Clean up quick rejection, especially surrounding points + lines.\n\nbug:4351353\n\nquickReject and quickRejectNoScissor have been renamed and refactored:\n- to make the scissor side effect clear and explicit\n- dangerous methods no longer public\n- to make the simple quick reject check logic const\n- simple quick reject is now conservative\n\nThis CL also fixes several issues with line and point quickRejection -\nsub-pixel and hairline lines are much less likely to be incorrectly\nrejected, especially at small canvas scale.\n\nAdditionally, alpha modulation for AA points \u003c 1px in size is now\ncorrect, dumplicating SW behavior (similar to lines and stroked\nshapes work).\n\nChange-Id: Ibb0710c721b9fb415d05acf54dd3d2b4d602156a\n"
    },
    {
      "commit": "4063a0e03ba2e354cc6d19c0ffc073fd5b8aa2ca",
      "tree": "03565a41497ef69a96765fa7e8e192db4c674952",
      "parents": [
        "431b4359e4be6426aaa30ae7b6552f4310d4d9d6"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Nov 15 16:06:56 2013 -0800"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Nov 18 12:51:08 2013 -0800"
      },
      "message": "Clean up modelView matrix logic\n\nbug:11359533\n\nAlso changes shader matrix to correctly account for modelView and\ncurrentTransform()\n\nChange-Id: I6ce18857dc6d08ea08ca7535385c2ad351ec3caa\n"
    },
    {
      "commit": "16e7d730c5fc974d5652a4a7a6e19a163225315a",
      "tree": "a05bb829a0951465d474420ba16695727a64a3a9",
      "parents": [
        "de51bbdb8642e9e099375b89b07edf3d27123141",
        "2f70da2bc5ce9f4766395cc9d848f0afe8f6a2a9"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@android.com",
        "time": "Wed Nov 06 16:15:38 2013 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Nov 06 16:15:38 2013 -0800"
      },
      "message": "am 2f70da2b: am 6ed16a89: am 0b807d2e: Merge \"Update the layer\\\u0027s alpha value upon composition of the layer\"\n\n* commit \u00272f70da2bc5ce9f4766395cc9d848f0afe8f6a2a9\u0027:\n  Update the layer\u0027s alpha value upon composition of the layer\n"
    },
    {
      "commit": "2f70da2bc5ce9f4766395cc9d848f0afe8f6a2a9",
      "tree": "59badb2ac86a840e1b4a1d4fc0cbec2a93fb3bde",
      "parents": [
        "a719f797be204464b6650e22a245902e44e05277",
        "6ed16a89d836a33b9242f91b05e8ecb149abf909"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@android.com",
        "time": "Wed Nov 06 16:09:54 2013 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Nov 06 16:09:54 2013 -0800"
      },
      "message": "am 6ed16a89: am 0b807d2e: Merge \"Update the layer\\\u0027s alpha value upon composition of the layer\"\n\n* commit \u00276ed16a89d836a33b9242f91b05e8ecb149abf909\u0027:\n  Update the layer\u0027s alpha value upon composition of the layer\n"
    },
    {
      "commit": "a5ff739d3c9e15d07f1d5c644b4f11205cdac0e8",
      "tree": "ee98034d893f195d9f692735e75ee22a816601da",
      "parents": [
        "1f8350935caa6a44ef2608e34d4e3a91db4424a7"
      ],
      "author": {
        "name": "Digish Pandya",
        "email": "digishp@codeaurora.org",
        "time": "Mon Nov 04 06:30:25 2013 +0530"
      },
      "committer": {
        "name": "Digish Pandya",
        "email": "digishp@codeaurora.org",
        "time": "Tue Nov 05 09:22:37 2013 +0530"
      },
      "message": "Update the layer\u0027s alpha value upon composition of the layer\n\nFixes: This patch makes sure that the layer\u0027s alpha value is\nup-to-date and does not reflect the previous view\u0027s alpha value.\nit fixes the square block on marquee fading edge when text view\nis applied transparency.\n\nChange-Id: I110649db72a75fecc02ba56c201a05773f80328c\n"
    },
    {
      "commit": "e63f7c622a2086aefa80983c6f41b74fb166bb42",
      "tree": "85b440de978e64c43fa5dfbe80ebd1a555b7155a",
      "parents": [
        "8c317898ee65462e9fa7b511ddf5d89c4d77e291"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Oct 17 10:30:55 2013 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Oct 17 10:37:15 2013 -0700"
      },
      "message": "Clean unused parameters, disable warnings\n\nChange-Id: Iddb872f53075dd022eeef45265594d1c6a9e2bc0\n"
    },
    {
      "commit": "5caebe4c7c8644b1dbf3fef23551373b95a8efd6",
      "tree": "b8319a89fd466d69bd1c0dbcfbdeabe034521ff9",
      "parents": [
        "0325fc366a3b89bb1e7b2101f1e50adc0365c652",
        "bd842f96ed4a9b7887be4702828ea0034d66ef85"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Sep 20 17:37:20 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Sep 20 17:37:20 2013 -0700"
      },
      "message": "am bd842f96: am d8a84a86: Merge \"Correct bitmap merging logic\" into klp-dev\n\n* commit \u0027bd842f96ed4a9b7887be4702828ea0034d66ef85\u0027:\n  Correct bitmap merging logic\n"
    },
    {
      "commit": "996fe656340ede058a6f0e6b18f9ec525ddb4e27",
      "tree": "7efca330f6633eb665b611469f1149dabb1383a5",
      "parents": [
        "564c45b976b56bc33f18271e1c813a0bd91b2eb4"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Sep 20 17:13:18 2013 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Sep 20 17:25:31 2013 -0700"
      },
      "message": "Correct bitmap merging logic\n\nbug:10863163\n\nThis fixes two issues\n\nThe check for pure translation was incorrect. It was fixed and renamed\nfor clarity.\n\nCertain matrix paths weren\u0027t setting kTypePositiveScale. For\nsimplicity (and because positive scale is simple to check) removed\nflag in favor of dynamic checking.\n\nChange-Id: Ic5ce235653ef49a68b8b242bd89fc2e95874ecc9\n"
    },
    {
      "commit": "2765c0b71679b5762ed72610e8310abd6d071b96",
      "tree": "e30f430930366ef5be5688c1b6a0a1adbf2984d2",
      "parents": [
        "e08e6632294143f889ab68f0c3453ee6802dc60e",
        "d97303a73babf8f820a78f72d558be8e4ad09f47"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue Sep 17 19:17:12 2013 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue Sep 17 19:17:12 2013 -0700"
      },
      "message": "resolved conflicts for merge of d97303a7 to master\n\nChange-Id: I29e2e64e0ec241675762482cbe5c5e9dc58adca6\n"
    },
    {
      "commit": "32f05e343c5ffb17f3235942bcda651bd3b9f1d6",
      "tree": "f3c0ed7a1a252728c21bd5b178ff69d625bf74d5",
      "parents": [
        "0f3e1487b26a822697f70747290809081c2072cc"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue Sep 17 16:20:29 2013 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue Sep 17 17:48:14 2013 -0700"
      },
      "message": "Conservatively estimate geometry bounds\n\nbug:10761696\n\nAvoids a case where a rect with top coordinate of (e.g.) 0.51f is\nassumed to not draw in the first row of pixels, which leads to it not\nbeing clipped. Since rounding can cause it to render in this first\npixel anyway, we very slightly expand geometry bounds.\n\nNow, in ambiguous cases, the geometry bounds are expanded so clipping\nis more likely to happen.\n\nChange-Id: I119b7c7720de07bac1634549724ffb63935567fc\n"
    },
    {
      "commit": "2f93af4574fbca9c94679744114ce40496aa69b8",
      "tree": "35b0f5031d9de0b37444ef1b35f19155d3075442",
      "parents": [
        "efb6beb4388e51a2e29ec605c500801f7ff150e6",
        "53760b4a97fb2f88e94da73d647ff80221b3c454"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Tue Sep 10 14:08:12 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Sep 10 14:08:12 2013 -0700"
      },
      "message": "am 53760b4a: am 874ae2ad: Merge \"Fix scissor for functor invocation\" into klp-dev\n\n* commit \u002753760b4a97fb2f88e94da73d647ff80221b3c454\u0027:\n  Fix scissor for functor invocation\n"
    },
    {
      "commit": "25d2f7bc1ff9b475eff75bfff647466e91dbacb2",
      "tree": "2a4dc136adae063c2018ce35bd3e8f9944a15d92",
      "parents": [
        "b776122a8aa9fd082fa8aaa216c8a589d709c4c9"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Tue Sep 10 13:12:09 2013 -0700"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Tue Sep 10 20:45:29 2013 +0000"
      },
      "message": "Fix scissor for functor invocation\n\n Bug: 10677765\n enableScissor() must precede setScissorFromClip() as\n otherwise setScissorFromClip() doesn\u0027t do anything.\n Also make sure to call setScissorFromClip() if\n enableScissor() returns true as enableScissor() calls\n resetScissor() if the scissor state has changed.\n\nChange-Id: I9226b20bb256c92066aae344e4e6407540b6eae9\n"
    },
    {
      "commit": "815fbbdfca52c37f251f156122b5537a9b9807e9",
      "tree": "7b26ac3a028f3e434a083f4937cfb3a56028dc5f",
      "parents": [
        "84ba33acf9eba178bddf06159fa974e13a9b76d5",
        "7ff37ada138d9023e9d646f7195ae761a7b83ff2"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Aug 26 15:12:06 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon Aug 26 15:12:06 2013 -0700"
      },
      "message": "am 7ff37ada: am ff2c22e2: Merge \"Move functor GL setup to just before functor\" into klp-dev\n\n* commit \u00277ff37ada138d9023e9d646f7195ae761a7b83ff2\u0027:\n  Move functor GL setup to just before functor\n"
    },
    {
      "commit": "54f574acf4dd5483170b8f79e2f7c70b58763ce7",
      "tree": "8d97e104903d19019cb538fef06fac6597d384ba",
      "parents": [
        "5bc1ea4e4ae0133d4d5eaa4ac98cf4719effd032"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Aug 26 11:23:46 2013 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Aug 26 11:23:46 2013 -0700"
      },
      "message": "Move functor GL setup to just before functor\n\nbug:10399469\n\nBecause the stencil setup can issue draws, it *must* come before the\nGL state setup.\n\nChange-Id: I52a36213549fc60b091a90cbb923a1f0d35f9a65\n"
    },
    {
      "commit": "2f7c6f04cc0593c449da3334653e6d0c20016c2b",
      "tree": "1eef9cd54336cc1430e6d5fd7d206e490f72bc3e",
      "parents": [
        "faee2c26eff239c7dadc33caee4dc96e3ac3c5fe",
        "dfb79408892b3f168204c54a9b81d813921fb0f9"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Aug 21 12:02:35 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Aug 21 12:02:35 2013 -0700"
      },
      "message": "am dfb79408: am 5b8efc47: Merge \"Add overdraw debugging that accounts for Deuteranomaly\" into klp-dev\n\n* commit \u0027dfb79408892b3f168204c54a9b81d813921fb0f9\u0027:\n  Add overdraw debugging that accounts for Deuteranomaly\n"
    },
    {
      "commit": "627c6fd91377ead85f74a365438e25610ef1e2ee",
      "tree": "3fad6c0a8a6fb3e4c88702b6a407a0fdd75be065",
      "parents": [
        "906da6bfe4092fda1daff63e00e9f2ce1daac00b"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Aug 21 11:53:18 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Aug 21 11:53:18 2013 -0700"
      },
      "message": "Add overdraw debugging that accounts for Deuteranomaly\n\nChange-Id: I31f68a07aa7cf0490d2572e24e4c5ac2066a1151\n"
    },
    {
      "commit": "3380cfdc77100e87aa8390386ccf390834dea171",
      "tree": "cc6b223258e05a062b1b075f414bcf49ad71a051",
      "parents": [
        "9a9880856af321d0db45e047f21154a0f2010511"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Aug 15 16:57:57 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Aug 15 17:00:10 2013 -0700"
      },
      "message": "Replace float arrays with readable names\n\nChange-Id: I32a8be560b60a4ac5cbee2fec4574b2c5df9f825\n"
    },
    {
      "commit": "003123004f7b23b3dc472d5c40b8c1a16df37a54",
      "tree": "974c2608d0f3f2477acb6da24b9a935f44952033",
      "parents": [
        "37ee68fc091f64e17c0ef29b123b782b6daecf16"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Aug 08 19:11:20 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Aug 09 03:52:29 2013 +0000"
      },
      "message": "Remove an unnecessary allocation\n\nAlso remove dead code from OpenGLRenderer.cpp\n\nChange-Id: I7eb54ca19e77ee3c32f1fe9513a031e6b2e115cf\n(cherry picked from commit 5c7d5ab878b26f855175a3305a14ac12fcacf25e)"
    },
    {
      "commit": "b213cec0ce659c1e35c3e7f60a61bae38d94482a",
      "tree": "3fc40dd88060676ff462c836a548615ddef05ffe",
      "parents": [
        "03ed0127dae141d99b003ede9ba3ea937128e471",
        "5e49b307eb99269db2db257760508b8efd7bb97d"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Aug 02 20:34:38 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Aug 02 20:34:38 2013 +0000"
      },
      "message": "Merge \"Fix quickReject\u0027s handling of AA ramp geometry\""
    },
    {
      "commit": "5e49b307eb99269db2db257760508b8efd7bb97d",
      "tree": "18c9f02b947e99fe8aa5b27074725b11fc6df2ba",
      "parents": [
        "cb9accefb19ba6ae6fd449dc9ab62e972b51335c"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue Jul 30 19:05:20 2013 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Aug 02 11:29:22 2013 -0700"
      },
      "message": "Fix quickReject\u0027s handling of AA ramp geometry\n\nBy having quickReject round out the window-space geometry bounds, we\nprevent the AA perimeter (which falls outside the local bounds passed\nin) from drawing outside the clip.\n\nChange-Id: I8ee36be9039a9c47906815ee2f0dbaa5eb910b82\n"
    },
    {
      "commit": "b7b93e00893f5c690a96bd3e0e10583bc5721f83",
      "tree": "89c975e81ab527630ab4c10478b80bca12593d24",
      "parents": [
        "5d3dff1d66f99fbd5bef9178e62d789119c02ad1"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Aug 01 15:29:25 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Aug 01 15:35:24 2013 -0700"
      },
      "message": "Fix region clipping bugs\nSee external bug #58344\n\nChange-Id: Iecd6c41fc8076cd76add2335d3442a6dd8878f12\n"
    },
    {
      "commit": "1e546815bbb736c50679a8aefc25f48561026fc5",
      "tree": "11a3b7106638c123d052d50ce3e2a1757e004cb4",
      "parents": [
        "3a6f25512c0a682b10961a5a7428e3393ffb0b75"
      ],
      "author": {
        "name": "Victoria Lease",
        "email": "violets@google.com",
        "time": "Tue Jun 25 14:25:17 2013 -0700"
      },
      "committer": {
        "name": "Victoria Lease",
        "email": "violets@google.com",
        "time": "Wed Jul 31 15:50:47 2013 -0700"
      },
      "message": "Support RGBA fonts and bitmap fonts (and RGBA bitmap fonts)\n\nQuite a few things going on in this commit:\n\n- Enable bitmap strikes by default in Paint objects.\n\nThe SkPaint parameter that enables bitmap strikes was not previously\nincluded in DEFAULT_PAINT_FLAGS. This effectively disabled bitmap\nfonts. Oops! It\u0027s for the best, though, as additional work was needed\nin Skia to make bitmap fonts work anyway.\n\n- Complain if TEXTURE_BORDER_SIZE is not 1.\n\nOur glyph cache code does not currently handle any value other than 1\nhere, including zero. I\u0027ve added a little C preprocessor check to\nprevent future engineers (including especially future-me) from\nthinking that they can change this value without updating the related\ncode.\n\n- Add GL_RGBA support to hwui\u0027s FontRenderer and friends\n\nThis also happened to involve some refactoring for convenience and\ncleanliness.\n\nBug: 9577689\nChange-Id: I0abd1e5a0d6623106247fb6421787e2c2f2ea19c\n"
    },
    {
      "commit": "98427708a81eefcc24ae29e2f22e55f1ae44c927",
      "tree": "b541f690c964d8bce9562a93203dd7aeb5ad909b",
      "parents": [
        "fd23eca5ba30a1624233c9597f8c4b9db790994b",
        "9ab2d1847552aa4169b4325aae1b1368d6947a9f"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Jul 22 23:31:18 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jul 22 23:31:20 2013 +0000"
      },
      "message": "Merge \"Ensure glActiveTexture is cleaned up correctly on functor resume\""
    },
    {
      "commit": "9ab2d1847552aa4169b4325aae1b1368d6947a9f",
      "tree": "52955e896e6f021961bbfc9dd52003c918fdbb50",
      "parents": [
        "7bfddb5434736a26fa9b32d7cd1741067169ae74"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Jul 22 16:16:06 2013 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Jul 22 16:21:55 2013 -0700"
      },
      "message": "Ensure glActiveTexture is cleaned up correctly on functor resume\n\nChange-Id: I103d7d63b17289d599c2c08dcc442cfba9b8e51d\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": "ecca6da4eab601f05a9d977c8d2651068b6e16b2",
      "tree": "d7b3d39eb65155174cafe6c3033be0917bde15ed",
      "parents": [
        "e77d6dd94371b97a8fac21a60b804b4f99559eab"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue Jul 16 13:27:18 2013 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue Jul 16 13:27:18 2013 -0700"
      },
      "message": "Support stencil-based clipping for functors\n\nbug:9070351\nChange-Id: I1c54e1bea1b84b1619cce27b14f189b42cab7062\n"
    },
    {
      "commit": "c36fe2fc5354fadc140c898f59d47859cbdeac67",
      "tree": "a238c4eb527573da5ecbc3ac4c31a240a4a1eb3c",
      "parents": [
        "1e09cfaa689cff21d3d00883d38af5c296859fdb",
        "55e789dbc782be0dcaf1d4bae5f32e9e2f674152"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Jun 28 11:15:02 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Jun 28 11:15:02 2013 -0700"
      },
      "message": "am 55e789db: am ed96349a: am 3d1b158e: Merge \"Fix out of range glCopyTexImage2D Bug #9425270\" into jb-mr2-dev\n\n* commit \u002755e789dbc782be0dcaf1d4bae5f32e9e2f674152\u0027:\n  Fix out of range glCopyTexImage2D Bug #9425270\n"
    },
    {
      "commit": "b254c242d98f4a9d98055726446351e52bece2c6",
      "tree": "69df91645e499216cadb4e9ba11e57bc32b2d681",
      "parents": [
        "e6cb43a1ea50681d2da30ce5e8cb5ac97e80e88a"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jun 27 17:15:24 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jun 27 17:15:24 2013 -0700"
      },
      "message": "Fix out of range glCopyTexImage2D\nBug #9425270\n\nA better solution would be to use glCopyTexImage2D whenever possible but\nthis change would be a little more dangerous.\n\nChange-Id: Ib1aaceda39d838716285ef97f356721416822dbb\n"
    },
    {
      "commit": "55b6f95ee4ace96c97508bcd14483fb4e9dbeaa0",
      "tree": "f66490c89db4ac96004144731a89d1956108f1a0",
      "parents": [
        "9feab843ac8139f4e971d93fd767470d0d727e41"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jun 27 15:27:09 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jun 27 15:40:46 2013 -0700"
      },
      "message": "Track the atlas\u0027 generation ID\nBug #9589379\n\nIf the atlas is terminated/reinitialized and a view does not invalidate\nin between it might end up using a stale AssetAtlas::Entry. This change\nis similar to how 9patch meshes are cached in DrawPatchOp: we simply\ntrack the generation ID of the cache to make sure we always use the\nlatest data.\n\nChange-Id: Ib5abb3769d2ce0eabe9adc04e320ca27c422019e\n"
    },
    {
      "commit": "0e87f00f8cb79635aa70b9a2dfa02bf19dc7473d",
      "tree": "f109c7a20dc65947e8d69cd274a10b512a46d940",
      "parents": [
        "2c290392c9a934f9ac48364af01c848b01ba8e80"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Jun 19 16:54:59 2013 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Jun 21 13:16:31 2013 -0700"
      },
      "message": "Initialize MergingDrawBatch clip with viewport bounds\n\nThis allows merged, clipped operations to behave correctly within a\nsavelayer, even if the base viewport has a large offset.\n\nAdditionally, disregard opaqueness when within a\ncomplexclip/savelayer, as the coverage can\u0027t be trusted.\n\nChange-Id: Ic908b82a4bb410bc7fac1b4295f4874ed166efc5\n"
    },
    {
      "commit": "03c00b5a135e68d22ca5bb829b899ebda6ed7e9d",
      "tree": "7538aa95ebbfb5c06aaaebbd22966cddcce2ee1e",
      "parents": [
        "d485ef27c795648c4a05c4c089e8c5a15712fd36"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jun 20 18:30:28 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Jun 21 10:13:58 2013 -0700"
      },
      "message": "Batch 9-patches in a single mesh whenever possible\n\nThis change also fixes the way batched bitmaps were handled\ninside a layer. The layer is now correctly dirtied to minimize\nthe amount of pixels to blend.\n\nFix alpha, mode and opaque computations for DrawPatchOp.\n\nChange-Id: I1b6cd581c0f0db66c1002bb4fb1a9811e55bfa78\n"
    },
    {
      "commit": "fb5a41a371e540f402e3dd987b0fbf92d1267902",
      "tree": "4ac7697c19cef2444e9d48fbe32e4de602cecd34",
      "parents": [
        "ff4ea7987714dad4f4d9065902f0ac5fd61833fd",
        "2458939b5f926176a485a3196f59688eed78e858"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jun 19 23:40:57 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jun 19 23:40:57 2013 +0000"
      },
      "message": "Merge \"Fix regression: TextureView.setAlpha() was ignored\""
    },
    {
      "commit": "2458939b5f926176a485a3196f59688eed78e858",
      "tree": "fc608a8ae818144c69f679e059adb1fa198e01aa",
      "parents": [
        "31e08e953fe7bdb1b1cbc247156cb6a19917a2f1"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jun 19 12:17:01 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jun 19 12:17:01 2013 -0700"
      },
      "message": "Fix regression: TextureView.setAlpha() was ignored\n\nChange-Id: I9f43eec0fe23a65dcc1cf9cd0ac1f5e8907786a7\n"
    },
    {
      "commit": "cadc5bf4116945a1800061f984d95175e20caba6",
      "tree": "e56682c2d1325a06ef7a5b4c66444d9876d932b0",
      "parents": [
        "1f54f9246e500042a42fde627ce5c438c8da895d",
        "31e08e953fe7bdb1b1cbc247156cb6a19917a2f1"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jun 19 19:16:21 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jun 19 19:16:21 2013 +0000"
      },
      "message": "Merge \"Share Caches\u0027 index buffer with FontRenderer\""
    },
    {
      "commit": "31e08e953fe7bdb1b1cbc247156cb6a19917a2f1",
      "tree": "a9b1d4f934c40a6c1a6e3c32e10451fc323ebaea",
      "parents": [
        "2d5945e88731787babce1061f44cd54f02eeefc5"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jun 18 15:53:53 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jun 18 15:53:53 2013 -0700"
      },
      "message": "Share Caches\u0027 index buffer with FontRenderer\n\nThis reduces state changes when we draw 9patches and text together,\nwhich happens *a lot*. Also disable the NV profiling extension by\ndefault since it doesn\u0027t play nice with display lists deferrals.\nTo enable it set debug.hwui.nv_profiling to true.\n\nChange-Id: I518b44b7d294e5def10c78911ceb9f01ae401609\n"
    },
    {
      "commit": "36d38cb904556025b76c6d98f9fe2ccfa1c8a304",
      "tree": "ce339566cfe52d099f529241460fcac508fdcda6",
      "parents": [
        "f0542ee466372a29ebaa3c1ea1f362c353a28f4a",
        "d72b73cea49f29c41661e55eb6bfdbc04f09d809"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Jun 17 21:02:56 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jun 17 21:02:56 2013 +0000"
      },
      "message": "Merge \"Better handle op size edge cases\""
    },
    {
      "commit": "d72b73cea49f29c41661e55eb6bfdbc04f09d809",
      "tree": "e6782e49ac767cd62e22ca8e44f18eb3977bb1e6",
      "parents": [
        "4aaf8b3d4b160aea5ceb5ccf799e44c1d5a3f14b"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Jun 17 13:52:06 2013 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Jun 17 13:52:06 2013 -0700"
      },
      "message": "Better handle op size edge cases\n\nbug:9464358\n\nPreviously, empty and unknown sized ops are assumed to fully cover\ntheir clip. This is now corrected such that empty sized ops are\npre-rejected before defer. Additionally, unknown sized ops disable\noverdraw avoidance.\n\nChange-Id: Icf2ce24f98be5ea6299e24ffcf826790373564a1\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": "a02c4ed885d97e516f844ddb0a96083f1b45b4cb",
      "tree": "74a79cf96d32b37ee36c9308170aa3643093dce5",
      "parents": [
        "5f73a7df6dccd61ee2596ece7e9e3c66a7a58339"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Jun 14 13:43:58 2013 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Jun 14 13:43:58 2013 -0700"
      },
      "message": "Fix clip merging behavior\n\nPreviously, a new op with a clipped side could be added to a\nMergingDrawBatch without considering the batch\u0027s current bounds.\n\nChange-Id: I1b873ecf821bad7cda6630c3f311edd90ac5cc8c\n"
    },
    {
      "commit": "39a908c1df89e1073627b0dcbce922d826b67055",
      "tree": "ff2549616c210443c773bef7c1c35391d8ee6d99",
      "parents": [
        "6db1054692495be7413d0fcc49a0f26c179d6fed"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Jun 13 14:39:01 2013 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Jun 13 16:16:13 2013 -0700"
      },
      "message": "Fix various draw ops that may incorrectly not scissor\n\nbug:8965976\n\nAlso consolidates quickReject scissor-ing and scissor-less paths.\nRenamed plain \u0027quickReject\u0027 method, as it has sideEffects beyond what\nthe java and skia canvases do.\n\nChange-Id: I4bdf874d3c8f469d283eae1e71c5e7ea53d47016\n"
    },
    {
      "commit": "7112fddbe26acb12f478f4e77ff9607b523180b4",
      "tree": "1ecc0d7566dbb88ed71bc36811f7fddb412a6ae6",
      "parents": [
        "512d8fbe51186967d4a3db9f4b3a3b0f335557fe",
        "405436021da156fbe3c5d4de48bdefa564cf7fc0"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jun 13 01:19:46 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jun 13 01:19:46 2013 +0000"
      },
      "message": "Merge \"Restore buildLayer()\u0027s old behavior; it\u0027s synchronous again Bug #9193833\""
    },
    {
      "commit": "405436021da156fbe3c5d4de48bdefa564cf7fc0",
      "tree": "339d70e2c2e90f87a5c303e7167fe9db0508ed64",
      "parents": [
        "97f41383eb2bb098767ca153e470009fea810540"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jun 12 15:31:28 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jun 12 15:31:28 2013 -0700"
      },
      "message": "Restore buildLayer()\u0027s old behavior; it\u0027s synchronous again\nBug #9193833\n\nChange-Id: I4ee07e65c0a8967f0b55da030ecaad6dfc46136f\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": "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": "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": "a404e16e4933857464046d763ed7629cd0c86cbf",
      "tree": "fec5bfa47138b29d22b25b9d87dc84ebfea7f1e6",
      "parents": [
        "64770d16b0907a8e1ee81ef6c8fa398a6bdbee79"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri May 24 16:19:19 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri May 24 16:19:19 2013 -0700"
      },
      "message": "Make sure atlas antries can correctly filter/wrap textures\n\nThe virtual textures would each have their own values for wrapping\nand filtering which could lead to conflict and/or extraneous GL\ncommands being issued.\n\nChange-Id: I64cb59a03e598f46bf645bd1d30fccfa63a07431\n"
    },
    {
      "commit": "7f77736599c39cdd5540168fc652cf6846799a33",
      "tree": "d37082cd742d57d27ec7469e9fa4e49499b24f9e",
      "parents": [
        "41541825bc90dac740e424cdd41a8c997e15cdb7",
        "2db5e993b626794eb07a0ff354269f9a77da81b3"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed May 22 00:43:48 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed May 22 00:43:48 2013 +0000"
      },
      "message": "Merge \"Merge scaled bitmaps with translated bitmaps\""
    },
    {
      "commit": "2db5e993b626794eb07a0ff354269f9a77da81b3",
      "tree": "97d5bfdcbc76c68de765015b64b5297128e02c5c",
      "parents": [
        "779321fde1c6461884b521c2ce7134468e085ba5"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue May 21 15:29:59 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue May 21 17:42:43 2013 -0700"
      },
      "message": "Merge scaled bitmaps with translated bitmaps\n\nChange-Id: I03089f48f97b69fcb4a0171984d3ff548d41c4a8\n"
    },
    {
      "commit": "41541825bc90dac740e424cdd41a8c997e15cdb7",
      "tree": "c06c9c12d2d67381014c22dca77f22478825e642",
      "parents": [
        "7f43674db314ab76e77cfd2a9488058eae144aa8"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri May 03 16:35:54 2013 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue May 21 23:04:05 2013 +0000"
      },
      "message": "Use individual glyph positions to determine text bounds.\n\nbug:8766924\n\nPreviously text bounds were calculated to be from 0 to totalAdvance in\nthe X, and from the font\u0027s top to bottom. These are incorrect,\nespecially in light of the font fallback mechanism.\n\nNow, we calculate the bounds of the text as we layout each glyph.\nSince these are much tighter bounds in the common case, this\nsignificantly reduces the amount of clipping required (which in turn\nenables more aggressive text merging).\n\nChange-Id: I172e5466bf5975bf837af894a9964c41db538746\n"
    },
    {
      "commit": "6d29c8d5218cac0fb35f3b7c253f2bdebd44f15a",
      "tree": "e7b76c068ff3e8485fdc164118914ee3b53a2368",
      "parents": [
        "0ace0aa7d643b5b9952d32827575f041ba563c58"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed May 08 18:35:44 2013 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue May 14 14:12:55 2013 -0700"
      },
      "message": "Add tessellation path for points\n\nbug:4351353\nbug:8185479\n\nPoint tessellation is similar to line special case, except that we\nonly tessellate one point (as a circle or rect) and duplicate it\nacross other instances.\n\nAdditionally:\n\nFixes square caps for AA\u003dfalse lines\n\nCleanup in CanvasCompare, disabling interpolation on zoomed-in\ncomparison view\n\nChange-Id: I0756fcc4b20f77878fed0d8057297c80e82ed9dc\n"
    },
    {
      "commit": "72bd95b8feb7ef41eb5dd00003b1aed8f30f4abe",
      "tree": "9aa31d7268cdc556acf038536a9faf9efd4c7e05",
      "parents": [
        "94268b0dd908ea003772e24bec12cea473434486",
        "b90ff505df143abd957cfc19b60727e3460ee68c"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon May 06 13:56:23 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon May 06 13:56:23 2013 -0700"
      },
      "message": "am b90ff505: am fdf13c90: Merge \"Convert alpha from [0..1] to [0.255] range Bug #8808886\" into jb-mr2-dev\n\n* commit \u0027b90ff505df143abd957cfc19b60727e3460ee68c\u0027:\n  Convert alpha from [0..1] to [0.255] range Bug #8808886\n"
    },
    {
      "commit": "87b515cde53f3c8cc3fdf698c100e67508487e59",
      "tree": "f10b98ca590c33f7b789aa92a18d57f74f781b46",
      "parents": [
        "d3956321c173beb1fb096b5171e76ba7b7e1bc1e"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri May 03 17:42:27 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri May 03 17:42:27 2013 -0700"
      },
      "message": "Convert alpha from [0..1] to [0.255] range\nBug #8808886\n\nWithout this conversion, alpha was always set to 0 or 1 which causes\nthings to disappear mysteriously. Mysteries are meant to be solved\nand I solved them all in 6 characters.\n\nChange-Id: I2078420fbe968c046e999b0eabb24403e71108fd\n"
    },
    {
      "commit": "78dd96d5af20f489f0e8b288617d57774ec284f7",
      "tree": "742b702647ae37e196021707fa45cbb8568353e1",
      "parents": [
        "927bc7d72048ac90e3b95845699efb479b5589b4"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri May 03 14:24:16 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri May 03 17:08:20 2013 -0700"
      },
      "message": "Add an on-screen overdraw counter\n\nThe counter can be enabled by setting the system property called\ndebug.hwui.overdraw to the string \"count\". If the string is set\nto \"show\", overdraw will be highlighted on screen instead of\nprinting out a simple counter.\n\nChange-Id: I9a9c970d54bffab43138bbb7682f6c04bc2c40bd\n"
    },
    {
      "commit": "3b748a44c6bd2ea05fe16839caf73dbe50bd7ae9",
      "tree": "ea104e727beba793c10952f5b328478020859599",
      "parents": [
        "dd424cf079d2677e9333d89466f93166787e61c8"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Apr 17 18:54:38 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu May 02 13:32:09 2013 -0700"
      },
      "message": "Pack preloaded framework assets in a texture atlas\n\nWhen the Android runtime starts, the system preloads a series of assets\nin the Zygote process. These assets are shared across all processes.\nUnfortunately, each one of these assets is later uploaded in its own\nOpenGL texture, once per process. This wastes memory and generates\nunnecessary OpenGL state changes.\n\nThis CL introduces an asset server that provides an atlas to all processes.\n\nNote: bitmaps used by skia shaders are *not* sampled from the atlas.\nIt\u0027s an uncommon use case and would require extra texture transforms\nin the GL shaders.\n\nWHAT IS THE ASSETS ATLAS\n\nThe \"assets atlas\" is a single, shareable graphic buffer that contains\nall the system\u0027s preloaded bitmap drawables (this includes 9-patches.)\nThe atlas is made of two distinct objects: the graphic buffer that\ncontains the actual pixels and the map which indicates where each\npreloaded bitmap can be found in the atlas (essentially a pair of\nx and y coordinates.)\n\nHOW IS THE ASSETS ATLAS GENERATED\n\nBecause we need to support a wide variety of devices and because it\nis easy to change the list of preloaded drawables, the atlas is\ngenerated at runtime, during the startup phase of the system process.\n\nThere are several steps that lead to the atlas generation:\n\n1. If the device is booting for the first time, or if the device was\nupdated, we need to find the best atlas configuration. To do so,\nthe atlas service tries a number of width, height and algorithm\nvariations that allows us to pack as many assets as possible while\nusing as little memory as possible. Once a best configuration is found,\nit gets written to disk in /data/system/framework_atlas\n\n2. Given a best configuration (algorithm variant, dimensions and\nnumber of bitmaps that can be packed in the atlas), the atlas service\npacks all the preloaded bitmaps into a single graphic buffer object.\n\n3. The packing is done using Skia in a temporary native bitmap. The\nSkia bitmap is then copied into the graphic buffer using OpenGL ES\nto benefit from texture swizzling.\n\nHOW PROCESSES USE THE ATLAS\n\nWhenever a process\u0027 hardware renderer initializes its EGL context,\nit queries the atlas service for the graphic buffer and the map.\n\nIt is important to remember that both the context and the map will\nbe valid for the lifetime of the hardware renderer (if the system\nprocess goes down, all apps get killed as well.)\n\nEvery time the hardware renderer needs to render a bitmap, it first\nchecks whether the bitmap can be found in the assets atlas. When\nthe bitmap is part of the atlas, texture coordinates are remapped\nappropriately before rendering.\n\nChange-Id: I8eaecf53e7f6a33d90da3d0047c5ceec89ea3af0\n"
    },
    {
      "commit": "4a2bff7b387403ac976cd041cb5a1b57afa44d9c",
      "tree": "235677253345a16decf6519e76131c05882f6fa5",
      "parents": [
        "7ffb2fb3daf05459267745643689cc0e5875e659"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue Apr 16 13:50:16 2013 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Apr 22 15:00:52 2013 -0700"
      },
      "message": "Avoid incorrectly dirtying the functor output rect\n\nbug:8640186\nChange-Id: I360cb85e59cfdd0b499561e92b81089341d07046\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": "527a3aace1dd72432c2e0472a570e030ad04bf16",
      "tree": "24f8cca71f0377a88b35fbe060a3247040b3de9f",
      "parents": [
        "8d4c23b9c32f8c0328ebca538bb801716fe4478a"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Mar 04 10:19:31 2013 -0800"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Apr 15 13:53:02 2013 -0700"
      },
      "message": "Draw Operation merging\n\nMerge simple bitmap draw operations and text operations to avoid\nissuing individual gl draws for each operation. Merging other ops to\nbe done eventually.\n\nThe methods are different - the bitmap merging generates a single\nmesh for reused, unclipped images (esp. repeated images in a listview)\n\nThe text approach queries just defers the normal font rendering until\nthe last drawText in the sequence that can share the same shader.\n\nPatches are sorted and merged, but don\u0027t yet have a multiDraw\nimplementation. For now, the pretending-to-merge gives better sorting\nbehavior by keeping similar patches together.\n\nChange-Id: Ic300cdab0a53814cf7b09c58bf54b1bf0f58ccd6\n"
    },
    {
      "commit": "cf51a4199835e9604aa4c8b3854306f8fbabbf33",
      "tree": "9f5095c3243d0e5dc367c613eee01db80472f1a0",
      "parents": [
        "f8a67f4f5dd4c5499a6e7148331f0286e31203ec"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Apr 08 19:40:31 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Apr 11 14:07:34 2013 -0700"
      },
      "message": "Introduce PixelBuffer API to enable PBOs\n\nPBOs (Pixel Buffer Objects) can be used on OpenGL ES 3.0 to perform\nasynchronous texture uploads to free up the CPU. This change does not\nenable the use of PBOs unless a specific property is set (Adreno drivers\nhave issues with PBOs at the moment, Mali drivers work just fine.)\n\nThis change also cleans up Font/FontRenderer a little bit and improves\nperformance of drop shadows generations by using memcpy() instead of\na manual byte-by-byte copy.\n\nOn GL ES 2.0 devices, or when PBOs are disabled, a PixelBuffer instance\nbehaves like a simple byte array. The extra APIs introduced for PBOs\n(map/unmap and bind/unbind) are pretty much no-ops for CPU pixel\nbuffers and won\u0027t introduce any significant overhead.\n\nThis change also fixes a bug with text drop shadows: if the drop\nshadow is larger than the max texture size, the renderer would leave\nthe GL context in a bad state and generate 0x501 errors. This change\nsimply skips drop shadows if they are too large.\n\nChange-Id: I2700aadb0c6093431dc5dee3d587d689190c4e23\n"
    },
    {
      "commit": "58d110afa0e0f3843d72617046185a3c2d48dca9",
      "tree": "74090c0180b475041a9b760a8f8928aec8eec836",
      "parents": [
        "26c134398422a4f4e703cdf7b87fb1cb08d542c4"
      ],
      "author": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Wed Apr 10 07:43:29 2013 -0700"
      },
      "committer": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Wed Apr 10 07:43:29 2013 -0700"
      },
      "message": "Fix Contacts animation jank\n\nThe last frame of an animation stays stuck on the screen for a couple of frames.\nSpecifically, the \"Quick Contact\" animation that animates the picture\nclosed (fades/scales it away) animates all the way to the end... then hangs there\nbriefly before being taken down.\n\nThe problem is a rendering bug where we correctly detect that a DisplayList\nhas nothing to draw (since the last frame is completely transparent, alpha\u003d\u003d0),\nbut incorrectly ignore the fact that we cleared the transparent-background\nwindow prior to not-drawing that DisplayList. When we detect that there\u0027s\nnothing to draw, we don\u0027t bother swapping buffers. So even though we drew\nthe right thing (clearing the buffer), we didn\u0027t actually post the buffer to the\nscreen.\n\nThis change factors in both the clear and the draw to decide when to swap buffers.\n\nIssue #8564865 Quick contact close animation jank redux\n\nChange-Id: Ib922cff88a94f025b62f7461c1a29e96fe454838\n"
    }
  ],
  "next": "a151ef8c667a52d9fae28c09f780784f19bdb039"
}
