)]}'
{
  "log": [
    {
      "commit": "1c740bce8a762f02b5283045a0e2de7c8fb41277",
      "tree": "ebc1358a3cdcfb69f0427769756cbc83914f6c29",
      "parents": [
        "81ab046a1127bd2ad397e6d1c6f8021b202a97ff"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Sep 13 18:00:09 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Sep 13 18:03:21 2010 -0700"
      },
      "message": "Document the implementation of saveLayer().\n\nThe implementation is simple but tricky. Leave explanations to my\nfuture self so that I don\u0027t invent a time machine to come back to\nnow and slap my self.\n\nThis change also simplifies the way the GL blending function is\nchosen when compositing a layer. It reuses existing OpenGLRenderer\nAPIs and is easier to understand.\n\nChange-Id: I1b9cf8c5d51e09836d85b8cf157a1c284aa65c59\n"
    },
    {
      "commit": "8694230ff25fa0a60e480d424843e56b718f0516",
      "tree": "4fa55299cb6a516c443ce2c2082530ec69928211",
      "parents": [
        "f607bdc167f66b3e7003acaa4736ae46d78c1492"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Sun Sep 12 13:02:16 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Sun Sep 12 13:02:16 2010 -0700"
      },
      "message": "Optimize calls to glCopyTexImage2D().\n\nChange-Id: I34ee87bd4472864f440916e03a2894fae24bbe4a\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"
    },
    {
      "commit": "8aef54fa17f2a3753d9a8f2027629bc480088f69",
      "tree": "b4b9e8130e46e3e2271f6e9d55aa988e1f172655",
      "parents": [
        "dbecc24a4ed4e9c24fc03db19038ee45cf7a0b1d"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@android.com",
        "time": "Wed Sep 01 15:13:49 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@android.com",
        "time": "Wed Sep 01 15:49:25 2010 -0700"
      },
      "message": "Add support for Canvas flags on save.\n\nThis is required for the rewrite of layers support.\n\nChange-Id: I5c0867dcf5aeb0392c8d0fbab05febb0eaff70d9\n"
    },
    {
      "commit": "da8532c6f48b4c10b5e2ccb9e08690341efa1616",
      "tree": "e6ce7f533b4f4bb5bb9cdf60be64138d6bbb34ea",
      "parents": [
        "7dff1a72146ba549d51649ad786a0e1cc8b6897c"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Aug 31 11:50:35 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Aug 31 11:50:35 2010 -0700"
      },
      "message": "Add hooks for hardware accelerated WebView.\n\nChange-Id: I907cdec8a67594f87749ac46bda85f04af5a2003\n"
    },
    {
      "commit": "fb8b763f762ae21923c58d64caa729b012f40e05",
      "tree": "013792d41f32bff4dd35e6d53eebac711c513729",
      "parents": [
        "a1f1174b396cda7bdff469a2e974a737600c5eb0"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Aug 23 21:05:08 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Aug 24 17:18:14 2010 -0700"
      },
      "message": "Use only one GL context per process, share chaches.\n\nChange-Id: Ieabaa25338d2f4b8d4fd90e7401ad6e7452eae11\n"
    },
    {
      "commit": "2542d199745cdf3ec910b8e3e4cff5851ed24e9b",
      "tree": "b0628a20db972e570e5781a957a2747dc3a3c16a",
      "parents": [
        "a8031c68c8e7ac5b1edfff2b6d03e3b46ec38a9d"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Aug 18 11:47:12 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Aug 18 11:47:12 2010 -0700"
      },
      "message": "Layers were using an extra Snapshot causing extra clipping.\n\nBug #2919310\n\nChange-Id: I72ccd44bba7a3f3db72f581aa96198b6226e4478\n"
    },
    {
      "commit": "0a41749953f35d33f61b3119e3161a82bb5fa59e",
      "tree": "3e0827c18c19e3ad8745ce133561be8a275f0345",
      "parents": [
        "5b53f9186e7812c93bc578d18e92cb123481fcbc"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Aug 16 20:26:20 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Aug 16 20:26:20 2010 -0700"
      },
      "message": "Cleanup, better code reuse.\n\nChange-Id: Ib86a7309ae579cce3b7cf464782c34e70a74c616\n"
    },
    {
      "commit": "1e45aae5de003657e5d18f74d34998f5de5db5b7",
      "tree": "355320038d0de8ed9b39c0cd3d3865b7fbbae1fd",
      "parents": [
        "029a74a38b56b97cbfe02b3d8e23536cea71609d"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Aug 13 19:39:53 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Aug 13 19:41:14 2010 -0700"
      },
      "message": "Add drop shadows.\n\nChange-Id: Ic6a72409d4785968d1fbdff229f17ee5c00b240b\n"
    },
    {
      "commit": "7fbcc0492fca03857e3c45064f4aa040af817d55",
      "tree": "a2422b4694ae589a60f2571070c53c7b918ec732",
      "parents": [
        "bc9151bcad5d1b1d14bb900fcc50ba08c06f87d4"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Aug 04 15:40:07 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Aug 05 17:23:49 2010 -0700"
      },
      "message": "Add support for paths.\n\nRendering is implementing by rasterizing the paths into A8 textures.\nThis cna be extremely inefficient if the path changes often.\n\nChange-Id: I609343f304ae38e0d319359403ee73b9b5b3c93a\n"
    },
    {
      "commit": "db1938e0e6ef816e228c815adccebd5cb05f2aa8",
      "tree": "d40e91a873bca6750083fdb1713a12b469ebad4d",
      "parents": [
        "16f8c620abd0ea07e704b6997a66a45ad3590dea"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Aug 02 18:50:22 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Aug 02 18:50:56 2010 -0700"
      },
      "message": "Add support for ColorFilters.\n\nColor filters are fully supported and can be used with shaders.\n\nChange-Id: Id90ccf1c81cb462f2431f366f3f8f710d7971e04\n"
    },
    {
      "commit": "06f96e2652e4855b6520ad9dd70583677605b79a",
      "tree": "7d0e3709c8a400e264f37206eb27a286ee50d64b",
      "parents": [
        "42272759e4c3c406977187fd2b4df8739edccde8"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Jul 30 19:18:16 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Jul 30 19:18:16 2010 -0700"
      },
      "message": "Refactor Skia shaders handling.\n\nWith this change, Skia shaders can easily be applied to any mesh. This change also\nsupports ComposeShader. For instance, this can be used to blend a gradient and a\nbitmap togehter and paint a string of text with the result.\n\nChange-Id: I701c2f9cf7f89b2ff58005e8a1d0d80ccf4a4aea\n"
    },
    {
      "commit": "ae5575b3421c8fbe590ab046d7d5f2b36ecfd821",
      "tree": "2e4cfe7b83c81492a577428e0f8b7cb33faaa551",
      "parents": [
        "889f8d1403761d5668115ced6cbb3f767cfe966d"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jul 29 18:48:04 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jul 29 18:48:04 2010 -0700"
      },
      "message": "Fix gradients rendering and destructor crashes.\n\nThis changes binds all textures to GL_TEXTURE0, this will have\nto be changed when combining shader capabilities.\n\nChange-Id: I02df4f5ba41e9b01ffa52fd7c26b41477c7ed18f\n"
    },
    {
      "commit": "889f8d1403761d5668115ced6cbb3f767cfe966d",
      "tree": "8620d3453e3811dce152630f1b17e0f5f42601c6",
      "parents": [
        "85d8daa889db113b51c5d98929245e80f7277388"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jul 29 14:37:42 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jul 29 14:37:42 2010 -0700"
      },
      "message": "Moved all the rendering code to the new shader generator.\n\nThe generator supports features that are not yet implement in the\nrenderer: color matrix, lighting, porterduff color blending and\ncomposite shaders.\n\nThis change also adds support for repeated/mirrored non-power of 2\nbitmap shaders.\n\nChange-Id: I903a11a070c0eb9cc8850a60ef305751e5b47234\n"
    },
    {
      "commit": "ac670c0433d19397d4e36ced2110475b6f54fe26",
      "tree": "10722cd4e465fc053f9536cc312c1125a694108a",
      "parents": [
        "bb2b2a996b2c0bea7e434136e20340f4f1b398ab"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jul 27 17:39:27 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jul 27 19:52:29 2010 -0700"
      },
      "message": "Generate shaders to cover all possible cases.\n\nWith this change, all the vertex and fragment shaders used by the GL\nrenderer are now generated based on a program description supplied\nby the caller. This allows the renderer to generate a large number\nof shaders without having to write all the possible combinations by\nhand. The generated shaders are stored in a program cache.\n\nChange-Id: If54d286e77ae021c724d42090da476df12a18ebb\n"
    },
    {
      "commit": "e8e62a4a032a80409114a37908b5f18ab0080848",
      "tree": "7bd5be7505e21861a02dda702e24f94d8e9b24cc",
      "parents": [
        "9e05ed2f6860a2d34c339a1755dbb5f68081c62e"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Jul 23 18:55:21 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Jul 23 18:55:21 2010 -0700"
      },
      "message": "Add text alignment support to drawText().\n\nThis change also integrates better support for RTL text.\n\nChange-Id: I6da8f5cf5dc28ca7cf1b22e27b0d853c919e8481\n"
    },
    {
      "commit": "51769a68a5cb34e9564740c6a854fcb93018789d",
      "tree": "ceb06dc0bd51240c4aaabdef8bfb415b3c982cdd",
      "parents": [
        "b84b7e8f2172964fb32598728cc25cada73cb148"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@android.com",
        "time": "Fri Jul 23 00:28:00 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@android.com",
        "time": "Fri Jul 23 00:28:00 2010 -0700"
      },
      "message": "Cleanup, added properties for the FontRenderer.\n\nChange-Id: I909c74815d3ac394438ad8071d17fef5401dbeed\n"
    },
    {
      "commit": "bd0e6aa0ff0bd8b376772c3e23513a6021bdda87",
      "tree": "c32048451001806f0be1361f970f9d1686cc1532",
      "parents": [
        "950d6a984a49eac8e688a66a79a55c83e92eb869"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jul 22 18:50:12 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jul 22 18:52:24 2010 -0700"
      },
      "message": "Add a way to query GL extensions.\n\nChange-Id: Ic27dbf72289dacf641b640a749fbd40c12cd474f\n"
    },
    {
      "commit": "694b519ac647fe998fd396fe0784cc8e179aadc4",
      "tree": "80a5e423f90aba3ab74645ac7f3b2cbfd838c757",
      "parents": [
        "0119ba5bd3335fe026927eeb65de535a7bd8c838"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jul 21 21:33:20 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jul 21 21:33:20 2010 -0700"
      },
      "message": "Add text rendering.\n\nChange-Id: Ibe5a9fa844d531b31b55e43de403a98d49f659b9\n"
    },
    {
      "commit": "a1db574036c9bc2d397b69f8200594027e1fff16",
      "tree": "ece6071cd30838075c334e6b2eda391af45c0f12",
      "parents": [
        "c0ac193b9415680f0a69e20a3f5f22d16f8053be"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jul 20 13:09:13 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jul 20 16:37:27 2010 -0700"
      },
      "message": "Add preliminary support for text rendering.\n\nChange-Id: I547eb631dbda24d13960d54b4144fb8908fd8a49\n"
    },
    {
      "commit": "c0ac193b9415680f0a69e20a3f5f22d16f8053be",
      "tree": "9a1d680ad20ba3f6ec0924c6b445290696d63b8c",
      "parents": [
        "9d339c13aaa30ddfd51d0f13f8ab22af05e40ea0"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Jul 19 18:43:02 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Jul 19 18:44:05 2010 -0700"
      },
      "message": "Add support for linear gradients.\n\nChange-Id: Id15329da065045b3f06fdaed615f33cd57608496\n"
    },
    {
      "commit": "f9764a4f532561f6e2e985ff3b25112f1132ce44",
      "tree": "910110cc35d1d3e2a48f000734ec50f6e53ced0f",
      "parents": [
        "7fac2e18339f765320d759e8d4c090f92431959e"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@android.com",
        "time": "Fri Jul 16 23:13:33 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@android.com",
        "time": "Fri Jul 16 23:18:27 2010 -0700"
      },
      "message": "Add program for linear gradient.\n\nThis change adds a new DrawLinearGradientProgram class to enable the drawing\nof linear gradients. Two new vertex and fragment shaders are introduced,\nbased on DrawTextureProgram\u0027s shaders.\n\nChange-Id: I885afc076bb6cef8cd3962ae21a086fa6a03bf96\n"
    },
    {
      "commit": "7fac2e18339f765320d759e8d4c090f92431959e",
      "tree": "1761c4f41ecd783a85220efcbcacb04d784d96cf",
      "parents": [
        "1e79386ba34f0db38c1b35b22cdf122632534354"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@android.com",
        "time": "Fri Jul 16 17:10:13 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@android.com",
        "time": "Fri Jul 16 17:10:13 2010 -0700"
      },
      "message": "Add plumbing to support gradients in OpenGL renderer.\n\nThe LinearGradient class keeps a copy of the various parameters that\ndefine the gradient. The copies are native arrays to avoid copying\nJava arrays on every draw call. The gradient code path is implemented\nuntil OpenGLRenderer::drawRect() (see TODO.) The actual gradient\nimplementation will be added in a latter change.\n\nChange-Id: I9300d250ef5e2e9c2e097c3116ee71dfc9d752d8\n"
    },
    {
      "commit": "1e79386ba34f0db38c1b35b22cdf122632534354",
      "tree": "35c3fe20c2dc66823ac1c7970e395748d8fe52a3",
      "parents": [
        "079ba2c85b15e882629b8d188f5fbdb42f7f8eea"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@android.com",
        "time": "Fri Jul 16 15:07:42 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@android.com",
        "time": "Fri Jul 16 15:07:42 2010 -0700"
      },
      "message": "Optimize textures binding.\n\nThe renderer is still changing textures\u0027 wrap modes every time, this will require\na latter optimization.\n\nChange-Id: I3eb92cb8c886c4a692b7f0ca759911f9371d4d2c\n"
    },
    {
      "commit": "079ba2c85b15e882629b8d188f5fbdb42f7f8eea",
      "tree": "dcdad4233c75952bea11e4d5b945996a0f930a9a",
      "parents": [
        "ebd6f94dbdafdb14d620d2bd8e08535a309f266a"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@android.com",
        "time": "Fri Jul 16 14:12:24 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@android.com",
        "time": "Fri Jul 16 14:12:24 2010 -0700"
      },
      "message": "Improve clip support (add intersect, union and replace.)\n\nThis change also modifies the way the clip is stored. The clip is now\nalways stored in screen-space coordinates.\n\nChange-Id: I96375784d82dfe975bc6477a159e6866e7052487\n"
    },
    {
      "commit": "d27977d1a91d5a6b3cc9fa7664ac7e835e7bd895",
      "tree": "a8290b6045c8a13ea250e2dc00bb904b993a5bdc",
      "parents": [
        "7ba6617a53424b85711313478459a0a8cda8c3da"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jul 14 19:18:51 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jul 15 14:44:42 2010 -0700"
      },
      "message": "Add support for BitmapShader.\n\nThis change also fixes an issue with the clip and layers.\n\nChange-Id: I5fd9832098d8cf7ae8eb781ff9bffe7defaea279\n"
    },
    {
      "commit": "3d58c03de0d8877b36cdb78b0ca8b5cac7f600e2",
      "tree": "81d20a1aac231574266c696b82c36a67ff6772be",
      "parents": [
        "756088482fb102f0c728151553210dca254b575f"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jul 14 16:34:53 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jul 14 16:35:43 2010 -0700"
      },
      "message": "Do not apply transforms when using drawColor().\n\nThis fixes an issue in the way the clip transformations were applied.\n\nChange-Id: I91e7b5d15baf244d1280e48938282bb33609081d\n"
    },
    {
      "commit": "a979474f15b454c8e2963f239a3770e200bb227c",
      "tree": "4279e918b6c244a7ce6ef115952fc44484a80166",
      "parents": [
        "37b76cdcb47697de7460dd254b62f1ff63e4ccde"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jul 13 11:37:54 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jul 13 11:37:54 2010 -0700"
      },
      "message": "Cleanup: remove unnecessary parameters.\n\nChange-Id: I5956ef1db6be28a01369387aaeeb65a94656c48c\n"
    },
    {
      "commit": "92429d9266edf63cf632c132c5936f0e31850988",
      "tree": "f5a61c444492f687ac8195f25d7f98f613d1f160",
      "parents": [
        "c7f3ce8401f9bb25ee8818092e85365908ae986d"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Jul 12 20:27:17 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Jul 12 20:27:17 2010 -0700"
      },
      "message": "Fix premultiplied alpha.\n\nChange-Id: I08da422c5350503e1f4f27b9890f15a813d0c6c7\n"
    },
    {
      "commit": "6926c72e25b8dec3dd4b84af0819fa1937ae7296",
      "tree": "b59a3b01ddbc9ae8c0b5f11eaa6fcf27a9f9511d",
      "parents": [
        "260e102162322958cf17dbd895cd6bd30dc87e32"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Jul 12 20:20:03 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Jul 12 20:20:03 2010 -0700"
      },
      "message": "Correctly support pre-multiplied alpha, optimizations, more stuff.\n\nAdd support for the following drawing functions:\n- drawBitmap(int[]...)\n- drawPaint()\n\nOptimizes shader state changes by enabling/disabling attribute arrays\nonly when needed.\n\nAdds quick rejects when drawing trivial shapes to avoid unnecessary\nOpenGL operations.\n\nChange-Id: Ic2c6c2ed1523d08a63a8c95601a1ec40b6c7fbc9\n"
    },
    {
      "commit": "260e102162322958cf17dbd895cd6bd30dc87e32",
      "tree": "e7ff653e0e68525f1f90edeb2fbccc88fb81caeb",
      "parents": [
        "d12315ae7ee06902f4b7470259ce33076b6f542c"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Jul 12 14:41:06 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Jul 12 14:43:40 2010 -0700"
      },
      "message": "Optimize shader binding changes.\n\nThis change also cleans up the internal API a little bit by using mat4\neverywhere instead of float[16] (for the ortho matrix for instance.)\n\nChange-Id: I35924c7dc17bad17f30307118d5ed437c2ed37e0\n"
    },
    {
      "commit": "fb5e23c327cd5f8f93d1eaa7c10f34d6fd3efb6c",
      "tree": "8637af6593869b9e3f31a8b35c4388016eb690ac",
      "parents": [
        "3465d5f532b65b0e50d21f5b23bc3badc73248ba"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Jul 09 13:52:56 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Jul 09 13:52:56 2010 -0700"
      },
      "message": "Refactoring to move vertex computing to the Patch class.\n\nThis change is mostly cleanup to keep less code in OpenGLRenderer.\n\nChange-Id: I954375143b2943829457ab470423729b60b844f5\n"
    },
    {
      "commit": "82ba814ca0dea659be2cc6523bc0137679d961ce",
      "tree": "93d2375615c7c67ccda0506376eef2079366fa5b",
      "parents": [
        "020057bd534a41080af8edbe6c6565d478ef256c"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Jul 09 13:25:56 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Jul 09 13:25:56 2010 -0700"
      },
      "message": "Optimize blending state changes.\n\nChange-Id: I7c22a8aecccb8b5abfcf7243f049a4ef3cf3979a\n"
    },
    {
      "commit": "f7f93556c8fcc640ab5adef79d021a80a72a645a",
      "tree": "71fc93983fc54c32a0051890b719e6f20ec90003",
      "parents": [
        "26be805f4242af9d511584663e88dfae235d74a4"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jul 08 19:17:03 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jul 08 19:19:07 2010 -0700"
      },
      "message": "Draw n-patches using OpenGL.\n\nCurrently only tested with title bars and buttons.\n\nChange-Id: I8263a9281898dc0e943b1b8412827fe55639b9d6\n"
    },
    {
      "commit": "deba785f122a47915756ffd991f5540d952cf937",
      "tree": "6ac5b344722fd29c3ccc90a5be3aa7edcf489de1",
      "parents": [
        "290357aca828854cb3b327eaac45a3ff13821d4a"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jul 07 17:54:48 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jul 07 17:55:03 2010 -0700"
      },
      "message": "Add support to draw 9patches in OpenGL.\n\nThis change only adds the necessary API and stubs. The implementation\nwill be added in another change.\n\nChange-Id: Ie50b8aff5868e78796cee331df15bdbf990d2ea1\n"
    },
    {
      "commit": "dda570201ac851dd85af3861f7e575721d3345da",
      "tree": "795e46c7cae42b22814af1ef2ac70c083debd746",
      "parents": [
        "216108c492fef05261c70f1018d94cef0c3b23fd"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@android.com",
        "time": "Tue Jul 06 11:39:32 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@android.com",
        "time": "Tue Jul 06 12:00:33 2010 -0700"
      },
      "message": "Add a layer (FBO) cache.\n\nThe cache is used to draw layers so that a new\ntexture does not have to be recreated every time\na call to saveLayer() happens.\n\nThe FBO cache used a KeyedVector, which is a bad\nidea. The cache should be able to store several\nFBOs of the same size (this happens a lot during\nscrolling with fading edges for instance.) This\nwill be changed in a future CL.\n\nChange-Id: Ic316189e625f0dbcf0d273a71cc981a433d48726\n"
    },
    {
      "commit": "f86ef57f8bcd8ba43ce222ec6a8b4f67d3600640",
      "tree": "1ce9f59ca3dab7579b6548861b21dcf2df159815",
      "parents": [
        "1a3e1056db1deafcc8cdfae3aa36581c70b16cf0"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jul 01 11:05:42 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jul 01 15:27:21 2010 -0700"
      },
      "message": "Don\u0027t use full screen FBOs, this dramatically increase performance.\n\nThe next step will be to add an FBO cache to avoid churning memory on every\nframe we draw. This change also adds support for drawBitmap(Bitmap, Matrix, Paint).\n\nChange-Id: I7825cdcf0cad9bffe6219e05d8328a53d4a6e583\n"
    },
    {
      "commit": "8ba548f81d1ab5f1750cbf86098c4a14e0b8bead",
      "tree": "cac0b8552a14e0b01809d1d67840953e144d7383",
      "parents": [
        "e07f6eeb3af2defe99fbd63a73b8e636139edd1a"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jun 30 19:21:21 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jun 30 19:21:21 2010 -0700"
      },
      "message": "Add implementation for drawBitmap(Bitmap, Rect, Rect, Paint)\n\nChange-Id: I10904d2325a5431d15801aebcec1048715678e8c\n"
    },
    {
      "commit": "c1396e93b6a5286a5183c00c781b62e940a12c1f",
      "tree": "41da22a7756936c8cbc4687286e9b854235cd3f5",
      "parents": [
        "efcd77407b321498a43ca380c8f67b84eb5a2d6e"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jun 30 17:56:19 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jun 30 17:56:19 2010 -0700"
      },
      "message": "Add implementation for drawBitmap().\n\nChange-Id: Iada9325f3c5642b61c2e0c4cd80bcfbc92cb491e\n"
    },
    {
      "commit": "ce0537b80087a6225273040a987414b1dd081aa0",
      "tree": "31682a01c12091c552217186604fca32f43e98ff",
      "parents": [
        "81ea83d10883886013bc95eac2fe032acf1e7aa9"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jun 29 21:05:21 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jun 30 15:21:01 2010 -0700"
      },
      "message": "Add hooks for drawBitmap().\n\nChange-Id: I58e962c3a8b2bc75c2605fe369ad3002579d86e0\n\nAdd texture cache.\n\nChange-Id: I1c0e5581d228869e114438258a1014e33e024ad7\n"
    },
    {
      "commit": "d55a86120dd1e8ebcc6906c9ffd463f7460348da",
      "tree": "11ee1cc35750ba27df4fdb80540c3a5752cdd500",
      "parents": [
        "8f704d89dc38c6e25b23721f6a784956521f283a"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Jun 28 17:42:46 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Jun 28 18:52:24 2010 -0700"
      },
      "message": "Add support for saveLayer().\n\nsaveLayer() is affected by the paint\u0027s alpha and xfermode.\n\nChange-Id: I28693a9337052643adccdb4889a8f228d4e17903\n"
    },
    {
      "commit": "026c5e16704e817cac7d9c382914c947e34f87e0",
      "tree": "6398f104ab860dd65caf02336ea96fff3c79dadf",
      "parents": [
        "4aef697d58bc142b96953cb2623b06981af2abc9"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Jun 28 17:12:22 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Jun 28 17:12:22 2010 -0700"
      },
      "message": "Implement support for PorterDuff\u0027s blending modes.\n\nThe blending modes are currently hooked up only when drawing filled rects but the\ncode is reusable for other primitives. This will allow implementation of saveLayer().\nThis method is required to support the fade effects used throughout the standard\nAndroid UI.\n\nChange-Id: I396023d123436f16cdafc606e358e4eb80c9df2c\n"
    },
    {
      "commit": "5cbbce535744b89df5ecea95de21ee3733298260",
      "tree": "37dda328f8d127cead9e799e5220b4589267bc5e",
      "parents": [
        "1d58b498de5eb3b53ca0c7ffd14b1c209833d297"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@android.com",
        "time": "Sun Jun 27 22:59:20 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@android.com",
        "time": "Sun Jun 27 22:59:20 2010 -0700"
      },
      "message": "Reduced the complexity of layers composition.\n\nThis change also refactors the code base a bit by moving classes out of\nOpenGLRenderer into separate headers/implementations. This makes the code\nmore manageable.\n\nThis change also adds documentation for implementation methods. The\nundocumented methods are simply Skia\u0027s Canvas methods.\n\nChange-Id: I54c68b443580a0129251dddc1a7ac95813d5289e\n"
    },
    {
      "commit": "bd6b79b40247aea7bfe13d0831c6c0472df6c636",
      "tree": "71c913ec50df87a9463e30c8a28e5cb29e734c79",
      "parents": [
        "7ae7ac48aa2b53453c9805075171ecd5bcafd7de"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@android.com",
        "time": "Sat Jun 26 00:13:53 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@android.com",
        "time": "Sat Jun 26 00:13:53 2010 -0700"
      },
      "message": "Add implementations for saveLayerAlpha() and textured rects.\n\nEven though there\u0027s an implementation for textured rects, drawBitmap() is not\nhooked up yet as it will require a good texture cache.\n\nThis method is implemented using FBOs. There\u0027s currently an issue either in the\ndriver or in the Canvas renderer that forces the FBO to be fullscreen, which is\nextremely expensive and yields terrible performance.\n\nChange-Id: I148419195e12d45653c60186938aa78c23a68e2c\n"
    },
    {
      "commit": "7ae7ac48aa2b53453c9805075171ecd5bcafd7de",
      "tree": "a1d496162615bc915bf7642acc5c94bcc98cef53",
      "parents": [
        "1b6333863962ba637be394cb0ba17a12ca62ce61"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@android.com",
        "time": "Fri Jun 25 13:46:18 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@android.com",
        "time": "Fri Jun 25 13:46:18 2010 -0700"
      },
      "message": "Convert tabs to spaces.\n\nChange-Id: I5d3ae48af79b19b6d293deff0521e4bb57d5114b\n"
    },
    {
      "commit": "c7d53494f1fbd9f9d74af89053ff9fdb1ccbac6c",
      "tree": "e9fa1c80906aa67991fea69f664fdddc94897327",
      "parents": [
        "5b7e333cf2f91c94e37dbb7024fa38da3db34619"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@android.com",
        "time": "Fri Jun 25 13:41:57 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@android.com",
        "time": "Fri Jun 25 13:41:57 2010 -0700"
      },
      "message": "Implement quickReject() and drawRect().\n\nThe OpenGL ES 2.0 renderer can now draw colored rectangles. At least there\u0027s\nsomething on screen now.\n\nChange-Id: I80a13ccc1dd56784edf74f2670a364f30700234a\n"
    },
    {
      "commit": "9d5316e3f56d138504565ff311145ac01621dff4",
      "tree": "40c79ba098de4624fbe38cb400c6ac4fe7340673",
      "parents": [
        "a18dbdf420fabebb83e7403d000384a8d98daffa"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jun 24 19:30:36 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jun 24 19:30:36 2010 -0700"
      },
      "message": "Add colored rectangles implementation in OpenGLRenderer.\n\nDrawing two rectangles one after the other discards the second one because of\nZ buffering issues. This will be fixed in another changelist.\n\nChange-Id: Ida1b3cde8a78e60cacc07e477abc44def527ff67\n"
    },
    {
      "commit": "f6a11b8a9e25ff9861bbba19251bea84d8a5daf2",
      "tree": "c44f214f59f2206de152585d97b23e2bfaa1b3b0",
      "parents": [
        "bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jun 23 17:47:49 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jun 23 17:47:49 2010 -0700"
      },
      "message": "Add support for transformations.\n\nThis change adds partial support for the following transforms:\n- scale()\n- translate()\n- rotate()\n- setMatrix()\n- getMatrix()\n\nThe transform is stored in a snapshot and saved/restored as needed.\nThe transform is currently not applied to the clip rect and is not\nmapped to the vertex shader.\n\nChange-Id: Id48993453311200804149917d0c126a4d0471226\n"
    },
    {
      "commit": "bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4",
      "tree": "b38978e88e8434e0a4bd8ac8e5c70bf2af26b3ea",
      "parents": [
        "03f0292744094ec107ffce71301c394503a31ded"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jun 22 18:56:38 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jun 23 12:36:03 2010 -0700"
      },
      "message": "Add implementations for clipRect(), save() and restore().\n\nThe current implementation of clipRect() does not apply local transformations\nbefore setting the new clip.\n\nChange-Id: I5997871bb638dfcd1a8ef96354846af52427e445\n"
    },
    {
      "commit": "85bf02fc16784d935fb9eebfa9cb20fe46ff7951",
      "tree": "7d8cb5d36bca58555a33e8647afd8f0e00647b7b",
      "parents": [
        "102fb89b9a4d2a6620f88b247405f853d78a09b6"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jun 22 13:11:24 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jun 22 13:11:24 2010 -0700"
      },
      "message": "Fix the simulator build.\n\nChange-Id: Ie404f7c2c308f0657f273af19a56e8c039b61898\n"
    },
    {
      "commit": "08ae317c21ec3086b5017672bba87420cc38a407",
      "tree": "fcd8d6cddb0078ac401b96bd5a516025f970eac0",
      "parents": [
        "ab8aa51aa6b98dd5c83132659867aed36532c224"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Jun 21 19:35:50 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Jun 21 19:35:50 2010 -0700"
      },
      "message": "Add glOrtho equivalent to the OpenGL ES 2.0 renderer.\n\nChange-Id: I063dad3d81dab7833acb1e7a9c7121f8efd2a044\n"
    },
    {
      "commit": "e4d011201cea40d46cb2b2eef401db8fddc5c9c6",
      "tree": "b890cdac7775120beb89308de1b593ec6af76a0e",
      "parents": [
        "5e81e5b96b20bddf90adff33d50f5d003ab619ad"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jun 16 18:44:05 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jun 17 13:40:11 2010 -0700"
      },
      "message": "Add libhwui, to hardware accelerate the Canvas API using OpenGL ES 2.0.\n\nThis is the initial checkin to setup the library and turn on OEGL ES 2.0\nin ViewRoot, not a functional renderer.\n\nChange-Id: I6655c54166e2967da2e21e7d6dcfba78bf113b44\n"
    }
  ]
}
