)]}'
{
  "log": [
    {
      "commit": "d8be4a0abe7e2439813b384482346d1ccf11ef53",
      "tree": "0b0900e26d868b1c3c42e4e3572ff35c84f7f181",
      "parents": [
        "e53c1a1b6bb37e9356121d5d3a6e979c125432ff"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Fri Nov 17 15:06:24 2017 -0800"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Wed Jan 31 11:28:11 2018 -0800"
      },
      "message": "Add API to set tonal shadow color\n\nBug: 68211332\nTest: HwAccelerationTests\u0027s coloredshadow demo \u0026 CTS test in topic\nChange-Id: I09f5d1067b3200564a9d47219f70985edf3a2527\n"
    },
    {
      "commit": "3c0369bf0263b1b172932fdbc6a53efb01c965fc",
      "tree": "c95bab7d9c6bc49104b7ca30a2344ae4faeab2e7",
      "parents": [
        "ae5eb83a32a2005bd2c872bdf7b0621190ddb062"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Mon Nov 13 16:47:35 2017 -0800"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Mon Nov 13 16:53:48 2017 -0800"
      },
      "message": "Create colored shadows demo\n\nTest: HwAccelerationTest demo\nBug: 68211332\nChange-Id: Ia53a6ac2854570d0495b355bbebee1dcec2f47ba\n"
    },
    {
      "commit": "1fedd9168715d7a8e645acdd5c8d06ffa982fd51",
      "tree": "7309b69c1bd9b66b684946f7397c321821743ce4",
      "parents": [
        "52ca75011b6a636ac3485e58305b102787fd08e9"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Tue May 23 14:45:22 2017 -0700"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Wed May 24 22:10:40 2017 +0000"
      },
      "message": "Creating HW bitmaps from RenderNode\n\nAllows creating a HW Bitmap from the drawing\ncommands of a RenderNode.\n\nBug: 38507414\nBug: 37698012\nTest: Sample in HwAccelerationTest\n\nChange-Id: I57c60b2c8bf5194f4412ad4b7f1c1f35e2e4c757\n"
    },
    {
      "commit": "912bebeb7488f498954282a1eb82a4b641e6418e",
      "tree": "7c11751a6f0f7056c6aa759bfd42a01b8379a63c",
      "parents": [
        "ea98e436002a8f2c51370edc134c9e3a137b9cc5"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Wed Dec 07 16:36:15 2016 -0800"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Thu Dec 08 11:22:31 2016 -0800"
      },
      "message": "Fix window copy for rotation \u003d 90/270\n\nBug: 33421965\nTest: Manual via PixelCopyWindow test in HwAccelerationTest\nChange-Id: I2a59fd6a26499635a22444e124cd1ec6f82f6e31\n"
    },
    {
      "commit": "f3a51d652ff9fbcb5a41c71c801de71a3b1ece78",
      "tree": "dce2f5362e93ba84889baededc26c8ca2aa134cd",
      "parents": [
        "8ff7d162c624f9889a8e90ac10b6b554869fef6e"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Wed Apr 27 15:23:51 2016 -0700"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Thu Apr 28 10:11:36 2016 -0700"
      },
      "message": "Video source test \u0026 bugfix\n\nBug: 28428970\n\nTest for video sources and fix a bug where\nwe should throw an IAE for surfaces that are invalid\nat request time.\n\nChange-Id: I891a2b1568f583300433c7aca6de36d2e2621c63\n"
    },
    {
      "commit": "10dd0585c11dcedb5a271d54e645594f1d215d5c",
      "tree": "eeb6b94cd87202b16d662225b55c8d7940e701fd",
      "parents": [
        "ffdaae004b403714dbf01b47a31065e67eec0177"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Thu Mar 31 16:36:16 2016 -0700"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Mon Apr 11 16:00:22 2016 -0700"
      },
      "message": "Framework-side of SurfaceView#getBitmap\n\nBug: 27708453\n\nChange-Id: Ie6fd7eca522d3e6549d8af587c975fd7e6053649\n"
    },
    {
      "commit": "417ed6d4337e5409d52f58cc93677c8715193f32",
      "tree": "e209754dcabdc52f6cae49fa78b42fd9e7241801",
      "parents": [
        "df1e2b1457690ccbd1302078cedafbfbb8918265"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Tue Mar 22 16:01:08 2016 -0700"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Wed Mar 23 07:59:10 2016 -0700"
      },
      "message": "Fix missing first frame\n\nBug: 26776366\nChange-Id: I46258c0ff35fdefe5c9f2ee610c904b2dbe8c5d9\n"
    },
    {
      "commit": "f648108f83d4e74811919e9811efb8fcc184b8a3",
      "tree": "a7e20b3298846cd072499a921bfa59d244c717e0",
      "parents": [
        "15d21b3aca1c3eeb3932752194e9f196b546387b"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Tue Feb 02 15:18:23 2016 -0800"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Thu Feb 04 11:23:49 2016 -0800"
      },
      "message": "Have RT drive window positioning\n\nBug: 22802885\n\nChange-Id: I6beed5474d3a943b16e9097f7bd61ce3cbd37505\n"
    },
    {
      "commit": "ea7a7fb75acb7305eb774ca7bc7e96103bd49323",
      "tree": "a11a7df7a54d24e1d25dcea6914ea0b8fbc69b07",
      "parents": [
        "0f3a4f94243167a652f605530d4a69534db59cf7"
      ],
      "author": {
        "name": "Skuhne",
        "email": "skuhne@google.com",
        "time": "Fri Aug 28 07:10:31 2015 -0700"
      },
      "committer": {
        "name": "Skuhne",
        "email": "skuhne@google.com",
        "time": "Mon Sep 21 07:18:00 2015 -0700"
      },
      "message": "MultiThreaded rendering of different renderNodes\n\nThis is adding the renderer side infrastructure to allow\nrendering multiple render nodes with different threads.\nThis is a pre-step for decoupling a non client decor\nresize reder from a content resize render.\n\nMultiple render nodes can be added to be drawn, and to\nprevent overdrawing, a content bounds area can be set\n\nBug: 22527834\n\nChange-Id: Ie7271e20895bf38957e5a84aeefc883e282039ad\n"
    },
    {
      "commit": "fca52b7583d1e5f5ff8ed06554875d2a30ef56fa",
      "tree": "e383a2db169421a722fa9c559dd01904e83fa504",
      "parents": [
        "aa1cd25db72297f13539928e8aa45ba992f2f230"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue Apr 28 11:45:59 2015 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue May 26 17:53:16 2015 -0700"
      },
      "message": "Use path intersection instead of saveLayer+mesh to mask projected ripples\n\nbug:14297149\n\nSaveLayer\u0027s performance cost is high, and proportional to the surface\nbeing projected onto. Since ripples (even unbounded ones) are now\nalways projected to the arbitrary background content behind them, this\ncost is especially important to avoid.\n\nThis removes the last semi-secret, saveLayer from the projected\nripple implementation.\n\nAlso fixes the HW test app to correctly demonstrate this projection\nmasking behavior.\n\nAdditionaly, alters PathTessellator to gracefully handle\ncounter-clockwise paths, and simplifies the work done by\nShadowTessellator to ensure all of its paths are counterclockwise.\n\nChange-Id: Ibe9e12812bd10a774e20b1d444a140c368cbba8c\n"
    },
    {
      "commit": "bb2d0cc7e1d487f7021b1f9ec0c6740e41b535f2",
      "tree": "661b6c6d833d545fc3f91fab7810ab73febc21a5",
      "parents": [
        "ea6f0ae86d62cff88d63b926578c588a956d0512"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Tue Oct 21 10:09:36 2014 -0700"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Tue Oct 21 13:23:56 2014 -0700"
      },
      "message": "Surface:lockHardwareCanvas\n\nBug: 17440886\n\nChange-Id: I1f2d98c63ec1a2814c2258cf7e0096139263770a\n"
    },
    {
      "commit": "d3de42cae84fadfa1befd082a2cf1bf72f9ad82a",
      "tree": "e3bff6900caa9cc6546dc6e843f37414192fcc74",
      "parents": [
        "fac77c46fe03466cb4bd728da3dc49b40652964b"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Tue Jul 15 14:29:33 2014 -0700"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Fri Jul 18 22:10:22 2014 +0000"
      },
      "message": "Add RT-enabled reveal animator\n\n Bug: 16161431\n\n Also re-writes RevealAnimator to avoid using any listeners internally,\n removing the logic around shadowing the update listeners.\n\nChange-Id: I6ed8126398eed971a87f20bccb7584c9acafbb6c\n"
    },
    {
      "commit": "b4dabadd89f8a6928b51e809eec6425a3df9b593",
      "tree": "4f3d1e01490acc7a4091e7769caa0f1a00b7a106",
      "parents": [
        "9cb5b4c2d93acb9d6f5e14167e265c328c487d6b"
      ],
      "author": {
        "name": "ztenghui",
        "email": "ztenghui@google.com",
        "time": "Mon Jun 30 13:04:47 2014 -0700"
      },
      "committer": {
        "name": "ztenghui",
        "email": "ztenghui@google.com",
        "time": "Mon Jun 30 13:11:40 2014 -0700"
      },
      "message": "Preparing the new GL depth test.\n\nRight now, the code is just copied from ApiDemos for the initial setup.\n\nChange-Id: I531f95faca744c7e91fadae189818af3d04a85ee\n"
    },
    {
      "commit": "ab008f0c642461b033e6f7dd3edfc49a43fb6293",
      "tree": "29ac0346ed84a8035b9950c0568d3dbde9f77092",
      "parents": [
        "dab839e0478559781fe703c83f4e8a43d34960d2"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri May 23 17:55:03 2014 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed May 28 13:35:10 2014 -0700"
      },
      "message": "Respect Z ordering in touch dispatch, software drawing\n\nbug:14390526\nChange-Id: I617a6ea7dbac1facae246491a247cf307452fc0e\n"
    },
    {
      "commit": "deeda3d337aed1eee218b89a7aba5992ced371f0",
      "tree": "15e13e84727baebce58b735e34ef5d198fd84389",
      "parents": [
        "fe4c1e225d147fe9cb5d7c121b7d6d11a312844e"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon May 05 19:09:33 2014 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu May 15 16:36:12 2014 -0700"
      },
      "message": "Round rect outline clipping\n\nChange-Id: Iee9cf4f719f6f1917507b69189ad114fa365917b\n"
    },
    {
      "commit": "030d619aaab044491381e72f222cc9ba8dabcc19",
      "tree": "e16de5c7954af8d86404b38fa189824225533f49",
      "parents": [
        "ebb9e69513b690881a5bad7bf45c6f32e0fc7062"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Wed May 07 15:45:47 2014 -0700"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Wed May 07 15:46:36 2014 -0700"
      },
      "message": "Allow all loopers to be RT-accelerated\n\n Bug: 14445956\n\nChange-Id: I03e92642aa118db5c7fefa1f09c3a5bde6ea671d\n"
    },
    {
      "commit": "52244fff29042926e21fa897ef5ab11148e35299",
      "tree": "2cc7b2f6dd47fe7863c6bc2b6a806e275c149ba9",
      "parents": [
        "abc975f539b4ea06c05b11ec56b0abe7c6fd95aa"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Thu May 01 21:27:37 2014 -0700"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Fri May 02 13:43:46 2014 -0700"
      },
      "message": "Add CanvasProperty for drawCircle\n\nChange-Id: Icbcc030f5033d2094e567d7c519b9d672f2aac1c\n"
    },
    {
      "commit": "7979388d4f7d5d9dbfcf7e1cc4709f8088c034ae",
      "tree": "fb8460098f57d66ed696b65a9cc70b51cf1128ff",
      "parents": [
        "07f0b8ee730be00a2a4bccf797bd8cb71e556546"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Apr 25 13:08:25 2014 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Apr 25 15:59:47 2014 -0700"
      },
      "message": "Support Oval GradientDrawable outlines, and ShapeDrawable\n\nChange-Id: Ifc9e55757d3325cb28a1a812ec696512d4a18b39\n"
    },
    {
      "commit": "3f085429fd47ebd32ac2463b3eae2a5a6c17be25",
      "tree": "2930b7ee50ce98092fde97546a3d546c817038f1",
      "parents": [
        "fbb54b8363b66e0b22d519ee20d1a50e8b5340ee"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue Apr 15 16:18:08 2014 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Apr 23 16:15:11 2014 -0700"
      },
      "message": "Clip TouchFeedbackDrawable effect to receiver Outline\n\nProjected RenderNodes are now wrapped with a ClipRect or masked\nSaveLayer, so that they are clipped to the outline of the projection\nreceiver surface.\n\nChange-Id: I1d4afc1bb5d638d650bc0b1dac51a498f216773e\n"
    },
    {
      "commit": "dcc206dd76f5edbb588b06b3e4f3686cd9164f82",
      "tree": "4bf3c332ad6ac2a508b6da26474bbf146222a131",
      "parents": [
        "494fb7b58a21a7a9a8eba3bacecffe115edcb8c6"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Apr 11 14:20:08 2014 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Apr 11 14:20:08 2014 -0700"
      },
      "message": "Remove isolated z volume test\n\nChange-Id: I757cd9445b7e8f564b5f1357d3e5c17032daf17e\n"
    },
    {
      "commit": "6657a6c53930eb0ff8d03317eb10ea7ddb0c49b4",
      "tree": "37821f1cd1b594c83b6341ce65c1e1847ef1ecf6",
      "parents": [
        "967c7fb2af23cbdadba45f9113cbcaa9f55c3f24"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Sun Jan 26 11:30:58 2014 -0800"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Jan 29 13:55:39 2014 -0800"
      },
      "message": "Update reordering method names, and make 3d reordering API public\n\nIsContainedVolume -\u003e hasIsolatedZVolume conveys that this affects Z\nordering of views\n\nProjectToContainedBackground -\u003e ProjectBackwards, since it ended up\nusing its own projection target, separate from the 3d volume bit\n\nChange-Id: Ia2cde838cc4da134366fe6ff623290fbd65e50c3\n"
    },
    {
      "commit": "f533e947035795a485344f4c270e16507f974901",
      "tree": "8d2ddc12234898cc2f3578f6db01d4d25b2248ef",
      "parents": [
        "81155da28476862a7056ec74312a8010ec154671"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue Jan 14 22:35:37 2014 -0800"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Jan 15 16:14:01 2014 -0800"
      },
      "message": "Support projection of DisplayLists onto ancestors.\n\nFor now, ancestor views signal the acceptance of projections with a\nsave(0x20)/restore pair.\n\nDuring the order traversal, each view with the save(0x20) code will\ncollect descendent views with mProjectToContainedVolume (which still\nneeds to be renamed) so that they can be drawn out of order later.\n\n- *Temporary* sample code added to HwAccelerationTest.\n\n- Note that a projected displaylist must not be clipped.\n\nChange-Id: I45c493e845961535b958d59c53e8aff3f8891d9f\n"
    },
    {
      "commit": "13656743cc21bac43676568314366497346713ee",
      "tree": "38e4547d5669b5d43c6482bb7372b6dab9b334d4",
      "parents": [
        "0c5e72127b7c002c9e9e7facf65b9c2e41c99556"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Aug 19 17:42:51 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Aug 19 18:18:00 2013 -0700"
      },
      "message": "Make color filters mutable\n\nChange-Id: I3d035d24a75e09db13d136a22bd7dbd326d0ce36\n"
    },
    {
      "commit": "8018c8db8221aa604b3c083e09d173cc27e53d83",
      "tree": "60cbc26ddde4fa65a476a7e869d88f358b734210",
      "parents": [
        "93d34a61dbdfd9ece9ac4a53d78e896638172895"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Jul 29 19:17:59 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jul 30 10:51:24 2013 -0700"
      },
      "message": "Add path ops API\n\nPath ops can be used to combine two paths instances in a single path\nobject. The following operations can be used:\n\n- Difference\n- Reverse difference\n- Union\n- XOR\n- Intersection\n\nTo use the API:\n\nPath p1 \u003d createCircle();\nPath p2 \u003d createRect();\n\nPath result \u003d new Path();\nresult.op(p1, p2, Path.Op.DIFFERENCE);\n\nThis code will subtract the rectangle from the circle and generate\nthe resulting path in \"result.\"\n\nChange-Id: Ic25244665b6691a7df0b0002a09da73d937b553b\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": "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": "29ce8c98ff1cd2fdf6ccc5127aab466d52367b61",
      "tree": "c876567e7ed63c3a9b54da9108c3538c6c7ac449",
      "parents": [
        "19886f8b5109218191908d2ce5faf0293f85cf31"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Feb 28 13:08:34 2013 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Feb 28 13:08:34 2013 -0800"
      },
      "message": "Reorganize OpenGL renderer tests\n\nThe new UI works just like ApiDemos. The label of the activities\ndeclared in the manifest defines where they go in the UI.\n\nFor instance Draw/Circles will create an entry called Draw in the\nfirst screen of the test app. Click the \"Draw\" item will launch\na new activity containing an item called \"Circles\".\n\nChange-Id: I98a4442ee3d992598af440b2078ae1925214da20\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": "3c099c42fd7ead1429076055990ae39b72c904f4",
      "tree": "d9c375c30a202a46a95282375c9b71d09d5c0ba0",
      "parents": [
        "b969a0de65730b071d846f8302e751e2637e6dbe"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Feb 06 15:28:04 2013 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Feb 06 15:28:04 2013 -0800"
      },
      "message": "Fix Snapshot::resetClip to also reset the clip region\n\nChange-Id: I979151e73f64ff9d45f8a5232d8700361b09fbc7\n"
    },
    {
      "commit": "b969a0de65730b071d846f8302e751e2637e6dbe",
      "tree": "d49fd8cc93d96c54e991359e375c093882734909",
      "parents": [
        "15a4620b18412d81c1f9102cfc85777dece41a8b"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Feb 05 14:38:40 2013 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Feb 05 14:44:43 2013 -0800"
      },
      "message": "Add support for non-antialiased text\n\nChange-Id: I17c073955ab94abc9b409e5fcfbc675faa07c5ba\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": "5b4628aeeaa0462cd99256d28b636c06b1845930",
      "tree": "1e438a572917e0cd4a32d64cdca8ff192b51169c",
      "parents": [
        "7d1c4fa322dec1247f7d509a066e436f1d2706fa"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Jan 07 18:11:52 2013 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Jan 07 18:11:52 2013 -0800"
      },
      "message": "Add more tests for libhwui\n\nThese tests verify the behavior when scaling paths and text\n\nChange-Id: I0f3259175bcee93186e30296759996e0447cba99\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": "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": "189ff17caa29e51e3438af59fb33c5cb513018bd",
      "tree": "a3e6c5a7ac20840dbbe86612b016d02fde1e0adc",
      "parents": [
        "684385ddde2ac0c26de0862390ad713aff3fb149"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Sep 18 18:59:59 2012 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Sep 18 18:59:59 2012 -0700"
      },
      "message": "Add test for layer updates optimizations\n\nOptimizations are following.\n\nChange-Id: I120e1d0c08d8068fcac46515f37a4ae510e5f3a3\n"
    },
    {
      "commit": "e49d7ec36132f33b7c9e2c044ab9dd3585aa3747",
      "tree": "1321a0c086c3b17de0d3c4a62645f672fa511d6d",
      "parents": [
        "1558cf1498ecc687532f2dad3de720053dca9309"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Sep 07 18:42:38 2012 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Sep 07 18:42:38 2012 -0700"
      },
      "message": "Fix memory corruption in LayerRenderer::copyLayer\n\nThe pixel store pack alignment was not set for the source texture,\ncausing a write to occur outside of the destination bitmap\u0027s\nbounds.\n\nChange-Id: Iaa5767acf7b5943fbc2765c3810a142f06b1a796\n"
    },
    {
      "commit": "9fc4b356a4552336f661bf4dfaaa19a251194cdb",
      "tree": "304b88ff4c3d4dc2deb43384f1288a9e1a51de24",
      "parents": [
        "599943e48b92594f40b278813e0203aa722a18ec"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Sep 04 10:27:05 2012 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Sep 04 10:27:05 2012 -0700"
      },
      "message": "Add new hw acceleration test\n\nChange-Id: Id2b94286cf62ab77d8c843cffaba09b3070a6332\n"
    },
    {
      "commit": "e816baea651476aca4407200d4a5e629b9ab8dfa",
      "tree": "03d9a7d4bdda72e8811486706cb67152a43e7966",
      "parents": [
        "38cc2a5a3ad076fbbb0824a91f49730a4297549b"
      ],
      "author": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Thu Aug 09 13:39:02 2012 -0700"
      },
      "committer": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Tue Aug 14 10:33:30 2012 -0700"
      },
      "message": "Optimize interactions with glyph cache\n\nThere are two fixes here:\n- precaching: instead of caching-then-drawing whenever there is a new\nglyph, we cache at DisplayList record time. Then when we finally draw that\nDisplayList, we just upload the affected texture(s) once, instead of once\nper change. This is a huge savings in upload time, especially when there are\nlarger glyphs being used by the app.\n- packing: Previously, glyphs would line up horizontally on each cache line, leaving\npotentially tons of space vertically, especially when smaller glyphs got put into cache\nlines intended for large glyphs (which can happen when an app uses lots of unique\nglyphs, a common case with, for example, chinese/japanese/korean languages). The new\napproach packs glyphs vertically as well as horizontally to use the space more efficiently\nand provide space for more glyphs in these situations.\n\nChange-Id: I84338aa25db208c7bf13f3f92b4d05ed40c33527\n"
    },
    {
      "commit": "320d46bf844b84351cb80c5d4a4768d86447ac81",
      "tree": "fee65370216aee9df6116a46ebae0edfd8de1272",
      "parents": [
        "c89b14bba0f6cc2c91629080617f7ed215f697f3"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Aug 08 16:05:42 2012 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Aug 08 16:05:42 2012 -0700"
      },
      "message": "Reduce gradients textures size whenever possible\n\nChange-Id: Ifd58625ee62edac3b5d20b77553cb98b6fa2b46e\n"
    },
    {
      "commit": "42e1e0d482d774cf18a55773e434f02edb9e4462",
      "tree": "33ac1bca20382f2e8ccbf176c89b3476f2ae5c9b",
      "parents": [
        "8ab8fbbf46d8779f53301e7f706f97608eed7117"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Jul 30 14:47:51 2012 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jul 31 18:55:16 2012 -0700"
      },
      "message": "Improve gradients\n\nAvoid using textures for common gradients (two stops from 0.0 to 1.0)\n\nChange-Id: Iff55d21b126c8cfc4cfb701669f2339c8f6b131a\n"
    },
    {
      "commit": "98ba89492a477114148fcb1f89675e41679ca7cc",
      "tree": "89db302c556fdbb61cc1e2e21adceb30a8e53372",
      "parents": [
        "00755fed35e4a91291c42a8a47bed8b957e9f8e1"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Jul 20 16:50:03 2012 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Jul 20 16:58:45 2012 -0700"
      },
      "message": "Make gradients look slightly better\n\nChange-Id: Ib12c628a88b9ec6af1214ce6e5cb14cfde40485e\n"
    },
    {
      "commit": "ba64974141bb04d35759c7a8f1741d23c172f9a5",
      "tree": "525f25da1cd84b32201ef32587bf971fc97f8b4e",
      "parents": [
        "041c36686dd986834990d85f7f93fe2ee4e5fca5"
      ],
      "author": {
        "name": "Michael Jurka",
        "email": "mikejurka@google.com",
        "time": "Thu Jun 28 19:12:58 2012 -0700"
      },
      "committer": {
        "name": "Michael Jurka",
        "email": "mikejurka@google.com",
        "time": "Thu Jun 28 19:15:20 2012 -0700"
      },
      "message": "Removing setChildrenLayersEnabled\n\nChange-Id: I88d8228eadb59160648f2c4e131fcd85945f2109\n"
    },
    {
      "commit": "d34dd71800d9a1077e58c3b7f2511c46848da417",
      "tree": "464ac603e38b3c8593cc03d244892ee3fb3502a6",
      "parents": [
        "5380cdc2e1adc8511b05e7623efb44d67be88418"
      ],
      "author": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Wed May 02 18:50:34 2012 -0700"
      },
      "committer": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Thu May 03 11:14:50 2012 -0700"
      },
      "message": "Fix hang/crash in native path code\n\nAn optimization for paths is to only create a texture for the original native\nPath object, and have all copies of that object use that texture. This works in\nmost cases, but sometimes that original path object may get destroyed (when the\nSDK path object is finalized) while we are still referencing and using that object\nin the DisplayList code. This causes undefined errors such as crashes and hanging\nas we iterate through the operations of a destroyed (and garbage-filled) path object.\n\nThe fix is to use the existing ResourceCache to refcount the original path until\nwe are done with it.\n\nIssue #6414050 Analytics Dogfood App crashes reliably on Jellybean\n\nChange-Id: I5dbec5c069f7d6a1e68c13424f454976a7d188e9\n"
    },
    {
      "commit": "810a8676df1d504da17bad80c7bd6638bdd97711",
      "tree": "3ddfda87c49bd6f19d436e9677d9daa1ea459037",
      "parents": [
        "73b61d67109c9a4267b93c238bb9cbab7b1304c4"
      ],
      "author": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Tue May 01 15:57:24 2012 -0700"
      },
      "committer": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Wed May 02 10:44:33 2012 -0700"
      },
      "message": "Corrects invalidation logic for layered views\n\nA bug in the invalidation logic meant that changes to a view\nwould not cause parents in the view hiearchy that were set to have\na layer (e.g., View.LAYER_TYPE_HARDWARE) to get invalidated properly.\nSo even though the child view was all set to recreate its display list\naccording to the property change, the layer in the tree above it would stay\nas-is, meaning that the change would not show up on the screen.\n\nIssue #5887530 DropTarget text does not change color with the icon\n\nChange-Id: Ie6eac4f406d172cb437822d9fe76340ab2afaf1c\n"
    },
    {
      "commit": "0a1cbc5f7df7e1294b5a4e37f01b76fca5899324",
      "tree": "235e295cc3ec631407278b908627e79e3e88f0b7",
      "parents": [
        "4dfdf4d6297f57b884ec3f43bd1295235e0a938a",
        "2946445b560fde5e63df17f5a2db60c8349fe532"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Apr 03 21:17:34 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Apr 03 21:17:34 2012 -0700"
      },
      "message": "Merge \"New libhwui test activity\""
    },
    {
      "commit": "2946445b560fde5e63df17f5a2db60c8349fe532",
      "tree": "151f9c409903b291045664b6dd91298f88443fd0",
      "parents": [
        "e0aa84b7dc087e999e20055dcc04cb6a48d5bd62"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Apr 03 20:22:10 2012 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Apr 03 21:15:12 2012 -0700"
      },
      "message": "New libhwui test activity\n\nChange-Id: I0ce4bc665f117d7c0ed47670ceb4ed6f9b54d85c\n"
    },
    {
      "commit": "db8c9a6a4d9bf8c39f834b25611926caf21380f6",
      "tree": "5a1ef2e49ea05c5a28477fcf8525ca66e8e31890",
      "parents": [
        "b3fa3960a03ef553e58bf1add88029a6c072c6b6"
      ],
      "author": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Wed Mar 21 18:54:18 2012 -0700"
      },
      "committer": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Tue Apr 03 14:02:17 2012 -0700"
      },
      "message": "Optimization of alpha with DisplayList properties\n\nSome views (such as ImageView and TextView) handle non-opaque alpha\nvalues directly. This was originally an optimization, but we can handle it faster\nin many cases without this optimization when DisplayList properties are enabled.\nBasically, if a view has non-overlapping rendering, we set the alpha value directly\non the renderer (the equivalent of setting it on the Paint object) and draw each\nprimitive with that alpha value. Doing it this way avoids re-creating DisplayLists\nwhile getting the same speedup that onSetAlpha() used to get pre-DisplayList properties.\n\nChange-Id: I0f7827f075d3b35093a882d4adbb300a1063c288\n"
    },
    {
      "commit": "9420abd56a2af7ddbeb70562b79d61b2dca8c5a1",
      "tree": "8625a64e2d9ffd1520d890c2eb7989ccbef28adc",
      "parents": [
        "1d6013357847983180a317e2acaf807bde8b7ea7"
      ],
      "author": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Thu Mar 29 16:28:32 2012 -0700"
      },
      "committer": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Mon Apr 02 15:31:24 2012 -0700"
      },
      "message": "Re-enable DisplayList properties.\n\nRe-enabling DisplayList properties last week caused some app\nerrors due to the way that some transforms were being handled (specifically,\nthose coming from the old Animations and ViewGroup\u0027s childStaticTransformation\nfield). This change pushes *all* transform/alpha data from View.draw() into\nthe view\u0027s DisplayList, making DisplayLists more encapsulated (and correct).\n\nChange-Id: Ia702c6aae050784bb3ed505aa87553113f8a1938\n"
    },
    {
      "commit": "325740fb444af8fc7fb0119b2e30ce322c2ae134",
      "tree": "7739e7e56c5835f8f161e8cbed17346083390176",
      "parents": [
        "34c55d30858cba1e58c38e7d8e175d25cf0b33c4"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Feb 24 16:48:34 2012 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Feb 24 16:48:34 2012 -0800"
      },
      "message": "Add hooks to implement Canvas.drawTextOnPath() in GL\n\nChange-Id: I165c9e05facf5365aa6850605688e538640c7fcc\n"
    },
    {
      "commit": "96ebc6b5097ab73eef45e094241e444f4c21bfcc",
      "tree": "b01b3d09326092131154faa7a42058d026ad5d00",
      "parents": [
        "30c46ad519c127a92f2bd3ca1dc1eab9da6ac165"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Feb 21 18:32:32 2012 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Feb 21 18:32:32 2012 -0800"
      },
      "message": "Only copy paths, paints and shaders when we need to.\n\nChange-Id: Iba7a9c92c865f698821b6ff7bc4f502659642ac1\n"
    },
    {
      "commit": "967e2bf3ac8943a8e8a374bf86021915445cda67",
      "tree": "1534a056ce117ebd6c0b8e39bd6a2ed2a6eb46c8",
      "parents": [
        "0afa7e2d95a1ae047ceddf2ca67f05c67ac30770"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Feb 07 17:04:34 2012 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Feb 07 17:04:34 2012 -0800"
      },
      "message": "Preliminary support for clipRect(Rect, Op)\n\nThis adds basic support for clip regions. It is currently disabled at compile\ntime. Enabling clip regions will require setting up a stencil buffer.\n\nChange-Id: I638616a972276e38737f8ac0633692c3845eaa74\n"
    },
    {
      "commit": "211370fd943cf26905001b38b8b1791851b26adc",
      "tree": "03db29f15516e381b8f4553a87756c03c64d028a",
      "parents": [
        "a403a2e0f0d55a709821a6310de849176dc9b426"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Feb 01 16:10:55 2012 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Feb 01 16:10:55 2012 -0800"
      },
      "message": "Add optional metadata to initiliaze the render threat.\n\nThe render threat is likely to break your application if you initiate it.\nAs such it must be explicitely requested using the following meta-data\ntag in your manifest\u0027s application tag:\n\n\u003cmeta-data android:name\u003d\"android.graphics.renderThread\" android:value\u003d\"true\" /\u003e\n\nChange-Id: Ibf0a48af2a0d091562bf6907eac970e3d1d601c4\n"
    },
    {
      "commit": "5ff9df658230d49e42c43586997a02d8e4dd417e",
      "tree": "4b6f2b97036285bd8e114c2f476bcfd0c812d4c9",
      "parents": [
        "36d7549181af397cfaf879f46e407e762e0e8cba"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Jan 23 17:09:05 2012 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Jan 23 17:09:05 2012 -0800"
      },
      "message": "Add full support for Canvas.setDrawFilter()\n\nChange-Id: I0ad35d0603c4eeda469014803be14c1dcdde918c\n"
    },
    {
      "commit": "f9d9c065ed75f1196316a9a31f92309f602cef76",
      "tree": "ca552893d80825f16728e613d2aa341b1cdd92d9",
      "parents": [
        "75582e889d4895483309e38364266073be6d46b8"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jan 19 16:53:41 2012 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jan 19 17:16:38 2012 -0800"
      },
      "message": "Deprecate unused APIs\n\nChange-Id: I0107e246b632dda96b8b025217936954f1f46283\n"
    },
    {
      "commit": "62b6eaa7f3a8111311a7ee097f278eb55865a499",
      "tree": "c41da021e65907a60607fac87c1c7f3172139a73",
      "parents": [
        "7677d8f006b94c76dcad6f551bf14f983f58dc14"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jan 17 14:52:13 2012 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jan 17 14:53:26 2012 -0800"
      },
      "message": "Fix text encoding when drawing with drawPosText in software\n\nChange-Id: I0cd8ee526189c38c50953a1a08b50e0b31c55d8c\n"
    },
    {
      "commit": "2a9fa89643ce796ee6dc7edae2742b291b6c5f40",
      "tree": "c07461bb9ae5b51bdc70a6bcff24d53229b0d0d7",
      "parents": [
        "462785fa257671fe4905d1d3e6ca27e4a61ee946"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Sep 28 16:50:02 2011 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Sep 28 16:50:02 2011 -0700"
      },
      "message": "Don\u0027t build display lists for views with a layer.\n\nThis could cause the draw() code of views to be invoked too often\nor worse, called with the wrong canvas. For instance, a view backed\nby a software layer could get its draw() method called to record a\ndisplay list. Using a software layer is the recommended way to use\ndrawing operations not supported in hardware. Since we would\nsometimes call the draw() method with the hardware backend anyway,\nthe app could crash by executing an unsupported operation.\n\nChange-Id: Ib5f9a3a4c6f3efff5e0162ecd73d2dffe06e30a6\n"
    },
    {
      "commit": "b50149825fae95b2918bcf67b2ddb773b9797068",
      "tree": "0a7e7b7deda72360adfabed3bc7d64eeccc7311c",
      "parents": [
        "a7ffaee29892cc38ae2327017b6670adafef711b"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jul 28 15:39:12 2011 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jul 28 15:40:47 2011 -0700"
      },
      "message": "Correctly apply linear filter to drawBitmap(Rect, Rect)\n\nChange-Id: I1049282e1996b1020c92cb7bec46e9f28e94e967\n"
    },
    {
      "commit": "6be3d5561cbeccf0a8257a4acb155657f868e548",
      "tree": "c43a668998d17e26dee93e37e4702b5d45ab06c7",
      "parents": [
        "f4f79ac42a318145397327cd6a0d1f421c6c00f0"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jul 14 18:08:37 2011 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Jul 18 15:02:06 2011 -0700"
      },
      "message": "Add lock/unlockCanvas to TextureView\n\nWith this change, TextureView has feature parity with SurfaceView.\n\nChange-Id: I4ef2da33420fc9590f868636ae72a5a6de61965b\n"
    },
    {
      "commit": "5fccb70de94f4270cff1ca35d59a289bdf37a89f",
      "tree": "c7bff5ec29427fc554b24012facd7210691e25ec",
      "parents": [
        "039857520b1a03a52051b966d87d587225bdfcc3"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Jul 11 18:23:09 2011 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Jul 11 18:23:09 2011 -0700"
      },
      "message": "Add test for bug #4970944\n\nChange-Id: I3e7287bc406ff497a49cf823cee53b1a943a74a9\n"
    },
    {
      "commit": "f61970fc79e9c5cf340fa942597628242361864a",
      "tree": "c84c5593c85a3526dffa52eea2158a2332d819a8",
      "parents": [
        "a0c680393f2dd03a937c598b2cb9abf98a58152c"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jul 07 14:10:06 2011 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jul 07 14:10:06 2011 -0700"
      },
      "message": "Add an API to query maximum bitmap/texture size on Canvas.\n\nChange-Id: I2c576c9a4ecad9f33cc6636bcbc29786acdf052d\n"
    },
    {
      "commit": "595c18b07a86754f5af1a971e3566fcbb6066b60",
      "tree": "08473dfc840255ecea78697e2aa11cad956d8fb4",
      "parents": [
        "2c22882181e867c9ba4e74ee973b87a71db3389f"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jun 29 17:20:38 2011 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jun 29 17:20:38 2011 -0700"
      },
      "message": "Add test case for driver issue\n\nChange-Id: I0411bf9c8e114ce388e619170fb4c2b1c6fd80f9\n"
    },
    {
      "commit": "02ccac69fd1c0a03c24c5f3ace0ad4bed337b1fd",
      "tree": "60531b505178d4fb169abc83567d5d8db4f14ed0",
      "parents": [
        "b0b1b11b965598cb8fb724e636ebb58a77d437b5"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Jun 24 13:20:23 2011 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Jun 24 13:20:23 2011 -0700"
      },
      "message": "Code cleanup\n\nChange-Id: I64c346004e0adf9a776d0315534d4fe445f0c0ca\n"
    },
    {
      "commit": "d6b2a00dd43257d1498b09175bff63663f6cb861",
      "tree": "458956fbcc18eb53ddc81fd7a4d1bf64ee3c7a92",
      "parents": [
        "98029c825b9234e6b90721d910cc180885fcab1d"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Jun 17 17:45:59 2011 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Jun 17 17:45:59 2011 -0700"
      },
      "message": "Add error checking to LayerRenderer::copyLayer\n\nThis method is invoked by TextureView.getBitmap() and failures must be\ncaught to avoid leaving the GL context in a potentially bad state.\n\nChange-Id: I620de395ba1bc20154de58c81963223dc55cac78\n"
    },
    {
      "commit": "98029c825b9234e6b90721d910cc180885fcab1d",
      "tree": "0091be00b155882643ffe2a3f88d6df1c297aa3f",
      "parents": [
        "5d5d1ff2d5daadec48c6c95e86d6d644390c02e6"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Jun 17 15:47:07 2011 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Jun 17 15:47:07 2011 -0700"
      },
      "message": "Fix rendering issue with paths when the stroke width is 0\n\nChange-Id: I5d8ac23dc69e9e17df4ef6b5195186b5207e2524\n"
    },
    {
      "commit": "77a811610f99e21da7f88dafef60d09f345d0506",
      "tree": "f9342ace8ae4541f75c17a3f8531d3c6090de474",
      "parents": [
        "113543c909baadb911cfda6acef056137e16f191"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jun 14 16:45:55 2011 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jun 14 17:06:53 2011 -0700"
      },
      "message": "Add TextureView.getBitmap()\n\nThis API can be used to get a Bitmap copy of the content of a\nTextureView.\n\nChange-Id: I07522216c353720fba5cab333174f58f484eb911\n"
    },
    {
      "commit": "f504a2fa144504ca1efd39a4ef9208e3d4d336c5",
      "tree": "3d797f8910ac7615bddfc073435d8a26fcb80e61",
      "parents": [
        "3453b1c584f456a18f17d74a72c044b4e39c6405"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu May 26 16:40:55 2011 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu May 26 16:40:55 2011 -0700"
      },
      "message": "Correctly implement the CLEAR xfermode.\n\nThe previous implementation was using glBlendFunc with the parameters\nGL_ZERO/GL_ZERO which doesn\u0027t work for text, paths and other alpha\nsources (anti-aliasing.) The correct implementation is GL_ZERO/\nGL_ONE_MINUS_SRC_ALPHA.\n\nChange-Id: I4cca65e57b6a37bbf5a41d382cb0648ee8e11e79\n"
    },
    {
      "commit": "f9be16a9d4f5e3b2e9f6b9742626e4a87c5e29be",
      "tree": "b51598fcd17821305edd1287e35c015275bb1964",
      "parents": [
        "4725a90e8ea82799fb88fd27db5bb16969ac5abf"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed May 25 17:49:11 2011 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed May 25 17:49:11 2011 -0700"
      },
      "message": "Rename test to be able to launch it on crespo.\n\nChange-Id: Ieb3e1f6a2e3effe5c4042ad170f195244c7e2158\n"
    },
    {
      "commit": "858aa93ddb6e69e0503382af63bb681b6728aef1",
      "tree": "e6d79eaeef1f9cd204615448da72b63970e3c256",
      "parents": [
        "e4ba346f0f1bb153ec1f9da5c0a4fc96c301efda"
      ],
      "author": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Thu May 12 09:06:00 2011 -0700"
      },
      "committer": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Thu May 12 14:55:29 2011 -0700"
      },
      "message": "Antialiasing for rectangles\n\nChange-Id: I7ca6931606541ddd504bd5db7f8dc04b9cde8cd9\n"
    },
    {
      "commit": "8f0095cd33558e9cc8a440047908e53b68906f5f",
      "tree": "2f55d779bf102e0c134357d89c7de69d0444634a",
      "parents": [
        "3a5c227279011f850036c29e7c0bc96023298d5c"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon May 02 17:24:22 2011 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon May 02 18:32:29 2011 -0700"
      },
      "message": "Allows to render with an OpenGL context inside a TextureView.\n\nChange-Id: I59453f7fc3997f0502a1c5d325d37fed376fabc7\n"
    },
    {
      "commit": "ad44445c772efe66fdf063aa8f78d7ae3233570e",
      "tree": "8097234b893dbc0dfe050a0a98e7acecce74b28b",
      "parents": [
        "efe2a0e6ac8183c98dfe969928509e3b32903b40",
        "aa6c24c21c727a196451332448d4e3b11a80be69"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Apr 28 18:47:01 2011 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Apr 28 18:47:01 2011 -0700"
      },
      "message": "Merge \"New widget: TextureView Bug #4343984\""
    },
    {
      "commit": "aa6c24c21c727a196451332448d4e3b11a80be69",
      "tree": "27114ab3852d31723d885f3846ee874a07247126",
      "parents": [
        "9fc27819d75e24ad63d7b383d80f5cb66a577a0d"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Apr 28 18:40:04 2011 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Apr 28 18:46:19 2011 -0700"
      },
      "message": "New widget: TextureView\nBug #4343984\n\nTextureView can be used to render media content (video, OpenGL,\nRenderScript) inside a View.\n\nThe key difference with SurfaceView is that TextureView does\nnot create a new Surface. This gives the ability to seamlessly\ntransform, animate, fade, etc. a TextureView, which was hard\nif not impossible to do with a SurfaceView.\nA TextureView also interacts perfectly with ScrollView,\nListView, etc. It allows application to embed media content\nin a much more flexible way than before.\n\nFor instance, to render the camera preview at 50% opacity,\nall you need to do is the following:\n\nmTextureView.setAlpha(0.5f);\nCamera c \u003d Camera.open();\nc.setPreviewTexture(mTextureView.getSurfaceTexture());\nc.startPreview();\n\nTextureView uses a SurfaceTexture to get the job done. More\nAPIs are required to make it easy to create OpenGL contexts\nfor a TextureView. It can currently be done with a bit of\nJNI code.\n\nChange-Id: Iaa7953097ab5beb8437bcbbfa03b2df5b7f80cd7\n"
    },
    {
      "commit": "8a5cc92a150bae38ec43732d941b38bb381fe153",
      "tree": "24bf32e7fcc20ab94e64f57e6f72bd8762d3bdf9",
      "parents": [
        "b4a56f10d875dc62a9c73008f98596c7e32fc249"
      ],
      "author": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Tue Apr 26 07:28:09 2011 -0700"
      },
      "committer": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Wed Apr 27 14:23:29 2011 -0700"
      },
      "message": "Fix various hw-accelerated line/point bugs\n\nAll accelerated lines are now rendered as quads. Hairlines used to\nbe rendered as GL_LINES, but these lines don\u0027t render the same as our\nnon-accelerated lines, so we\u0027re using quads for everything. Also, fixed\na bug in the way that we were offsetting quads (and not offseting points)\nto ensure that our lines/points actuall start on the same pixels as\nSkia\u0027s.\n\nChange-Id: I51b923cc08a9858444c430ba07bc8aa0c83cbe6a\n"
    },
    {
      "commit": "5b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82",
      "tree": "905d0c539f0ed9a4e6ae6538bd6ab7f74efeefb8",
      "parents": [
        "3ad604b3d8a3ae87ee3f7545677bacc8f11159c0"
      ],
      "author": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Wed Apr 13 17:58:08 2011 -0700"
      },
      "committer": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Thu Apr 21 11:47:05 2011 -0700"
      },
      "message": "Enable anti-aliasing for hw-accelerated lines\n\nDraw anti-aliased lines with OpenGL by constructing a quad with\na border that fades out (to mimic fragment coverage).\n\nChange-Id: Ib81a3e62d663acdf1b46b401ac4aa7ee9855cc7e\n"
    },
    {
      "commit": "1a81aea8144b92ebaf807af9de69a0ab3415a5aa",
      "tree": "01eba86ec3fc430e0b174d59019026e35a42b1db",
      "parents": [
        "43e7aeb37e1d4d86eb89a0a5f620d148289d1986"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Mar 21 15:24:51 2011 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Mar 21 15:30:27 2011 -0700"
      },
      "message": "Update GL textures when changing a Bitmap\u0027s pixels\nBug #4146495\n\nChange-Id: I4fe3f8501373b86b164af11ae51642b140035bb8\n"
    },
    {
      "commit": "47b8adec3904535c8d8ce2b6e42ecd736f2d90ce",
      "tree": "3aa0807a2963ea256c378bf7dd5200fac9f39484",
      "parents": [
        "81904fa40b501d3907c086e7d4fdc4a3e25cd922"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Feb 23 19:46:33 2011 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Feb 23 19:51:42 2011 -0800"
      },
      "message": "Add a new Camera API to control the camera\u0027s location\n\nChange-Id: Id9a082d2def803eb527e1987875e0d8a22c6e8aa\n"
    },
    {
      "commit": "b18d2d0079b4dbf5675ab79b7111b3dfb3cc1ad0",
      "tree": "36e09ec065df8e1855c6ca3d809dbd59dea935ff",
      "parents": [
        "83a7b963f0070022d98853ea1fb4fa5c81cc5e79"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Feb 10 15:52:54 2011 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Feb 10 15:52:54 2011 -0800"
      },
      "message": "Dirty layers in the area covered by a drawBitmapMesh() call\nBug #3410827\n\nChange-Id: Ic8b4f6201af94497bba86c75819588c78debddc2\n"
    },
    {
      "commit": "f28daffda50042c1b7cbfeb34b4d47741c6e21a8",
      "tree": "ea4ec2648e7c585d35f26750d18cc1007ebd2052",
      "parents": [
        "e5e764ad0bb74d8c1405d018b4e0fe92d6554660"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Feb 04 00:59:34 2011 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Feb 04 00:59:34 2011 -0800"
      },
      "message": "Empty the clip rect when intersection is empty.\nBug #3410035\n\nChange-Id: I5ceb80514d3b20c9ad230478549ad31ced403d53\n"
    },
    {
      "commit": "09b7c91de73b59aa3f679b3ae3ba299f82ec9f8a",
      "tree": "9eb49f2fedb60e6df37b54216ed20f054a6f55fd",
      "parents": [
        "62687ec12cb8e0b1d4044a235b1387b9a8c3b4b4"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Feb 02 20:28:09 2011 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Feb 02 20:28:09 2011 -0800"
      },
      "message": "Allocate layers from the layers pool.\nBug #3413433\n\nThis change will be beneficial to Launcher to avoid hiccups when\nswiping pages of icons. When a layer is discarded, it is kept\nin the layers pool instead of being destroyed right away. This\nfavors memory reuse over allocations.\n\nChange-Id: Ifb6944ba83d6ceb67c331527c0827b26ce648eb1\n"
    },
    {
      "commit": "849d0a37cf2ca6c6a6c2d4d4456495e32e363120",
      "tree": "f23404bc72d50712c8d7b26ec375f9e22b91e500",
      "parents": [
        "485d577af1b410769e1a364d8e2bf7837fb313b0"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Feb 01 17:20:48 2011 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Feb 01 17:56:09 2011 -0800"
      },
      "message": "New API to let apps draw without layers.\nBug #3413433\n\nLauncher now enables layers all the time, but in some cases (for instance, when the\nworkspace is not scrolling,) it is more efficient to draw without the layer.\n\nChange-Id: I625fb5b48506acda9ae75356fdbbe812c85f2aab\n"
    },
    {
      "commit": "54229ee5eb92e3e2fc63d75353bcf09e0ebc8030",
      "tree": "cbec7a5d7caa4a04d534de6d624b3ae6670d1de9",
      "parents": [
        "feeea8f07c854e6b0ae2fec3aa2d239c17f32b5b"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Feb 01 13:05:16 2011 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Feb 01 13:05:16 2011 -0800"
      },
      "message": "Correctly set the alpha of a hardware layer before drawing it.\nBug #3410819\n\nChange-Id: I3ebaca2233f4edf5b59d84ec7706555056a1a4b1\n"
    },
    {
      "commit": "7d7b5490a0b0763e831b31bc11f17d8159b5914a",
      "tree": "7326e41a76618cba25a9757b43db779a607b9bdf",
      "parents": [
        "3dd0908a65095cb6946001ae3039ab87a47b4f33"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Jan 24 16:33:45 2011 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Jan 24 18:39:56 2011 -0800"
      },
      "message": "Enable partial invalidates when rendering with OpenGL.\n\nChange-Id: Ie8be06c4776b815e8737753eb8003b4fd8936130\n"
    },
    {
      "commit": "5a7b466a2b4b7ced739bd5c31e022de61650545a",
      "tree": "1eef540913ce3a131019586f9187bc8e66f59caa",
      "parents": [
        "c8219299b0003793cee8049b96a3bf7530765eea"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jan 20 19:09:30 2011 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jan 20 19:09:30 2011 -0800"
      },
      "message": "Add support for drawBitmapMesh().\n\nChange-Id: Ic77f9c534bb90dc7b9458299544bd50b8b6ae6a5\n"
    },
    {
      "commit": "01d58e43ede5ca98cbebdd166f9b0c545032c01b",
      "tree": "6d9976c551fd6ec9f104e5a849c0ad743946af6c",
      "parents": [
        "9335f5b2fde244614184f45d29cc574d1ba8cbba"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jan 19 21:54:02 2011 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jan 19 21:55:10 2011 -0800"
      },
      "message": "Add rounded rects and circles support to OpenGLRenderer.\n\nChange-Id: I6cedf2b495d58de7c0437096809fa9e4518a1b8c\n"
    },
    {
      "commit": "42f3a4b7c35dd1ea1922356eb3611af8cde05179",
      "tree": "aac476548acfc97b0dd5785ce06008c40b98753a",
      "parents": [
        "a3311ed7a9ddd7ecb066f4731ce4bc3bd3ffd939"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jan 19 13:42:26 2011 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jan 19 13:42:26 2011 -0800"
      },
      "message": "Make embedded hardware layers work.\nBug #3369474\n\nChange-Id: Ib6d7fb44eedda9dc2933b5e1b176f307968af91d\n"
    },
    {
      "commit": "807daf7df615b60ce6fc41355aabe3aa353cebab",
      "tree": "96eeb8bde5042241238946f787d1dbc3a416d6e6",
      "parents": [
        "d6cd572df8067c40b3e0e7e74e58cdb456b33e92"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jan 18 11:19:19 2011 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jan 18 11:19:19 2011 -0800"
      },
      "message": "Add support for skew()\n\nChange-Id: Ia3a9a867f74fd78b61f75179e3788fdc2f0cacd0\n"
    },
    {
      "commit": "fb13abd800cd610c7f46815848545feff83e5748",
      "tree": "299f1c241fc360cbf3016adee07ac3db46750203",
      "parents": [
        "90fc03bc493fc2c984599b198b9d50bc387134f2"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Sun Jan 16 15:16:38 2011 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Sun Jan 16 15:16:38 2011 -0800"
      },
      "message": "Fix 9patch rendering in ExpandableListView.\n\nChange-Id: I60843d61a40b0cb7dd09923cb4489a5a76f20486\n"
    },
    {
      "commit": "6c319ca1275c8db892c39b48fc54864c949f9171",
      "tree": "d89e4222487db2ccd9a6b03b0d55f8361a7d1856",
      "parents": [
        "b796889671c089fb7e2fc4498aa701d3e8e552a3"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jan 11 14:29:25 2011 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jan 11 17:53:19 2011 -0800"
      },
      "message": "Better backend for hardware layers.\n\nWith this new backend, a hardware layer is only recreated when\nits associated view is udpated. This offers fast composition\nin GL and fast update of the layer in GL as well.\n\nChange-Id: I97c43a612f5955c6bf1c192c8ca4af10fdf1d076\n"
    },
    {
      "commit": "171c592f0b7066acf279863c8a52ddabea49d3db",
      "tree": "eebf9a8c82c6a6d9db6edbf077b9299a96ae36e4",
      "parents": [
        "f0fe6d311d183c5fcf45d5e3e995fc8f9ed12f8b"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jan 06 10:04:23 2011 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jan 06 18:34:30 2011 -0800"
      },
      "message": "New layers API for Views.\n\nThis API can be used to back a view and its children with either a\nsoftware layer (bitmap) or hardware layer (FBO). Layers have\nvarious usages, including color filtering and performance\nimprovements during animations.\n\nChange-Id: Ifc3bea847918042730fc5a8c2d4206dd6c9420a3\n"
    },
    {
      "commit": "9f0696709b403065d98936e7884536dc98349a59",
      "tree": "b1ae3e0a86e0047c53f86865b477c2b608cdae22",
      "parents": [
        "67ba204aa23e7d5a96ad241a1623e44976b51741"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Jan 06 12:57:49 2011 -0800"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Thu Jan 06 12:57:49 2011 -0800"
      },
      "message": "We are now Honeycomb.\n\nChange-Id: I69dadd57184d2d80f426c1c862ed0a040c8baf03\n"
    },
    {
      "commit": "ec31a7f119608b94ea1bb41275811027a360bf30",
      "tree": "9e9d175cbbd71b6bf142806f82268680a1bc2176",
      "parents": [
        "d9c64369cf9be6568af2d79c35fb470cc261730d"
      ],
      "author": {
        "name": "Xavier Ducrohet",
        "email": "xav@android.com",
        "time": "Tue Dec 14 14:58:59 2010 -0800"
      },
      "committer": {
        "name": "Xavier Ducrohet",
        "email": "xav@android.com",
        "time": "Tue Dec 14 14:58:59 2010 -0800"
      },
      "message": "Create some layout files for HwAccelerationTest\n\nThe goal is use the app to test layout lib, so layout\nfiles are needed, and custom views must be instantiable\n(ie public)\n\nChange-Id: I46bb3d8af6e4d7973d041aa618f1c7762efd93d0\n"
    },
    {
      "commit": "a957eea78557cb47a91d44d9e6ee641c58cf1c07",
      "tree": "bc6ee438bdb116feee2fef40ada876367544dcbb",
      "parents": [
        "1e8b5fea90e6160f8cdd101767d0a8f6842751fd"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Dec 08 18:34:42 2010 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Dec 08 19:06:58 2010 -0800"
      },
      "message": "New, better line drawing implementation.\nBug #3207544\nBug #3225875\n\nChange-Id: Ibdd1dfc64e01625d5c441f39eb0aa3ee647f6ff5\n"
    },
    {
      "commit": "5ec9924d24495822b589f1a17996655d66273b30",
      "tree": "60a92b5ceb25b980be02cef82ef56ecf55cb7f04",
      "parents": [
        "98444a944c9126898bc4c370f831a79bb3b30bd8"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Nov 03 16:19:08 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Nov 03 16:19:08 2010 -0700"
      },
      "message": "Fix rendering issue with layers.\n\nChange-Id: I1d511ab2707000762a942d32c300a9944ab38603\n"
    },
    {
      "commit": "e5ebcb0107a939395e03592fd44c746cd09e311d",
      "tree": "1ee2cc9fb92d3de28f40658df2a7df1da79f64f8",
      "parents": [
        "c65217e4ec3e6c80834988ec3bc66a90778ee4b0"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Oct 15 13:57:28 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Oct 15 13:57:28 2010 -0700"
      },
      "message": "Fix clipping issue in StackView.\n\nChange-Id: I7ec28f25c3993a2bd7ef6399ba1923839d239905\n"
    },
    {
      "commit": "7975fb6d12cb1eb96b75e3a563627cd4c4081bd6",
      "tree": "5be6b4315c9b3ccffb980fe9d99fa74340bf3430",
      "parents": [
        "d1034c1967178302cad9085d15ae9849497babb2"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Oct 01 16:36:14 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Oct 01 16:36:14 2010 -0700"
      },
      "message": "Apply bilinear filtering to text.\n\nChange-Id: I2c81ad657ee2a11a2139e0b11ae3749db54c0749\n"
    },
    {
      "commit": "0bb5667b4ef91fefd0500fae0186789d15d54e0e",
      "tree": "92dfccfc1a428b6124e2a41061cde6a403976cd1",
      "parents": [
        "557ed7aa290497fb5764acb3f577edbe78bad5b9"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@android.com",
        "time": "Fri Oct 01 00:25:02 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@android.com",
        "time": "Fri Oct 01 00:25:02 2010 -0700"
      },
      "message": "Fix INVALID_OPERATION error with layers rendering.\n\nThis change is a workaround for a driver bug that causes an INVALID_OPERATION\nto be thrown on every glCopyTexSubImage() call. This change also adds a new\ntest for gradients local matrices.\n\nChange-Id: I41b7437481026702d0a3a9677f099b4557c0a84e\n"
    },
    {
      "commit": "ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6f",
      "tree": "4fd53bcd273d42fa1aebb064b18563aa293467b1",
      "parents": [
        "b5ab4173e0927e4668a45298c9900cd8007584e1"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Sep 20 17:53:08 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Sep 20 17:54:17 2010 -0700"
      },
      "message": "Add support for SweepGradient in the GL renderer.\n\nChange-Id: I7aa397ed4e34655ead9ba1f5b4ce087665e0f022\n"
    },
    {
      "commit": "759ea80dca64ad652110a129e0d8bf93fea79f61",
      "tree": "910900df67d9f9fed51398de2a03f40e2abefec5",
      "parents": [
        "bf434114cbf55b216fdc76fc8d65a75e84c9dab5"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Sep 16 20:49:46 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Sep 16 20:49:46 2010 -0700"
      },
      "message": "Add support for drawLines(), with anti-aliasing\n\nChange-Id: I16c0593c5671490909dec13a85df601e1428a1a6\n"
    },
    {
      "commit": "8411f336c786379c5a03106e9ed3bc8622b579a5",
      "tree": "a84342e818982f1075d6c1722706e3bf4bd14ddb",
      "parents": [
        "1510770165b7bc675e5171560e907c0269dbe0fa"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Sep 13 17:27:57 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Sep 13 17:27:57 2010 -0700"
      },
      "message": "Fix rendering issue with layers intersecting the clip rect.\n\nChange-Id: Icbe35194fa219ef13ce639d33631235f8d7df3d7\n"
    },
    {
      "commit": "f607bdc167f66b3e7003acaa4736ae46d78c1492",
      "tree": "b3b4fb761b25d08ba836ff822f6e72d85b5be695",
      "parents": [
        "d14f0dfd58af653a2d41424d472fe97de6af0a78"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Sep 10 19:20:06 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Sun Sep 12 12:24:12 2010 -0700"
      },
      "message": "Correct implementation of saveLayer().\n\nChange-Id: I5375126636913e0a84f2d6bbd0ebe40d2e4f2763\n"
    },
    {
      "commit": "a5aed0d58962a24c44728ffc46dc9e1ba2f9fda5",
      "tree": "4194d14711b2cba0e8192e5f1c0764f530bc7309",
      "parents": [
        "d90f23e24a4d1768d5a7ed0e7072e67af6330a45"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Sep 09 14:42:43 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Sep 09 14:42:43 2010 -0700"
      },
      "message": "Add support for advanced blend modes with the framebuffer.\n\nThis adds the ability to blend with the framebuffer using Darken,\nLighten, Add, Multiply, Overlay and Screen.\n\nChange-Id: Iae01a53797d4ad39c373cba6ff2a42293129da1a\n"
    }
  ],
  "next": "53389bdcdf6ffaaec533b73bc1d0abc5807ec7f6"
}
