)]}'
{
  "log": [
    {
      "commit": "527a3aace1dd72432c2e0472a570e030ad04bf16",
      "tree": "24f8cca71f0377a88b35fbe060a3247040b3de9f",
      "parents": [
        "8d4c23b9c32f8c0328ebca538bb801716fe4478a"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Mar 04 10:19:31 2013 -0800"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Apr 15 13:53:02 2013 -0700"
      },
      "message": "Draw Operation merging\n\nMerge simple bitmap draw operations and text operations to avoid\nissuing individual gl draws for each operation. Merging other ops to\nbe done eventually.\n\nThe methods are different - the bitmap merging generates a single\nmesh for reused, unclipped images (esp. repeated images in a listview)\n\nThe text approach queries just defers the normal font rendering until\nthe last drawText in the sequence that can share the same shader.\n\nPatches are sorted and merged, but don\u0027t yet have a multiDraw\nimplementation. For now, the pretending-to-merge gives better sorting\nbehavior by keeping similar patches together.\n\nChange-Id: Ic300cdab0a53814cf7b09c58bf54b1bf0f58ccd6\n"
    },
    {
      "commit": "cf51a4199835e9604aa4c8b3854306f8fbabbf33",
      "tree": "9f5095c3243d0e5dc367c613eee01db80472f1a0",
      "parents": [
        "f8a67f4f5dd4c5499a6e7148331f0286e31203ec"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Apr 08 19:40:31 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Apr 11 14:07:34 2013 -0700"
      },
      "message": "Introduce PixelBuffer API to enable PBOs\n\nPBOs (Pixel Buffer Objects) can be used on OpenGL ES 3.0 to perform\nasynchronous texture uploads to free up the CPU. This change does not\nenable the use of PBOs unless a specific property is set (Adreno drivers\nhave issues with PBOs at the moment, Mali drivers work just fine.)\n\nThis change also cleans up Font/FontRenderer a little bit and improves\nperformance of drop shadows generations by using memcpy() instead of\na manual byte-by-byte copy.\n\nOn GL ES 2.0 devices, or when PBOs are disabled, a PixelBuffer instance\nbehaves like a simple byte array. The extra APIs introduced for PBOs\n(map/unmap and bind/unbind) are pretty much no-ops for CPU pixel\nbuffers and won\u0027t introduce any significant overhead.\n\nThis change also fixes a bug with text drop shadows: if the drop\nshadow is larger than the max texture size, the renderer would leave\nthe GL context in a bad state and generate 0x501 errors. This change\nsimply skips drop shadows if they are too large.\n\nChange-Id: I2700aadb0c6093431dc5dee3d587d689190c4e23\n"
    },
    {
      "commit": "0908764b2b3cf5075df4178a5f0a8547dcb7b317",
      "tree": "c69db8d815ad1d0b0172e7a20827254627800dad",
      "parents": [
        "df1dc28ba0c63b195016ad0453fc58025ee82acb"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Apr 04 12:27:54 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Apr 04 12:27:54 2013 -0700"
      },
      "message": "First OpenGL ES 3.0 based optimization\n\nThis change uses a new OpenGL ES 3.0 feature to upload less data when\nthe font cache needs to be update. This can result in significant\nperformance improvements on device with large textures or with locales\nthat use a lot of glyphs (CJK for instance.)\n\nThis change also fixes various unpack alignment issues. The unpack\nalignment, as well as the unpack row length, is not texture specific\nbut a global state that affect all glTex/SubImage2D calls. Some of\nthem were missing the appropriate glPixelStorei() call. This could\nresult in corrupted textures.\n\nChange-Id: Iefb429d4d0d0b4e0faeadf27daafee6d30a21d85\n"
    },
    {
      "commit": "257ae3502cfad43df681b1783528d645bdabc63f",
      "tree": "e257e21ddf04c544b0dbb6467d2d10a7c659ac1d",
      "parents": [
        "10c4d99f04a399c78529d0ae66c1785b26a125c3"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Mar 20 16:31:12 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Mar 20 16:35:05 2013 -0700"
      },
      "message": "Optimize text GL setup\n\nOnly performs the GL setup steps when at least one glyph is drawn.\nThis change also skips various draw operations when the specified\npaint draws with alpha \u003d 0.\n\nChange-Id: I9eda148b0503acffc552ee19196f5d52e958a1a2\n"
    },
    {
      "commit": "661a87ec28a49458f1faf533783abf2ab9927cab",
      "tree": "3a38408b317cfd4ee437ee27714262acc5490ad8",
      "parents": [
        "115096f50a560e64a7f95d37686d4861042c7aeb"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Mar 19 15:24:36 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Mar 19 17:24:13 2013 -0700"
      },
      "message": "Reduce number of glDraw calls when drawing text\n\nThis change moves the mesh buffer from FontRenderer to CacheTexture\nto help reduce the number of texture binds and glDraw calls when\ndrawing text that spans across multiple textures.\n\nChange-Id: I7de574d88313ca3672879ca878c253ff5f131fc1\n"
    },
    {
      "commit": "115096f50a560e64a7f95d37686d4861042c7aeb",
      "tree": "95f72f39e1f1275bf9c51dbda3c04774dc48d3fa",
      "parents": [
        "bbb4e03ad4e86e79c9b51cbb18c563a5a79cf837"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Mar 19 11:32:41 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Mar 19 11:32:41 2013 -0700"
      },
      "message": "Minimize texture binds when drawing text\n\nWhen several CacheTextures are used to draw text, sort the\ndraw batches by texture ID to minimize state changes in the\ndriver.\n\nThis change also tweaks the font cache size and renames\na property that was too long to be set using setprop.\n\nChange-Id: I0a36dfffe58c9e75dd7384592d3343c192d042b1\n"
    },
    {
      "commit": "6e2004089305cf2cd958b52b234459a49a4e5c83",
      "tree": "e5cd875ac22fc80f9f0098a1c910251d672d50a9",
      "parents": [
        "b09f1471262c3e629daacbc319bcefc2d621a484"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Mar 08 11:28:22 2013 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Mar 08 11:28:22 2013 -0800"
      },
      "message": "Move blur code from FontRenderer to utils/Blur.cpp\n\nChange-Id: I2cebbfbcb722ed4b37e54ffbf8b53bb92ad0c964\n"
    },
    {
      "commit": "0b58a3deab66c30a8d35072e55aac6279dd367cc",
      "tree": "2c72a32f0e9b51e2aab1b819a6adfd9a5cc46178",
      "parents": [
        "3b753829ae858d424fe109f714745379a6daf455"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Mar 05 12:16:27 2013 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Mar 05 12:16:27 2013 -0800"
      },
      "message": "Make glyph copies a little more cache friendly\n\nChange-Id: Ie21b7079cc5d3ea67a03597c57842636e4afe143\n"
    },
    {
      "commit": "a4adcf0239039eb8f005be252409901c41b28839",
      "tree": "bb339ae27217db42e4ef0de743b07ca138ef335a",
      "parents": [
        "aaa46155ec80f02b37ec858408d7dabbf9bc289a"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Feb 28 12:15:35 2013 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Feb 28 16:04:48 2013 -0800"
      },
      "message": "Support 3D rotations when drawing text\n\nIf a perspective transform is set on the Canvas, drawText() should\nnot attempt to rasterize glyphs in screen space. This change uses\nthe old behavior instead (i.e. rasterize the glyphs at the native\nfont size and apply the transform on the resulting mesh.)\n\nThis change also adds an optimization: empty glyphs (spaces) do\nnot generate vertices anymore. This saves a lot of vertices in text\nheavy applications such as Gmail.\n\nChange-Id: Ib531384163f5165b5785501612a7b1474f3ff599\n"
    },
    {
      "commit": "dd8697c095272f19ddad214834a490b00f11a477",
      "tree": "95c51da6955eca5a40fd692103fba7bee8711219",
      "parents": [
        "786525e8ea49c32b54eda5c260e125f5f2cf80e7"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Feb 22 10:41:36 2013 -0800"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Feb 22 16:16:16 2013 -0800"
      },
      "message": "Avoid double blur\n\nbug:8204062\n\nAvoids incorrectly blurring with RenderScript after a C++ blur\n\nAdditionally, avoids draw/blurring if the input text has empty bounds\n\nChange-Id: Ibbaf74800fff7a6e4cda3aa24286b90e7aef589d\n"
    },
    {
      "commit": "08d160a366932aec170a115a1edb3bb5ac4e3a4e",
      "tree": "01cf849d4c08344f8d08ba9d92efea80ca0d54c3",
      "parents": [
        "3c394a3bec3c0467d7e9f5c8ceda0501e2e61f04",
        "7a60c43d874bd047ea4b93b94c9b8771ea5739cc"
      ],
      "author": {
        "name": "Ben Cheng",
        "email": "bccheng@google.com",
        "time": "Wed Feb 20 14:39:35 2013 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Feb 20 14:39:35 2013 -0800"
      },
      "message": "am 7a60c43d: Merge \"Use free for memory chunks allocated through memalign.\"\n\n* commit \u00277a60c43d874bd047ea4b93b94c9b8771ea5739cc\u0027:\n  Use free for memory chunks allocated through memalign.\n"
    },
    {
      "commit": "15641a6181cdaac2aadf07585de66483b4b7ae6b",
      "tree": "9921ccaec2a24f89e49fee585cbb3c082657642b",
      "parents": [
        "404f87e54057bd09b9a504066d7d573db1e11eb3"
      ],
      "author": {
        "name": "Ben Cheng",
        "email": "bccheng@google.com",
        "time": "Wed Feb 20 13:20:03 2013 -0800"
      },
      "committer": {
        "name": "Ben Cheng",
        "email": "bccheng@google.com",
        "time": "Wed Feb 20 13:20:03 2013 -0800"
      },
      "message": "Use free for memory chunks allocated through memalign.\n\nBUG: 8234423\nChange-Id: Ic4100a780908c94540722cc4af5f73f4940431b4\n"
    },
    {
      "commit": "0229d0818c8f08753a0df583798bbac19f67a4c4",
      "tree": "8de3eaf093bccbccdc2ef488723fc047732e93f6",
      "parents": [
        "b5dc90258087f4ed12d0ca0e7a90788540d54126",
        "805a6fe7b1417640ccaf7914171cb65515b6ab39"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Feb 13 16:45:46 2013 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Feb 13 16:45:46 2013 -0800"
      },
      "message": "am 805a6fe7: Merge \"Revert \"Revert \"Use RenderScript for large text blurs\"\"\"\n\n# Via Android (Google) Code Review (1) and Chris Craik (1)\n* commit \u0027805a6fe7b1417640ccaf7914171cb65515b6ab39\u0027:\n  Revert \"Revert \"Use RenderScript for large text blurs\"\"\n"
    },
    {
      "commit": "f2d8ccc15d7272b3416f73605c1f31d1d346bd40",
      "tree": "de40afaf0e04bd78687f4ac166190b17e300a6a6",
      "parents": [
        "a7d72dfded3437e05c303dc40d61248022eb048b"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Feb 13 16:14:17 2013 -0800"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Feb 13 16:40:02 2013 -0800"
      },
      "message": "Revert \"Revert \"Use RenderScript for large text blurs\"\"\n\nThis reverts commit bf5703e52e3304246cbf0e73f6976f7d7312d238.\n\nChange-Id: Ic6f991277dec9e80a6fed93db91499726b30ab2a\n"
    },
    {
      "commit": "bf5703e52e3304246cbf0e73f6976f7d7312d238",
      "tree": "81ef6382317512aa2c068e99b35477ca61449b60",
      "parents": [
        "3f76e65d251ead65fe8ff98e3bd4c7623fbaac07"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Feb 13 19:47:24 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Feb 13 19:47:24 2013 +0000"
      },
      "message": "Revert \"Use RenderScript for large text blurs\"\n\nThis reverts commit 3f76e65d251ead65fe8ff98e3bd4c7623fbaac07\n\nChange-Id: Ia81cd485e5ca696bb284c419dc8a1d2f3247100e\n"
    },
    {
      "commit": "7c1a49f5f5ed6613d736464bf5001b777e89ced2",
      "tree": "c6726264bde03f4c5957876921d4b15a835b2c71",
      "parents": [
        "d04892d207d50378356feef181ac4e4eff9652d7"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Feb 13 10:25:12 2013 -0800"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Feb 13 10:50:20 2013 -0800"
      },
      "message": "Revert \"Merge remote-tracking branch \u0027goog/master-chromium\u0027 into \u0027goog/master\u0027\" DO NOT MERGE\n\nThis reverts commit 6c0307dd0aefe9a08794b155fc03ee60ebd14f25, reversing\nchanges made to a2cd828b749c444d55c2c41c7dbb85088ff94b9f.\n\nConflicts:\n\tpackages/SystemUI/res/values-sv/strings.xml\n\nChange-Id: Ia178efe8b14751583d47b2826bfe3d3d5463dd2e\n"
    },
    {
      "commit": "3f76e65d251ead65fe8ff98e3bd4c7623fbaac07",
      "tree": "b8dfc636012f670aba6a348340ae12770ab63372",
      "parents": [
        "d04892d207d50378356feef181ac4e4eff9652d7"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Nov 14 16:11:10 2012 -0800"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue Feb 12 17:45:28 2013 -0800"
      },
      "message": "Use RenderScript for large text blurs\n\nStill fall back to simple path for small tasks\n\nChange-Id: I492f1b3f7d6fec1738f3e45cbfb15864bd23a392\n"
    },
    {
      "commit": "23e500d168e8d649305445f6c1d2b49d8d2c00fd",
      "tree": "788e18e8fc63422b8cb20ea2b00c0ab73114d523",
      "parents": [
        "0984780bc7aed76018b9f88c0d9c3ce300bde39a",
        "6c0307dd0aefe9a08794b155fc03ee60ebd14f25"
      ],
      "author": {
        "name": "Derek Sollenberger",
        "email": "djsollen@google.com",
        "time": "Wed Feb 06 12:57:37 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Feb 06 12:57:38 2013 +0000"
      },
      "message": "Merge \"Merge remote-tracking branch \u0027goog/master-chromium\u0027 into \u0027goog/master\u0027\""
    },
    {
      "commit": "b969a0de65730b071d846f8302e751e2637e6dbe",
      "tree": "d49fd8cc93d96c54e991359e375c093882734909",
      "parents": [
        "15a4620b18412d81c1f9102cfc85777dece41a8b"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Feb 05 14:38:40 2013 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Feb 05 14:44:43 2013 -0800"
      },
      "message": "Add support for non-antialiased text\n\nChange-Id: I17c073955ab94abc9b409e5fcfbc675faa07c5ba\n"
    },
    {
      "commit": "19d4f1806a953b87435a2bb6fd8e738424e94003",
      "tree": "ab561da75ff49699432723e2904a89d5cda534e2",
      "parents": [
        "1a9853fef502ef4dac48476b8b588650ae5db4ce",
        "c88c60bed1fdf5b84cc16905c8743453203c19a5"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jan 08 17:38:15 2013 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jan 08 17:38:15 2013 -0800"
      },
      "message": "resolved conflicts for merge of c88c60be to master-chromium\n\nChange-Id: I3b4b42443312068e942aa779dfdc928afa7569fd\n"
    },
    {
      "commit": "e3a9b24b5e3f9b2058486814a6d27729e51ad466",
      "tree": "17830a6fd61c286854cebb07638d3c2dea6277cd",
      "parents": [
        "5b4628aeeaa0462cd99256d28b636c06b1845930"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jan 08 11:15:30 2013 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jan 08 15:21:42 2013 -0800"
      },
      "message": "Add plumbing for better text scaling\n\nFonts are now described by a transform matrix. This lead to switching\nfrom a vector to a hashmap. This change therefore adds new comparators\nand hash computations to Font.\n\nChange-Id: I2daffa7d6287c18554c606b8bfa06640d28b4530\n"
    },
    {
      "commit": "ca79cf69d09efa0c327e9b1237d86a119aea5da7",
      "tree": "0fd02203babacee45f23ba19f869f869f3de0f54",
      "parents": [
        "dbc8cee1d500702bc8b1a8cb6a6c0961ab4ae0ed"
      ],
      "author": {
        "name": "Derek Sollenberger",
        "email": "djsollen@google.com",
        "time": "Tue Aug 14 16:44:52 2012 -0400"
      },
      "committer": {
        "name": "Derek Sollenberger",
        "email": "djsollen@google.com",
        "time": "Wed Dec 12 15:28:54 2012 -0500"
      },
      "message": "Update framework to support r5967 of Skia.\n\nbug: 6906025\nChange-Id: Iefdb830ec3aa2ab3472c1c142484a7aa21788a15\n"
    },
    {
      "commit": "7bb3cfe1cca4016ce95d3ef059761f4bb2d668bb",
      "tree": "b9440572c9d1e7fb3d82c26996444c3fe2ba7fbe",
      "parents": [
        "c88047bf86fd83e5b0204d26b35776cad97ed877"
      ],
      "author": {
        "name": "Sangkyu Lee",
        "email": "geteuid@gmail.com",
        "time": "Fri Nov 16 00:03:17 2012 +0900"
      },
      "committer": {
        "name": "Sangkyu Lee",
        "email": "geteuid@gmail.com",
        "time": "Wed Nov 28 09:28:50 2012 +0900"
      },
      "message": "Another optimization of glyph cache uploads\n\nPreviously, cache textures were updated whenever mCurrentCacheTexuture was changed.\nSince updating cache textures needs glTexSubImage2D call, frequent changing\nof mCurrentCacheTexture (which can easily happen when an app uses lots of unique glyphs\neven with precaching) caused many glTexSubImage2D calls and bad framerates.\nThis patch optimized isssueDrawCommand function. Consequently, changing mCurrentCacheTexture doesn\u0027t\ncause glTexSubImage2D call any more and it will improve font rendering performance.\n\nChange-Id: Id19d959fa0e69eeb2a39f83a57e311d7394586b2\nSigned-off-by: Sangkyu Lee \u003cgeteuid@gmail.com\u003e\n"
    },
    {
      "commit": "cb4d6009576cf08195dc23f341a3f4939c0878bb",
      "tree": "234201781d7baaba35fc3baab178007ab03ea2df",
      "parents": [
        "fd3398c8bf25d8ec7ce813ebda431d67d734f268"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue Sep 25 12:00:29 2012 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Sep 26 14:38:11 2012 -0700"
      },
      "message": "Add stroke support to polygonal shape rendering\n\nbug:4419017\nbug:7230005\n\n- Adds support for stroke/strokeAndFill for shapes without joins\n- Fixes path-polygonization threshold calculation\n- Fixes rendering offset (now only used for points)\n- Several formatting fixes\n\nChange-Id: If72473dc881e45752e2ec212d0dcd1e3f97979ea\n"
    },
    {
      "commit": "b92d8f7979c29c7c09932578a11b2f8d6eec1d90",
      "tree": "b82c57bffc1eded3b6fd15d9a80019e3228c7f2d",
      "parents": [
        "7b770b0ec4e5a1b7f1b9601433fb35e55658453d"
      ],
      "author": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Fri Sep 21 08:40:46 2012 -0700"
      },
      "committer": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Sun Sep 23 12:16:02 2012 -0700"
      },
      "message": "Optimize glyph cache texture uploads\n\nOnly upload the changed area of the glyph cache, not the entire\nbitmap. Note that we can\u0027t do the full-on optimization here of copying a sub-rect\nof the bitmap because of GL ES 2 limitations, but we can at least copy the\nhorizontal stripe containing the dirty rect, which can still be a big\nsavings over uploading the entire bitmap.\n\nIssue #7158326 Bad framerates on MR1 (Mako, Manta, Prime)\n\nChange-Id: Iab38d53202650f757ead4658cf4287bdad2b3cb9\n"
    },
    {
      "commit": "8087246d9964b11de8ce116bc63b156faa4197e0",
      "tree": "3bd8fd6c3959ad57032beb2946207807cf890a0b",
      "parents": [
        "9b1204baf4740b4d443e72157dea98571cf84e1f"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Sep 04 16:42:01 2012 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Sep 04 16:44:17 2012 -0700"
      },
      "message": "Code cleanup in FontRenderer\n\nChange-Id: Ic788721c224a77f0a76f4cd6d9817b62e390a5a7\n"
    },
    {
      "commit": "9b1204baf4740b4d443e72157dea98571cf84e1f",
      "tree": "4b54be4565714748895ff253a8a86beda8e4d9f9",
      "parents": [
        "9f5dab3fc228fa11c32b483e6101ec086895a32b"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Sep 04 15:22:57 2012 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Sep 04 15:25:30 2012 -0700"
      },
      "message": "Small code cleanup in FontRenderer\n\nChange-Id: I09c00debe9b0b4f45b232cae402ed19bdaeabfe4\n"
    },
    {
      "commit": "9f5dab3fc228fa11c32b483e6101ec086895a32b",
      "tree": "f30e239e8396c08f7aa3a5009ca528af3d63591d",
      "parents": [
        "9fc4b356a4552336f661bf4dfaaa19a251194cdb"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Sep 04 12:55:44 2012 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Sep 04 12:55:44 2012 -0700"
      },
      "message": "Refactor FontRenderer.cpp\n\nFontRenderer.h defined several classes and structures that now live\nin the font/ folder. This will make the code easier to read and\nmaintain.\n\nChange-Id: I3dc044e9bde1d6515f8704f5c72462877d279fe2\n"
    },
    {
      "commit": "eb32a499194119b3783b86c925172df02e5d2685",
      "tree": "a6ec365abd68197beeffdb734055e0f57d334aca",
      "parents": [
        "00453e7a0182b50cf01e65c97650b526284fe084"
      ],
      "author": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Fri Aug 31 13:54:03 2012 -0700"
      },
      "committer": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Fri Aug 31 14:18:46 2012 -0700"
      },
      "message": "Paramaterize and adjust the glyph cache sizes\n\nAdd new parameters for the texture size used for the larger, fallback caches.\nBump up the defaults in some situations.\n\nIssue #7045164 Adjust cache sizes for manta\n\nChange-Id: I562118ce785d7f8b6e445178878672e9709d25f2\n"
    },
    {
      "commit": "f942cf10e04567f6b9456f6258e29c803b8bfb41",
      "tree": "6eafc4deeb64c506cb9b24236260047b83a032fa",
      "parents": [
        "71d7c3c628fbce04b8bdb60f127588ada00bae13"
      ],
      "author": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Thu Aug 30 09:06:46 2012 -0700"
      },
      "committer": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Thu Aug 30 09:14:44 2012 -0700"
      },
      "message": "Avoid thrashing the glyph cache during the precache phase\n\nIt is unlikely, but possible, to draw so many glyphs in a frame\n(especially of the glyphs are quite large) that the cache starts flushing\nitself to fit the later glyphs in. This causes unnecessary thrashing, because\nwhen we actually draw the frame, we will again need to flush to fit the\nearlier glyphs in, and then flush again to fit the later ones in.\n\nIt is better to avoid thrashing the cache at the precache phase, and wait\nuntil we actually draw the glyphs that do not fit to do any eviction of\nthe earlier glyphs.\n\nThis change simply notes when we are in the preaching phase, and avoids flushing\nthe cache when a glyph does not fit.\n\nIssue #7081725 avoid thrashing cache during DisplayList recording\n\nChange-Id: I230410ab5b478091b1032fa99dc1752acf868bbe\n"
    },
    {
      "commit": "5a3ec7113c99242fa0d0a328a0ec3892698203f1",
      "tree": "cf76b3c0a6c9dae71617741b597dcee8a51f6d2c",
      "parents": [
        "029675e5ad8737a8a097c17d216afb3f11f0b12c"
      ],
      "author": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Fri Aug 17 15:44:44 2012 -0700"
      },
      "committer": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Fri Aug 17 16:03:27 2012 -0700"
      },
      "message": "Fix glyph cropping bug\n\nGlyphs were being stored in the glyph cache incorrectly.\nThe second row of glyphs in any column were being positioned exactly\none pixel too high, causing the preceding glyph in that column to be\ncropped, resulting in the reported truncation in some glyphs.\n\nIssue #7003215 Minor UI truncation while reading the mails\n\nChange-Id: I47ce376f78a04d4e07e8b7ed1b3f0b58864c5498\n"
    },
    {
      "commit": "378e919ccb75efe24d5a5aa75ac2c6ef255dcb48",
      "tree": "0dfc3623513371881056d4f00bc8ca6526530105",
      "parents": [
        "6b7d46b78c1c5c1ce3e077c0eed41c730f1686b4"
      ],
      "author": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Wed Aug 15 15:54:54 2012 -0700"
      },
      "committer": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Thu Aug 16 09:11:49 2012 -0700"
      },
      "message": "Remove CacheTextureLine structure from FontRenderer\n\nCacheTextureLine was useful before we were packing the glyph\ntextures; it allowed simple packing of any particular texture according to\nhow many lines there were in a texture, and how tall those lines were.\nNow that we are packing more efficiently (both horizontally and vertically\nin any given texture line), it is more efficient to have\nopen space in every texture, removing the need for CacheTextureLine (which\nnow gets in the way since it limits how much can be stored in each line).\n\nThis change removes CacheTextureLine and just uses CacheTexture directly,\nallowing caching of glyphs anywhere in the open space of each texture. As before,\nthe packing of these glyphs is determined by the CacheBlock structure, which\nis a linked list of open spaces in each CacheTexture.\n\nChange-Id: Id6f628170df0f676f8743ac7de76f2377fc6a012\n"
    },
    {
      "commit": "2efd5c5886d9acf747bc92f888d731ed558aabcc",
      "tree": "3d7aa77e89d7e356a58a3551b70883b190f7a77c",
      "parents": [
        "21029db15769c9d57ffb972fb846e574ef2376ad"
      ],
      "author": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Wed Aug 15 13:15:16 2012 -0700"
      },
      "committer": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Wed Aug 15 14:19:20 2012 -0700"
      },
      "message": "Glyph cache optimization\n\nPrecaching at startup was not working. One-liner fix to init the caches\nso that precaching would kick in earlier, saving time at startup by avoiding\nthe multiple-upload issue of caching at render time.\n\nIssue #6893691 long app launch time on manta for some apps comparing to nakasi/stingray\n\nChange-Id: Ie5c7f0536ec8ea371c7892e5e09c1db14795531c\n"
    },
    {
      "commit": "e816baea651476aca4407200d4a5e629b9ab8dfa",
      "tree": "03d9a7d4bdda72e8811486706cb67152a43e7966",
      "parents": [
        "38cc2a5a3ad076fbbb0824a91f49730a4297549b"
      ],
      "author": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Thu Aug 09 13:39:02 2012 -0700"
      },
      "committer": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Tue Aug 14 10:33:30 2012 -0700"
      },
      "message": "Optimize interactions with glyph cache\n\nThere are two fixes here:\n- precaching: instead of caching-then-drawing whenever there is a new\nglyph, we cache at DisplayList record time. Then when we finally draw that\nDisplayList, we just upload the affected texture(s) once, instead of once\nper change. This is a huge savings in upload time, especially when there are\nlarger glyphs being used by the app.\n- packing: Previously, glyphs would line up horizontally on each cache line, leaving\npotentially tons of space vertically, especially when smaller glyphs got put into cache\nlines intended for large glyphs (which can happen when an app uses lots of unique\nglyphs, a common case with, for example, chinese/japanese/korean languages). The new\napproach packs glyphs vertically as well as horizontally to use the space more efficiently\nand provide space for more glyphs in these situations.\n\nChange-Id: I84338aa25db208c7bf13f3f92b4d05ed40c33527\n"
    },
    {
      "commit": "b6039811fa0fbc23f25c47491810faeb04ce3125",
      "tree": "c8d19d235cadfa2a54e381c82eee6a3472931bf0",
      "parents": [
        "a56d9cecee8a34e0554770ac6253dd3a76b9199c",
        "05e97e81a5fa2c9cab4cdda15aa2d036243a0c0e"
      ],
      "author": {
        "name": "Jean-Baptiste Queru",
        "email": "jbq@google.com",
        "time": "Wed Aug 08 14:08:35 2012 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Aug 08 14:08:35 2012 -0700"
      },
      "message": "am 05e97e81: am 0be33f2d: Merge \"Add shortcut to avoid potential divide by zero in some case\"\n\n* commit \u002705e97e81a5fa2c9cab4cdda15aa2d036243a0c0e\u0027:\n  Add shortcut to avoid potential divide by zero in some case\n"
    },
    {
      "commit": "33fa1f774c8e7289fd7c39fbc2c65b9361f2c2c4",
      "tree": "d74879134ece535c3930df34a05857566be6307b",
      "parents": [
        "2440e670de0294bdf64592849613db9b8f00ee11"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Aug 07 19:09:57 2012 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Aug 07 19:09:57 2012 -0700"
      },
      "message": "Draw an empty border around glyphs to avoid sampling issues\nBug #6942209\n\nThe font renderer was preserving a 1 px border around each glyph to ensure\nbilinear filtering would work nicely. Unfortunately, this border was not\nset to 0 when glyphs were added in the cache to replace old evicted glyphs.\n\nChange-Id: Ib85afca7ebad5cb63f960dc0e87ae162333dbfe8\n"
    },
    {
      "commit": "0412cfcbcdd7224f80a80180a946f0fdd28c3afc",
      "tree": "4a093cb2e7b9b037a8a36bd89d7971f746207bc9",
      "parents": [
        "13a3a87fa7264df29a1f698ce80ada2de3561962"
      ],
      "author": {
        "name": "Chen YANG",
        "email": "chen.yang@intel.com",
        "time": "Wed Jul 25 13:27:40 2012 +0800"
      },
      "committer": {
        "name": "Chen YANG",
        "email": "chen.yang@intel.com",
        "time": "Wed Jul 25 14:19:29 2012 +0800"
      },
      "message": "Add shortcut to avoid potential divide by zero in some case\n\nChange-Id: If4b34c95402daf8ebcc28736edfb2012553aa57c\n"
    },
    {
      "commit": "00755fed35e4a91291c42a8a47bed8b957e9f8e1",
      "tree": "0e680f4f9791bc8eef13ea7c0cce60ceeb86f8f6",
      "parents": [
        "0cb48705ad6e4be93c57d528be2230d0504340b3",
        "416a847633680d94efb926837efdc18726d54918"
      ],
      "author": {
        "name": "Raph Levien",
        "email": "raph@google.com",
        "time": "Fri Jul 20 14:24:19 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jul 20 14:24:20 2012 -0700"
      },
      "message": "Merge \"Add drop shadow for drawPosText in hwui renderer.\""
    },
    {
      "commit": "416a847633680d94efb926837efdc18726d54918",
      "tree": "0a5d914259e9ae5fa040e179ba5630d7102a49ad",
      "parents": [
        "592b29f4ad3d46b483b2d6ed2c5cfac8d139afe8"
      ],
      "author": {
        "name": "Raph Levien",
        "email": "raph@google.com",
        "time": "Thu Jul 19 22:48:17 2012 -0700"
      },
      "committer": {
        "name": "Raph Levien",
        "email": "raph@google.com",
        "time": "Fri Jul 20 12:55:30 2012 -0700"
      },
      "message": "Add drop shadow for drawPosText in hwui renderer.\n\nThis patch adds support for drop shadows (setShadowLayer) for\ndrawPosText in the hwui renderer. In and of itself, it\u0027s not very\nimportant, but it\u0027s on the critical path for correct mark positioning,\ntracked as bug 5443796.\n\nThe change itself is fairly straightforward - it basically just adds an\nextra \"positions\" argument to all draw and measure methods on the code\npath for drawing drop shadowed text, as well as to the cache key for\ncached shadow textures.\n\nChange-Id: Ic1cb63299ba61ccbef31779459ecb82aa4a5e672\n"
    },
    {
      "commit": "0aa87bbfc41e8b5f52de701ac17b4e66a7a7b609",
      "tree": "f50322171f390068559517c3fc12d3c2909a67c1",
      "parents": [
        "3a136fc0e8eefc4fbff679414cbe003368a4f298"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Jul 20 11:14:32 2012 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Jul 20 11:14:32 2012 -0700"
      },
      "message": "Fix crash with new LookupGammaFontRenderer\nBug #6853934\n\nChange-Id: I15e6ca73bfe00eff1a37c4b9d2f7f709ee018eb6\n"
    },
    {
      "commit": "b1d0a4ed21168fefcb82232c8f22cb95d60acb85",
      "tree": "bb7cf461df68f47b83f1e302610504b534284a38",
      "parents": [
        "dd0d0ba654cea3051e44ba9ae20ac4b269e123c0"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Jul 13 18:25:35 2012 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Jul 13 18:25:35 2012 -0700"
      },
      "message": "Refactor GammaFontRenderer\n\nThis change is the first step to a shader-based text antialias\ngamma correction.\n\nChange-Id: I9eb02d4c56cb95d05219f712290c865b46141954\n"
    },
    {
      "commit": "16c88085255c71a1a8fc034129aa2dcc61e1ddd0",
      "tree": "d582a3cff3847c2befee35dccd94d2b1e02b018c",
      "parents": [
        "527ee91b60426b5a344e9905c7f9a14d6d26219e"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Jun 11 16:03:47 2012 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Jun 11 16:11:56 2012 -0700"
      },
      "message": "Textured text calls could be invisible\nBug #6597730\n\nText would sometimes not appear when rendered with textured content\n(BitmapShader, LinearGradientShader, etc.) This was due to a misuse\nof OpenGL texture unit in FontRenderer. Textured text normally uses\ntwo texture units:\n- texture unit 0 for the font cache\n- texture unit 1 for the textured content (gradient, etc.)\n\nRecent changes to the font renderer allow it to bind new textures\nwhile processing the text\u0027s geometry (this happens when caches get\nfull or when switching font size for instance.) The bindings were\ndone without ensuring the texture unit was the correct one\n(unit 0), thus replacing the content of another texture unit\n(unit 1).\n\nThis lead to text being drawn using the font cache itself as the\ncontent texture, making the text invisible.\n\nChange-Id: I392b4c884f09223305f6cbc6253e2ef9a98944c9\n"
    },
    {
      "commit": "99a6ddd4cd8762654a575eb4ac3d0e5431d919b8",
      "tree": "998293d1bb9efd6b3e0fe2dcb6c994a377c98d8b",
      "parents": [
        "9d9758ae30a59dcf594e0d26ba5d4ee153a3e44a"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon May 14 15:32:18 2012 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon May 14 15:32:18 2012 -0700"
      },
      "message": "Forget the name of a texture after freeing\nBug #6408362\n\nFontRenderer allocates large font textures when more room is needed\nto store all the glyphs used by an application. Thse large textures\nare the first to be freed when memory needs to be reclaimed by the\nsystem. When freeing a texture, the renderer would however not set\nthe texture name to an invalid name, leading future allocations to\nbe performed on the same texture name. That name could have by then\nbe recycled by the driver and returned by a call to glGenTexture\nand used to create an entirely different texture. This would cause\nthe font renderer to point to the wrong texture, thus leading to\nthe \"corruptions.\"\n\nChange-Id: I8a1e80e5b79e8f21d1baf5320c090df4f2066cd4\n"
    },
    {
      "commit": "9d9758ae30a59dcf594e0d26ba5d4ee153a3e44a",
      "tree": "9e9699b094cb5bc74c9cd1b4249d2b35c42114bd",
      "parents": [
        "ae91c4cbc79ea910753be65e2f1d7899abcb4da2"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon May 14 15:19:58 2012 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon May 14 15:19:58 2012 -0700"
      },
      "message": "Fix two memory leaks\nBug #6408362\n\nChange-Id: I58543938e7b64d83504e11e97b0dd21ef8ebf3b6\n"
    },
    {
      "commit": "ae91c4cbc79ea910753be65e2f1d7899abcb4da2",
      "tree": "9391544d7731f84a661da570357be4f6c99cbf8d",
      "parents": [
        "2411c3361eb2c15b09a8bfadf5c7c4a3de092ea0"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon May 14 14:00:27 2012 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon May 14 14:06:02 2012 -0700"
      },
      "message": "Properly pre-cache latin glyphs\nBug #6408362\n\nChange-Id: Ie11644c5a9e2d87d3b851b7e619e5f04b60a7e02\n"
    },
    {
      "commit": "6554943a1dd6854c0f4976900956e556767b49e1",
      "tree": "82d43bbb28af4feeb6c358077ac1083ca3598e7b",
      "parents": [
        "a9dd820184ee4d083bd9b2af735dcf50b78fc6cd"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Mar 26 16:45:05 2012 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Mar 26 16:45:05 2012 -0700"
      },
      "message": "Use a status_t return type for GL functors\n\nWebView needs more fine-grained control over the behavior of the\nframework upon execution of the display lists. The new status_t\nallows WebView to requests its functor to be re-executed directly\nwithout causing a redraw of the entire hierarchy.\n\nChange-Id: I97a8141dc5c6eeb6805b6024cc1e76fce07d24cc\n"
    },
    {
      "commit": "a9dd820184ee4d083bd9b2af735dcf50b78fc6cd",
      "tree": "7ac017a6e046d16bd148a225b283532a3592c69e",
      "parents": [
        "d4577c0c29f8e38a34d1aeac59803b37769af790"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Mar 26 14:52:00 2012 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Mar 26 14:52:00 2012 -0700"
      },
      "message": "Prevent random crashes on SGX architecture\nBug #6219894\n\nChange-Id: If77f29da03e557a50e53bae505e1c638a1dbe2cc\n"
    },
    {
      "commit": "b0317984d34da99b614597ad0a8b39268eacb783",
      "tree": "0f3fceea85382bd70af903866f8e2750ac168f31",
      "parents": [
        "e72cf7341a608402309ce894fc12d050cc7c0e14"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Mar 21 11:52:52 2012 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Mar 21 11:52:52 2012 -0700"
      },
      "message": "Plug memory leak.\nBug #6196903\n\nWhenever a memory flush happens, the GL renderer discards some or all of its\nfont caches. Each font cache holds an array of vertex indices that was\ninitially designed to have the same life cycle as the process. This changed\nwhen memory flushes were introduced but this array was never taken care of\nin the destructor.\n\nChange-Id: Ief124f609ea55b671c0a9b43637d9e013629ebaa\n"
    },
    {
      "commit": "dd7c8e4c68205d39109d4317dd0c9b05ed43e8e5",
      "tree": "918bc3b0d69d8be0cf2d978a2b3a6291f6884f2b",
      "parents": [
        "9777173eb6c9eb97c7921c8288ebc65e3ab3ce6f"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Mar 01 12:08:38 2012 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Mar 01 12:08:38 2012 -0800"
      },
      "message": "Small tweak to Canvas.drawPath() GL implementation\n\nChange-Id: I1d668a912996e1267bcf2127058888e489a2d9b3\n"
    },
    {
      "commit": "9777173eb6c9eb97c7921c8288ebc65e3ab3ce6f",
      "tree": "0c2749e602c75cf72a3a2d6ffd480a47f975fdd5",
      "parents": [
        "765dcf32307dbd93ce43f064c426ce157be2d2ae"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Feb 28 18:17:02 2012 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Feb 29 19:14:37 2012 -0800"
      },
      "message": "Full implementation of Canvas.drawPath()\n\nChange-Id: I23223b89770a0cd2b4762365bead9bfddb094290\n"
    },
    {
      "commit": "b629490ffb21752750cc081827ca4c1eae1eb015",
      "tree": "8dc7b38e24041e5d08f2b3ebb86e4e7624af07c6",
      "parents": [
        "bbf1bc8b6c3348265930ce08506efbbd3c5ab61f"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Feb 02 15:13:18 2012 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Feb 02 15:13:18 2012 -0800"
      },
      "message": "Disable debugging code in the font renderer\n\nChange-Id: I92463057ff4ae712bb25789db1667ff1ecfd389f\n"
    },
    {
      "commit": "671d6cf460531825a321edb200523d0faa7792c9",
      "tree": "7fde21ba8f48911629c3dd67a1138bd6a569c084",
      "parents": [
        "fb9ffe02609c9c4ffca64927e72bc935cfe87768"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jan 18 12:39:17 2012 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jan 18 18:00:12 2012 -0800"
      },
      "message": "Full support for Canvas.drawPosText\n\nThis also introduces a small optimization when rendering text.\n\nChange-Id: Iff620ac97bf878eaac406bccc6daa07052c93890\n"
    },
    {
      "commit": "3762c311729fe9f3af085c14c5c1fb471d994c03",
      "tree": "7d4caccad80ac7327c7bff96dafc857d5f4631ad",
      "parents": [
        "7a939077bd14521c7d351af98df7ed75a8ec9c15"
      ],
      "author": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Fri Jan 06 19:20:56 2012 +0000"
      },
      "committer": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Sun Jan 08 13:19:13 2012 +0000"
      },
      "message": "Rename (IF_)LOGE(_IF) to (IF_)ALOGE(_IF)  DO NOT MERGE\n\nSee https://android-git.corp.google.com/g/#/c/157220\n\nBug: 5449033\nChange-Id: Ic9c19d30693bd56755f55906127cd6bd7126096c\n"
    },
    {
      "commit": "9a8245629d69d81e0b62e52970feaf9c02580e75",
      "tree": "3aa17c76e6a1b2d4abde5bfe75640c2dcc08d5d9",
      "parents": [
        "6a6da2c9719c6942246d50833e04ee48f9fb2b03"
      ],
      "author": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Fri Dec 16 15:44:59 2011 -0800"
      },
      "committer": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Fri Dec 16 15:44:59 2011 -0800"
      },
      "message": "De-allocate caches for large glyphs when trimming memory\n\nCurrently, font renderers eliminate some texture caches when\nmemory is trimmed. This change makes it go further by eliminating the\nlarge-glyph caches for all font renderers. These caches are\nonly allocated as needed, but continue to consume large amounts of\nmemory (CPU and GPU) after that allocation. De-allocating this memory\non a trim operation should prevent background apps from holding onto\nthis memory in the possible case that they have allocated it by drawing\nlarge glyphs.\n\nChange-Id: Id7a3ab49b244e036b442d87252fb40aeca8fdb26\n"
    },
    {
      "commit": "2a47c14e2a6f152496b43104bc785c488583fd59",
      "tree": "9cddf26e743b5c6fe83f3b57d89840433883da88",
      "parents": [
        "dd73df35b84007b1735a45577560912434246aae"
      ],
      "author": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Wed Dec 14 15:22:56 2011 -0800"
      },
      "committer": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Thu Dec 15 15:43:02 2011 -0800"
      },
      "message": "Fix issues from recent glyph caching change\n\nThere were 2 issues remaining after a recent change to support\nglyph caching from multiple textures:\n- memory in the GPU for all textures was being allocated automatically.\nThis is now lazy, being allocated only when those textures are first\nneeded.\n- filtering (applied when a rendered object is transformed) was ignoring\nthe new multiple-texture structure. Filtering should be applied correctly\nwhenever we change textures.\n\nChange-Id: I5c8eb8d46c73cd01782a353fc79b11cacc2146ab\n"
    },
    {
      "commit": "2d4fd364843d3efc6e6ee59ccc5beb513a86d789",
      "tree": "e6314681f94a7fcd0355a5700ecf65d9e3e0c5bb",
      "parents": [
        "ec31f83bd3af1f900d1ee9116b15f56904c66dcd"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Dec 13 22:00:19 2011 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Dec 13 22:00:19 2011 -0800"
      },
      "message": "Reduce the number of active texture changes\n\nChange-Id: I94046bdfe20740c26c8183822e3002d692fde7c4\n"
    },
    {
      "commit": "e829bc0f0364e942bed01536d115a5c08d25d776",
      "tree": "4a0cb89d442820f6dd72a709587331a816ee64e2",
      "parents": [
        "ee4d45f3052c8d339035c4bb8eca9b7a724e5074",
        "7de0cb12d0e5fd64811da0b5d1ae0c0d58b86f86"
      ],
      "author": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Tue Dec 13 14:03:43 2011 -0800"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Dec 13 14:03:43 2011 -0800"
      },
      "message": "Merge \"Make glyph cache more flexible\""
    },
    {
      "commit": "7de0cb12d0e5fd64811da0b5d1ae0c0d58b86f86",
      "tree": "a6af39c2baaeaf820cb2ed31d96fecac51adaada",
      "parents": [
        "666e6d73c187ecaa771591f87b929c4dff4e84bc"
      ],
      "author": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Mon Dec 05 16:35:38 2011 -0800"
      },
      "committer": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Tue Dec 13 13:41:58 2011 -0800"
      },
      "message": "Make glyph cache more flexible\n\nSome GPU architectures could not handle the previous implementation\nof our glyph cache. Frequent uploads would cause memory problems in the GPU\nand eventually a crash due to these memory issues. The solution is to move to\na system of several, smaller caches instead of one monolythic cache for all\nglyphs.\n\nChange-Id: I0fc7a323360940d16d5a33eeb33abfab194c5920\n"
    },
    {
      "commit": "15bc6437f8b4cf10dba55c7638d349e7b9563f4f",
      "tree": "18e054e26a43a757fec54387571ae2d1aadbea1c",
      "parents": [
        "5009f65c9a676b64869e638e08ec0294e20d7e6e"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Dec 13 13:11:32 2011 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Dec 13 13:11:32 2011 -0800"
      },
      "message": "Reduce the number of GL commands generated by the UI\n\nThis optimization along with the previous one lets us render an\napplication like Gmail using only 30% of the number of GL commands\npreviously required\n\nChange-Id: Ifee63edaf495e04490b5abd5433bb9a07bc327a8\n"
    },
    {
      "commit": "f3a910b423db7ad79cf61518bdd9278c048ad0d8",
      "tree": "a0ae14d597ee14202ec6ca60cedfb446ff470379",
      "parents": [
        "d71dd367af604571c7d00ca473184a1b9240eca2"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Dec 12 20:35:21 2011 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Dec 12 20:35:21 2011 -0800"
      },
      "message": "Optimize state changes\n\nChange-Id: Iae59bc8dfd6427d0967472462cc1994987092827\n"
    },
    {
      "commit": "d71dd367af604571c7d00ca473184a1b9240eca2",
      "tree": "c39db3ed12ca360773e3ede3462bd86ce6c4c28c",
      "parents": [
        "39d252a6632d057d5077f7eaf1b8ed7a142f3397"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Dec 12 19:03:35 2011 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Dec 12 19:03:35 2011 -0800"
      },
      "message": "Minimize the amount of data uploaded to draw text\n\nChange-Id: I6313ac039291c9cd93aadafe3566ad9d60cab42d\n"
    },
    {
      "commit": "ff98fa5a847f66e591287154c634ef7895a9549c",
      "tree": "87df4b0743e2b8b8d80ef85eaaa93bdad6f3eecf",
      "parents": [
        "e35581ad5ad635f9dcfe4ab6a432c48b46b782cd"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Nov 28 09:35:09 2011 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Nov 28 14:55:56 2011 -0800"
      },
      "message": "Fix crash in existing applications\nBug #5659476\n\nThe FontRenderer was not cleaning up its temporary state, leading\nto crashes when invoking renderDropShadow.\n\nChange-Id: I43b24820dd5625af8c080bbe11b64de2f74164b2\n"
    },
    {
      "commit": "5a6d3a4c0311318e6f1d4ee06aa47606e055a81b",
      "tree": "58c483c6db1c6e1205ab3d44ee03dfe3c551c8f4",
      "parents": [
        "2eaa0d73fab087b2309269f463f395705d236c78"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Oct 07 15:03:24 2011 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Oct 07 15:03:24 2011 -0700"
      },
      "message": "Stupid fixed point math.\nBug #5423215\n\nChange-Id: I39379e1f8fb4d59de4ede6e4fe7cf7a2c7cc625a\n"
    },
    {
      "commit": "799833a8b451a04be201d25ae72213e8562f7774",
      "tree": "e500503c24c747cda8884987cd8a0ae28ff0e666",
      "parents": [
        "94d5e9ad6533864f098b99c231d69c77230a828f"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Aug 30 14:41:48 2011 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Aug 30 14:41:48 2011 -0700"
      },
      "message": "Text would disappear when the font size is 75px.\nBug #5230196\n\nYes, 75px. Any other font size would work. Don\u0027t ask.\n\nChange-Id: I96c7db9926a97f65128d60c8238c3640ee2444ba\n"
    },
    {
      "commit": "bd496bc3d481f9cfc39007d22372d3a1a8809f96",
      "tree": "1c69e8c136dd81e68459c8b9870e0fac4bd6ae10",
      "parents": [
        "6805545649f2b194859033df94602492b9ec086e"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Aug 02 17:32:41 2011 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Aug 02 17:32:41 2011 -0700"
      },
      "message": "Paint style and stroke width affect text rendering.\nBug #5112207\n\nChange-Id: Ic34037ace21a5058ba23dd15e51aae58c998454d\n"
    },
    {
      "commit": "726aeba80ffc6778a9bc3e0ee957b8d644183505",
      "tree": "2a270831f12cfa6dd69a07e9068c76c3b737754e",
      "parents": [
        "f09ef51889f75289b041f9e9f949b7b82ed5b686"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jun 01 14:52:00 2011 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jun 01 14:55:42 2011 -0700"
      },
      "message": "Add support to OpenGLRendere to draw BiDi text.\nBug #4350336\n\nChange-Id: I1cf31693f7ca9653fa3a41b5b91c27ef288d680f\n"
    },
    {
      "commit": "44984ea0cb3702384d023b5f211deda3c4b0b656",
      "tree": "2ee6fb3780dc0e1cfd3b6d2837569bc5f8fe3a60",
      "parents": [
        "3a9e712aca65ac49e7155e98e5d6b815da76f94b"
      ],
      "author": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Thu May 19 13:50:47 2011 -0700"
      },
      "committer": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Thu May 19 16:39:37 2011 -0700"
      },
      "message": "Enable large font rendering with GPU acceleration\n\nChange-Id: I7b022100fb0762613f9cf7753dbb0217e1e75f8d\n"
    },
    {
      "commit": "8668f8a633d9299091556c3b2e5ae07be8dce360",
      "tree": "eddc2f604fc72622f49d8e5370b02a3e1148eb40",
      "parents": [
        "108500ab225a9b0b275e45620b9db9dbce0d9925"
      ],
      "author": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Wed Mar 02 13:51:36 2011 -0800"
      },
      "committer": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Wed Mar 02 14:02:19 2011 -0800"
      },
      "message": "Fix problem with glyph cache and textScaleX property\n\nGlyphs drawn with paints that had different textScaleX values were not\nbeing recognized as different, so the glyph cache was being used regardless\nof different scaleX values. This change adds the scaleX attribute to the native\nFont object to allow the cache to distinguish between this difference and cache\naccordingly.\n\nChange-Id: I5d8fc26d47460b27dc8e373a473d46b2f1b8dc30\n"
    },
    {
      "commit": "894df17eee708688c8a6e67941add2017239c790",
      "tree": "6bdce5bbcd62d824227c9e9f30e78db40bba5988",
      "parents": [
        "2e10374dceea41ebab13e5d2834f6767f2c23b3d"
      ],
      "author": {
        "name": "Alex Sakhartchouk",
        "email": "alexst@google.com",
        "time": "Thu Feb 17 16:45:37 2011 -0800"
      },
      "committer": {
        "name": "Alex Sakhartchouk",
        "email": "alexst@google.com",
        "time": "Thu Feb 17 16:45:37 2011 -0800"
      },
      "message": "Fixing font renderer attribute slot locations.\n\nChange-Id: I6377bb641df7d8372d873c00790189f9a190afd6\n"
    },
    {
      "commit": "c9855a53edfac818dc68714557185977556f849d",
      "tree": "7ace2dd62d887408e84f8a09c43e60de26b436b6",
      "parents": [
        "6828656220f4ed5ae803e4c11fb75fb56bc3ea25"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Jan 21 21:14:15 2011 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Jan 21 21:14:15 2011 -0800"
      },
      "message": "Log only 1 line per process when using OpenGLRenderer.\n\nChange-Id: Idbdd6b84f31301e58ed53e0d50fd61fece192dfa\n"
    },
    {
      "commit": "514fb18827186591d66973c2362c859b64b63556",
      "tree": "165318d5eee420728fbf92d1fda3505307ebf834",
      "parents": [
        "9335f5b2fde244614184f45d29cc574d1ba8cbba"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jan 19 14:38:29 2011 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jan 19 14:38:29 2011 -0800"
      },
      "message": "Don\u0027t attempt to create empty layers.\nBug #3369888\n\nChange-Id: Ic17bbd1c04bbf760cb17d0eb9e6767fd6479948c\n"
    },
    {
      "commit": "2577db1ec135a1470a2c42139772ec97a6c30e78",
      "tree": "8be799a2fa33a0b68b8b11706ded6e0c66ce66d7",
      "parents": [
        "807daf7df615b60ce6fc41355aabe3aa353cebab"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jan 18 13:02:38 2011 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jan 18 13:02:38 2011 -0800"
      },
      "message": "Add support for Paint::setTextSkewX in OpenGLRenderer.\nBug #3360888\n\nChange-Id: I42e81a1f10bf7b9ae1c63ca8add1878fd59a1e8a\n"
    },
    {
      "commit": "325a0f969c1d803d7e39a9caee8cc3d400350659",
      "tree": "3cb72441c743d5ffa3d6e7374c6530626d762b3e",
      "parents": [
        "b03ba34b769a39c01c5ef50d4d7f6a281d20744b"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jan 05 15:26:55 2011 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jan 05 15:33:37 2011 -0800"
      },
      "message": "The font cache should respect the fake bold flag.\n\nChange-Id: Ie4edc9ba46610edde831b55e769944e9a19bdcb5\n"
    },
    {
      "commit": "5b3b35296e8b2c8d3f07d32bb645d5414db41a1d",
      "tree": "bad2ebdbfeb8a3a0be1591d5a357a8280df7d1d2",
      "parents": [
        "2444ddb3d9b59ec45ba50858fcbff639e59b93b1"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Oct 27 18:57:51 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Nov 02 16:17:23 2010 -0700"
      },
      "message": "Optimize FBO drawing with regions.\nThis optimization is currently disabled until Launcher is\nmodified to take advantage of it. The optimization can be\nenabled by turning on RENDER_LAYERS_AS_REGIONS in the\nOpenGLRenderer.h file.\n\nChange-Id: I2fdf59d0f4dc690a3d7f712173ab8db3848b27b1\n"
    },
    {
      "commit": "054dc1840941665e32036f9523df51720ad069c8",
      "tree": "1f89288c08d67739f4f92d5cd04996d896a6d1e6",
      "parents": [
        "9d13fe25f4f10b25776b1dc5c858f9ebb0b28b30"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Oct 15 17:55:25 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Oct 15 17:55:25 2010 -0700"
      },
      "message": "Don\u0027t draw entirely transparent 9patch meshes.\n\nChange-Id: If3e62e18b8e0dbde8a22f8ede2889b86500a4dc2\n"
    },
    {
      "commit": "5d794412e3e429e47404395badcd11b0b8639e8b",
      "tree": "8a51193f6132d76192665b44fe65a009a2ac3cff",
      "parents": [
        "67a2f7b5a1b3ec5d2440d8be6e5ee4274e90e226"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Oct 13 16:36:22 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Oct 13 17:24:41 2010 -0700"
      },
      "message": "Small potential performance improvement for fonts rendering.\n\nChange-Id: If59c1e7803b84340fbc8b31ce6171ef0e5dc6189\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": "1de1083e98cde9bdd5e8539dbc54fdea6531906e",
      "tree": "7d12905ca53dd896d23a08803a6756f02645b7fc",
      "parents": [
        "7afbb30d636351334d101fd0caef391fa409230d"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@android.com",
        "time": "Sun Oct 03 14:37:09 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@android.com",
        "time": "Sun Oct 03 14:39:09 2010 -0700"
      },
      "message": "Initialize font texture cache.\n\nNow that text is renderer using bilinear filtering, each character is surrounded by\na 1 pixel border. This border needs to be initialized to a transparent value.\n\nChange-Id: I26d3195db4bd576ac1f2da4c8f8e4dd18768bf12\n"
    },
    {
      "commit": "7975fb6d12cb1eb96b75e3a563627cd4c4081bd6",
      "tree": "5be6b4315c9b3ccffb980fe9d99fa74340bf3430",
      "parents": [
        "d1034c1967178302cad9085d15ae9849497babb2"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Oct 01 16:36:14 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Oct 01 16:36:14 2010 -0700"
      },
      "message": "Apply bilinear filtering to text.\n\nChange-Id: I2c81ad657ee2a11a2139e0b11ae3749db54c0749\n"
    },
    {
      "commit": "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": "58ef7fbf16864164efe98bf613b15c64deb1afc0",
      "tree": "e49d5f8e7289d6ba0037def1a99535f653037134",
      "parents": [
        "ba15633a2267fb167f1496852be5dd394686d2c5"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Sep 13 12:52:37 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Sep 13 12:52:37 2010 -0700"
      },
      "message": "Forces windows to draw the first time they show.\n\nChange-Id: I239572ee49bc60f30d957f548104e75844859a93\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": "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": "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": "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": "f18136cb3c881a9d16c1a4f0f341732c276936bf",
      "tree": "d10574158a59fa826d271b5702bb4f0ce928d542",
      "parents": [
        "2184abfead330a209a9c15eb80d214d0b5985ebb"
      ],
      "author": {
        "name": "Alex Sakhartchouk",
        "email": "alexst@google.com",
        "time": "Fri Aug 06 14:49:04 2010 -0700"
      },
      "committer": {
        "name": "Alex Sakhartchouk",
        "email": "alexst@google.com",
        "time": "Fri Aug 06 14:49:04 2010 -0700"
      },
      "message": "Added drop shadow renderer to the font class.\n\nChange-Id: Id243abfbbb58e54f6a05f592a302984b5321e608\n"
    },
    {
      "commit": "89a524ac2d4a36739e51b01b336c0bade77e2ee0",
      "tree": "c56fe7dc968680cf38816535adcd58a8f5949e2d",
      "parents": [
        "ae2036a8f9365cec0f343f2668424e8e964a971c"
      ],
      "author": {
        "name": "Alex Sakhartchouk",
        "email": "alexst@google.com",
        "time": "Mon Aug 02 17:52:30 2010 -0700"
      },
      "committer": {
        "name": "Alex Sakhartchouk",
        "email": "alexst@google.com",
        "time": "Mon Aug 02 17:52:30 2010 -0700"
      },
      "message": "Adding drop shadow support\n\nChange-Id: I9b1b9568d6cebc0761d96ab678b018571f705ae1\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": "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": "9b9902ddbb01548f4a0199087b7035e7c10b2ae7",
      "tree": "1edef9e6df978930d0cec2c37110051613b7835f",
      "parents": [
        "a9ef06955d453917c5d7f076ba0e87fadf579254"
      ],
      "author": {
        "name": "Alex Sakhartchouk",
        "email": "alexst@google.com",
        "time": "Fri Jul 23 14:45:49 2010 -0700"
      },
      "committer": {
        "name": "Alex Sakhartchouk",
        "email": "alexst@google.com",
        "time": "Fri Jul 23 14:45:49 2010 -0700"
      },
      "message": "Updating parts of font cache as needed instead of the entire map.\n\nChange-Id: If9a37e10197255122acdb5b10a0c356edd942d67\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"
    }
  ]
}
