)]}'
{
  "log": [
    {
      "commit": "25d2f7bc1ff9b475eff75bfff647466e91dbacb2",
      "tree": "2a4dc136adae063c2018ce35bd3e8f9944a15d92",
      "parents": [
        "b776122a8aa9fd082fa8aaa216c8a589d709c4c9"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Tue Sep 10 13:12:09 2013 -0700"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Tue Sep 10 20:45:29 2013 +0000"
      },
      "message": "Fix scissor for functor invocation\n\n Bug: 10677765\n enableScissor() must precede setScissorFromClip() as\n otherwise setScissorFromClip() doesn\u0027t do anything.\n Also make sure to call setScissorFromClip() if\n enableScissor() returns true as enableScissor() calls\n resetScissor() if the scissor state has changed.\n\nChange-Id: I9226b20bb256c92066aae344e4e6407540b6eae9\n"
    },
    {
      "commit": "54f574acf4dd5483170b8f79e2f7c70b58763ce7",
      "tree": "8d97e104903d19019cb538fef06fac6597d384ba",
      "parents": [
        "5bc1ea4e4ae0133d4d5eaa4ac98cf4719effd032"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Aug 26 11:23:46 2013 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Aug 26 11:23:46 2013 -0700"
      },
      "message": "Move functor GL setup to just before functor\n\nbug:10399469\n\nBecause the stencil setup can issue draws, it *must* come before the\nGL state setup.\n\nChange-Id: I52a36213549fc60b091a90cbb923a1f0d35f9a65\n"
    },
    {
      "commit": "627c6fd91377ead85f74a365438e25610ef1e2ee",
      "tree": "3fad6c0a8a6fb3e4c88702b6a407a0fdd75be065",
      "parents": [
        "906da6bfe4092fda1daff63e00e9f2ce1daac00b"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Aug 21 11:53:18 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Aug 21 11:53:18 2013 -0700"
      },
      "message": "Add overdraw debugging that accounts for Deuteranomaly\n\nChange-Id: I31f68a07aa7cf0490d2572e24e4c5ac2066a1151\n"
    },
    {
      "commit": "003123004f7b23b3dc472d5c40b8c1a16df37a54",
      "tree": "974c2608d0f3f2477acb6da24b9a935f44952033",
      "parents": [
        "37ee68fc091f64e17c0ef29b123b782b6daecf16"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Aug 08 19:11:20 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Aug 09 03:52:29 2013 +0000"
      },
      "message": "Remove an unnecessary allocation\n\nAlso remove dead code from OpenGLRenderer.cpp\n\nChange-Id: I7eb54ca19e77ee3c32f1fe9513a031e6b2e115cf\n(cherry picked from commit 5c7d5ab878b26f855175a3305a14ac12fcacf25e)"
    },
    {
      "commit": "b213cec0ce659c1e35c3e7f60a61bae38d94482a",
      "tree": "3fc40dd88060676ff462c836a548615ddef05ffe",
      "parents": [
        "03ed0127dae141d99b003ede9ba3ea937128e471",
        "5e49b307eb99269db2db257760508b8efd7bb97d"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Aug 02 20:34:38 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Aug 02 20:34:38 2013 +0000"
      },
      "message": "Merge \"Fix quickReject\u0027s handling of AA ramp geometry\""
    },
    {
      "commit": "5e49b307eb99269db2db257760508b8efd7bb97d",
      "tree": "18c9f02b947e99fe8aa5b27074725b11fc6df2ba",
      "parents": [
        "cb9accefb19ba6ae6fd449dc9ab62e972b51335c"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue Jul 30 19:05:20 2013 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Aug 02 11:29:22 2013 -0700"
      },
      "message": "Fix quickReject\u0027s handling of AA ramp geometry\n\nBy having quickReject round out the window-space geometry bounds, we\nprevent the AA perimeter (which falls outside the local bounds passed\nin) from drawing outside the clip.\n\nChange-Id: I8ee36be9039a9c47906815ee2f0dbaa5eb910b82\n"
    },
    {
      "commit": "b7b93e00893f5c690a96bd3e0e10583bc5721f83",
      "tree": "89c975e81ab527630ab4c10478b80bca12593d24",
      "parents": [
        "5d3dff1d66f99fbd5bef9178e62d789119c02ad1"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Aug 01 15:29:25 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Aug 01 15:35:24 2013 -0700"
      },
      "message": "Fix region clipping bugs\nSee external bug #58344\n\nChange-Id: Iecd6c41fc8076cd76add2335d3442a6dd8878f12\n"
    },
    {
      "commit": "1e546815bbb736c50679a8aefc25f48561026fc5",
      "tree": "11a3b7106638c123d052d50ce3e2a1757e004cb4",
      "parents": [
        "3a6f25512c0a682b10961a5a7428e3393ffb0b75"
      ],
      "author": {
        "name": "Victoria Lease",
        "email": "violets@google.com",
        "time": "Tue Jun 25 14:25:17 2013 -0700"
      },
      "committer": {
        "name": "Victoria Lease",
        "email": "violets@google.com",
        "time": "Wed Jul 31 15:50:47 2013 -0700"
      },
      "message": "Support RGBA fonts and bitmap fonts (and RGBA bitmap fonts)\n\nQuite a few things going on in this commit:\n\n- Enable bitmap strikes by default in Paint objects.\n\nThe SkPaint parameter that enables bitmap strikes was not previously\nincluded in DEFAULT_PAINT_FLAGS. This effectively disabled bitmap\nfonts. Oops! It\u0027s for the best, though, as additional work was needed\nin Skia to make bitmap fonts work anyway.\n\n- Complain if TEXTURE_BORDER_SIZE is not 1.\n\nOur glyph cache code does not currently handle any value other than 1\nhere, including zero. I\u0027ve added a little C preprocessor check to\nprevent future engineers (including especially future-me) from\nthinking that they can change this value without updating the related\ncode.\n\n- Add GL_RGBA support to hwui\u0027s FontRenderer and friends\n\nThis also happened to involve some refactoring for convenience and\ncleanliness.\n\nBug: 9577689\nChange-Id: I0abd1e5a0d6623106247fb6421787e2c2f2ea19c\n"
    },
    {
      "commit": "98427708a81eefcc24ae29e2f22e55f1ae44c927",
      "tree": "b541f690c964d8bce9562a93203dd7aeb5ad909b",
      "parents": [
        "fd23eca5ba30a1624233c9597f8c4b9db790994b",
        "9ab2d1847552aa4169b4325aae1b1368d6947a9f"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Jul 22 23:31:18 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jul 22 23:31:20 2013 +0000"
      },
      "message": "Merge \"Ensure glActiveTexture is cleaned up correctly on functor resume\""
    },
    {
      "commit": "9ab2d1847552aa4169b4325aae1b1368d6947a9f",
      "tree": "52955e896e6f021961bbfc9dd52003c918fdbb50",
      "parents": [
        "7bfddb5434736a26fa9b32d7cd1741067169ae74"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Jul 22 16:16:06 2013 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Jul 22 16:21:55 2013 -0700"
      },
      "message": "Ensure glActiveTexture is cleaned up correctly on functor resume\n\nChange-Id: I103d7d63b17289d599c2c08dcc442cfba9b8e51d\n"
    },
    {
      "commit": "448455fe783b0a711340322dca272b8cc0ebe473",
      "tree": "e67a3894b8d1fc2cdfd08e7f45ff54c37070d279",
      "parents": [
        "e4d4e20e8f84d53b4b7198300baaf3e21ff9be58"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Jul 22 13:57:50 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Jul 22 14:37:21 2013 -0700"
      },
      "message": "Use global indices array to draw layers\n\nAn array of indices local to a layer would only be necessary if\nwe changed the way we resolve T-junctions. Since we only ever\ndraw quads, let\u0027s just use the indices we use everywhere else.\n\nThis change also uses the global indices array to render list\nof colored rectangles to save on the number of vertices generated\nCPU-side.\n\nChange-Id: Ia6d1970b0e9247805af5a114ca2a84b5d0b7c282\n"
    },
    {
      "commit": "ecca6da4eab601f05a9d977c8d2651068b6e16b2",
      "tree": "d7b3d39eb65155174cafe6c3033be0917bde15ed",
      "parents": [
        "e77d6dd94371b97a8fac21a60b804b4f99559eab"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue Jul 16 13:27:18 2013 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue Jul 16 13:27:18 2013 -0700"
      },
      "message": "Support stencil-based clipping for functors\n\nbug:9070351\nChange-Id: I1c54e1bea1b84b1619cce27b14f189b42cab7062\n"
    },
    {
      "commit": "c36fe2fc5354fadc140c898f59d47859cbdeac67",
      "tree": "a238c4eb527573da5ecbc3ac4c31a240a4a1eb3c",
      "parents": [
        "1e09cfaa689cff21d3d00883d38af5c296859fdb",
        "55e789dbc782be0dcaf1d4bae5f32e9e2f674152"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Jun 28 11:15:02 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Fri Jun 28 11:15:02 2013 -0700"
      },
      "message": "am 55e789db: am ed96349a: am 3d1b158e: Merge \"Fix out of range glCopyTexImage2D Bug #9425270\" into jb-mr2-dev\n\n* commit \u002755e789dbc782be0dcaf1d4bae5f32e9e2f674152\u0027:\n  Fix out of range glCopyTexImage2D Bug #9425270\n"
    },
    {
      "commit": "b254c242d98f4a9d98055726446351e52bece2c6",
      "tree": "69df91645e499216cadb4e9ba11e57bc32b2d681",
      "parents": [
        "e6cb43a1ea50681d2da30ce5e8cb5ac97e80e88a"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jun 27 17:15:24 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jun 27 17:15:24 2013 -0700"
      },
      "message": "Fix out of range glCopyTexImage2D\nBug #9425270\n\nA better solution would be to use glCopyTexImage2D whenever possible but\nthis change would be a little more dangerous.\n\nChange-Id: Ib1aaceda39d838716285ef97f356721416822dbb\n"
    },
    {
      "commit": "55b6f95ee4ace96c97508bcd14483fb4e9dbeaa0",
      "tree": "f66490c89db4ac96004144731a89d1956108f1a0",
      "parents": [
        "9feab843ac8139f4e971d93fd767470d0d727e41"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jun 27 15:27:09 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jun 27 15:40:46 2013 -0700"
      },
      "message": "Track the atlas\u0027 generation ID\nBug #9589379\n\nIf the atlas is terminated/reinitialized and a view does not invalidate\nin between it might end up using a stale AssetAtlas::Entry. This change\nis similar to how 9patch meshes are cached in DrawPatchOp: we simply\ntrack the generation ID of the cache to make sure we always use the\nlatest data.\n\nChange-Id: Ib5abb3769d2ce0eabe9adc04e320ca27c422019e\n"
    },
    {
      "commit": "0e87f00f8cb79635aa70b9a2dfa02bf19dc7473d",
      "tree": "f109c7a20dc65947e8d69cd274a10b512a46d940",
      "parents": [
        "2c290392c9a934f9ac48364af01c848b01ba8e80"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Jun 19 16:54:59 2013 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Jun 21 13:16:31 2013 -0700"
      },
      "message": "Initialize MergingDrawBatch clip with viewport bounds\n\nThis allows merged, clipped operations to behave correctly within a\nsavelayer, even if the base viewport has a large offset.\n\nAdditionally, disregard opaqueness when within a\ncomplexclip/savelayer, as the coverage can\u0027t be trusted.\n\nChange-Id: Ic908b82a4bb410bc7fac1b4295f4874ed166efc5\n"
    },
    {
      "commit": "03c00b5a135e68d22ca5bb829b899ebda6ed7e9d",
      "tree": "7538aa95ebbfb5c06aaaebbd22966cddcce2ee1e",
      "parents": [
        "d485ef27c795648c4a05c4c089e8c5a15712fd36"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jun 20 18:30:28 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Jun 21 10:13:58 2013 -0700"
      },
      "message": "Batch 9-patches in a single mesh whenever possible\n\nThis change also fixes the way batched bitmaps were handled\ninside a layer. The layer is now correctly dirtied to minimize\nthe amount of pixels to blend.\n\nFix alpha, mode and opaque computations for DrawPatchOp.\n\nChange-Id: I1b6cd581c0f0db66c1002bb4fb1a9811e55bfa78\n"
    },
    {
      "commit": "fb5a41a371e540f402e3dd987b0fbf92d1267902",
      "tree": "4ac7697c19cef2444e9d48fbe32e4de602cecd34",
      "parents": [
        "ff4ea7987714dad4f4d9065902f0ac5fd61833fd",
        "2458939b5f926176a485a3196f59688eed78e858"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jun 19 23:40:57 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jun 19 23:40:57 2013 +0000"
      },
      "message": "Merge \"Fix regression: TextureView.setAlpha() was ignored\""
    },
    {
      "commit": "2458939b5f926176a485a3196f59688eed78e858",
      "tree": "fc608a8ae818144c69f679e059adb1fa198e01aa",
      "parents": [
        "31e08e953fe7bdb1b1cbc247156cb6a19917a2f1"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jun 19 12:17:01 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jun 19 12:17:01 2013 -0700"
      },
      "message": "Fix regression: TextureView.setAlpha() was ignored\n\nChange-Id: I9f43eec0fe23a65dcc1cf9cd0ac1f5e8907786a7\n"
    },
    {
      "commit": "cadc5bf4116945a1800061f984d95175e20caba6",
      "tree": "e56682c2d1325a06ef7a5b4c66444d9876d932b0",
      "parents": [
        "1f54f9246e500042a42fde627ce5c438c8da895d",
        "31e08e953fe7bdb1b1cbc247156cb6a19917a2f1"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jun 19 19:16:21 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jun 19 19:16:21 2013 +0000"
      },
      "message": "Merge \"Share Caches\u0027 index buffer with FontRenderer\""
    },
    {
      "commit": "31e08e953fe7bdb1b1cbc247156cb6a19917a2f1",
      "tree": "a9b1d4f934c40a6c1a6e3c32e10451fc323ebaea",
      "parents": [
        "2d5945e88731787babce1061f44cd54f02eeefc5"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jun 18 15:53:53 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jun 18 15:53:53 2013 -0700"
      },
      "message": "Share Caches\u0027 index buffer with FontRenderer\n\nThis reduces state changes when we draw 9patches and text together,\nwhich happens *a lot*. Also disable the NV profiling extension by\ndefault since it doesn\u0027t play nice with display lists deferrals.\nTo enable it set debug.hwui.nv_profiling to true.\n\nChange-Id: I518b44b7d294e5def10c78911ceb9f01ae401609\n"
    },
    {
      "commit": "36d38cb904556025b76c6d98f9fe2ccfa1c8a304",
      "tree": "ce339566cfe52d099f529241460fcac508fdcda6",
      "parents": [
        "f0542ee466372a29ebaa3c1ea1f362c353a28f4a",
        "d72b73cea49f29c41661e55eb6bfdbc04f09d809"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Jun 17 21:02:56 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jun 17 21:02:56 2013 +0000"
      },
      "message": "Merge \"Better handle op size edge cases\""
    },
    {
      "commit": "d72b73cea49f29c41661e55eb6bfdbc04f09d809",
      "tree": "e6782e49ac767cd62e22ca8e44f18eb3977bb1e6",
      "parents": [
        "4aaf8b3d4b160aea5ceb5ccf799e44c1d5a3f14b"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Jun 17 13:52:06 2013 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Jun 17 13:52:06 2013 -0700"
      },
      "message": "Better handle op size edge cases\n\nbug:9464358\n\nPreviously, empty and unknown sized ops are assumed to fully cover\ntheir clip. This is now corrected such that empty sized ops are\npre-rejected before defer. Additionally, unknown sized ops disable\noverdraw avoidance.\n\nChange-Id: Icf2ce24f98be5ea6299e24ffcf826790373564a1\n"
    },
    {
      "commit": "fb5c9050978afad2c1df570a13a6747f438c27f7",
      "tree": "5ad303b8842436dccb104e46d19aea14d5617cfb",
      "parents": [
        "61e1ca68fa82e5228b5bfcdad8deecd9383fb183",
        "e93482f5eac3df581d57e64c2a771a96aa868585"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Jun 17 20:39:45 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Jun 17 20:39:45 2013 +0000"
      },
      "message": "Merge \"Cancel layer update when a layer is about to be destroyed Bug #9310706\""
    },
    {
      "commit": "e93482f5eac3df581d57e64c2a771a96aa868585",
      "tree": "009afbdf49655b35ee29f857aa554a42c4e96048",
      "parents": [
        "6410c0aaf13c9aec606b90ee942f2ac2d98b1609"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Jun 17 13:14:51 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Jun 17 13:35:03 2013 -0700"
      },
      "message": "Cancel layer update when a layer is about to be destroyed\nBug #9310706\n\nChange-Id: I73eea6314c326f15a979617e3a05b525935f0d3f\n"
    },
    {
      "commit": "a02c4ed885d97e516f844ddb0a96083f1b45b4cb",
      "tree": "74a79cf96d32b37ee36c9308170aa3643093dce5",
      "parents": [
        "5f73a7df6dccd61ee2596ece7e9e3c66a7a58339"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Jun 14 13:43:58 2013 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Jun 14 13:43:58 2013 -0700"
      },
      "message": "Fix clip merging behavior\n\nPreviously, a new op with a clipped side could be added to a\nMergingDrawBatch without considering the batch\u0027s current bounds.\n\nChange-Id: I1b873ecf821bad7cda6630c3f311edd90ac5cc8c\n"
    },
    {
      "commit": "39a908c1df89e1073627b0dcbce922d826b67055",
      "tree": "ff2549616c210443c773bef7c1c35391d8ee6d99",
      "parents": [
        "6db1054692495be7413d0fcc49a0f26c179d6fed"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Jun 13 14:39:01 2013 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Jun 13 16:16:13 2013 -0700"
      },
      "message": "Fix various draw ops that may incorrectly not scissor\n\nbug:8965976\n\nAlso consolidates quickReject scissor-ing and scissor-less paths.\nRenamed plain \u0027quickReject\u0027 method, as it has sideEffects beyond what\nthe java and skia canvases do.\n\nChange-Id: I4bdf874d3c8f469d283eae1e71c5e7ea53d47016\n"
    },
    {
      "commit": "7112fddbe26acb12f478f4e77ff9607b523180b4",
      "tree": "1ecc0d7566dbb88ed71bc36811f7fddb412a6ae6",
      "parents": [
        "512d8fbe51186967d4a3db9f4b3a3b0f335557fe",
        "405436021da156fbe3c5d4de48bdefa564cf7fc0"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jun 13 01:19:46 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jun 13 01:19:46 2013 +0000"
      },
      "message": "Merge \"Restore buildLayer()\u0027s old behavior; it\u0027s synchronous again Bug #9193833\""
    },
    {
      "commit": "405436021da156fbe3c5d4de48bdefa564cf7fc0",
      "tree": "339d70e2c2e90f87a5c303e7167fe9db0508ed64",
      "parents": [
        "97f41383eb2bb098767ca153e470009fea810540"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jun 12 15:31:28 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jun 12 15:31:28 2013 -0700"
      },
      "message": "Restore buildLayer()\u0027s old behavior; it\u0027s synchronous again\nBug #9193833\n\nChange-Id: I4ee07e65c0a8967f0b55da030ecaad6dfc46136f\n"
    },
    {
      "commit": "28ce94a4ffc7576f40776d212f1ada79fafaa061",
      "tree": "644d590fb3ccb5db34ecf68bb3360923f3d65c29",
      "parents": [
        "97f41383eb2bb098767ca153e470009fea810540"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri May 31 11:38:03 2013 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Jun 12 14:46:52 2013 -0700"
      },
      "message": "Overdraw avoidance and merging of clipped ops\n\nbug:8951267\n\nIf an opaque op, or group of opaque ops covers the invalidate region,\nskip draw operations that precede it.\n\nClipped operations may now be merged, but only if they share a\nclipRect - this is a very case for e.g. ListView, where all background\nelements may now be a part of the same MergingDrawBatch.\n\nIt is this more aggressive merging that groups together clipped\nbackground elements in the ListView case, enabling the overdraw\navoidance skipping the window background.\n\nChange-Id: Ib0961977e272c5ac37f59e4c67d828467422d259\n"
    },
    {
      "commit": "4c2547fa9244e78115cde0a259291053108c3dc7",
      "tree": "4337937e216918e4febe861daa7ef093b99aff03",
      "parents": [
        "fadd2081443dd2f59f8e8143256a34b7485fe72e"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jun 11 16:19:24 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jun 11 17:14:59 2013 -0700"
      },
      "message": "Avoid 9patch cache lookups when possible\n\nThis optimization saves up to 0.3ms per frame on the Play Store\u0027s\nfront page, on a Nexus 4 device.\n\nChange-Id: Iaa4ef33c6e3b37e175efd5b9eea9ef59b43f14f3\n"
    },
    {
      "commit": "8aa195d7081b889f3a7b1f426cbd8556377aae5e",
      "tree": "6cd0ab4181c25d3113c4e39b49e8f8a0c7d12b8b",
      "parents": [
        "84f3c5689cffbfc1e45a0101d5bb636323769f54"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jun 04 18:00:09 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jun 04 18:58:36 2013 -0700"
      },
      "message": "Introduce Caches::bindTexture() to reduce glBindTexture calls\n\nChange-Id: Ic345422567c020c0a9035ff51dcf2ae2a1fc59f4\n"
    },
    {
      "commit": "a404e16e4933857464046d763ed7629cd0c86cbf",
      "tree": "fec5bfa47138b29d22b25b9d87dc84ebfea7f1e6",
      "parents": [
        "64770d16b0907a8e1ee81ef6c8fa398a6bdbee79"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri May 24 16:19:19 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri May 24 16:19:19 2013 -0700"
      },
      "message": "Make sure atlas antries can correctly filter/wrap textures\n\nThe virtual textures would each have their own values for wrapping\nand filtering which could lead to conflict and/or extraneous GL\ncommands being issued.\n\nChange-Id: I64cb59a03e598f46bf645bd1d30fccfa63a07431\n"
    },
    {
      "commit": "7f77736599c39cdd5540168fc652cf6846799a33",
      "tree": "d37082cd742d57d27ec7469e9fa4e49499b24f9e",
      "parents": [
        "41541825bc90dac740e424cdd41a8c997e15cdb7",
        "2db5e993b626794eb07a0ff354269f9a77da81b3"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed May 22 00:43:48 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed May 22 00:43:48 2013 +0000"
      },
      "message": "Merge \"Merge scaled bitmaps with translated bitmaps\""
    },
    {
      "commit": "2db5e993b626794eb07a0ff354269f9a77da81b3",
      "tree": "97d5bfdcbc76c68de765015b64b5297128e02c5c",
      "parents": [
        "779321fde1c6461884b521c2ce7134468e085ba5"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue May 21 15:29:59 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue May 21 17:42:43 2013 -0700"
      },
      "message": "Merge scaled bitmaps with translated bitmaps\n\nChange-Id: I03089f48f97b69fcb4a0171984d3ff548d41c4a8\n"
    },
    {
      "commit": "41541825bc90dac740e424cdd41a8c997e15cdb7",
      "tree": "c06c9c12d2d67381014c22dca77f22478825e642",
      "parents": [
        "7f43674db314ab76e77cfd2a9488058eae144aa8"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri May 03 16:35:54 2013 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue May 21 23:04:05 2013 +0000"
      },
      "message": "Use individual glyph positions to determine text bounds.\n\nbug:8766924\n\nPreviously text bounds were calculated to be from 0 to totalAdvance in\nthe X, and from the font\u0027s top to bottom. These are incorrect,\nespecially in light of the font fallback mechanism.\n\nNow, we calculate the bounds of the text as we layout each glyph.\nSince these are much tighter bounds in the common case, this\nsignificantly reduces the amount of clipping required (which in turn\nenables more aggressive text merging).\n\nChange-Id: I172e5466bf5975bf837af894a9964c41db538746\n"
    },
    {
      "commit": "6d29c8d5218cac0fb35f3b7c253f2bdebd44f15a",
      "tree": "e7b76c068ff3e8485fdc164118914ee3b53a2368",
      "parents": [
        "0ace0aa7d643b5b9952d32827575f041ba563c58"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed May 08 18:35:44 2013 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue May 14 14:12:55 2013 -0700"
      },
      "message": "Add tessellation path for points\n\nbug:4351353\nbug:8185479\n\nPoint tessellation is similar to line special case, except that we\nonly tessellate one point (as a circle or rect) and duplicate it\nacross other instances.\n\nAdditionally:\n\nFixes square caps for AA\u003dfalse lines\n\nCleanup in CanvasCompare, disabling interpolation on zoomed-in\ncomparison view\n\nChange-Id: I0756fcc4b20f77878fed0d8057297c80e82ed9dc\n"
    },
    {
      "commit": "72bd95b8feb7ef41eb5dd00003b1aed8f30f4abe",
      "tree": "9aa31d7268cdc556acf038536a9faf9efd4c7e05",
      "parents": [
        "94268b0dd908ea003772e24bec12cea473434486",
        "b90ff505df143abd957cfc19b60727e3460ee68c"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon May 06 13:56:23 2013 -0700"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Mon May 06 13:56:23 2013 -0700"
      },
      "message": "am b90ff505: am fdf13c90: Merge \"Convert alpha from [0..1] to [0.255] range Bug #8808886\" into jb-mr2-dev\n\n* commit \u0027b90ff505df143abd957cfc19b60727e3460ee68c\u0027:\n  Convert alpha from [0..1] to [0.255] range Bug #8808886\n"
    },
    {
      "commit": "87b515cde53f3c8cc3fdf698c100e67508487e59",
      "tree": "f10b98ca590c33f7b789aa92a18d57f74f781b46",
      "parents": [
        "d3956321c173beb1fb096b5171e76ba7b7e1bc1e"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri May 03 17:42:27 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri May 03 17:42:27 2013 -0700"
      },
      "message": "Convert alpha from [0..1] to [0.255] range\nBug #8808886\n\nWithout this conversion, alpha was always set to 0 or 1 which causes\nthings to disappear mysteriously. Mysteries are meant to be solved\nand I solved them all in 6 characters.\n\nChange-Id: I2078420fbe968c046e999b0eabb24403e71108fd\n"
    },
    {
      "commit": "78dd96d5af20f489f0e8b288617d57774ec284f7",
      "tree": "742b702647ae37e196021707fa45cbb8568353e1",
      "parents": [
        "927bc7d72048ac90e3b95845699efb479b5589b4"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri May 03 14:24:16 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri May 03 17:08:20 2013 -0700"
      },
      "message": "Add an on-screen overdraw counter\n\nThe counter can be enabled by setting the system property called\ndebug.hwui.overdraw to the string \"count\". If the string is set\nto \"show\", overdraw will be highlighted on screen instead of\nprinting out a simple counter.\n\nChange-Id: I9a9c970d54bffab43138bbb7682f6c04bc2c40bd\n"
    },
    {
      "commit": "3b748a44c6bd2ea05fe16839caf73dbe50bd7ae9",
      "tree": "ea104e727beba793c10952f5b328478020859599",
      "parents": [
        "dd424cf079d2677e9333d89466f93166787e61c8"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Apr 17 18:54:38 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu May 02 13:32:09 2013 -0700"
      },
      "message": "Pack preloaded framework assets in a texture atlas\n\nWhen the Android runtime starts, the system preloads a series of assets\nin the Zygote process. These assets are shared across all processes.\nUnfortunately, each one of these assets is later uploaded in its own\nOpenGL texture, once per process. This wastes memory and generates\nunnecessary OpenGL state changes.\n\nThis CL introduces an asset server that provides an atlas to all processes.\n\nNote: bitmaps used by skia shaders are *not* sampled from the atlas.\nIt\u0027s an uncommon use case and would require extra texture transforms\nin the GL shaders.\n\nWHAT IS THE ASSETS ATLAS\n\nThe \"assets atlas\" is a single, shareable graphic buffer that contains\nall the system\u0027s preloaded bitmap drawables (this includes 9-patches.)\nThe atlas is made of two distinct objects: the graphic buffer that\ncontains the actual pixels and the map which indicates where each\npreloaded bitmap can be found in the atlas (essentially a pair of\nx and y coordinates.)\n\nHOW IS THE ASSETS ATLAS GENERATED\n\nBecause we need to support a wide variety of devices and because it\nis easy to change the list of preloaded drawables, the atlas is\ngenerated at runtime, during the startup phase of the system process.\n\nThere are several steps that lead to the atlas generation:\n\n1. If the device is booting for the first time, or if the device was\nupdated, we need to find the best atlas configuration. To do so,\nthe atlas service tries a number of width, height and algorithm\nvariations that allows us to pack as many assets as possible while\nusing as little memory as possible. Once a best configuration is found,\nit gets written to disk in /data/system/framework_atlas\n\n2. Given a best configuration (algorithm variant, dimensions and\nnumber of bitmaps that can be packed in the atlas), the atlas service\npacks all the preloaded bitmaps into a single graphic buffer object.\n\n3. The packing is done using Skia in a temporary native bitmap. The\nSkia bitmap is then copied into the graphic buffer using OpenGL ES\nto benefit from texture swizzling.\n\nHOW PROCESSES USE THE ATLAS\n\nWhenever a process\u0027 hardware renderer initializes its EGL context,\nit queries the atlas service for the graphic buffer and the map.\n\nIt is important to remember that both the context and the map will\nbe valid for the lifetime of the hardware renderer (if the system\nprocess goes down, all apps get killed as well.)\n\nEvery time the hardware renderer needs to render a bitmap, it first\nchecks whether the bitmap can be found in the assets atlas. When\nthe bitmap is part of the atlas, texture coordinates are remapped\nappropriately before rendering.\n\nChange-Id: I8eaecf53e7f6a33d90da3d0047c5ceec89ea3af0\n"
    },
    {
      "commit": "4a2bff7b387403ac976cd041cb5a1b57afa44d9c",
      "tree": "235677253345a16decf6519e76131c05882f6fa5",
      "parents": [
        "7ffb2fb3daf05459267745643689cc0e5875e659"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue Apr 16 13:50:16 2013 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Apr 22 15:00:52 2013 -0700"
      },
      "message": "Avoid incorrectly dirtying the functor output rect\n\nbug:8640186\nChange-Id: I360cb85e59cfdd0b499561e92b81089341d07046\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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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": "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"
    },
    {
      "commit": "6c5b9be7450903762f676522c32d65f7545730df",
      "tree": "4f0930eca0d1481506628100dbc3def1bdf24c45",
      "parents": [
        "be1a8cda3e8113d1fd3a6e56d8bc6c4f2d350423"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Feb 27 14:03:19 2013 -0800"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Feb 27 14:03:19 2013 -0800"
      },
      "message": "Fix T-junctions in layers\u0027 generated meshes\n\nbug:4128442\n\nCurrently we fix T-junctions for hardware layers, and for\nCanvas.saveLayer if the transform isn\u0027t rectAsRect. Ideally, hardware\nlayers should lazily re-generate T-junction free geometry if the\ntransform becomes non-rectAsRect\n\nDepends on frameworks/native change:\nhttps://googleplex-android-review.googlesource.com/#/c/277668/\nwhich adds Region::createTJunctionFreeRegion()\n\nChange-Id: Ice75b4a1a4459ff835059ea81d70f7d1563fd96d\n"
    },
    {
      "commit": "768bffc9b814f6a1f7d9ff59d91285895c23bbe9",
      "tree": "49da21e344249af8273fe418e13fe03235eb9c76",
      "parents": [
        "c0e55bd3cfe1d7be2276e4f528fee2231763a5c1"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Feb 27 13:50:45 2013 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Feb 27 13:52:26 2013 -0800"
      },
      "message": "Draw text drop shadows even when the text color is transparent\n\nThis matches Skia\u0027s behavior.\n\nChange-Id: Ibf0a52611f5801cfa68169f66ab0ec06f256600f\n"
    },
    {
      "commit": "758724fd09a1599f2c55130f81953cfa6c17c300",
      "tree": "ca84f352115851317bf012534a69d748def6092e",
      "parents": [
        "c0e55bd3cfe1d7be2276e4f528fee2231763a5c1"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Feb 27 11:53:12 2013 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Feb 27 11:53:12 2013 -0800"
      },
      "message": "Don\u0027t increment the paint\u0027s generation ID when drawing bitmaps\n\nWhen the renderer draws a bitmap as part of a display list with an\nalpha \u003c 1.0f, the paint is temporarily modified to alter the opacity\nof the bitmap. This has the side effect of increasing the paint\u0027s\ngeneration ID counter which can break paint caching.\n\nChange-Id: I5055d059ad1639829fa50af3d946e296c4dab877\n"
    },
    {
      "commit": "3ff0bfdd144bba3b023eda8c49b25fb0d0de8653",
      "tree": "cfc94ccf18fb1bfaaefb1241c700900a32276acf",
      "parents": [
        "01d159d88a51c44d7e282e07b834535e5b0e8bd1"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Feb 25 14:15:37 2013 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Feb 25 15:01:58 2013 -0800"
      },
      "message": "Add new property to debug non-rectangular clip operations\n\nThis change adds a new property called \"debug.hwui.show_stencil_clip\"\nthat accepts the following values:\n\n- \"highlight\", colorizes in green any drawing command that\u0027s tested\n  against a non-rectangular clip region\n- \"region\", shows the non-rectangular clip region in blue every time\n  it is used\n- \"hide\", default value, nothing is shown\n\nChange-Id: I83c8602310edc4aaeb8b905371cdd185b17d32b5\n"
    },
    {
      "commit": "505d1d64eda6e47caabf8701cb39ec9b176b3238",
      "tree": "99fa418bf15f26afdcfddc1ae1936e4de809ddfa",
      "parents": [
        "ec39a94ac299e57c800a82814651c713f3a5f5c7",
        "7031ff68bb998dbbd7caf3b2fd75eef747a86725"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Feb 22 21:45:56 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 22 21:45:57 2013 +0000"
      },
      "message": "Merge \"Prettify display lists logging\""
    },
    {
      "commit": "7031ff68bb998dbbd7caf3b2fd75eef747a86725",
      "tree": "0a2ae84a624a03136f5b5d82fa8885c207d650e7",
      "parents": [
        "e72409fe779f620382c5bd0b82f4a32ac91d9fe4"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Feb 22 11:48:16 2013 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Feb 22 11:51:15 2013 -0800"
      },
      "message": "Prettify display lists logging\n\nThis change makes it a lot easier to see the tree structure.\n\nChange-Id: I4969abd1eb010f1d529671f8d86dc4c930be24f6\n"
    },
    {
      "commit": "94b97b38b749d50c8693a044dd2688328cca863e",
      "tree": "6fedcbbe4e60867fb6776bc89ab90abace1f3e8f",
      "parents": [
        "4e89d1a9b25b4bca47bd8c7cb22b72ed4bbbfd1e",
        "eab51de4de88219256260fe26e2018a6234ef83b"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Feb 21 19:31:17 2013 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Feb 21 19:31:17 2013 -0800"
      },
      "message": "am eab51de4: Merge \"Fix clipping and stencil layer issues\"\n\n* commit \u0027eab51de4de88219256260fe26e2018a6234ef83b\u0027:\n  Fix clipping and stencil layer issues\n"
    },
    {
      "commit": "b98a016c6769b9e80d392df22fe77a2fca048d9f",
      "tree": "6a4adcd9e871baab9aae6f2f0ad80670ad4f66bd",
      "parents": [
        "2b3a47b9ce0f422323395286937944a2afa51ed6"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Feb 21 11:30:22 2013 -0800"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Feb 21 16:12:00 2013 -0800"
      },
      "message": "Fix clipping and stencil layer issues\n\nbug:8235699\n\nEnsure rectangle clipping operations disable deferring when necessary\n(i.e., when the op might create a non-rect region), including in\nDisplayList::setViewProperties\n\nAdditionally, makes clipping with a kUnion always use a region, for\nconsistency with software rendering\n\nChange-Id: I6730f1a80250bcf3f91cd4afde646d470a12dbc2\n"
    },
    {
      "commit": "c4ca87f0f4034d4b987084d2b62ed7e5e0430557",
      "tree": "72ae034904f9554d1ed6228944e7711959fc21d7",
      "parents": [
        "09bd2113e3a6bb2c63f01b62a09ae3c23d3c0454",
        "8a47d8eaec26d0937aee94a057f561f246748339"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Feb 20 10:42:40 2013 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Feb 20 10:42:40 2013 -0800"
      },
      "message": "am 8a47d8ea: Merge \"Clean up clipping and deferral logic\"\n\n* commit \u00278a47d8eaec26d0937aee94a057f561f246748339\u0027:\n  Clean up clipping and deferral logic\n"
    },
    {
      "commit": "8a47d8eaec26d0937aee94a057f561f246748339",
      "tree": "3a0e20c21c0086e97d4024e2f2af269bc7f0e859",
      "parents": [
        "14bd8359a84c9b3f634d1fd816ddf5750d6539a9",
        "5d11676414b3606792e23c269cf75b44faa1a2af"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Feb 20 18:40:03 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Feb 20 18:40:03 2013 +0000"
      },
      "message": "Merge \"Clean up clipping and deferral logic\""
    },
    {
      "commit": "5d11676414b3606792e23c269cf75b44faa1a2af",
      "tree": "4cc1e7f6dd978c9575f19aa8e4137837fc042fd7",
      "parents": [
        "ad82f20d2382396f5ac75fdf6f7db5c4da1c4c23"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue Feb 19 17:49:31 2013 -0800"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue Feb 19 18:56:10 2013 -0800"
      },
      "message": "Clean up clipping and deferral logic\n\nbug:8037003\n\n-Merges replay methods\n-Bounds checking for DrawBitmapMesh, DrawRects and DrawDisplayList\n-Use clip as bounds for otherwise unbounded draw operations\n\nClip-as-bounds is correct for drawColor and functor, but other draw\noperations (pos text, text on path, and layers) still need true bounds\ncalculation\n\nChange-Id: I5d5149d2c624f01e3fe46628bf156e835e69b9d5\n"
    },
    {
      "commit": "846f5f238fd96a14197022baad86eab8882fe3bc",
      "tree": "a8859b3a21c5746f53e9531dffdb13783a8ea08d",
      "parents": [
        "27c530076068607e61ef6a3fcc1c5f05aa7104aa",
        "e91efabaf2c51d017bf4c5bc4e06491c3511f4e5"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Feb 19 12:36:28 2013 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Feb 19 12:36:28 2013 -0800"
      },
      "message": "am e91efaba: Merge \"Expose display list APIs\"\n\n* commit \u0027e91efabaf2c51d017bf4c5bc4e06491c3511f4e5\u0027:\n  Expose display list APIs\n"
    },
    {
      "commit": "52036b19a5f82bc4d75cfcbff99c65df8d25a99b",
      "tree": "138a50b1b6ddc1075af93c4dab85d459aef1d6d3",
      "parents": [
        "736ef1e9dedbdd0c24e27f170034f2f869fd083f"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Feb 14 18:03:37 2013 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Feb 19 12:30:02 2013 -0800"
      },
      "message": "Expose display list APIs\n\nThe exposed APIs are slightly simpler than the full APIs used internally.\nOnly APIs useful to applications are exposed.\n\nChange-Id: Ie03014628d40ad5ef63dedbc52ce3def84429d54\n"
    },
    {
      "commit": "620cff4006ee0b507f00ef8a242ecff4e60ba4e9",
      "tree": "30c29f1ee548bb5da57a0a68b95f3c25beaa8eb6",
      "parents": [
        "57a8b612fa6b31a18f9e00a7bdf7dfbd261f793c",
        "ad82f20d2382396f5ac75fdf6f7db5c4da1c4c23"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue Feb 19 09:56:33 2013 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Feb 19 09:56:33 2013 -0800"
      },
      "message": "am ad82f20d: Merge \"DisplayList draw operation reordering\"\n\n* commit \u0027ad82f20d2382396f5ac75fdf6f7db5c4da1c4c23\u0027:\n  DisplayList draw operation reordering\n"
    },
    {
      "commit": "c3566d06421c8acc0aafb18f7e307e5725ce87e1",
      "tree": "3807ef3c1825ce9154bf3bc84fe24f34b331702a",
      "parents": [
        "101ae3bb3909827303121e5e11ed16b7efe36538"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Feb 04 16:16:33 2013 -0800"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Feb 15 13:30:09 2013 -0800"
      },
      "message": "DisplayList draw operation reordering\n\nbug:8037003\n\nThe reordering enables similar operations to draw together, minimizing the\nOpenGL state change operations that go inbetween draws. Eventually, multiple\ncomplete canvas draw operations will be merged (into a single glDrawArrays call,\nfor example)\n\nReorders DisplayList draw operations when:\n\n-They can move backwards in the command stream to be after similar\noperations without violating draw ordering\n\n-The OpenGLRenderer is in a simple, replayable state (no complex clip,\nor filter/shadow etc)\n\nAlso adds two system properties to control the deferral/reordering:\n    \"debug.hwui.disable_draw_defer\"\n    \"debug.hwui.disable_draw_reorder\"\nwhich can be set to \"true\" to control the display list manipulation\n\nChange-Id: I5e89f3cb0ea2d2afd3e15c64d7f32b8406777a32\n"
    },
    {
      "commit": "feb6954da185901dfb558a8ec85f4908ca86a4eb",
      "tree": "c7d1fe973b2f696a0b90dea3fa1bd4c90df41a1a",
      "parents": [
        "187cd3e161e3167ff455bd0766c0600c8fd243a4",
        "10c0aa246d9b2633c6cb4e5b714abb0031a4f4cd"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Feb 14 10:54:21 2013 -0800"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Thu Feb 14 10:54:21 2013 -0800"
      },
      "message": "am 10c0aa24: Merge \"Implement support for drawBitmapMesh\\\u0027s colors array\"\n\n# Via Android (Google) Code Review (1) and Romain Guy (1)\n* commit \u002710c0aa246d9b2633c6cb4e5b714abb0031a4f4cd\u0027:\n  Implement support for drawBitmapMesh\u0027s colors array\n"
    },
    {
      "commit": "10c0aa246d9b2633c6cb4e5b714abb0031a4f4cd",
      "tree": "bb02e6bfd8b240833ba4611f138565e58aeee2bd",
      "parents": [
        "45dc56f3cc6cf890d2f8a28021f46ad1e9028f5e",
        "ff316ec7a76e52572a2e89b691e6b3bba0cafba3"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Feb 14 18:49:34 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Feb 14 18:51:28 2013 +0000"
      },
      "message": "Merge \"Implement support for drawBitmapMesh\u0027s colors array\""
    },
    {
      "commit": "ff316ec7a76e52572a2e89b691e6b3bba0cafba3",
      "tree": "8418a45b809c9382a0fc3d9d9bb6db6a537dd4cc",
      "parents": [
        "2b44eb75c42e4caa94f0b002f0ea9e134fe7b543"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Feb 13 18:39:43 2013 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Feb 13 18:39:43 2013 -0800"
      },
      "message": "Implement support for drawBitmapMesh\u0027s colors array\n\nChange-Id: I3d901f6267c2918771ac30ff55c8d80c3ab5b725\n"
    },
    {
      "commit": "c932760f667cf56ca7a1aeffde505745dc3632e1",
      "tree": "280d86bf8205c51a2b6b59da6c617e220677e790",
      "parents": [
        "eb26fbe427192bc87bb3dbb7882dbf87f760fab2",
        "7c1a49f5f5ed6613d736464bf5001b777e89ced2"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Feb 13 23:14:26 2013 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Feb 13 23:14:58 2013 +0000"
      },
      "message": "Merge \"Revert \"Merge remote-tracking branch \u0027goog/master-chromium\u0027 into \u0027goog/master\u0027\" DO NOT MERGE\""
    },
    {
      "commit": "8d4aeb7111afac0c3c7e56d4ad5d92f9cfce2ffd",
      "tree": "d526296ca8e54842b15b60adaad484ee29feccf2",
      "parents": [
        "d1a84242a7ba807310d8f8d389796c7163cb97a0"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Feb 12 16:08:55 2013 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Feb 13 11:27:05 2013 -0800"
      },
      "message": "Add a render buffer cache to reuse stencil buffers\nBug #7146141\n\nThis new cache is used in a similar way to LayerCache. It helps\nreuse already allocated stencil buffers and thus avoid churning\nmemory on every frame.\n\nChange-Id: I19551d72da52c40039e65904563600e492c8b193\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": "e67307c816f3fdae2bfba8e9a4410dc015645e91",
      "tree": "a97695ed6c6e087364fba51b3a848d4aedebdb41",
      "parents": [
        "f16c7a97548cedccea291ffebc4388a7f15c9aa1"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Feb 11 18:01:20 2013 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Feb 11 18:04:23 2013 -0800"
      },
      "message": "Prevent crash when setting up a stencil-based clip\nBug #8177690\n\nClear the layers before we setup the stencil to avoid dereferencing\nthe recently deleted rects.\n\nChange-Id: I5dce5f965672f276f9490636d85b6018d3ab9422\n"
    }
  ],
  "next": "d71ff91dcd79f6beea4bbe768ab3bcbb1a6d7c39"
}
