)]}'
{
  "log": [
    {
      "commit": "39d0147e73adc27461ef74eb3a833cc184a05a6f",
      "tree": "9809a2bc7f266d64a4081306c7952eac9f772f6c",
      "parents": [
        "b16fa8e49508388184bbf1efff2092a036a54aa6"
      ],
      "author": {
        "name": "chaviw",
        "email": "chaviw@google.com",
        "time": "Thu Apr 08 14:26:24 2021 -0500"
      },
      "committer": {
        "name": "chaviw",
        "email": "chaviw@google.com",
        "time": "Thu Apr 08 18:15:36 2021 -0500"
      },
      "message": "Modify bounds and transform for BSL input.\n\nWe don\u0027t want to send the BufferStateLayer\u0027s transform to input, but rather\nthe parent\u0027s transform. This is because the current layer\u0027s transform is\ninformation about how the buffer is placed on screen. The parent\u0027s\ntransform makes more sense to send since this is information about how the\nlayer is placed on screen. This transform is used by input to determine\nhow to go from screen space back to window space.\n\nAlso update the bounds for BufferStateLayer that\u0027s used for input. We\nneed to include the transform here since input assumes the frame already\nincludes the buffer transform.\n\nTest: EndToEndNativeInputTest\nTest: Rotate and scroll content\nFixes: 184807094\nChange-Id: I59c1f32a57dff4f007202b5998fff55f4e125438\n"
    },
    {
      "commit": "b16fa8e49508388184bbf1efff2092a036a54aa6",
      "tree": "554e7ad9ba3c0d701c3403e47e6717449759749d",
      "parents": [
        "0de23a9eafae2db42781b6db6994c7d52621e7a9",
        "9a93ea66bb7116b8821877a69991ae94557b1303"
      ],
      "author": {
        "name": "Chavi Weingarten",
        "email": "chaviw@google.com",
        "time": "Wed Apr 07 18:56:48 2021 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Apr 07 18:56:48 2021 +0000"
      },
      "message": "Merge \"Remove setFrame from BufferStateLayer\" into sc-dev"
    },
    {
      "commit": "6c1b7aca75e3fb0d45789b15007202493de6bc3d",
      "tree": "33e2216ceb207348dad96465d653082b487547ec",
      "parents": [
        "d043c248649e8e9b51c73b6d3c02257882149dcc"
      ],
      "author": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Wed Mar 31 16:56:03 2021 -0700"
      },
      "committer": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Fri Apr 02 22:30:12 2021 +0000"
      },
      "message": "SF: use FenceTime when possible\n\nFence::getSignalTime is calling a system call everytime,\nwhere FenceTime caches the signal time.\n\nThis shows reduction in simpleperf for the main thread\n2.23% -\u003e 1.25%\nTest: simpleperf for PIP + Notification shade expansion\nBug: 184378996\n\nChange-Id: I182db2ddfcb7fdbde758f5d87357a16e60c1bb07\n"
    },
    {
      "commit": "75ba8bcd4209377ddd32b3e23e89b7ad9c382a9e",
      "tree": "d2a5274d70ce0053e76c6b43086bff02f0d31099",
      "parents": [
        "7f56cf876a74bd778f38c6d1dab6632f010cf6f8",
        "c5986778d0d6c7ab3f96fafb1b84887e901ed92b"
      ],
      "author": {
        "name": "Marin Shalamanov",
        "email": "shalamanov@google.com",
        "time": "Wed Mar 31 14:30:26 2021 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Mar 31 14:30:26 2021 +0000"
      },
      "message": "Merge \"setFrameRate: Make shouldBeSeamless an enum\" into sc-dev"
    },
    {
      "commit": "9a93ea66bb7116b8821877a69991ae94557b1303",
      "tree": "40a457bee0e057406fb8b35ad418383c909812e0",
      "parents": [
        "9fc9513410b4b3e6889f5b201e5235ec062bddcd"
      ],
      "author": {
        "name": "chaviw",
        "email": "chaviw@google.com",
        "time": "Thu Mar 11 16:44:42 2021 -0600"
      },
      "committer": {
        "name": "chaviw",
        "email": "chaviw@google.com",
        "time": "Tue Mar 30 15:53:01 2021 -0500"
      },
      "message": "Remove setFrame from BufferStateLayer\n\nReplace setFrame with setCrop, setMatrix, and setPosition\n\nTest: SurfaceFlinger_tests\nTest: ASurfaceControlTest\nBug: 170765639\nChange-Id: I32ee0e3e48e5171d99a5f5af0b7583165d4dd9f9\n"
    },
    {
      "commit": "c5986778d0d6c7ab3f96fafb1b84887e901ed92b",
      "tree": "8e99206a5ad1852ac86affa3e35ac51f1ba4206f",
      "parents": [
        "3b1f7bcf8fd0ca2458eb26ec31a1bddf4bf7fd43"
      ],
      "author": {
        "name": "Marin Shalamanov",
        "email": "shalamanov@google.com",
        "time": "Tue Mar 16 16:09:49 2021 +0100"
      },
      "committer": {
        "name": "Marin Shalamanov",
        "email": "shalamanov@google.com",
        "time": "Wed Mar 24 13:19:07 2021 +0100"
      },
      "message": "setFrameRate: Make shouldBeSeamless an enum\n\nChange the shouldBeSeamless parameter to an enum\nin order to make the API easier to understand.\nThis changes\n - SurfaceControl.setFrameRate\n - Surface.setFrameRate\n - ANativeWindow_setFrameRateWithChangeStrategy\n - ASurfaceTransaction_setFrameRateWithChangeStrategy\n\nBug: 179116474\nTest: atest SetFrameRateTest\nChange-Id: I28a8863ea77101f90b878fbda5f00d98e075b7cc\n"
    },
    {
      "commit": "1506b181085e1f2156283d0e7b62fe94a918427f",
      "tree": "e712ebf2d2f90c5c76600b29f9637ddb1955573d",
      "parents": [
        "3fabf687ee63461d1aad186ae540156aa7765b25"
      ],
      "author": {
        "name": "Vishnu Nair",
        "email": "vishnun@google.com",
        "time": "Mon Feb 22 14:35:15 2021 -0800"
      },
      "committer": {
        "name": "Vishnu Nair",
        "email": "vishnun@google.com",
        "time": "Wed Mar 17 15:58:29 2021 +0000"
      },
      "message": "Introduce release buffer callback for BufferStateLayer\n\nCurrently BLAST clients use the TransactionCompleted callbacks to\ndetermine when to release buffers. The TransactionCompleted callback\nis overloaded. For transactions without buffers, the callback is\ncalled when the transaction is applied on the server. If the\nTransaction contains one or more buffers, the callback is called when\nall the buffers are latched and ready to be presented. If we have\nmultiple buffers on multiple transactions, where one or more buffers\nmaybe dropped, the pending callbacks are called together. This may\ndelay signaling the client when a buffer can be released.\n\nTo fix this, we introduce a new buffer release callback that is\ncalled as soon as a buffer is dropped by the server or when a new\nbuffer has been latched and the buffer will no longer be presented.\nThis new callback provides a graphic bufferid to identify the buffer\nthat can be released and a release fence to wait on.\n\nBlastBufferQueue has been switched to use this new callback. Other\nBLAST users continue to use the existing callback.\n\nTest: go/wm-smoke\nTest: atest ReleaseBufferCallbackTest\nBug: 178385281\n\nChange-Id: Idd88e4994e543443198a5a8cfa0e3f5f67d5d482\n"
    },
    {
      "commit": "25714500c80a7c4efa5cd82ccd914a57bc5d51e6",
      "tree": "c3dd39356b17acb77c166c943478118033f3d30d",
      "parents": [
        "f5b97a8b0e0cb0e688905a5398f12949c836a190"
      ],
      "author": {
        "name": "chaviw",
        "email": "chaviw@google.com",
        "time": "Thu Feb 11 10:01:08 2021 -0800"
      },
      "committer": {
        "name": "chaviw",
        "email": "chaviw@google.com",
        "time": "Mon Mar 15 10:49:31 2021 -0500"
      },
      "message": "Rename crop_legacy to just crop\n\ncrop_legacy and crop should do the same thing so there\u0027s no need for two\nseparate requests.\n\nTest: go/wm-smoke\nTest: SurfaceFlinger_test\nBug: 170765639\n\nChange-Id: I74a740d06d15f7cde9775557e65ad1e3a508bd61\n"
    },
    {
      "commit": "cc81b2f4c32846ecfacb9c56a61eb9af694f345f",
      "tree": "464a4fc23a8687d33a8ab34f8ed1b11d64547935",
      "parents": [
        "870da0041ca5ef9f2c4c54ff5282acf95373ed5e",
        "766c9c53dd3602beb938b76c4376ded2630f59bb"
      ],
      "author": {
        "name": "Chavi Weingarten",
        "email": "chaviw@google.com",
        "time": "Fri Mar 12 17:55:39 2021 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Mar 12 17:55:39 2021 +0000"
      },
      "message": "Merge \"Simplify width, height, transform variable for BSL\" into sc-dev"
    },
    {
      "commit": "d11eb6bd1bec673653e591d10df0ec118554c387",
      "tree": "0abf038cf9b7beafa514c3981ff0f80a12c69eaa",
      "parents": [
        "785adddcbbf459a2ee7351be11fc6fc453740e31"
      ],
      "author": {
        "name": "Adithya Srinivasan",
        "email": "adsrini@google.com",
        "time": "Tue Mar 09 18:46:28 2021 +0000"
      },
      "committer": {
        "name": "Adithya Srinivasan",
        "email": "adsrini@google.com",
        "time": "Thu Mar 11 00:02:12 2021 +0000"
      },
      "message": "Dropping SurfaceFrames from Drawing State\n\nOur assumption is that a buffer committed into drawing state will be\nlatched and presented. Based on this assumption, we present a\nBufferSurfaceFrame only at latch time instead of commit time. However,\nduring back to back invalidates, there is a chance that the first\ncommitted buffer is not latched. It could be replaced by another buffer\nin the second invalidate. This leads to the SurfaceFrame getting stuck\nin the pending classification list. To prevent this, have a check in\ncommitTransaction that drops the SurfaceFrame properly if it hasn\u0027t been\npresented before.\n\nBack to back invalidate can currently be triggered by just flashing a\nclean build and launching the dialer.\n\nBug: 182214053\nTest: libsurfaceflinger_unittest\nChange-Id: I6cd9c4cbfb2ca50b96654ed240664758dad86f19\n"
    },
    {
      "commit": "785adddcbbf459a2ee7351be11fc6fc453740e31",
      "tree": "da2e16912ac79a8c2d5b85c1a7590a574bde386e",
      "parents": [
        "7c4ac7a31d3dc4a0cfec9d2f893c56307ee95185"
      ],
      "author": {
        "name": "Adithya Srinivasan",
        "email": "adsrini@google.com",
        "time": "Tue Mar 09 00:38:00 2021 +0000"
      },
      "committer": {
        "name": "Adithya Srinivasan",
        "email": "adsrini@google.com",
        "time": "Wed Mar 10 23:35:45 2021 +0000"
      },
      "message": "Add isBuffer to SurfaceFrame\n\nAdd a boolean that tells if the SurfaceFrame is representing a buffer or\nnot. This makes it easy to debug lost/stuck frames in the pending\nclassification list. Also add a miniDump for SurfaceFrame to enable\ndebugging the lost frame.\n\nBug: 182214639\nTest: Build and flash\nChange-Id: I6ceef46887a021c2f36e76f37fab8368802465a4\n"
    },
    {
      "commit": "766c9c53dd3602beb938b76c4376ded2630f59bb",
      "tree": "3f2e3a188f8b39a61dfd1f6de7bdc65015c7a2ce",
      "parents": [
        "785ac97f130af051d2ce348471d806a72993a172"
      ],
      "author": {
        "name": "chaviw",
        "email": "chaviw@google.com",
        "time": "Wed Feb 10 17:36:47 2021 -0800"
      },
      "committer": {
        "name": "chaviw",
        "email": "chaviw@google.com",
        "time": "Wed Mar 10 14:46:15 2021 -0800"
      },
      "message": "Simplify width, height, transform variable for BSL\n\nInitial refactor to remove setFrame and use crop and transform instead.\nRenamed some BSL variables to avoid confusion.\n\nTest: Builds\nBug: 170765639\nChange-Id: I907940638c32103cb867c3b1566b9d4ce26c7274\n"
    },
    {
      "commit": "58bf7e24914acb944dd58658b545a75d08140e7c",
      "tree": "e90f75119445f3fcf7e50f1644f3244005f01794",
      "parents": [
        "a8bad0e28a3ba92eed11b75d1e18f00b79f70efa"
      ],
      "author": {
        "name": "Vishnu Nair",
        "email": "vishnun@google.com",
        "time": "Tue Mar 02 17:33:27 2021 -0800"
      },
      "committer": {
        "name": "Vishnu Nair",
        "email": "vishnun@google.com",
        "time": "Tue Mar 02 17:33:33 2021 -0800"
      },
      "message": "Avoid marking visible regions as dirty when metadata changes\n\nThis will trigger additional work by the main thread. This is a quick\nfix before cleaning up layer state sequence ids.\n\nTest: systrace and check we are not recomputing bounds when there\nare no geometry changes\nFixes: 181369288\n\nChange-Id: I6accbc6f6463f816c42e6a000900f15de982eb4b\n"
    },
    {
      "commit": "dde1abd1f9551588b69825295005cc8482bbef06",
      "tree": "47ecb335ace0cde9f0d6c8b43715d41d5e13e6f6",
      "parents": [
        "e28d8aba519a41f9d1d2b04ff0fa8471a0cbee03",
        "adebf5c63121f7986b2ee609ed4b6904e5290285"
      ],
      "author": {
        "name": "Alec Mouri",
        "email": "alecmouri@google.com",
        "time": "Wed Feb 24 22:41:10 2021 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Feb 24 22:41:10 2021 +0000"
      },
      "message": "Merge \"Support streaming fps updates for a layer subtree to sysui via listener.\" into sc-dev"
    },
    {
      "commit": "adebf5c63121f7986b2ee609ed4b6904e5290285",
      "tree": "f53553e3e66657f270a208f9555023b24a8a0e87",
      "parents": [
        "ec1691271f4732807a21fd678bfddb3c7b25c3ae"
      ],
      "author": {
        "name": "Alec Mouri",
        "email": "alecmouri@google.com",
        "time": "Tue Jan 05 12:57:36 2021 -0800"
      },
      "committer": {
        "name": "Alec Mouri",
        "email": "alecmouri@google.com",
        "time": "Tue Feb 23 10:31:31 2021 -0800"
      },
      "message": "Support streaming fps updates for a layer subtree to sysui via listener.\n\nThe supported flow is:\n* A binder listener is registered with SurfaceFlinger that is associated\nwith a task\u0027s SurfaceControl.\n* Every frame, for every listener that is registered, the fps for each\nlayer subtree is computed and reported back to each listener via\nonFpsUpdated.\n* Fps for the layer subtree is computed via FrameTimeline: the layer IDs\nfor the subtree are gathered into a set, and FrameTimeline internally\nfinds all DisplayFrames containing at least one layer, then obtains the\npresent time for each of those frames, then computes the aggregated fps\nfrom those frames. Pragmatically, this should correspond with the last\nhalf second of activity for high refresh rate devices.\n\nNo heuristics are used to select the \"correct\" layer from the layer\nsubtree. If a game is rendering to two layers at a cadence of 30fps but\noffset by one 60hz vsync, then the reported fps will be 60fps because\nboth layers will be counted on the same linear timeline.\n\nNo rate limiting is applied in this patch either. The caller is able to\nhack in rate-limiting by immediately unregistering the listener after a\nFPS callback is dispatched, and then reregistered. Architecturally, it\nis not hard to add in rate-limiting at the SurfaceFlinger level, but\nthat can be added in a follow-up patch since this patch is already\nlarge.\n\nBug: 174956756\nTest: libsurfaceflinger_unittest\nTest: E2E verification with custom listener outputting to logcat\nChange-Id: I792bc19cad18b6aee6c6e644bca9da40a0f15099\n"
    },
    {
      "commit": "44e9f3b54d71a0b71d10918047163fd11bebfdf8",
      "tree": "b9b613270a045b6487db6e8d1d2838933fac1af8",
      "parents": [
        "76a16cf5d35db347778d6ee45465ec636c8330e0"
      ],
      "author": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Tue Feb 16 15:22:58 2021 -0800"
      },
      "committer": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Tue Feb 23 01:39:38 2021 +0000"
      },
      "message": "SF: fix layer activation with scheduler\n\nWhen a layer frame rate vote changes (via setFrameRate call),\nthe layers needs to be activated in scheduler. This change fixes a\nbug that was activating all layers instead of just the layers that\nhas a vote change\n\nBug: 163079696\nBug: 180014293\nTest: run a test app that calls setFrameRate\nChange-Id: Iaa538d04c535b185161a24a4bbadeff2ac99bcd8\n"
    },
    {
      "commit": "a8109d468ad5beb766e385ae213398ad0c97c23b",
      "tree": "26d21add15aa00f2cc4ec081f1c23472625661d2",
      "parents": [
        "ec1691271f4732807a21fd678bfddb3c7b25c3ae",
        "c00c669cbc76f201879ebf2e0ce60d386a0fa483"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Mon Feb 22 22:30:28 2021 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Feb 22 22:30:28 2021 +0000"
      },
      "message": "Merge \"StretchEffect changes\" into sc-dev"
    },
    {
      "commit": "2db024a2f71ab8df0ba41a4a739b2f84cc216222",
      "tree": "f09924fd040a274f23466a9cb6593d496adf0142",
      "parents": [
        "85d57a85ecb0be9ab1edc05ce5c66f9c8e6a49b0",
        "2b9fc2534e3d501b3481c325cc3faa4f74a85029"
      ],
      "author": {
        "name": "Evan Rosky",
        "email": "erosky@google.com",
        "time": "Sat Feb 20 01:46:25 2021 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Sat Feb 20 01:46:25 2021 +0000"
      },
      "message": "Merge \"Unrotate inputwindows into rotation display grew-up in\" into sc-dev"
    },
    {
      "commit": "55ee875058762d442ce645576fc95bcd3621a1e0",
      "tree": "186775938a9c119531f475af26ab9fcfc7621ade",
      "parents": [
        "191cfa3d2a543391f76933e8af348b2b2053c910",
        "061c14c777eba319a63609263c07166b78fd3f6c"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Feb 19 01:56:06 2021 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 19 01:56:06 2021 +0000"
      },
      "message": "Merge \"Trace predictionExpired and dropped frames properly\" into sc-dev"
    },
    {
      "commit": "061c14c777eba319a63609263c07166b78fd3f6c",
      "tree": "9577af4c7c4bdaf1bad80c3b479689f52daefd84",
      "parents": [
        "e06403fa179494d6c5cafd0b4ffce767413eb14c"
      ],
      "author": {
        "name": "Adithya Srinivasan",
        "email": "adsrini@google.com",
        "time": "Thu Feb 11 01:19:47 2021 +0000"
      },
      "committer": {
        "name": "Adithya Srinivasan",
        "email": "adsrini@google.com",
        "time": "Thu Feb 18 22:57:46 2021 +0000"
      },
      "message": "Trace predictionExpired and dropped frames properly\n\nAllowing frames with prediction expired causes a undesirable skew in the\ntrace. Since the timestamps are zero for this case, the trace packets\nare also sent out with zero timestamp. These zero timestamps are seen as\nthe earliest possible time in a trace and hence make it look like the\ntrace contains 1000s of seconds of data while it actually doesn\u0027t.\nThis change addresses this issue by making SurfaceFrames not send any\nexpected timeline packets if prediction is expired. For actual timeline\npackets, we apply a delta to the end time so that it looks like the\nframe has a start and an end.\n\nFor dropped SurfaceFrames, we don\u0027t have an actual end time so far. This\nchange adds a dropTime to the SurfaceFrame so that we can keep track of\nit in trace and dumpsys.\n\nBug: 179905685\nTest: libsurfaceflinger_unittest:FrameTimelineTest\n\nChange-Id: I573037be27f8a74670a65cad791841fa6ed75e20\n"
    },
    {
      "commit": "c00c669cbc76f201879ebf2e0ce60d386a0fa483",
      "tree": "cf0ba5cc37d82f5d0d62845fffcc979b07998ac9",
      "parents": [
        "93be444a3d8e6e2d0ef73f82b0e42104ad4462bc"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Tue Feb 16 11:37:33 2021 -0500"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Thu Feb 18 14:42:23 2021 -0500"
      },
      "message": "StretchEffect changes\n\nBug: 179047472\nTest: StretchySurfaceViewActivity in HwAccelerationTests\nChange-Id: Ia1fcd6136a380bb7099fae08ceb024eae4f79ac8\n"
    },
    {
      "commit": "2b9fc2534e3d501b3481c325cc3faa4f74a85029",
      "tree": "663bf27f1ffdbdbda49f484bb908a1c5fdb71fb3",
      "parents": [
        "021885b03abe889a724412a45457ee4ae002e0d4"
      ],
      "author": {
        "name": "[1;3C",
        "email": "erosky@google.com",
        "time": "Thu Feb 04 16:16:50 2021 -0800"
      },
      "committer": {
        "name": "Evan Rosky",
        "email": "erosky@google.com",
        "time": "Wed Feb 17 17:55:59 2021 -0800"
      },
      "message": "Unrotate inputwindows into rotation display grew-up in\n\nThis way inputflinger internally works within one coordinate\nspace at all times and only transforms coordinates for dispatch\nto targets\n\nThis is behind a flag:\n   adb shell setprop persist.debug.per_window_input_rotation 1\n\nBug: 179274888\nTest: phone should work as before\nChange-Id: I503f9beea9863193801aa6422a416382374e48c8\n"
    },
    {
      "commit": "819f630cd12aaae16b10f0ba14d48c73d43a7a37",
      "tree": "5f623b5e9e91a9b1bce541610b75f90e057d3e4c",
      "parents": [
        "e06403fa179494d6c5cafd0b4ffce767413eb14c"
      ],
      "author": {
        "name": "Alec Mouri",
        "email": "alecmouri@google.com",
        "time": "Fri Feb 12 15:37:21 2021 -0800"
      },
      "committer": {
        "name": "Alec Mouri",
        "email": "alecmouri@google.com",
        "time": "Tue Feb 16 18:41:29 2021 +0000"
      },
      "message": "Set the render rate on the created surface frame instead of the old one.\n\nOtherwise this crashes when overriding a framerate, since mSurfaceFrame\nmay not be initialized when a layer is first created.\n\nBug: 180141499\nTest: builds, boots\nChange-Id: I1f5cecae3fa44a00a61f125435245bcfb2b9ff90\n"
    },
    {
      "commit": "e06403fa179494d6c5cafd0b4ffce767413eb14c",
      "tree": "ad831a7b59787328f5283b164a4ebd98e72da460",
      "parents": [
        "3c18744b3b5f8e5700ab90877ca41bedfc721349",
        "363faf0f14c25316109fce22a7effd577216fbc6"
      ],
      "author": {
        "name": "Alec Mouri",
        "email": "alecmouri@google.com",
        "time": "Thu Feb 11 19:31:44 2021 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Feb 11 19:31:44 2021 +0000"
      },
      "message": "Merge changes Ic348cf9f,Icfd4cecf into sc-dev\n\n* changes:\n  Add deadline histograms into timestats\n  Plumb refresh and render rates into shared timeline\n"
    },
    {
      "commit": "1c69780efbb60608767a28a0887f2cb548fa2002",
      "tree": "e3ac9f7ffebbd3d4ba24921f73311a09ddbf2ec8",
      "parents": [
        "70091d6660ae38137971ebed061c3aedad775937",
        "cdb4ed7743f5abfa4e9a785b14a50ca25c906f3f"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Feb 10 05:42:36 2021 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Feb 10 05:42:36 2021 +0000"
      },
      "message": "Merge \"Add plumbing for sending stretch effect to SF\" into sc-dev"
    },
    {
      "commit": "cfe8258aba09a7f9532e3d7936f8720096e2b5c4",
      "tree": "8c0e94c7d9c655221e0583ffefddc394623d4212",
      "parents": [
        "b9a7dabfc3f6896986b54cf6b21bf1a483391256"
      ],
      "author": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Tue Feb 09 20:10:58 2021 +0000"
      },
      "committer": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Tue Feb 09 20:56:18 2021 +0000"
      },
      "message": "SurfaceFlinger: remove a redundant nullptr check\n\nFixes: 179804956\nTest: SF unit tests\nChange-Id: I23530c82b1e9919077531b880e465362ac64379f\n"
    },
    {
      "commit": "7d436ecfc55ebf0ff69caa8d05a8f4eb63fb72f4",
      "tree": "644b186f7d1c645614bc916a5db8123a311856f8",
      "parents": [
        "4cd01842d4b1ba10eed64fd947c03b53c4fe3105"
      ],
      "author": {
        "name": "Alec Mouri",
        "email": "alecmouri@google.com",
        "time": "Wed Jan 27 20:40:50 2021 -0800"
      },
      "committer": {
        "name": "Alec Mouri",
        "email": "alecmouri@google.com",
        "time": "Tue Feb 09 09:18:15 2021 -0800"
      },
      "message": "Plumb refresh and render rates into shared timeline\n\n* Make the overridden frame rate from the Scheduler public so that\nSurfaceFlinger can access it for each uid.\n* Add the display refresh rate on each display frame\n* Add the application rendering rate on each SurfaceFrame created\n* If there is no application rendering rate, then set it to the display\nrefresh rate.\n* Plumb all those metrics into TimeStats.\n* Change global metrics to increment for every SurfaceFrame instead of\nevery DisplayFrame, so that the rendering rate dimension can be\naccurately captured.\n\nBug: 172937287\nTest: builds, boots, timestats dump\nChange-Id: Icfd4cecfdfa5d6c434661cab91c624eb08e8baea\n"
    },
    {
      "commit": "cdb4ed7743f5abfa4e9a785b14a50ca25c906f3f",
      "tree": "8bf8137c4876131f2605515811ae76da60864462",
      "parents": [
        "e5d7b701a35e9b94383d9924ce1b1ee15de1c43f"
      ],
      "author": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Thu Feb 04 13:39:33 2021 -0500"
      },
      "committer": {
        "name": "John Reck",
        "email": "jreck@google.com",
        "time": "Mon Feb 08 18:19:47 2021 -0500"
      },
      "message": "Add plumbing for sending stretch effect to SF\n\nBug: 179047472\nTest: builds \u0026 boots, doesn\u0027t do anything yet\nChange-Id: Ib8cccdde518f0591c2f2ee3416684442f37a1e06\n"
    },
    {
      "commit": "b9a7dabfc3f6896986b54cf6b21bf1a483391256",
      "tree": "75874dfc21dba55ca11071292290893c78abd70f",
      "parents": [
        "c00282a5df6e7c00bec0befcb98fd4ae9e33da43"
      ],
      "author": {
        "name": "Adithya Srinivasan",
        "email": "adsrini@google.com",
        "time": "Thu Jan 14 23:49:46 2021 +0000"
      },
      "committer": {
        "name": "Adithya Srinivasan",
        "email": "adsrini@google.com",
        "time": "Thu Feb 04 18:27:41 2021 +0000"
      },
      "message": "Fix Transaction tracking for FrameTimeline\n\nThe current setup only supports one SurfaceFrame per DrawingState for\nTransactions. This becomes problematic if more than one Transaction is\nsubmitted for the same vsync, on the same layer. On top of this, the\nBlast transactions can have a buffer that could result in a buffer drop.\n\nThis change adds the support to hold multiple SurfaceFrames in the\nLayer\u0027s State. It also adds a bufferSurfaceFrame that\u0027s intended only\nfor Blast Transactions with a Buffer. All other Transactions are tracked\nin the bufferlessSurfaceFrames.\n\nAdditionally, this change also adds a lastLatchTime. It is needed for\nclassifying BufferStuffing properly.\n\nBug: 176106798\nTest: open any app from the launcher and at the same time check dumpsys\nChange-Id: Id3b8369ca206f8b89be3041e5fc018f1f1be1d23\nMerged-In: Id3b8369ca206f8b89be3041e5fc018f1f1be1d23\n"
    },
    {
      "commit": "a73115b7c6601b3a5fe3dfac68b1af5d8eaae328",
      "tree": "1dccfe273f270cefd354d676d3d1b4e32732eedc",
      "parents": [
        "58144273809dc92c36f901190cc825e1739de2bd",
        "8ba8b076a0335155a57a9e8004614c302d07c154"
      ],
      "author": {
        "name": "Chavi Weingarten",
        "email": "chaviw@google.com",
        "time": "Tue Feb 02 23:12:36 2021 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Feb 02 23:12:36 2021 +0000"
      },
      "message": "Merge \"Remove detachChildren\" into sc-dev"
    },
    {
      "commit": "fc434acf530cbde198c8936bf1bc09fad5861031",
      "tree": "2f22c6a51fe8cd66f106004d9b438f52c8eeccf2",
      "parents": [
        "99599940f68158aeef735d8763980d0dbd397b51"
      ],
      "author": {
        "name": "Siarhei Vishniakou",
        "email": "svv@google.com",
        "time": "Wed Jan 13 10:28:00 2021 -1000"
      },
      "committer": {
        "name": "Siarhei Vishniakou",
        "email": "svv@google.com",
        "time": "Fri Jan 29 18:48:01 2021 +0000"
      },
      "message": "Add inputEventId to SurfaceFrame\n\nSurfaceFrame will now be aware of the id of the input event that caused\nthe current frame.\n\nThe flow of input event id is inputflinger -\u003e app -\u003e surfaceflinger.\nHere, we are adding the \u0027inputEventId\u0027 parameter to the\n\u0027setFrameTimelineVsync\u0027 call. This call will now be responsible for\nsetting two pieces of information: the vsync id, and the input event id.\nSince it will no longer be limited to the vsync id, we rename this call\nto \"setFrameTimelineInfo\".\n\nOnce the inputEventId is stored in SurfaceFrame, we will add a binder\ncall to send the frame timing information to inputflinger (separate,\nfuture CL). This will allow input to reconstruct the entire sequence of\nevents (at what time was input event getting processed in system_server,\napp, and surfaceflinger) and will provide the ability to measure\nend-to-end touch latency.\n\nIn a separate change, we will also add ATRACE calls to allow manual /\nscript-based latency analysis for local debugging. We will now know\nwhich input event is being processed in surfaceflinger.\n\nBug: 169866723\nBug: 129481165\nDesign doc: https://docs.google.com/document/d/1G3bLaZYSmbe6AKcL-6ZChvrw_B_LXEz29Z6Ed9QoYXY/edit#\nTest: atest WMShellUnitTests SurfaceParcelable_test libgui_test IPC_test SurfaceFlinger_test\n\nChange-Id: If7e0eee82603b38b396b53ad7ced660973efcb50\nMerged-In: If7e0eee82603b38b396b53ad7ced660973efcb50\n"
    },
    {
      "commit": "f6eddb6b42a9548f1298e899ea06a7a042182783",
      "tree": "3c3cfcc5c4589cc80069a25de8a362f7f5434599",
      "parents": [
        "dd5bfa93b0c6633b7372c87fc8d7a83a73a5cd1c"
      ],
      "author": {
        "name": "Vishnu Nair",
        "email": "vishnun@google.com",
        "time": "Wed Jan 27 22:02:11 2021 -0800"
      },
      "committer": {
        "name": "Vishnu Nair",
        "email": "vishnun@google.com",
        "time": "Thu Jan 28 11:54:57 2021 -0800"
      },
      "message": "Enable backpressure for BufferStateLayer\n\nThe default behaviour of buffer state layer is to drop older\nbuffers if there are newer buffers that are ready to be presented.\n\nWhen emulating BufferQueue behavior via the adapter, we want\nto queue up buffers without any present timestamps. To solve this,\nwe introduce a layer state flag to keep the buffer in the transaction\nqueue if there is already a buffer that is ready to be applied.\n\nTest: atest SurfaceViewBufferTests:BufferPresentationTests\nBug: 176967609\nChange-Id: I33f6347bd1c7a2d80dc4214e596bb864abe8c6bf\n"
    },
    {
      "commit": "8ba8b076a0335155a57a9e8004614c302d07c154",
      "tree": "6d63463f350df1ab7414b89239a0ca543bf8e05b",
      "parents": [
        "263aff5505f0efdcc8f36db3150b8e1c9137c765"
      ],
      "author": {
        "name": "chaviw",
        "email": "chaviw@google.com",
        "time": "Mon Jan 25 14:55:46 2021 -0800"
      },
      "committer": {
        "name": "chaviw",
        "email": "chaviw@google.com",
        "time": "Wed Jan 27 18:23:37 2021 -0800"
      },
      "message": "Remove detachChildren\n\nSince there are no longer callers of detachChildren, remove code and\ntest that involve detachChildren\n\nTest: Builds and remaining tests pass\nBug: 177557720\nChange-Id: Id5b7120b7f2c289d4e7ffb5565b29e2be18d6587\n"
    },
    {
      "commit": "dd5bfa93b0c6633b7372c87fc8d7a83a73a5cd1c",
      "tree": "660587622f4a72248b1fdec8419c4bf83d775986",
      "parents": [
        "f467f898f42eccda1207a90d54e0b7d18b762a1b"
      ],
      "author": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Thu Jan 07 17:56:08 2021 -0800"
      },
      "committer": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Wed Jan 27 23:01:53 2021 +0000"
      },
      "message": "SurfaceFlinger: handle high refresh rate deny list\n\nAdd visibility to SurfaceFlinger into the high refresh rate deny list\nand let SurfaceFlinger handle it. Previously WM was setting the\npreferredDisplayModeId on the denied app\u0027s window. The old way prevented\nSurfaceFlinger to use the frame rate override feature as it didn\u0027t\nknow that a specific app is causing the refresh rate spec to be limited.\n\nWith this change, SurfaceFlinger will limit the display refresh rate based\non the high refresh rate deny list, and if possible, will use the frame\nrate override feature to change the display rate to a multiple, allowing\nother animations to be smooth while the denied app remains in the low\nrefresh rate.\n\nBug: 170502573\nTest: SF unit tests\nChange-Id: Idc8a5fe6bc12dbd949ad5e09ff50e339ffaeac36\nMerged-In: Idc8a5fe6bc12dbd949ad5e09ff50e339ffaeac36\n"
    },
    {
      "commit": "f467f898f42eccda1207a90d54e0b7d18b762a1b",
      "tree": "098c819e371b3c5b0c54693f7a1c7d2cb7b62ba8",
      "parents": [
        "814bc2250c245ddc03f505e8d0424aae66b3567f"
      ],
      "author": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Fri Jul 31 16:01:53 2020 -0700"
      },
      "committer": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Wed Jan 27 23:01:07 2021 +0000"
      },
      "message": "SF: use parent layer frame rate\n\nIf an ancestor of a layer set a frame rate, and that layer doesn\u0027t\nhave a frame rate configured, use the one of the ancestor. The reason\nfor this is to support the high refresh rate deny list where WM will\nset the frame rate on a container layer which is not visible. With this\nchange we will treat all child layers of that container as if they voted\nthemselves.\n\nTest: test app that sets preferredDisplayModeId\nBug: 163079696\nChange-Id: I3c55d393af72e19cd7b4f107d8cc0b2e85289d96\nMerged-In: I3c55d393af72e19cd7b4f107d8cc0b2e85289d96\n(cherry picked from commit 20dcde8e35b003a82e4c14d39c76f93a16ec6e9d)\n"
    },
    {
      "commit": "0a8314df8ce9f7839064895ee1600da921823e06",
      "tree": "a9640ab90420aac53b63677d978da6dbe0c2d021",
      "parents": [
        "9b7aa2216f34f0939832c520aa8817e864f62193",
        "bd17b3bffd3752a3fff4245149b5d75cbdbf0e0e"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Jan 05 23:43:31 2021 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jan 05 23:43:31 2021 +0000"
      },
      "message": "Merge \"Don\u0027t fill boundary rectangle when drawing shadows.\""
    },
    {
      "commit": "9b2ca3ea18da09ab9e626c2bac12e01a714791d1",
      "tree": "bd87aef5e67d6c233964d225bbb1530afa8ab5d7",
      "parents": [
        "c8cfdc5944adad450cc4f71e10f8d3e24d5ef01e"
      ],
      "author": {
        "name": "Adithya Srinivasan",
        "email": "adsrini@google.com",
        "time": "Tue Nov 10 10:14:17 2020 -0800"
      },
      "committer": {
        "name": "Adithya Srinivasan",
        "email": "adsrini@google.com",
        "time": "Wed Dec 23 04:49:03 2020 +0000"
      },
      "message": "Expand jank classification\n\nThis change expands the jank classification to include new cases like\nBufferStuffing and SurfaceFlingerScheduling while also updating the jank\nclassification logic to be more accurate.\n\nThis change also refactors SurfaceFrame by removing the abstraction\nclass for SurfaceFrame since its now being polled by the layers as well.\n\nBug: 169890654\nTest: libsurfaceflinger_unittest\n\nChange-Id: Ica8ab1d1e4bf2052fffc6247fc5820d96ae8445d\n"
    },
    {
      "commit": "4083086e1a9944b671f37617ac5a8f1f6e784dc1",
      "tree": "4b16f961658f178d02e94d7a8a92f0d7416d791c",
      "parents": [
        "fdfda3c271df810528ef1bc7f5206ae6729bbe39",
        "da7de0e5818814bd596914a374c0bd6d568e21db"
      ],
      "author": {
        "name": "Galia Peycheva",
        "email": "galinap@google.com",
        "time": "Fri Dec 18 13:20:57 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Dec 18 13:20:57 2020 +0000"
      },
      "message": "Merge \"Make layer background blur depend on parent alpha\""
    },
    {
      "commit": "bd17b3bffd3752a3fff4245149b5d75cbdbf0e0e",
      "tree": "ada5601758b818777cacb60173daddf1d51ad0a4",
      "parents": [
        "fc4d04944ca6dc20bb601e87126025cab7a0a780"
      ],
      "author": {
        "name": "Alec Mouri",
        "email": "alecmouri@google.com",
        "time": "Thu Dec 17 11:08:30 2020 -0800"
      },
      "committer": {
        "name": "Alec Mouri",
        "email": "alecmouri@google.com",
        "time": "Fri Dec 18 01:11:36 2020 +0000"
      },
      "message": "Don\u0027t fill boundary rectangle when drawing shadows.\n\nSurfaceFlinger splits up EffectLayers containing shadows into multiple\nparts:\n1. A layer only containing the shadow metadata, and\n2. Either a background blur or a solid color.\n\nSince the default solid color is an opaque black, this causes shadows to\nblack out PIP windows.\n\nA follow-up patch should change the default solid color to be a\ntransparent black instead so that nothing is drawn, or define a\ncanonical invalid color but we\u0027d have to check callers to make sure\nthe GLES path doesn\u0027t break either.\n\nBug: 175824511\nBug: 175819287\nTest: PIP window\nChange-Id: I21336a7885299a127f3dad2a6b88c9dcab0b5980\n"
    },
    {
      "commit": "da7de0e5818814bd596914a374c0bd6d568e21db",
      "tree": "e363cc3638ef38f4077e67a2f5a8763475a6ea6b",
      "parents": [
        "adfede47f98d1d5f0b38d3048f68d3dd8bf918fd"
      ],
      "author": {
        "name": "Galia Peycheva",
        "email": "galinap@google.com",
        "time": "Thu Dec 03 17:24:35 2020 +0100"
      },
      "committer": {
        "name": "Galia Peycheva",
        "email": "galinap@google.com",
        "time": "Thu Dec 17 18:58:04 2020 +0100"
      },
      "message": "Make layer background blur depend on parent alpha\n\nThat way animation leashes animating a fade will also animate the\nbackground blur radius.\n\nBug: 171679369\nTest: manual\nChange-Id: I12196d10d2786f2239133fed501b7fb57c636c52\n"
    },
    {
      "commit": "6eab17adbee1b41c2380155c8238a1cd72bdd414",
      "tree": "315caca172c3b902d31e30640019838e875fcb65",
      "parents": [
        "ef7705d5695070d62ed58047021af5318d91d494"
      ],
      "author": {
        "name": "Ana Krulec",
        "email": "akrulec@google.com",
        "time": "Wed Dec 09 15:52:36 2020 -0800"
      },
      "committer": {
        "name": "Ana Krulec",
        "email": "akrulec@google.com",
        "time": "Wed Dec 16 14:48:45 2020 -0800"
      },
      "message": "Adding additional annotation to Skia Recorder\n\nAdding DisplaySetting and LayerSettings as drawAnnotations\nwhen Skia Caputure is recording. This is useful to know what\nlayer is being drawn on screen.\n\nTest: Turn on skiagl RE. Turn on recording. Grab file from device.\n      Open in Skia debugger.\nBug: 173805658\nChange-Id: I2c94a7f5af7f48297a42a1b51c79eea9d9c1c868\n"
    },
    {
      "commit": "a874f393758729af358b9736b13518129715f5fd",
      "tree": "85c4bc54bbf12c1e4b731b3e430f4df4c1f0b45c",
      "parents": [
        "d4bd9ff9e872cd1b583f58a5e02bd51c4bc12e84",
        "948c642aaaa86f7f6df6e06b169eb6eb7143fad8"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Dec 14 18:53:17 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Dec 14 18:53:17 2020 +0000"
      },
      "message": "Merge \"SF: handle long waiting Layer sync point\""
    },
    {
      "commit": "7e72caf3ba230c8877194f8b84e5f3346bdbb67d",
      "tree": "29475344df961ae4fdefaaa3a7773664af954988",
      "parents": [
        "16abdd2aba373757470ebbb6f8bb46861a6a3d10"
      ],
      "author": {
        "name": "chaviw",
        "email": "chaviw@google.com",
        "time": "Wed Dec 02 16:50:43 2020 -0800"
      },
      "committer": {
        "name": "chaviw",
        "email": "chaviw@google.com",
        "time": "Thu Dec 10 10:27:17 2020 -0800"
      },
      "message": "Use empty frame for input when layer bounds is invalid\n\nFixed a few issues:\n1. Return INVALID_RECT for size if there\u0027s no buffer for BLAST. This was\nalready done in BufferQueueLayer. This ensures we don\u0027t assume the layer\nhas a valid size when there\u0027s no buffer\n\n2. Don\u0027t transform invalid layer bounds in fillInputInfo since it could\nresult in sending a valid frame when the layer actually has no bounds.\nInstead just set input frame to empty, reset the transform, and return\nearly.\n\nTest: Window with no width or height doesn\u0027t get untrusted touch\nTest: InputSurfacesTest\nFixes: 173297887\nChange-Id: I191d411b0f83ce57b6fdc20a1def8070110d418b\n"
    },
    {
      "commit": "285e9ed51f5d702d3cba8b9499cb969b17a291e1",
      "tree": "fdcff7ff92ea3c91ae1d4e2f66a8603b435f6beb",
      "parents": [
        "98096b0440b0661a3e2a4661b7f2a50905091d1f",
        "9c03b50a30c163ad4cee13455311812ef563db40"
      ],
      "author": {
        "name": "Jorim Jaggi",
        "email": "jjaggi@google.com",
        "time": "Thu Dec 10 17:25:47 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Dec 10 17:25:47 2020 +0000"
      },
      "message": "Merge \"Add Shared timeline jank classification listener (1/2)\""
    },
    {
      "commit": "9c03b50a30c163ad4cee13455311812ef563db40",
      "tree": "380089958aada0c2e68d86a690b717c97547fe1e",
      "parents": [
        "5814ab8b847af326de5c46a1b5f2409ff404fc3a"
      ],
      "author": {
        "name": "Jorim Jaggi",
        "email": "jjaggi@google.com",
        "time": "Tue Nov 24 23:51:31 2020 +0100"
      },
      "committer": {
        "name": "Jorim Jaggi",
        "email": "jjaggi@google.com",
        "time": "Thu Dec 10 16:17:14 2020 +0100"
      },
      "message": "Add Shared timeline jank classification listener (1/2)\n\nAdds the ability to register a listener that gets informed about\nSF\u0027 jank classifications via the TransactionCompleted interface\n\nBug: 17475548\nTest: FrameTimelineTest\nTest: Register listener, ensure data flows back\nChange-Id: Ie42c508da605c03569eadab6ab18b7315b35d247\n"
    },
    {
      "commit": "30eff2a88ed4af5c317e3698dba4c808b1665d6e",
      "tree": "784d3f5866c65e90d425b5f7171e776115debe83",
      "parents": [
        "dd94e98e3816e8589a205f59f6b058cf58c7ad14",
        "3bba7cb1f35b5ee3ba02bca7c743e29649505bd1"
      ],
      "author": {
        "name": "Bernardo Rufino",
        "email": "brufino@google.com",
        "time": "Thu Dec 10 10:45:44 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Dec 10 10:45:44 2020 +0000"
      },
      "message": "Merge \"Set ownerUid/ownerPid for layer with no input info\""
    },
    {
      "commit": "6fd11baad976aa98fc9eefd4ce541879678db2b7",
      "tree": "ed173da2429e6579955687f5d60444288a304115",
      "parents": [
        "2e5608e3e9c7c5f6fd29c0993c6d79efa86aed1f",
        "46213eafeecc1c9713383aa4f1ff37363b3644ab"
      ],
      "author": {
        "name": "Hongwei Wang",
        "email": "hwwang@google.com",
        "time": "Thu Dec 10 01:56:48 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Dec 10 01:56:48 2020 +0000"
      },
      "message": "Merge \"Check ROTATE_SURFACE_FLINGER permission on arbitrary rotation\""
    },
    {
      "commit": "3bba7cb1f35b5ee3ba02bca7c743e29649505bd1",
      "tree": "2cb46bc14dd47ada26edbf8d483cf597ac16cc5b",
      "parents": [
        "5f409a069065b89f64964b7e5a876d6a33ddf17f"
      ],
      "author": {
        "name": "Bernardo Rufino",
        "email": "brufino@google.com",
        "time": "Wed Dec 09 14:23:04 2020 +0000"
      },
      "committer": {
        "name": "Bernardo Rufino",
        "email": "brufino@google.com",
        "time": "Wed Dec 09 14:23:04 2020 +0000"
      },
      "message": "Set ownerUid/ownerPid for layer with no input info\n\n..instead of callingUid/callingPid. Using the caller instead of the\nowner is problematic because it can block touches when it shouldn\u0027t.\n\nThe example we saw was twitter using an exit animation on their own app,\nthe window had no input info but the touch was being blocked even\nthought it was twitter over twitter, this was because the uid being\nassigned was 1000 (the system) instead of twitter\u0027s UID.\n\nWe have put an exemption for animations that takes into consideration\nthe alpha, but this is orthogonal, twitter could have any other\nanimation and should be allowed to let touches pass through to their own\napp if they wanted.\n\nTest: Verify windows in exit animations have UID correctly assigned, and\n      verify touches are allowed when it\u0027s the same app below.\nTest: CTS coming\nBug: 173317413\nChange-Id: I03ac5dc590456c1b2941e5f351bc32890d1bbca3\n"
    },
    {
      "commit": "948c642aaaa86f7f6df6e06b169eb6eb7143fad8",
      "tree": "2a41c4b2f636479c7edcb5031f959b6737fd9779",
      "parents": [
        "1ed501fb9839f26ad8f6b9732e357b54dd4f0b22"
      ],
      "author": {
        "name": "KaiChieh Chuang",
        "email": "kaichieh.chuang@mediatek.com",
        "time": "Tue Oct 13 10:38:48 2020 +0800"
      },
      "committer": {
        "name": "Dan Stoza",
        "email": "stoza@google.com",
        "time": "Tue Dec 08 15:16:20 2020 -0800"
      },
      "message": "SF: handle long waiting Layer sync point\n\nWhen Layer transaction deferred\nit wait for barrier layer\u0027s specific frame.\n\nWhen the target frame is delayed for a long time, e.g. 5 min\nthe deferred transaction layer may queue up in mPendingStates,\nmay up to 20000 in real case.\n\nWhen the target frame come, it will loop through mPendingStates\nand call popPendingState with mPendingStates.removeAt(0);\nwhich is an inefficient operator for Vector, which cause SWT.\n\nChange to use std::deque for mPendingStates \u0026 mPendingStatesSnapshot\nAdd sync point timeout debug log.\n\nBug: 170690571\nTest: boot up\nTest: LayerUpdateTest\nTest: setting pages in/out\n\nChange-Id: I17f3751836574c3691c7e5a1e6d2ea6c3fcd3903\n"
    },
    {
      "commit": "1876e2eac0b9fb79c1633b0386d72938fbc3051d",
      "tree": "f083ea7135f61cfebeae6a06d3463d6f7d631f9a",
      "parents": [
        "d52137ea4df4bd3961bf92429401a9c4dbdc936c"
      ],
      "author": {
        "name": "Marin Shalamanov",
        "email": "shalamanov@google.com",
        "time": "Fri Dec 04 13:23:59 2020 +0100"
      },
      "committer": {
        "name": "Marin Shalamanov",
        "email": "shalamanov@google.com",
        "time": "Tue Dec 08 15:27:58 2020 +0100"
      },
      "message": "SF: Fix formatting of the layers table in dumpsys\n\nBug: 161776961\nTest: adb shell dumpsys SurfaceFlinger\nChange-Id: If5193f75cc03eebf3d06897bd6856c732886377c\n"
    },
    {
      "commit": "e8a663d78f711666d4f1f9792884ebdcbe185a28",
      "tree": "e21a4f92a57cb7da9504dfeafa7ff5a1ee698447",
      "parents": [
        "1ed501fb9839f26ad8f6b9732e357b54dd4f0b22"
      ],
      "author": {
        "name": "Marin Shalamanov",
        "email": "shalamanov@google.com",
        "time": "Tue Nov 24 17:48:00 2020 +0100"
      },
      "committer": {
        "name": "Marin Shalamanov",
        "email": "shalamanov@google.com",
        "time": "Tue Dec 08 15:27:58 2020 +0100"
      },
      "message": "Add Fps class\n\nAdd a class to wrap a fps value. This is useful because across\nthe code we\n - convert between vsyncPeriod and fps\n - compare with tolerance (this ensures we use consistent tolerance)\n - consistent toString method\n\nBug: 159590486\nTest: presubmit\nChange-Id: Iebb77a33a2f822056642aa61bd6fac6514aa656d\n"
    },
    {
      "commit": "46213eafeecc1c9713383aa4f1ff37363b3644ab",
      "tree": "a3853cdb6007866dc29b64a6be97655e0e17a1cd",
      "parents": [
        "2070050c7e797234dda2ffbd478befde7afb5841"
      ],
      "author": {
        "name": "Hongwei Wang",
        "email": "hwwang@google.com",
        "time": "Fri Dec 04 17:17:31 2020 -0800"
      },
      "committer": {
        "name": "Hongwei Wang",
        "email": "hwwang@google.com",
        "time": "Fri Dec 04 18:01:33 2020 -0800"
      },
      "message": "Check ROTATE_SURFACE_FLINGER permission on arbitrary rotation\n\nThis permission is granted for arbitrary rotation (other than 90\ndegreee) on a Surface. Which is useful for Launcher to rotate the app\nleash when animating from fullscreen landscape to PiP window onto home\nin portrait mode.\n\nBug: 109894387\nTest: m -j\nChange-Id: Ie2bac0d76e6f1187954b65d6689a6adb7836e09c\n"
    },
    {
      "commit": "66eaf4a3af93275720a65c3f0a379416524f7105",
      "tree": "370e128e80a7b18addcec42cfa44b0b6ac271eee",
      "parents": [
        "6df72d72ea150492616d543ebcc9190e81e36882"
      ],
      "author": {
        "name": "Galia Peycheva",
        "email": "galinap@google.com",
        "time": "Mon Nov 09 13:17:57 2020 +0100"
      },
      "committer": {
        "name": "Galia Peycheva",
        "email": "galinap@google.com",
        "time": "Thu Dec 03 13:49:01 2020 +0100"
      },
      "message": "Dynamically disable blurs when tunnel mode is used\n\nTunnel mode allows applications to stream video content directly to the\nhardware composer, bypassing surface flinger. This is done for\nperformance.\n\nSince the content bypasses surface flinger, the respective layer is empty.\nSo when we try to compute a blur on top of such a layer, the output is\na black surface. To avoid this empty surface, we want to make\nsurfaceflinger disable blurs whenever there is a layer that has tunnel\nmode.\n\nWhen tunnel mode is used, the respective layer is given a handle to a\nsideband stream, which is how surface flinger recognises that tunnel\nmode is in use.\n\nThis CL adds logic to compute when there is a sideband stream in one of\nthe layers in composition engine and then instructs\nLayer::prepareClientComposition to not set backgroundBlurRadius or\nblurRegions.\n\nBug: 171457637\nTest: m \u0026\u0026 flash \u0026\u0026 check that requesting blur on top of a tunnel mode\nlayer does not make the screen black\n\nChange-Id: I40a206f6ad4e805c66756317cbea1cf69db32dfc\n"
    },
    {
      "commit": "53fc11d92e931e66e57be0f8d753b9eb33a22031",
      "tree": "de5bdd0e5d137d7588b9a3e5a463b22319c6b21d",
      "parents": [
        "b98a1bfbe1358a748767a4ee183c8138a0bed42d"
      ],
      "author": {
        "name": "Marin Shalamanov",
        "email": "shalamanov@google.com",
        "time": "Fri Nov 20 14:00:13 2020 +0100"
      },
      "committer": {
        "name": "Marin Shalamanov",
        "email": "shalamanov@google.com",
        "time": "Tue Nov 24 14:47:42 2020 +0100"
      },
      "message": "Make shouldBeSeamless an enum\n\nWe change theboolean shouldBeSemaless to an enum with\nthree values. This introduces a third value \"Default\" which\nindicates that the layer doesn\u0027t have a preference for\nseamlessness. This is the default value for Surfaces which\nhaven\u0027t called setFrameRate, or have called setFrameRate(0).\n\nBug: 161776961\nTest: presubmit\nChange-Id: I157e332e82e95badc928d6a8135e657cd6984db4\n"
    },
    {
      "commit": "b8871072670285c34d18c762d483b553c5473557",
      "tree": "c284bb80485eb8cc3597518de3ec40a79f925413",
      "parents": [
        "16d09068027eb4b1bd18b8fe5089b10ee2a7dea5",
        "110c6bcc11979eb13db5966388056d3805adea4f"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Nov 17 14:57:10 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Nov 17 14:57:10 2020 +0000"
      },
      "message": "Merge changes from topic \"isSeamlessRequired\"\n\n* changes:\n  Fix docs formatting for surface_control.h\n  Dump RefreshRateConfigs\n  Add shouldBeSeamless to setFrameRate\n"
    },
    {
      "commit": "4608442db90c07dccc833dbdf1cea78f57c7b96d",
      "tree": "be976923f779a78bf40ee5f5165a51f76b37b897",
      "parents": [
        "6bb6836cbdc56efc7e3bc4a14aea6dcf43f9ff3c"
      ],
      "author": {
        "name": "Marin Shalamanov",
        "email": "shalamanov@google.com",
        "time": "Tue Oct 13 12:33:42 2020 +0200"
      },
      "committer": {
        "name": "Marin Shalamanov",
        "email": "shalamanov@google.com",
        "time": "Mon Nov 16 18:01:55 2020 +0100"
      },
      "message": "Add shouldBeSeamless to setFrameRate\n\nThis CL adds a new parameter shouldBeSeamless to the existing\nsetFrameRate APIs. This parameter indicates whether the desired\nrefresh rate should be achieved only seamlessly or also switches\nwith visual interruptions for the user are allowed. The default\nvalue of the new parameter is \"true\".\n\nTest: atest RefreshRateConfigsTest\nTest: atest SetFrameRateTest\nTest: atest libsurfaceflinger_unittest\nTest: atest libgui_test\n\nBug: 161776961\nChange-Id: I0df16e09f77c8c198fd3733fb581a2aaadfed685\n"
    },
    {
      "commit": "69df21f13ca16427fce2ba75e6beedacf05686cb",
      "tree": "800181b38861b8514ca9145442aabb85b0d16a16",
      "parents": [
        "c4889b8c739316daa1582f457b80174053bd9e5d",
        "9aaf96f5d7ff8e16c9803a85de52fee411289b1b"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Nov 12 19:50:36 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Nov 12 19:50:36 2020 +0000"
      },
      "message": "Merge \"Change severity of \"No local sync point found\" logs\""
    },
    {
      "commit": "9aaf96f5d7ff8e16c9803a85de52fee411289b1b",
      "tree": "48a61a2d787026d3e09c0e464c5fe5b6ba671132",
      "parents": [
        "5872c14d7f1217cfc86e9fe90bb01f0afc042ded"
      ],
      "author": {
        "name": "Vishnu Nair",
        "email": "vishnun@google.com",
        "time": "Mon Nov 09 17:53:07 2020 -0800"
      },
      "committer": {
        "name": "Vishnu Nair",
        "email": "vishnun@google.com",
        "time": "Mon Nov 09 17:53:27 2020 -0800"
      },
      "message": "Change severity of \"No local sync point found\" logs\n\nThese logs can be generated during normal operation and does not\nnecessarily indicate an error. Change them to verbose to reduce\nnoise when investigating issues.\n\nBug: 172405302\nTest: open app, check there are no error logs from Layer\nChange-Id: Ibc57c399b27c72bb8a1f2c2aa98f33c96e334bd2\n"
    },
    {
      "commit": "39cfa2e03fc5e134eb62f2ebedbab91f56fefa22",
      "tree": "92b1b719371014cea6298e4891ede0280a80ee74",
      "parents": [
        "5872c14d7f1217cfc86e9fe90bb01f0afc042ded"
      ],
      "author": {
        "name": "chaviw",
        "email": "chaviw@google.com",
        "time": "Wed Nov 04 14:19:02 2020 -0800"
      },
      "committer": {
        "name": "chaviw",
        "email": "chaviw@google.com",
        "time": "Fri Nov 06 16:41:21 2020 -0800"
      },
      "message": "Crop bounds sent to input by screen bounds.\n\nWe want to the frame sent to input to be the layer bounds, including\ncrop. This is because if the layer is cropped, we don\u0027t need to consider\nthe cropped area on screen and therefore will not affect the touch area.\n\nTest: Minimized split has correct input frame\nTest: InputSurfacesTest.*\nFixes: 170871385\nFixes: 171756624\nChange-Id: I3d00f98044a68de6596265bc3e444d3ed2ea5896\n"
    },
    {
      "commit": "9febda8e05bbd924d14682454fdc7a846c38f954",
      "tree": "f3db8c2be3e1d716aa236244cc2f62a7b7392b26",
      "parents": [
        "854e1b9538adf3aac0f1ce012a2d3b532880f4ca"
      ],
      "author": {
        "name": "Adithya Srinivasan",
        "email": "adsrini@google.com",
        "time": "Mon Oct 19 10:49:41 2020 -0700"
      },
      "committer": {
        "name": "Adithya Srinivasan",
        "email": "adsrini@google.com",
        "time": "Mon Nov 02 18:32:24 2020 -0800"
      },
      "message": "Plumb owner pid into Layer\n\nFor shared timeline visualization, the pid of the process owning the\nlayer is needed to show the information in the respective process\ntracks. This change stores the newly added METADATA_OWNER_PID\ninformation sent as a part of the Layer creation args\n\nBug: 170911969\nTest: pid section of `adb shell dumpsys SurfaceFlinger --frametimeline -\u003call/jank\u003e`\n\nChange-Id: Ib1cd9b6239501b0b92283dca19d7de3916fff604\n"
    },
    {
      "commit": "1b3976abd4c7e6102f9a2c4b862fd0747f208869",
      "tree": "495bbddccec2e44f9347407c6fba8bf5feb9a5dc",
      "parents": [
        "252809aeb8dc1e45bab7b4f0b96bcedd91599221",
        "9a29e67aead74c8c667b316230850c6c502ad3ad"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Mon Nov 02 23:28:29 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Nov 02 23:28:29 2020 +0000"
      },
      "message": "Merge \"Expose shared timeline counters into telemetry:\""
    },
    {
      "commit": "9a29e67aead74c8c667b316230850c6c502ad3ad",
      "tree": "b6c2c0b5eaa5ff4e12509a58d73c9681b884fc23",
      "parents": [
        "fac951774b6d73a681ea55a9266bd883203e04e3"
      ],
      "author": {
        "name": "Alec Mouri",
        "email": "alecmouri@google.com",
        "time": "Mon Sep 14 12:39:14 2020 -0700"
      },
      "committer": {
        "name": "Alec Mouri",
        "email": "alecmouri@google.com",
        "time": "Mon Nov 02 12:04:17 2020 -0800"
      },
      "message": "Expose shared timeline counters into telemetry:\n\n* Add UID into both shared timeline and timestats tracking: due to BLAST\nAPIs, layer name is insufficient for identifying applications\n* Plumb through jank counters from shared timeline into timestats and WW\n* Fixed bug where SurfaceflingerDeadlineMissed was not being tracked.\n\nOne caveat is that transactions are tracked in shared timeline, so as\na consequence timestats will start tracking them as well.\n\nBug: 171309796\nTest: builds, boots\nTest: statsd_testdrive\nTest: libsurfacefinger_unittest\nTest: dumpsys SurfaceFlinger --timestats -dump\n\nChange-Id: I71057c0976ce81bbb605e126cb30b9d6f06c5873\n"
    },
    {
      "commit": "c3800b88e8c8c2cd6b7f2b039d2dc6b6894f52d1",
      "tree": "c45ae349cf6864a27628f49fc1d5d1ee0ce824ad",
      "parents": [
        "29ef559845d1bd0273771d92edaff234c5b5b520"
      ],
      "author": {
        "name": "Lucas Dupin",
        "email": "dupin@google.com",
        "time": "Fri Oct 02 16:24:48 2020 -0700"
      },
      "committer": {
        "name": "Lucas Dupin",
        "email": "dupin@google.com",
        "time": "Fri Oct 30 22:06:53 2020 +0000"
      },
      "message": "Implement blur region in RenderEngine\n\nBlur regions should be be piped through SurfaceFlinger\nall the way down to the compositor, in order to render\nblurs.\n\nIt\u0027s also necessary to cache them if multiple regions require\nthe same blur radius.\n\nTest: manual\nTest: atest SurfaceInterceptor_test\nTest: atest OutputUpdateAndWriteCompositionStateTest\nBug: 159712515\nChange-Id: Id4759f65eb2522a80e9328062fe641fe29786a30\n"
    },
    {
      "commit": "47dbd69f85fdc57d414c3c31e6fd950fd473e387",
      "tree": "3bd71f0349b90b71d54ae9132ebf835b47e12aa7",
      "parents": [
        "46f8f78fc9b4c6d1ed03dca43770b9f9d19784fd"
      ],
      "author": {
        "name": "chaviw",
        "email": "chaviw@google.com",
        "time": "Mon Oct 26 17:50:12 2020 -0700"
      },
      "committer": {
        "name": "chaviw",
        "email": "chaviw@google.com",
        "time": "Mon Oct 26 17:56:31 2020 -0700"
      },
      "message": "Don\u0027t lose transaction callbacks that are still in the drawing state.\n\nWhen a message invalidate occurs, the current state will be copied into\ndrawing state. If another invalide occurs before a refresh, the new\ncurrent state will be copied into the drawing state. That means we\nwould lose any transaction callbacks that were sent with the first\ntransaction. When refresh is called, we will not notify the callbacks\nfrom the first transaction and the system will get stuck waiting for\ncallbacks forever.\n\nTest: No direct steps to reproduce. Open apps a lot with blast and\nmake sure system doesn\u0027t freeze.\n\nChange-Id: I820027e86b15e082e5e7092b2ee52e90a2328d38\n"
    },
    {
      "commit": "9ff8bcc46a0306e66e9bd8e5aba234c2c0fdc379",
      "tree": "0b6a76d9cae2eef2e381a88f93267bb6c574405d",
      "parents": [
        "f06dc6d791b8e2c05e506603e2ecfcbfa430805c"
      ],
      "author": {
        "name": "Vishnu Nair",
        "email": "vishnun@google.com",
        "time": "Tue Oct 20 15:18:44 2020 -0700"
      },
      "committer": {
        "name": "Vishnu Nair",
        "email": "vishnun@google.com",
        "time": "Tue Oct 20 15:18:50 2020 -0700"
      },
      "message": "Don\u0027t increment layer state sequence id when setting setFrameTimelineVsyncForTransaction\n\nLayer state sequence id should only change when the visible region\ncan change. The id is used to set the mVisibleRegionDirty flag which\ntriggers geom calculations and updates to InputDispatcher.\n\nsetFrameTimelineVsyncForTransaction is called for every layer\ntransaction and this is worse for Blast since buffers come via\ntransactions as well.\n\nTest: adb shell dumpsys SurfaceFlinger --frametimeline and check prediction state is valid\nChange-Id: Ib8ba61a706d122e3e2d77730dcabf29c7480529b\n"
    },
    {
      "commit": "64f45cf2c328ef30c7241f64b8f95f63dbc3f897",
      "tree": "4c2ee7e1158e66043f8e503b1dc14595b0400e9c",
      "parents": [
        "b71253ecbc20334061e7ce7cadad5ab748a88810",
        "74861ad4708bbe42cbba70bf3a41b2cf6a5967f0"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Oct 15 03:08:37 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Oct 15 03:08:37 2020 +0000"
      },
      "message": "Merge \"[SurfaceFlinger] Update comments to clarify transform.\""
    },
    {
      "commit": "74861ad4708bbe42cbba70bf3a41b2cf6a5967f0",
      "tree": "95b041d96670e5f56c3697d07df26660926b3178",
      "parents": [
        "d72053c65b445fc116f0d4be6f9cf35e784eba8c"
      ],
      "author": {
        "name": "Peiyong Lin",
        "email": "lpy@google.com",
        "time": "Wed Oct 14 11:55:33 2020 -0700"
      },
      "committer": {
        "name": "Peiyong Lin",
        "email": "lpy@google.com",
        "time": "Wed Oct 14 18:19:00 2020 -0700"
      },
      "message": "[SurfaceFlinger] Update comments to clarify transform.\n\nClarify the source coordinate space and destination coordinate space for\ntransforms.\n\nBug: N/A\nTest: N/A\nChange-Id: I93f6770f8a1f03f81e30e42a80c3196ccb1b0fee\n"
    },
    {
      "commit": "419cc99ae9ee8426ee76fa189337ca48c09d9095",
      "tree": "b3d76f757008ac6a340114ae1456356cbb39f637",
      "parents": [
        "4fc0c43c68cefc1f900ac24117ca1be0968362ca",
        "916b036726e2e82f769405d25bf6b8248572246c"
      ],
      "author": {
        "name": "Rob Carr",
        "email": "racarr@google.com",
        "time": "Wed Oct 14 06:10:45 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Oct 14 06:10:45 2020 +0000"
      },
      "message": "Merge \"SurfaceControl: Remove setOverrideScalingMode\""
    },
    {
      "commit": "de619fa28e85b224933b4ceaccf5f4a30138badc",
      "tree": "f2684b647cc567153615cc8af3ae56c0ed2efa6d",
      "parents": [
        "693291a8dc22931e0c3432a04f0ab968630163cb"
      ],
      "author": {
        "name": "Garfield Tan",
        "email": "xutan@google.com",
        "time": "Fri Oct 02 17:13:53 2020 -0700"
      },
      "committer": {
        "name": "Garfield Tan",
        "email": "xutan@google.com",
        "time": "Thu Oct 08 12:23:51 2020 -0700"
      },
      "message": "Make a layer secure if its parent is secure.\n\nDialogs and context menus can be captured in screenshots even if their\nparent layer/window is marked secure. Therefore we should let the secure\nflag be inherited from their parents as well.\n\nBug: 169851503\nTest: Screen capture can\u0027t capture dialogs in a window marked secure.\nTest: atest libsurfaceflinger_unittest\nTest: atest SurfaceFlinger_test:ScreenCaptureTest\nChange-Id: I0f32a03aeb733682df787105b051c691d1da7bc6\n"
    },
    {
      "commit": "916b036726e2e82f769405d25bf6b8248572246c",
      "tree": "b431c4921ae739367dcac4d862c29c83ad765623",
      "parents": [
        "b52d4c4d3a1272a9ca9873f68de41f0cd4823c24"
      ],
      "author": {
        "name": "Robert Carr",
        "email": "racarr@google.com",
        "time": "Tue Oct 06 13:53:03 2020 -0700"
      },
      "committer": {
        "name": "Robert Carr",
        "email": "racarr@google.com",
        "time": "Wed Oct 07 16:13:45 2020 -0700"
      },
      "message": "SurfaceControl: Remove setOverrideScalingMode\n\nFollowing recent frameworks/base changes there are no callers.\n\nBug: 161937501\nTest: Existing tests pass\nChange-Id: I1a39d30ebd70a0b0cb430a6d1ae48086c3e1806e\n"
    },
    {
      "commit": "7dee71f4bd6e6c865c25af15a7223ffafae02dfe",
      "tree": "bb81ac13852abaae0cbda3b6b3ef63d2c1adad70",
      "parents": [
        "8603e9fa5e8a8091af3ac64c2e69df9a0366d299",
        "ea97d18b244d01edff2098848022d125af350140"
      ],
      "author": {
        "name": "Bernardo Rufino",
        "email": "brufino@google.com",
        "time": "Tue Oct 06 08:04:55 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Oct 06 08:04:55 2020 +0000"
      },
      "message": "Merge \"Block untrusted touches in InputDispatcher\""
    },
    {
      "commit": "ea97d18b244d01edff2098848022d125af350140",
      "tree": "c48327588557a89afb670636aa690c6dd6fe8348",
      "parents": [
        "21b0037dac3486703303c72ba92ff4ac364c6ebb"
      ],
      "author": {
        "name": "Bernardo Rufino",
        "email": "brufino@google.com",
        "time": "Wed Aug 19 14:43:14 2020 +0100"
      },
      "committer": {
        "name": "Bernardo Rufino",
        "email": "brufino@google.com",
        "time": "Mon Oct 05 16:37:03 2020 +0000"
      },
      "message": "Block untrusted touches in InputDispatcher\n\nWith topic CL InputDispatcher now has the effect of each window for\ncross-UID touch occlusion rules: ALLOW, USE_OPACITY or BLOCK_UNTRUSTED.\nCheck topic CL for exact meaning of each. USE_OPACITY is only used by\nSAWs for now.\n\nIn this CL, InputDispatcher make use of that information for the stack\nof windows above the touch-consuming window to block a touch or not.\n\nThe summary of the rules are:\n* If there is any visible untrusted window from a different UID (than\nthe touch-consuming window UID) that has state BLOCK_UNTRUSTED, the\ntouch is blocked.\n* Else, if there is any visible untrusted window from a different UID\nthat has state USE_OPACITY, we compute the composed obscuring opacity\nby each stack of USE_OPACITY windows per UID of occluding window.\nWe take maximum of those and compare with secure setting\n\"maximum_obscuring_opacity_for_touch\", if it\u0027s greater than the\nsetting the touch is blocked. This means the remaining visibility on the\ntouch-consuming window is not high enough to let the touch happen.\n* Else we don\u0027t block the touch.\n\nMore details on go/cross-uid-touches. This doesn\u0027t interfere with\nexisting flags FLAG_WINDOW_IS_OBSCURED and\nFLAG_WINDOW_IS_PARTIALLY_OBSCURED.\n\nTo compute the opacity we also propagate the alpha of each window from\nSurfaceFlinger to InputDispatcher.\n\nTest: atest WindowUntrustedTouchTest\nTest: atest inputflinger_tests inputflinger_benchmarks libinput_tests\nTest: go/try-cross-uid-touches for manual testing\nBug: 158002302\nChange-Id: I673d7a5f16b19952311e8cb44a48af4349a4bd40\n"
    },
    {
      "commit": "7f8a1e6e445223deafd02d1e1d0b4cfab6b24648",
      "tree": "34bfe19aafe9de96e543be4e650cdf94b47f2e4f",
      "parents": [
        "97651d23e882aa8cb24d1a6b45808a549474bcb6"
      ],
      "author": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Mon Sep 28 16:09:35 2020 -0700"
      },
      "committer": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Thu Oct 01 11:18:48 2020 -0700"
      },
      "message": "SurfaceFlinger: rename FrameTimeline\u0027s setActualEndTime\n\nRename setActualEndTime to setAcquireFenceTime to better reflect what\nthe method keeps track of.\n\nChange-Id: I1865a48d0cc4fbb55c4ec0fe2ff172fd31735ccb\nTest: SF unit tests\n"
    },
    {
      "commit": "97651d23e882aa8cb24d1a6b45808a549474bcb6",
      "tree": "85a445a5dfbf4d6ddd0a69447cd7f1a60604cb13",
      "parents": [
        "e68afb4c1f03a7507853c357204a823d107232af",
        "22c7b5c7ee0fd3b5581e099e715826f0fbdcdc0f"
      ],
      "author": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Thu Oct 01 17:55:19 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Oct 01 17:55:19 2020 +0000"
      },
      "message": "Merge \"SurfaceFlinger: add transactions to FrameTimeline\""
    },
    {
      "commit": "22c7b5c7ee0fd3b5581e099e715826f0fbdcdc0f",
      "tree": "68ab6180a3dfe97760fc8dd91c8c608009056bb7",
      "parents": [
        "384914ae21897bc2bdfaef8636984437311d44da"
      ],
      "author": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Tue Sep 22 19:33:40 2020 -0700"
      },
      "committer": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Wed Sep 30 17:15:08 2020 -0700"
      },
      "message": "SurfaceFlinger: add transactions to FrameTimeline\n\nAllow transaction clients to specify the vsyncId that started the\ntransaction and plumb this data to FrameTimeline to be able\nto track jank associated with transactions\n\nBug: 166302754\nTest: manually see transactions in frame timeline\n\nChange-Id: Id05e0d0a73039204943d93b666cb67e3e7515a69\n"
    },
    {
      "commit": "6b7c5c9425496be2166fccf2ab14e061b5a20fa3",
      "tree": "9ee948766c2ebcc647b83547197d3d052bcdfc1d",
      "parents": [
        "dab9409d14d226cb784441c530666baa12968e22"
      ],
      "author": {
        "name": "Vishnu Nair",
        "email": "vishnun@google.com",
        "time": "Tue Sep 29 17:27:05 2020 -0700"
      },
      "committer": {
        "name": "Vishnu Nair",
        "email": "vishnun@google.com",
        "time": "Wed Sep 30 11:50:27 2020 -0700"
      },
      "message": "Pass in framenumbers if submitting buffers via BlastBufferQueue\n\nThe framenumber generated by the graphics producer is forwarded to mimic BufferQueue behaviour.\n\nTest: atest SurfaceViewBufferTests\nBug: 168504870\nChange-Id: Ic652a585d10d7e14c9dd94afaabd0e485e209ede\n"
    },
    {
      "commit": "075b5985cd110425c8ba00e54fb93092273859d3",
      "tree": "1bd672dd08eb9e14e9e9b494720f11aafda4f639",
      "parents": [
        "d7016343a92974751e498fe4ca49a07f79031741",
        "44a6d2bf54b7f5ea5ac8e9568967f05b2b409fd6"
      ],
      "author": {
        "name": "Chavi Weingarten",
        "email": "chaviw@google.com",
        "time": "Wed Sep 23 22:57:21 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Sep 23 22:57:21 2020 +0000"
      },
      "message": "Merge \"Ensure insets for input are transformed correctly.\""
    },
    {
      "commit": "44a6d2bf54b7f5ea5ac8e9568967f05b2b409fd6",
      "tree": "9c6944207e3c4e46c1fec1f002f63ce531b3eb03",
      "parents": [
        "d11cbc50ceb6a1fadc7c4e4a565b7c8cdcf3de05"
      ],
      "author": {
        "name": "chaviw",
        "email": "chaviw@google.com",
        "time": "Tue Sep 08 17:14:16 2020 -0700"
      },
      "committer": {
        "name": "chaviw",
        "email": "chaviw@google.com",
        "time": "Wed Sep 23 09:42:03 2020 -0700"
      },
      "message": "Ensure insets for input are transformed correctly.\n\nThis change does the following:\n\n1. Takes the inverse transform and transforms the final layer bounds.\nThis is to find the real bounds, including insets after insets have been\nadded.\n\n2. Use the top and left of the real bounds to get the translation value\nfor the transform. This is done by applying the original transform on\nthe new left and top.\n\n3. Set the translation of the input transform as the calculated values\nfrom above.\n\n4. Send the inverse transform to input so the input coordinates can be\ntransformed to window space.\n\nAlso use the transform to correctly update the touchable regions in the\nlayer space.\n\nTest: libgui_tests\nTest: Rotated layer gets correct input\nFixes: 158802274\nChange-Id: Ib0bfaa043509032ed702f442d806097bfd48d418\n"
    },
    {
      "commit": "c5676c6ee0687fbd0360d59be5dd74c4fc0083aa",
      "tree": "e754e024904d2ef2c2df3911f22631158df1ce11",
      "parents": [
        "d11cbc50ceb6a1fadc7c4e4a565b7c8cdcf3de05"
      ],
      "author": {
        "name": "chaviw",
        "email": "chaviw@google.com",
        "time": "Fri Sep 18 15:01:04 2020 -0700"
      },
      "committer": {
        "name": "chaviw",
        "email": "chaviw@google.com",
        "time": "Tue Sep 22 10:58:50 2020 -0700"
      },
      "message": "Added SKIP_SCREENSHOT flag for layers\n\nThe previous way to skip taking a layer in the screenshot was to set the\nwindowType to WINDOW_TYPE_DONT_SCREENSHOT. This is confusing since\nskipping screenshots is not really related to window type. Instead, use\nthe new flag SKIP_SCREENSHOT that can be set when the layer is created\nor in a transaction. This simplifies the behavior when deciding if the\nlayer should be screenshot.\n\nThis also fixes a bug where if the SKIP_SCREENSHOT flag was added after\ncreation, the layer would still be screenshot since the flag primaryDisplayOnly\nwas not changed.\n\nThis also makes it so the flag is inherited by the children. So if a\nparent sets the flag, the children will also not be in the screenshot.\n\nTest: ScreenCapture_test\nFixes: 168943350\nChange-Id: I26d2b3d025d8daac17b303a96d5b54fc104f0d50\n"
    },
    {
      "commit": "7fb1931711b578571effc84eafdc07672bd02e4b",
      "tree": "fa0af12393977a884f3f06d1975b9b66f1cbf6e1",
      "parents": [
        "1815557f11f38f554dc22fc71f23711b0ded57c9",
        "74e17562e4166e11c2e4f33126088c5ed35ea0e7"
      ],
      "author": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Thu Sep 17 21:16:25 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Sep 17 21:16:25 2020 +0000"
      },
      "message": "Merge \"SurfaceFlinger: Shared timeline plumbing\""
    },
    {
      "commit": "98fe22066491822e33e22fcf5e86db374d195ede",
      "tree": "ef87b6b43369af3c052ebcf7372eb77fc6289ac8",
      "parents": [
        "dc346e8c2f7b8ce9693986ba001dff9c46f9972d",
        "9c58bcd9d4fff428e3dbe3452eabc42efae6d34f"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Wed Sep 16 21:54:28 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Sep 16 21:54:28 2020 +0000"
      },
      "message": "Merge \"Remove VrFlinger usages from SF.\""
    },
    {
      "commit": "957d7538d76e7af75b8b59afd5e4d31d4f0275be",
      "tree": "c7579a560479fea7c47730bdefbbf7b0eed8a002",
      "parents": [
        "3982f0e91093782a90e228f26a9a015133bf1f96",
        "a724230a325aca0e85dfd874e75f9631ac731093"
      ],
      "author": {
        "name": "Rob Carr",
        "email": "racarr@google.com",
        "time": "Wed Sep 16 18:20:06 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Sep 16 18:20:06 2020 +0000"
      },
      "message": "Merge \"fillInputInfo: Guard against integer overflow.\""
    },
    {
      "commit": "74e17562e4166e11c2e4f33126088c5ed35ea0e7",
      "tree": "0f2c1593ecb62de6dd3cf3425c90f9a5aaa8dc89",
      "parents": [
        "934e82a98dd5a528bef61e035db412963f9ab5f3"
      ],
      "author": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Mon Aug 24 18:18:19 2020 -0700"
      },
      "committer": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Wed Sep 16 10:04:12 2020 -0700"
      },
      "message": "SurfaceFlinger: Shared timeline plumbing\n\nAdd plumbing to get shared timeline data from Surface Flinger to HWUI\nand back.\n\nBug: 162890382\nBug: 162888881\n\nTest: SF unit tests\nChange-Id: Ifb76e6bf28d43c051e6c8ff568437ec9a106b865\n"
    },
    {
      "commit": "9c58bcd9d4fff428e3dbe3452eabc42efae6d34f",
      "tree": "c70b142d4a87133eaf5a405ccab629c26bd7e52f",
      "parents": [
        "8436cbdf4e7b9cdc4f687ce51cd82f4602f68420"
      ],
      "author": {
        "name": "Alec Mouri",
        "email": "alecmouri@google.com",
        "time": "Wed Sep 09 18:57:07 2020 -0700"
      },
      "committer": {
        "name": "Alec Mouri",
        "email": "alecmouri@google.com",
        "time": "Fri Sep 11 16:32:25 2020 -0700"
      },
      "message": "Remove VrFlinger usages from SF.\n\nVrFlinger won\u0027t be used anymore now that we\u0027ve divested from VR.\n\nBug: 168152906\nTest: builds\nChange-Id: I5b74c77005474bd9f6dbce589697472738416d41\n"
    },
    {
      "commit": "043ba295074117d834388238a98b78890f099ccb",
      "tree": "2e4ef958997d3c078fb8895c9ea6004588bf786f",
      "parents": [
        "8436cbdf4e7b9cdc4f687ce51cd82f4602f68420"
      ],
      "author": {
        "name": "Marin Shalamanov",
        "email": "shalamanov@google.com",
        "time": "Thu Sep 10 13:35:20 2020 +0200"
      },
      "committer": {
        "name": "Marin Shalamanov",
        "email": "shalamanov@google.com",
        "time": "Fri Sep 11 23:39:04 2020 +0200"
      },
      "message": "[SF] Remove needsFiltering param from Output::setProjection\n\nThis parameter is not needed because its value is always computed\nas a function of the other parameters.\n\nBug: 161793589\nTest: atest libsurfaceflinger_unittest libcompositionengine_test\nChange-Id: I7ce1b62577b9e84491185800bf98269f5f47b577\n"
    },
    {
      "commit": "a724230a325aca0e85dfd874e75f9631ac731093",
      "tree": "7368a17c513aa901aa4a073c4ebb7109f2173c51",
      "parents": [
        "565d089d58c6b4f85d0a7af8427b90323ce6c31c"
      ],
      "author": {
        "name": "Robert Carr",
        "email": "racarr@google.com",
        "time": "Tue Sep 01 18:26:29 2020 -0700"
      },
      "committer": {
        "name": "Rob Carr",
        "email": "racarr@google.com",
        "time": "Wed Sep 09 19:36:51 2020 +0000"
      },
      "message": "fillInputInfo: Guard against integer overflow.\n\nWe have a bunch of bug-reports where we are seeing an abort inside\nRect::inset during/after rotation animations. I can\u0027t think of any\nreason Rect::inset would abort besides integer overflow. I\u0027m also not\nsure what exact state the layer was in, because at the time of the\nreport SurfaceFlinger has already crashed. I also can\u0027t reproduce. So\nit\u0027s a little difficult to figure out how we actually ended up\noverflowing here. I guess some math must have gone very wrong during\nthe rotation animation calculation, though apparently on a non-visible layer\nor only for one frame or something, because no-one reports any visible\nissues. For lack of anything better to do now, I\u0027m going to sanitize\nthe function against integer overflow on the theory that SurfaceFlinger\nshould at least be resistant against invalid input. I also wonder if\nsomething has gone wrong in the SF math, because we may be applying\na non rect preserving transform to the rect...but when I work through\nexamples I can\u0027t see exactly how it would lead to overflow.\n\nBug: 166217947\nTest: Existing tests pass\nChange-Id: I7d989d5be77595f88b2c52fa69c3ed29d17d3931\n"
    },
    {
      "commit": "edbe6d264ccd2a277b87577b931aa22ad7d9a90f",
      "tree": "1a2d3ea082c856784c9c10c063facddcd10bf227",
      "parents": [
        "535517d9dab705487534a3345994f983f8b448c9"
      ],
      "author": {
        "name": "Vishnu Nair",
        "email": "vishnun@google.com",
        "time": "Thu Aug 27 11:41:20 2020 -0700"
      },
      "committer": {
        "name": "Vishnu Nair",
        "email": "vishnun@google.com",
        "time": "Thu Aug 27 18:50:02 2020 +0000"
      },
      "message": "Handle defer transactions on a detached layer\n\nIf a defer transaction is applied on a detached layer, the barrier layer\ncannot dequeue its buffer since it incorrectly waits for the detached\nlayer to commit its dependent pending states. When a layer is detached\nwe remove all remove sync points. This fix ensures that an already\ndetached layer does not add any pending states or sync points.\n\nTest: atest SurfaceFlinger_test:DetachChildren#DeferredTransactionOnDetachedChildren\nFixes: 150924737\n\nChange-Id: Iefe4248b1c2f4273d07a0324697a82d0fe9c5e52\n"
    },
    {
      "commit": "6ad317c0dfcf07723ee36ed33c3eb16585469f63",
      "tree": "728a95dad18752fd36d7510118ee9eca31637387",
      "parents": [
        "141959209922a15acd27ee66e1408525f541a9dc"
      ],
      "author": {
        "name": "Marin Shalamanov",
        "email": "shalamanov@google.com",
        "time": "Wed Jul 29 23:34:07 2020 +0200"
      },
      "committer": {
        "name": "Marin Shalamanov",
        "email": "shalamanov@google.com",
        "time": "Tue Aug 11 16:44:07 2020 +0200"
      },
      "message": "[SF, CE] Rename viewport, frame and destinationClip\n\nThis change introduces a new class ProjectionSpace and uses\nit in OutputCompositionState to describe the layer stack space,\nthe physical display space and the oriented display space.\nWe rename viewport to layerStackSpaceRect, frame to\norientedDisplaySpaceRect and destinationClip displaySpaceRect.\nThis aims to provide better readibility of the code and\nit\u0027s also consistent with SurfaceControl.setDisplayProjction\nwhere layerStackRect and displayRect are used for viewport\nand frame.\n\nBug: 161793589\nBug: 160404780\nTest: m \u0026\u0026 flash device\nTest: atest libsurfaceflinger_unittest libcompositionengine_test\nTest: adb shell dumpsys SurfaceFlinger\nChange-Id: Iee20b908157cbef4de4d9addf429f98356ec942d\n"
    },
    {
      "commit": "de7a38f44ba8397a0ce38d00ffe12518f837e7ce",
      "tree": "c8a979ee828287b5aa6dcad1e9d238f3f19cb109",
      "parents": [
        "772bb8f14c633f53dab83299516d704927f83a6d",
        "c6ad8afa768607852a1ad2c937b4687e947d6fca"
      ],
      "author": {
        "name": "Chavi Weingarten",
        "email": "chaviw@google.com",
        "time": "Mon Aug 10 18:33:24 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Aug 10 18:33:24 2020 +0000"
      },
      "message": "Merge \"Remove rotation and use flag useIdentityTransform for screenshots.\""
    },
    {
      "commit": "250bcbb5378ccbd5f61a6dc8cf96c3d0679ba683",
      "tree": "ddb50b40e3a152db19b088d9315c4194b8df1892",
      "parents": [
        "63dd5e25c9ab1935199d08215f167114f1ff6f84"
      ],
      "author": {
        "name": "chaviw",
        "email": "chaviw@google.com",
        "time": "Wed Aug 05 11:17:54 2020 -0700"
      },
      "committer": {
        "name": "chaviw",
        "email": "chaviw@google.com",
        "time": "Fri Aug 07 14:37:09 2020 -0700"
      },
      "message": "Store Layer ownerUid based on metadata or callingUid.\n\nIn most cases we want the Layer ownerUid to be the same as the\ncallingUid since the caller requesting to create the layer should be the\nowner. However, in cases when the requst to create the layer comes from\na system process, we should attempt to use the UID passed into the\nmetadata. This is because the system process could request to create a\nlayer on behalf of another process.\n\nTest: adb shell dumpsys SurfaceFlinger shows correct uid\nBug: 155825630\nChange-Id: I633f293e087cdf413f7cb5e296bd923d83da841c\n"
    },
    {
      "commit": "c6ad8afa768607852a1ad2c937b4687e947d6fca",
      "tree": "ae0b6724af9b5c12818594c836fe3be1e606ccb8",
      "parents": [
        "63dd5e25c9ab1935199d08215f167114f1ff6f84"
      ],
      "author": {
        "name": "chaviw",
        "email": "chaviw@google.com",
        "time": "Mon Aug 03 11:33:30 2020 -0700"
      },
      "committer": {
        "name": "chaviw",
        "email": "chaviw@google.com",
        "time": "Fri Aug 07 10:56:58 2020 -0700"
      },
      "message": "Remove rotation and use flag useIdentityTransform for screenshots.\n\nThere\u0027s a lot of confusing logic where 90 and 270 rotation values need\nto be flipped to ensure the screenshot is taken the correct orientation.\nThere\u0027s also confusion what useIdentityTransform means, especially if a\nnon 0 rotation value is sent.\n\nThe cases screenshot cares about is the following:\n1. Take screenshot in current display orientation\n2. Take screenshot with 0 rotation so the caller can handle rotating the\nscreenshot themselves.\n\nWith these two cases in mind, remove the rotation value passed in for\nscreenshots. If useIdentityTransform is true, it will rotate the\nscreenshot so it\u0027s in the 0 orientation. If useIdentityTransform is\nfalse, it will use the current display rotation.\n\nThis simplifies the logic in DisplayRenderArea since it only needs to\ncompute the rotation when useIdentityTransform is set. It also\nsimplifies the caller logic since they no longer have to find the\ncurrent display rotation to ensure the screenshot is taken in the\ncurrent rotation. The callers can just request the screenshot with\nuseIdentityTransform set to false.\n\nTest: adb shell screencap\nTest: Power + volume screenshot\nTest: Screen rotation\nTest: SurfaceFlinger_test\nTest: libsurfaceflinger_unittest\nFixes: 135942984\nChange-Id: I1da025c7340a11a719d4630da2469b281bddc6e9\n"
    },
    {
      "commit": "1ff3d1e3cd851aff1e20fcb8958bbf3784d8f922",
      "tree": "931707079d6f4305e6fce7453c13d8d853386e06",
      "parents": [
        "dc07032296a6cd8525b5c7c1648ed7aed6f7769c"
      ],
      "author": {
        "name": "chaviw",
        "email": "chaviw@google.com",
        "time": "Wed Jul 01 15:53:47 2020 -0700"
      },
      "committer": {
        "name": "chaviw",
        "email": "chaviw@google.com",
        "time": "Tue Jul 21 11:26:55 2020 -0700"
      },
      "message": "Use Transform in InputDispatcher\n\nModified InputDispatcher to use the Transform object instead of offset\nand scale values.\n\nBug: 158476194\nTest: /data/nativetest64/inputflinger_tests/inputflinger_tests\nTest: /data/nativetest64/libinput_tests/libinput_tests\nChange-Id: I31242fa6af92b02158ccb0d292c208a4a21c9e43\n"
    },
    {
      "commit": "44753b15e754a33be9203b1dddbbdcae78afd493",
      "tree": "69d0209c5c7e8cdb6bff089567fd8708fa00e06a",
      "parents": [
        "6aa5a3b5c2cbfcf3c7101409b9e866ccde9adf4e"
      ],
      "author": {
        "name": "Michael Wright",
        "email": "michaelwr@google.com",
        "time": "Wed Jul 08 13:48:11 2020 +0100"
      },
      "committer": {
        "name": "Michael Wright",
        "email": "michaelwr@google.com",
        "time": "Fri Jul 17 15:34:54 2020 +0100"
      },
      "message": "Move things in InputWindowInfo to enum classes\n\nAlso introduce a new Flag class to make it possible to deal with flags\nwhile treating the individual flags as part of an enum class in a type\nsafe manner.\n\nBug: 160010896\nTest: atest inputflinger_tests, atest libinput_tests\nChange-Id: I915a1c1e3b31f1c0fd99b83ba5fad7e537cd6f84\n"
    },
    {
      "commit": "c01e1379d5d654234861c0881b4d5fb558524f58",
      "tree": "274a20a714ecaecd37220ea00d642c8b90178942",
      "parents": [
        "044b4dc70dc1db15da4ee0d4352dd2a940952f14"
      ],
      "author": {
        "name": "chaviw",
        "email": "chaviw@google.com",
        "time": "Wed Jul 01 12:37:31 2020 -0700"
      },
      "committer": {
        "name": "chaviw",
        "email": "chaviw@google.com",
        "time": "Tue Jul 14 15:03:07 2020 -0700"
      },
      "message": "Added helper functions in Transform and PointerCoords\n\n1. Getter for each element in the Transform matrix.\n2. Setter for Transform using a nine element array.\n3. New multiply in Transform to multiply all elements by a single\nvalue\n4. transform function in PointerCoords to apply the transform to x and y\ncoordinate\n\nTest: Builds\nBug: 158476194\nChange-Id: Iafe07813c6ce8127875b06e6e6e11554d1862f6f\n"
    },
    {
      "commit": "2738c9eb48add9a2b620593ce2ecee87bd41470c",
      "tree": "a9039961d2b6ce1afecd477e4fc3665e052dfd35",
      "parents": [
        "71f559316823c06c3a852c1cbe6f5a62dab7d75b",
        "4c34a09fd35296587401fd61c03e36400c138885"
      ],
      "author": {
        "name": "Chavi Weingarten",
        "email": "chaviw@google.com",
        "time": "Tue Jul 14 01:20:24 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Jul 14 01:20:24 2020 +0000"
      },
      "message": "Merge \"Use real InputWindowInfo for traces and dumps\""
    },
    {
      "commit": "5e1e8f27b7fd8b26727bba1fd7b7d6c35c4e4ac5",
      "tree": "1b32e5d871574a87ef04346e9a2cf62e0f0ab185",
      "parents": [
        "c6a2f3a47d46c990105d58d6e3707b189605cbc1"
      ],
      "author": {
        "name": "chaviw",
        "email": "chaviw@google.com",
        "time": "Fri Jul 10 12:46:21 2020 -0700"
      },
      "committer": {
        "name": "chaviw",
        "email": "chaviw@google.com",
        "time": "Fri Jul 10 12:51:56 2020 -0700"
      },
      "message": "Only attach descendants if parent was detached\n\nIf a layer is reparented, we also attach the children. We traverse down\nthe heirarchy and attach all descendants. However, we really only want\nto attach descendants if they were initially detached because the layer\nthat\u0027s getting reparented detached them.\n\nFor example, Child called detachChildren and its Grandchild was\ndetached. Parent calls reparent. We want to attach Child if it was\ndetached and then proceed down its children. If Child wasn\u0027t detached,\nwe don\u0027t want to attach Grandchild since the layer that detached it\nhasn\u0027t been reparented.\n\nAs cleanup, also moved DetachChildren test to their own file\n\nTest: DetachChildren.ReparentParentLayerOfDetachedChildren\nChange-Id: I53b6d9cb165b810e9c55da8a9ba86c7b53a13c0e\n"
    },
    {
      "commit": "4c34a09fd35296587401fd61c03e36400c138885",
      "tree": "e38dd9d21889d73b132e836242901382ca4bf0c6",
      "parents": [
        "1aefc1fdf7d5625e4c314eabd13186e2e4845db1"
      ],
      "author": {
        "name": "chaviw",
        "email": "chaviw@google.com",
        "time": "Wed Jul 08 11:30:06 2020 -0700"
      },
      "committer": {
        "name": "chaviw",
        "email": "chaviw@google.com",
        "time": "Wed Jul 08 11:32:19 2020 -0700"
      },
      "message": "Use real InputWindowInfo for traces and dumps\n\nRight now we use the InputWindowInfo stored in the drawingState.\nHowever, that doesn\u0027t include all the data sent to InputDispatcher since\nwe fill a lot of the data in when calling fillInputInfo. Instead, call\nfillInputInfo when ready to add proto data so the InputWindowInfo shows\nwhat\u0027s actually being used.\n\nTest: winscope shows correct information\nChange-Id: I99fb3e3babc7b33af1f83eb22da2b027129f9f88\n"
    },
    {
      "commit": "546c4362694960fdc383307e8b38a5488cb1cff7",
      "tree": "99581afe879780e0d796c225ebc97370979b417c",
      "parents": [
        "ff6ad19045a680d6d533e9929038a361905378b5",
        "77c69aab4a068cecb3968c8c428331d15ab0c0a4"
      ],
      "author": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Sat Jun 27 03:19:57 2020 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Sat Jun 27 03:19:57 2020 +0000"
      },
      "message": "Merge \"SurfaceFlinger: only focused layers can use appRequestRange\" into rvc-dev am: 18c692ccd1 am: 3c7ccbaee2 am: 754a024df1 am: 77c69aab4a\n\nOriginal change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/native/+/12011138\n\nChange-Id: If5629b45b8f4468fe00b1f408cad0f8178b17df3\n"
    },
    {
      "commit": "aae5ed5b7ad78f4a6fba62556d875ae95e7f9987",
      "tree": "1d3bbb3903ed342291631ed1c0377182ab235284",
      "parents": [
        "f4facf26144de0efcdb3806e6fc852b5be9c9501"
      ],
      "author": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Fri Jun 26 09:32:43 2020 -0700"
      },
      "committer": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Fri Jun 26 12:56:02 2020 -0700"
      },
      "message": "SurfaceFlinger: only focused layers can use appRequestRange\n\nWhen DisplayManager sets the DisplayConfigsSpecs with a policy\nthat the appRequestRange is broader than the primaryRange,\nit means that an app can choose a refresh rate from the\nappRequestRange and not from the primaryRange only if that app\nexplicitly specified a frame rate using setFrameRate API. However,\nto avoid cases where we switch the refresh rate back and forth from\nthe two ranges, we are allowing only applications that their window\nis focused from WindowManager\u0027s perspective to select refresh rate out\nthe primaryRange. This matches the behavior of an application that sets\nthe preferredDisplayModeId.\n\nBug: 144307188\nBug: 159940172\nTest: adb shell /data/nativetest64/libsurfaceflinger_unittest/libsurfaceflinger_unittest\nTest: YouTube in PIP mode while device is restricted by primaryRange\n\nChange-Id: I26a9690210bb5771bd8aae2bff301031617f7c8f\n"
    },
    {
      "commit": "340bc1ed69dbbec905b43acf18d0a8c463fdac0d",
      "tree": "ea8edae073f1653d6b4031f209c6c3700872b473",
      "parents": [
        "e0e34245639063a1135ded36f65769e0aa220bf3",
        "db5b2c6058c16072814ba14d6c60fc0b83abbf38"
      ],
      "author": {
        "name": "Valerie Hau",
        "email": "vhau@google.com",
        "time": "Thu Jun 18 00:02:42 2020 +0000"
      },
      "committer": {
        "name": "Automerger Merge Worker",
        "email": "android-build-automerger-merge-worker@system.gserviceaccount.com",
        "time": "Thu Jun 18 00:02:42 2020 +0000"
      },
      "message": "Merge \"Do not set eTraversalNeeded w/out wake up\" into rvc-dev am: 4f6205d3cc am: 5a33a8a399 am: 3cc5626673 am: db5b2c6058\n\nOriginal change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/native/+/11887945\n\nChange-Id: I46ee23019dc91f6a64666d532e2ef3a1fc4f3d71\n"
    }
  ],
  "next": "e0e34245639063a1135ded36f65769e0aa220bf3"
}
