)]}'
{
  "log": [
    {
      "commit": "79108df863d454369ee61cdb70f6d14c8414e30e",
      "tree": "60737575ca009d1c0f4b93c5d1c7d8a7728a1821",
      "parents": [
        "0e87539913e3fe631730b40c1f2c0be2fcee66d8"
      ],
      "author": {
        "name": "Alec Mouri",
        "email": "alecmouri@google.com",
        "time": "Mon Feb 04 19:33:44 2019 +0000"
      },
      "committer": {
        "name": "Alec Mouri",
        "email": "alecmouri@google.com",
        "time": "Mon Feb 04 12:02:41 2019 -0800"
      },
      "message": "Revert \"Use renderengine::drawLayers api everywhere.\"\n\nThis reverts commit 0f7148365cfa405e8ed802b33c0e2a7b790fcf42.\n\nReason for revert: b/123878751, preparing while i investigate\n\nBug: 123878751\nTest: bug no longer repros\nChange-Id: I6c77427f0c113f96b68aec479ccec52b0bbb2c6b\n"
    },
    {
      "commit": "dd0b757b259f66b39793bcdf6b1ed80d099ce4b2",
      "tree": "ba4057b2de8194ebe5b901d33e34716a874b18b4",
      "parents": [
        "3b7f2022cd288f9bfcb2ba8f775eef6caca92dad"
      ],
      "author": {
        "name": "Valerie Hau",
        "email": "vhau@google.com",
        "time": "Tue Jan 29 14:59:27 2019 -0800"
      },
      "committer": {
        "name": "Valerie Hau",
        "email": "vhau@google.com",
        "time": "Fri Feb 01 16:28:11 2019 -0800"
      },
      "message": "Combining background color related transactions/functions\n\nBug:122326454\nTest: build, boot, SurfaceFlinger_test, ASurfaceControlTest cts test\nChange-Id: I7ec9f2214c7422ab90ab56dd84daafd5b0bf720a\n"
    },
    {
      "commit": "6b9ee73c262069512348c387506b418ce002a064",
      "tree": "4252d45b9632b07778e1947aae75e7eaddc0f023",
      "parents": [
        "88b5388e6b9ca357c723d550e6e8af4419b4271a",
        "0f7148365cfa405e8ed802b33c0e2a7b790fcf42"
      ],
      "author": {
        "name": "Alec Mouri",
        "email": "alecmouri@google.com",
        "time": "Thu Jan 31 19:02:48 2019 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jan 31 19:02:48 2019 +0000"
      },
      "message": "Merge \"Use renderengine::drawLayers api everywhere.\""
    },
    {
      "commit": "0f7148365cfa405e8ed802b33c0e2a7b790fcf42",
      "tree": "5bf6379ff0451e17acacc8044ecfc8f377125dd2",
      "parents": [
        "7de6f68ff865afa3b329b605b78d0cf0df2a050d"
      ],
      "author": {
        "name": "Alec Mouri",
        "email": "alecmouri@google.com",
        "time": "Mon Nov 12 15:31:06 2018 -0800"
      },
      "committer": {
        "name": "Alec Mouri",
        "email": "alecmouri@google.com",
        "time": "Wed Jan 30 16:11:57 2019 -0800"
      },
      "message": "Use renderengine::drawLayers api everywhere.\n\nThere\u0027s some dead code left after this change, which I\u0027ll circle around\nto removing in the future.\n\nBug: 118461793\nBug: 123496360\nChange-Id: Ic631b0c452f67b353adaa63896e8cd080e391647\nTest: librenderengine_test\nTest: SurfaceFlinger_test\nTest: libsurfaceflinger_unittest\nTest: notch hide\nTest: screen rotations\nTest: photos\nTest: adb screencap\nTest: adb screenrecord\nTest: simulate virtual displays (incl. secure overlays)\nTest: go/wm-smoke with gpu composition forced\n"
    },
    {
      "commit": "a72e281ec2f0122f7875ef8d8f97d674a828d16c",
      "tree": "d815d565cf9217ca68ddf66189c37032b701d191",
      "parents": [
        "a71e1c3c68e90078a01625acc01b68f783c2ca2c"
      ],
      "author": {
        "name": "Valerie Hau",
        "email": "vhau@google.com",
        "time": "Wed Jan 23 13:40:39 2019 -0800"
      },
      "committer": {
        "name": "Valerie Hau",
        "email": "vhau@google.com",
        "time": "Wed Jan 30 14:35:59 2019 -0800"
      },
      "message": "Adding setColor, setColorAlpha, and setColorDataspace to\nBufferStateLayer\n\nBug: 122326454\nTest: atest CtsViewTestCases:android.view.cts.ASurfaceControlTests\nChange-Id: If426541757a58d0fc63d744270bbae1b022f105a\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": "0449b0fa3e3e88da8622da6e95a7eefea8c46a70",
      "tree": "57eac962d959508de399454604076cd343d36f66",
      "parents": [
        "f2c793939c42ff233ced4095cf85bb93ec74523f"
      ],
      "author": {
        "name": "Lloyd Pique",
        "email": "lpique@google.com",
        "time": "Thu Dec 20 16:23:45 2018 -0800"
      },
      "committer": {
        "name": "Lloyd Pique",
        "email": "lpique@google.com",
        "time": "Mon Jan 07 13:39:45 2019 -0800"
      },
      "message": "Revert \"SurfaceFlinger: protect state members in Layer\"\n\nState update transactions must be atomic. The fine-grained lock on each\nLayer implied otherwise. Revert the fine grained lock as being\nunhelpful.\n\nUnfortunately there does not seem to be a way to use Clang thread\nannotations to specify the desired locking behavior.\n\nNote that the parent CL addresses the locking problem that led to the\nbug.\n\nThis reverts commit 83729883eecd31a9907bc79bc21998a90f17105c.\n\nBug: 119481871\nTest: SurfaceFlinger unit tests\nTest: go/wm-smoke\nChange-Id: I361741f8d10102aeb57f164c847c6063ff93dd14\n"
    },
    {
      "commit": "0f3242dcd6af189b878a5bd0b5c5dedfdff6d764",
      "tree": "63ac952dd23879906ef980bca195bf5a462f9efd",
      "parents": [
        "4a7b239c430db4bfbcb2929c081e14e6e38b1123"
      ],
      "author": {
        "name": "Marissa Wall",
        "email": "marissaw@google.com",
        "time": "Thu Dec 20 15:10:22 2018 -0800"
      },
      "committer": {
        "name": "Marissa Wall",
        "email": "marissaw@google.com",
        "time": "Sat Jan 05 13:25:11 2019 -0800"
      },
      "message": "blast: negative display frames are invalid\n\nSurfaceFlinger handles display frames that are outside of the bounds except\nwhen they frames are negative. Just remove the negative part of the frame\nwhen it is set.\n\nTest: atest CtsViewTestCases:android.view.cts.ASurfaceControlTest\nBug: 80477568\n\nChange-Id: I995ea3bc65ab3bb4057db4d8102950eb7cac5680\n"
    },
    {
      "commit": "0bc0915fc3eb37b18bca8067170ce115b5644d36",
      "tree": "381a774a905f2e1ab284a955e94304a21bb3aca0",
      "parents": [
        "0510d9068c7b25c284610ea646b8b79f1c6a2877"
      ],
      "author": {
        "name": "Valerie Hau",
        "email": "vhau@google.com",
        "time": "Thu Dec 20 07:42:47 2018 -0800"
      },
      "committer": {
        "name": "Valerie Hau",
        "email": "vhau@google.com",
        "time": "Fri Dec 21 12:04:50 2018 -0800"
      },
      "message": "Modifying BufferStateLayer crop to be within buffer bounds\n\nBug: 120920503\nTest: build\nChange-Id: I99ea2b3275e87a4d1cf295c7a917d4ec0fd5c0d1\n"
    },
    {
      "commit": "83729883eecd31a9907bc79bc21998a90f17105c",
      "tree": "c1aca6e748ad8418883b758125bc56b85e52a19f",
      "parents": [
        "227d1b1098a8d4fa562ca23914c7472c337acf26"
      ],
      "author": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Fri Dec 07 12:26:48 2018 -0800"
      },
      "committer": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Wed Dec 12 11:26:51 2018 -0800"
      },
      "message": "SurfaceFlinger: protect state members in Layer\n\nAdd proper locking to protect state members in Layer.\nThese members are accessed by both the main thread and binder.\n\nBug: 119481871\nTest: SurfaceFlinger unit tests\nTest: go/wm-smoke\nChange-Id: I12d47711992e09c0677b77f7e1b36c1254b63a1b\n"
    },
    {
      "commit": "12701458b75c910b65b4bb82b6b7ca2ff42d1049",
      "tree": "43d771b2c6c4282ee4ec1d2c261343fc374bacb5",
      "parents": [
        "161410bcb27ac5203b802d34a1c836e490aeb2f7",
        "861616dff990d85dbf5624c59868c94e4ac00d9a"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Dec 06 17:50:13 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Dec 06 17:50:13 2018 +0000"
      },
      "message": "Merge changes from topic \"blast frame\"\n\n* changes:\n  blast: use frame instead of size and position\n  Change what in layer_state_t to 64 bit.\n"
    },
    {
      "commit": "861616dff990d85dbf5624c59868c94e4ac00d9a",
      "tree": "b49ff01920d192120eb60aa30c2b8cd6888b896b",
      "parents": [
        "8a3083eecacc46eafba56ad416dee026c5dddff4"
      ],
      "author": {
        "name": "Marissa Wall",
        "email": "marissaw@google.com",
        "time": "Mon Oct 22 12:52:23 2018 -0700"
      },
      "committer": {
        "name": "Marissa Wall",
        "email": "marissaw@google.com",
        "time": "Tue Dec 04 15:36:04 2018 -0800"
      },
      "message": "blast: use frame instead of size and position\n\nBufferStateLayers will have a source crop rect and destination\nframe rect. The crop is the portion of the buffer that should be\ndisplayed. The frame is where that portion of the buffer should\nbe displayed. The portion of the cropped buffer is scaled to fit\nthe frame.\n\nShader provided by romainguy@google.com.\n\nTest: Transaction_test\nBug: 80477568\n\nChange-Id: Ied3f3af2211132f79098aeb986292ee705a62219\n"
    },
    {
      "commit": "af8ee94ff7b44f3d86d2faa23e29927efd7d6c9c",
      "tree": "11c998cfc51535a7efa352ac1d882c9a4f6eac21",
      "parents": [
        "7e666a574d7ea1a9493d7f9ef8f0c214ae629f7b"
      ],
      "author": {
        "name": "Yiwei Zhang",
        "email": "zzyiwei@google.com",
        "time": "Thu Nov 22 00:15:23 2018 -0800"
      },
      "committer": {
        "name": "Yiwei Zhang",
        "email": "zzyiwei@google.com",
        "time": "Mon Dec 03 10:53:32 2018 -0800"
      },
      "message": "SF TimeStats: Remove some redundant functions\n\nThis change also tunes TimeStats for unittesting purpose.\n\nBug: 119290000\nTest: atest libsurfaceflinger_unittest:TimeStatsTest\nChange-Id: I9d9adb589bf4c41d362fa6eab71af094bd82fcb6\n"
    },
    {
      "commit": "7e666a574d7ea1a9493d7f9ef8f0c214ae629f7b",
      "tree": "9f0841e03061868183194cc9d73fa2b0cb60e3be",
      "parents": [
        "face176394e0a28bd7b7b8bed13b4696e79668a2"
      ],
      "author": {
        "name": "Yiwei Zhang",
        "email": "zzyiwei@google.com",
        "time": "Thu Nov 15 13:33:42 2018 -0800"
      },
      "committer": {
        "name": "Yiwei Zhang",
        "email": "zzyiwei@google.com",
        "time": "Mon Dec 03 10:52:41 2018 -0800"
      },
      "message": "SF TimeStats: Make TimeStats class non-singleton\n\nBug: 119290000\nTest: atest libsurfaceflinger_unittest:TimeStatsTest\nChange-Id: I725a880506b0c0df14802db4bc38524ab4cf1ead\n"
    },
    {
      "commit": "5aec6412704477b7c1ce50c8e5739c9969ed8a1b",
      "tree": "d8ee5877a579b361e722471c841807b726bc0524",
      "parents": [
        "dc2e1d7c65755284e800945664c29e3e539fffb8"
      ],
      "author": {
        "name": "Marissa Wall",
        "email": "marissaw@google.com",
        "time": "Wed Nov 14 11:49:18 2018 -0800"
      },
      "committer": {
        "name": "Marissa Wall",
        "email": "marissaw@google.com",
        "time": "Mon Nov 26 10:07:04 2018 -0800"
      },
      "message": "blast: check for buffer before dumping format\n\nCheck if a BLAST buffer is null before trying to dump its format.\n\nTest: dumpsys SurfaceFlinger\nBug: 80477568\n\nChange-Id: Id4ef1891bef25a313e42942c6a8a3cdfc6d4c09c\n"
    },
    {
      "commit": "f79d96c20c3dd044b39d5d68b46f019d9499937f",
      "tree": "2970f97938bba9af650a1eff7e98cf34a0afea6b",
      "parents": [
        "4cdb2e053933854bfc1e70efee9c82febba9788b",
        "6035634d8eef2adf5416ef751067a8e0dbbf7347"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Nov 14 02:35:19 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Nov 14 02:35:19 2018 +0000"
      },
      "message": "Merge \"SF: Add support for boundless layers 1/2\""
    },
    {
      "commit": "6035634d8eef2adf5416ef751067a8e0dbbf7347",
      "tree": "2fe97037a5b700a8753c5c5fc22903788c62c8c3",
      "parents": [
        "6bdb3cac812cf8fabcb90f71d624d9b4a3776069"
      ],
      "author": {
        "name": "Vishnu Nair",
        "email": "vishnun@google.com",
        "time": "Tue Nov 13 13:00:45 2018 -0800"
      },
      "committer": {
        "name": "Vishnu Nair",
        "email": "vishnun@google.com",
        "time": "Tue Nov 13 13:00:45 2018 -0800"
      },
      "message": "SF: Add support for boundless layers 1/2\n\nSize is currently used to bound a layer and its child layers. There are scenarios where we do not\nwant to restrict a layer or its children to any specific size. For example\n1. Have a color layer fill the bounds of its parent.\n2. Have a layer apply a transform (ROTATION) to all child layers without cropping them.\nCurrently this is achieved by providing a large enough size so that the layer or its children do\nnot get cropped incorrectly.\n\nThis change modifies computeBounds and computeScreenBounds to ignore a layer\u0027s size. We calculate\nthe bounds by using the layer\u0027s buffer size and/or crop. Then we pass the bounds to the parent\nlayer to crop to its bounds. If the layer has no bounds, we pass the child bounds forward. If\nwe are also at the bottom of the hierarchy, such as a boundless color layer, then our bounds are\nset to the parent bounds.\n\nIn WM, we set the layer\u0027s crop property in places where we relied on layer size.\n\nBug: 114413815\nTest: go/wm-smoke\nTest: mmma frameworks/native/services/surfaceflinger/tests/ \u0026\u0026 \\\nmmma frameworks/native/libs/gui/tests/ \u0026\u0026 adb sync data \u0026\u0026 \\\nadb shell /data/nativetest64/libgui_test/libgui_test \u0026\u0026 \\\nadb shell /data/nativetest64/libsurfaceflinger_unittest/libsurfaceflinger_unittest \u0026\u0026 \\\nadb shell /data/nativetest64/SurfaceFlinger_test/SurfaceFlinger_test \u0026\u0026 \\\nadb shell /data/nativetest64/SurfaceParcelable_test/SurfaceParcelable_test \u0026\u0026 \\\necho \"ALL TESTS PASSED\"\n\nChange-Id: I962c0c7639f6c863fc16b8acd16f077f040f8de4\n"
    },
    {
      "commit": "ba8f5edeee23b3c61923a000c449db7bd1055462",
      "tree": "6c01422a284aa126ee3df7e6878d8f4be3893cd9",
      "parents": [
        "e0b91f35241aee8d0b839c214a83a3439d3603b7",
        "fda30bb8d79f7406e1d9643e5ec1dc2f695febd1"
      ],
      "author": {
        "name": "Marissa Wall",
        "email": "marissaw@google.com",
        "time": "Mon Nov 12 22:37:46 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Nov 12 22:37:46 2018 +0000"
      },
      "message": "Merge changes from topic \"blast-callback\"\n\n* changes:\n  blast: send TransactionStats with callback\n  blast: Send transaction callback\n  blast: Send transaction listener from SCC to SF\n  blast: Create ITransactionCompletedListener\n  blast: set layers to scale to window\n  blast: update hasDrawingBuffer to hasFrameUpdate\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"
    },
    {
      "commit": "ec463ac29a02251b06a736c95c40fb868d55fb7c",
      "tree": "851bff6ebe12e451f8824ee6533546e56ba3a842",
      "parents": [
        "024a19122c8b6298b0ada97e49ceab8b73e935b0"
      ],
      "author": {
        "name": "Marissa Wall",
        "email": "marissaw@google.com",
        "time": "Mon Oct 08 12:35:04 2018 -0700"
      },
      "committer": {
        "name": "Marissa Wall",
        "email": "marissaw@google.com",
        "time": "Fri Nov 09 12:55:25 2018 -0800"
      },
      "message": "blast: set layers to scale to window\n\nInstead of forcing buffers to be the same size as their window,\nallow the crop to scale to the display frame.\n\nTest: Transaction_test\n\nChange-Id: I156642ad4951c521699116b8334c92a9f7c5546f\n"
    },
    {
      "commit": "024a19122c8b6298b0ada97e49ceab8b73e935b0",
      "tree": "7827a525e44d76b7845a9936ef385cac6ab0de3b",
      "parents": [
        "dda548ddf42be089efa037281192c4b94b1c2944"
      ],
      "author": {
        "name": "Marissa Wall",
        "email": "marissaw@google.com",
        "time": "Mon Aug 13 13:55:35 2018 -0700"
      },
      "committer": {
        "name": "Marissa Wall",
        "email": "marissaw@google.com",
        "time": "Fri Nov 09 12:55:25 2018 -0800"
      },
      "message": "blast: update hasDrawingBuffer to hasFrameUpdate\n\nhasFrameUpdate is a more accurate name than hasDrawingBuffer.\nAlso keep track of when the current state has been modified\nand only return true for BufferStateLayer::hasFrameUpdate\nwhen the state has been modified and the buffer is not null.\n\nTest: Transaction_test\nBug: 80477568\n\nChange-Id: Icec6cf62490799988bd967914986bf92a07ce726\n"
    },
    {
      "commit": "075d317063d815430d3a45acc7292e0681f73ee5",
      "tree": "e692d15875e0143d9917ee843856b8bcdf125e2c",
      "parents": [
        "b04f98a270fa393232068b7423be765e823ddf50"
      ],
      "author": {
        "name": "Dominik Laskowski",
        "email": "domlaskowski@google.com",
        "time": "Thu May 24 15:50:06 2018 -0700"
      },
      "committer": {
        "name": "Dominik Laskowski",
        "email": "domlaskowski@google.com",
        "time": "Thu Nov 08 11:04:49 2018 -0800"
      },
      "message": "SF: Generalize display management\n\nThis CL enables SF to manage an arbitrary number of physical displays.\nPreviously, displays were identified by 32-bit IDs, where 0 is the\ninternal display, 1 is the external display, [2, INT32_MAX] are HWC\nvirtual displays, and -1 represents an invalid display or a non-HWC\nvirtual display.\n\nIf the HWC provides display identification data, SF now allocates 64-bit\ndisplay IDs for physical and HWC virtual displays. The IDs are expressed\nusing an option type, where the null value represents an invalid display\nor non-HWC virtual display. Without HWC support, SF falls back to legacy\nbehavior with at most two physical displays.\n\nThe dynamic display IDs are translated to the legacy constants at the\nSF/DMS boundary, as a stopgap until the framework is generalized.\n\nBug: 74619554\nTest: Connect 3 displays and create virtual displays on HWC 2.2 and 2.3\nTest: libsurfaceflinger_unittest\nTest: SurfaceFlinger_test\nChange-Id: I0a4a57b6ab7de2dbcf719a4eb1a19a133694012e\n"
    },
    {
      "commit": "8e8fe529a69761aad6a84fb8025cebd3673d77db",
      "tree": "13b8f06e4a81d4318abc98cfea8b90bc968400d0",
      "parents": [
        "c39309375b269bce3a68dadd0bc1d5bc29bc57c0"
      ],
      "author": {
        "name": "Yiwei Zhang",
        "email": "zzyiwei@google.com",
        "time": "Fri Nov 02 18:34:07 2018 -0700"
      },
      "committer": {
        "name": "Yiwei Zhang",
        "email": "zzyiwei@google.com",
        "time": "Fri Nov 02 18:43:01 2018 -0700"
      },
      "message": "SF TimeStats: fix a hazard issue\n\nThe setAcquireFence and setDesiredTime could happen in between the\nsplited setLayerName and setPostTime, where setLayerName inserts an\nentry but setPostTime actually initializes the structure and waitData\nposition. This change combine setLayerName and setPostTime again to\neliminate the hazard.\n\nTest: build\nBug: b/118770127\nChange-Id: Ia1961cb688bbabf23d88305750e69c9fa41da8dd\n"
    },
    {
      "commit": "9689e2f6cefc158a493ff58ccacda0333f823939",
      "tree": "415ada0799f551ad5e2811f7aa498a936cd42a76",
      "parents": [
        "ce6ebc04e9d2d684f4783c1c1a8a7f29ac4f036c"
      ],
      "author": {
        "name": "Yiwei Zhang",
        "email": "zzyiwei@google.com",
        "time": "Fri May 11 12:33:23 2018 -0700"
      },
      "committer": {
        "name": "Yiwei Zhang",
        "email": "zzyiwei@google.com",
        "time": "Tue Oct 23 10:28:29 2018 -0700"
      },
      "message": "SF TimeStats: optimize mTimeStatsTracker to use layerID as hash key\n\nThe current mTimeStatsTracker map is using layer name as the hash key,\nwhich is not as fast and reliable as the unique layer sequence id.\n\nTest: dumpsys SurfaceFlinger --timestats \u003csee go/sf-timestats for args\u003e\nBug: b/79872109\nChange-Id: I409414909e7dd7ee11b37a35a441c070cfce3fa6\n"
    },
    {
      "commit": "52ef3e02893dc3337a9c638565333a7d727e5543",
      "tree": "b3add05d150810ccbb30571dad81e58bbbbd4752",
      "parents": [
        "e588e318bc3410ccdd8c9413ca881b720c6a7373",
        "1dd1b8794ccf8cbcfe8fee59b0a1cbef9475e31c"
      ],
      "author": {
        "name": "Alec Mouri",
        "email": "alecmouri@google.com",
        "time": "Mon Oct 15 19:06:02 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Oct 15 19:06:02 2018 +0000"
      },
      "message": "Merge changes Iaa0846b8,Id9420941\n\n* changes:\n  Remove extra isCurrent calls.\n  Move image creation out of latchBuffer().\n"
    },
    {
      "commit": "1dd1b8794ccf8cbcfe8fee59b0a1cbef9475e31c",
      "tree": "d4f3bf70565f377d6020622492c15b01c16fec4c",
      "parents": [
        "39801c08d2285506e822bb428f53212a84993df1"
      ],
      "author": {
        "name": "Alec Mouri",
        "email": "alecmouri@google.com",
        "time": "Wed Oct 10 11:07:13 2018 -0700"
      },
      "committer": {
        "name": "Alec Mouri",
        "email": "alecmouri@google.com",
        "time": "Sun Oct 14 02:33:42 2018 -0700"
      },
      "message": "Remove extra isCurrent calls.\n\nThese invocations originated from a fork of GLConsumer which was\naccessible by apps.\n\nBug: 116277151\nTest: SurfaceFlinger_test, libsurfaceflinger_unittest, go/wm-smoke\nChange-Id: Iaa0846b8caea9b9d8f31886e98da8098599d9a77\n"
    },
    {
      "commit": "39801c08d2285506e822bb428f53212a84993df1",
      "tree": "2ae6ef49efbe6fef32aef2926ef366df08d4c1e4",
      "parents": [
        "304007e24cab8b0ab0b6915bc2a065f3c93a3d19"
      ],
      "author": {
        "name": "Alec Mouri",
        "email": "alecmouri@google.com",
        "time": "Wed Oct 10 10:44:47 2018 -0700"
      },
      "committer": {
        "name": "Alec Mouri",
        "email": "alecmouri@google.com",
        "time": "Sun Oct 14 02:32:18 2018 -0700"
      },
      "message": "Move image creation out of latchBuffer().\n\nGLImage creation isn\u0027t necessary until an external texture needs to be\nbound.\n\nThis also removes the BufferLayerConsumer::Image class, as it\u0027s not\nreally necessary now that image creation is deferred until the external\ntexture needs to be bound.\n\nBug: 116277151\nChange-Id: Id9420941e9cf7df11233b427c7a98a947f9738d8\nTest: SurfaceFlinger_test, libsurfaceflinger_unittest, go/wm-smoke\n"
    },
    {
      "commit": "010d2193faad5657eea5ee6d6f7f81441c71b752",
      "tree": "89177ae8cce6fd79f84a192dd1b25ff5c7cbcafb",
      "parents": [
        "adb29b0a3ad5ec225b141e878b2eeabd14093591"
      ],
      "author": {
        "name": "Ana Krulec",
        "email": "akrulec@google.com",
        "time": "Mon Oct 08 06:29:54 2018 -0700"
      },
      "committer": {
        "name": "Ana Krulec",
        "email": "akrulec@google.com",
        "time": "Wed Oct 10 10:44:23 2018 -0700"
      },
      "message": "SF: Stop passing DispSync around.\n\nInstead of passing DispSync around, so that the functions can compute\nnext refresh time, compute the time in SurfaceFlinger, and pass around\nthe calculated value.\n\nTest: SF tests pass.\nChange-Id: I27f28257c866426bc871671eb57dd309b88b92be\n"
    },
    {
      "commit": "63ea7603abf6c2849d70305134cc5369dd89c20e",
      "tree": "827389a5c32acc1a4eafbac7dcd7f6211fe7c5cf",
      "parents": [
        "c6fcf2fc341b924c36f7612b672734de8eebc928",
        "86770e536db6868ad964f25e485daf98311657ca"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Sun Sep 30 19:53:19 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sun Sep 30 19:53:19 2018 +0000"
      },
      "message": "Merge changes I7901b017,I0f38f678\n\n* changes:\n  Remove RenderEngine::flush from latchBuffer()\n  Flip native fence sync check for tex binding.\n"
    },
    {
      "commit": "86770e536db6868ad964f25e485daf98311657ca",
      "tree": "2b3285cf1b1323234a9122b81883809ba51c6fac",
      "parents": [
        "3221a897ded5bc98e9a08aae75bea8bfd23c0172"
      ],
      "author": {
        "name": "Alec Mouri",
        "email": "alecmouri@google.com",
        "time": "Mon Sep 24 22:40:58 2018 +0000"
      },
      "committer": {
        "name": "Alec Mouri",
        "email": "alecmouri@google.com",
        "time": "Sun Sep 30 19:00:59 2018 +0000"
      },
      "message": "Remove RenderEngine::flush from latchBuffer()\n\nFence fd will be owned by SurfaceFlinger to be propagated down to\nlatchBuffer for merging sync fences. We can\u0027t store the fd at the\nLayer-level \u0026 flush on every draw() invocation for some reason (I don\u0027t\nfully understand what the gl driver does under the hood, but from what\nit looks like file descriptors are reused when the command stream is\nflushed too often which causes a memory leak when a buffer\u0027s sync fence\nis merged), so we\u0027ll let SF backend store the flush fence for the\nprevious frame.\n\nBug: 116277151\nChange-Id: I7901b0178aa0f11505650bf5e1df6f085a5d93bf\nTest: SurfaceFlinger_test, libsurfaceflinger_unittest, go/wm-smoke\n"
    },
    {
      "commit": "42ab75e0b89351f2346dd174b63f0445ceaf3ee3",
      "tree": "5942209ec5974ea8eb8445852c7c8b56946015c3",
      "parents": [
        "f1c675b33faeadc57f5d57a18d5e07bc644b0bad"
      ],
      "author": {
        "name": "Lloyd Pique",
        "email": "lpique@google.com",
        "time": "Wed Sep 12 20:46:03 2018 -0700"
      },
      "committer": {
        "name": "Lloyd Pique",
        "email": "lpique@google.com",
        "time": "Wed Sep 26 12:59:43 2018 -0700"
      },
      "message": "SF: Cleanup layer construction\n\nIntroduce a LayerCreationArg parameter object, and modify all layer\ntypes to use it rather than having the same set of four arguments.\n\nAlong the way simplify all constructors by moving to C++11 style default\nvalues defined in the header, and ensure the destructor is defined in\nthe implementation file (as a default for most layer types, as only\nBufferLayer needs a non-default destructor).\n\nUsing a uniform parameter object reduces the amount of work needed to\nmaintain the upcoming factory interface.\n\nTest: Works on marlin.\nTest: atest libsurfaceflinger_unittest\n\nChange-Id: Ic09291fd3213ff980bfc600166bf798ba09daa32\n"
    },
    {
      "commit": "cbc184fba2ab0948ba031d45c265bb4a7cb6db22",
      "tree": "e1d4e6af7886cd982049d5423b4d322a10658c04",
      "parents": [
        "21be4b6c908db0739030a999d12ff052161e534c"
      ],
      "author": {
        "name": "Peiyong Lin",
        "email": "lpy@google.com",
        "time": "Wed Aug 22 13:24:10 2018 -0700"
      },
      "committer": {
        "name": "Peiyong Lin",
        "email": "lpy@google.com",
        "time": "Thu Aug 23 19:32:04 2018 -0700"
      },
      "message": "[RenderEngine] Add Android.bp to RenderEngine\n\nBesides make RenderEngine as static library, this patch also intentionally\nmoves all header files to public includable directory. The header files will be\nstructured better in the progress of stripping off GL implementation out of\npublic interfaces.\n\nBUG: 112585051\nTest: Build, flash and do display validation\nChange-Id: Ife6e27896a2ccee6a23781a43ebc508e2587eb71\n"
    },
    {
      "commit": "efefaac7748a7c2d1f5878f398c1d6c38713ce03",
      "tree": "22a090e243c279d5ea669e714c230977ab7c4ca5",
      "parents": [
        "3db423465dc6e177aab27f315426541714201ebe"
      ],
      "author": {
        "name": "Peiyong Lin",
        "email": "lpy@google.com",
        "time": "Fri Aug 17 12:27:51 2018 -0700"
      },
      "committer": {
        "name": "Peiyong Lin",
        "email": "lpy@google.com",
        "time": "Fri Aug 17 16:45:29 2018 -0700"
      },
      "message": "[SurfaceFlinger] Move Transform to libs/ui\n\nA bunch of code in SurfaceFlinger uses Transform, so does RenderEngine. In\norder to move RenderEngine to its own library, we need to lift Transform to\nanother place where it\u0027s part of VNDK. Since Transform depends on libs/ui, we\nmove Transform to libs/ui as well.\n\nBUG: 112585051\nTest: Build, flash, boot and check transformation.\nChange-Id: Ie4d13ee135ba3f71fcbd9f86994a0b048e2c6878\n"
    },
    {
      "commit": "3db423465dc6e177aab27f315426541714201ebe",
      "tree": "dc7dff586ab3804cc79684ed1e040fb926f14969",
      "parents": [
        "86b78a726e4b14c9216bdcffe02e62f8e64fc147"
      ],
      "author": {
        "name": "Peiyong Lin",
        "email": "lpy@google.com",
        "time": "Thu Aug 16 09:15:59 2018 -0700"
      },
      "committer": {
        "name": "Peiyong Lin",
        "email": "lpy@google.com",
        "time": "Thu Aug 16 09:15:59 2018 -0700"
      },
      "message": "[SurfaceFlinger] Remove unused clz.h\n\nThe built-in method clz is no longer used anywhere in SurfaceFlinger, thus\nremove this file and change all usage of min/max/swap to standard methods.\n\nBUG: 112585051\nTest: Build, flash\nChange-Id: Ia5b47afae1ecbbda3c60d19de62ff9c76db743a4\n"
    },
    {
      "commit": "7b1b5a845b6a786dfa8d7eeaced77a1129a41387",
      "tree": "5aa5213e340502b79daa6b2a3710dccf1a4641b8",
      "parents": [
        "b1a4e00a8e705f5eda6175948bb93674ee7215c3"
      ],
      "author": {
        "name": "Dan Stoza",
        "email": "stoza@google.com",
        "time": "Tue Jul 31 16:00:21 2018 -0700"
      },
      "committer": {
        "name": "Dan Stoza",
        "email": "stoza@google.com",
        "time": "Tue Jul 31 16:00:21 2018 -0700"
      },
      "message": "SF: Layer children should call parents\u0027 onFirstRef\n\nClasses which inherit indirectly from Layer and which override\nonFirstRef need to also call their parents\u0027 onFirstRef to ensure that\nLayer is initialized correctly.\n\nBug: 111854867\nTest: atest UiAutomationTest#testWindowContentFrameStats\nChange-Id: I5ceb531a5d59587ab489342d0b19a42c1a286402\n"
    },
    {
      "commit": "61c58627dd748baa699bab62e80a7972f2030f60",
      "tree": "b3220d29d8234662339ba731eb96ad4cc6844480",
      "parents": [
        "f58c14b3d51f2face21c9759149b5c9412bcafd5"
      ],
      "author": {
        "name": "Marissa Wall",
        "email": "marissaw@google.com",
        "time": "Wed Jul 18 10:12:20 2018 -0700"
      },
      "committer": {
        "name": "Marissa Wall",
        "email": "marissaw@google.com",
        "time": "Mon Jul 30 16:53:46 2018 -0700"
      },
      "message": "blast: BufferStateLayer\n\nAdds the initial foundation for supporting buffers on\ntransactions as well as the other metadata that had been passed\nover BufferQueue.\n\nBug: 80477568\nTest: Transaction_test.cpp\nChange-Id: I61e44462c66c1a912adbabf62015e66bde44c216\n"
    }
  ]
}
