)]}'
{
  "log": [
    {
      "commit": "70850ea258cbf91477efa57a1f1a23cc0044cc93",
      "tree": "674621c2adc816afae2a1d09291fcd4af12b08e7",
      "parents": [
        "6c912b7d056c67b41fd46f31de168795e97c2336"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue Nov 18 10:49:23 2014 -0800"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Nov 19 17:24:30 2014 -0800"
      },
      "message": "Improve logging around performance critical events\n\nbug:17702227\n\nAdd details useful to developers (such as layer size/View name), and\nswitch away from logging implementation names/details, since they\nare generally not relevant to developers.\n\nChange-Id: Iee605d182f241450f7e75a6d0c283d51fa1312f5\n"
    },
    {
      "commit": "98d608dba6a0b3c15fb08f1fa2c8b9d170124c7c",
      "tree": "cba2372b4abff4dae433df57662e7a7a27611ff2",
      "parents": [
        "889fc94ffa70633e510e812b9da86723f4eee384"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Jul 17 12:25:11 2014 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Jul 17 12:25:11 2014 -0700"
      },
      "message": "Minor cleanups around color usage\n\nChange-Id: I56733cbe933a58d5977c032f056abb35265ee252\n"
    },
    {
      "commit": "906d47fd2bcedb9674b5765d01bd9c758069074c",
      "tree": "bec8f9c65c1bba8496f5dd9c41d78cc894a0fa48",
      "parents": [
        "3e1585e05ddb0fd60033a5603e330b8ab1f69303"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Jun 27 18:30:23 2014 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Jun 30 18:02:23 2014 +0000"
      },
      "message": "Deep copy SkPath parameter to PathCache task\n\nbug:15440706\nChange-Id: I2b5b25f620df838cb1155cc8502d86ad3644c212\n"
    },
    {
      "commit": "b933055cf3f7f8ea89bfd3bc9c37a3891ff7310a",
      "tree": "7d68b96a6fd02ca6ece664d5c53ee9778ef49d17",
      "parents": [
        "9285d1bf9c57e5f1da8f8d8ef7a6a38b2f0e4ec3"
      ],
      "author": {
        "name": "Mike Reed",
        "email": "reed@google.com",
        "time": "Mon Jun 16 17:31:48 2014 -0400"
      },
      "committer": {
        "name": "Mike Reed",
        "email": "reed@google.com",
        "time": "Fri Jun 20 10:28:37 2014 -0400"
      },
      "message": "stop using (deprecated) SkBitmap::Config\n\nChange-Id: Ic75b5fc6996578e9d95bd3a220439ec1541d7c3b\n"
    },
    {
      "commit": "1e5cf9aced40e6e14262e542d0ed0e24cda877a0",
      "tree": "1b42070defc0a41277e27ae37c92748dec18fc99",
      "parents": [
        "f1d758867aa878fb956af7c66bd2d3122adf72a0",
        "9a9d1d5ad2591f04881a401da0ad89a95eeddd00"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue Jun 10 17:22:31 2014 +0000"
      },
      "committer": {
        "name": "Android Git Automerger",
        "email": "android-git-automerger@android.com",
        "time": "Tue Jun 10 17:22:31 2014 +0000"
      },
      "message": "am b1c76a1a: Merge \"Tessellate on worker threads\" into lmp-preview-dev\n\n* commit \u0027b1c76a1abcfb2f33e12fef37ec71d20724863b5e\u0027:\n  Tessellate on worker threads\n"
    },
    {
      "commit": "05f3d6e5111fd08df5cd9aae2c3d28399dc0e7f5",
      "tree": "14df3cad82b02a886b8e3a04fd4ec249e1d403e4",
      "parents": [
        "faecafce62ca39a7693669f7c9eabf2d71c633cf"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Jun 02 16:27:04 2014 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue Jun 10 01:53:17 2014 +0000"
      },
      "message": "Tessellate on worker threads\n\nTessellate and cache (where possible) shadow and round rect\ntessellation tasks.\n\nChange-Id: I2cfda8e11d83d51ea74af871235cf26e8f831d40"
    },
    {
      "commit": "25e40de45f89490f03ca010a88d2265d9c901493",
      "tree": "b546d2ffc3907bb4dbdaaa29dad77ed7e25caa1d",
      "parents": [
        "26e8f040ba383dc44c25013692748cc27e50799d",
        "b68f5f0932511fb9975b7e04eebe48707af59e0a"
      ],
      "author": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri May 30 11:51:20 2014 -0700"
      },
      "committer": {
        "name": "Kenny Root",
        "email": "kroot@google.com",
        "time": "Fri May 30 11:51:20 2014 -0700"
      },
      "message": "resolved conflicts for merge of b68f5f09 to master\n\nChange-Id: Ib8dd3a353f40a3357c8dc5ac591cd5e3ab4d0a4b\n"
    },
    {
      "commit": "7061f7d7910fdf1189ea7bf1398f6cf8b9bd0104",
      "tree": "246d80e0c3de4f2c316ef2f18940054d9e2ce194",
      "parents": [
        "9cd3ff7d61ed65e8b815155747e7bbfc99c1e861"
      ],
      "author": {
        "name": "yuyang",
        "email": "yuyang@codeaurora.org",
        "time": "Tue May 27 16:15:02 2014 +0800"
      },
      "committer": {
        "name": "Digish Pandya",
        "email": "digishp@codeaurora.org",
        "time": "Fri May 30 08:26:37 2014 +0530"
      },
      "message": "Fix a resource race bug in PathCache\n\nWhen enabled defer rendering, it will do precache for DrawPathOp.\nThe paint used for creating PathTask in precache just get the address\nof mFilteredPaint of OpenGLRenderer. So for the following defer\noperation like DrawTextOp has possibility change the mFilteredPaint\nby getPaint while another WorkerThread in PathCache is using the paint\nwhich pointed to the same address of mFilteredPaint to generate bitmap.\nAs a result, it will generate a wrong bitmap for generateTexture in\nPathCache. To fix it, do a copy of paint when creating PathTask.\n\nCRs-Fixed: 664244\n\nChange-Id: I5516f5b143458b88d3573d15b7ebb34f688800c7\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": "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": "5d923200846ed59e813373bde789d97d4ccc40b5",
      "tree": "db2f874cf61f812c4aa359f07d49525d8da82de8",
      "parents": [
        "0a8c51b1d0d66d6060afcec1eab33091d49332ae"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Aug 21 18:40:24 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Aug 21 18:42:46 2013 -0700"
      },
      "message": "Second attempt at avoiding infinite loop in PathCache::trim()\nBug #10347089\n\nChange-Id: I70f5a3933e848632473acc6636c88be5dc6ac430\n"
    },
    {
      "commit": "0a8c51b1d0d66d6060afcec1eab33091d49332ae",
      "tree": "28e92fa12d2a53e6521469cc8ef6c5024b7cc5b2",
      "parents": [
        "627c6fd91377ead85f74a365438e25610ef1e2ee"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Aug 21 17:35:38 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Aug 21 17:35:38 2013 -0700"
      },
      "message": "Properly account for created paths in the cache\n\nChange-Id: I47b89b3085cefab6daac9194e7bfd3c140b37fa2\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": "be1b127c7bec252e0c6ab0e06ed6babed07d496f",
      "tree": "eaab57886d7cd44e10da155d3dc6188a30b2b17b",
      "parents": [
        "f69913056b8c6000ff0306573a97971702e8d35a"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jun 06 14:02:54 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jun 06 16:26:51 2013 -0700"
      },
      "message": "Assume a texture is unbound after deleting it\nBug #9316260\n\nThe GL specification indicates that deleting a bound texture has\nthe side effect of binding the default texture (name\u003d0). This change\nreplaces all calls to glDeleteTextures() by Caches::deleteTexture()\nto properly keep track of texture bindings.\n\nChange-Id: Ifbc60ef433e0f9776a668dd5bd5f0adbc65a77a0\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": "4500a8d5d7fbec9dba5e693212da160849e401ff",
      "tree": "1022f0099762a9ef2058da7240a2809659527846",
      "parents": [
        "96885eb480c5e0526fe2f77d30f6e551f3f3ceab"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Mar 26 17:29:51 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Mar 26 17:29:51 2013 -0700"
      },
      "message": "Path precaching creates duplicate cache entries\nBug #8478275\n\nChange-Id: Ib541ea051e42e01cc0d277790e9c09de38ef72ee\n"
    },
    {
      "commit": "c5cbee7d78513527e89450e6369a30a04b2d5e7a",
      "tree": "a3709dd93124509c4490b889622b277d11fbef30",
      "parents": [
        "9eac52698b18d089e73c7ec2bf73a64a39504733"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Mar 20 19:15:02 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Mar 20 19:16:53 2013 -0700"
      },
      "message": "Stop worker threads on memory trim \u0026 fix bad pointer access\n\nChange-Id: I6fe7e31aeb6dd41fa65ab952caed97bc2da510d7\n"
    },
    {
      "commit": "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": "0f809f3b794174f044366bf421f8d0c72d9afc14",
      "tree": "d4ca14f787cf7c511f5236637b5e3edb29d4c49f",
      "parents": [
        "d6c87ccde6722c7dedd05a18f30d8634893e10ee"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Mar 13 14:31:46 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Mar 13 14:32:45 2013 -0700"
      },
      "message": "Prevent infinite loop when trimming the path cache\n\nChange-Id: I04b5fa498336068f997c68d8613b35a99f67adbe\n"
    },
    {
      "commit": "5dc7fa709646799a5207a5d217f70aa02bf4a3aa",
      "tree": "3ebf45fa51bd0373f77aa451868df2d6ae1a8a87",
      "parents": [
        "8818d84a3540de6e53e5d82e2112292102574118"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Mar 11 20:48:31 2013 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Mar 12 15:06:42 2013 -0700"
      },
      "message": "Add TaskManager API\n\nThis API can be used to run arbitrary tasks on a pool of worker\nthreads. The number of threads is calculated based on the number\nof CPU cores available.\n\nThe API is made of 3 classes:\n\nTaskManager\n      Creates and manages the worker threads.\n\nTask\n      Describes the work to be done and the type of the output.\n      A task contains a future used to wait for the worker thread\n      to be done computing the result of the task.\n\nTaskProcessor\n      The processor dispatches tasks to the TaskManager and is\n      responsible for performing the computation required by\n      each task. A processor will only be asked to process tasks\n      sent to the manager through the processor.\n\nA typical use case:\n\nclass MyTask: Task\u003cMyType\u003e\n\nclass MyProcessor: TaskProcessor\u003cMyType\u003e\n\nTaskManager m \u003d new TaskManager();\nMyProcessor p \u003d new MyProcessor(m);\nMyTask t \u003d new MyTask();\np.add(t);\n\n// Waits until the result is available\nMyType result \u003d t-\u003egetResult();\n\nChange-Id: I1fe845ba4c49bb0e1b0627ab147f9a861c8e0749\n"
    },
    {
      "commit": "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": "e3a9b24b5e3f9b2058486814a6d27729e51ad466",
      "tree": "17830a6fd61c286854cebb07638d3c2dea6277cd",
      "parents": [
        "5b4628aeeaa0462cd99256d28b636c06b1845930"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jan 08 11:15:30 2013 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jan 08 15:21:42 2013 -0800"
      },
      "message": "Add plumbing for better text scaling\n\nFonts are now described by a transform matrix. This lead to switching\nfrom a vector to a hashmap. This change therefore adds new comparators\nand hash computations to Font.\n\nChange-Id: I2daffa7d6287c18554c606b8bfa06640d28b4530\n"
    },
    {
      "commit": "059e12ccd20f5c249724a8362d6bac325334ea76",
      "tree": "7b15fa6bc6d2963715ea298a51cca3909c1e50c9",
      "parents": [
        "c653df46436a796556da2633f90353900344ce39"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Nov 28 17:35:51 2012 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Nov 29 11:44:02 2012 -0800"
      },
      "message": "Use LruCache instead of GenerationCache in libhwui\n\nChange-Id: Ic26ddc7151eb5462bcd243b21daf7187ed6d3bec\n"
    },
    {
      "commit": "fdd6fc1beb5076a630c7066b8b1731995636c09f",
      "tree": "8df0ddc48fda9ffb9015e3fb190e68ca806646d4",
      "parents": [
        "a44a63ac5c29b2cc57df95ec495def8cdddd9c6f"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Apr 27 11:47:13 2012 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Apr 27 11:47:13 2012 -0700"
      },
      "message": "Work-around for a Skia rasterization bug\nBug #6411457\n\nSkia does not generates the bottom right pixel of a rect when\ndrawing a rect as an SkPath into an alpha8 bitmap.\n\nChange-Id: Ifb5286ae67745c9e44ee387b6d6ad607a9a2e6ce\n"
    },
    {
      "commit": "4bcb7467a174ed03a67b0c62950c555813ddf00d",
      "tree": "496ee923124a889d0a103fcc8dddba74515c2f81",
      "parents": [
        "cfef12374c15b11b3c2a1041582be9728152e15d"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Feb 23 17:08:38 2012 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Feb 23 17:08:38 2012 -0800"
      },
      "message": "Only recreate path textures when necessary\n\nWhen a drawPath command is recorded in a display list, a copy of the\nsource path is made to preserve against possible modifications of the\nsaid source path. Copies are discarded when a display list is cleared,\nwhich usually happens on invalidate(). This means that even if a path\nis never modified, the texture generated to draw it on screen is\ndestroyed every time an invalidate() is issued. This change fixes this\nproblem by introducing a reference to the source path in the copy.\nIf both the copy and the source path have the same genID, they are\nthe same path and can share the same texture.\n\nChange-Id: I34849311c183e06336a1391d2d1568a087f973f6\n"
    },
    {
      "commit": "33f6beb10f98e8ba96250e284876d607055d278d",
      "tree": "215fc7d5624b6b41a018374f5d19f7dac84cf72b",
      "parents": [
        "445c83c7755fae179cf3328e89307e2775e97a5e"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Feb 16 19:24:51 2012 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Feb 17 13:10:00 2012 -0800"
      },
      "message": "Record possible clip rejects when recording display lists\n\nThis optimization allows us to quickly skip operations that lie\nentirely outside of the known bounds of a display list. Because\nof ViewGroup.setClipChildren, we must keep the operations recorded\nin the display list. setClipChildren(false) is however a very\nuncommon operation and we will therefore often benefit from this\nnew optimization.\n\nChange-Id: I0942c864e55298e6dccd9977d15adefbce3ba3ad\n"
    },
    {
      "commit": "d9e688cab3015d858110fb8240cf7378c6befd82",
      "tree": "806f5e09090a6cf467666009a165e5f63155ae2f",
      "parents": [
        "e3571f633a825738d785b587e91798a3d0876740"
      ],
      "author": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Nov 11 15:40:13 2011 -0800"
      },
      "committer": {
        "name": "Jeff Brown",
        "email": "jeffbrown@google.com",
        "time": "Fri Nov 11 22:14:07 2011 -0800"
      },
      "message": "Clean up GenerationCache.\n\nUse const references to keys and values where appropriate to avoid\ncopying them unnecessarily.\n\nDeleted some dead code.\n\nSimplified a few pieces that were doing unnecessary redundant work.\n\nChange-Id: Ib2145b7094a40db2d679e05dafe050fe1e87b846\n"
    },
    {
      "commit": "7b8b75892400745f39bb8d5b5d539091bcfb1e1e",
      "tree": "778b45db31f62556e64d57224d544f91addb58ed",
      "parents": [
        "7f4a537af5ec1c935b9d139b722da05e9fe8130f"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Feb 24 19:52:37 2011 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Feb 24 19:52:37 2011 -0800"
      },
      "message": "Remove the right entries from the cache when a GC happens.\n\nChange-Id: I4649b18c4721a5511a404299e771e675c843407b\n"
    },
    {
      "commit": "2fc941e4650d618ff6e122f28b616d9032ffa134",
      "tree": "c05148e4502efbb492d93e45386601eab522faa4",
      "parents": [
        "ef36255f876aa1a61dcf5e879f4380887dda3854"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Feb 03 15:06:05 2011 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Feb 03 16:20:08 2011 -0800"
      },
      "message": "Fixes cache misses and extra allocations.\nBug #3421454\n\nChange-Id: If4d5c960a7e4c581a9d213073e658284b4e1c497\n"
    },
    {
      "commit": "ff26a0c1c905dc1ec53b1bab860b80f2976d59be",
      "tree": "a14b731211e689e0da77cdd9772a7add8f1b88ac",
      "parents": [
        "482b34a6f8aebe620cf815cdc689726ef5cf437e"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jan 20 11:35:46 2011 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Jan 20 11:39:09 2011 -0800"
      },
      "message": "Remove unnecessary code.\n\nChange-Id: I83eba3406c26a4028af08b4d4c95ecd02803e75a\n"
    },
    {
      "commit": "32228288a957f3823df92365bc709ad6f42b012e",
      "tree": "03784344779e34bd5008bb787919fe9f5a82b178",
      "parents": [
        "50cf2106b77d4009e1cefe11c57c42fe4584345f"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jan 11 15:02:21 2011 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jan 11 15:02:21 2011 -0800"
      },
      "message": "Solve translucency issue when drawing paths.\n\nChange-Id: I68ae0e2ccddaca2f76b5b2dd3e3cf1277fddaad6\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": "e190aa69756aecfaffabdd4c6d32cb6b3220d842",
      "tree": "3e0b6400e428be77544e2670627eeec8ceb6a434",
      "parents": [
        "c15008e72ec00ca20a271c3006dac649fd07533b"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Nov 10 19:01:29 2010 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Nov 10 19:01:29 2010 -0800"
      },
      "message": "Add new runtime debug flags.\n\nChange-Id: I07955de166a89b5053c6c13f250bb3e2936ca86e\n"
    },
    {
      "commit": "9e10841c27d973b930e1b49a099c69d866659505",
      "tree": "aaf593ba3581cf97a6b031a7b310e696f5cbb51a",
      "parents": [
        "820b9e0d3b6f94fe0b524aebf756ce25df273e6a"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Nov 09 14:35:20 2010 -0800"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Nov 09 14:37:42 2010 -0800"
      },
      "message": "Correctly remove unused paths from the cache.\n\nChange-Id: I41d9334dcd9871634037344ab49bf69383498161\n"
    },
    {
      "commit": "1041aded2df45094c36831028245fb7c5e9b67b7",
      "tree": "f11be43caf8d9f1b63ad9a79aea4e5a8edc03061",
      "parents": [
        "617d74ac484ae1b8d9593627f1325ee079d7f223"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Nov 04 12:10:40 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Nov 04 12:10:40 2010 -0700"
      },
      "message": "Fix possible rendering issue when drawing a path.\n\nChange-Id: I25f2e609589f0dd9294bcf7930de6398c0d7e377\n"
    },
    {
      "commit": "d79991277043d6bdbd90bb63fd8aff73ef9e06a5",
      "tree": "fc9133cf5164f2eba24998ce383ebea0fb685c68",
      "parents": [
        "5972e52e15e075e40dfcdc3ffaed1b7c4e2afac1"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Sep 30 16:56:56 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Sep 30 16:57:13 2010 -0700"
      },
      "message": "Make simple paths made of lines work.\n\nBug #3041098\n\nChange-Id: Ife9c3f01ded10e2bb35b1cdf1a54734d8347fee4\n"
    },
    {
      "commit": "183f17e7eb2f51be24489e7b1bd3e2e5e4bc579a",
      "tree": "2b440bfa288bf50edfcd108c08833cd3fae295e5",
      "parents": [
        "515d2c1e95a95aa4502e318762d149adff57b6d3"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Sep 09 10:13:31 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Sep 09 10:13:31 2010 -0700"
      },
      "message": "A Path can exist in several cache entries.\n\nChange-Id: I742f7425d2b6bef753ed3e04fb39ebb103b2dc00\n"
    },
    {
      "commit": "a2341a9f6addcd79723965ec5b1a1c5ae0f8bd65",
      "tree": "ce61e01a0719f9fc52e48be002fe1d57d3af9c68",
      "parents": [
        "9aaa8269a3e7291aab84d01c3fc9c744d8f2d2f4"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Sep 08 18:04:33 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Sep 08 18:04:33 2010 -0700"
      },
      "message": "Purge Skia objects from GL caches as needed.\n\nChange-Id: I754c671cf790ad5ae8bf047ad328034217da4ecc\n"
    },
    {
      "commit": "fb8b763f762ae21923c58d64caa729b012f40e05",
      "tree": "013792d41f32bff4dd35e6d53eebac711c513729",
      "parents": [
        "a1f1174b396cda7bdff469a2e974a737600c5eb0"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Aug 23 21:05:08 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Aug 24 17:18:14 2010 -0700"
      },
      "message": "Use only one GL context per process, share chaches.\n\nChange-Id: Ieabaa25338d2f4b8d4fd90e7401ad6e7452eae11\n"
    },
    {
      "commit": "1e45aae5de003657e5d18f74d34998f5de5db5b7",
      "tree": "355320038d0de8ed9b39c0cd3d3865b7fbbae1fd",
      "parents": [
        "029a74a38b56b97cbfe02b3d8e23536cea71609d"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Aug 13 19:39:53 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Aug 13 19:41:14 2010 -0700"
      },
      "message": "Add drop shadows.\n\nChange-Id: Ic6a72409d4785968d1fbdff229f17ee5c00b240b\n"
    },
    {
      "commit": "61c8c9c5b2006d18e9310b6521c65b36ffe75ce4",
      "tree": "f2a792387a3177a2e7a25290ec48bd79c62ef3e6",
      "parents": [
        "8cc82c6f4802937309dce6cba310e31358cdf6bf"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Aug 09 20:48:09 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Aug 10 12:22:01 2010 -0700"
      },
      "message": "Fix tons of bugs and add new text rendering support.\n\nChange-Id: I326c66b10784006f6df2f12d38e120cef94cd0d7\n"
    },
    {
      "commit": "9cccc2b9bdd4850a3f9679569aaec3ab98477a5d",
      "tree": "365c32954d65cf037c948ee92b14ed30243319f5",
      "parents": [
        "de0547c07a65b59d5330588cdd8b1e410a613e9c"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@android.com",
        "time": "Sat Aug 07 23:46:15 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@android.com",
        "time": "Sat Aug 07 23:48:29 2010 -0700"
      },
      "message": "Enforce maximum texture size.\n\nWhen an app tries to render a bitmap or path larger than the GPU\u0027s maximum\ntexture size, the drawing command is ignored and a warning is logged. This\nchange also makes texture drawing more robust by catching potential errors\nduring texture creation.\n\nThis change also fixes a crash in the FontRenderer. The destructor would\nsometimes try to free an uninitialized array.\n\nChange-Id: I95ae0939c52192d97b340aa02417bf6d0c962c57\n"
    },
    {
      "commit": "22158e139a3d6c6a9787ca0de224e9368f643284",
      "tree": "fac1da337f6fd11ef0761bd0a776af7f184b0ec7",
      "parents": [
        "ff0f973442d22ba6bb1231fb6e97e5f3051a7f48"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Aug 06 11:18:34 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Aug 06 11:18:34 2010 -0700"
      },
      "message": "Automatically cleanup textures that don\u0027t fit in the cache.\n\nChange-Id: I4f29ed96ea11118b391fb957e1e4d1b8fcef1537\n"
    },
    {
      "commit": "7fbcc0492fca03857e3c45064f4aa040af817d55",
      "tree": "a2422b4694ae589a60f2571070c53c7b918ec732",
      "parents": [
        "bc9151bcad5d1b1d14bb900fcc50ba08c06f87d4"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Aug 04 15:40:07 2010 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Thu Aug 05 17:23:49 2010 -0700"
      },
      "message": "Add support for paths.\n\nRendering is implementing by rasterizing the paths into A8 textures.\nThis cna be extremely inefficient if the path changes often.\n\nChange-Id: I609343f304ae38e0d319359403ee73b9b5b3c93a\n"
    }
  ]
}
