)]}'
{
  "log": [
    {
      "commit": "71d08a07189c2b433080203895d9d5e936b16b9e",
      "tree": "88079370391f3e5b8e7610911b247a5db50abf97",
      "parents": [
        "9be80ee53ff5a3df51537f10b3d63f1f7f0ccd3e"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Mon Nov 24 15:21:28 2014 -0800"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Mon Nov 24 15:24:02 2014 -0800"
      },
      "message": "Switch TextureCache to SkPixelRef::fStableId\n\nBug: 18245805\nChange-Id: I08e6792dbeed86b13e569c7f2137de0e50dc2763\n"
    },
    {
      "commit": "a35778c799e8073a42b9e22191bde9d838327ab7",
      "tree": "f4d74fc026f8dcf6d8ea8e5a18be30a14b990b70",
      "parents": [
        "b9744c1c1f5e8cc936da7f1832665f77ad5bb18f"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Thu Nov 06 09:45:10 2014 -0800"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Thu Nov 06 09:45:10 2014 -0800"
      },
      "message": "Yank ResourceCache out of Caches\n\nBug: 17947547\n\nPull the ResourceCache (aka, ref-counting side channel) out of\nCaches so that DisplayListRenderer doesn\u0027t use Caches, avoiding\nthe risk of instantiating Caches on the wrong thread or\nwithout a GL context\n\nChange-Id: I7d63b70b3b0a0163308c5dedd6ef255eadebe8fd\n"
    },
    {
      "commit": "0e89e2b7bcb2c035e8cee77f93120e7c5617f8d2",
      "tree": "8fcd1f768f08fbeb2cd13425a2bf15b7670428f2",
      "parents": [
        "141823ec6313d9545b8354ea1e3e017a1da3cfa8"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Fri Oct 31 14:49:06 2014 -0700"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Fri Oct 31 15:30:10 2014 -0700"
      },
      "message": "Layer changes\n\nBug: 17208461\n\n* Switch Layer to be VirtualLightRefBase instead of\n  Caches\u0027 side-channel ref-counting\n* Include active layers in gfxinfo dump\n* Run gfxinfo dump on the correct thread\n* Dump gfxinfo on Layer creation failure\n\nChange-Id: I28d195699e2334518e215ab28c7a17355aee9678\n"
    },
    {
      "commit": "d1ad5e62fda248c6d185cde3cb6d9f01a223066c",
      "tree": "6e2dcdaaab6c38f46f36b944f9c4212c485ff3e2",
      "parents": [
        "951ecb77c5dfe69a4d19d26429286111333ab123"
      ],
      "author": {
        "name": "Leon Scroggins III",
        "email": "scroggo@google.com",
        "time": "Mon May 05 12:50:38 2014 -0400"
      },
      "committer": {
        "name": "Leon Scroggins III",
        "email": "scroggo@google.com",
        "time": "Thu May 22 14:46:59 2014 -0400"
      },
      "message": "Inspect SkShader to determine hw shader.\n\nInstead of duplicating internal info about SkShader, inspect the\nSkShader installed on the SkPaint.\n\ncore/java/android/view/GLES20Canvas.java:\nRemove setupModifiers, nResetModifiers, and nSetupShader.\n\ncore/jni/android/graphics/Shader.cpp:\nRemove calls to create/destroy the (previously) attached SkiaShader.\n\ncore/jni/android_view_GLES20Canvas.cpp:\nRemove native code for setupShader and resetModifiers.\n\ngraphics/java/android/graphics/BitmapShader.java:\ngraphics/java/android/graphics/ComposeShader.java:\ngraphics/java/android/graphics/LinearGradient.java:\ngraphics/java/android/graphics/RadialGradient.java:\ngraphics/java/android/graphics/Shader.java:\ngraphics/java/android/graphics/SweepGradient.java:\nRemove code keeping track of native SkiaShader.\n\nlibs/hwui/Caches.h:\nInclude Extensions.h.\n\nlibs/hwui/DeferredDisplayList.cpp:\nCompare shaders on the paint, instead of on DrawModifiers.\n\nlibs/hwui/DisplayList.cpp:\nlibs/hwui/DisplayList.h:\nRemove vector of SkiaShaders.\n\nlibs/hwui/DisplayListOp.h:\nAccess the SkShader on mPaint.\nRemove SetupShaderOp and ResetShaderOp.\n\nlibs/hwui/DisplayListRenderer.cpp:\nlibs/hwui/DisplayListRenderer.h:\nRemove resetShader, setupShader, refShader, and mShaderMap.\n\nlibs/hwui/FontRenderer.cpp:\nPass SkShader to setupDrawShader and setupDrawShaderUniforms.\n\nlibs/hwui/OpenGLRenderer.cpp:\nlibs/hwui/OpenGLRenderer.h:\nAdd LayerShader, a class inheriting from SkShader, to mimic the\nbehavior of SkiaLayerShader. Unlike SkiaLayerShader, it can be set on\nthe SkPaint so it can be inspected later.\nSet a LayerShader instead of a SkiaLayerShader.\nsetupDrawShader and setupDrawShaderUniforms now inspect an SkShader\npassed in.\nInspect SkShader instead of mDrawModifiers.mShader.\nRemove resetShader and setupShader.\nsetupDrawColorUniforms now takes a boolean indicating whether there is\na shader.\nAdd an inline function for accessing the SkShader on an SkPaint.\nIn setupDrawBlending(Layer*, bool), do not check the shader (which will\nnever be set), but do check whether the color filter may change the\nalpha (newly fixed behavior).\nIn setupDrawBlending(SkPaint, ...), check the SkShader and whether the\ncolor filter affects alpha (the latter is new behavior).\n\nlibs/hwui/Renderer.h:\nRemove pure virtual functions setupShader and resetShader.\n\nlibs/hwui/ResourceCache.cpp:\nlibs/hwui/ResourceCache.h:\nRemove functions for refing/unrefing shaders.\n\nlibs/hwui/SkiaShader.cpp:\nlibs/hwui/SkiaShader.h:\nMuch of this code was redundant and has been removed.\nConvert structs into class with nothing but static functions for\ncalling describe/setupProgram.\n\nlibs/hwui/TextureCache.cpp:\nlibs/hwui/TextureCache.h:\nUse the SkPixelRef as the key to the bitmap Lru cache, since shader\ninspection will provide a different SkBitmap pointer (though it will\nhold the correct SkPixelRef with the correct generation ID).\n\ntests/CanvasCompare/src/com/android/test/hwuicompare/DisplayModifier.java:\ntests/CanvasCompare/src/com/android/test/hwuicompare/ResourceModifiers.java:\nUpdate manual test to have more shaders: radial, sweep, compose,\ninvalid compose.\n\nBUG:10650594\n\nChange-Id: Iaa7189178bda1c55f96da044d2a9fa602ba36034\n"
    },
    {
      "commit": "ecd072161ec57ba8dfb26659511c0f6605601560",
      "tree": "5ed526d3b7f3a1c6532c90fca9bb57c8364e589a",
      "parents": [
        "afd8b17fa1fc15d06dc4ade7fc365e0a157c9b53",
        "22d074643ed0d010ebfdb0fca685d65eb2632e58"
      ],
      "author": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Thu Mar 27 14:22:47 2014 +0000"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Thu Mar 27 14:22:47 2014 +0000"
      },
      "message": "resolved conflicts for merge of 22d07464 to master\n\nChange-Id: Ic037261eedd6e224938c960d2b4597590c81ed9d\n"
    },
    {
      "commit": "f5df700e6ce056ebfa322314d970e52d6facc35a",
      "tree": "5a3e1f8dc1089601389509f54d2eef98ec2528a8",
      "parents": [
        "57f2764bf104b0fe7b5cd67ad5b2cae9bc8352ed"
      ],
      "author": {
        "name": "Ashok Bhat",
        "email": "ashok.bhat@arm.com",
        "time": "Tue Mar 25 20:51:35 2014 +0000"
      },
      "committer": {
        "name": "Narayan Kamath",
        "email": "narayan@google.com",
        "time": "Thu Mar 27 12:30:42 2014 +0000"
      },
      "message": "AArch64: Make frameworks/base code more portable\n\nChanges in this patch include\n\n[x] Use %zu for size_t, %zd for ssize_t\n\n[x] Some minor changes have been done to conform with\n    standard JNI practice (e.g. use of jint instead of int\n    in JNI function prototypes)\n\nChange-Id: Id1aaa7894a7d0b85ac7ecd7b2bfd8cc40374261f\nSigned-off-by: Ashok Bhat \u003cashok.bhat@arm.com\u003e\nSigned-off-by: Craig Barber \u003ccraig.barber@arm.com\u003e\nSigned-off-by: Kévin PETIT \u003ckevin.petit@arm.com\u003e\nSigned-off-by: Marcus Oakland \u003cmarcus.oakland@arm.com\u003e\n"
    },
    {
      "commit": "300bdfa13dd903c9335c11838cc0a604d0f8f2e6",
      "tree": "baff88b39d8e3c8f613f02ab43fcc78391079501",
      "parents": [
        "9d1ae3b87cdb77781f21e880c7bcb3ad32f7a906",
        "328b7ee6a2ba2dc8f162fa57dbafd4bfc89bb72e"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@android.com",
        "time": "Wed Feb 26 19:31:16 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Wed Feb 26 19:31:16 2014 +0000"
      },
      "message": "am 328b7ee6: am aecb8c43: am 7b4cce68: am c3bac8a0: Merge \"Fix graphics corruption caused by HWUI caches\"\n\n* commit \u0027328b7ee6a2ba2dc8f162fa57dbafd4bfc89bb72e\u0027:\n  Fix graphics corruption caused by HWUI caches\n"
    },
    {
      "commit": "36fad8f6fcfbc2087b910600ed5a6f9741177d00",
      "tree": "65bd93bc54c55941cd409d68c8273cd8eb6bc165",
      "parents": [
        "2ba70fd49bfcbb516e75c198c106764609335feb"
      ],
      "author": {
        "name": "Sangkyu Lee",
        "email": "sk82.lee@lge.com",
        "time": "Thu Jan 09 14:11:57 2014 +0900"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Feb 26 10:43:26 2014 -0800"
      },
      "message": "Fix graphics corruption caused by HWUI caches\n\nSome caches(PatchCache, TextureCache, PathCache) for HWUI\nuses deferred removal for their cache entries even though\nactual resource objects are immediately freed by\nResourceCache.\nFor this reason, the uniqueness of a resource address in\nthe caches is not guaranteed in specific cases.\n(Because malloc() can return the same address when malloc()\nand free() called very frequently.)\n\nSo it can be possible the cache have two cache entries for\ntwo different resources but the same memory address.\n(Of course one of the resources is already freed.)\nIt also can be possible mGarbage vector in PatchCache has\nduplicated addresses and this can lead to duplicated free\nblocks in the free block list and graphics corruption.\n(Deferred removal was implmeneted based on an assumption of\nunique resource addresses.)\n\nSo this patch makes sure resource objects are freed after\nthe resources are removed from the caches to guarantee\nthe uniqueness of a resource address and prevent graphics\ncorruption.\n\nChange-Id: I040f033a4fc783d2c4bc04b113589657c36fb15b\nSigned-off-by: Sangkyu Lee \u003csk82.lee@lge.com\u003e\n"
    },
    {
      "commit": "76d3a1b8d035d27bc80b0f2fc480a903bd001514",
      "tree": "a6346bbf593d565d89990f0bddecd2a5df92de9d",
      "parents": [
        "8852ab4357ffb653bafb36f3b9272866834f7a72"
      ],
      "author": {
        "name": "Derek Sollenberger",
        "email": "djsollen@google.com",
        "time": "Tue Dec 10 12:28:58 2013 -0500"
      },
      "committer": {
        "name": "Derek Sollenberger",
        "email": "djsollen@google.com",
        "time": "Fri Feb 07 17:06:14 2014 -0500"
      },
      "message": "Removing SkiaColorFilter and inspecting the native object directly.\n\nbug: 10650594\nChange-Id: I4fcf66d008765afa0e35d011f58bc792183cb74f\n"
    },
    {
      "commit": "d218a92c0afb8c0d98135b20b52ac87236e1c935",
      "tree": "3eef804e9948ca463e720ac636db46b2637fdabb",
      "parents": [
        "8523706236b0b2536ed4359d92ec6ccdca060d78"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Jan 02 17:13:34 2014 -0800"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Jan 03 13:55:08 2014 -0800"
      },
      "message": "Use const where possible for drawing parameters\n\nThey should never be modified by a Renderer, only read and copied.\n\nChange-Id: I9d8d55dca19115ee9dfeb2bb3f092ba2fb327cd4\n"
    },
    {
      "commit": "0c20c3898a533b7b76f60827cb6ea02e17c5953d",
      "tree": "15a488db02872005937082b918bfe108eeae1282",
      "parents": [
        "e969964c80a20b2d968b4ee54495176c9049d3e3"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue Jul 02 10:48:54 2013 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Jul 08 11:08:02 2013 -0700"
      },
      "message": "Use global references for Bitmap AndroidPixelRefs\n\nbug:9621717\n\nBecause we\u0027re no longer holding onto Bitmaps Java side during\nDisplayList lifetime, use global refs to keep the backing byte arrays\naround.\n\nAdds back bitmap buffer passing + native ref management removed by\n3b748a44c6bd2ea05fe16839caf73dbe50bd7ae9\n\nAdds back globalRef-ing removed by\nf890fab5a6715548e520a6f010a3bfe7607ce56e\n\nChange-Id: Ia59ba42f05bea6165aec2b800619221a8083d580\n"
    },
    {
      "commit": "e3b0a0117a2ab4118f868a731b238fe8f2430276",
      "tree": "a4a6ac3783ace541cd35a0f9d3868af6d2bf97b7",
      "parents": [
        "89dc02a9bed818cc6f5296c97eb504ccb010db42"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jun 26 15:45:41 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jun 26 17:15:08 2013 -0700"
      },
      "message": "Refcount 9-patches and properly handle GC events\n\nThis change adds refcounting of Res_png_9patch instances, the native\ndata structure used to represent 9-patches. The Dalvik NinePatch class\nnow holds a native pointer instead of a Dalvik byte[]. This pointer\nis used whenever we need to draw the 9-patch (software or hardware.)\n\nSince we are now tracking garbage collection of NinePatch objects\nlibhwui\u0027s PatchCache must keep a list of free blocks in the VBO\nused to store the meshes.\n\nThis change also removes unnecessary instances tracking from\nGLES20DisplayList. Bitmaps and 9-patches are refcounted at the\nnative level and do not need to be tracked by the Dalvik layer.\n\nChange-Id: Ib8682d573a538aaf1945f8ec5a9bd5da5d16f74b\n"
    },
    {
      "commit": "547e66531d521eb1eadac87edb0f79f8c2f1bbe0",
      "tree": "b7687d438e358ace879a20228d0c2c6a820d0c58",
      "parents": [
        "d6e3ad54907ec085aa41e5c77296e9f385c22e67"
      ],
      "author": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Mon Oct 22 15:07:26 2012 -0700"
      },
      "committer": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Mon Oct 22 15:25:19 2012 -0700"
      },
      "message": "Don\u0027t null the reference to Bitmap pixels until we\u0027re really ready\n\nA change in the VM triggers a native memory error more aggressively than before,\nshowing that there\u0027s a bug in the logic of recycling bitmaps. Since the pixel\nmemory is allocated on the Java heap, nulling out the reference to that memory\nin the Java level Bitmap object can cause that memory to get collected at any time.\nMeanwhile, we may have a reference to that memory at the native level for rendering\npurposes, causing an error if/when we access that memory after it has been collected\nby the VM.\n\nThe fix is to avoid setting the reference to the pixels to null unless we are\nnot referring to it in native code. This is determined at the time we call\nrecycle() - we return a boolean to indicate whether the native code is still\nusing the memory. if not, the Java code can null out the reference and allow the\nVM to collect it. Otherwise, it will get collected later when the encompassing\nBitmap object is collected.\n\nIssue #7339156 HTML5 tests crash the app (Vellamo)\n\nChange-Id: I3a0d6b9a6c5dd3b86cc2b0ff7719007e774b5e3c\n"
    },
    {
      "commit": "54643d72f86d0ee0b23e3643ac9257d52ddfae6b",
      "tree": "fa42aca7c07a2a22050733a78fcaf72f20c4db51",
      "parents": [
        "cefbd1438c9054e3a34b4ab93b4b26b427604cb1"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Sep 25 21:30:22 2012 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Tue Sep 25 21:41:38 2012 -0700"
      },
      "message": "make sure to destroy GL objects on the GL thread\n\nBug: 7195815\nChange-Id: I5bcac61cd0b903d1ccca0754fdb9cb1023efbe0f\n"
    },
    {
      "commit": "56257aff8a55c847be72be9924c392033fd8151d",
      "tree": "5e31b76ebbf03e281ccaeceec24882660e7de47e",
      "parents": [
        "8a1374946a928fcba7495c87ff6adda327fdfb9f"
      ],
      "author": {
        "name": "Dave Burke",
        "email": "daveburke@google.com",
        "time": "Tue Sep 25 20:30:09 2012 -0700"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Sep 25 20:30:09 2012 -0700"
      },
      "message": "Revert \"Deleting objects on the wrong thread is a silly idea Bug #7195815\"\n\nThis reverts commit 8a1374946a928fcba7495c87ff6adda327fdfb9f\n\nChange-Id: I53564a6c531d334afcc1fce0bea1e57ae266aa78\n"
    },
    {
      "commit": "8a1374946a928fcba7495c87ff6adda327fdfb9f",
      "tree": "ab6b1d092aec1b19751e820c3e18a10c21a40759",
      "parents": [
        "1ab8a08a9b85aa62045a6a78fd93859382c88b0f"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Sep 25 15:49:03 2012 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Sep 25 15:49:03 2012 -0700"
      },
      "message": "Deleting objects on the wrong thread is a silly idea\nBug #7195815\n\nTurns out that multi-threading is hard.\n\nChange-Id: Ib0b4bd6dc3caea27f7ced22cbb363bb955fe58ab\n"
    },
    {
      "commit": "97dc9172b0e58979c63de0dedbab656399a62281",
      "tree": "291da7b2a7b35e73821fa3660c7e1a96e983a5e4",
      "parents": [
        "4285de3c8bc77856a2df98894f74bb7333f1d348"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Sun Sep 23 17:46:45 2012 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Sun Sep 23 17:49:24 2012 -0700"
      },
      "message": "Avoid deadlock when deleting layers\nBug #7217459\n\nChange-Id: I12bfa6c30c5030bd1b23ea6a3ce64240ab1dfba3\n"
    },
    {
      "commit": "603f6de35f21d74ae242d52d501f4f5c25ff4f4c",
      "tree": "b249a7750a60b445a43670b7ba540beecbe715db",
      "parents": [
        "cc5dd18d15a174799ad79d26633c268e8860c8ab"
      ],
      "author": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Fri Sep 14 15:31:25 2012 -0700"
      },
      "committer": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Mon Sep 17 11:21:34 2012 -0700"
      },
      "message": "Fix occasional crash bug with layers\n\nLauncher occasionally crashes with a stack trace indicating that the memory\nof a Layer object is corrupt. It is possible for us to delete a Layer\nstructure and then, briefly, use it to draw a DisplayList again before\nthat DisplayList gets recreated (without the layer that got deleted).\n\nWhen this happens, if the memory got corrupted, it\u0027s possible to crash.\n\nThe fix is to add Layer to the other objects which we currently refcount\n(bitmaps, shaders, etc.). Then instead of deleting a Layer, we decrement the\nrefcount. We increment when creating it, then increment it again when it\u0027s\nreferenced from a DisplayList. Then we decrement the refcount instead of\ndeleting it, and decrement when we clear a DisplayList that refers to it.\nThen when the refcount reaches 0, we delete it.\n\nIssue #6994632 Native crash in launcher when trying to launch all apps screen\n\nChange-Id: I0627be8d49bb2f9ba8d158a84b764bb4e7df934c\n"
    },
    {
      "commit": "58ecc204fbcacef34806290492384677a330d4d4",
      "tree": "13be7c29c62652911b5213122419a128c67615ee",
      "parents": [
        "369bb97d02209fa800081fc3b4e8675ea7e75d34"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Sep 07 11:58:36 2012 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Sep 07 14:01:09 2012 -0700"
      },
      "message": "Reduce the number of locks acquired by display lists\n\nChange-Id: I1123aae0355de84db705bb75042c7083fc69c9f2\n"
    },
    {
      "commit": "8dcfd5e836341b4a803b04d104a930bb312182d3",
      "tree": "cd2b75a4431f7ecfd869e007c5c15031e74298ed",
      "parents": [
        "0aa87bbfc41e8b5f52de701ac17b4e66a7a7b609"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Jul 20 11:36:03 2012 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Jul 20 11:47:57 2012 -0700"
      },
      "message": "Clamp gradient textures to max GL texture size\n\nChange-Id: I8ce4e50988f5194fe5ce4bde7945ec01673af3cd\n"
    },
    {
      "commit": "49c5fc0b9e850497233e189ff9dcc71a78ebe6e7",
      "tree": "7e67e74c97f750a1f04855071f54c357d0857a5b",
      "parents": [
        "66757217a6d8e6a156d15be55bf77940e2e6194b"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue May 15 11:10:01 2012 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue May 15 11:15:24 2012 -0700"
      },
      "message": "Avoid unnecessary copy when invoking drawBitmap(int[])\nBug #6483390\n\nChange-Id: I4d2d725ef50c9401b4bd998b6160128102b40745\n"
    },
    {
      "commit": "5baa3a62a97544669fba6d65a11c07f252e654dd",
      "tree": "109755e1595b438873d34b981e31f84ea64bd2a5",
      "parents": [
        "173ab4d61077c49f115b82eff34f97fda5a7273a"
      ],
      "author": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Tue Dec 20 16:23:08 2011 +0000"
      },
      "committer": {
        "name": "Steve Block",
        "email": "steveblock@google.com",
        "time": "Tue Jan 03 22:38:27 2012 +0000"
      },
      "message": "Rename (IF_)LOGD(_IF) to (IF_)ALOGD(_IF)  DO NOT MERGE\n\nSee https://android-git.corp.google.com/g/156016\n\nBug: 5449033\nChange-Id: I4c4e33bb9df3e39e11cd985e193e6fbab4635298\n"
    },
    {
      "commit": "6203f6c8147069976342be8f42add797a50f9557",
      "tree": "cb623a81ace2133781fe04d57d5e08aee7aa8121",
      "parents": [
        "0965a3244b4c3009d08db2e084cdcb681ef66d26"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Aug 01 18:56:21 2011 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Aug 01 18:56:21 2011 -0700"
      },
      "message": "Reduce the amount of data cached by the gradients cache.\n\nChange-Id: I8546f5a5ecf38031c9a40bdcc434d4c7f22da63d\n"
    },
    {
      "commit": "d586ad9c9fec80aa1d24d6b53cd2c8d5b47fe868",
      "tree": "285a0e4d4d7b471a8a3c8e41957283dcb9f09f43",
      "parents": [
        "83c033de06cd2af243ecf8e2c4b87cd2de2b786e"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jun 22 16:14:36 2011 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jun 22 17:10:00 2011 -0700"
      },
      "message": "Fix another memory leak in OpenGLRenderer\n\nChange-Id: I23ed56891452a05cf3ca13f6919c4fef90d5ff4e\n"
    },
    {
      "commit": "6062c5912dc79704b489fc8c289b78a400ed05ee",
      "tree": "9de24cadd06e34a3f9a7de165f90fbcfc55d2307",
      "parents": [
        "2fad616237ce2db020eb6c0e03084ece291aee3c"
      ],
      "author": {
        "name": "Derek Sollenberger",
        "email": "djsollen@google.com",
        "time": "Tue Feb 22 13:55:04 2011 -0500"
      },
      "committer": {
        "name": "Derek Sollenberger",
        "email": "djsollen@google.com",
        "time": "Tue Feb 22 16:07:36 2011 -0500"
      },
      "message": "Skia Merge (revision 808)\n\nThis is a companion CL to the one found in /external/skia\n\nChange-Id: If81748545435cab20a5d8479329ab333cb973e16\n"
    },
    {
      "commit": "5a7e828842c26f64bb6e0ef3e0019e1949b245ee",
      "tree": "98476b11713842ef3b8109cff38e66fae26dc199",
      "parents": [
        "23c907cab8aa1a40ee79b322899b850080b14832"
      ],
      "author": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Fri Feb 04 12:50:55 2011 -0800"
      },
      "committer": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Fri Feb 04 12:50:55 2011 -0800"
      },
      "message": "Fix crash when Paths are GCd in hw accelerated apps\n\nA recent change to optimize path rendering didn\u0027t account for\nthe destruction of native objects by the VM finalizer. We may be\ndone with the Java level version before we\u0027re done with the native\nstructure that\u0027s used by the display list. For example, a drawing\nmethod on a View that creates a temporary path to render into the\ncanvas will implicitly create a native structure that is put onto\nthe GL display list. That temporary path may go away, but the native\nversion should stick around as long as the display list does.\n\nThe fix is to refcount the original native version of the path\nand only delete it when the refcoutn reaches zero (which means that\nit is no longer needed by any display list). This is a similar mechanism\nused for bitmaps and shaders.\n\nChange-Id: I4de1047415066d425d1c689aa60827f97729b470\n"
    },
    {
      "commit": "43ccf4663c822ddd435b7683cc05221f6169c6c3",
      "tree": "d6255b5202bc62a44249fbf3905bbec98605d39d",
      "parents": [
        "8dd5b1e53184ed3b786dd329e12d665ae59ca3f4"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Jan 14 18:51:01 2011 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Jan 14 18:51:01 2011 -0800"
      },
      "message": "Don\u0027t crash Launcher on config change.\n\nChange-Id: Ibbbd7146c5ff69e9639b433f39041053654d808c\n"
    },
    {
      "commit": "f890fab5a6715548e520a6f010a3bfe7607ce56e",
      "tree": "6c61a1b736399a9dde6b83f4978ad5ef36e18a95",
      "parents": [
        "2a1cc5ac30efc05880a12a2114c09364fc38e032"
      ],
      "author": {
        "name": "Patrick Dubroy",
        "email": "dubroy@google.com",
        "time": "Sun Dec 19 16:47:17 2010 -0800"
      },
      "committer": {
        "name": "Patrick Dubroy",
        "email": "dubroy@google.com",
        "time": "Mon Dec 20 17:02:15 2010 -0800"
      },
      "message": "Ensure bitmaps aren\u0027t freed while referenced from a display list\n\nAlso removes the reference queue finalizers. They aren\u0027t necessary\nanymore now that Bitmaps are allocated in the heap.\n"
    },
    {
      "commit": "e4ac2d6b5723c95e648c489b187ddde449452c13",
      "tree": "a783470220e1840761dc6696f3e5f4cc7870054b",
      "parents": [
        "89f8d63a991f2dc4a961ad92ab5bb6b6c1ecd60f"
      ],
      "author": {
        "name": "Patrick Dubroy",
        "email": "dubroy@google.com",
        "time": "Wed Dec 01 11:23:13 2010 -0800"
      },
      "committer": {
        "name": "Patrick Dubroy",
        "email": "dubroy@google.com",
        "time": "Tue Dec 14 16:50:50 2010 -0800"
      },
      "message": "Allocate bitmap backing buffers in the Java heap.\n\nChange-Id: I60f6ccff13357c1c518e9d56b02fe0171637edd1"
    },
    {
      "commit": "5cafc52fb10bd05c587a7dec41c953c0722f302a",
      "tree": "cbfdf46e03841a5462a3f8a7c9cbba24d41904a5",
      "parents": [
        "b43d7589cf6201fc05f4c9d8b4a0c44d7cdba81e"
      ],
      "author": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Tue Nov 23 13:47:26 2010 -0800"
      },
      "committer": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Tue Nov 23 14:11:43 2010 -0800"
      },
      "message": "Fix hang in native bitmap recycling due to nested mutex locks\n\nChange-Id: Ic37d5408ddb3f68aba6520fb0c78ffde91dfbe62\n"
    },
    {
      "commit": "e7d2295c06ef9b9df6336cbff23007a13fb3f6e4",
      "tree": "c7942510b0b0f24cac8a88af0d40d878242a99b8",
      "parents": [
        "7c5c9e4717741b3c5961dfbda2b90feca137b309"
      ],
      "author": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Thu Nov 11 16:30:16 2010 -0800"
      },
      "committer": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Thu Nov 11 16:44:46 2010 -0800"
      },
      "message": "make ResourceCache for display lists thread-safe\n\nChange-Id: I41885b4ae249d7d7c000bab17bf32340ba85ab3a\n"
    },
    {
      "commit": "fe48f65922d4a3cc4aefe058cee5acec51504a20",
      "tree": "97ea23ae71dade1ef7bf783523bea9cda31dd042",
      "parents": [
        "50c5e4c36e494d092576d42cf2b406abab20510a"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Nov 11 15:36:56 2010 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Nov 11 15:36:56 2010 -0800"
      },
      "message": "Free resources only from the GL context thread.\nBug #3179882\n\nResources were freed following garbage collections on a worker thread.\nThis worker thread had no EGL context, which would cause the renderer\nto incorrectly assume that the memory was liberated.\n\nChange-Id: Ifdb51f94ddf42641e8654522787bfac532976c7c\n"
    },
    {
      "commit": "ad93c2bb63dfc813b2eefa1043aa63afbddce655",
      "tree": "b1a5a9cd667ed0dca718405390d76081a8241d54",
      "parents": [
        "78098341f86b4c71256017ca2b33674d6bcab046"
      ],
      "author": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Fri Oct 22 16:17:12 2010 -0700"
      },
      "committer": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Tue Oct 26 12:52:03 2010 -0700"
      },
      "message": "Optimizing ColorFilter in display lists\n\nChange-Id: Ie4d5e5b0bc45e0ce47bba144049303c270762e54\n"
    },
    {
      "commit": "d98aa2de9ab18e09c2be1997f41212740f51f6e6",
      "tree": "04bf505226c6a38fde7a466e28154e006e806f30",
      "parents": [
        "9bb127869666be6507fb5c4b37b7d1965c7e5fa6"
      ],
      "author": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Mon Oct 25 15:47:32 2010 -0700"
      },
      "committer": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Tue Oct 26 06:54:55 2010 -0700"
      },
      "message": "DisplayList optimizations and fixes.\n\nWe now use a copy of SkPaint objects to avoid having it changed from under us.\nWe reuse copies that have not changed. We also copy the SkMatrix every time to\navoid the same problem.\n\nChange-Id: If3fd80698f2d43ea16d23302063e0fd8d0549027\n"
    },
    {
      "commit": "5c13d89c1332fcc499379b9064b891187b75ca32",
      "tree": "439222e6d58a765a84133345ac6ef7cb13f1c04e",
      "parents": [
        "a376d030a2075909219926d622b71016418d7dcd"
      ],
      "author": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Fri Oct 08 08:37:55 2010 -0700"
      },
      "committer": {
        "name": "Chet Haase",
        "email": "chet@google.com",
        "time": "Thu Oct 21 12:02:42 2010 -0700"
      },
      "message": "Optimizing display lists by referencing pointers to resources instead of copying them\n\nChange-Id: I81ad3551d74aa1e5bb64d69e33d2eb29a6c1eb6a\n"
    }
  ]
}
