)]}'
{
  "log": [
    {
      "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"
    },
    {
      "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": "16ecda5317c40fc3da284952d9b3add34d6763ae",
      "tree": "1b1a5c9a2bd631a4e0878d7c6de6759e8e8e5909",
      "parents": [
        "0102443c4f52f2e15fd731c452f0c4745312d448"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Mar 29 10:59:59 2013 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Apr 01 17:21:35 2013 -0700"
      },
      "message": "Update view\u0027s alpha and layer docs\n\nbug:8501661\n\nMakes the performance issues and interaction with layer type/paint\nmore clear.\n\nAdditionally, corrects change from 47ab7d6612e2b5b8b66fb261dafef7c91264e173\nto still allow displayList alpha to override layer paint\n\nChange-Id: Ic94d75865700820489370461cd8ac9f9077a8d90\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": "7273daace9303f4662444111c40bb83d3ead4a92",
      "tree": "c1bb85a291fef72c89254888dea021bd3b847b1f",
      "parents": [
        "8ff0201ad0354b6c43aebac6075298ee847c42ef"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Mar 28 11:25:24 2013 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Mar 28 11:33:13 2013 -0700"
      },
      "message": "Fix issues related to saveLayer/restore deferral\n\nbug:8464795\n\nChanges drawModifiers and alpha to be restored for all operations,\nsince saveLayer/restore use these values, not just draw operations\n\nAlso forces a renderer state restoration before a deferred restore op\nis played back, in case it is associated with a saveLayer that\ndoesn\u0027t have the save_clip flag set\n\nChange-Id: I9da5d44fefbfffdee164c98f4f139843dacf85df\n"
    },
    {
      "commit": "9cd645121584bc167b3fab61b1ed89ddc4631365",
      "tree": "364cd6fecc6be3ea5192ce9cdfaa1f2fe9b4cc97",
      "parents": [
        "2e73f5b8b7c941e68fec2d763d9455a8d6190e25",
        "408eb12631376cbdc96803e918decf6ea804d346"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Mar 27 19:47:59 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Mar 27 19:47:59 2013 +0000"
      },
      "message": "Merge \"Set ignore flag during deferred savelayer\" into jb-mr2-dev"
    },
    {
      "commit": "408eb12631376cbdc96803e918decf6ea804d346",
      "tree": "b64da0f0826f2ae516062a59f22321ee6dcb5fe3",
      "parents": [
        "05191053545065c9c71afae173d3ab42a2d947fa"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue Mar 26 18:55:15 2013 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Mar 27 10:38:36 2013 -0700"
      },
      "message": "Set ignore flag during deferred savelayer\n\nbug:8471552\n\nAdditionally, add ignore check for draw functor\n\nIn deferred mode, if we don\u0027t set ignore, a 0 alpha displayList won\u0027t\nbe quickRejected, and not only would its contents be needlessly\ndeferred, but upon playback any functors would be drawn, ignoring the\nstate of the snapshot.\n\nChange-Id: Ib1edb3252080f674254086edee6f965f0efcce78\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": "5f803623559aab395a29d575c37c4e39c23a4b4e",
      "tree": "4735e8c0e03aa5222202af815dec86e404c18ad7",
      "parents": [
        "71b0017759b825f8bddcdda7425afc802e8918c9"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Mar 21 14:39:04 2013 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Mar 21 14:39:04 2013 -0700"
      },
      "message": "Isolate tiling clip state from snapshot\n\nbug:8409891\n\nSnapshots frequently have their clip overwritten due to applying\ndeferred state - now, store tiling clip information in a separate\nrect, outside of the snapshot so it isn\u0027t overwritten.\n\nChange-Id: I21ca4c45dcd802eae99e8de86f11525196777ccb\n"
    },
    {
      "commit": "9eac52698b18d089e73c7ec2bf73a64a39504733",
      "tree": "5c3668fc72aefd1685d6d7bd5e82547290cce281",
      "parents": [
        "7564c716bbee6a4825ae747797068d0e7c370c0d",
        "257ae3502cfad43df681b1783528d645bdabc63f"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Mar 21 01:54:42 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Mar 21 01:54:42 2013 +0000"
      },
      "message": "Merge \"Optimize text GL setup\" into jb-mr2-dev"
    },
    {
      "commit": "7564c716bbee6a4825ae747797068d0e7c370c0d",
      "tree": "aaba7442c9d22efcc6988dec251c63baae8907a8",
      "parents": [
        "426da33976036e902ea608f369d028a77afb4381",
        "e83569ca76308bfe945efcfef5a12c64b8fb8849"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Mar 21 01:17:29 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Mar 21 01:17:29 2013 +0000"
      },
      "message": "Merge \"Use snapshot alpha in all layer drawing\" into jb-mr2-dev"
    },
    {
      "commit": "e83569ca76308bfe945efcfef5a12c64b8fb8849",
      "tree": "84df4515004ed6715daf870885950d586d5c8962",
      "parents": [
        "afd10322f598abfda973ad78117dd297e09de212"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Mar 20 16:57:09 2013 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Mar 20 17:24:36 2013 -0700"
      },
      "message": "Use snapshot alpha in all layer drawing\n\nChange-Id: Icc093390da2fc36b2b6693d0e5e4357b2f730bf9\n"
    },
    {
      "commit": "257ae3502cfad43df681b1783528d645bdabc63f",
      "tree": "e257e21ddf04c544b0dbb6467d2d10a7c659ac1d",
      "parents": [
        "10c4d99f04a399c78529d0ae66c1785b26a125c3"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Mar 20 16:31:12 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Mar 20 16:35:05 2013 -0700"
      },
      "message": "Optimize text GL setup\n\nOnly performs the GL setup steps when at least one glyph is drawn.\nThis change also skips various draw operations when the specified\npaint draws with alpha \u003d 0.\n\nChange-Id: I9eda148b0503acffc552ee19196f5d52e958a1a2\n"
    },
    {
      "commit": "d90144db52c7297879b950cbbc85137ed123ab5b",
      "tree": "7c2bc1e65081419297a59f1b3fdfc2e4ca1a1c55",
      "parents": [
        "afd10322f598abfda973ad78117dd297e09de212"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue Mar 19 15:03:48 2013 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Mar 20 16:32:53 2013 -0700"
      },
      "message": "Update snapshot upon saveLayer deferral\n\nbug:8409891\n\nIn order to defer fbo-targetting saveLayer operations, it\u0027s necessary\nto update the snapshot at defer time so that deferred display state\n(namely, clip and transform) are fbo relative.\n\nRe-enables deferring, as the issues with saveLayer are fixed.\n\nChange-Id: I74b0779bc732675c747208f0757c3ea85f6dfbed\n"
    },
    {
      "commit": "4494599e5a4931426d5649e1d1c4f9db83824ae8",
      "tree": "987a2176952a5e871b80d2f9ab0468be9fb24d7d",
      "parents": [
        "fd81f91052d54c0354834fcd4f423025f2d8c93e",
        "a08f95cfeca7217f9c533b03663bf0dceedd259a"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Mar 20 22:22:44 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Mar 20 22:22:44 2013 +0000"
      },
      "message": "Merge \"Use snapshot alpha for layers\" into jb-mr2-dev"
    },
    {
      "commit": "16b7dc9c1ca4336b29afbd2f56f580014863add0",
      "tree": "45345d90604526ff3c35c319bd4bcd9fd2aa459c",
      "parents": [
        "a35d380bac61804551d4927df9595980373d2eff",
        "c46d07a29e94807e768f8b162ce9f77a88ba6f46"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Mar 19 02:04:29 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Mar 19 02:04:29 2013 +0000"
      },
      "message": "Merge \"Merge all shapes/paths caches to PathCache\" into jb-mr2-dev"
    },
    {
      "commit": "c46d07a29e94807e768f8b162ce9f77a88ba6f46",
      "tree": "9b6aec5f5dc1d73b6cd9d583d5c5c78285480070",
      "parents": [
        "338b18844434379de54050ff582d36ff6da3ba11"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Mar 15 19:06:39 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Mar 18 18:32:17 2013 -0700"
      },
      "message": "Merge all shapes/paths caches to PathCache\n\nThis change will greatly simplify the multi-threading of all\nshape types.\n\nThis change also uses PathTessellator to render convex paths.\n\nChange-Id: I4e65bc95c9d24ecae2183b72204de5c2dfb6ada4\n"
    },
    {
      "commit": "cada41aeb1e4cd87a94df2dfb4dd645309fe66ba",
      "tree": "85dd1a2069b6d88ba6dcec759d8be5e2bf0ac7ab",
      "parents": [
        "338b18844434379de54050ff582d36ff6da3ba11"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Mar 18 17:00:18 2013 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Mar 18 17:00:18 2013 -0700"
      },
      "message": "Work around saveLayer clipping/transform deferring issues\n\nbug:8409891\n\nDisables deferring\n\nChange-Id: I93498a4a45a5bfe01143faa154926c6a138db8f9\n"
    },
    {
      "commit": "d0afeac6dfc0856eeb72e6176ad6335e81871d24",
      "tree": "b850971ba9f3e12093fa550284b56f49e91df6ad",
      "parents": [
        "2e6ce4f737dcdeb748f467836dd12490c0cdfd22"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Mar 15 18:43:11 2013 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Mar 15 18:48:41 2013 -0700"
      },
      "message": "Reset draw modifiers after flushing\n\nbug:8401910\n\nThis avoids leaving the renderer in a state with stale pointers (to,\ne.g., shaders or color filters)\n\nChange-Id: Idf8b63657041352e70e34e91ea416fe4385d4bc2\n"
    },
    {
      "commit": "a08f95cfeca7217f9c533b03663bf0dceedd259a",
      "tree": "76be3f20c535d3f93d82624daa3a66d23765bdce",
      "parents": [
        "ff78583d8a73ca35ce65b5d2592570ff6fb9901b"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Mar 15 17:24:33 2013 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Mar 15 17:29:27 2013 -0700"
      },
      "message": "Use snapshot alpha for layers\n\nRemoves mMultipliedAlpha, using the snapshot alpha for all\nnon-overlapping display list alpha control.\n\nAdditionally, fixes opacity issues where children of\nhasOverlappingRendering\u003dfalse displaylists (both hw layer sublists and\nother sublists with hasOverlappingRendering\u003dfalse)\n\nChange-Id: I6adc16da855835f9f518f8967628e5d0135c789b\n"
    },
    {
      "commit": "ff78583d8a73ca35ce65b5d2592570ff6fb9901b",
      "tree": "24e7da9e7434d4884130a33f9b312a77654df733",
      "parents": [
        "9105ce744ecd237d4c74f4ee3a5b204c72e10c96"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Mar 08 13:12:16 2013 -0800"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Mar 15 14:48:18 2013 -0700"
      },
      "message": "Fully deferred displaylist replay\n\nbug:8037003\n\nA recursive drawDisplayList call is now entirely deferred before\nplaying back to the screen and issuing GL commands. This way, the\nentire stream can be inspected, optimized, and batch work (such as\nuploading textures) before issuing commands.\n\nAdditionally, this fixes an issue where operations draw could move\nacross restores corresponding to saveLayer(alpha). Those and other\nsimilar cases (such as complex clipping, requiring the stencil) are\nnow treated as batching barriers, with the operations that change\nrenderer state in a way that\u0027s difficult to defer are just re-issued\nat flush time.\n\nChange-Id: Ie7348166662a5ad89fb9b1e87558334fb826b01e\n"
    },
    {
      "commit": "ca89e2a68703bd428e8b66547d033a6ed35b3595",
      "tree": "5661de81848f7d26559531a1ea650ed7fea2decd",
      "parents": [
        "6e2004089305cf2cd958b52b234459a49a4e5c83"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Mar 08 17:44:20 2013 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Mar 11 17:05:28 2013 -0700"
      },
      "message": "Precache paths from a worker thread\n\nChange-Id: I3e7b53d67e0e03e403beaf55c39350ead7f1e309\n"
    },
    {
      "commit": "b09f1471262c3e629daacbc319bcefc2d621a484",
      "tree": "230927395ec54cd3af22e317d6c946d2dc376258",
      "parents": [
        "8afce816df7e8f668761f7ed443f54238958c49f"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Mar 07 17:01:05 2013 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Mar 07 17:03:25 2013 -0800"
      },
      "message": "Don\u0027t apply scale to glyphs when a perspective is set.\nBug #8337925\n\nMagazines uses very large scale factors that blow up font cache \u0026 CPU.\n\nChange-Id: I1c0ed430ed91b86cc6c6f59f7e8bdcc89a464e46\n"
    },
    {
      "commit": "624234f69b2a4781d24f3e4c6ae6450729e38397",
      "tree": "d6ae0bfd751e0e59329cb678c1d9f1cec447ee3e",
      "parents": [
        "0b58a3deab66c30a8d35072e55aac6279dd367cc"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Mar 05 16:43:31 2013 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Mar 05 18:12:35 2013 -0800"
      },
      "message": "Take only the scale params into account to rasterize text\n\nThis change extracts the scale parameters of the current transform\nto pass then to the font renderer. Rotation and perspective are\napplied to the generated mesh inside the vertex shader. This limits\nthe number of glyphs we have to create in the font cache and thus\nreduces memory churn.\n\nChange-Id: Ic5b3bae2b2b0e0250a8ee723b071a1709725c749\n"
    },
    {
      "commit": "3b753829ae858d424fe109f714745379a6daf455",
      "tree": "2b4c370574319ff1cfbd5014be3748d17e362b4a",
      "parents": [
        "e78b8003a5870c0e80ed92c4df442871fb9d0b61"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Mar 05 10:27:35 2013 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Mar 05 10:27:35 2013 -0800"
      },
      "message": "Fix colored rects clipping and code cleanup\n\nThe drawColorRects() method was clipping individual rectangles\nusing the wrong parameters left, top, right and bottom instead\nof l, r, t and b. It also checked for count \u003d\u003d 0 after the loop\nwhen it should have checked for vertexCount \u003d\u003d 0. The quickReject\nis now not part of the loop since it\u0027s a bit overkill to perform\nso many matrix multiplications. What we really care about is the\nfinal quickReject performed on the max bounds of the entire set\nof rectangles.\n\nThis change also replaces all instances of mSnapshot-\u003etransform\nby currentTransform() to make the code slightly more readable.\n\nChange-Id: I6485280414499716852f7dbfba186774eb6763d4\n"
    },
    {
      "commit": "19d4dd8599cb870923ab349d2ab96cacffd9c6f5",
      "tree": "86b0575167b2c27642a1e7a7296be2de2877474a",
      "parents": [
        "cdac497289fd2c39a352f6167dae3f77cc608cb8"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Mar 04 11:14:26 2013 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Mar 04 13:48:43 2013 -0800"
      },
      "message": "Take text scale/skew into account only when rendering into a layer\n\n3D rotations can undo scale/skew transforms; since FreeType only accepts\n2x2 matrices we can end up generating very large glyphs that are drawn\nat a 1:1 scale on screen. For instance, if the current transform has a\nscale of 2000 set on both X and Y axis and a perspective Z factor set to\nZ, the actual scale factor on screen ends up being 1. We would however\ngenerate glyphs with a scale factor of 2000 causing the font renderer\nto blow up.\n\nChange-Id: Ia5c3618d36644e817825cb9c89e2f53aece2074e\n"
    },
    {
      "commit": "0f6675332c04c74909425d1d328f02b32c0ff40e",
      "tree": "53a912c204ba470a0d6cd2c5701a1aef614cc7eb",
      "parents": [
        "8b5aa4846939975adacd6ea1d2a57a2493ac0216"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Mar 01 14:31:04 2013 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Mar 01 16:04:53 2013 -0800"
      },
      "message": "Precache glyphs at final raster size\n\nThe deferred display lists model now allows us to precache glyphs\nat their exact size on screen.\n\nThis change also removes debug markers when the renderer defers\nand reorders display lists. It also adds a flush event marker.\n\nChange-Id: I66ec5216dc12b93ecfdad52a7146b1cfb31fbeb4\n"
    },
    {
      "commit": "a4adcf0239039eb8f005be252409901c41b28839",
      "tree": "bb339ae27217db42e4ef0de743b07ca138ef335a",
      "parents": [
        "aaa46155ec80f02b37ec858408d7dabbf9bc289a"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Feb 28 12:15:35 2013 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Feb 28 16:04:48 2013 -0800"
      },
      "message": "Support 3D rotations when drawing text\n\nIf a perspective transform is set on the Canvas, drawText() should\nnot attempt to rasterize glyphs in screen space. This change uses\nthe old behavior instead (i.e. rasterize the glyphs at the native\nfont size and apply the transform on the resulting mesh.)\n\nThis change also adds an optimization: empty glyphs (spaces) do\nnot generate vertices anymore. This saves a lot of vertices in text\nheavy applications such as Gmail.\n\nChange-Id: Ib531384163f5165b5785501612a7b1474f3ff599\n"
    },
    {
      "commit": "c74f45a334f0e3725c23cdd270cbcb0efac4ea75",
      "tree": "1b198e8b6b7d6d4a69237116a580236836744294",
      "parents": [
        "d80806b305ce337283c24f14522cc58fea090b8c"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Feb 26 19:10:14 2013 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Feb 27 15:49:57 2013 -0800"
      },
      "message": "Properly scale text\n\nThis change does not apply to drawPosText() and drawTextOnPath() yet.\n\nPrior to this change, glyphs were always rasterized based on the\nfont size specified in the paint. All transforms were then applied\non the resulting texture. This creates rather ugly results when\ntext is scaled and/or rotated.\n\nWith this change, the font renderer will apply the current transform\nmatrix to the glyph before they are rasterized. This generates much\nbetter looking results.\n\nChange-Id: I0141b6ff18db35e1213e7a3ab9db1ecaf03d7a9c\n"
    },
    {
      "commit": "d80806b305ce337283c24f14522cc58fea090b8c",
      "tree": "701d3e4ea59f356c20b273c3061b6206782206b9",
      "parents": [
        "122f4051b5c4d61044ba377b4b5fa10133ab7b37",
        "6c5b9be7450903762f676522c32d65f7545730df"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Feb 27 23:47:54 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Feb 27 23:47:55 2013 +0000"
      },
      "message": "Merge \"Fix T-junctions in layers\u0027 generated meshes\" into jb-mr2-dev"
    },
    {
      "commit": "a6456d0d7ea2a65474b8a3db5dbf001880c40a71",
      "tree": "9e456a81714eaf92a8be5f6cd7b75a831e91c663",
      "parents": [
        "13e3891b20133d131ba61fa86bcd8b6ee1e50199",
        "768bffc9b814f6a1f7d9ff59d91285895c23bbe9"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Feb 27 22:16:22 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Feb 27 22:16:22 2013 +0000"
      },
      "message": "Merge \"Draw text drop shadows even when the text color is transparent\" into jb-mr2-dev"
    },
    {
      "commit": "6c5b9be7450903762f676522c32d65f7545730df",
      "tree": "4f0930eca0d1481506628100dbc3def1bdf24c45",
      "parents": [
        "be1a8cda3e8113d1fd3a6e56d8bc6c4f2d350423"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Feb 27 14:03:19 2013 -0800"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Feb 27 14:03:19 2013 -0800"
      },
      "message": "Fix T-junctions in layers\u0027 generated meshes\n\nbug:4128442\n\nCurrently we fix T-junctions for hardware layers, and for\nCanvas.saveLayer if the transform isn\u0027t rectAsRect. Ideally, hardware\nlayers should lazily re-generate T-junction free geometry if the\ntransform becomes non-rectAsRect\n\nDepends on frameworks/native change:\nhttps://googleplex-android-review.googlesource.com/#/c/277668/\nwhich adds Region::createTJunctionFreeRegion()\n\nChange-Id: Ice75b4a1a4459ff835059ea81d70f7d1563fd96d\n"
    },
    {
      "commit": "768bffc9b814f6a1f7d9ff59d91285895c23bbe9",
      "tree": "49da21e344249af8273fe418e13fe03235eb9c76",
      "parents": [
        "c0e55bd3cfe1d7be2276e4f528fee2231763a5c1"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Feb 27 13:50:45 2013 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Feb 27 13:52:26 2013 -0800"
      },
      "message": "Draw text drop shadows even when the text color is transparent\n\nThis matches Skia\u0027s behavior.\n\nChange-Id: Ibf0a52611f5801cfa68169f66ab0ec06f256600f\n"
    },
    {
      "commit": "758724fd09a1599f2c55130f81953cfa6c17c300",
      "tree": "ca84f352115851317bf012534a69d748def6092e",
      "parents": [
        "c0e55bd3cfe1d7be2276e4f528fee2231763a5c1"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Feb 27 11:53:12 2013 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Feb 27 11:53:12 2013 -0800"
      },
      "message": "Don\u0027t increment the paint\u0027s generation ID when drawing bitmaps\n\nWhen the renderer draws a bitmap as part of a display list with an\nalpha \u003c 1.0f, the paint is temporarily modified to alter the opacity\nof the bitmap. This has the side effect of increasing the paint\u0027s\ngeneration ID counter which can break paint caching.\n\nChange-Id: I5055d059ad1639829fa50af3d946e296c4dab877\n"
    },
    {
      "commit": "3ff0bfdd144bba3b023eda8c49b25fb0d0de8653",
      "tree": "cfc94ccf18fb1bfaaefb1241c700900a32276acf",
      "parents": [
        "01d159d88a51c44d7e282e07b834535e5b0e8bd1"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Feb 25 14:15:37 2013 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Feb 25 15:01:58 2013 -0800"
      },
      "message": "Add new property to debug non-rectangular clip operations\n\nThis change adds a new property called \"debug.hwui.show_stencil_clip\"\nthat accepts the following values:\n\n- \"highlight\", colorizes in green any drawing command that\u0027s tested\n  against a non-rectangular clip region\n- \"region\", shows the non-rectangular clip region in blue every time\n  it is used\n- \"hide\", default value, nothing is shown\n\nChange-Id: I83c8602310edc4aaeb8b905371cdd185b17d32b5\n"
    },
    {
      "commit": "505d1d64eda6e47caabf8701cb39ec9b176b3238",
      "tree": "99fa418bf15f26afdcfddc1ae1936e4de809ddfa",
      "parents": [
        "ec39a94ac299e57c800a82814651c713f3a5f5c7",
        "7031ff68bb998dbbd7caf3b2fd75eef747a86725"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Feb 22 21:45:56 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 22 21:45:57 2013 +0000"
      },
      "message": "Merge \"Prettify display lists logging\""
    },
    {
      "commit": "7031ff68bb998dbbd7caf3b2fd75eef747a86725",
      "tree": "0a2ae84a624a03136f5b5d82fa8885c207d650e7",
      "parents": [
        "e72409fe779f620382c5bd0b82f4a32ac91d9fe4"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Feb 22 11:48:16 2013 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Feb 22 11:51:15 2013 -0800"
      },
      "message": "Prettify display lists logging\n\nThis change makes it a lot easier to see the tree structure.\n\nChange-Id: I4969abd1eb010f1d529671f8d86dc4c930be24f6\n"
    },
    {
      "commit": "94b97b38b749d50c8693a044dd2688328cca863e",
      "tree": "6fedcbbe4e60867fb6776bc89ab90abace1f3e8f",
      "parents": [
        "4e89d1a9b25b4bca47bd8c7cb22b72ed4bbbfd1e",
        "eab51de4de88219256260fe26e2018a6234ef83b"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Feb 21 19:31:17 2013 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Feb 21 19:31:17 2013 -0800"
      },
      "message": "am eab51de4: Merge \"Fix clipping and stencil layer issues\"\n\n* commit \u0027eab51de4de88219256260fe26e2018a6234ef83b\u0027:\n  Fix clipping and stencil layer issues\n"
    },
    {
      "commit": "b98a016c6769b9e80d392df22fe77a2fca048d9f",
      "tree": "6a4adcd9e871baab9aae6f2f0ad80670ad4f66bd",
      "parents": [
        "2b3a47b9ce0f422323395286937944a2afa51ed6"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Feb 21 11:30:22 2013 -0800"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Feb 21 16:12:00 2013 -0800"
      },
      "message": "Fix clipping and stencil layer issues\n\nbug:8235699\n\nEnsure rectangle clipping operations disable deferring when necessary\n(i.e., when the op might create a non-rect region), including in\nDisplayList::setViewProperties\n\nAdditionally, makes clipping with a kUnion always use a region, for\nconsistency with software rendering\n\nChange-Id: I6730f1a80250bcf3f91cd4afde646d470a12dbc2\n"
    },
    {
      "commit": "c4ca87f0f4034d4b987084d2b62ed7e5e0430557",
      "tree": "72ae034904f9554d1ed6228944e7711959fc21d7",
      "parents": [
        "09bd2113e3a6bb2c63f01b62a09ae3c23d3c0454",
        "8a47d8eaec26d0937aee94a057f561f246748339"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Feb 20 10:42:40 2013 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Feb 20 10:42:40 2013 -0800"
      },
      "message": "am 8a47d8ea: Merge \"Clean up clipping and deferral logic\"\n\n* commit \u00278a47d8eaec26d0937aee94a057f561f246748339\u0027:\n  Clean up clipping and deferral logic\n"
    },
    {
      "commit": "8a47d8eaec26d0937aee94a057f561f246748339",
      "tree": "3a0e20c21c0086e97d4024e2f2af269bc7f0e859",
      "parents": [
        "14bd8359a84c9b3f634d1fd816ddf5750d6539a9",
        "5d11676414b3606792e23c269cf75b44faa1a2af"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Feb 20 18:40:03 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Feb 20 18:40:03 2013 +0000"
      },
      "message": "Merge \"Clean up clipping and deferral logic\""
    },
    {
      "commit": "5d11676414b3606792e23c269cf75b44faa1a2af",
      "tree": "4cc1e7f6dd978c9575f19aa8e4137837fc042fd7",
      "parents": [
        "ad82f20d2382396f5ac75fdf6f7db5c4da1c4c23"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue Feb 19 17:49:31 2013 -0800"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue Feb 19 18:56:10 2013 -0800"
      },
      "message": "Clean up clipping and deferral logic\n\nbug:8037003\n\n-Merges replay methods\n-Bounds checking for DrawBitmapMesh, DrawRects and DrawDisplayList\n-Use clip as bounds for otherwise unbounded draw operations\n\nClip-as-bounds is correct for drawColor and functor, but other draw\noperations (pos text, text on path, and layers) still need true bounds\ncalculation\n\nChange-Id: I5d5149d2c624f01e3fe46628bf156e835e69b9d5\n"
    },
    {
      "commit": "846f5f238fd96a14197022baad86eab8882fe3bc",
      "tree": "a8859b3a21c5746f53e9531dffdb13783a8ea08d",
      "parents": [
        "27c530076068607e61ef6a3fcc1c5f05aa7104aa",
        "e91efabaf2c51d017bf4c5bc4e06491c3511f4e5"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Feb 19 12:36:28 2013 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Feb 19 12:36:28 2013 -0800"
      },
      "message": "am e91efaba: Merge \"Expose display list APIs\"\n\n* commit \u0027e91efabaf2c51d017bf4c5bc4e06491c3511f4e5\u0027:\n  Expose display list APIs\n"
    },
    {
      "commit": "52036b19a5f82bc4d75cfcbff99c65df8d25a99b",
      "tree": "138a50b1b6ddc1075af93c4dab85d459aef1d6d3",
      "parents": [
        "736ef1e9dedbdd0c24e27f170034f2f869fd083f"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Feb 14 18:03:37 2013 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Feb 19 12:30:02 2013 -0800"
      },
      "message": "Expose display list APIs\n\nThe exposed APIs are slightly simpler than the full APIs used internally.\nOnly APIs useful to applications are exposed.\n\nChange-Id: Ie03014628d40ad5ef63dedbc52ce3def84429d54\n"
    },
    {
      "commit": "620cff4006ee0b507f00ef8a242ecff4e60ba4e9",
      "tree": "30c29f1ee548bb5da57a0a68b95f3c25beaa8eb6",
      "parents": [
        "57a8b612fa6b31a18f9e00a7bdf7dfbd261f793c",
        "ad82f20d2382396f5ac75fdf6f7db5c4da1c4c23"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue Feb 19 09:56:33 2013 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Feb 19 09:56:33 2013 -0800"
      },
      "message": "am ad82f20d: Merge \"DisplayList draw operation reordering\"\n\n* commit \u0027ad82f20d2382396f5ac75fdf6f7db5c4da1c4c23\u0027:\n  DisplayList draw operation reordering\n"
    },
    {
      "commit": "c3566d06421c8acc0aafb18f7e307e5725ce87e1",
      "tree": "3807ef3c1825ce9154bf3bc84fe24f34b331702a",
      "parents": [
        "101ae3bb3909827303121e5e11ed16b7efe36538"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Feb 04 16:16:33 2013 -0800"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Feb 15 13:30:09 2013 -0800"
      },
      "message": "DisplayList draw operation reordering\n\nbug:8037003\n\nThe reordering enables similar operations to draw together, minimizing the\nOpenGL state change operations that go inbetween draws. Eventually, multiple\ncomplete canvas draw operations will be merged (into a single glDrawArrays call,\nfor example)\n\nReorders DisplayList draw operations when:\n\n-They can move backwards in the command stream to be after similar\noperations without violating draw ordering\n\n-The OpenGLRenderer is in a simple, replayable state (no complex clip,\nor filter/shadow etc)\n\nAlso adds two system properties to control the deferral/reordering:\n    \"debug.hwui.disable_draw_defer\"\n    \"debug.hwui.disable_draw_reorder\"\nwhich can be set to \"true\" to control the display list manipulation\n\nChange-Id: I5e89f3cb0ea2d2afd3e15c64d7f32b8406777a32\n"
    },
    {
      "commit": "feb6954da185901dfb558a8ec85f4908ca86a4eb",
      "tree": "c7d1fe973b2f696a0b90dea3fa1bd4c90df41a1a",
      "parents": [
        "187cd3e161e3167ff455bd0766c0600c8fd243a4",
        "10c0aa246d9b2633c6cb4e5b714abb0031a4f4cd"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Feb 14 10:54:21 2013 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Feb 14 10:54:21 2013 -0800"
      },
      "message": "am 10c0aa24: Merge \"Implement support for drawBitmapMesh\\\u0027s colors array\"\n\n# Via Android (Google) Code Review (1) and Romain Guy (1)\n* commit \u002710c0aa246d9b2633c6cb4e5b714abb0031a4f4cd\u0027:\n  Implement support for drawBitmapMesh\u0027s colors array\n"
    },
    {
      "commit": "10c0aa246d9b2633c6cb4e5b714abb0031a4f4cd",
      "tree": "bb02e6bfd8b240833ba4611f138565e58aeee2bd",
      "parents": [
        "45dc56f3cc6cf890d2f8a28021f46ad1e9028f5e",
        "ff316ec7a76e52572a2e89b691e6b3bba0cafba3"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Feb 14 18:49:34 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Feb 14 18:51:28 2013 +0000"
      },
      "message": "Merge \"Implement support for drawBitmapMesh\u0027s colors array\""
    },
    {
      "commit": "ff316ec7a76e52572a2e89b691e6b3bba0cafba3",
      "tree": "8418a45b809c9382a0fc3d9d9bb6db6a537dd4cc",
      "parents": [
        "2b44eb75c42e4caa94f0b002f0ea9e134fe7b543"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Feb 13 18:39:43 2013 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Feb 13 18:39:43 2013 -0800"
      },
      "message": "Implement support for drawBitmapMesh\u0027s colors array\n\nChange-Id: I3d901f6267c2918771ac30ff55c8d80c3ab5b725\n"
    },
    {
      "commit": "c932760f667cf56ca7a1aeffde505745dc3632e1",
      "tree": "280d86bf8205c51a2b6b59da6c617e220677e790",
      "parents": [
        "eb26fbe427192bc87bb3dbb7882dbf87f760fab2",
        "7c1a49f5f5ed6613d736464bf5001b777e89ced2"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Feb 13 23:14:26 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Feb 13 23:14:58 2013 +0000"
      },
      "message": "Merge \"Revert \"Merge remote-tracking branch \u0027goog/master-chromium\u0027 into \u0027goog/master\u0027\" DO NOT MERGE\""
    },
    {
      "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": "7c1a49f5f5ed6613d736464bf5001b777e89ced2",
      "tree": "c6726264bde03f4c5957876921d4b15a835b2c71",
      "parents": [
        "d04892d207d50378356feef181ac4e4eff9652d7"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Feb 13 10:25:12 2013 -0800"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Feb 13 10:50:20 2013 -0800"
      },
      "message": "Revert \"Merge remote-tracking branch \u0027goog/master-chromium\u0027 into \u0027goog/master\u0027\" DO NOT MERGE\n\nThis reverts commit 6c0307dd0aefe9a08794b155fc03ee60ebd14f25, reversing\nchanges made to a2cd828b749c444d55c2c41c7dbb85088ff94b9f.\n\nConflicts:\n\tpackages/SystemUI/res/values-sv/strings.xml\n\nChange-Id: Ia178efe8b14751583d47b2826bfe3d3d5463dd2e\n"
    },
    {
      "commit": "e67307c816f3fdae2bfba8e9a4410dc015645e91",
      "tree": "a97695ed6c6e087364fba51b3a848d4aedebdb41",
      "parents": [
        "f16c7a97548cedccea291ffebc4388a7f15c9aa1"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Feb 11 18:01:20 2013 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Feb 11 18:04:23 2013 -0800"
      },
      "message": "Prevent crash when setting up a stencil-based clip\nBug #8177690\n\nClear the layers before we setup the stencil to avoid dereferencing\nthe recently deleted rects.\n\nChange-Id: I5dce5f965672f276f9490636d85b6018d3ab9422\n"
    },
    {
      "commit": "d71ff91dcd79f6beea4bbe768ab3bcbb1a6d7c39",
      "tree": "e9a9233171a5edfaf03f2a81f468a7133f54b462",
      "parents": [
        "d68c0964765b48934f528600ba5fe51b45cb8ae1"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Feb 08 13:46:40 2013 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Feb 08 13:46:40 2013 -0800"
      },
      "message": "Apply the clip rect/region to drawLines()\n\nWithout the check to quickReject, drawConvexPath would never\nsetup the clip properly.\n\nChange-Id: I23e5b25de3383c9e9b86eea4ee7a9552f8d9efb4\n"
    },
    {
      "commit": "da8d8b9699fe8e9557389465007e333d3f03dcc1",
      "tree": "a06894789c3d0a66fccdda3030d344a0b072fed6",
      "parents": [
        "2c45e913734a64460c6dcf5b831a32a0af5ba5c1",
        "3bbacf27c0be1bae4e4483577fc89ae3113abe5d"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Feb 07 20:11:56 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Feb 07 20:11:56 2013 +0000"
      },
      "message": "Merge \"Add a RenderBuffer object to store stencil buffers. Bug #7146141\""
    },
    {
      "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": "1ba0289d18f16e190a3bc7cf9226d061016dc355",
      "tree": "cc4b448cd10a5b23724741774e63e737c4e433ac",
      "parents": [
        "1095d9ac5df839408b9a549cc638c2909d98dfac",
        "65cd612face362d054a85d0f7e5881c59cd523be"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Feb 07 00:14:05 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Feb 07 00:14:38 2013 +0000"
      },
      "message": "Merge \"Add cap tessellation support\""
    },
    {
      "commit": "65cd612face362d054a85d0f7e5881c59cd523be",
      "tree": "8d71fb22d3a6dd515456a44b0d1010c906abb774",
      "parents": [
        "c93c6aa5553203f05df871804517885fcc071cfd"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Dec 10 17:56:27 2012 -0800"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Feb 06 15:35:12 2013 -0800"
      },
      "message": "Add cap tessellation support\n\nbug:7117155\nbug:8114304\n\nCurrently used for lines (with and without AA) and arcs with useCenter\u003dfalse\n\nAlso removes 0.375, 0.375 offset for AA lines\n\nChange-Id: Ic8ace418739344db1e2814edf65253fe7448b0b0\n"
    },
    {
      "commit": "f5db9b8ed42cace00d4e84b4a7e2e63a7c654b35",
      "tree": "ba1e2ba36db9f22cd827b63dc603dec372e101e8",
      "parents": [
        "63af7a113b9f47d9865a4c64488dd73a40711b7a",
        "d81ec456bb097a712bcbc093c5a1e0075434158e"
      ],
      "author": {
        "name": "Derek Sollenberger",
        "email": "djsollen@google.com",
        "time": "Tue Feb 05 18:17:19 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Feb 05 18:17:56 2013 +0000"
      },
      "message": "Merge \"Changes needed to roll Skia to r7527.\" into master-chromium"
    },
    {
      "commit": "a362c69d6cdf448107e5a539f77df73937141870",
      "tree": "4124105aced46c2c6c4aa52a3770d4af0d83662f",
      "parents": [
        "ef35927abcd089652f87a985dd6dde7afde58b92"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Feb 04 13:50:16 2013 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Feb 04 13:50:16 2013 -0800"
      },
      "message": "Set the scissor from OpenGLRenderer::drawColorRects\nBug #8131254\n\nThis method is used as an optimization for paths containing only\nnon-overlapping rectangles. The implementation was correctly\nrejecting rectangles invidually but not the bounds of the array\nof rectangles. If quickReject() is not called, setupDraw() won\u0027t\nbe able to properly set the scissor.\n\nChange-Id: I50aa11a4bd8b525b267d36a3039fe7a6fba50518\n"
    },
    {
      "commit": "d81ec456bb097a712bcbc093c5a1e0075434158e",
      "tree": "f77646a3bd547946d647cb44999daa397a54cddf",
      "parents": [
        "d0351a67f17d93038c17955381c5eff3d0679268"
      ],
      "author": {
        "name": "Derek Sollenberger",
        "email": "djsollen@google.com",
        "time": "Mon Feb 04 15:42:26 2013 -0500"
      },
      "committer": {
        "name": "Derek Sollenberger",
        "email": "djsollen@google.com",
        "time": "Mon Feb 04 15:42:26 2013 -0500"
      },
      "message": "Changes needed to roll Skia to r7527.\n\nChange-Id: I84aef3f8a733c869fade06021816646001532758\n"
    },
    {
      "commit": "ef35927abcd089652f87a985dd6dde7afde58b92",
      "tree": "481c87d0cc4df4ba5e315e990cd190d9b489da93",
      "parents": [
        "b7475e7b0b0ababe8c5f3fbfde565c97960c633c"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jan 31 19:07:29 2013 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jan 31 19:07:29 2013 -0800"
      },
      "message": "Tag HardwareRenderers with a name to help debugging\n\nThe name of the renderer is the same as the window it belongs to.\n\nChange-Id: Ie9adc0a1978afa026923ea41f5540eda6ba65a92\n"
    },
    {
      "commit": "f735c8e5cb59d6e1d1aa152fed7a6480a08d1c2a",
      "tree": "aeec78a2213d2fac2f3d052cf61b67ffb762fd7d",
      "parents": [
        "f158198ccc3a1f53bfebaa6b8f4426e80e1867ea"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jan 31 17:45:55 2013 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jan 31 17:45:55 2013 -0800"
      },
      "message": "Fix tiling on QCOM GPU\n\nRename Caches::startTiling parameter from opaque to discard to\nmake it clearer what its role is. Tweak calls to startTiling\nto preserve the buffer when needed and discard it when possible.\n\nChange-Id: If7f8ff19003f79f36885a0a7207cc61901f637d2\n"
    },
    {
      "commit": "f158198ccc3a1f53bfebaa6b8f4426e80e1867ea",
      "tree": "b76bc1af0d130f77ac7eadb07f445e657f77d268",
      "parents": [
        "f48a2d30c5d5f7c167310ff9ca1cd2310121be7c"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jan 31 17:20:30 2013 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jan 31 17:20:30 2013 -0800"
      },
      "message": "Discard the correct buffer when the bound FBO is not 0\n\nglDiscardFramebufferEXT uses different constants depending on whether\nthe default FBO is bound or not. The code was choosing the proper value\nfor the color buffer but not for the stencil buffer.\n\nChange-Id: I55cfcbdf663582119cb1a6289317016440d9e361\n"
    },
    {
      "commit": "c93c6aa5553203f05df871804517885fcc071cfd",
      "tree": "2a644d36d55c700b85cf1bce209c7110703fe5e3",
      "parents": [
        "cae3d9f0ab2756e3659efc7a08830d2d7b43a05e",
        "2af4635e4a9e448a65ff541252f8f94bc6ac48e0"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Jan 30 18:42:42 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jan 30 18:42:56 2013 +0000"
      },
      "message": "Merge \"Object-based DisplayList recording\""
    },
    {
      "commit": "c3fedafc5f50100219449125a000e3138f6fb987",
      "tree": "830bacf80a5b9e4194de2d221199dc86efe75555",
      "parents": [
        "8c47e856b067057b5fcbb6eccfc79d1da4cff8f1"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jan 29 17:26:25 2013 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jan 29 17:46:17 2013 -0800"
      },
      "message": "Fix graphical corruption on QCOM GPU\nBug #7146141\n\nThe GL_QCOM_tiled_rendering extension requires careful use of\nstart/endTiling when attaching a renderbuffer dynamically.\n\nChange-Id: I20036683ed3909ffaf40cc3d57a25257e35b6fa2\n"
    },
    {
      "commit": "2af4635e4a9e448a65ff541252f8f94bc6ac48e0",
      "tree": "2ea27d507f81660cdbb8e2cdf48cce875c1b8cdd",
      "parents": [
        "878749fef09c7cb5894f77d9b032f876f9476e47"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Nov 26 18:30:17 2012 -0800"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue Jan 22 13:47:03 2013 -0800"
      },
      "message": "Object-based DisplayList recording\n\nbug:8037003\n\nChanges the DisplayList from using stream read/write commands to use an array of\nobjects manually allocated on a linear buffer.\n\nDepends on frameworks/native change https://googleplex-android-review.googlesource.com/#/c/257695/ which adds LinearAllocator\n\nAlso changes drawRects to use float count instead of rect count, to be more like drawLines/drawPoints\n\nChange-Id: Ia2e4a11acd8f0a757042a05cbc9e7563cb73ee47\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": "735738c4ddf3229caa5f6e634bf591953ac29944",
      "tree": "4e972e943ffefc5bc268629ed45e8a5783ffe7c5",
      "parents": [
        "57b59e025bc10056daf42cd741b626843ff344f5"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Dec 03 12:34:51 2012 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Jan 14 14:27:54 2013 -0800"
      },
      "message": "Preliminary Support for region clipping\n\nRegion clipping, using Canvas.clipPath or Canvas.clipRegion, requires\na stencil buffer to be always present. In addition, extra wiring is\nrequired in JNI and display lists.\n\nThis change only adds the necessary JNI/C++ APIs and some extra\nplumbing to start the real work on properly supporting region\nclipping.\n\nA new debug define called DEBUG_CLIP_REGIONS can be used to draw\nthe current clip region. It is off by default, as is region\nclipping.\n\nThe default implementation of clipPath() and clipRegion(), now\nin native, mimics the previous Dalvik implementation to prevent\nregressions.\n\nChange-Id: I7903e7cfd7412b9b9b622566d4dbfce7bdcec00c\n"
    },
    {
      "commit": "e3a9b24b5e3f9b2058486814a6d27729e51ad466",
      "tree": "17830a6fd61c286854cebb07638d3c2dea6277cd",
      "parents": [
        "5b4628aeeaa0462cd99256d28b636c06b1845930"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jan 08 11:15:30 2013 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jan 08 15:21:42 2013 -0800"
      },
      "message": "Add plumbing for better text scaling\n\nFonts are now described by a transform matrix. This lead to switching\nfrom a vector to a hashmap. This change therefore adds new comparators\nand hash computations to Font.\n\nChange-Id: I2daffa7d6287c18554c606b8bfa06640d28b4530\n"
    },
    {
      "commit": "9acd1b4fa897f3a007dd23dc1f0471b151fa03ad",
      "tree": "4d27cd6bd64e25dede0a2db629a0cdef30cebb15",
      "parents": [
        "6c3c8a3c9a9176aaa68f1061a2e18a6b2fba0f74",
        "672433d90fab7383cd28beac9d4485b566a90940"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Jan 04 19:23:42 2013 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jan 04 19:24:10 2013 -0800"
      },
      "message": "Merge \"Add visual profiling feature\""
    },
    {
      "commit": "672433d90fab7383cd28beac9d4485b566a90940",
      "tree": "8e5088ba91b9a33aeffccd3b2c6f03b0c8e2b144",
      "parents": [
        "5913148104f0b233d861fab2873befc865bf57c0"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Jan 04 19:05:13 2013 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Jan 04 19:21:54 2013 -0800"
      },
      "message": "Add visual profiling feature\n\nWhen profiling is enabled with debug.hwui.profile set to true,\nsetting debug.hwui.profile_visualizer to true will display the\nprofiling data directly on screen.\n\nChange-Id: I3d5fe3f0347090815087b1cbfce66b8e76d9347b\n"
    },
    {
      "commit": "886b275e529e44a59c54b933453d9bc902973178",
      "tree": "33ed0717b43683ba9f8a825c7012739a2146e943",
      "parents": [
        "5913148104f0b233d861fab2873befc865bf57c0"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Jan 04 12:26:18 2013 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Jan 04 15:15:16 2013 -0800"
      },
      "message": "Properly support ALPHA_8 bitmaps in all drawBitmap() methods\n\nChange-Id: I869993c59e0a0d76f369c09acbae711753908f48\n"
    },
    {
      "commit": "dcfc836b457a87881da409e1acf251515f121446",
      "tree": "686ad8eef577ad0233f4b8bab40dad76a779bb8b",
      "parents": [
        "e0c93e085ff79b0adedfb7c316c395b9e06581f9"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jan 03 13:08:57 2013 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jan 03 13:08:57 2013 -0800"
      },
      "message": "Remove C++11 related warning\n\nChange-Id: I250ff7bd0ea49908e11b14c995d77312cd09a8b4\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": "d15321bbf57ff7a4615076fefcee5e196c4fc796",
      "tree": "db1880599db3ea7f2faf16daba38f30d788510b1",
      "parents": [
        "f0afad008bf78576ff364bcd8bc93b7aa8090b34"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Nov 28 14:45:04 2012 -0800"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Nov 28 14:45:04 2012 -0800"
      },
      "message": "Use the same interrupt/resume logic for all functor calls\n\nbug:7093396\n\nThe functor was able to change the renderer\u0027s blend mode without it\nbeing restored in process mode. This single path of updating gl caches\nreduces likelihood of this occurring in the future.\n\nChange-Id: Ie367532f9c683299f02bc4f635d7cb31f96db39f\n"
    },
    {
      "commit": "7fae5216d24ebe67e22777ab933689dbcbc001b9",
      "tree": "cafed3ae6a4d8bfad73b81ecc2325ce906e4537d",
      "parents": [
        "dbcec903c858b65c78620e2b06238e42ff4d12da"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Nov 01 11:27:03 2012 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Nov 01 11:27:03 2012 -0700"
      },
      "message": "Avoid tesselation path when useCenter is set\n\nbug:7458300\n\nThe tesselation path doesn\u0027t handle sharp joins.\n\nChange-Id: I28bf03f3b72fc584a205daa40934dda17031098f\n"
    },
    {
      "commit": "41308e2936c768103d0e9c82500e97938d6797f1",
      "tree": "b31868af7c192446f213156bd10ae57211d44712",
      "parents": [
        "74437532fe2a3e9ebd15c61327fd3f2b68c299b3"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Oct 22 20:02:43 2012 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Oct 22 20:02:43 2012 -0700"
      },
      "message": "Properly draw the window background on window resize\nBug #7385090\n\nThis change gets rid of two silly asumptions:\n- That a layer needs to be cleared with opaque black (it shouldn\u0027t,\nit\u0027s already cleared to transparent and the view will cover it up\nwith its own background)\n- The the clip should be dirty at the beginning of a frame only\nwhen the render target is opaque\n\nChange-Id: I415b6d3cab196057fb0281419a53fef601a44e28\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": "b2e2f2470693e78baed20617f989d9a166864ed4",
      "tree": "c6987b167eba200f405c170e0ddf7e6881aeca3c",
      "parents": [
        "9c474738a29f77359a461035855d6e9b3935ade1"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Oct 17 18:18:35 2012 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Oct 17 18:18:35 2012 -0700"
      },
      "message": "Take into account the texture layer\u0027s transform for clipping\nBug #7370212\n\nChange-Id: Ibdc3161306f54a1cfe66e08458f05ee01a13b1df\n"
    },
    {
      "commit": "1b85122bd22c4528679ae8bd67077dfc2fdf1847",
      "tree": "4664b577e4dfdd34b63e6004961c8c7d2f3e1e0b",
      "parents": [
        "e13ae648504661ca158d15aa415568e351b380c4",
        "713e1bb9df6bdfc21bd5c40d1a6ecf6c822a4be5"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Oct 16 19:05:48 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Oct 16 19:05:49 2012 -0700"
      },
      "message": "Merge \"Add API to enable mipmaps on Bitmap Bug #7353771\" into jb-mr1-dev"
    },
    {
      "commit": "713e1bb9df6bdfc21bd5c40d1a6ecf6c822a4be5",
      "tree": "d2cb42c7e05fff03274f9acdbdee80d848a86da2",
      "parents": [
        "d43b22da291fd08017fac627561091a633c85807"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Oct 16 18:44:09 2012 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Oct 16 18:44:09 2012 -0700"
      },
      "message": "Add API to enable mipmaps on Bitmap\nBug #7353771\n\nThis API can be used when scaling large images down to a small size\nto get nicer looking results.\n\nChange-Id: If09087eed36077eee5355f6047a3ca67747d7d9e\n"
    },
    {
      "commit": "a92bb4dc9605c86b8773c929412af2dc242b1fa8",
      "tree": "bf77badb865a50d59f6d9ecf40426ab6e0a72bbb",
      "parents": [
        "4682cf02b42f75876f14f512e874c3e798b09c9c"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Oct 16 11:08:44 2012 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Oct 16 11:09:26 2012 -0700"
      },
      "message": "Support clipping in Canvas.drawBitmapMesh()\nBug #7354162\n\nChange-Id: Ifd1d0b365e8a4d88e0ff0629c9ee13f27e1a7331\n"
    },
    {
      "commit": "780c12875ce0c0d3fd072484d4b8b3c327cc4f31",
      "tree": "fbe1cf1e671c4a2725f710f969bc1d690876c981",
      "parents": [
        "a30d969401a8533a5a341664421ba9b1e150bac3"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Oct 04 14:10:49 2012 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Oct 15 13:49:58 2012 -0700"
      },
      "message": "HW Acceleration support for stroked arcs with BUTT caps\n\nbug:4419017\n\nChange-Id: I7371bfb36cef460da861a47d4d945218c6d0c3d0\n"
    },
    {
      "commit": "b30cb10a0c75c2295e89b1b30d91a73f38ee09fb",
      "tree": "b0d09497b77b7efcb553e9a2b665fb2c43652bde",
      "parents": [
        "18c2b6e730f6d639421e45328f4fb2514683efe5"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Oct 05 19:11:37 2012 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Oct 05 19:14:02 2012 -0700"
      },
      "message": "Use offset in line drawing\n\nPartial revert of cb4d6009\n\nbug:7299070\nChange-Id: I1db7b035e3015e0f6d15c95aef71ea74dbeca13e\n"
    },
    {
      "commit": "cf8675ee176a375f873792684d38a47f78348dff",
      "tree": "a50655caeb5717f2e53cc613b66e62ae4dee2ec3",
      "parents": [
        "0944d625448209185452eb4e800daec49de51986"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Oct 02 12:32:25 2012 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Oct 02 13:33:10 2012 -0700"
      },
      "message": "Draw stroked rectangle as meshes instead of textures\nBug #7233734\n\nStroked rectangles were rendered using software generated textures\nwhich would lead to slightly misaligned results. Instead, let\u0027s use\nthe new convex path rendering code that will do the right thing\n(and save a lot of bandwidth.)\n\nChange-Id: Ib95ff581e56c1ecead97e4919298e6fd146ca167\n"
    },
    {
      "commit": "bf09ffb4e0dc820aeae56a3e576aed33cab218da",
      "tree": "23eabf3a77837da300aeab0f442f58868faa3e65",
      "parents": [
        "bfbf6e1232013a999f4776f7fdf7cf6fb577f89b"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Oct 01 13:50:37 2012 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Oct 01 13:50:37 2012 -0700"
      },
      "message": "Quick reject empty paths\n\nbug:7260035\n\nAdding a circle of radius 0 to a path is a no-op in skia, so detect\nthis case both in the PathRenderer, and in quickReject().\n\nChange-Id: I7a172db49a5d5351b4734b39d4e4ca6379658096\n"
    },
    {
      "commit": "a3dc55f83ab583e0a66b893c71b849afa046770a",
      "tree": "bce89bc2bccaa9e4e9eb334b5c3185e360c02dc0",
      "parents": [
        "3cd961292e877cc5fac146290421e9e67aa553a2"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Sep 28 13:55:44 2012 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Sep 28 13:55:44 2012 -0700"
      },
      "message": "Fix a couple of rendering issues\nBug #7253839\n\n1. Make sure we don\u0027t make GL calls while recording display lists\n\n2. Disable an early and trivial clip optimization in font renderer\n   when a perspective transformation is used on the Canvas\n\nChange-Id: I3f1052164239329346854f72d0a0d401fbfecf06\n"
    },
    {
      "commit": "a852ff3a4b637e8101c2f54e110467586fe604cf",
      "tree": "0c940ea5314930c6fdbe15bfc1f4cc17c61d1b78",
      "parents": [
        "93aa70c6dfec91909404c9ade9b4a94574814092",
        "6ed9e43879039ce0cbead08d304edbce79a88ced"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Sep 27 18:45:42 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Sep 27 18:45:42 2012 -0700"
      },
      "message": "Merge changes I9873540e,I4f6c38e3 into jb-mr1-dev\n\n* changes:\n  Skia\u0027s ColorMatrix vector is in the 0..255 range not 0..1 Bug #7248980\n  Don\u0027t use the QCOM_tiled_rendering extension with functors Bug #7247880\n"
    },
    {
      "commit": "54c1a64d5441a964890b44280e4457e11f4f924a",
      "tree": "31e8837991a90927dfa925246df31b8e6ee36a18",
      "parents": [
        "d9730390c6bbac09107866462b9bf45d0b5706cf"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Sep 27 17:55:46 2012 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Sep 27 17:57:24 2012 -0700"
      },
      "message": "Don\u0027t use the QCOM_tiled_rendering extension with functors\nBug #7247880\n\nChange-Id: I4f6c38e37b953c58e6107097c613891a49dac766\n"
    },
    {
      "commit": "cb4d6009576cf08195dc23f341a3f4939c0878bb",
      "tree": "234201781d7baaba35fc3baab178007ab03ea2df",
      "parents": [
        "fd3398c8bf25d8ec7ce813ebda431d67d734f268"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue Sep 25 12:00:29 2012 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Sep 26 14:38:11 2012 -0700"
      },
      "message": "Add stroke support to polygonal shape rendering\n\nbug:4419017\nbug:7230005\n\n- Adds support for stroke/strokeAndFill for shapes without joins\n- Fixes path-polygonization threshold calculation\n- Fixes rendering offset (now only used for points)\n- Several formatting fixes\n\nChange-Id: If72473dc881e45752e2ec212d0dcd1e3f97979ea\n"
    },
    {
      "commit": "e529ece37f664f8947a1d4a1e27d679f6f286388",
      "tree": "e085f6513391293f8d0b1c08d9241adc3e48c1e0",
      "parents": [
        "72a374705d32cf715443aa203f75c159e1bc9bd5"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Sep 26 11:23:17 2012 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Sep 26 11:23:17 2012 -0700"
      },
      "message": "Applies a layer\u0027s color filter even when the layer is a quad\nBug #7238059\n\nChange-Id: Ib4736a419bc1a9a67a01d090516ed049fe3aebca\n"
    },
    {
      "commit": "e83221c547cf2038752e5378e72e49a62cfd9954",
      "tree": "04530c1c08620b4c2c5b8209dc6bf7ba713d3f50",
      "parents": [
        "f8538594fe6ba6db3310da042597840601d78cda"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Sep 24 16:01:35 2012 -0700"
      },
      "committer": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Tue Sep 25 09:33:22 2012 -0700"
      },
      "message": "Fix alpha channel computation with ColorMatrixColorFilter\nBug #7222476\n\nThere were two issues:\n- Blending was ignored with color filters\n- The addition vector of a color filter was treated as integer values\n  instead of float values\n\nChange-Id: Id94065704a30ee8aaaa5724a9f3a3cff7c50ced7\n"
    },
    {
      "commit": "87e2f757be9b24d369bab354e37c276e851b1fc7",
      "tree": "dd8a123cd63666a7f767cb0c38afcc9726d007db",
      "parents": [
        "97dc9172b0e58979c63de0dedbab656399a62281"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Sep 24 11:37:12 2012 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Sep 24 11:47:52 2012 -0700"
      },
      "message": "Add a property to disable libhwui\u0027s scissor optimization\nBug #7158326\n\nWhen scissor optimization is enabled, OpenGLRenderer will attempt to\nminimize the use of scissor by selectively enabling and disabling the\nGL scissor test.\nWhen the optimization is disabled, OpenGLRenderer will keep the GL\nscissor test enabled and change the scissor rect as needed.\nSome GPUs (for instance the SGX 540) perform better when changing\nthe scissor rect often than when enabling/disabling the scissor test\noften.\n\nChange-Id: Idb68862e287a23358f9188d577ae0f86161902fd\n"
    }
  ],
  "next": "8e586f61dd4f7fa53b01e63ac779ffc7cde05bdd"
}
