)]}'
{
  "log": [
    {
      "commit": "dd671599bed9d3ca28e2c744e8c224e1e15bc914",
      "tree": "aef0efadc853003d866f3d3d14621261f05d214c",
      "parents": [
        "9b3ebb124eba3d9f80ae299e0cbcfcd9c0a8653d"
      ],
      "author": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Fri Apr 19 14:54:34 2013 -0700"
      },
      "committer": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Fri Apr 19 15:36:37 2013 -0700"
      },
      "message": "Fix quickReject logic to account for setClipChildren() setting\n\nThe rendering code optimizes by rejecting drawing operations that\nlie outside of the bounds of their views. This works in most\nsituations, but breaks down when containers have called\nsetClipChildren(false), because we reject drawing that is outside\nof that container, but which should be drawn anyway.\n\nFix is to pass in the value of that flag to the DisplayList drawing\nroutines which take that flag into account when deciding whether\nto quickReject any particular operation.\n\nIssue #8659277 animation clipping\n\nChange-Id: Ief568e4db01b533a97b3c5ea5ad777c03c0eea71\n"
    },
    {
      "commit": "d3f9ffe28d1599e40f8c9a7c0c32465324bb2828",
      "tree": "a621c588f0003849c1696c35f07e3a973fc54abe",
      "parents": [
        "5d1a182a8a2dd9613ef3b1f2de7b6a3d690ae890",
        "ee5b2c6de7fb32d945a5a1303012a5f94b719dfa"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Apr 18 20:43:24 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Apr 18 20:43:25 2013 +0000"
      },
      "message": "Merge \"Prevent transformed ops from merging in the first place\" into jb-mr2-dev"
    },
    {
      "commit": "ee5b2c6de7fb32d945a5a1303012a5f94b719dfa",
      "tree": "5c61ecf247d8b64e3e864d1fc548dfebd05b64cd",
      "parents": [
        "5584737fff6350ab09fb53e6a73bbff770930727"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Apr 18 12:57:07 2013 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Apr 18 12:57:07 2013 -0700"
      },
      "message": "Prevent transformed ops from merging in the first place\n\nbug:8649215\n\nPreviously we prevented ops with non-translate transforms from\nmerging, but missed the case of the first op in a merging batch\ncontaining a non-translate transform.\n\nThis fulfills the assumption of drawText\u0027s non-immediate mode that\nmerged ops will have pure translate transforms.\n\nChange-Id: I6f6db341aff3f7e84e74b4c3ccf970d585a2db1a\n"
    },
    {
      "commit": "34416eaa1c07b3d7a139e780cea8f8d73219650e",
      "tree": "76047dada59721c749e61801351017a56980b5c2",
      "parents": [
        "5584737fff6350ab09fb53e6a73bbff770930727"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Apr 15 16:08:28 2013 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue Apr 16 15:05:49 2013 -0700"
      },
      "message": "Make layer double drawing visible in overdraw debug mode\n\nA clipped saveLayer will cause two draws - first to an onscreen\nbuffer, then again back to the framebuffer. This change - when in\noverdraw debug - reissues draws associated with a clipped saveLayer,\nbut only to the stencil buffer. Operations within a saveLayer are\nshown correctly to be twice drawn, and View.setAlpha() without an\nassociated hardware layer, or hasOverlappingRendering() are made more\nvisible.\n\nHardware layers, on any frame that they are updated, similarly draw\ntwice, and will also be counted against the stencil buffer doubly.\n\nNote: greater depths of layers - e.g. a saveLayer within a saveLayer -\nare not respected, as that would require additional region tracking.\n\nChange-Id: I61fb0e61038fe66013d59914c20bb47a550dea7d\n"
    },
    {
      "commit": "0985ac04310f18be7dd814b9a07c93f144ad21c2",
      "tree": "97e9de7d27090b5457c27eed400affcadd80f099",
      "parents": [
        "a59a19abb8f284beb478ff2492493251b91a2847",
        "c51d050f1bc2c393707f7c5e1f6906169ace7497"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Apr 15 23:23:31 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Apr 15 23:23:31 2013 +0000"
      },
      "message": "Merge \"Maybe fix issue #8620910: Win_sdk build failed and unable to create...\" into jb-mr2-dev"
    },
    {
      "commit": "c51d050f1bc2c393707f7c5e1f6906169ace7497",
      "tree": "82e181f39ef0dd6ffdddd08f283aecf35c4b262f",
      "parents": [
        "7fa9667f63fe84a2d17ce899121f32bfcec98864"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Apr 15 15:36:53 2013 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Mon Apr 15 15:36:53 2013 -0700"
      },
      "message": "Maybe fix issue #8620910: Win_sdk build failed and unable to create...\n\n...the sdk platform repo\n\nChange-Id: Ib6cd7c0dfb9b6217ae79af3e2ac25fe0442996e3\n"
    },
    {
      "commit": "30c990c361291ad578ef4ffe4a4dd0fd6080797b",
      "tree": "5145f039c110b59e56242fefd8f6cf1faa7b6370",
      "parents": [
        "3f1375e50fa29c500f1ce746ec7421bf6afcd8ff",
        "527a3aace1dd72432c2e0472a570e030ad04bf16"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Apr 15 21:27:10 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Apr 15 21:27:11 2013 +0000"
      },
      "message": "Merge \"Draw Operation merging\" into jb-mr2-dev"
    },
    {
      "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": "80fccb4dda9b2c46955e05b8be9e6071e0cc347b",
      "tree": "f0a6a0ac0685a0d46e0790d15d6834bf42cb098a",
      "parents": [
        "629b1c4f2042ef0f1da4fe543cca34deedd3ba5d",
        "4abab937bf3f168763a7c029275bf1de151ec1ae"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Sat Apr 13 00:37:37 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sat Apr 13 00:37:37 2013 +0000"
      },
      "message": "Merge \"There should be a mandatory coder\u0027s license. Bug #8586560\" into jb-mr2-dev"
    },
    {
      "commit": "15fed390c44972932f6dd7ce3bef1004e8b98b61",
      "tree": "25d70c9452c3d2a30e12356a6010b941ce5d7629",
      "parents": [
        "efcb252f767ab8737cc41cab4ee155faf2271417",
        "f7be4800df28d7cb6a96003046bf90245e7054ab"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Apr 12 23:58:50 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Apr 12 23:58:50 2013 +0000"
      },
      "message": "Merge \"Add new resources trace, also trace apk dex loading.\" into jb-mr2-dev"
    },
    {
      "commit": "4abab937bf3f168763a7c029275bf1de151ec1ae",
      "tree": "ad9b7b4bcb37af8d4c91d332a38b4339fa770923",
      "parents": [
        "95aeff8f11968c8b29ae114bb5e1172c70cf7634"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Apr 12 16:51:21 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Apr 12 16:51:21 2013 -0700"
      },
      "message": "There should be a mandatory coder\u0027s license.\nBug #8586560\n\nAnd I don\u0027t deserve to pass the test.\n\nChange-Id: Ic7886205511f16145a925fc860e4a03dfaf473d5\n"
    },
    {
      "commit": "95aeff8f11968c8b29ae114bb5e1172c70cf7634",
      "tree": "d2c4cb1a5c7d043c703c6ac828a9d5abd9c6ded3",
      "parents": [
        "e203384f1627f27c81ff72426498927fb9d80698"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Apr 12 16:32:05 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Apr 12 16:32:05 2013 -0700"
      },
      "message": "Properly computer gradient textures width\n\nOnly on devices that do not have the npot extension\n\nChange-Id: I472a13dc707d2abaf5fcc06f99c9da343b333558\n"
    },
    {
      "commit": "f7be4800df28d7cb6a96003046bf90245e7054ab",
      "tree": "398c298946d8f95fef56fe18a52903f68966be8e",
      "parents": [
        "8d4c23b9c32f8c0328ebca538bb801716fe4478a"
      ],
      "author": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Apr 12 14:52:58 2013 -0700"
      },
      "committer": {
        "name": "Dianne Hackborn",
        "email": "hackbod@google.com",
        "time": "Fri Apr 12 14:53:10 2013 -0700"
      },
      "message": "Add new resources trace, also trace apk dex loading.\n\nChange-Id: Ia48566efb21ee018659bd976ddb3a0f4997b9a3a\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": "dacd47516321d263efa7489b5b9bd7d8e1714332",
      "tree": "e317b9d4f8d513e1730b354dacb5ef42dd015a81",
      "parents": [
        "8f980e1a5ae99d5e34aaef6aac7f38a7d0038631",
        "58d110afa0e0f3843d72617046185a3c2d48dca9"
      ],
      "author": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Wed Apr 10 17:48:53 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Apr 10 17:49:56 2013 +0000"
      },
      "message": "Merge \"Fix Contacts animation jank\" into jb-mr2-dev"
    },
    {
      "commit": "58d110afa0e0f3843d72617046185a3c2d48dca9",
      "tree": "74090c0180b475041a9b760a8f8928aec8eec836",
      "parents": [
        "26c134398422a4f4e703cdf7b87fb1cb08d542c4"
      ],
      "author": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Wed Apr 10 07:43:29 2013 -0700"
      },
      "committer": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Wed Apr 10 07:43:29 2013 -0700"
      },
      "message": "Fix Contacts animation jank\n\nThe last frame of an animation stays stuck on the screen for a couple of frames.\nSpecifically, the \"Quick Contact\" animation that animates the picture\nclosed (fades/scales it away) animates all the way to the end... then hangs there\nbriefly before being taken down.\n\nThe problem is a rendering bug where we correctly detect that a DisplayList\nhas nothing to draw (since the last frame is completely transparent, alpha\u003d\u003d0),\nbut incorrectly ignore the fact that we cleared the transparent-background\nwindow prior to not-drawing that DisplayList. When we detect that there\u0027s\nnothing to draw, we don\u0027t bother swapping buffers. So even though we drew\nthe right thing (clearing the buffer), we didn\u0027t actually post the buffer to the\nscreen.\n\nThis change factors in both the clear and the draw to decide when to swap buffers.\n\nIssue #8564865 Quick contact close animation jank redux\n\nChange-Id: Ib922cff88a94f025b62f7461c1a29e96fe454838\n"
    },
    {
      "commit": "d8b26d6c424741dd09cf70ee88fd237807aaf301",
      "tree": "af3d9108da867c143884ec2baa8b93dfc2a3d446",
      "parents": [
        "07c6fa123da8c7a25edab751543d96fea1dd57f6",
        "d685894212e6dbeac1fda4996903c1da115d49a6"
      ],
      "author": {
        "name": "Ying Wang",
        "email": "wangying@google.com",
        "time": "Wed Apr 10 05:16:14 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Apr 10 05:16:14 2013 +0000"
      },
      "message": "Merge \"Add liblog\" into jb-mr2-dev"
    },
    {
      "commit": "d685894212e6dbeac1fda4996903c1da115d49a6",
      "tree": "c52d05c78811e79a869afbcdbe55a906e38f2fa1",
      "parents": [
        "9fa49cc3308f6af593d780581121afc3c1d7e046"
      ],
      "author": {
        "name": "Ying Wang",
        "email": "wangying@google.com",
        "time": "Tue Apr 09 21:54:12 2013 -0700"
      },
      "committer": {
        "name": "Ying Wang",
        "email": "wangying@google.com",
        "time": "Tue Apr 09 21:54:12 2013 -0700"
      },
      "message": "Add liblog\n\nBug: 8580410\nChange-Id: I746aa8258866508c3a725d0773faf4518096548f\n"
    },
    {
      "commit": "032d47af737d803e841ab79f38ac9068a46c9aeb",
      "tree": "c3428ff4c80f1274cd4a1ada4567ab1ed940c1b5",
      "parents": [
        "50b9eb1c7375a87525d44a036337a8ba18eba55b"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Apr 08 19:45:40 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Apr 09 10:12:47 2013 -0700"
      },
      "message": "Change the dither texture\u0027s swizzling\n\nThis is a more elegant way to sample from a float alpha texture.\nInstead of sampling from the red channel in the fragment shader\nwe can set the alpha channel swizzle to redirect it to the\nred channel. This lets us sample from the alpha channel in the\nfragment shader and get the correct value.\n\nChange-Id: I95bbf7a82964e1bf42c0fee1b782b6bdbbcef618\n"
    },
    {
      "commit": "bdb706e48d71af498156efbb10d0f0c1fcef8878",
      "tree": "d7fc1d7057e9055fa23d1c49adcdbe7dd34799c3",
      "parents": [
        "8299f683f3fbe7ba0f5387b062b31de117882dba",
        "c6091c64c90e9557ea58e0d7cf75915aea7c6c3e"
      ],
      "author": {
        "name": "Michael Wright",
        "email": "michaelwr@google.com",
        "time": "Fri Apr 05 21:43:31 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Apr 05 21:43:31 2013 +0000"
      },
      "message": "Merge \"Pipe through device resolution information\" into jb-mr2-dev"
    },
    {
      "commit": "8299f683f3fbe7ba0f5387b062b31de117882dba",
      "tree": "42643083e8e4ddcaa758c08b446143ebd7228581",
      "parents": [
        "c51628aa6f61822c03e13af50741b076c588d3c7",
        "b48800428906ae455c2b63acacd44e390e1fee49"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Apr 05 21:31:57 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Apr 05 21:31:57 2013 +0000"
      },
      "message": "Merge \"Use float textures to render gradients when possible\" into jb-mr2-dev"
    },
    {
      "commit": "b48800428906ae455c2b63acacd44e390e1fee49",
      "tree": "bc0de8c6f51eb5c9cac2d5fe1d5a41fede6d727a",
      "parents": [
        "80fdc9624e6d53a78031bf99d34e7c01d53ad66e"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Apr 05 11:17:55 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Apr 05 14:17:17 2013 -0700"
      },
      "message": "Use float textures to render gradients when possible\n\nFloat textures offer better precision for dithering.\n\nIn addition this change removes two uniforms from gradient shaders.\nThese uniforms were used to dither gradients but their value is\na build time constant. Instead we hardcode the value directly in\nthe shader source at compile time.\n\nChange-Id: I05e9fd3eef93771843bbd91b453274452dfaefee\n"
    },
    {
      "commit": "4a706bc6f1dcf4483b282d5758e22482cf02506f",
      "tree": "b30d59c9474bc4499b3c433dbd5135891567c27a",
      "parents": [
        "5feceebb892d4cb5777cea3c6174b206705d456b",
        "1951ce86c21445ac191e4d2d95233f4f5c096b56"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Apr 05 20:57:01 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Apr 05 20:57:01 2013 +0000"
      },
      "message": "Merge \"Correctly manage the lifecycle of IME InputChannels.\" into jb-mr2-dev"
    },
    {
      "commit": "1951ce86c21445ac191e4d2d95233f4f5c096b56",
      "tree": "8c68eb0fe87565bcdaf7cd8bd2a56a03319bede5",
      "parents": [
        "41c076715da58990dc9b0be749bba28fc75d3b78"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Apr 04 22:45:12 2013 -0700"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Thu Apr 04 22:45:12 2013 -0700"
      },
      "message": "Correctly manage the lifecycle of IME InputChannels.\n\nInputChannels are normally duplicated when sent to a remote process\nover Binder but this does not happen if the recipient is running within\nthe system server process.  This causes problems for KeyGuard because the\nInputMethodManagerService may accidentally dispose the channel\nthat KeyGuard is using.\n\nFixed the lifecycle of InputChannels that are managed by the IME\nframework.  We now return a duplicate of the channel to the application\nand then take care to dispose of the duplicate when necessary.\nIn particular, InputBindResult disposes its InputChannel automatically\nwhen returned through Binder (using PARCELABLE_WRITE_RETURN_VALUE).\n\nBug: 8493879\nChange-Id: I08ec3d13268c76f3b56706b4523508bcefa3be79\n"
    },
    {
      "commit": "c6091c64c90e9557ea58e0d7cf75915aea7c6c3e",
      "tree": "f5f69d5bbd0270d7a1b7564920e6f31f381704cd",
      "parents": [
        "77d94957d793aba16a1352d25d5555bf59fe74e7"
      ],
      "author": {
        "name": "Michael Wright",
        "email": "michaelwr@google.com",
        "time": "Mon Apr 01 20:56:04 2013 -0700"
      },
      "committer": {
        "name": "Michael Wright",
        "email": "michaelwr@google.com",
        "time": "Thu Apr 04 18:10:37 2013 -0700"
      },
      "message": "Pipe through device resolution information\n\nBug: 8424494\nChange-Id: Iafeeee0d5cd29342c1cdc86b9616222aaa5d1b94\n"
    },
    {
      "commit": "a151ef8c667a52d9fae28c09f780784f19bdb039",
      "tree": "a0e43a7a4da4df3e9ae4812479f6ee44e77f6d42",
      "parents": [
        "faec826bd6051e41e1299cd14d580a4f50f6fe97",
        "0908764b2b3cf5075df4178a5f0a8547dcb7b317"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Apr 04 22:47:53 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Apr 04 22:51:38 2013 +0000"
      },
      "message": "Merge \"First OpenGL ES 3.0 based optimization\" into jb-mr2-dev"
    },
    {
      "commit": "de4f8c3872c6284605c168687c69ebfa72ea49d2",
      "tree": "2e52b462e524ae80baed14eae7d49adcb6f925ed",
      "parents": [
        "5a78b1b20d1f137f867bd1dba76377a41af1af18",
        "1206b9bba91f7ed899c5c87427cce725fe5aadfc"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Apr 04 22:26:59 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Apr 04 22:27:00 2013 +0000"
      },
      "message": "Merge \"Traverse layers in update order\" into jb-mr2-dev"
    },
    {
      "commit": "1206b9bba91f7ed899c5c87427cce725fe5aadfc",
      "tree": "68c8a89796bd1395722b92cdd49f2fbba50269c5",
      "parents": [
        "599efc3aa34351e02bfa6e8b9e3fd530b8d9c632"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Apr 04 14:46:24 2013 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Apr 04 14:55:43 2013 -0700"
      },
      "message": "Traverse layers in update order\n\nbug:8540150\n\nLayers now require traversal in update order, as it will be child\nfirst, then parent for layer-in-layer\n\nFixes issue with deferred layer playback not flushing in order, and\nthus child not painting before parent\n\nAlso fixes DisplayList to only be cleared after flush in deferred list\n\nChange-Id: I2f284d00079cdb20798aeef6a1c94e823940db40\n"
    },
    {
      "commit": "0908764b2b3cf5075df4178a5f0a8547dcb7b317",
      "tree": "c69db8d815ad1d0b0172e7a20827254627800dad",
      "parents": [
        "df1dc28ba0c63b195016ad0453fc58025ee82acb"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Apr 04 12:27:54 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Apr 04 12:27:54 2013 -0700"
      },
      "message": "First OpenGL ES 3.0 based optimization\n\nThis change uses a new OpenGL ES 3.0 feature to upload less data when\nthe font cache needs to be update. This can result in significant\nperformance improvements on device with large textures or with locales\nthat use a lot of glyphs (CJK for instance.)\n\nThis change also fixes various unpack alignment issues. The unpack\nalignment, as well as the unpack row length, is not texture specific\nbut a global state that affect all glTex/SubImage2D calls. Some of\nthem were missing the appropriate glPixelStorei() call. This could\nresult in corrupted textures.\n\nChange-Id: Iefb429d4d0d0b4e0faeadf27daafee6d30a21d85\n"
    },
    {
      "commit": "eaadd123a7d7b0a02046db33e882ddcef33e1a49",
      "tree": "6076a1c6182f757ab061dc38555961986d584c21",
      "parents": [
        "8712e4cc4a08f9d54013e96cc2420637c2114f08",
        "df1dc28ba0c63b195016ad0453fc58025ee82acb"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Apr 04 17:53:06 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Apr 04 17:53:06 2013 +0000"
      },
      "message": "Merge \"Add internal API to query GL version number\" into jb-mr2-dev"
    },
    {
      "commit": "df1dc28ba0c63b195016ad0453fc58025ee82acb",
      "tree": "11f126bd3dd87fcdf97c4cd27fea8a795479578b",
      "parents": [
        "02b49b70ede0b9eb760ff334823aee1d9520ed85"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Mar 29 18:32:29 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Apr 04 10:50:48 2013 -0700"
      },
      "message": "Add internal API to query GL version number\n\nChange-Id: Idc02efc237b8e97445a9bab05c291bf193c7f279\n"
    },
    {
      "commit": "ff7ae2dccd3b8ba015963126d8a655b417d3fcd3",
      "tree": "eeca06b57efb30de5242c49214ab6ac95f96a5c9",
      "parents": [
        "75827d4a3155c190f455329a67c84ac8fbb9bda0",
        "1ed30c907ffbb71d1bc448ee57c66b0d16f600ef"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Apr 03 20:31:49 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Apr 03 20:31:49 2013 +0000"
      },
      "message": "Merge \"Correct save/restore match up\" into jb-mr2-dev"
    },
    {
      "commit": "e0b39fc18c10224c4e66f70aa472d8497b1b4621",
      "tree": "115a90b801dfb390bcfc146739d37a17e2aec529",
      "parents": [
        "bc9da0f4b5584d52b966b445deb2c4f9d87dd070",
        "e7c69c6fe3eac1fb01126ede550e5dc32979804a"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Apr 03 19:43:46 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Apr 03 19:43:47 2013 +0000"
      },
      "message": "Merge \"Account for hairlines in quick rejection logic\" into jb-mr2-dev"
    },
    {
      "commit": "1ed30c907ffbb71d1bc448ee57c66b0d16f600ef",
      "tree": "1e52d895c0a755cd2e9521ea06bb5acbf1661b05",
      "parents": [
        "0102443c4f52f2e15fd731c452f0c4745312d448"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Apr 03 12:37:35 2013 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Apr 03 12:37:35 2013 -0700"
      },
      "message": "Correct save/restore match up\n\nbug:8480642\n\nWith the additional save/restore around the operations in flush, the\nstored restore batches weren\u0027t matching up to the correct saves.\n\nChange-Id: I2f48f19009bd97289b6973283f43dc8d3e35affd\n"
    },
    {
      "commit": "e7c69c6fe3eac1fb01126ede550e5dc32979804a",
      "tree": "4d471a579f89582c6b67b3016aaf8c0b9cf971e4",
      "parents": [
        "0102443c4f52f2e15fd731c452f0c4745312d448"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Apr 03 09:55:48 2013 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Apr 03 09:55:48 2013 -0700"
      },
      "message": "Account for hairlines in quick rejection logic\n\nbug:8531373\nChange-Id: I35444014f23fc61da687694fccc0d13bce718793\n"
    },
    {
      "commit": "16ecda5317c40fc3da284952d9b3add34d6763ae",
      "tree": "1b1a5c9a2bd631a4e0878d7c6de6759e8e8e5909",
      "parents": [
        "0102443c4f52f2e15fd731c452f0c4745312d448"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Mar 29 10:59:59 2013 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Apr 01 17:21:35 2013 -0700"
      },
      "message": "Update view\u0027s alpha and layer docs\n\nbug:8501661\n\nMakes the performance issues and interaction with layer type/paint\nmore clear.\n\nAdditionally, corrects change from 47ab7d6612e2b5b8b66fb261dafef7c91264e173\nto still allow displayList alpha to override layer paint\n\nChange-Id: Ic94d75865700820489370461cd8ac9f9077a8d90\n"
    },
    {
      "commit": "02b49b70ede0b9eb760ff334823aee1d9520ed85",
      "tree": "3d55433752c547beb594edec21d56ce1b3080889",
      "parents": [
        "964a6a7e209b0db262c827721ae5fde3f98ca763"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Mar 29 12:37:16 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Mar 29 12:37:16 2013 -0700"
      },
      "message": "Prevent crash when a single layer is enqueued several times for updates\nBug #8504687\n\nChange-Id: I9b01bbc4e3f37af23dfe5e68d3d03ad3d238b94a\n"
    },
    {
      "commit": "5399a5648fb6756a7e7429b07a5a36493ff00395",
      "tree": "be3ba96d7939692cba8d79e72eee570549f6c249",
      "parents": [
        "dac3fd9d90daffb4f6b08c788184ff38523348ba",
        "696dcf84a382fcc5ef7041e0bbf3af20b0ecb99f"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Mar 28 23:42:41 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Mar 28 23:42:41 2013 +0000"
      },
      "message": "Merge \"Update layers to clear them Bug #8489505\" into jb-mr2-dev"
    },
    {
      "commit": "94eaab4a5ddd6db4bcbc8a1e65a4d8e60d1d1274",
      "tree": "76f55bd1ca1fcc4f307918e13faff9c471625017",
      "parents": [
        "5c3bd37ab7b18bd5c3ea4bfcb86cc0a30c10d534",
        "3ae30483777708ff3a4f59a4fa75c6a76213cc30"
      ],
      "author": {
        "name": "Elliott Hughes",
        "email": "enh@google.com",
        "time": "Thu Mar 28 14:29:21 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Mar 28 14:29:21 2013 -0700"
      },
      "message": "am 3ae30483: am a19647d3: Merge \"Correct executable bit for source files [Take 2]\"\n\n* commit \u00273ae30483777708ff3a4f59a4fa75c6a76213cc30\u0027:\n  Correct executable bit for source files [Take 2]\n"
    },
    {
      "commit": "dc1975ea717cdafb914fd00ea781fd314e1ac478",
      "tree": "f3881637dba6cc80e959f5e2c0cb64ea14a4e7de",
      "parents": [
        "e494a81f9b2727edd1c537f34bf0ea83b2fb0097",
        "7273daace9303f4662444111c40bb83d3ead4a92"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Mar 28 20:46:47 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Mar 28 20:46:47 2013 +0000"
      },
      "message": "Merge \"Fix issues related to saveLayer/restore deferral\" into jb-mr2-dev"
    },
    {
      "commit": "696dcf84a382fcc5ef7041e0bbf3af20b0ecb99f",
      "tree": "82deda082ad2fd191e8e9991cecba1e3365004b6",
      "parents": [
        "ce4a7dfc516ee61301e9af91fad17ca1320efaab"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Mar 28 13:06:58 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Mar 28 13:06:58 2013 -0700"
      },
      "message": "Update layers to clear them\nBug #8489505\n\nA layer should be updated even with an empty deferred display list. It is\npossible for a layer to request an update just to execute a clear which\nwill be handled by LayerRenderer::prepareDirty().\n\nChange-Id: Iffb98bd71d6caa8d4a701df98197676f9423c0c2\n"
    },
    {
      "commit": "58f7689ac634afa616d2b754b68d65f9a2e83814",
      "tree": "0436306c1a30bbcf7a318ca1f3da75902bde0c01",
      "parents": [
        "ce449d9ee521052bb6c24885a3599a19841eae5d",
        "ce4a7dfc516ee61301e9af91fad17ca1320efaab"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Mar 28 18:50:53 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Mar 28 18:50:53 2013 +0000"
      },
      "message": "Merge \"Don\u0027t crash when making a layer larger than supported dimensions Bug #8437401\" into jb-mr2-dev"
    },
    {
      "commit": "7273daace9303f4662444111c40bb83d3ead4a92",
      "tree": "c1bb85a291fef72c89254888dea021bd3b847b1f",
      "parents": [
        "8ff0201ad0354b6c43aebac6075298ee847c42ef"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Mar 28 11:25:24 2013 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Mar 28 11:33:13 2013 -0700"
      },
      "message": "Fix issues related to saveLayer/restore deferral\n\nbug:8464795\n\nChanges drawModifiers and alpha to be restored for all operations,\nsince saveLayer/restore use these values, not just draw operations\n\nAlso forces a renderer state restoration before a deferred restore op\nis played back, in case it is associated with a saveLayer that\ndoesn\u0027t have the save_clip flag set\n\nChange-Id: I9da5d44fefbfffdee164c98f4f139843dacf85df\n"
    },
    {
      "commit": "ce4a7dfc516ee61301e9af91fad17ca1320efaab",
      "tree": "3e0cfe4e2be851d15a5e240c4983ea5ecff1513b",
      "parents": [
        "4500a8d5d7fbec9dba5e693212da160849e401ff"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Mar 28 11:32:33 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Mar 28 11:32:33 2013 -0700"
      },
      "message": "Don\u0027t crash when making a layer larger than supported dimensions\nBug #8437401\n\nA misplaced ref count decrement was causing a crash when attempting to\nresize a layer to dimensions larger than the max texture size supported\nby the GPU.\n\nThis change fixes the crash and clarifies the warnings to make it more\nobvious what\u0027s happening.\n\nChange-Id: I632dc1b90aaa2605969e10523491a81c4922d3dc\n"
    },
    {
      "commit": "9cd645121584bc167b3fab61b1ed89ddc4631365",
      "tree": "364cd6fecc6be3ea5192ce9cdfaa1f2fe9b4cc97",
      "parents": [
        "2e73f5b8b7c941e68fec2d763d9455a8d6190e25",
        "408eb12631376cbdc96803e918decf6ea804d346"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Mar 27 19:47:59 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Mar 27 19:47:59 2013 +0000"
      },
      "message": "Merge \"Set ignore flag during deferred savelayer\" into jb-mr2-dev"
    },
    {
      "commit": "408eb12631376cbdc96803e918decf6ea804d346",
      "tree": "b64da0f0826f2ae516062a59f22321ee6dcb5fe3",
      "parents": [
        "05191053545065c9c71afae173d3ab42a2d947fa"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue Mar 26 18:55:15 2013 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Mar 27 10:38:36 2013 -0700"
      },
      "message": "Set ignore flag during deferred savelayer\n\nbug:8471552\n\nAdditionally, add ignore check for draw functor\n\nIn deferred mode, if we don\u0027t set ignore, a 0 alpha displayList won\u0027t\nbe quickRejected, and not only would its contents be needlessly\ndeferred, but upon playback any functors would be drawn, ignoring the\nstate of the snapshot.\n\nChange-Id: Ib1edb3252080f674254086edee6f965f0efcce78\n"
    },
    {
      "commit": "3e4a3ea2ff03a6a1f1f7a2bebac9a86fe6555754",
      "tree": "b46b983ad05f3d7b5389f569dd39ca63506a51ac",
      "parents": [
        "519ba7b10c4e0da3586aeeaa9696349f28313898"
      ],
      "author": {
        "name": "Chirayu Desai",
        "email": "cdesai@cyanogenmod.org",
        "time": "Wed Mar 27 16:52:35 2013 +0530"
      },
      "committer": {
        "name": "Chirayu Desai",
        "email": "cdesai@cyanogenmod.org",
        "time": "Wed Mar 27 16:52:35 2013 +0530"
      },
      "message": "Correct executable bit for source files [Take 2]\n\nChange Ieb51bafb46c895a21d2e83696f5a901ba752b2c5 left out some\nfiles, this fixes them.\n\nChange-Id: Ia949a8581668836ea0251602e048f09c852f5169\n"
    },
    {
      "commit": "4500a8d5d7fbec9dba5e693212da160849e401ff",
      "tree": "1022f0099762a9ef2058da7240a2809659527846",
      "parents": [
        "96885eb480c5e0526fe2f77d30f6e551f3f3ceab"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Mar 26 17:29:51 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Mar 26 17:29:51 2013 -0700"
      },
      "message": "Path precaching creates duplicate cache entries\nBug #8478275\n\nChange-Id: Ib541ea051e42e01cc0d277790e9c09de38ef72ee\n"
    },
    {
      "commit": "96885eb480c5e0526fe2f77d30f6e551f3f3ceab",
      "tree": "17bee5ff04c63bf1415696b02374c60e584a0542",
      "parents": [
        "7c566bf3e4a10d74588b3e92ea3f6af310930f37"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Mar 26 15:05:58 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Mar 26 15:25:07 2013 -0700"
      },
      "message": "Avoid multiple font cache texture uploads\nBug #8378964\n\nThis change defers drawing into layers until after the renderer for FBO0\nis ready to draw. At that point, all the precaching is done which means\nall glyphs can be uploaded at once in the font caches.\n\nChange-Id: Ie1f7a7ff30f76f06fb3dbc72c7d05e66207d1ecb\n"
    },
    {
      "commit": "a4e16c58c9e3c983251e0475125a2a6f5bec2dbf",
      "tree": "b5c98f99fdc8a80188bf1bcf0fb959484a118735",
      "parents": [
        "1edaff0709bc3558a6736eac7fccbe8350f2d158"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Mar 22 10:00:48 2013 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Mar 22 11:54:51 2013 -0700"
      },
      "message": "Restore final canvas state after deferred flush\n\nbug:8450062\n\n- Fixes overdraw indication with DeferredDisplayList\n- Fixes drawHardwareLayer called after flush\n\nAdditionally changes drawLayer to pass its paint to native via setLayerPaint\n\nWrap flush in save/restore so that reordering doesn\u0027t affect final\ntransform\n\nChange-Id: I08befa42c28500da6387699eefd4be28aedf9f4c\n"
    },
    {
      "commit": "741f6bb81063cd12c9cd5e0a6822a41561ef93b2",
      "tree": "63e77473340b297cf3ea56b4f73f88f179c67efa",
      "parents": [
        "dc0299fb2373faddd547d433ffa049fb40d64fac",
        "5f803623559aab395a29d575c37c4e39c23a4b4e"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Mar 21 22:08:12 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Mar 21 22:08:13 2013 +0000"
      },
      "message": "Merge \"Isolate tiling clip state from snapshot\" into jb-mr2-dev"
    },
    {
      "commit": "5f803623559aab395a29d575c37c4e39c23a4b4e",
      "tree": "4735e8c0e03aa5222202af815dec86e404c18ad7",
      "parents": [
        "71b0017759b825f8bddcdda7425afc802e8918c9"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Mar 21 14:39:04 2013 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Mar 21 14:39:04 2013 -0700"
      },
      "message": "Isolate tiling clip state from snapshot\n\nbug:8409891\n\nSnapshots frequently have their clip overwritten due to applying\ndeferred state - now, store tiling clip information in a separate\nrect, outside of the snapshot so it isn\u0027t overwritten.\n\nChange-Id: I21ca4c45dcd802eae99e8de86f11525196777ccb\n"
    },
    {
      "commit": "c5cbee7d78513527e89450e6369a30a04b2d5e7a",
      "tree": "a3709dd93124509c4490b889622b277d11fbef30",
      "parents": [
        "9eac52698b18d089e73c7ec2bf73a64a39504733"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Mar 20 19:15:02 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Mar 20 19:16:53 2013 -0700"
      },
      "message": "Stop worker threads on memory trim \u0026 fix bad pointer access\n\nChange-Id: I6fe7e31aeb6dd41fa65ab952caed97bc2da510d7\n"
    },
    {
      "commit": "9eac52698b18d089e73c7ec2bf73a64a39504733",
      "tree": "5c3668fc72aefd1685d6d7bd5e82547290cce281",
      "parents": [
        "7564c716bbee6a4825ae747797068d0e7c370c0d",
        "257ae3502cfad43df681b1783528d645bdabc63f"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Mar 21 01:54:42 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Mar 21 01:54:42 2013 +0000"
      },
      "message": "Merge \"Optimize text GL setup\" into jb-mr2-dev"
    },
    {
      "commit": "7564c716bbee6a4825ae747797068d0e7c370c0d",
      "tree": "aaba7442c9d22efcc6988dec251c63baae8907a8",
      "parents": [
        "426da33976036e902ea608f369d028a77afb4381",
        "e83569ca76308bfe945efcfef5a12c64b8fb8849"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Mar 21 01:17:29 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Mar 21 01:17:29 2013 +0000"
      },
      "message": "Merge \"Use snapshot alpha in all layer drawing\" into jb-mr2-dev"
    },
    {
      "commit": "e83569ca76308bfe945efcfef5a12c64b8fb8849",
      "tree": "84df4515004ed6715daf870885950d586d5c8962",
      "parents": [
        "afd10322f598abfda973ad78117dd297e09de212"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Mar 20 16:57:09 2013 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Mar 20 17:24:36 2013 -0700"
      },
      "message": "Use snapshot alpha in all layer drawing\n\nChange-Id: Icc093390da2fc36b2b6693d0e5e4357b2f730bf9\n"
    },
    {
      "commit": "257ae3502cfad43df681b1783528d645bdabc63f",
      "tree": "e257e21ddf04c544b0dbb6467d2d10a7c659ac1d",
      "parents": [
        "10c4d99f04a399c78529d0ae66c1785b26a125c3"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Mar 20 16:31:12 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Mar 20 16:35:05 2013 -0700"
      },
      "message": "Optimize text GL setup\n\nOnly performs the GL setup steps when at least one glyph is drawn.\nThis change also skips various draw operations when the specified\npaint draws with alpha \u003d 0.\n\nChange-Id: I9eda148b0503acffc552ee19196f5d52e958a1a2\n"
    },
    {
      "commit": "d90144db52c7297879b950cbbc85137ed123ab5b",
      "tree": "7c2bc1e65081419297a59f1b3fdfc2e4ca1a1c55",
      "parents": [
        "afd10322f598abfda973ad78117dd297e09de212"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue Mar 19 15:03:48 2013 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Mar 20 16:32:53 2013 -0700"
      },
      "message": "Update snapshot upon saveLayer deferral\n\nbug:8409891\n\nIn order to defer fbo-targetting saveLayer operations, it\u0027s necessary\nto update the snapshot at defer time so that deferred display state\n(namely, clip and transform) are fbo relative.\n\nRe-enables deferring, as the issues with saveLayer are fixed.\n\nChange-Id: I74b0779bc732675c747208f0757c3ea85f6dfbed\n"
    },
    {
      "commit": "4494599e5a4931426d5649e1d1c4f9db83824ae8",
      "tree": "987a2176952a5e871b80d2f9ab0468be9fb24d7d",
      "parents": [
        "fd81f91052d54c0354834fcd4f423025f2d8c93e",
        "a08f95cfeca7217f9c533b03663bf0dceedd259a"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Mar 20 22:22:44 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Mar 20 22:22:44 2013 +0000"
      },
      "message": "Merge \"Use snapshot alpha for layers\" into jb-mr2-dev"
    },
    {
      "commit": "ec3928bf0993e13fb82c65ac26a4d70f5bc6c5e4",
      "tree": "9dc08b2a14fcec17bd4e7f684f144af8b199eff1",
      "parents": [
        "4427db27b312b46cc34a83a893e522a6468ee396",
        "661a87ec28a49458f1faf533783abf2ab9927cab"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Mar 20 02:29:46 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Mar 20 02:29:47 2013 +0000"
      },
      "message": "Merge \"Reduce number of glDraw calls when drawing text\" into jb-mr2-dev"
    },
    {
      "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": "df9d2ba9b0b92608ea633bf04ffbef8d7ba3dd28",
      "tree": "13008d79fb703e175876db68ba31977cbb9362cc",
      "parents": [
        "2d18e52b00da92ca415b9da0aaac920a5e733f8b",
        "115096f50a560e64a7f95d37686d4861042c7aeb"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Mar 19 18:56:19 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Mar 19 18:56:19 2013 +0000"
      },
      "message": "Merge \"Minimize texture binds when drawing text\" into jb-mr2-dev"
    },
    {
      "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": "603ce559f290f369ef1a0d0744f1697b36e9c10e",
      "tree": "cad6d34ca3932cbc500989d22f7f08854f4c893b",
      "parents": [
        "16b7dc9c1ca4336b29afbd2f56f580014863add0",
        "d4289922ce772ed8e170a27d1c9521672b315698"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Mar 19 02:31:34 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Mar 19 02:31:35 2013 +0000"
      },
      "message": "Merge \"Apply ComposeShader\u0027s local matrix to children\" into jb-mr2-dev"
    },
    {
      "commit": "d4289922ce772ed8e170a27d1c9521672b315698",
      "tree": "211cddaef3df27355b6aa0029a39116c39b61c7e",
      "parents": [
        "c46d07a29e94807e768f8b162ce9f77a88ba6f46"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Mar 18 19:30:48 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Mar 18 19:30:48 2013 -0700"
      },
      "message": "Apply ComposeShader\u0027s local matrix to children\n\nChange-Id: Idf9b8e7d7b30f8fcd8ba1fd4bfe8991e9ca148e2\n"
    },
    {
      "commit": "16b7dc9c1ca4336b29afbd2f56f580014863add0",
      "tree": "45345d90604526ff3c35c319bd4bcd9fd2aa459c",
      "parents": [
        "a35d380bac61804551d4927df9595980373d2eff",
        "c46d07a29e94807e768f8b162ce9f77a88ba6f46"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Mar 19 02:04:29 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Mar 19 02:04:29 2013 +0000"
      },
      "message": "Merge \"Merge all shapes/paths caches to PathCache\" into jb-mr2-dev"
    },
    {
      "commit": "c46d07a29e94807e768f8b162ce9f77a88ba6f46",
      "tree": "9b6aec5f5dc1d73b6cd9d583d5c5c78285480070",
      "parents": [
        "338b18844434379de54050ff582d36ff6da3ba11"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Mar 15 19:06:39 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Mar 18 18:32:17 2013 -0700"
      },
      "message": "Merge all shapes/paths caches to PathCache\n\nThis change will greatly simplify the multi-threading of all\nshape types.\n\nThis change also uses PathTessellator to render convex paths.\n\nChange-Id: I4e65bc95c9d24ecae2183b72204de5c2dfb6ada4\n"
    },
    {
      "commit": "cada41aeb1e4cd87a94df2dfb4dd645309fe66ba",
      "tree": "85dd1a2069b6d88ba6dcec759d8be5e2bf0ac7ab",
      "parents": [
        "338b18844434379de54050ff582d36ff6da3ba11"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Mar 18 17:00:18 2013 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Mar 18 17:00:18 2013 -0700"
      },
      "message": "Work around saveLayer clipping/transform deferring issues\n\nbug:8409891\n\nDisables deferring\n\nChange-Id: I93498a4a45a5bfe01143faa154926c6a138db8f9\n"
    },
    {
      "commit": "d0afeac6dfc0856eeb72e6176ad6335e81871d24",
      "tree": "b850971ba9f3e12093fa550284b56f49e91df6ad",
      "parents": [
        "2e6ce4f737dcdeb748f467836dd12490c0cdfd22"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Mar 15 18:43:11 2013 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Mar 15 18:48:41 2013 -0700"
      },
      "message": "Reset draw modifiers after flushing\n\nbug:8401910\n\nThis avoids leaving the renderer in a state with stale pointers (to,\ne.g., shaders or color filters)\n\nChange-Id: Idf8b63657041352e70e34e91ea416fe4385d4bc2\n"
    },
    {
      "commit": "a08f95cfeca7217f9c533b03663bf0dceedd259a",
      "tree": "76be3f20c535d3f93d82624daa3a66d23765bdce",
      "parents": [
        "ff78583d8a73ca35ce65b5d2592570ff6fb9901b"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Mar 15 17:24:33 2013 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Mar 15 17:29:27 2013 -0700"
      },
      "message": "Use snapshot alpha for layers\n\nRemoves mMultipliedAlpha, using the snapshot alpha for all\nnon-overlapping display list alpha control.\n\nAdditionally, fixes opacity issues where children of\nhasOverlappingRendering\u003dfalse displaylists (both hw layer sublists and\nother sublists with hasOverlappingRendering\u003dfalse)\n\nChange-Id: I6adc16da855835f9f518f8967628e5d0135c789b\n"
    },
    {
      "commit": "f40b8a939fef0a19b40188f007a3364311d6dabf",
      "tree": "027797050b58bcb2d1bac153f980282a38ae49a0",
      "parents": [
        "30527267d12d4338820d4ec2526c6bf81c7f7785",
        "ff78583d8a73ca35ce65b5d2592570ff6fb9901b"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Mar 15 22:54:15 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Mar 15 22:54:16 2013 +0000"
      },
      "message": "Merge \"Fully deferred displaylist replay\" into jb-mr2-dev"
    },
    {
      "commit": "ff78583d8a73ca35ce65b5d2592570ff6fb9901b",
      "tree": "24e7da9e7434d4884130a33f9b312a77654df733",
      "parents": [
        "9105ce744ecd237d4c74f4ee3a5b204c72e10c96"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Mar 08 13:12:16 2013 -0800"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Mar 15 14:48:18 2013 -0700"
      },
      "message": "Fully deferred displaylist replay\n\nbug:8037003\n\nA recursive drawDisplayList call is now entirely deferred before\nplaying back to the screen and issuing GL commands. This way, the\nentire stream can be inspected, optimized, and batch work (such as\nuploading textures) before issuing commands.\n\nAdditionally, this fixes an issue where operations draw could move\nacross restores corresponding to saveLayer(alpha). Those and other\nsimilar cases (such as complex clipping, requiring the stencil) are\nnow treated as batching barriers, with the operations that change\nrenderer state in a way that\u0027s difficult to defer are just re-issued\nat flush time.\n\nChange-Id: Ie7348166662a5ad89fb9b1e87558334fb826b01e\n"
    },
    {
      "commit": "bd3055f95e67a55648fd84a125e939293115171b",
      "tree": "c22ae6a64fda750461de8a0defaf85d1a999ba07",
      "parents": [
        "0f809f3b794174f044366bf421f8d0c72d9afc14"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Mar 13 16:14:47 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Mar 13 16:14:47 2013 -0700"
      },
      "message": "Less aggressive glyphs precaching\n\nThe renderer used to pre-cache glyphs at record time. This then changed\nto pre-caching at the beginning of every frame. This unfortunately entails\na lot of duplicate work on every frame, which amounts to 0.5 to 1ms in\nsome stock applications.\n\nThis change is somewhere in the middle: pre-caching happens the first\ntime a DrawTextOp is deferred or every time the screen-space transform\nis different from the last pre-caching operation.\n\nChange-Id: Id6d9e2599d90a5b75010b0f0a28746befbf3c205\n"
    },
    {
      "commit": "0f809f3b794174f044366bf421f8d0c72d9afc14",
      "tree": "d4ca14f787cf7c511f5236637b5e3edb29d4c49f",
      "parents": [
        "d6c87ccde6722c7dedd05a18f30d8634893e10ee"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Mar 13 14:31:46 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Mar 13 14:32:45 2013 -0700"
      },
      "message": "Prevent infinite loop when trimming the path cache\n\nChange-Id: I04b5fa498336068f997c68d8613b35a99f67adbe\n"
    },
    {
      "commit": "5dc7fa709646799a5207a5d217f70aa02bf4a3aa",
      "tree": "3ebf45fa51bd0373f77aa451868df2d6ae1a8a87",
      "parents": [
        "8818d84a3540de6e53e5d82e2112292102574118"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Mar 11 20:48:31 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Mar 12 15:06:42 2013 -0700"
      },
      "message": "Add TaskManager API\n\nThis API can be used to run arbitrary tasks on a pool of worker\nthreads. The number of threads is calculated based on the number\nof CPU cores available.\n\nThe API is made of 3 classes:\n\nTaskManager\n      Creates and manages the worker threads.\n\nTask\n      Describes the work to be done and the type of the output.\n      A task contains a future used to wait for the worker thread\n      to be done computing the result of the task.\n\nTaskProcessor\n      The processor dispatches tasks to the TaskManager and is\n      responsible for performing the computation required by\n      each task. A processor will only be asked to process tasks\n      sent to the manager through the processor.\n\nA typical use case:\n\nclass MyTask: Task\u003cMyType\u003e\n\nclass MyProcessor: TaskProcessor\u003cMyType\u003e\n\nTaskManager m \u003d new TaskManager();\nMyProcessor p \u003d new MyProcessor(m);\nMyTask t \u003d new MyTask();\np.add(t);\n\n// Waits until the result is available\nMyType result \u003d t-\u003egetResult();\n\nChange-Id: I1fe845ba4c49bb0e1b0627ab147f9a861c8e0749\n"
    },
    {
      "commit": "2a2ead93a96b1e57098b5b6c14ec88906927d0cd",
      "tree": "78f99fde59752382105e4c529ba7187c26f587de",
      "parents": [
        "b13eb3e789dd1b26a38848e8aa27827e38fd9e9c",
        "ca89e2a68703bd428e8b66547d033a6ed35b3595"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Mar 12 01:43:20 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Mar 12 01:43:20 2013 +0000"
      },
      "message": "Merge \"Precache paths from a worker thread\" into jb-mr2-dev"
    },
    {
      "commit": "ca89e2a68703bd428e8b66547d033a6ed35b3595",
      "tree": "5661de81848f7d26559531a1ea650ed7fea2decd",
      "parents": [
        "6e2004089305cf2cd958b52b234459a49a4e5c83"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Mar 08 17:44:20 2013 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Mar 11 17:05:28 2013 -0700"
      },
      "message": "Precache paths from a worker thread\n\nChange-Id: I3e7b53d67e0e03e403beaf55c39350ead7f1e309\n"
    },
    {
      "commit": "294b512ecaa98a6a8ef12285ad14e7a4091b5d57",
      "tree": "d89983eed02f4cc3fc48fb50cd0d779ff345752b",
      "parents": [
        "2042cc403a6eba2de1c5220e8402b045bdf24192"
      ],
      "author": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Tue Feb 19 14:08:59 2013 -0800"
      },
      "committer": {
        "name": "Christopher Tate",
        "email": "ctate@google.com",
        "time": "Fri Mar 08 15:08:10 2013 -0800"
      },
      "message": "DO NOT MERGE - Full backup/restore now handles OBBs sensibly\n\nOBB backup/ restore is no longer handled within the target app\nprocess.  This is done to avoid having to require that OBB-using\napps have full read/write permission for external storage.\n\nThe new OBB backup service is a new component running in the\nsame app as the already-existing shared storage backup agent.\nThe backup infrastructure delegates backup/restore of apps\u0027\nOBB contents to this component (because the system process\nmay not itself read/write external storage).\n\nFrom the command line, OBB backup is enabled by using new\n-obb / -noobb flags with adb backup.  The default is noobb.\n\nFinally, a couple of nit fixes:\n\n- buffer-size mismatch between the writer and reader of chunked\n  file data has been corrected; now the reading side won\u0027t be\n  issuing an extra pipe read per chunk.\n\n- bu now explicitly closes the transport socket fd after\n  adopting it. This was benign but triggered a logged\n  warning about leaked fds.\n\n(Cherrypicked)\n\nChange-Id: I471f6348abcccb7bf1e1710b7beda9f23de53e14\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": "b09f1471262c3e629daacbc319bcefc2d621a484",
      "tree": "230927395ec54cd3af22e317d6c946d2dc376258",
      "parents": [
        "8afce816df7e8f668761f7ed443f54238958c49f"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Mar 07 17:01:05 2013 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Mar 07 17:03:25 2013 -0800"
      },
      "message": "Don\u0027t apply scale to glyphs when a perspective is set.\nBug #8337925\n\nMagazines uses very large scale factors that blow up font cache \u0026 CPU.\n\nChange-Id: I1c0ed430ed91b86cc6c6f59f7e8bdcc89a464e46\n"
    },
    {
      "commit": "8afce816df7e8f668761f7ed443f54238958c49f",
      "tree": "2b4d8c151e756b6f136c202160eaf46a610a72c3",
      "parents": [
        "0ffc81c1ada65b4ef4febaacf044e9fa62309b87"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Mar 06 19:09:59 2013 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Mar 06 19:09:59 2013 -0800"
      },
      "message": "Round scale factors to rasterize text\n\nHarder, better, faster, stronger.\n\nChange-Id: Iee4125de98c4e61603f56bb7f06002cc86458214\n"
    },
    {
      "commit": "624234f69b2a4781d24f3e4c6ae6450729e38397",
      "tree": "d6ae0bfd751e0e59329cb678c1d9f1cec447ee3e",
      "parents": [
        "0b58a3deab66c30a8d35072e55aac6279dd367cc"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Mar 05 16:43:31 2013 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Mar 05 18:12:35 2013 -0800"
      },
      "message": "Take only the scale params into account to rasterize text\n\nThis change extracts the scale parameters of the current transform\nto pass then to the font renderer. Rotation and perspective are\napplied to the generated mesh inside the vertex shader. This limits\nthe number of glyphs we have to create in the font cache and thus\nreduces memory churn.\n\nChange-Id: Ic5b3bae2b2b0e0250a8ee723b071a1709725c749\n"
    },
    {
      "commit": "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": "3b753829ae858d424fe109f714745379a6daf455",
      "tree": "2b4c370574319ff1cfbd5014be3748d17e362b4a",
      "parents": [
        "e78b8003a5870c0e80ed92c4df442871fb9d0b61"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Mar 05 10:27:35 2013 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Mar 05 10:27:35 2013 -0800"
      },
      "message": "Fix colored rects clipping and code cleanup\n\nThe drawColorRects() method was clipping individual rectangles\nusing the wrong parameters left, top, right and bottom instead\nof l, r, t and b. It also checked for count \u003d\u003d 0 after the loop\nwhen it should have checked for vertexCount \u003d\u003d 0. The quickReject\nis now not part of the loop since it\u0027s a bit overkill to perform\nso many matrix multiplications. What we really care about is the\nfinal quickReject performed on the max bounds of the entire set\nof rectangles.\n\nThis change also replaces all instances of mSnapshot-\u003etransform\nby currentTransform() to make the code slightly more readable.\n\nChange-Id: I6485280414499716852f7dbfba186774eb6763d4\n"
    },
    {
      "commit": "19d4dd8599cb870923ab349d2ab96cacffd9c6f5",
      "tree": "86b0575167b2c27642a1e7a7296be2de2877474a",
      "parents": [
        "cdac497289fd2c39a352f6167dae3f77cc608cb8"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Mar 04 11:14:26 2013 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Mar 04 13:48:43 2013 -0800"
      },
      "message": "Take text scale/skew into account only when rendering into a layer\n\n3D rotations can undo scale/skew transforms; since FreeType only accepts\n2x2 matrices we can end up generating very large glyphs that are drawn\nat a 1:1 scale on screen. For instance, if the current transform has a\nscale of 2000 set on both X and Y axis and a perspective Z factor set to\nZ, the actual scale factor on screen ends up being 1. We would however\ngenerate glyphs with a scale factor of 2000 causing the font renderer\nto blow up.\n\nChange-Id: Ia5c3618d36644e817825cb9c89e2f53aece2074e\n"
    },
    {
      "commit": "151b71cb5259eabf9bdcdc9248ba5100ad4c5bcf",
      "tree": "b2fb6e54b49d5f6c739b996a5c78f0d3c7374ca4",
      "parents": [
        "28459117a797bbf09ac589af4c8083a98fdbfb90",
        "874f5c6e4ac655b4f118074c90d51e6a44abe50c"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Sat Mar 02 02:08:17 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sat Mar 02 02:08:18 2013 +0000"
      },
      "message": "Merge \"Fix math issue when transforming text in perspective\" into jb-mr2-dev"
    },
    {
      "commit": "874f5c6e4ac655b4f118074c90d51e6a44abe50c",
      "tree": "3b7ac8426834bbe35a25a2c835d685188e8c0691",
      "parents": [
        "0f6675332c04c74909425d1d328f02b32c0ff40e"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Mar 01 18:07:35 2013 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Mar 01 18:07:35 2013 -0800"
      },
      "message": "Fix math issue when transforming text in perspective\n\nChange-Id: Iad6b4e477c11bd1ef5f0ceab2fabcd440030154d\n"
    },
    {
      "commit": "28459117a797bbf09ac589af4c8083a98fdbfb90",
      "tree": "7f7ac6407914e94599f5290c3052b90d9cf6895a",
      "parents": [
        "76f065d2e9d6354a59bb233b969c8417aff7223b",
        "0f6675332c04c74909425d1d328f02b32c0ff40e"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Sat Mar 02 00:13:17 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sat Mar 02 00:13:17 2013 +0000"
      },
      "message": "Merge \"Precache glyphs at final raster size\" into jb-mr2-dev"
    },
    {
      "commit": "0f6675332c04c74909425d1d328f02b32c0ff40e",
      "tree": "53a912c204ba470a0d6cd2c5701a1aef614cc7eb",
      "parents": [
        "8b5aa4846939975adacd6ea1d2a57a2493ac0216"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Mar 01 14:31:04 2013 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Mar 01 16:04:53 2013 -0800"
      },
      "message": "Precache glyphs at final raster size\n\nThe deferred display lists model now allows us to precache glyphs\nat their exact size on screen.\n\nThis change also removes debug markers when the renderer defers\nand reorders display lists. It also adds a flush event marker.\n\nChange-Id: I66ec5216dc12b93ecfdad52a7146b1cfb31fbeb4\n"
    },
    {
      "commit": "1da8a6a36df0389dd4c213a8f9698874c484c839",
      "tree": "617355ae8e988240ff421634b4d50ffee0dff43b",
      "parents": [
        "624de6854f42feb9d2761db857c6f36a47fabb25",
        "096b8d96d539429de5e67b2821ef3f9ee0300842"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Mar 01 19:42:38 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Mar 01 19:42:38 2013 +0000"
      },
      "message": "Merge \"Add shader program selection shortcut\" into jb-mr2-dev"
    },
    {
      "commit": "096b8d96d539429de5e67b2821ef3f9ee0300842",
      "tree": "c3e603e03eea99c186dda4f9563c8ec6afececb7",
      "parents": [
        "29466f85c06b7b58b2d058dcf293298fecdeb704"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Mar 01 11:08:11 2013 -0800"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Mar 01 11:11:31 2013 -0800"
      },
      "message": "Add shader program selection shortcut\n\nAdd a key manipulation that makes black text/paths use the standard\nsimple bitmap/patch shader, since they are the same. Previously we\u0027d\ncreate a separate shader for each because the keys differed, even\nthough the shaders were functionally equivalent.\n\nAlso fixes some issues around setting DEBUG_PROGRAM\n\nChange-Id: I0c77c684d58da03501ee9ab8239c7d4a70fd6b5c\n"
    },
    {
      "commit": "1361dff5eb54b9b02b4d1a2d3e2ed3afd216d79d",
      "tree": "18e0d63acf1641fa6eb4b0a204278b33fae5bf7c",
      "parents": [
        "f999879ce01117ea8ca292403a7104b0e7d46bdc",
        "a4adcf0239039eb8f005be252409901c41b28839"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Mar 01 00:05:51 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Mar 01 00:05:51 2013 +0000"
      },
      "message": "Merge \"Support 3D rotations when drawing text\" into jb-mr2-dev"
    },
    {
      "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": "d6960a49b40703e8af55c1fb628a2e0c5d2b40cf",
      "tree": "c9fc45717e8c6f7b58075aa2c54e7010a10c0a8c",
      "parents": [
        "29466f85c06b7b58b2d058dcf293298fecdeb704"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Feb 28 11:25:39 2013 -0800"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Feb 28 11:25:39 2013 -0800"
      },
      "message": "Account for text alignment in Op bounds calculation\n\nbug:8243821\n\nPreviously this wasn\u0027t done for deferred clipping + reordering, so\nnon-left-aligned text would be clipped at defer time, when it wouldn\u0027t\nhave been at draw time (in OpenGLRenderer::quickReject())\n\nChange-Id: Ic96949c2dca4378f284606b37d9411ed42f8d203\n"
    },
    {
      "commit": "19886f8b5109218191908d2ce5faf0293f85cf31",
      "tree": "21b9cf9c389d7c942dd0154aa35f28453edf226d",
      "parents": [
        "66dfcd465c02d78cb4ff22e7b509ee42d4309286",
        "c74f45a334f0e3725c23cdd270cbcb0efac4ea75"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Feb 28 01:05:33 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Feb 28 01:05:34 2013 +0000"
      },
      "message": "Merge \"Properly scale text\" into jb-mr2-dev"
    },
    {
      "commit": "c74f45a334f0e3725c23cdd270cbcb0efac4ea75",
      "tree": "1b198e8b6b7d6d4a69237116a580236836744294",
      "parents": [
        "d80806b305ce337283c24f14522cc58fea090b8c"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Feb 26 19:10:14 2013 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Feb 27 15:49:57 2013 -0800"
      },
      "message": "Properly scale text\n\nThis change does not apply to drawPosText() and drawTextOnPath() yet.\n\nPrior to this change, glyphs were always rasterized based on the\nfont size specified in the paint. All transforms were then applied\non the resulting texture. This creates rather ugly results when\ntext is scaled and/or rotated.\n\nWith this change, the font renderer will apply the current transform\nmatrix to the glyph before they are rasterized. This generates much\nbetter looking results.\n\nChange-Id: I0141b6ff18db35e1213e7a3ab9db1ecaf03d7a9c\n"
    },
    {
      "commit": "d041e476f3c959f5b373b64a329aa427d057375e",
      "tree": "5f7f48f3c9840cf061146de063cd894ccba486e3",
      "parents": [
        "d80806b305ce337283c24f14522cc58fea090b8c",
        "19a390bff348cd379caba1265faec77fcff29200"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Feb 27 23:48:16 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Feb 27 23:49:37 2013 +0000"
      },
      "message": "Merge \"Correct sub-hairline tessellation threshold\" into jb-mr2-dev"
    },
    {
      "commit": "d80806b305ce337283c24f14522cc58fea090b8c",
      "tree": "701d3e4ea59f356c20b273c3061b6206782206b9",
      "parents": [
        "122f4051b5c4d61044ba377b4b5fa10133ab7b37",
        "6c5b9be7450903762f676522c32d65f7545730df"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Feb 27 23:47:54 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Feb 27 23:47:55 2013 +0000"
      },
      "message": "Merge \"Fix T-junctions in layers\u0027 generated meshes\" into jb-mr2-dev"
    },
    {
      "commit": "19a390bff348cd379caba1265faec77fcff29200",
      "tree": "5b07f005526656b38e39f9c3b277985bb020fae5",
      "parents": [
        "be1a8cda3e8113d1fd3a6e56d8bc6c4f2d350423"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Feb 27 15:43:26 2013 -0800"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Feb 27 15:43:26 2013 -0800"
      },
      "message": "Correct sub-hairline tessellation threshold\n\nChange-Id: Id868d41a36db5b4daa762d84b6329f9c31916bce\n"
    },
    {
      "commit": "a6456d0d7ea2a65474b8a3db5dbf001880c40a71",
      "tree": "9e456a81714eaf92a8be5f6cd7b75a831e91c663",
      "parents": [
        "13e3891b20133d131ba61fa86bcd8b6ee1e50199",
        "768bffc9b814f6a1f7d9ff59d91285895c23bbe9"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Feb 27 22:16:22 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Feb 27 22:16:22 2013 +0000"
      },
      "message": "Merge \"Draw text drop shadows even when the text color is transparent\" into jb-mr2-dev"
    }
  ],
  "next": "6c5b9be7450903762f676522c32d65f7545730df"
}
