)]}'
{
  "log": [
    {
      "commit": "f8441e65526cd1721f1ad77dad21b1a1e2743d76",
      "tree": "a783f7ce274943c1fc919ba746662b962738af42",
      "parents": [
        "68533018e748ae7fa881cdb933ec18f9273cfc1e"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Mon Oct 23 13:10:41 2017 -0700"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Fri Oct 27 13:39:55 2017 -0700"
      },
      "message": "Switch to a fancy new queue\n\nTest: unit tests \u0026 benchmarks pass/faster\n\nChange-Id: I9521432172d6dd6039c5280b1265479a36a86247\n"
    },
    {
      "commit": "47fed6ba6ab8a68267a9b3ac6cb9decd4ba122ed",
      "tree": "956d3c65b24d3fdf94f30c6f6b4031903aae2ae5",
      "parents": [
        "e059b0f5851bb334a3d07d6b17365052d42d2761"
      ],
      "author": {
        "name": "Stan Iliev",
        "email": "stani@google.com",
        "time": "Wed Oct 18 17:56:43 2017 -0400"
      },
      "committer": {
        "name": "Stan Iliev",
        "email": "stani@google.com",
        "time": "Fri Oct 20 16:03:25 2017 -0400"
      },
      "message": "Fix crash in \"Tree::updateBitmapCache\"\n\nFix crash caused by updating vectordrawable cache for objects\nfrom previous frames, which may have been deleted.\n\nBug: 67940327\nTest: Ran CtsUiRenderingTestCases test\nChange-Id: I4466235e78e9b7937a0d4428240574d9e3d0989f\n"
    },
    {
      "commit": "34781b253083703502a7874df3619196bc7106cd",
      "tree": "c7cb16330a964a6ca66e89843454b0609648c8e8",
      "parents": [
        "60b108d75815e1ec10e5198c59808fdc46d5db33"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Wed Jul 05 16:39:36 2017 -0700"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Wed Jul 05 16:48:09 2017 -0700"
      },
      "message": "Move frame history into jank tracker\n\nTest: hwui_unit_tests \u0026 manual\nChange-Id: If761947652750640268217cd8cd97c8382441b44\n"
    },
    {
      "commit": "07ae505d4045e2b1ae501e87560984dae06f9dd8",
      "tree": "bbc73e6b66184751c4b72a365bda7039580bacfd",
      "parents": [
        "209705d5d76a5ccc23fa63ee8702c3f8faa025d0"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Jun 13 18:25:32 2017 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Jun 14 13:44:08 2017 -0700"
      },
      "message": "Use RGBA16F layers when wide color gamut rendering is on\n\nLayers created using View.setLayerType() or Canvas.saveLayer() need\nto be RGBA16F/scRGB-nl when within a window that requested wide color\ngamut rendering.\n\nBug: 29940137\nTest: CtsUiRenderingTestCases, CtsGraphicsTestCases, hwui_unit_tests\nChange-Id: I42fd6355448c92041491a7109e3ac8a153d38bf9\n"
    },
    {
      "commit": "f9e45d1d818ae0956ba77ed598b7040cfecca553",
      "tree": "ad24203eaa17f2dedd3bab03d5536e746aa668b7",
      "parents": [
        "f74752293d1d25633aebc42c600717d0296a0820"
      ],
      "author": {
        "name": "Derek Sollenberger",
        "email": "djsollen@google.com",
        "time": "Thu Jun 01 13:07:39 2017 -0400"
      },
      "committer": {
        "name": "Stan Iliev",
        "email": "stani@google.com",
        "time": "Tue Jun 06 14:19:37 2017 -0400"
      },
      "message": "Implement CacheManager for the Skia pipelines.\n\nThe core of the implementation is complete and provides heuristic\ncache sizing based on the size of the surface being used. This CL\nwill also be used to add the following features in the future...\n\n1) Support Vulkan pipeline reporting on the size of the surface.\n2) Complete the VectorDrawableAtlas stub code\n3) Automatic purging of stale resources for low memory devices.\n\nTest: hwui_unit_tests (new test added) and CtsUiRendering\nBug: 62260637\nChange-Id: Ib85159cca28b646fe249f2190b07f1b7e0f50d8f\n"
    },
    {
      "commit": "0ecc0ff5e07886e08f7acc00f375273514653ee7",
      "tree": "f7edd6ccec550929d9938d92382eeb5afcab2bac",
      "parents": [
        "fa3abeb31bb9fea234ab04b68fce28ff9582fe1a",
        "26a2b97dbe48ee45e9ae70110714048f2f360f97"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Jun 02 20:07:49 2017 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jun 02 20:07:56 2017 +0000"
      },
      "message": "Merge \"Enable wide color gamut rendering\""
    },
    {
      "commit": "26a2b97dbe48ee45e9ae70110714048f2f360f97",
      "tree": "1e8e25d446c598d0b552708c90878246a370ba42",
      "parents": [
        "3b3388ca64a818f2c036cf0dbf02a9e011ccc8de"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Mon Apr 17 09:39:51 2017 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Jun 02 11:02:13 2017 -0700"
      },
      "message": "Enable wide color gamut rendering\n\nWhen wide color gamut rendering is requested, hwui will now\nuse an rgba16f scRGB-nl surface for rendering. This change\nalso fixes the way screenshots are handled in the platform\nto behave properly with wide gamut rendering.\n\nThis change does not affect hardware layers. They also\nneed to use rgba16f scRGB-nl; this will be addressed in\nanother CL.\n\nBug: 29940137\nTest: CtsUiRenderingTestCases, CtsGraphicsTestCases\n\nChange-Id: I68fd96c451652136c566ec48fb0e97c2a7a257c5\n"
    },
    {
      "commit": "a67b62e15e20bac6a9664e6e6be923cf82ad4138",
      "tree": "8e8c486e25bf2aaa675de0b50961db30fc0117cd",
      "parents": [
        "f58fae54bfc2c560942e387a010368ccdb02dfd0"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Thu Jun 01 12:44:58 2017 -0700"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Thu Jun 01 13:00:34 2017 -0700"
      },
      "message": "Fix ANR \u0026 Crash on Ryu\n\nFixes impossible dequeue crash as the wrong\nstart point of the frame was used. We need\nto use the start point for RT, not the start\npoint for the frame.\n\nWorkaround for sysui ANR caused by what appears\nto be a driver bug. Drivers with the bug\nwill have transiently higher memory usage.\nDrivers without the bug will be unaffected.\n\nBug: 62213889\nBug: 62250550\nTest: Manual\n\nChange-Id: I9992b224f84bc1c40834bafff7e0013b38270ae0\n"
    },
    {
      "commit": "32414eea3e5aa55fb251255ecf84b0e54858624f",
      "tree": "9f3517f46d50a730fba39fae2a54dbfda8577336",
      "parents": [
        "f220d95f543d76878aed3f7efb199a5e1c0d9e5a"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Wed May 31 14:02:50 2017 -0700"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Wed May 31 14:02:50 2017 -0700"
      },
      "message": "Fix dequeus outside of frame drawing\n\nBug: 62213889\nTest: Repro steps in bug\nChange-Id: I8fc407b280ba82c669fc2bb03750cab139adb965\n"
    },
    {
      "commit": "df1742ed47da1e9b61afeae16fa448d5302a8aa0",
      "tree": "7986faf156f39bbe218ab13bad3ae5a1ea3dd581",
      "parents": [
        "f8a420097e54a369d3bd1aa152ea0eea58ff5c94"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Thu Jan 19 15:56:21 2017 -0800"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Tue Feb 21 09:49:10 2017 -0800"
      },
      "message": "Overhaul GraphicsStatsService\n\n* LRU cache of recently-used is dead, replaced\n  disk storage\n* ASHMEM size is read from native by the system service,\n  no longer requires keeping a sizeof() in sync with a\n  constant in Java\n* Supports dumping in proto format by passing --proto\n* Rotates logs on a daily basis\n* Keeps a history of the most recent 3 days\n\nBug: 33705836\nTest: Manual. Verified log rotating works by setting it up to\nrotate every minute instead of day. Confirmed /data/system/graphicsstats\nonly has the most recent 3 entries after several minutes\n\nChange-Id: Ib84bafb26c58701cc86f123236de4fff01aaa4aa\n"
    },
    {
      "commit": "c3f131696111a066d9efd9c7c3e37566a2a9fb89",
      "tree": "5e30bafbaa5be1aa1c9eb3dab8919c29cdd00c17",
      "parents": [
        "cec9d8cee73aca31d255d44a50bcf0409cb43cc2"
      ],
      "author": {
        "name": "sergeyv",
        "email": "sergeyv@google.com",
        "time": "Mon Feb 06 11:45:14 2017 -0800"
      },
      "committer": {
        "name": "sergeyv",
        "email": "sergeyv@google.com",
        "time": "Mon Feb 06 11:45:14 2017 -0800"
      },
      "message": "Clean up deferredLayers only onGpuContextDestroyed.\n\nTest: manual\nbug:34919311\nChange-Id: I5488b0845ec3922424f5893943e4f42675dfc9fd\n"
    },
    {
      "commit": "3e9999bd866fac71c72e6b484a9836c87c328a08",
      "tree": "5f4f3303c211e618bb8daed4b62f8ebfecccd530",
      "parents": [
        "df9a4f9a7c599ccd2348d429e6a6f0a5a415f780"
      ],
      "author": {
        "name": "sergeyv",
        "email": "sergeyv@google.com",
        "time": "Thu Jan 19 15:37:02 2017 -0800"
      },
      "committer": {
        "name": "sergeyv",
        "email": "sergeyv@google.com",
        "time": "Mon Jan 30 16:42:41 2017 -0800"
      },
      "message": "Explicitly destroy Layer in DeferredLayerUpdater on destroyHardwareResources()\n\nChange-Id: I0987104eabda9a2a302b9e765213aad48f93aea4\nTest: refactoring CL. Existing tests still pass\nbug:33753499\n"
    },
    {
      "commit": "2de950d5a8b47c7b4648ada1b1260ce4b7342798",
      "tree": "d374208f819ffd994c51f258b9732b231ba7d9a1",
      "parents": [
        "df7f28352029766755a4187786db12351ce843c6"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Wed Jan 25 10:58:30 2017 -0800"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Wed Jan 25 12:24:40 2017 -0800"
      },
      "message": "Overhaul RenderNode\u0027s DisplayList management\n\n* Move mValid to native\n* Have destroyHardwareResources destroy everything\n* Remove flaky mParentCount checks in setStaging\n* All tree updates have an internal observer to\n  ensure onRemovedFromTree() is a reliable signal\n* onRemovedFromTree() immediately releases resources\n  to avoid displaylist \"leaks\"\n\nTest: Unit tests for validity added \u0026 pass, manually\nverified that b/34072929 doesn\u0027t repro\n\nBug: 34072929\n\nChange-Id: I856534b4ed1b7f009fc4b7cd13209b97fa42a71c\n"
    },
    {
      "commit": "cd55852fcd840f7f4c4d7a0a7253a2995c77afa2",
      "tree": "a26fd09fd735944870ee122888eb7ee3b4836696",
      "parents": [
        "e03b8124d0a940e7b16be03257f55618d156fdab"
      ],
      "author": {
        "name": "Greg Daniel",
        "email": "egdaniel@google.com",
        "time": "Thu Nov 17 13:31:40 2016 -0500"
      },
      "committer": {
        "name": "Derek Sollenberger",
        "email": "djsollen@google.com",
        "time": "Fri Dec 09 15:45:15 2016 +0000"
      },
      "message": "Make buffer age work in Vulkan\n\nTest: manual testing in skiavk mode\n\nChange-Id: I5b9d8af7d9cecf2f022ef104ec33a5b7477e9e0c\n"
    },
    {
      "commit": "500a0c30d4dcd012218c3e44a62926a1c34a259f",
      "tree": "674811f3d2d545ac306a5aaf3b3132b9734f044a",
      "parents": [
        "253f81b36747f54b4ba040f523df02d4b33163b7"
      ],
      "author": {
        "name": "Stan Iliev",
        "email": "stani@google.com",
        "time": "Wed Oct 26 10:30:09 2016 -0400"
      },
      "committer": {
        "name": "Stan Iliev",
        "email": "stani@google.com",
        "time": "Thu Nov 03 13:28:49 2016 -0400"
      },
      "message": "Implement Skia pipelines for OpenGL and Vulkan.\n\nImplement Skia pipelines for OpenGL and Vulkan:\nbase SkiaPipeline, SkiaOpenGLPipeline and SkiaVulkanPipeline.\nWrite unit tests for SkiaPipeline.\n\nTest: Built and run manually on angler-eng.\nChange-Id: Ie02583426cb3547541ad9bf91700602a6163ff58\n"
    },
    {
      "commit": "050bb6a2b02fe19b7872f3eaed655346fc8a050e",
      "tree": "771ca14912eb94baccc51582150f61f36ee1285a",
      "parents": [
        "daf7229047c44947b9b02ee187fe5b13f30ebd4b"
      ],
      "author": {
        "name": "Derek Sollenberger",
        "email": "djsollen@google.com",
        "time": "Wed Oct 26 12:05:24 2016 -0400"
      },
      "committer": {
        "name": "Derek Sollenberger",
        "email": "djsollen@google.com",
        "time": "Fri Oct 28 11:08:27 2016 -0400"
      },
      "message": "Minor cleanup of unused headers and overly described functions.\n\nTest: local compile\nChange-Id: I5b794c9473f6d3a9e1d4f9365c951c7ce9dade50\n"
    },
    {
      "commit": "daf7229047c44947b9b02ee187fe5b13f30ebd4b",
      "tree": "886071f35e43c59a488073d0e039b10bc7585c85",
      "parents": [
        "be9a73063c9e2dc56ee1e29cc93308d17b18eece"
      ],
      "author": {
        "name": "Derek Sollenberger",
        "email": "djsollen@google.com",
        "time": "Tue Oct 25 12:09:18 2016 -0400"
      },
      "committer": {
        "name": "Derek Sollenberger",
        "email": "djsollen@google.com",
        "time": "Wed Oct 26 12:46:57 2016 +0000"
      },
      "message": "Move OpenGL specific details behind renderPipeline interface.\n\nTest: new and existing unit tests still pass.\nChange-Id: I6164f30f45ebe450788ed8d949eca5af9a44e585\n"
    },
    {
      "commit": "253f2c213f6ecda63b6872aee77bd30d5ec07c82",
      "tree": "45fcfd8633a122fc4509e58732743123daf8af79",
      "parents": [
        "9cf75061b143196c97c31726655c7e5c4ada8814"
      ],
      "author": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Wed Sep 28 17:34:42 2016 -0700"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Tue Oct 11 17:47:58 2016 -0700"
      },
      "message": "Linear blending, step 1\n\nNOTE: Linear blending is currently disabled in this CL as the\n      feature is still a work in progress\n\nAndroid currently performs all blending (any kind of linear math\non colors really) on gamma-encoded colors. Since Android assumes\nthat the default color space is sRGB, all bitmaps and colors\nare encoded with the sRGB Opto-Electronic Conversion Function\n(OECF, which can be approximated with a power function). Since\nthe power curve is not linear, our linear math is incorrect.\nThe result is that we generate colors that tend to be too dark;\nthis affects blending but also anti-aliasing, gradients, blurs,\netc.\n\nThe solution is to convert gamma-encoded colors back to linear\nspace before doing any math on them, using the sRGB Electo-Optical\nConversion Function (EOCF). This is achieved in different\nways in different parts of the pipeline:\n\n- Using hardware conversions when sampling from OpenGL textures\n  or writing into OpenGL frame buffers\n- Using software conversion functions, to translate app-supplied\n  colors to and from sRGB\n- Using Skia\u0027s color spaces\n\nAny type of processing on colors must roughly ollow these steps:\n\n[sRGB input]-\u003eEOCF-\u003e[linear data]-\u003e[processing]-\u003eOECF-\u003e[sRGB output]\n\nFor the sRGB color space, the conversion functions are defined as\nfollows:\n\nOECF(linear) :\u003d\nlinear \u003c\u003d 0.0031308 ? linear * 12.92 : (pow(linear, 1/2.4) * 1.055) - 0.055\n\nEOCF(srgb) :\u003d\nsrgb \u003c\u003d 0.04045 ? srgb / 12.92 : pow((srgb + 0.055) / 1.055, 2.4)\n\nThe EOCF is simply the reciprocal of the OECF.\nWhile it is highly recommended to use the exact sRGB conversion\nfunctions everywhere possible, it is sometimes useful or beneficial\nto rely on approximations:\n\n- pow(x,2.2) and pow(x,1/2.2)\n- x^2 and sqrt(x)\n\nThe latter is particularly useful in fragment shaders (for instance\nto apply dithering in sRGB space), especially if the sqrt() can be\nreplaced with an inversesqrt().\n\nHere is a fairly exhaustive list of modifications implemented\nin this CL:\n\n- Set TARGET_ENABLE_LINEAR_BLENDING :\u003d false in BoardConfig.mk\n  to disable linear blending. This is only for GLES 2.0 GPUs\n  with no hardware sRGB support. This flag is currently assumed\n  to be false (see note above)\n- sRGB writes are disabled when entering a functor (WebView).\n  This will need to be fixed at some point\n- Skia bitmaps are created with the sRGB color space\n- Bitmaps using a 565 config are expanded to 888\n- Linear blending is disabled when entering a functor\n- External textures are not properly sampled (see below)\n- Gradients are interpolated in linear space\n- Texture-based dithering was replaced with analytical dithering\n- Dithering is done in the quantization color space, which is\n  why we must do EOCF(OECF(color)+dither)\n- Text is now gamma corrected differently depending on the luminance\n  of the source pixel. The asumption is that a bright pixel will be\n  blended on a dark background and the other way around. The source\n  alpha is gamma corrected to thicken dark on bright and thin\n  bright on dark to match the intended design of fonts. This also\n  matches the behavior of popular design/drawing applications\n- Removed the asset atlas. It did not contain anything useful and\n  could not be sampled in sRGB without a yet-to-be-defined GL\n  extension\n- The last column of color matrices is converted to linear space\n  because its value are added to linear colors\n\nMissing features:\n- Resource qualifier?\n- Regeneration of goldeng images for automated tests\n- Handle alpha8/grey8 properly\n- Disable sRGB write for layers with external textures\n\nTest: Manual testing while work in progress\nBug: 29940137\n\nChange-Id: I6a07b15ab49b554377cd33a36b6d9971a15e9a0b\n"
    },
    {
      "commit": "6a21ca5a4c6b62ae277ae6dcb14bc187460321a0",
      "tree": "eb886e4b0fc727bafe15a600cdf1bc41d0fbfb56",
      "parents": [
        "c83f46dc834bd7342ab2be98f34889460ce74be4"
      ],
      "author": {
        "name": "Derek Sollenberger",
        "email": "djsollen@google.com",
        "time": "Wed Sep 28 13:39:55 2016 -0400"
      },
      "committer": {
        "name": "Derek Sollenberger",
        "email": "djsollen@google.com",
        "time": "Mon Oct 03 16:30:19 2016 -0400"
      },
      "message": "Move Layer creation/deletion into the RenderPipeline.\n\nTest: refactoring. existing tests still pass.\nChange-Id: I032c33896a0cb74c91e2a913a584373518466b88\n"
    },
    {
      "commit": "dcbc0e9e25bf99600d487f3c6f5e26487545cd9c",
      "tree": "55e9803b11d2f1d153f6890c66e9d4a551a15362",
      "parents": [
        "182f9abdf427996249cb953ffd6133fde3bbfba2",
        "0ec2fd7bc5f3c57f7783425608732d2f95f53c4a"
      ],
      "author": {
        "name": "sergeyv",
        "email": "sergeyv@google.com",
        "time": "Wed Sep 14 00:43:43 2016 -0700"
      },
      "committer": {
        "name": "sergeyv",
        "email": "sergeyv@google.com",
        "time": "Wed Sep 14 09:15:15 2016 -0700"
      },
      "message": "resolve merge conflicts of 0ec2fd7 to master\n\nChange-Id: I113ede26ab42e3f9a36a52a756c38d365731e16d\n"
    },
    {
      "commit": "af102bee518191f1e6ad843f06dcd7a64611462d",
      "tree": "b33a6dbbd6f1f4f2b8718519e50ac5935797bfcd",
      "parents": [
        "baf29e7cf433624687c9d6b3bac180d33add8e0f"
      ],
      "author": {
        "name": "sergeyv",
        "email": "sergeyv@google.com",
        "time": "Fri Sep 09 18:02:07 2016 -0700"
      },
      "committer": {
        "name": "sergeyv",
        "email": "sergeyv@google.com",
        "time": "Mon Sep 12 15:45:26 2016 -0700"
      },
      "message": "HWUI: track upload \u0026 recent usage in font cache\n\nFontCacheHistoryTracker should be turned off before shipping: b/31438876\n\nbug:30427106\nChange-Id: Ic26b25e790d4ee69e484ca0cb23dc9cc522b2ed3\n"
    },
    {
      "commit": "471a63ee35f0be76cd7c2bc9a38889b9d2062f41",
      "tree": "987404ea600d947d076bbfd8fe6d62c1dab04c95",
      "parents": [
        "43142804cdbb15d4d510ca46cae616260bf8bd90",
        "3053ac7f12a36b9db09ffc7219b798eaa24b891a"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Sep 02 20:48:22 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Sep 02 20:48:27 2016 +0000"
      },
      "message": "Merge \"Fix texture leak\""
    },
    {
      "commit": "7cae510f41d5c60da5fe83d9a0417ca6fc880df3",
      "tree": "4f90e5204f9f50c197769581d5e9a9b51aeb7ac9",
      "parents": [
        "9d6f0037a9e596ba43dfda52db7dfb0269709fa1",
        "b53c60876aaa287c90750baca026c58bb28f68c2"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Sep 02 20:10:06 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri Sep 02 20:10:06 2016 +0000"
      },
      "message": "Wait on frame work fences when frames are dropped am: 06e2e9cf4c am: 7a14f5aeb9\nam: b53c60876a\n\nChange-Id: Ib9c5be43f65379770b17260c34be90fccb360277\n"
    },
    {
      "commit": "3053ac7f12a36b9db09ffc7219b798eaa24b891a",
      "tree": "d6b8c0487bd28ec937e418fb7a3d05ea1e16758d",
      "parents": [
        "64dd8f3c59b38c7075e0900635a4ae3effea5059"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Fri Sep 02 10:14:39 2016 -0700"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Fri Sep 02 10:14:39 2016 -0700"
      },
      "message": "Fix texture leak\n\nBug: 31251593\nChange-Id: Ic86729eb6089239134213588d80459d14227ade6\n"
    },
    {
      "commit": "06e2e9cf4c3fe1eaac3271c9a346d5cc7fe5c3a8",
      "tree": "d6eb5230e13665a9bba1fc7b0b5c48f01292c5c5",
      "parents": [
        "c6c45d225cba9ecc4521de61c3af49cc038d685a"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Aug 31 17:32:46 2016 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Aug 31 17:32:47 2016 -0700"
      },
      "message": "Wait on frame work fences when frames are dropped\n\nbug:30895941\n\nPrevents a race where frame work could interleave between frames,\ncausing SurfaceView position updates to be delivered out of order.\n\nChange-Id: I01e4cc557b69dcf33e877a0e16c0d115ec95e4cc\n"
    },
    {
      "commit": "0ddfbc46c434e8ce26919ee74526cda0d8d199af",
      "tree": "3056b32f0fd28f7dceab022f618a64874cb0f119",
      "parents": [
        "f70bb567099339fc46c0e00ae3494ca8c61af7da",
        "77e5333520367098407b2aa87591a9b4fbec49f8"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Mon Aug 08 15:13:25 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Mon Aug 08 15:13:25 2016 +0000"
      },
      "message": "Ensure Dequeue/Queue duration is always set am: 70e89c9c37 am: ed343def3e\nam: 77e5333520\n\nChange-Id: I0c51b04c0dd7bafecf03c42417c4247fd281c325\n"
    },
    {
      "commit": "70e89c9c376bf5bb20498c5c952cf665b2cd7375",
      "tree": "7dcc509bd14579306d43fc3e279becf5c8a6df01",
      "parents": [
        "b11cc6cbd370a991eea4d9fecaa1f0eee5f9002f"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Fri Aug 05 10:50:36 2016 -0700"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Fri Aug 05 10:50:36 2016 -0700"
      },
      "message": "Ensure Dequeue/Queue duration is always set\n\nBug: 30662749\nChange-Id: I35a4c26ce78536fc7a506ec2f92a8b9eecb12ec2\n"
    },
    {
      "commit": "2e729ebf5f1a9a17851e34dbbe176dcf2c5a65ab",
      "tree": "d75cbdcd0f8637ab309b7389b1317353961605f5",
      "parents": [
        "c3d6b82e40e01eacd9eba86ed08b6fa31e6bc354",
        "4ec05be5352620daba384252c569248c96a6ca05"
      ],
      "author": {
        "name": "Doris Liu",
        "email": "tianliu@google.com",
        "time": "Tue Aug 02 18:32:18 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Tue Aug 02 18:32:18 2016 +0000"
      },
      "message": "Put VD animators on paused list when RT stops drawing am: c82e879e56 am: 70b6080cd7\nam: 4ec05be535\n\nChange-Id: I22e66e33aa51064230351f1fd24e5fb200511213\n"
    },
    {
      "commit": "70b6080cd7eabe7a30bf2d4e2eca2325dc1ff4f0",
      "tree": "09c961878b51a790e9b358122debcac17461ca09",
      "parents": [
        "744a887cb0f048b98028fc8c2b054dbd0af9c9ab",
        "c82e879e563ad692cabf19f61a08559c6220171e"
      ],
      "author": {
        "name": "Doris Liu",
        "email": "tianliu@google.com",
        "time": "Tue Aug 02 18:15:44 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Tue Aug 02 18:15:44 2016 +0000"
      },
      "message": "Put VD animators on paused list when RT stops drawing\nam: c82e879e56\n\nChange-Id: I9f0202c8e69e681014253842b2a2de75d372616b\n"
    },
    {
      "commit": "0cf4d47a4094a43984a5215ab1a283b0fdcf87a8",
      "tree": "e71bf27bc7805f7f3965b295772d447e8c0cbb89",
      "parents": [
        "0d8f164cdea03c8b114d6627c821fbcbae0ec298",
        "c82e879e563ad692cabf19f61a08559c6220171e"
      ],
      "author": {
        "name": "Doris Liu",
        "email": "tianliu@google.com",
        "time": "Tue Aug 02 18:08:04 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Aug 02 18:08:05 2016 +0000"
      },
      "message": "Merge \"Put VD animators on paused list when RT stops drawing\" into nyc-mr1-dev"
    },
    {
      "commit": "56f9ccfa152af98021ed9537d9ee823c35b9e473",
      "tree": "fd2fb5300bf7cb8202c819246828b442620ccce5",
      "parents": [
        "66cb444f12cf1fede38056a913a309be14f8f2b6",
        "86e700ebc99a84684362e5c2bf8e620ae5f316fb"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Tue Aug 02 02:23:48 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Tue Aug 02 02:23:48 2016 +0000"
      },
      "message": "Fix null deref crash am: 882d515cd5 am: ed93e111c5\nam: 86e700ebc9\n\nChange-Id: I97412741a5f41fa0c5bec56795cf7f7b8875f738\n"
    },
    {
      "commit": "882d515cd54627f320269aa2d744f1c9f1a75c71",
      "tree": "e152f732fad7c83aab9b7b4176aee8b41ba1a5f2",
      "parents": [
        "fbd93027e4f8024642271652e490653a4d0c2b55"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Mon Aug 01 14:41:08 2016 -0700"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Mon Aug 01 14:52:25 2016 -0700"
      },
      "message": "Fix null deref crash\n\nBug: 30560152\nChange-Id: Ic4bae380e27de5bea80cec484e83d205e078ec43\n"
    },
    {
      "commit": "c82e879e563ad692cabf19f61a08559c6220171e",
      "tree": "52afc004a494c4185fca4cef1bace8df200cc6fa",
      "parents": [
        "7dd40cd4117cb7cf57d37f04088e4c55be423c1c"
      ],
      "author": {
        "name": "Doris Liu",
        "email": "tianliu@google.com",
        "time": "Fri Jul 29 16:45:24 2016 -0700"
      },
      "committer": {
        "name": "Doris Liu",
        "email": "tianliu@google.com",
        "time": "Mon Aug 01 21:42:15 2016 +0000"
      },
      "message": "Put VD animators on paused list when RT stops drawing\n\nWhen we stop scheduling for new frames on RenderThread, we should\nput the running animations on pause, rather than purge the list\nof the running animations, such that in the next full\nsync, the animations that were paused will continue to run.\n\nBUG: 30226711\nChange-Id: I36ff6f5d26ffa7999f60ca0ff676a35157577dc2\n"
    },
    {
      "commit": "63d8aa930f8859978200b7af8664aefc33fd2a51",
      "tree": "f27523bc62a3400a4e69668d380fecf8982f14c1",
      "parents": [
        "a3ccd90dafb6a66bf5fb620561ed9fe177a46d3f",
        "fb5c675b7e1fee074f19cf1866b5dda0785dbe64"
      ],
      "author": {
        "name": "Hugo Benichi",
        "email": "hugobenichi@google.com",
        "time": "Sun Jul 31 02:13:00 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Sun Jul 31 02:13:00 2016 +0000"
      },
      "message": "Merge \\\\\\\"Fix missing IpConnectivity metrics\\\\\\\" into nyc-mr1-dev am: 66e7752ad1 am: b2db402899\nam: fb5c675b7e\n\nChange-Id: Iba1f81a892acd9f541b9dd564203bfebc56c9c73\n"
    },
    {
      "commit": "67daab6a1e0897cd0528a19071eeb9f4a2b00b49",
      "tree": "23a3b148e0f9319a9a47ed56abc200b2dd58e21d",
      "parents": [
        "b2db4028990c041c3dd9abdbecf9931a0363f3e1",
        "2d5b8d73929a38b019c6b6276d4a19542b990f0c"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Fri Jul 29 16:31:38 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri Jul 29 16:31:38 2016 +0000"
      },
      "message": "Teach JankTracker about new swap behaviors\nam: 2d5b8d7392\n\nChange-Id: I28afc748f8a43944863bd752c3bd2cb983d19c23\n"
    },
    {
      "commit": "34921ac1104e155682c6e807856e3e06f756c8f3",
      "tree": "3849b0be75da60ade46611e4ac69f86294a9275b",
      "parents": [
        "66e7752ad15f761d09155976b37cb94fc36937d9",
        "2d5b8d73929a38b019c6b6276d4a19542b990f0c"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Jul 29 16:25:49 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jul 29 16:25:51 2016 +0000"
      },
      "message": "Merge \"Teach JankTracker about new swap behaviors\" into nyc-mr1-dev"
    },
    {
      "commit": "b5405b171c4abe4fa4f7f9c13d8bcb83fc7c9639",
      "tree": "6a7ec619682c4a1209d1d3631a2392015a0790d0",
      "parents": [
        "9a96d592d76b14109ae4f067954b013af8ec2382",
        "fd6bf88724d4f9e38bbe5273debbdc22ca0485d8"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Fri Jul 29 16:10:15 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri Jul 29 16:10:15 2016 +0000"
      },
      "message": "Drop less aggressively am: a3d795a34a am: 62ec371a9e\nam: fd6bf88724\n\nChange-Id: I4a6bd075a1989b942c2531048d5d5335a24874f4\n"
    },
    {
      "commit": "2d5b8d73929a38b019c6b6276d4a19542b990f0c",
      "tree": "d0224acca3391c34e4b2c33aac2bc8c685bea93b",
      "parents": [
        "255ad67b2e61c5ac407c5ef539275b4de99186b4"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Thu Jul 28 15:36:11 2016 -0700"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Fri Jul 29 07:56:02 2016 -0700"
      },
      "message": "Teach JankTracker about new swap behaviors\n\nBug: 30440166\n\nIf we are using HWC2, there\u0027s a change in timing\nwhen in triple buffering with the pipelined offsets.\nThis changes JankTracker to recognize that and silently\nerase that from the total duration\n\nChange-Id: Ib1fd4209070f17dbd2baed707c8cf73fb11c3cf2\n"
    },
    {
      "commit": "a3d795a34a786bbe8b5027f70df36b81328109c2",
      "tree": "c4e8767cf647ddf5ad349bddbd62af5c09050d64",
      "parents": [
        "255ad67b2e61c5ac407c5ef539275b4de99186b4"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Wed Jul 27 19:28:05 2016 -0700"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Wed Jul 27 19:28:05 2016 -0700"
      },
      "message": "Drop less aggressively\n\nBug: 30342762\n\nFrame dropping was too frequent and would trigger\nduring normal triple buffering steady state. Bump\nthe threshold to drop from 3ms stall to 6ms stall.\n\nChange-Id: I5c1faeaabf0d02323a28e697a4af4105fbcf1c53\n"
    },
    {
      "commit": "56ad6ec42f814e9e61030ff819cac4e5d31def8b",
      "tree": "610b7d16969d959520f57185b0845f47dddb303b",
      "parents": [
        "e116bcf72a71f96c0c5bfcd79a329c7c77eabf34"
      ],
      "author": {
        "name": "Derek Sollenberger",
        "email": "djsollen@google.com",
        "time": "Fri Jul 22 12:13:32 2016 -0400"
      },
      "committer": {
        "name": "Derek Sollenberger",
        "email": "djsollen@google.com",
        "time": "Tue Jul 26 13:05:13 2016 -0400"
      },
      "message": "Remove LayerRenderer.\n\nThere is only one caller each for the static functions here so this\nCL moves the logic to the caller.  Also by moving some of the code\ninto the pipeline it makes it easier for future changes to configure\nhow a pipeline handles a layer.\n\nChange-Id: Ib735b5154325cbb658fd151f7a19dbf434ab44b7\n"
    },
    {
      "commit": "cf3e1a7fa847e6895c3bc8d9549d2ed9ce736608",
      "tree": "bcc370b0013e467642cccfbaa33b0459dfe265d3",
      "parents": [
        "7d261d7e3c6e2915a78816eee7ba53f555d346f1",
        "3c37412900502fd491cc40e1df594ee1f45af1b2"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Jul 21 00:59:49 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu Jul 21 00:59:49 2016 +0000"
      },
      "message": "Merge \\\\\"Change swap chain stuffed detection logic\\\\\" into nyc-mr1-dev am: 433a19e8bf\nam: 3c37412900\n\nChange-Id: Id7e0d1d1dfb5448dd927c29361fb98aabf0cfe10\n"
    },
    {
      "commit": "3163568806f2f1c360f93772453f4b0b3a9b2e47",
      "tree": "42c85718d3f12b8738934b1caa13297fd17a80b7",
      "parents": [
        "2f8bf1f024a63041693ff2a1e04269b2cbff8b36"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue Jul 19 17:59:12 2016 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Jul 20 16:47:03 2016 -0700"
      },
      "message": "Change swap chain stuffed detection logic\n\nbug:29771461\nbug:29413700\nbug:30181577\n\nChanges frame interval gap detection to look for wider gaps, as they\nwere incorrectly firing all the time.\n\nAlso adds a 500ms minimum gap between frames dropped because of stuffed\nswap chain, to prevent dropping too often.\n\nChange-Id: If16ed637d54bf37015704be102c5c2e3731a0824\n"
    },
    {
      "commit": "44b7f75587fbd8e382b3a58e5f272a9776f1efc2",
      "tree": "ca53aecfe18fe3ad3c5cc9ce130b7cd5cfe0f260",
      "parents": [
        "be4eae9f9f2d86e99ceb3977778ba7c1ba47aea4",
        "619682b960eca422fbf0387e0bc32875c76bf170"
      ],
      "author": {
        "name": "Tim Murray",
        "email": "timmurray@google.com",
        "time": "Tue Jul 19 00:33:04 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Tue Jul 19 00:33:04 2016 +0000"
      },
      "message": "Merge changes I15da2563,I7845542d into nyc-mr1-dev am: 7b8b1aab93\nam: 619682b960\n\nChange-Id: I98afd5bead70cf25ca43e49c1215ccef1e472a83\n"
    },
    {
      "commit": "ffde6274f7acb988ce181454b4d5abe3cef483b5",
      "tree": "de0670c03042e37915338ff913346fcbdf18940d",
      "parents": [
        "117cf8de912f4a58e94ffa535ae33d7a3ade7953"
      ],
      "author": {
        "name": "Tim Murray",
        "email": "timmurray@google.com",
        "time": "Mon Jul 18 14:11:28 2016 -0700"
      },
      "committer": {
        "name": "Tim Murray",
        "email": "timmurray@google.com",
        "time": "Mon Jul 18 15:35:36 2016 -0700"
      },
      "message": "add tracepoint for when the display chain is stuffed\n\nbug 30173296\n\nChange-Id: I7845542d4e5c19ccb7c3ee6498cc2d70278b5397\n"
    },
    {
      "commit": "b4c51cf024f705f104ef4a3f8cede2302806d72c",
      "tree": "5031c6182b97dcc4f79c7b57983b4d30b88ff771",
      "parents": [
        "7e542cb63366def4fb0c793ae9e414f2cc8069ef",
        "8a33e4019991c58b06adf2e3a9ac1eeeccd8fa94"
      ],
      "author": {
        "name": "Stan Iliev",
        "email": "stani@google.com",
        "time": "Thu Jul 14 17:10:24 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jul 14 17:10:25 2016 +0000"
      },
      "message": "Merge \"Move isSkiaEnabled to the Properties class\""
    },
    {
      "commit": "768e39335b668e8ef25fef30ab42b2d6d29a4735",
      "tree": "91f0385269fd844a0438159f108c641e34072d2c",
      "parents": [
        "d79f237d63cbf612ad6334c76cf29d88f81c7a8f"
      ],
      "author": {
        "name": "Stan Iliev",
        "email": "stani@google.com",
        "time": "Fri Jul 08 21:34:52 2016 -0400"
      },
      "committer": {
        "name": "Stan Iliev",
        "email": "stani@google.com",
        "time": "Wed Jul 13 14:14:12 2016 -0400"
      },
      "message": "Refactor CanvasContext: move OpenGL specific code\n\nMove OpenGL specific code from CanvasContext into a new class\nOpenGLPipeline.\n\nChange-Id: I4363053f890701a4235927b59ec588861488ea8f\n"
    },
    {
      "commit": "8a33e4019991c58b06adf2e3a9ac1eeeccd8fa94",
      "tree": "a43c168540361b613a28fe5ac096d6d50a6f2852",
      "parents": [
        "d79f237d63cbf612ad6334c76cf29d88f81c7a8f"
      ],
      "author": {
        "name": "Stan Iliev",
        "email": "stani@google.com",
        "time": "Fri Jul 08 09:57:49 2016 -0400"
      },
      "committer": {
        "name": "Stan Iliev",
        "email": "stani@google.com",
        "time": "Mon Jul 11 12:01:51 2016 -0400"
      },
      "message": "Move isSkiaEnabled to the Properties class\n\nMove CanvasContext::isSkiaEnabled to Properties:isSkiaEnabled.\n\nChange-Id: I0a62f43825cf59ba338a24a056e8c2a56d1c5315\n"
    },
    {
      "commit": "5e00c7ce063116c11315639f0035aca8ad73e8cc",
      "tree": "6ca43728a401d92762fb5fd65cfd39afe9438571",
      "parents": [
        "32d9ae186733115802eafe241c2029a63794efc2"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Jul 06 16:10:09 2016 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Jul 07 15:53:50 2016 -0700"
      },
      "message": "Delete old rendering pipeline\n\nfixes: 30002246\n\nChange-Id: I45df0e924708526cee045b14c291bd23aa1a92db\n"
    },
    {
      "commit": "a1a529eec0f1183c2dbb09d9c6fd12211154bebd",
      "tree": "ca358a5e7b835c6ee6975d511294d2171b3d4483",
      "parents": [
        "5c1d5461c9e44c48c22819d6985406f056eca35a",
        "03de074d05108fa9fb07c6b847c7163ada5776da"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Jul 07 20:09:45 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jul 07 20:09:46 2016 +0000"
      },
      "message": "Merge \"Implement runtime switch to select default renderer mode\""
    },
    {
      "commit": "6f98aa2ff83de7b3f650529c3995b4276c3d3bd5",
      "tree": "ed7a34feef323e2642beaf9e95505862c1396be8",
      "parents": [
        "3f5161c625258ac57848d3590e1f5c153f4a71a8",
        "764045da2ce980f1eee78171de5b4f09dfb601a7"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Jul 07 18:49:38 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jul 07 18:49:39 2016 +0000"
      },
      "message": "Merge \"Unify readback Surface/TextureView copy mechanism\""
    },
    {
      "commit": "03de074d05108fa9fb07c6b847c7163ada5776da",
      "tree": "161b8ab10378c72000221ef563ac9b7cdd81f3ae",
      "parents": [
        "219d9ba4fae554974fc0d2370f8b4556878307a3"
      ],
      "author": {
        "name": "Stan Iliev",
        "email": "stani@google.com",
        "time": "Thu Jul 07 12:35:54 2016 -0400"
      },
      "committer": {
        "name": "Stan Iliev",
        "email": "stani@google.com",
        "time": "Thu Jul 07 14:27:20 2016 -0400"
      },
      "message": "Implement runtime switch to select default renderer mode\n\nAdd a system property debug.hwui.default_renderer, which allows\nto set rendering mode to OpenGL (default), Skia OpenGL or Vulkan.\n\nChange-Id: I8bca5bacc5108f77437e340ac61f2d8db8cc4c39\n"
    },
    {
      "commit": "764045da2ce980f1eee78171de5b4f09dfb601a7",
      "tree": "428bd2abe0da577006689d84f03f632fd43dbc93",
      "parents": [
        "eecaafb9cc905f9d69a13e662ea4839374dbe882"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Jul 06 17:14:05 2016 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Jul 07 10:02:12 2016 -0700"
      },
      "message": "Unify readback Surface/TextureView copy mechanism\n\nRemoves last usage of old rendering pipeline.\n\nChange-Id: Ia920dec9cd726ca221e11e888562c7df39a9761e\n"
    },
    {
      "commit": "e7f27fbf93ad0c26dfc6142ff1fde4a70b94aa23",
      "tree": "3d49666861cf49304da8a0cc7404d65dee9fc27f",
      "parents": [
        "c48903b7e9ab79a18b71c1f937a4e31fe088307c",
        "63543364933f51d69475b984adf4d6fa74fff041"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Thu Jul 07 16:40:20 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu Jul 07 16:40:20 2016 +0000"
      },
      "message": "Merge \\\\\"Consider queue \u0026 dequeue times for should draw\\\\\" into nyc-mr1-dev am: 3a465e7a12\nam: 6354336493\n\nChange-Id: Idbe85f08c27cc6f9433badd886a1fe7d9ba73c4f\n"
    },
    {
      "commit": "0def73aac5956d82a065fd75e90eac4c58418e03",
      "tree": "f09c94a473b78cfad353eaae7995d3c2ba21ad29",
      "parents": [
        "da68f0614c50f1dce4bde8bad6fccd2a8573ad51"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Fri Jul 01 16:19:13 2016 -0700"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Wed Jul 06 17:00:43 2016 -0700"
      },
      "message": "Consider queue \u0026 dequeue times for should draw\n\nBug: 29413700\n\nChange-Id: I4b27b077af569e3c60c57b0e11501e9f3af70579\n"
    },
    {
      "commit": "f1480761c1a83aecd09cdd473ec797a41d1a2f3f",
      "tree": "09dcdd59f5198ec1a333ad0ca614b62fd04b28bb",
      "parents": [
        "c179797f8e8cd232d544aa4a037635958255f8c0"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Sun Jul 03 18:28:25 2016 -0700"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Wed Jul 06 10:50:21 2016 -0700"
      },
      "message": "Benchmark-mode for macrobench\n\nAdds googlebench output format support\nAdds offscreen rendering for \u003e60fps benchmarking\nAdds \u0027all\u0027 alias to run all registered TestScenes\n\nChange-Id: I2579e40f2f4c941bfbd90c75efbee384c08a116b\n"
    },
    {
      "commit": "05357641d398ef77d880da387a230820ab3203fe",
      "tree": "9b20c55577aad1dc27dc234e17a64d456c725fb8",
      "parents": [
        "ce447b000f2bef58db7d2be83504f303498a0809"
      ],
      "author": {
        "name": "Derek Sollenberger",
        "email": "djsollen@google.com",
        "time": "Wed Jun 29 11:12:04 2016 -0400"
      },
      "committer": {
        "name": "Derek Sollenberger",
        "email": "djsollen@google.com",
        "time": "Wed Jun 29 11:12:04 2016 -0400"
      },
      "message": "Remove unused method from RenderProxy and CanvasContext.\n\nChange-Id: I324bbfa40a2155d0212fa20c6bd39df5bb21d27a\n"
    },
    {
      "commit": "a1a0bbddba8d01830e9c7e2c90f34306c2802add",
      "tree": "caafd31dab19fd95cac2b348ec11bf1d5a7391f0",
      "parents": [
        "e08cb99a52db11088e4559c3ad9139089e6f9c62",
        "892f8e7d4f6391ce267d5add91638014e6c0e5d5"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Tue Jun 28 01:36:19 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Tue Jun 28 01:36:19 2016 +0000"
      },
      "message": "Merge \\\\\"Fix SurfaceViewPositionListener race bugs\\\\\" into nyc-mr1-dev am: 8701bff9ba\nam: 892f8e7d4f\n\nChange-Id: I1e66186dce36e52cafe6c0d027aeae7c9345703c\n"
    },
    {
      "commit": "7b570deea65bc7ac417a26ce3e4103bcef30e957",
      "tree": "6e19b0c299e7bf7da395cddbe5f0d2384af5b28a",
      "parents": [
        "157c6811de9bec883dfc802481bd07e64ca7ce59"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Mon Jun 27 13:27:23 2016 -0700"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Mon Jun 27 13:35:13 2016 -0700"
      },
      "message": "Fix SurfaceViewPositionListener race bugs\n\nBug: 29628138\n\n1: Make windowPositionLost synchronous as that\u0027s\nwhat the Java side was expecting\n\n2: Make the listener ref counted as otherwise\nthere\u0027s a race condition with the GC, which could\nend up with use-after-frees\n\n3: Ensure that all position updates are invoked\nprior to frame completion\n\nChange-Id: Iedbc017f611ba2878a49b4586612f79249ca2fe3\n"
    },
    {
      "commit": "ab1080c4d075b008cebdd9a2031ebbd51f9c2729",
      "tree": "51f0a5866b266286a3ff28056891166917e5fcbe",
      "parents": [
        "6465299aec330df82206cec459c16080c25e2297"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Tue Jun 21 16:24:20 2016 -0700"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Tue Jun 21 16:24:20 2016 -0700"
      },
      "message": "Delete unused args\n\nBug: 21170575\nChange-Id: Icc832f70f206342557f44667ad3498405d04db78\n"
    },
    {
      "commit": "21a7b6e8e36dc9d4a163d809f9cdccb867e9b19c",
      "tree": "ec653feea2cc63af10b70a0f47aa27cd08dc3497",
      "parents": [
        "0239f4d1c21a8aeb56e6ad8e22222274f83ff1b4",
        "6c3281a7c7a2d57ff8de89dcad1ab62e34bf0d5d"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Tue Jun 14 15:04:35 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Tue Jun 14 15:04:35 2016 +0000"
      },
      "message": "Merge \\\\\\\"Redraw if dirty during stopped when resumed\\\\\\\" into nyc-dev am: 5b4ff21a74 am: fc4c59a10c\nam: 6c3281a7c7\n\nChange-Id: I67192e2450293a6520a30ed78c8381b89558841b\n"
    },
    {
      "commit": "fc4c59a10cfd3cdbecf83657b74fbcedc70d3ada",
      "tree": "a6833e8c3549b78e48302907bd9b4e0b87aa0db7",
      "parents": [
        "31e9b4c8c7e420ff96ed1ed32416f1f543e14ab8",
        "5b4ff21a749dbe2e8990fc1000eb1e2694c04e4f"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Tue Jun 14 14:54:18 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Tue Jun 14 14:54:18 2016 +0000"
      },
      "message": "Merge \\\"Redraw if dirty during stopped when resumed\\\" into nyc-dev\nam: 5b4ff21a74\n\nChange-Id: If4eedb4a4c1ff6d4e96f8b0db4ddd846a2967a9f\n"
    },
    {
      "commit": "306f331f91a86da271ce30d4f14d6badf0d25704",
      "tree": "40a92237e50da143f7d076c2ed304a7a8d950519",
      "parents": [
        "9b5a78072281ebf0182234d56b6ec174e911d24e"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Fri Jun 10 16:01:55 2016 -0700"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Fri Jun 10 16:28:59 2016 -0700"
      },
      "message": "Redraw if dirty during stopped when resumed\n\nChange-Id: I0034d1da7704de53c4ba3da3e8ef3109445f9e6a\nFixes: 28283031\n"
    },
    {
      "commit": "718cd3eb70703c43f29ca37907bbf0e153d8cca0",
      "tree": "cf1d4ce2d7c0a2ca19289257d3a8538ecfbaf8cb",
      "parents": [
        "a2da20d3344010b8f3ca6cc5fea265984662959c"
      ],
      "author": {
        "name": "Doris Liu",
        "email": "tianliu@google.com",
        "time": "Tue May 17 16:50:31 2016 -0700"
      },
      "committer": {
        "name": "Doris Liu",
        "email": "tianliu@google.com",
        "time": "Thu Jun 09 10:27:59 2016 -0700"
      },
      "message": "Handle hidden RT VectorDrawable animators\n\nThis CL changes the target of VD specific animators to VectorDrawable,\ninstead of RenderNode. The benefit of doing so is that animators can\nnow detect whether the animation is meaningful by checking whether\ntheir VD target is in the display list. If not, that means the VD is\nnot drawing for the current frame, in which case we can be smarter\nand more power efficient by removing the animator from the list and\nposting a delayed onFinished listener callback.\n\nBy setting VD as the animation target, when an ImageView decides to\nupdate its drawable from one AVD to something else, we\u0027ll be able\nto detect that the previous AVD is no longer in the display list,\nand stop providing animation pulse to the stale AVD, which is\nsomething we couldn\u0027t do previously.  This change also\nhandles the case where one AVD instance could be drawn in two\ndifferent views.\n\nBug: 27441375\nChange-Id: Iaad1ed09cfd526276b95db0dd695275c28e074e8\n"
    },
    {
      "commit": "67ce99b66ebc816ae8bbc222db8f3695fb15495b",
      "tree": "2abfbaf39d8bfb360155c251b5be2f2d68c34356",
      "parents": [
        "2a86e67c41cc2c0a6f8a3c18f77da1a1ea7055ec"
      ],
      "author": {
        "name": "Doris Liu",
        "email": "tianliu@google.com",
        "time": "Tue May 17 16:50:31 2016 -0700"
      },
      "committer": {
        "name": "Doris Liu",
        "email": "tianliu@google.com",
        "time": "Thu May 26 11:13:19 2016 -0700"
      },
      "message": "Handle hidden RT VectorDrawable animators\n\nThis CL changes the target of VD specific animators to VectorDrawable,\ninstead of RenderNode. The benefit of doing so is that animators can\nnow detect whether the animation is meaningful by checking whether\ntheir VD target is in the display list. If not, that means the VD is\nnot drawing for the current frame, in which case we can be smarter\nand more power efficient by removing the animator from the list and\nposting a delayed onFinished listener callback.\n\nBy setting VD as the animation target, when an ImageView decides to\nupdate its drawable from one AVD to something else, we\u0027ll be able\nto detect that the previous AVD is no longer in the display list,\nand stop providing animation pulse to the stale AVD, which is\nsomething we couldn\u0027t do previously.  This change also\nhandles the case where one AVD instance could be drawn in two\ndifferent views.\n\nBug: 27441375\nChange-Id: Id4b3b37f28274c917cb9beb9dcd3d1e6991b5c5d\n"
    },
    {
      "commit": "d53e3bed1ca4a14b2a86d53eaef6969bd043176e",
      "tree": "887a75bd3c30064ed2a00c484fd25cbf5d921ccf",
      "parents": [
        "5b93c24bc08d91cd8d6c4701e4dbfa3ddb802753"
      ],
      "author": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Tue May 03 10:02:51 2016 -0700"
      },
      "committer": {
        "name": "Chih-Hung Hsieh",
        "email": "chh@google.com",
        "time": "Tue May 03 10:02:51 2016 -0700"
      },
      "message": "Fix google-explicit-constructor warnings.\n\nBug: 28341362\nChange-Id: I080090d50f1a368a4e7c1a0732297bb6a295e34f\n"
    },
    {
      "commit": "8cddce3f8f503b2aa8b993fef6406645c3e80da6",
      "tree": "5562ead370942b21974ed45ac40093724d4b5d46",
      "parents": [
        "b05e4851d01473432e841e757f2c96fd60ab300e",
        "28912a508493e583c48772e2a234e0ed66849490"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Mon Apr 18 23:20:37 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Apr 18 23:20:39 2016 +0000"
      },
      "message": "Merge \"Make getFrameNumber lazy\" into nyc-dev"
    },
    {
      "commit": "28912a508493e583c48772e2a234e0ed66849490",
      "tree": "72f09e9a74f753bbb09925bb37a9f28e12d06bd2",
      "parents": [
        "7d0b8d792886b2ed5ff89ac6c2723fba9d44c7d4"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Mon Apr 18 14:34:18 2016 -0700"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Mon Apr 18 14:34:18 2016 -0700"
      },
      "message": "Make getFrameNumber lazy\n\nChange-Id: I783de544ad9a3636ea90f1c8c4034738997bfbc8\nFixes: 28246085\n"
    },
    {
      "commit": "c79c3246c9a3e0d2aa34afd18fddc95a6aff0f30",
      "tree": "b5bcb883b826834e64951b59f9451e074b829773",
      "parents": [
        "77ca3629f60dd9a416938e625959d0bd750d1acd",
        "9cd1bbe5c9e14472e631d8cc10005613925f34af"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Apr 18 19:40:49 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Apr 18 19:40:50 2016 +0000"
      },
      "message": "Merge \"Improve multi-window render clipping logic\" into nyc-dev"
    },
    {
      "commit": "9cd1bbe5c9e14472e631d8cc10005613925f34af",
      "tree": "acbe56e34c3090b23f53c4594a7efd7d70506d80",
      "parents": [
        "e1b1ce77da273da6fc89d04a9c8ec09d0d8adca1"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Thu Apr 14 16:08:25 2016 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Mon Apr 18 10:39:02 2016 -0700"
      },
      "message": "Improve multi-window render clipping logic\n\nFixes: 28125010\n\nRestructures \u0027scene defer\u0027, to implement window backdrop overdraw\navoidance in new render pipeline, and disable clipping to content draw\nbounds.\n\nAlso restructures FrameBuilder\u0027s constructors, to separate out into\nmultiple defer methods.\n\nChange-Id: I53facb904c1a4a4acc493d8a489921a79a50494e\n"
    },
    {
      "commit": "8afcc76920499d0a384dba1470c5a377f80ed768",
      "tree": "d6c10ca146b7b28daaf18544ed3d338b9ed08946",
      "parents": [
        "5352dda479452c248f87521d6c69c9dd8399ebb7"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Wed Apr 13 10:24:06 2016 -0700"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Thu Apr 14 10:39:03 2016 -0700"
      },
      "message": "Revert \"Revert \"Make stopped state a first-class thing\"\"\n\nThis reverts commit eab3f2658aa41d37c3b05d49a2ce4e3f4ed85399.\n\nFixes first-frame issue, mReportNextDraw needs to override\nmStopped\n\nFixes: 28118961\nFixes: 27286867\n\nChange-Id: I5c811759637d08ba9f3b342016d1b3006986d5a2\n"
    },
    {
      "commit": "825fa4d5ae7b2907ee1769d09e6333306de2a92e",
      "tree": "26385820dbc923e739d059f9c47197b88634ae22",
      "parents": [
        "cf0cc881ebf2c2f00129dd9e045e23f6bf970d54",
        "eab3f2658aa41d37c3b05d49a2ce4e3f4ed85399"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Mon Apr 11 20:54:35 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Apr 11 20:54:36 2016 +0000"
      },
      "message": "Merge \"Revert \"Make stopped state a first-class thing\"\" into nyc-dev"
    },
    {
      "commit": "eab3f2658aa41d37c3b05d49a2ce4e3f4ed85399",
      "tree": "ca0e0aa6f9e895f7e8dc22e60e0eadb28bc51688",
      "parents": [
        "945961f78a78eced823d5ba78505c781b079703d"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Mon Apr 11 20:49:28 2016 +0000"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Mon Apr 11 20:49:28 2016 +0000"
      },
      "message": "Revert \"Make stopped state a first-class thing\"\n\nThis reverts commit 945961f78a78eced823d5ba78505c781b079703d.\n\nChange-Id: Iebc1d49fac33380233f8785fc39bec6c30a5e714\n"
    },
    {
      "commit": "c724dcf23c5e2ebd22c042a8a6f2424b7e9d5029",
      "tree": "011af96ab684103081b8729bf436b4c8725aa28c",
      "parents": [
        "4a735441e82207e18036be09d0d02c855930938f",
        "945961f78a78eced823d5ba78505c781b079703d"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Fri Apr 08 15:09:40 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Apr 08 15:09:42 2016 +0000"
      },
      "message": "Merge \"Make stopped state a first-class thing\" into nyc-dev"
    },
    {
      "commit": "945961f78a78eced823d5ba78505c781b079703d",
      "tree": "770f49272fa8c981be4f0e1d9c1c3fc3726dfdf3",
      "parents": [
        "3397c88f7900d8db677204cdbe9e7a5dc26e453a"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Thu Apr 07 16:02:33 2016 -0700"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Thu Apr 07 16:02:33 2016 -0700"
      },
      "message": "Make stopped state a first-class thing\n\nBug: 27286867\n\nWindowManager has committed to stopped state\ncontrolling the lifecycle of the Surface, so\nmake that a first-class thing in HWUI as well.\n\nThis makes it more resistent to things like\na rogue updateSurface() happening while mStopped\u003dtrue,\nleading to bad things down the line. Instead let\nthe surface be changed/updated as often as desired,\nand just block any attempt to draw on that surface.\n\nAlso removes some unnecessary makeCurrent()s, as\nEglManager ensures that we *always* have a valid\nGL context now (using a pbuffer surface if there is\nno window surface set)\n\nChange-Id: Iead78ddebc7997e8fdb0c9534836352f5e54b9bd\n"
    },
    {
      "commit": "51f2d606dcbfba3cc5b03dfea37c1304b91c232f",
      "tree": "110249f497eddafcb33ba8aed6989bd965b2a7da",
      "parents": [
        "3397c88f7900d8db677204cdbe9e7a5dc26e453a"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Wed Apr 06 07:50:47 2016 -0700"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Thu Apr 07 14:10:43 2016 -0700"
      },
      "message": "Fix some edge cases\n\nBug: 27709981\n\nThis desperately needs a refactor, but to keep\nthe current (really needed \u0026 nice) behavior of\ndispatching after sync finishes would be difficult\nto handle cleanly without lots of ripping so... #yolo\n\nChange-Id: I831a06c6ae7412a062720d68ecbe3085190f0258\n"
    },
    {
      "commit": "44b49f070aafe8ad44efae87341121cce49ff11c",
      "tree": "d6be4f57d9b034657e69eb4bc39b2ed35cd5fb69",
      "parents": [
        "7492e75ba3a6785c183638392f23a92950498922"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Fri Mar 25 14:29:48 2016 -0700"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Thu Mar 31 08:36:50 2016 -0700"
      },
      "message": "Add a callback for rendernode parentcount\u003d0\n\nBug: 27709981\nFixes: 22565656\n\nChange-Id: I1cb4461baf9069dc4e7ca6de10d5862578c107f4\n"
    },
    {
      "commit": "6246d27813f25b85f6e4b5cb1121fe8484bcce2d",
      "tree": "404d22648cb87d218312937f3ad8cf8fb68da7be",
      "parents": [
        "af64f6341bdbca93aff3d68264af48e74faa9e58"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue Mar 29 15:01:41 2016 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue Mar 29 16:50:32 2016 -0700"
      },
      "message": "Support buildLayer in new pipeline\n\nbug:26561995\nbug:27620686\n\nChange-Id: I6c39f9a077e7e6002d3c01b8888238fd17b0f02a\n"
    },
    {
      "commit": "3a5811b50157e7ba50854caf957e806aee794d39",
      "tree": "288fda75463ca914982e43acb7436a5a877f623c",
      "parents": [
        "68ffbba158579dd8b6f32aa628ec91228786e864"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue Mar 22 15:03:08 2016 -0700"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Wed Mar 23 12:55:12 2016 -0700"
      },
      "message": "Precache/early kick off of op work for non-shadow ops.\n\nbug:26562703\nbug:27052145\n\nChange-Id: Ic452bfe75da849ffdd47fecdd6eb1472fd0c806e\n"
    },
    {
      "commit": "dccca44ffda4836b56a21da95a046c9708ffd49c",
      "tree": "e4c0bcfeb0f37f0fd6ed4a08d58e701494bc61a8",
      "parents": [
        "c57fc4787f5aadb129686e904b86d343c8ae3541"
      ],
      "author": {
        "name": "sergeyv",
        "email": "sergeyv@google.com",
        "time": "Mon Mar 21 15:38:21 2016 -0700"
      },
      "committer": {
        "name": "sergeyv",
        "email": "sergeyv@google.com",
        "time": "Mon Mar 21 15:55:46 2016 -0700"
      },
      "message": "Reland: Move text logic from jni to hwui level\n\nInitial CL: https://googleplex-android-review.git.corp.google.com/#/c/886854/\n\nChange-Id: I9dfd85fe1d2a2c44f4360c8a29fd58d80e6f31c8\n"
    },
    {
      "commit": "6847953955502caa0bd0ba255d879a89aeccbd24",
      "tree": "493a5869a509a2a5df2a5030319050e0e4c7d868",
      "parents": [
        "f2e6a10b3816111353a88d1588cc7edcb1e90d08",
        "afbd0f1fef46ef0ddf633dfde0de724db3da1405"
      ],
      "author": {
        "name": "Sergei Vasilinetc",
        "email": "sergeyv@google.com",
        "time": "Mon Mar 21 21:06:45 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Mar 21 21:06:47 2016 +0000"
      },
      "message": "Merge \"Revert \"Move text logic from jni to hwui level\"\" into nyc-dev"
    },
    {
      "commit": "afbd0f1fef46ef0ddf633dfde0de724db3da1405",
      "tree": "85e008cb0315362d002817fa912bd91c05d8dd4c",
      "parents": [
        "a7f6bba1a3565c19715e878dfe7f0e01022944ff"
      ],
      "author": {
        "name": "Sergei Vasilinetc",
        "email": "sergeyv@google.com",
        "time": "Mon Mar 21 21:03:40 2016 +0000"
      },
      "committer": {
        "name": "Sergei Vasilinetc",
        "email": "sergeyv@google.com",
        "time": "Mon Mar 21 21:03:40 2016 +0000"
      },
      "message": "Revert \"Move text logic from jni to hwui level\"\n\nThis reverts commit a7f6bba1a3565c19715e878dfe7f0e01022944ff.\n\nChange-Id: If4f36f87a85411b6128fd92d391313803ccaf9dd\n"
    },
    {
      "commit": "49658d43802dc74c0ad68b7f5ba509832c1dec81",
      "tree": "f5f5cf83b52458a9181a8408f9b3af2c23958c3d",
      "parents": [
        "85941cff0c65bc023e4ca29c0eac8548c8f61be6",
        "a7f6bba1a3565c19715e878dfe7f0e01022944ff"
      ],
      "author": {
        "name": "Sergei Vasilinetc",
        "email": "sergeyv@google.com",
        "time": "Mon Mar 21 20:11:25 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Mar 21 20:11:27 2016 +0000"
      },
      "message": "Merge \"Move text logic from jni to hwui level\" into nyc-dev"
    },
    {
      "commit": "38f6c034d153bb648d45bce09d80a69ba3e03360",
      "tree": "00e1732da7ea4962b842536567f39a34140a54de",
      "parents": [
        "f068cff1761a2876587caa7ca6978a848198439a"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Thu Mar 17 10:23:49 2016 -0700"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Thu Mar 17 10:32:07 2016 -0700"
      },
      "message": "Move updating window position off RT\n\nBug: 27385141\nChange-Id: I6c75b5f1d9ef55ef64dde050f71d0e28fb8714bf\n"
    },
    {
      "commit": "a7f6bba1a3565c19715e878dfe7f0e01022944ff",
      "tree": "6f981aa976c049bf207727229f1275a3a6e8e530",
      "parents": [
        "ffaf94459a5042cd0881c7764c267a34aa5b60f0"
      ],
      "author": {
        "name": "sergeyv",
        "email": "sergeyv@google.com",
        "time": "Tue Mar 15 16:16:22 2016 -0700"
      },
      "committer": {
        "name": "sergeyv",
        "email": "sergeyv@google.com",
        "time": "Thu Mar 17 09:48:57 2016 -0700"
      },
      "message": "Move text logic from jni to hwui level\n\nbug:25865834\nChange-Id: I2d8c9c9544afcb5ce1784f732aed3e54e0eda372\n"
    },
    {
      "commit": "1dfa0704964c17e45775b9e01f1fa0b1a10774f7",
      "tree": "45cbf88a4792def75988c4ae1a7dca8d8ffda3e9",
      "parents": [
        "8316fac9c0772b1908d45b2286298b5b791d3ca7"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Mar 04 15:59:24 2016 -0800"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Mar 04 16:18:26 2016 -0800"
      },
      "message": "Support GPU profiling vis in new pipeline\n\nbug:27353099\n\nChange-Id: I905c1a998d9a9e2097c047dab9de87a70d7a370e\n"
    },
    {
      "commit": "c96955d9bb997b51be5fa929b5a67349d0459c3a",
      "tree": "1f4f44872d9fe4054a7d9f4daf3fb5e92664f30c",
      "parents": [
        "f4db3d253ef533f6992217fcbb3119a091172d94"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Fri Feb 26 14:56:44 2016 -0800"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Fri Feb 26 14:58:13 2016 -0800"
      },
      "message": "Always swap buffers if using partial update extension\n\nBug: 27379093\nChange-Id: Ifda18287248e4ae07d4bf2ae9642a9d23039e81f\n"
    },
    {
      "commit": "910beb8f5d9042163e2ad0dbb744d9f147db9604",
      "tree": "83f2bdb523fa6f78ac322b5eca1f0bc332e2fcd2",
      "parents": [
        "95728a5db6595e473acf8f428f238afc2fdbbe80"
      ],
      "author": {
        "name": "Andres Morales",
        "email": "anmorales@google.com",
        "time": "Tue Feb 02 16:19:40 2016 -0800"
      },
      "committer": {
        "name": "Andres Morales",
        "email": "anmorales@google.com",
        "time": "Tue Feb 09 10:40:01 2016 -0800"
      },
      "message": "updates to FrameStatsObserver API\n\n- Rename to FrameMetrics to avoid collision with existing\n  android.view.FrameStats class\n- Make FrameMetricsObserver implementation detail,\n  exposing FrameMetricsListener interface as public API\n  and wrapping in FrameStatsObserver to maintain state\n- Remove dropped frame count call, in favor of passing as\n  parameter to callback method.\n- Move away from raw timestamp access in favor of Metric IDs\n  which represent higher-level, more stable stages in a frame\n  lifecycle and match the categories exposed in the onscreen\n  bars.\n- Support many-to-many Window\u003c-\u003eFrameMetricsListener relationship\n\nChange-Id: I00e741d664d4c868b1b6d0131a23f8316bd8c5c2\n"
    },
    {
      "commit": "0a1abd3247d856fe875d5ef45f75bc2c8167ea96",
      "tree": "ab627effb6444397279f956e3f931be445a60a5c",
      "parents": [
        "57218cbbf773f389e5e9493623dd3d017e459590",
        "f648108f83d4e74811919e9811efb8fcc184b8a3"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Thu Feb 04 19:32:57 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Feb 04 19:32:57 2016 +0000"
      },
      "message": "Merge \"Have RT drive window positioning\""
    },
    {
      "commit": "f648108f83d4e74811919e9811efb8fcc184b8a3",
      "tree": "a7e20b3298846cd072499a921bfa59d244c717e0",
      "parents": [
        "15d21b3aca1c3eeb3932752194e9f196b546387b"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Tue Feb 02 15:18:23 2016 -0800"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Thu Feb 04 11:23:49 2016 -0800"
      },
      "message": "Have RT drive window positioning\n\nBug: 22802885\n\nChange-Id: I6beed5474d3a943b16e9097f7bd61ce3cbd37505\n"
    },
    {
      "commit": "6e068c0182f6f85bccb855a647510724d1c65a13",
      "tree": "8ee074307867bfcdc9c8a708aa6ae03f1d9b7ecc",
      "parents": [
        "d38308e4d0599836f9c5446ba9d6edbc0713c428"
      ],
      "author": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Fri Jan 15 16:15:30 2016 -0800"
      },
      "committer": {
        "name": "Chris Craik",
        "email": "ccraik@google.com",
        "time": "Tue Feb 02 17:10:25 2016 -0800"
      },
      "message": "Early kickoff of shadow tasks\n\nbug:26562703\n\nChange-Id: I7cdf18f2c662380bd31c7ffeefd5c3f569e5c1c6\n"
    },
    {
      "commit": "c3bd56811268a074ffb9513bde0d940199e7ad16",
      "tree": "3f912ab3a94046c8246a0063db362fece2a92946",
      "parents": [
        "c9fd313f94f7e0dc1f1f865290a2eb1b1897d2ad"
      ],
      "author": {
        "name": "Chong Zhang",
        "email": "chz@google.com",
        "time": "Mon Jan 25 12:01:12 2016 -0800"
      },
      "committer": {
        "name": "Chong Zhang",
        "email": "chz@google.com",
        "time": "Tue Jan 26 12:49:28 2016 -0800"
      },
      "message": "Restore code to draw backdrop and content nodes\n\nbug: 26626661\nChange-Id: I9e4dd41708e8ed93d3cf64242ad81815a653d269\n"
    },
    {
      "commit": "dd93728b461c686ee4c5f329509418fe9342cb8d",
      "tree": "c9b11301b78a029cea99727205abedd898d461a6",
      "parents": [
        "8dfd95d0913a38d78840d65056f57a93501e6a9c",
        "eecff56fed5dd5206acfbc5007b4912081b36d3b"
      ],
      "author": {
        "name": "Florin Malita",
        "email": "fmalita@google.com",
        "time": "Tue Jan 26 17:00:37 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jan 26 17:00:37 2016 +0000"
      },
      "message": "Merge \"Add internal Canvas save flags\""
    },
    {
      "commit": "c52ac0b9e2dc9d060f21498ac59404ec7fd1e846",
      "tree": "9609f5a11f1ca11a6d3142488ff7b23d7e6bd819",
      "parents": [
        "37e65a409fb01815e826665c651e07b952cb4f28",
        "975591a7af883d866d86ab819e164c6004694744"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Tue Jan 26 15:21:07 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jan 26 15:21:07 2016 +0000"
      },
      "message": "Merge \"Add fine-grained debug layer\""
    },
    {
      "commit": "975591a7af883d866d86ab819e164c6004694744",
      "tree": "b0247aebad80c7380141137e9de8d7edcf1ef89f",
      "parents": [
        "fe434a15d6bde9299b51dc284b336944e5cf8a1c"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Fri Jan 22 16:28:07 2016 -0800"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Mon Jan 25 16:15:14 2016 -0800"
      },
      "message": "Add fine-grained debug layer\n\nFull GLES error checking layer via -include\ntrickery. Change DEBUG_OPENGL to a level system.\n\nHIGH \u003d every GL call is error checked\nMODERATE \u003d checkpointing at interesting spots\nLOW \u003d only asserts there are no errors at the end of a frame\n or when the FBO changes\nNONE \u003d AIN\u0027T GOT NO TIME FOR ERRORS GOTTA GO FAST!\n\nChange-Id: Ibe81aae93d942059c4ddf1cbb11c828b7ce4c10b\n"
    },
    {
      "commit": "eecff56fed5dd5206acfbc5007b4912081b36d3b",
      "tree": "5e9b0e3dcf6add0bde182a791d9ba9040c16dafa",
      "parents": [
        "36c297f426b2d1337658d781bc6cbd60b04ce4e8"
      ],
      "author": {
        "name": "Florin Malita",
        "email": "fmalita@google.com",
        "time": "Mon Dec 21 10:43:01 2015 -0500"
      },
      "committer": {
        "name": "Florin Malita",
        "email": "fmalita@google.com",
        "time": "Mon Jan 25 15:48:00 2016 -0500"
      },
      "message": "Add internal Canvas save flags\n\nSkia\u0027s SkCanvas::SaveFlags are being deprecated.  This CL introduces\nthe equivalent android::SaveFlags, converts all internal clients to\nthe new enum, and switches the saveLayer glue to the\nSaveLayerRec-based API.\n\nChange-Id: Icb1785f4e7c0f652b1f04b34a1e3ccb063c408f3\n"
    },
    {
      "commit": "06f5bc70a667a02b14e31d3f53f91d3661e30666",
      "tree": "3de8a009d084a71906aa26506b209fea01ef4471",
      "parents": [
        "0ed21de72134a2b55648104f517e44a2deff17dd"
      ],
      "author": {
        "name": "Andres Morales",
        "email": "anmorales@google.com",
        "time": "Tue Dec 15 15:21:31 2015 -0800"
      },
      "committer": {
        "name": "Andres Morales",
        "email": "anmorales@google.com",
        "time": "Fri Jan 22 12:58:51 2016 -0800"
      },
      "message": "expose hwui frame stats through FrameStatsObserver\n\nChange-Id: I88884bafc8e2f6d7f67a36d3609490e83cf8afd5\n"
    },
    {
      "commit": "9372ac3621848085e77b867f220c0b5ffce4010d",
      "tree": "2077130e6ffe97d3aa03ae8bb7a861aaa452fb85",
      "parents": [
        "663d09ab4273f3e2c68bfaa72d4973f58e5cc023"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Tue Jan 19 11:46:52 2016 -0800"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Tue Jan 19 12:58:48 2016 -0800"
      },
      "message": "Fix ordering of texture-\u003eupload arguments\n\nCaught by scatter-shotting GL_CHECKPOINTS which\nseem generally useful to have\n\nBug: 26609444\n\nChange-Id: Ie31d9297d8dae56405126720f338b4256c8bae77\n"
    },
    {
      "commit": "cbc5bd57f0f528743fce5ec02b0739dc6368311f",
      "tree": "45541b44b29965e05430cde89b2c5229eb7d7a14",
      "parents": [
        "f6762aca4a353a17cf79723f8a69b625b9e27237",
        "38e0c32852e3b9d8ca4a9d3791577f52536419cb"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Thu Jan 14 21:49:42 2016 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jan 14 21:49:42 2016 +0000"
      },
      "message": "Merge \"Track texture memory globally\""
    },
    {
      "commit": "38e0c32852e3b9d8ca4a9d3791577f52536419cb",
      "tree": "72286f7531e094182b2bfe959015d7ed7f9c6abc",
      "parents": [
        "a5abf801044c5e53349c2e67428fe011a2f6985f"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Tue Nov 10 12:19:17 2015 -0800"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Thu Jan 14 13:42:12 2016 -0800"
      },
      "message": "Track texture memory globally\n\nAlso mostly consolidates texture creation\n\nChange-Id: Ifea01303afda531dcec99b8fe2a0f64cf2f24420\n"
    },
    {
      "commit": "b79151759ac59bcb6f8f76188d9af7b3155ae2ff",
      "tree": "59775ae09d851065e6099bd04365ee6a9f158fd7",
      "parents": [
        "9b974bf25bf13aa72399c74107c14749bba5625f",
        "099bd9ca8fea02795424d62c05c723290d68ae14"
      ],
      "author": {
        "name": "Matthew Bouyack",
        "email": "mbouyack@google.com",
        "time": "Wed Jan 13 19:00:07 2016 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed Jan 13 19:00:07 2016 +0000"
      },
      "message": "Merge \"In CanvasContext::doFrame, make a separate call to computeFrameTimeNanos and save the result. Then pass that value to UiFrameInfoBuilder::setVsync as both arguments.\" into cw-e-dev am: eebf168e43 am: e0845e8629 am: 6222bb0f6a\nam: 099bd9ca8f\n\n* commit \u0027099bd9ca8fea02795424d62c05c723290d68ae14\u0027:\n  In CanvasContext::doFrame, make a separate call to computeFrameTimeNanos and save the result. Then pass that value to UiFrameInfoBuilder::setVsync as both arguments.\n"
    }
  ],
  "next": "3145247b3e8563f25e9d908579ce03060f3e880b"
}
