)]}'
{
  "log": [
    {
      "commit": "9c53ee710ecfe4657d08ce58f1609dfb0350237d",
      "tree": "c15ad8836a90a15e8b0649680f7aed2bda0d8cd1",
      "parents": [
        "60bc00c11df600575e85b4c3276027bcd6069c9b"
      ],
      "author": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Wed Jul 22 21:16:18 2020 -0700"
      },
      "committer": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Mon Aug 24 18:12:07 2020 -0700"
      },
      "message": "SurfaceFlinger: use duration instead of offset\n\nThis change is using the duration given to sf/app without\nconverting them back to the legacy offset. This allows us to get\nthe expected vsync associated with a wakeup event.\n\nThis change also required some refactoring:\n - Move the periodic callback interface out of DispSync and in\n   to DispSyncSource\n - Translate legacy offsets to duration in case that duration\n   is not specified in the build files\n - Add support to VSD to expose the deadline timestamp of when\n   a frame needs to be ready by\n\nBug: 162888874\nTest: SF unit tests\nTest: examine systraces\n\nChange-Id: I87a53cc7dea931d3c195eab6842e003ca4516885\n"
    },
    {
      "commit": "9a02eda8d5f95d754aa908e66089750183355511",
      "tree": "97ebeea93991e0132e090c5fddd45fae92967989",
      "parents": [
        "9bb4cfb009f1317605e8ff090e0ce930e15d4d40"
      ],
      "author": {
        "name": "Alec Mouri",
        "email": "alecmouri@google.com",
        "time": "Tue Apr 21 17:39:34 2020 -0700"
      },
      "committer": {
        "name": "Alec Mouri",
        "email": "alecmouri@google.com",
        "time": "Wed Apr 22 11:24:30 2020 -0700"
      },
      "message": "Lookup layer handle when registering region sampling listener\n\nWe must do this in order to prevent clients from providing a bogus\nhandle when registering a region sampling listener. Fortunately, this\nparticular path required a permissions check so it cannot be accessed\nfrom arbitrary apps on unrooted devices. But, we should not allow this\ntype of memory corruption to be reachable by the system.\n\nBug: 153467444\nTest: libgui_test\nTest: Repro steps in the bug no longer reproduce\nChange-Id: I883506798574dfd0688371fdb6305cfad9d153fc\n"
    },
    {
      "commit": "9aa95dfd3c382980f414a92d35c0f955d83297dd",
      "tree": "6dfa69539b452ecf10e32d44e1d24fcd0a136165",
      "parents": [
        "693e7d2a34e8d9f7950fcc395ce390ad1f8fb828",
        "e3b2036a57fc5a9980c3250fac6a1dddf9f886ee"
      ],
      "author": {
        "name": "Kevin DuBois",
        "email": "kevindubois@google.com",
        "time": "Wed Jul 03 22:20:37 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed Jul 03 22:20:37 2019 -0700"
      },
      "message": "Merge \"SF: delay region sampling when short on time\" into qt-r1-dev am: 5bb9322330\nam: e3b2036a57\n\nChange-Id: I28756ef7a917ea96aed0970a2520de48c4b0cbea\n"
    },
    {
      "commit": "f2c006d5fac9cfb2e5eb3ef8c960b5eab72af0ed",
      "tree": "ff02aa40b3d47542f6e7f1a2d169c8b8f3f15d6a",
      "parents": [
        "5938c94cb1ff62f374edd8cf96f80ee9307e4bbc"
      ],
      "author": {
        "name": "Ana Krulec",
        "email": "akrulec@google.com",
        "time": "Fri Jun 21 15:37:07 2019 -0700"
      },
      "committer": {
        "name": "Ana Krulec",
        "email": "akrulec@google.com",
        "time": "Mon Jun 24 17:20:31 2019 -0700"
      },
      "message": "SF: Renaming IdleTimer to OneShotTimer\n\nIdleTimer class is used for more than just idle timer, so renaming the\nclass to a more appropriate name.\n\nTest: manual\nBug: 132811842\n\nChange-Id: Iabfaa28038dc90430a51536ef874618e35ed9014\n"
    },
    {
      "commit": "84be783ff179fd6589bd01091f08f174f1f6a95d",
      "tree": "0c1d695b87a4f86d37306fb358010c1c74a7ee10",
      "parents": [
        "7fbb0831bf1f803e8faa9e34e43efdd6b0dc05c7"
      ],
      "author": {
        "name": "John Dias",
        "email": "joaodias@google.com",
        "time": "Tue Jun 18 17:05:26 2019 -0700"
      },
      "committer": {
        "name": "John Dias",
        "email": "joaodias@google.com",
        "time": "Wed Jun 19 13:46:16 2019 -0700"
      },
      "message": "SF: delay region sampling when short on time\n\nIn a number of janky traces, particularly at high\nframe rates, we\u0027ve seen the surfaceflinger thread\noverrunning its time slot. In some of those cases,\nthe surfaceflinger thread is doing region-sampling.\nThis change causes region-sampling to check how much\ntime is left until the next vsync before deciding\nwhether to sample this frame. If low on time,\nit will defer the sampling to a later frame.\n\nBug: 133779857\nTest: trace inspection from scrolling in various apps\nChange-Id: I92c2368e80033c1ba6e27f947a456d14db02064c\n"
    },
    {
      "commit": "b325c93b5ef70c3392dbde815b9867b01ab997f8",
      "tree": "185d701fab0c74537761174c2cb20dadca6a65cc",
      "parents": [
        "030764d25fc52a8ba5a534feccd84168b60e8182"
      ],
      "author": {
        "name": "Kevin DuBois",
        "email": "kevindubois@google.com",
        "time": "Tue May 21 08:34:09 2019 -0700"
      },
      "committer": {
        "name": "Kevin DuBois",
        "email": "kevindubois@google.com",
        "time": "Wed May 29 13:51:28 2019 -0700"
      },
      "message": "SF: adapt region sampling to display orientation\n\nPass in the orientation flags of SF to RenderEngine when conducting the\nsampling composition. This resulted mis-sampled areas, especially when\nthe region was outside of the clip of the 0-degree rotated display.\n\nBug: 132394665\nTest: manual verification with 90, 270, 0 rotations\nTest: new tests in libsurfaceflinger_unittest#RegionSamplingTest.*\nChange-Id: I2869ef191572dbcc9170df8d3ed17414ab053ca4\n"
    },
    {
      "commit": "26afc788434bf0f120db2fbd980d557f07bd1283",
      "tree": "6f25c517e9d5350a6f8aad1b9bd90033050df9df",
      "parents": [
        "c81a799672f6e5a97b8229bc9fbcdecfd9c4d6d5"
      ],
      "author": {
        "name": "Kevin DuBois",
        "email": "kevindubois@google.com",
        "time": "Mon May 06 16:46:45 2019 -0700"
      },
      "committer": {
        "name": "Kevin DuBois",
        "email": "kevindubois@google.com",
        "time": "Thu May 09 09:03:31 2019 -0700"
      },
      "message": "sf: avoid lock on main thread during luma calc\n\nThe luma calculation operation was previously done while holding\na lock that was also used to protect the request to collect the\nnext sample. When the main thread would request the next sample,\nit could stall waiting on the longer luma calculation to complete.\n\nThis patch refactors the sampling request locking mechanisms so\nsampling request signalling is protected by one lock, and the members\nneeded during the sampling thread operations are protected by another\nlock.\n\nFixes: http://b/132110951\nTest: collect traces during during problematic animation (agsa\ninitial query for info) and verify problem went away\nTest: visually inspect jank during agsa continued conversation\nTest: libgui#RegionSamplingTest\nTest: monkey 6000 event inject\nChange-Id: I291d6bcb80d0588f2e1f3689bfdd4b3434132e90\n"
    },
    {
      "commit": "4efd1f505ce5587bba57e79dfb54eb1daff59eec",
      "tree": "6f2ed1bdc6fd2715239755d6068c21b779a39814",
      "parents": [
        "501604c5fa4f485ae96470e6e2ba71a8c98b9c8f"
      ],
      "author": {
        "name": "Kevin DuBois",
        "email": "kevindubois@google.com",
        "time": "Mon Apr 29 10:09:43 2019 -0700"
      },
      "committer": {
        "name": "Kevin DuBois",
        "email": "kevindubois@google.com",
        "time": "Thu May 02 15:51:44 2019 -0700"
      },
      "message": "sf: reuse luma sampling buffer when available\n\nReuse the luma sampling buffer when available, saving a frequent buffer\nreallocation. Depending on driver refcounting behavior, this could have\nresulted in the buffer free on the SF main thread (and typically did on\nreferenced device, costing about ~500us @10hz).\n\nTest: verify luma sampling work reduces from ~2ms -\u003e 1.5ms\nTest: RegionSamplingTest in libgui\nFixes: 131416627\n\nChange-Id: I8e6d57ae25bd37ceec828c82796f0f4f8f45636e\n"
    },
    {
      "commit": "bb27bcd9c676f65937a2637d8c400d491d655f54",
      "tree": "e29a56544a000ada1440c49cc1581244c003e6ac",
      "parents": [
        "945a7006f905b5f460668923b9875cd6637931a6"
      ],
      "author": {
        "name": "Kevin DuBois",
        "email": "kevindubois@google.com",
        "time": "Tue Apr 02 14:34:35 2019 -0700"
      },
      "committer": {
        "name": "Kevin DuBois",
        "email": "kevindubois@google.com",
        "time": "Wed Apr 03 13:18:04 2019 -0700"
      },
      "message": "SF: fix off-by one in luma mean calculation\n\nThere was an off by one error in luma mean calculation that could\nlead to segfault. Flaw was figured out in writing the 5 attached\nunit tests for the function. Condition would be obscure in the wild,\nbut an exactly half-white, half-another-color in the sampled region\ncould present condition.\n\nFixes: 129858549\nTest: libsurfaceflinger_unittest (5 new tests)\n\nChange-Id: I920cd9cac15122178ec9258e33c9bc35b1bb9357\n"
    },
    {
      "commit": "413287fa00fc9bbeb7246b88336c3f1a28cf922a",
      "tree": "8cf17df513357f41d10595b869d7f3cd26a64783",
      "parents": [
        "d8a1c29353b89684aef1a15ea4aab1b509ea9293"
      ],
      "author": {
        "name": "Kevin DuBois",
        "email": "kevindubois@google.com",
        "time": "Mon Feb 25 08:46:47 2019 -0800"
      },
      "committer": {
        "name": "Kevin DuBois",
        "email": "kevindubois@google.com",
        "time": "Thu Mar 07 09:06:04 2019 -0800"
      },
      "message": "SF: rate-limit luma sampling\n\nInstead of sampling the luma regions every frame, introduce a rate\nlimiting system to reduce load. Introduces a few tunables to control\nthe rate, which is defaulted to 10Hz, when there is content being\nwatched for luma.\n\nTest: manual systrace inspection, using SamplingDemo\nTest: libgui_test --gtest_filter\u003d\"RegionSampling*\"\nTest: atest CompositionSamplingListenerTest\nFixes: 126747045\nChange-Id: I7cae3e90fb405ba72dc2f276a88be48f1533a219\n"
    },
    {
      "commit": "7cbcc3710179fc47665a3e71d23661f1ee8b22f4",
      "tree": "5c8ff45c80733efe37997e2ee20ed93612b06ff8",
      "parents": [
        "613e49e99e456df7a2b34ec820319855516c47cc"
      ],
      "author": {
        "name": "Kevin DuBois",
        "email": "kevindubois@google.com",
        "time": "Mon Feb 25 14:53:28 2019 -0800"
      },
      "committer": {
        "name": "Kevin DuBois",
        "email": "kevindubois@google.com",
        "time": "Mon Feb 25 15:23:15 2019 -0800"
      },
      "message": "SF: tidy comments for luma sampling.\n\nTidying of const, comment and one internal fn name for\nRegion Luma sampling.\n\nTest: libgui_test --gtest_filter\u003d\"RegionSamp*\"\n\nChange-Id: I46895c8ed5b2e2045d7ce7444085585b62b5ab6e\n"
    },
    {
      "commit": "ec460089769f4faa196a4c253b569ef0c35faf72",
      "tree": "78034fd26d71cc1bbe4ba61df3197a1d17cb5139",
      "parents": [
        "a9aecbe3506f5901c77647893fbfba10b5b0b75a"
      ],
      "author": {
        "name": "Dan Stoza",
        "email": "stoza@google.com",
        "time": "Mon Dec 17 15:35:09 2018 -0800"
      },
      "committer": {
        "name": "Kevin DuBois",
        "email": "kevindubois@google.com",
        "time": "Fri Feb 22 09:09:15 2019 -0800"
      },
      "message": "[sf] Implement addSamplingListener\n\nImplements ISurfaceComposer::addSamplingListener, which allows a client\nto receive streaming median luma updates for a given region of the\nscreen.\n\nBug: 119639245\nTest: Manual using SamplingDemo in libgui\nTest: Automated libgui_test in Ic85a97f475a3414a79d3719bbd0b2b648bbccfb0\nChange-Id: Ic52359aeab884e734a806372be0eb4e327c45298\n"
    }
  ]
}
