)]}'
{
  "log": [
    {
      "commit": "871d635736f502e67e6b41a162d4c77826cf6523",
      "tree": "3fafeaf37ac3f73dcbf95f8526817db5bbd16ec2",
      "parents": [
        "b1f1a5d40c363d57ef0579087bd8bbd4c7a4b0cb"
      ],
      "author": {
        "name": "Valerie Hau",
        "email": "vhau@google.com",
        "time": "Wed Jan 29 08:44:02 2020 -0800"
      },
      "committer": {
        "name": "Valerie Hau",
        "email": "vhau@google.com",
        "time": "Wed Feb 05 15:21:11 2020 -0800"
      },
      "message": "Plumb FrameEventHistory to client\n\nBug: 141939081\nTest: build, boot, libgui_test, SurfaceFlinger_test\nChange-Id: I7294c5357bc28cf0336eef583264c5d0544ec7d4\n"
    },
    {
      "commit": "c5686802261e26e035889f047cf43016d890181f",
      "tree": "8a12fc4e93267db1708578a2a47fb11cde4d0d42",
      "parents": [
        "d0d28e3183d55c4a23d87b59681ceac3e3cf133d"
      ],
      "author": {
        "name": "Valerie Hau",
        "email": "vhau@google.com",
        "time": "Fri Nov 22 14:18:09 2019 -0800"
      },
      "committer": {
        "name": "Valerie Hau",
        "email": "vhau@google.com",
        "time": "Mon Nov 25 17:29:09 2019 -0800"
      },
      "message": "When destroying layer, add children to offscreen layers\n\nIf a layer is destroyed, make sure all children are added to the\noffscreen layers.  Otherwise, we may dangle a layer that is neither in\ncurrent state nor in offscreen layers.\nBug: 141111965\nTest: build, boot, manual\n\nChange-Id: Iec6788f10a24cb63faa9b40f246cbde3770d24a7\n"
    },
    {
      "commit": "ac12ae73c2a2cc7d4fedcc1e187ff9984679df54",
      "tree": "4c811ec4e0ffcc2c98dc8899dc22c0f60e902032",
      "parents": [
        "1c2a53e618eff6ed831f6c70196389c02a27c6dd"
      ],
      "author": {
        "name": "Valerie Hau",
        "email": "vhau@google.com",
        "time": "Tue Nov 19 14:13:16 2019 -0800"
      },
      "committer": {
        "name": "Valerie Hau",
        "email": "vhau@google.com",
        "time": "Tue Nov 19 14:55:35 2019 -0800"
      },
      "message": "Clear all pending transactions on screen wakeup\n\nIf an app sets a transaction that modifies layer state, but does not get\ncommitted by an SF composition cycle, we may end up dangling some\ncallbacks.  Temporary fix is to clear and send callbacks on wakeup\n\nBug: 141111965\nTest: build, boot, manual\nChange-Id: I781124c3f96174cefd5eb67e597c13f923df4fc1\n"
    },
    {
      "commit": "32cdc1f381977a9e980b81a2f15a575be9ab75b7",
      "tree": "65b9a265c7f924dc6604946ca0c7f089a1edf20d",
      "parents": [
        "13bd8e4d100b7be8a7333a0357c74ca5fc1ca6b1"
      ],
      "author": {
        "name": "Valerie Hau",
        "email": "vhau@google.com",
        "time": "Mon Oct 21 14:45:54 2019 -0700"
      },
      "committer": {
        "name": "Valerie Hau",
        "email": "vhau@google.com",
        "time": "Mon Oct 21 14:45:54 2019 -0700"
      },
      "message": "Adding transformHint for BufferStateLayers\n\nAdding transformHint to callbacks and passing back during Surface\ncreation\n\nBug: 133512804, 141939598\nTest: build, boot, manual\nChange-Id: Ic3227b7d5991e342c017e789afc70cc6605d25f5\n"
    },
    {
      "commit": "5de3ad2cee2b5a30ab442dcc202d0799c5b4ac23",
      "tree": "2d4f275b29b4f4f5430d534dd3bafaa1aeb2ec2b",
      "parents": [
        "7704a15ded89176ca7d7a8f4dd83cda172be2f69"
      ],
      "author": {
        "name": "Valerie Hau",
        "email": "vhau@google.com",
        "time": "Tue Aug 20 07:47:43 2019 -0700"
      },
      "committer": {
        "name": "Valerie Hau",
        "email": "vhau@google.com",
        "time": "Tue Aug 20 09:53:18 2019 -0700"
      },
      "message": "Switch from ITransactionCompletedListener to IBinder keys\n\nIBinder remains consistent across multiple transactions when passed\ncross-process to SF.  However, interface_cast\u0027ing it to an\nITransactionCompletedListener results in different underlying objects.\nSwitch to using IBinder as the keys for listener callbacks.\n\nBug: 139731321\nTest: build, boot, SurfaceFlinger_test\nChange-Id: I9bea76664087020eb43ceec258b5ecede0faaea5\n"
    },
    {
      "commit": "799a0d81b8142452c80fbbc305e2a7e7adf3537a",
      "tree": "4da6eb381462b26c65e05bc32f9f4641b05a0437",
      "parents": [
        "e0eed55e69d68abd9693485c635ad4942f414c00",
        "7879cacc5a7fc2b66c9de3ebbf0488ab60ef54b4"
      ],
      "author": {
        "name": "Marissa Wall",
        "email": "marissaw@google.com",
        "time": "Thu Jul 11 13:32:46 2019 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu Jul 11 13:32:46 2019 -0700"
      },
      "message": "Merge \"blast: fix leak on BufferStateLayer death\" into qt-dev am: 6990af63ff am: f5d22cff90\nam: 7879cacc5a\n\nChange-Id: I79fe602bf5e27608b343e926e098a6e73326ad3a\n"
    },
    {
      "commit": "0e24a8385a63be6a799da902e1d5ffcbb7519c2a",
      "tree": "13c980bfbda1d330ac8b7cc3b2fba846e80f9862",
      "parents": [
        "ccf624a3045223c295a4db5a6f36a5d89ced4dbc"
      ],
      "author": {
        "name": "Marissa Wall",
        "email": "marissaw@google.com",
        "time": "Wed Jul 10 15:32:50 2019 -0700"
      },
      "committer": {
        "name": "Marissa Wall",
        "email": "marissaw@google.com",
        "time": "Wed Jul 10 15:38:37 2019 -0700"
      },
      "message": "blast: fix leak on BufferStateLayer death\n\nSurfaceFlinger can occasionally leak graphic buffers.\n\nThe leak happens when:\n1) a transaction comes in and is placed in a queue\n2) Chrome crashes\n3) the parent layer is cleaned up\n4) the child layer is told to release its buffer because it is\n        no longer on screen\n5) the transaction is applied with sets a callback handle on the\n        layer which has a sp\u003c\u003e to the layer\n\nTo fix this, the callback handle should not have a sp\u003c\u003e to layer.\nIt is safe for the callback handle can have wp\u003c\u003e to the layer.\nThe client side has a sp\u003c\u003e so during normal operation, SurfaceFlinger\ncan promote the wp\u003c\u003e. The only time the promote will fail is if the\nclient side is dead. If the client side is dead, there is no one\nto send a callback to so it doesn\u0027t matter if the promote fails.\n\nBug: 135951943\nTest: https://buganizer.corp.google.com/issues/135951943#comment34\nChange-Id: I756ace14c90b03a6499a3187d235b42d91cdd05a\n"
    },
    {
      "commit": "efb71afcbb5d8f57af6435391f5d4835696375cc",
      "tree": "2d2ded52b05cc34c3717366279983b32991e593c",
      "parents": [
        "7507a128ab55f325d11ccf258e4788fdaef4fbb6"
      ],
      "author": {
        "name": "Marissa Wall",
        "email": "marissaw@google.com",
        "time": "Thu Jun 27 14:45:53 2019 -0700"
      },
      "committer": {
        "name": "Marissa Wall",
        "email": "marissaw@google.com",
        "time": "Wed Jul 10 11:04:40 2019 -0700"
      },
      "message": "blast: fix registering callbacks\n\nThis is a better fix for b/134194071 than ag/7998544. The previous\npatch only protected the call to notify the binder thread to send a\ncallback.\n\nThis patch has both a start registration and end registration call.\nDuring that time, the transaction callback cannot be sent. This is\ncloser to a long term fix for the bug.\n\nBug: 134194071\nTest: Switch between front and back cameras to make sure the app\n    doesn\u0027t crash.\n\nChange-Id: I2d20c13cc1c8d13e5a1340dfaa8cbbaa4d3a30ab\n"
    },
    {
      "commit": "a9e843ac5f5fce7cebe3938f0c69943bbbfc64d5",
      "tree": "28c681d00c9fa2ba7e962aa49f6dceea0246e452",
      "parents": [
        "945a7006f905b5f460668923b9875cd6637931a6"
      ],
      "author": {
        "name": "Greg Kaiser",
        "email": "gkaiser@google.com",
        "time": "Mon Apr 01 06:23:09 2019 -0700"
      },
      "committer": {
        "name": "Greg Kaiser",
        "email": "gkaiser@google.com",
        "time": "Mon Apr 01 06:24:41 2019 -0700"
      },
      "message": "surfaceflinger: Avoid extra vector copies\n\nWe pass a std::vector by const reference in a couple places in\nTransactionCompletedThread to avoid making an extra copy.\n\nTest: TreeHugger\nChange-Id: Ie81a27b80e52a1890d54b4507d0fcbf30e746e7b\n"
    },
    {
      "commit": "d600d57da59244af8f94145558debe7f1acad998",
      "tree": "bd5b0683125e7cfa4d276235269f4bab9b357fb1",
      "parents": [
        "eccfc576b3f90c2ee818de7c10eea6fdbbe2d166"
      ],
      "author": {
        "name": "Marissa Wall",
        "email": "marissaw@google.com",
        "time": "Tue Mar 26 15:38:50 2019 -0700"
      },
      "committer": {
        "name": "Marissa Wall",
        "email": "marissaw@google.com",
        "time": "Fri Mar 29 09:42:52 2019 -0700"
      },
      "message": "blast: in order no-op transaction callbacks\n\nTransactions callbacks were being sent as soon as they were ready\ninstead of in order. To fix this, keep a deque of Transaction\ncallbacks and do not send a callback until all the callbacks\nbefore it have been sent.\n\nBug: 128519264\nTest: Transaction_test\n\nChange-Id: Ia363b3aca85bc1cd71d0fd915de79b44f786e09f\n"
    },
    {
      "commit": "3dad52d38519ef4ad6d13095a8fa756bb736ae85",
      "tree": "6f95afff00b98cfd8d2ab0f9fbc708dca3525429",
      "parents": [
        "78b7220f542826771223f9b5c0b876874dd398d2"
      ],
      "author": {
        "name": "Marissa Wall",
        "email": "marissaw@google.com",
        "time": "Fri Mar 22 14:03:19 2019 -0700"
      },
      "committer": {
        "name": "Marissa Wall",
        "email": "marissaw@google.com",
        "time": "Wed Mar 27 09:32:42 2019 -0700"
      },
      "message": "blast: transaction callbacks should come in order\n\nPreviously, if no SurfaceControls where marked to get callbacks,\na callback was sent directly from SurfaceComposerClient so we could\nsave a binder call into SurfaceFlinger and a binder call for the\ncallback.\n\nAlthough this saved us 2 binder calls, it made the transactions\ncallbacks come out of order. The public api guarantees that all\ncallbacks must come in order.\n\nThis patch moves the callback from SurfaceComposerClient into\nSurfaceFlinger so the callbacks are in order.\n\nBug: 128519264\nTest: SurfaceFlinger_test\nChange-Id: Ia1cadb81adb69b58a4d6d43ae453c96a1572f833\n"
    },
    {
      "commit": "5a68a77923216e3f889776d1398880c6532f834a",
      "tree": "c18cf3b41390b6f43e0d3f1415e9ad414b0e11c3",
      "parents": [
        "def831d5515836621951a014ed7c3d935a97017b"
      ],
      "author": {
        "name": "Marissa Wall",
        "email": "marissaw@google.com",
        "time": "Sat Dec 22 17:43:42 2018 -0800"
      },
      "committer": {
        "name": "Marissa Wall",
        "email": "marissaw@google.com",
        "time": "Wed Jan 16 11:32:42 2019 -0800"
      },
      "message": "blast: send back previous release fences\n\nWhen sending a transaction callback, send a previous release fence\ninstead of a boolean.\n\nTest: Transaction_test\nBug: 80477568, 120930690\n\nChange-Id: I608fecc3cd31fd92fcfc2abb5fc084c529ee7806\n"
    },
    {
      "commit": "99343baea449f07cc2ac0ac473671ce53be7cdd6",
      "tree": "c561f4c19eaf2c70af1c53d5542ec86b9622efa0",
      "parents": [
        "5aec6412704477b7c1ce50c8e5739c9969ed8a1b"
      ],
      "author": {
        "name": "Marissa Wall",
        "email": "marissaw@google.com",
        "time": "Tue Nov 13 10:39:08 2018 -0800"
      },
      "committer": {
        "name": "Marissa Wall",
        "email": "marissaw@google.com",
        "time": "Mon Nov 26 10:15:24 2018 -0800"
      },
      "message": "blast: protect destruction of callback thread\n\nWrap the creation and destruction of TransactionCompletedThread\u0027s\nmThread in a mutex. This will prevent the race condition between\nthe creation of mThread and mThread.join().\n\nTest: libsurfaceflinger_unittest\n      Transaction_test\n\nChange-Id: Ic448872cd5418ce7885b8c2e52a7f1bf02afd772\n"
    },
    {
      "commit": "fda30bb8d79f7406e1d9643e5ec1dc2f695febd1",
      "tree": "b4670d09c00ef7d1f5091994317fa39a510ede50",
      "parents": [
        "e2ffb426c3c48bbc93bc2cfc28b33b6f6e0ddfa2"
      ],
      "author": {
        "name": "Marissa Wall",
        "email": "marissaw@google.com",
        "time": "Fri Oct 12 11:34:28 2018 -0700"
      },
      "committer": {
        "name": "Marissa Wall",
        "email": "marissaw@google.com",
        "time": "Fri Nov 09 12:55:25 2018 -0800"
      },
      "message": "blast: send TransactionStats with callback\n\nAdd TransactionStats to callback so the client knows when the\nbuffers were released and acquired. Also when transaction was\npresented and latched.\n\nTest: Transaction_test\nBug: 80477568\n\nChange-Id: I578a7000193a4401783cb2538172167a552b043f\n"
    },
    {
      "commit": "e2ffb426c3c48bbc93bc2cfc28b33b6f6e0ddfa2",
      "tree": "c1a7462c8d433715c6d6789eb7a670648b3f0c87",
      "parents": [
        "c837b5ecc406f6bf6e5424d48435b56decbd903e"
      ],
      "author": {
        "name": "Marissa Wall",
        "email": "marissaw@google.com",
        "time": "Fri Oct 12 11:33:52 2018 -0700"
      },
      "committer": {
        "name": "Marissa Wall",
        "email": "marissaw@google.com",
        "time": "Fri Nov 09 12:55:25 2018 -0800"
      },
      "message": "blast: Send transaction callback\n\nSend transaction callback to client via the\nTransactionCompletedListener.\n\nTest: Transaction_test\nBug: 80477568\n\nChange-Id: Iac98780b1357b9cc54b93cc3c848013b28fab441\n"
    }
  ]
}
