)]}'
{
  "log": [
    {
      "commit": "99bcdc52dcb365ed7d8cfa13540fb33fbcbbac9d",
      "tree": "6aa73d73948d851ea9b61c36e74a275c4092f5ad",
      "parents": [
        "bbf68c6ad2cc3dd338f93779d60c5821e730a263"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Oct 13 15:17:00 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Oct 13 17:24:41 2010 -0700"
      },
      "message": "Return identity matrix when rendering in an FBO.\n\nChange-Id: I57438e745b30c8cfe16c269f3cafcd719049d705\n"
    },
    {
      "commit": "41030da16856c8869e1e51d4a0405432fa96614e",
      "tree": "e40b599f2961989c444e5ca1bb92536eef76b7ba",
      "parents": [
        "2b67ce7213501d4377e46f67656993914eceb423"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Oct 13 13:40:37 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Oct 13 13:40:37 2010 -0700"
      },
      "message": "Add a getNativeMatrix() API.\n\nThis API can be used by WebView to apply the appropriate transform\non its rendering.\n\nChange-Id: I79aa39a29805f462fb08226370328815e74bdc52\n"
    },
    {
      "commit": "eb07af687319a0f52c219c3c0c1b73162fce9d04",
      "tree": "a27dad9873cd7cab7217ff45fd5c26a4a8885ff0",
      "parents": [
        "a0a312225ad56b858f37c2a428e9b8a7140907c4"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Oct 12 18:40:36 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Oct 12 18:40:36 2010 -0700"
      },
      "message": "Optimize layer clears.\n\nDon\u0027t clear the entire texture when we use textures that are bigger\nthan the layer itself. This will save time during the glClear() calls.\n\nChange-Id: I06f3259ba62affb3708ba69ea41418832c7e1a65\n"
    },
    {
      "commit": "e91080581f467d55913a8c5ab53dedc2dab2e5b6",
      "tree": "ef4bfc31fac147b8a36b3c3d6593726106825032",
      "parents": [
        "1f114a55b5eaaa81bd302c9ad851362512b61e2f"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Oct 12 18:15:42 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Oct 12 18:15:42 2010 -0700"
      },
      "message": "Tweak layers caching for better performance in Launcher.\n\nChange-Id: Ia6e67699d98f69c8a93385b3ecbdd814c7b16921\n"
    },
    {
      "commit": "4bb942083a0d4db746adf95349108dd8ef842e32",
      "tree": "7707bc9551f3db4ad0561c30c73293e4a0edfbf2",
      "parents": [
        "5a3b8e698e276839e502dcf41894b56ad59695c3"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Oct 12 15:59:26 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Oct 12 15:59:26 2010 -0700"
      },
      "message": "Optimize 9patch rendering.\n\nThis change detects empty quads in 9patches and removes them from\nthe mesh to avoid unnecessary blending.\n\nChange-Id: I4500566fb4cb6845d64dcb59b522c0be7a0ec704\n"
    },
    {
      "commit": "c00972bb162779e52d1b0d8f662a9f6033bf9182",
      "tree": "8ccf4a198e231998bc3c2eb75d3fc4d17cb0b2b3",
      "parents": [
        "425c305a535d8c5a9082685523ba46d06199e543"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Oct 12 11:31:07 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Oct 12 11:31:07 2010 -0700"
      },
      "message": "Don\u0027t recreate a new texture every time we draw a layer.\n\nChange-Id: I3c28aff5acffc7c6f1ac74805869725426c62d28\n"
    },
    {
      "commit": "dbc26d2ba13f80a7590c57de2d80530d96832969",
      "tree": "1883c28948243ec8906c594009c4a4208b132546",
      "parents": [
        "707b2f78ccaa09965d7e030fda3a883ce9b75ea8"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Oct 11 17:58:29 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Oct 11 17:58:29 2010 -0700"
      },
      "message": "Don\u0027t draw fully transparent views/primitives.\n\nChange-Id: Icd7d8ef1f57b51a24faf32f7004125e6300d4fdc\n"
    },
    {
      "commit": "707b2f78ccaa09965d7e030fda3a883ce9b75ea8",
      "tree": "0503326cbed34fe219dc32508456b5ce9bd03340",
      "parents": [
        "7537f856f9076a84db04d8de447f6527b67166fd"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Oct 11 16:34:59 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Oct 11 16:34:59 2010 -0700"
      },
      "message": "Optimize GLSL shaders.\n\nChange-Id: I9a5e01bced63d8da0c61330a543a2b805388a59d\n"
    },
    {
      "commit": "2728f961614a385df1f056fc24803a9f65c90fab",
      "tree": "c09ff5c42f949f4b9e76e197108cc5a506113ca3",
      "parents": [
        "8550c4c7b5952b7a4e1e0ede95c9492d03099a13"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Oct 08 18:36:15 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Oct 08 18:36:57 2010 -0700"
      },
      "message": "Don\u0027t update 9patches on every frame.\n\nChange-Id: I7ffb2365f83e0453e7d0a0cdcb3fc9308b305238\n"
    },
    {
      "commit": "8550c4c7b5952b7a4e1e0ede95c9492d03099a13",
      "tree": "3f2bccdd02bcf390eac98749475aad4ead1da1e4",
      "parents": [
        "ecd31740a00f8fb07090209cd979257c38cbcc92"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Oct 08 15:49:53 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Oct 08 15:49:53 2010 -0700"
      },
      "message": "Better cache for layers, reduce memory usage and increase framerate.\n\nChange-Id: I5ff864a361db4791bd5ff6be716f7ce692ef572d\n"
    },
    {
      "commit": "6b7bd24659fb175fe1f0e97c86c18969918b496a",
      "tree": "7f72a7811783f52871bdb49c702ef1247ce9d3a2",
      "parents": [
        "e3095e0c1e2a4a4f34f741aa386eae56536ca5aa"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Oct 06 19:49:23 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Oct 06 19:49:23 2010 -0700"
      },
      "message": "Don\u0027t clear the framebuffer when not needed."
    },
    {
      "commit": "eb99356a0548684a501766e6a524529ab93304c8",
      "tree": "7beb40beea2f12944057cd025ca8b212d3a01855",
      "parents": [
        "7adaf3d1aa18c7e521f7154e545fe52d329763c3"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Oct 05 18:14:38 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Oct 05 18:14:38 2010 -0700"
      },
      "message": "Optimize saveLayer() when the clip flag is set.\n\nThis speeds up applications, especially Launcher."
    },
    {
      "commit": "bdb801ca993bcccbf2a4c2401d1720c3fa523777",
      "tree": "a4b650bf412f692080aa3ecaedea39ac4816d6c4",
      "parents": [
        "11fd654a90359043e17ac78c1a3d6578c38b5c42"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Oct 04 17:22:29 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Oct 04 17:22:29 2010 -0700"
      },
      "message": "Remove logs to reduce logcat spam.\n\nChange-Id: I5fc295b05b5d82bb86827b88e94dd51e8bcdc7d3\n"
    },
    {
      "commit": "e8cb9c14309b0f01c0159efdf9a7198f44a62642",
      "tree": "4e4e2702c4db4fadc6161f62d5e34c36bfc83ccf",
      "parents": [
        "95930e13faac8c17dabfaa1478089baa772f091b"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Oct 04 14:14:11 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Oct 04 14:14:11 2010 -0700"
      },
      "message": "Apply bilinear filtering on text only when necessary.\n\nChange-Id: Ic903f4b5d30e9c92528c6291941896efe4729ee3\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": "4aa90573bbf86db0d33a3a790c5dbd0d93b95cfe",
      "tree": "65cedf6266b9f40b7227334f9e50d8d86f2340bf",
      "parents": [
        "cc64c5dbfbf11f513f60a82ee590f62dfb9a1565"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Sun Sep 26 18:40:37 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Sun Sep 26 18:40:37 2010 -0700"
      },
      "message": "Adding display lists to the GL renderer (checkpoint.)\n\nChange-Id: Iaa49757600a53b39369dbb23f8c3feab282518e6\n"
    },
    {
      "commit": "e2d345ea67e2960b37bfdc0fc8626d1bfa747404",
      "tree": "1c6aebf69921950237754ef7b8386a9856624e25",
      "parents": [
        "9a40babc62416259d18783ce8c03c00042ec317b"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Sep 24 18:39:22 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Sep 24 18:39:22 2010 -0700"
      },
      "message": "Add debug mode to measure performance.\n\nChange-Id: I9d4c84034dc200b99c8266165942a7cdbcb5c0c5\n"
    },
    {
      "commit": "38c85b907a478af96d71b9a5df5a2066b8475311",
      "tree": "03c8ffe517ff14b71fb24e29ca43c3eb482ba442",
      "parents": [
        "806de5b1c5f98d67b00f7ba6087faca3b9632845"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@android.com",
        "time": "Wed Sep 22 22:48:20 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@android.com",
        "time": "Wed Sep 22 22:51:12 2010 -0700"
      },
      "message": "Correctly initialize/refresh layers.\n\nChange-Id: Id8cdcf587b13098460f7d4aa1bd17708784d89bb\n"
    },
    {
      "commit": "e20ecbd12d26467754a7770d44bcce2ea92335ef",
      "tree": "129cc4cfc5a5fd38c4a3be2ae665fcc25033cf9e",
      "parents": [
        "29d8997bd43b7c4ad37fc3d6f91eaafa74913c88"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@android.com",
        "time": "Wed Sep 22 19:49:04 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@android.com",
        "time": "Wed Sep 22 19:49:04 2010 -0700"
      },
      "message": "Draw text decorations with lines instead of rectangles.\n\nChange-Id: Icd25c85c3a24da96a3d2f76f9477da6f87e0303c\n"
    },
    {
      "commit": "29d8997bd43b7c4ad37fc3d6f91eaafa74913c88",
      "tree": "2bc22f92798fdb17ac519d22ca3a3f7b84d328f8",
      "parents": [
        "8c749f87d29e1a363ddf9027c3a51753c612d510"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@android.com",
        "time": "Wed Sep 22 16:10:57 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@android.com",
        "time": "Wed Sep 22 16:44:49 2010 -0700"
      },
      "message": "Fix OpenGL errors in various places.\n\nChange-Id: I3a4e115d8fb13b6c443e65460d92987b16f2524c"
    },
    {
      "commit": "b5ab4173e0927e4668a45298c9900cd8007584e1",
      "tree": "e059836b7a463cad61aed46d8bd8942836018e7b",
      "parents": [
        "c95c8d6bf8fda5c4e8ebd0033b789be7868e6e07"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Sep 17 15:36:56 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Sep 17 15:36:56 2010 -0700"
      },
      "message": "Fix positioning of 1 pixel wide lines (esp. non AA lines.)\n\nChange-Id: Ic155cac72f351edae35dffdfbb236954f57ba7de\n"
    },
    {
      "commit": "c95c8d6bf8fda5c4e8ebd0033b789be7868e6e07",
      "tree": "3f5a4ca860841db0de4678065d6f392590749780",
      "parents": [
        "31529ff7918ce891fba9a660d0a861eb313ea554"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Sep 17 15:31:32 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Sep 17 15:31:32 2010 -0700"
      },
      "message": "Add support for non AA lines.\n\nChange-Id: Id5200e94815404d62760437d0d2dbb0a9276c700\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": "bf434114cbf55b216fdc76fc8d65a75e84c9dab5",
      "tree": "5ad5f0411e6b804c264bed8927a9786a1942719c",
      "parents": [
        "b025b9c8b4efefadb01937db61a1f8ee7d2452bf"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Sep 16 14:40:17 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Sep 16 14:40:17 2010 -0700"
      },
      "message": "Snap layer bounds to pixel boundaries.\n\nChange-Id: I272ceebf469a119f01ea9d73cdd68519afdffa99\n"
    },
    {
      "commit": "b025b9c8b4efefadb01937db61a1f8ee7d2452bf",
      "tree": "dabed85e1e6b4aad2363925c779b783855b02d7e",
      "parents": [
        "857d7cf80ee37fc3b1d55ecfa4c27029672f5114"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Sep 16 14:16:48 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Sep 16 14:16:48 2010 -0700"
      },
      "message": "Better error handling in the OpenGL renderer.\n\nAdd a glGetError() check on every frame\nDon\u0027t attempt to create textures larger than the maximum size allowed\n\nChange-Id: Iee4afae16089406dbe8bf10fc93b674f1271a0ca\n"
    },
    {
      "commit": "6820ac8b14b4558f5d8b833dde80895306a3e137",
      "tree": "b90f253c05f20ae8a36c7bdc49147d447b75e7d5",
      "parents": [
        "9322775014432ed6c87c864e98fe482f879ff233"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Sep 15 18:11:50 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Sep 15 18:11:50 2010 -0700"
      },
      "message": "Fix 9patch rendering.\n\nChange-Id: Ic4c18ff483cca95fbabcb10843f7714efe488adb\n"
    },
    {
      "commit": "87a76578f76f4a6bceb187da6b7a01899ca0d85a",
      "tree": "853825c9d863f06c7ace42e2fd5da3ce814c92a5",
      "parents": [
        "e8c1c539ca18f8aeb74c3a3710893516e2c1be7c"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Sep 13 18:11:21 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Sep 13 18:13:52 2010 -0700"
      },
      "message": "Docs updates.\n\nChange-Id: Iff395e1c6d81a484a2c4ad6e88357c0134971b78\n"
    },
    {
      "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": "81ab046a1127bd2ad397e6d1c6f8021b202a97ff",
      "tree": "136ad86c1a50582a4e3e79026bfd932df5e94404",
      "parents": [
        "8411f336c786379c5a03106e9ed3bc8622b579a5"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Sep 13 17:32:34 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Sep 13 17:32:34 2010 -0700"
      },
      "message": "Forgot the return value...\n\nChange-Id: Iccf369a613c1cf83f3e948460c567291b084fad2\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": "2bffd268f135df8308c9e67af110525a5c463424",
      "tree": "4af48402f57aeb87e7d9765c5b739825af3fcb70",
      "parents": [
        "eb851c4ecf38e3e2935fcf81c75c2ceadc2728e1"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Sun Sep 12 17:40:02 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Sun Sep 12 17:59:13 2010 -0700"
      },
      "message": "Fix text rendering issue with text scaling.\n\nChange-Id: I1f3ae40025697e8f8ca0616ee6550fe215cadcc8\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": "d90f23e24a4d1768d5a7ed0e7072e67af6330a45",
      "tree": "5e6eb8954298a8c081b1e435eb7cc657b8a8b1b6",
      "parents": [
        "183f17e7eb2f51be24489e7b1bd3e2e5e4bc579a"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Sep 09 11:47:54 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Sep 09 11:47:54 2010 -0700"
      },
      "message": "Do not convert 8888 bitmaps to 565 when doing a copy.\n\nBug #2988077\nThis change keeps the 8888 format for new bitmaps and also keeps,\nwhen possible, the opaque flag.\n\nChange-Id: Ia61f2e89936916b329212a4c59a7d815c329f84e\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": "b45c0c9774bd19a9dbe77d149abae4e124b08bf6",
      "tree": "809e63c596802906242c982ed67f463481b57230",
      "parents": [
        "c70bd1921bbc4046d0caf84959e5f1c2d526769a"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Aug 26 20:35:23 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Aug 27 11:31:24 2010 -0700"
      },
      "message": "Apply gamma correction to font rendering.\n\nChange-Id: I1b05f40e356221b2a5eb9400e67d77ecd98ed6c4\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": "a80d32f7b69aa37026ab99e4ade1ad86dae76a81",
      "tree": "208c28a7cef27756daa88030f4c71ca2a721f41a",
      "parents": [
        "29378192f7ac4162d54fea4e34fddd42fd1f00d2"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Aug 20 18:42:37 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Aug 20 18:42:37 2010 -0700"
      },
      "message": "Add support for textScaleX.\n\nThis will not look great because we render fonts using bitmaps, not\npaths.\n\nChange-Id: I01b87b81bfbdbfa28460a5d5309d38e2a65e77c4\n"
    },
    {
      "commit": "8b55f377655d13a445b08a0a8ed09b6e95c752b0",
      "tree": "f21ba0cf47cdd5c32f5d84c9774f2a5ff0b4530f",
      "parents": [
        "5aaeaffdce904dae6e3eaf566dccf52611dffafa"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Aug 18 17:10:07 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Aug 18 17:10:07 2010 -0700"
      },
      "message": "Fix drawing issues with layers.\n\nPrior to this change layers would clip their content incorrectly. They would\nalso not apply alpha properly.\n\nChange-Id: Id7b3aaa7dbdc51de68fe050e64458f68e40503fd\n"
    },
    {
      "commit": "1f8c9602eeff0a35f8af70bd3fdcd770f0127775",
      "tree": "05042473a06c2db63bc3d12be1dddeb1b64a32ef",
      "parents": [
        "756879836bd3acb9fd500ca0aefebe7579567148"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Aug 18 12:57:31 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Aug 18 12:57:31 2010 -0700"
      },
      "message": "Fix the build.\n\nChange-Id: I8bd418ba21e3e3f68b793030398d1a5e933dfb19\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": "8fb954263dd2f918ad339045cc6d82e346515599",
      "tree": "6cc5874902c757432432f26cec37f1fdcbab0e4a",
      "parents": [
        "31d5becb7fe2981381a6c16afe6bb357416f4c3a"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Aug 17 18:38:51 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Aug 17 18:40:21 2010 -0700"
      },
      "message": "Fix save()/restore() issues in the OpenGL renderer.\n\nThe save stack now behaves exactly like in Skia.\n\nChange-Id: If7e642f41f2c8f693f6e8c26cba81507d466562e\n"
    },
    {
      "commit": "1d83e1981c8b89da93dff37a4f8b2b1ad8480b44",
      "tree": "84e1106e4f55d13b9398658f6e639b18f4a9c9c1",
      "parents": [
        "0a41749953f35d33f61b3119e3161a82bb5fa59e"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Aug 17 11:37:00 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Aug 17 11:37:00 2010 -0700"
      },
      "message": "Correctly set the viewport in layers.\n\nBug #2919295\n\nChange-Id: I16ce79ab0d5747cb01c6c1abe531da3dfd93fb54\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": "959c91f7f7b4f921d341264f5b4ef54e702a0df0",
      "tree": "0b6e7264bf5680cb2dea83cf587449fde9802034",
      "parents": [
        "943fbb4f4006273ae5983da42143d721ae05dfd4"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Aug 11 19:35:53 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Aug 11 19:35:53 2010 -0700"
      },
      "message": "Bunch of fixes.\n\nFixes memory leak, fixes multiple context support, fix 3d transforms.\n\nChange-Id: I7462cfbc57857dbd4de4e76b9d4cba58a1bce77b\n"
    },
    {
      "commit": "a674ab74e359ac73b4c4dd6b1a3a771836ac7e40",
      "tree": "d8797f1491f1486bf6cfedca446ccf845af4dc95",
      "parents": [
        "7a70374606499f8dbc65fd295b26672e95426595"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Aug 10 17:26:42 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Aug 10 17:26:42 2010 -0700"
      },
      "message": "Add support for text underline and strikethru.\n\nChange-Id: I3a0e6643d7cafbdd06d9a908c8cf9347dcaba146\n"
    },
    {
      "commit": "61c8c9c5b2006d18e9310b6521c65b36ffe75ce4",
      "tree": "f2a792387a3177a2e7a25290ec48bd79c62ef3e6",
      "parents": [
        "8cc82c6f4802937309dce6cba310e31358cdf6bf"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Aug 09 20:48:09 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Aug 10 12:22:01 2010 -0700"
      },
      "message": "Fix tons of bugs and add new text rendering support.\n\nChange-Id: I326c66b10784006f6df2f12d38e120cef94cd0d7\n"
    },
    {
      "commit": "9cccc2b9bdd4850a3f9679569aaec3ab98477a5d",
      "tree": "365c32954d65cf037c948ee92b14ed30243319f5",
      "parents": [
        "de0547c07a65b59d5330588cdd8b1e410a613e9c"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@android.com",
        "time": "Sat Aug 07 23:46:15 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@android.com",
        "time": "Sat Aug 07 23:48:29 2010 -0700"
      },
      "message": "Enforce maximum texture size.\n\nWhen an app tries to render a bitmap or path larger than the GPU\u0027s maximum\ntexture size, the drawing command is ignored and a warning is logged. This\nchange also makes texture drawing more robust by catching potential errors\nduring texture creation.\n\nThis change also fixes a crash in the FontRenderer. The destructor would\nsometimes try to free an uninitialized array.\n\nChange-Id: I95ae0939c52192d97b340aa02417bf6d0c962c57\n"
    },
    {
      "commit": "22158e139a3d6c6a9787ca0de224e9368f643284",
      "tree": "fac1da337f6fd11ef0761bd0a776af7f184b0ec7",
      "parents": [
        "ff0f973442d22ba6bb1231fb6e97e5f3051a7f48"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Aug 06 11:18:34 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Aug 06 11:18:34 2010 -0700"
      },
      "message": "Automatically cleanup textures that don\u0027t fit in the cache.\n\nChange-Id: I4f29ed96ea11118b391fb957e1e4d1b8fcef1537\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": "b82da65cb1601be504241f36778395cd6cb9f87b",
      "tree": "19fc51fb41e806817a4895212b8111fa9131af04",
      "parents": [
        "b422107d1d599e5d43cc47cd7e1342976b6b5b1a"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Jul 30 11:36:12 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Jul 30 11:40:21 2010 -0700"
      },
      "message": "Fix improper clipping after a save()\n\nChange-Id: I13426a67f20d77e2710bd500d82884098f4be97c\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": "65ef909776c03417d8b597738da54ca211e37e4f",
      "tree": "01ca487c074d00d87f3c6662a5d3f123da532dfe",
      "parents": [
        "b46507f6b84f0cf5a7f56cc3bf3a19feb368eecb"
      ],
      "author": {
        "name": "Alex Sakhartchouk",
        "email": "alexst@google.com",
        "time": "Mon Jul 26 11:09:33 2010 -0700"
      },
      "committer": {
        "name": "Alex Sakhartchouk",
        "email": "alexst@google.com",
        "time": "Mon Jul 26 12:11:18 2010 -0700"
      },
      "message": "When font cache still has empty space,\nprecache some commonly used characters to reduce studder.\n\nChange-Id: I1f66f57482c4a025672dfd1d8ecaf2b9736cd9a0\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": "09147fbdc8206a0cac78bfe9083e7e15b3c5689c",
      "tree": "16f155fd722b6fba13508a09c29b9e8ea5adfdd3",
      "parents": [
        "612f8da2bc994043f26a278a9b1c2b681eabc4c9"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jul 22 13:08:20 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jul 22 13:08:20 2010 -0700"
      },
      "message": "Add support for text culling.\n\nChange-Id: Ibf0adacdc5c64d40a8000b21d7cb0797d63efe29\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": "0b9db91c3dc8007b47c8fd4fb9dd85be97201a88",
      "tree": "f8de431ac029c79d581e54b8ba52afe8a90e3e6b",
      "parents": [
        "8445ca6c3ba9b7cee6d20f5919e3b3ba8e6b8c96"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Jul 09 18:53:25 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Jul 09 18:53:25 2010 -0700"
      },
      "message": "Remove math from the vertex shader.\n\nChange-Id: I02847a60a8734bf8b3d29ec12e76297795095e38\n"
    },
    {
      "commit": "16202fc9745e9b11db089ebc8f40119d13732016",
      "tree": "1765a6146b9a4fcaf9513e1b9bc851e47fdc76b3",
      "parents": [
        "82164ad543b4eb6c11937b2a81891443317709cc"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Jul 09 16:13:28 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Jul 09 16:13:28 2010 -0700"
      },
      "message": "Fix alpha blending and improve fragment shaders performance.\n\nChange-Id: Ib74f6941d25ca6f6a41708e541174eaa7e8d9bc2\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": "f18fd99b5c182329cd8936a9611f0103d8ece44a",
      "tree": "c32def6bcb82e2a2019a5a49744dfa34c94d8d81",
      "parents": [
        "132f22590a3cd27ce15a705bdb481675e8fd02bc"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jul 08 11:45:51 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jul 08 11:45:51 2010 -0700"
      },
      "message": "Create FBOs in LayerCache.\n\nThis moves a bit of code away from OpenGLRenderer and matches\nwhat happens with the TextureCache.\n\nChange-Id: I3c67f54f83d7240770daa015861c0e75a1dd8c42\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": "6c81893c626499e58c8eeb20d6c35ec4e1ce808b",
      "tree": "d4926e6c4952de9aec539f1b44ed0380779e12d0",
      "parents": [
        "3038f47d1c716f9385cf0befc08e708c65f069bb"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jul 07 15:15:32 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jul 07 15:15:32 2010 -0700"
      },
      "message": "Simpler way to deal with the FBO multi-cache.\n\nThis change removes the need for the SortedList and instead just\nadd a generated id to each FBO stored in the cache. This is an\nartificial way to store several FBOs with the same dimensions.\n\nChange-Id: I9638364e9bdc0f2391261937a0c86096f20505bf\n"
    },
    {
      "commit": "5f0c6a483900f3989f4d2a8f913cf5b6a9777d03",
      "tree": "cd0898b027dab942753874a070c403ca9b88e4aa",
      "parents": [
        "c832baa107f36740e462c83e7525ba2e9f01f086"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jul 07 13:06:26 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jul 07 13:06:26 2010 -0700"
      },
      "message": "Optimize FBO cache.\n\nThis change introduces a new generational cache called GenerationMultiCache\nthat can store several values with the same key. This can be used to use\nmultiple layers of the same size at the same time, without recreating them\nover and over again.\n\nChange-Id: I425466a20908b862c5f464a0f9e582ec18cbd7ac\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": "7d139ba2c331f11e9b485753cc727a0ff202f2a4",
      "tree": "7d61a0d1cacc78c0d3053d31d85c13a5aa3e3326",
      "parents": [
        "d73ddd2c9d459e363c07a8f5e47995b52b4ae049"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@android.com",
        "time": "Fri Jul 02 11:20:34 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@android.com",
        "time": "Fri Jul 02 11:20:34 2010 -0700"
      },
      "message": "Remove extra leftover logs and use uint32_t instead of unsigned int.\n\nChange-Id: I944f82fe3255de38dc04048cc8bd861f578f01a7\n"
    },
    {
      "commit": "121e2242565d5f09ad83a2d33ecd2225838802c5",
      "tree": "9c87b01a24909f832e00e9448fc2feb8241e41d1",
      "parents": [
        "37f447338e4633461253539e62c9b8eae04de3b3"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jul 01 18:26:52 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jul 01 18:26:52 2010 -0700"
      },
      "message": "Track the size in memory of the texture cache.\n\nThe texture cache was previously checking the number of stored textures. This was\nnot very useful as this could easily lead to an abuse of memory. The new cache\ninstead tracks the total size occupied in RAM by the cached textures. When a new\ntexture is generated, older textures are kicked out as needed.\n\nChange-Id: Ib27142f4a018d5bf84774c1fb6f45a67a85f20bc\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"
    }
  ],
  "next": "bb9524b6bdddc7ac77d8628daa8b366b8a7be4a4"
}
