)]}'
{
  "log": [
    {
      "commit": "3ea1d605f2edca071ed7c3bbc6de2c7fbbe55e5e",
      "tree": "9eb758d3d92b37c572a1d08e86e32193d10dcc8c",
      "parents": [
        "49bf66baac673067e9b5a475cf8e29c0e08384fd"
      ],
      "author": {
        "name": "Marin Shalamanov",
        "email": "shalamanov@google.com",
        "time": "Wed Dec 16 19:59:39 2020 +0100"
      },
      "committer": {
        "name": "Marin Shalamanov",
        "email": "shalamanov@google.com",
        "time": "Fri Jan 15 13:00:43 2021 +0100"
      },
      "message": "SF: Remove display config functions from HWC2\n\nHWC2 is unnecessary stateful stopgap between HWComposer and\nComposerHal. In this CL the following functions are removed from HWC2\n  * getActiveConfig\n  * getActiveConfigIndex\n  * getDisplayVsyncPeriod\n\nand ComposerHal is called directly from HWComposer. This way display\nconfigs are stored only in HWComposer.\n\nAdditionally HWC2::Display::Config is renamed to DisplayMode and\nit\u0027s extracted in its own file.\n\nFrom the perspective of SurfaceFlinger this CL is not modifying\nbehaviour.\n\nBug: 159590486\nBug: 175678215\nTest: atest libsurfaceflinger_unittest\nChange-Id: I8cb450209adf038d891cff00d1c2690c8e6d94f7\n"
    },
    {
      "commit": "534d4b358e4777fddc3ea1a86d400f6e53205b61",
      "tree": "c7d3214be4281c39d99fe2d619b73debbdd6ce20",
      "parents": [
        "2a829f3ceae3f9a78e138a959f63e970ff8cde4e",
        "eadf2e71ec770dceb781f393a2ce813bc0912aac"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Thu Jan 14 13:03:15 2021 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jan 14 13:03:15 2021 +0000"
      },
      "message": "Merge \"SF: Mutable RefreshRateConfigs\""
    },
    {
      "commit": "4899ff8248634831be0a8cab97324549510592e1",
      "tree": "e44f19183401729d7a066484d82bb8cdee10e661",
      "parents": [
        "61a682e8d66b3428e5591ddbd1b2e5e309880e6e"
      ],
      "author": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Wed Jan 06 13:53:29 2021 -0800"
      },
      "committer": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Fri Jan 08 17:51:45 2021 +0000"
      },
      "message": "SurfaceFlinger: add a sysprop to control frame rate override\n\nAdding \u0027ro.surface_flinger.enable_frame_rate_override\u0027 to control\nwhether frame rate override feature should be enabled or not.\n\nBug: 170502573\nBug: 176940141\nTest: atest FrameRateOverrideHostTest\nChange-Id: Id7b7a405c6493606af4149d77a4c3d90afc9a5b7\n"
    },
    {
      "commit": "eadf2e71ec770dceb781f393a2ce813bc0912aac",
      "tree": "76def6724f2762cd973a44abc76e16e07a2b9716",
      "parents": [
        "35f2d67812362e057cd32ba9e06e594a77095483"
      ],
      "author": {
        "name": "Marin Shalamanov",
        "email": "shalamanov@google.com",
        "time": "Thu Dec 10 15:35:28 2020 +0100"
      },
      "committer": {
        "name": "Marin Shalamanov",
        "email": "shalamanov@google.com",
        "time": "Wed Jan 06 19:22:40 2021 +0100"
      },
      "message": "SF: Mutable RefreshRateConfigs\n\nModify the list of supported refresh rates in RefreshRateConfigs\non hotplug. In order to support this the RefreshRateConfigs class\nis refactored to not return references to its internal members,\nbut instead return copies. This won\u0027t be expensive because\nthe RefreshRate objects which are returned are small.\n\nBug: 159590486\nTest: 1. boot w/o display\n      2. connect a display which supports multiple refresh rates\n      3. request a mode switch from an app\n      4. verify that the switch works\nTest: atest libsurfaceflinger_unittest\nTest: toggle refresh rate overlay\n      adb shell service call SurfaceFlinger 1034 i32 1/0\nChange-Id: I1588bf004a0a0319a94931adbfb822836703849a\n"
    },
    {
      "commit": "b973403c4eab319a5f16893626c2532265271f92",
      "tree": "0e8dc91086a5ece7ddc42e538d24bcf23d093ea2",
      "parents": [
        "3db5cb6e3f0132d8f3bd6ce1c59b6f1df06472ac",
        "e90dd52de547df1fcef4b928b356a49c60d3b64d"
      ],
      "author": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Tue Dec 29 22:57:45 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Dec 29 22:57:45 2020 +0000"
      },
      "message": "Merge changes I7a995415,Idfce2573\n\n* changes:\n  SurfaceFlinger: return DisplayStatInfo from getDisplayStatInfo\n  SurfaceFlinger: optimize frame rate override\n"
    },
    {
      "commit": "3db5cb6e3f0132d8f3bd6ce1c59b6f1df06472ac",
      "tree": "bff4450e9e41931d0787dae37f3568b694b4eaf3",
      "parents": [
        "87385889ce6b738ded572eec8c99ce61dc4ccc2a",
        "56b42a4539ec2b0e8f8c1d8c018beb61301c3195"
      ],
      "author": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Tue Dec 29 21:45:47 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Dec 29 21:45:47 2020 +0000"
      },
      "message": "Merge changes Ib9023881,I84a5a99f\n\n* changes:\n  SurfaceFlinger: fix reference time for transactions\n  SurfaceFlinger: override frame rate for applications that use setFrameRate\n"
    },
    {
      "commit": "64c2fc0ebec9fd0913b7262fc0927366c980740a",
      "tree": "02917d29156de7f4860f770ffb810dfac4f676f8",
      "parents": [
        "56b42a4539ec2b0e8f8c1d8c018beb61301c3195"
      ],
      "author": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Tue Dec 29 12:07:50 2020 -0800"
      },
      "committer": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Tue Dec 29 20:10:31 2020 +0000"
      },
      "message": "SurfaceFlinger: optimize frame rate override\n\nOn devices that frame rate override cannot be supported\nas the device doesn\u0027t support refresh rates that are divisors of\neach other, there is no point in trying to find a a frame rate override.\n\nBug: 170502573\nTest: atest FrameRateOverrideHostTest\nChange-Id: Idfce2573ee58fa695e81a00c85206990baad978e\n"
    },
    {
      "commit": "87385889ce6b738ded572eec8c99ce61dc4ccc2a",
      "tree": "45c56c647137067b9e903257368f5359b4920195",
      "parents": [
        "b039a5a37898b34253e412d7a9ee1058c72dd10f",
        "6e840175c1d29c4bfa3af7b33a6db255aa872d5d"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Dec 29 17:50:35 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Dec 29 17:50:35 2020 +0000"
      },
      "message": "Merge \"SF: Update the cached display modes in HWComposer on hotplug\""
    },
    {
      "commit": "6e840175c1d29c4bfa3af7b33a6db255aa872d5d",
      "tree": "bbb7db0208e797f6613699caf18a995b96ce4f34",
      "parents": [
        "408a34c8c9c02e8a63d86bc922242b7625382609"
      ],
      "author": {
        "name": "Marin Shalamanov",
        "email": "shalamanov@google.com",
        "time": "Mon Dec 14 22:13:28 2020 +0100"
      },
      "committer": {
        "name": "Marin Shalamanov",
        "email": "shalamanov@google.com",
        "time": "Tue Dec 29 12:08:46 2020 +0100"
      },
      "message": "SF: Update the cached display modes in HWComposer on hotplug\n\nCurrently configs in HWComposer are cached only once\nper display and never updated on subseqent onHotplug\nevents. This may cause setActiveConfigsWithConstraints\nto fail for a valid config.\n\nThis CL also removes the test HandleTransactionLockedTest::\nprocessesHotplugConnectPrimaryDisplayWithExternalAlreadyConnected,\nsince it\u0027s testing an unsupported use case and its\nincompatible with the tests we\u0027ve added.\n\nBug: 159590486\nTest: atest HWComposerConfigsTest\nChange-Id: Ifb22c33ba5078bde35ae20a2f94a8630316da024\n"
    },
    {
      "commit": "1ce7cbce2f433dca9b22da691351d238ec9f5a2e",
      "tree": "e230b2dc5f3057f94f34ed6f302b79802bf6354a",
      "parents": [
        "ea3f4fc7e994c883c4a2022aa293625f7b60c682",
        "bed7fd3566605ea21f55d99f0d0708a0f584d885"
      ],
      "author": {
        "name": "Marin Shalamanov",
        "email": "shalamanov@google.com",
        "time": "Tue Dec 29 10:57:10 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Dec 29 10:57:10 2020 +0000"
      },
      "message": "Merge \"SF: Compile with -Wextra\""
    },
    {
      "commit": "62a0be2a63b2026ec9e7e9e23289c6f380ff85b5",
      "tree": "5ff082caee7a3fd66737e266c303c90898255bb7",
      "parents": [
        "dbb6dcfdde95318dc9b6090d70233d106c77ec92"
      ],
      "author": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Tue Dec 08 16:54:10 2020 -0800"
      },
      "committer": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Tue Dec 29 01:07:20 2020 +0000"
      },
      "message": "SurfaceFlinger: override frame rate for applications that use setFrameRate\n\n(Uploaded again with a fix for b/176299745)\n\nWhen possible, override the frame rate of an app if it explicitly\nset a preferred frame rate.\n\nTest: atest FrameRateOverrideHostTest\nTest: SF unit tests\nBug: 170502573\nChange-Id: I84a5a99f439ec7a8a808a0b26c630d4344acca4f\n"
    },
    {
      "commit": "dbb6dcfdde95318dc9b6090d70233d106c77ec92",
      "tree": "38284e2b0a6e38da7607b42928ea1fe82b754da2",
      "parents": [
        "13197182489ab3ed4ff4a57c685d40b35f0feaab"
      ],
      "author": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Mon Dec 28 22:22:12 2020 +0000"
      },
      "committer": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Mon Dec 28 14:31:21 2020 -0800"
      },
      "message": "Revert \"SurfaceFlinger: override frame rate for applications that use setFrameRate\"\n\nThis reverts commit 2c6716b58f05c9de26868677001b901c5948afde.\n\nReason for revert: Causes a deadlock in SurfaceFlinger: b/176299745\n\nChange-Id: I20402c3d97eb0fad4270e1fd2147ca66c4f6bc84\n"
    },
    {
      "commit": "ea25ddfe44e3aaa1182761504c13ec0594d1d9ed",
      "tree": "4b35fb066d3250f1581eb0ecffc4f5bdf214ced6",
      "parents": [
        "9149533a4ad89ca71bb4f9554740ee0ecc1531ad"
      ],
      "author": {
        "name": "Marin Shalamanov",
        "email": "shalamanov@google.com",
        "time": "Thu Dec 10 15:44:51 2020 +0100"
      },
      "committer": {
        "name": "Marin Shalamanov",
        "email": "shalamanov@google.com",
        "time": "Thu Dec 24 15:57:01 2020 +0100"
      },
      "message": "SF: Remove RefreshRateConfigs::getAllRefreshRates()\n\nRemove this function since it\u0027s (almost) unused.\n\nTest: adb shell service call SurfaceFlinger 1035 i32 5\nBug: 159590486\nChange-Id: Iaec883eb2b29fd8064885dcb4e590c0e7b6021cf\n"
    },
    {
      "commit": "bed7fd3566605ea21f55d99f0d0708a0f584d885",
      "tree": "9310491dea4c793de8fe4c1a17d419c20c24232d",
      "parents": [
        "9149533a4ad89ca71bb4f9554740ee0ecc1531ad"
      ],
      "author": {
        "name": "Marin Shalamanov",
        "email": "shalamanov@google.com",
        "time": "Mon Dec 21 20:02:20 2020 +0100"
      },
      "committer": {
        "name": "Marin Shalamanov",
        "email": "shalamanov@google.com",
        "time": "Thu Dec 24 15:42:43 2020 +0100"
      },
      "message": "SF: Compile with -Wextra\n\nCompile with -Wextra for additional conversion checks. In each file\nwhich produces compile errors -Wextra is ignored.\n\nBug: 175126758\nTest: m surfaceflinger \u0026\u0026 m libsurfaceflinger_unittest\nChange-Id: Iec6bcc699715a99c8c65d891ab3c0481e884c728\n"
    },
    {
      "commit": "2c6716b58f05c9de26868677001b901c5948afde",
      "tree": "b7216078b398b7904d1cf0592a81d0bae22386cc",
      "parents": [
        "f20c192eaad998c018728af7dad27c955405d3c6"
      ],
      "author": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Tue Dec 08 16:54:10 2020 -0800"
      },
      "committer": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Tue Dec 22 21:41:13 2020 +0000"
      },
      "message": "SurfaceFlinger: override frame rate for applications that use setFrameRate\n\nWhen possible, override the frame rate of an app if it explicitly\nset a preferred frame rate.\n\nTest: atest FrameRateOverrideHostTest\nTest: SF unit tests\nBug: 170502573\nChange-Id: Ifcb7dd1ad0423b05efe8a0e86f2d988c49e74054\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": "fc50f74ce3ae8477063522c8e6f1066a85375410",
      "tree": "1f4369c49d57416711813d0bc33475d334904eaf",
      "parents": [
        "6df72d72ea150492616d543ebcc9190e81e36882",
        "1bc43ee3274f198ca1452608dec5b43a32a072cf"
      ],
      "author": {
        "name": "Marin Shalamanov",
        "email": "shalamanov@google.com",
        "time": "Tue Dec 01 15:01:37 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Dec 01 15:01:37 2020 +0000"
      },
      "message": "Merge changes from topic \"deprecate-content-detection-v1\"\n\n* changes:\n  Move LayerHistoryV2 to LayerHistory\n  SF: Deprecate content detection v1\n"
    },
    {
      "commit": "15238e833d270bc7f5667134b183b8be820f3d53",
      "tree": "4f0764838bd141c112471502fbea02d56893dc70",
      "parents": [
        "c367e818c1666d7ea05a2d989312c39320c63987",
        "53fc11d92e931e66e57be0f8d753b9eb33a22031"
      ],
      "author": {
        "name": "Marin Shalamanov",
        "email": "shalamanov@google.com",
        "time": "Mon Nov 30 15:32:36 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Nov 30 15:32:36 2020 +0000"
      },
      "message": "Merge \"Make shouldBeSeamless an enum\""
    },
    {
      "commit": "27fa3ded5c2c15ac3af984cd5c650c93b31c4562",
      "tree": "684d7c138f767f3c68c46ac950b036ecba8cb8b6",
      "parents": [
        "53fc11d92e931e66e57be0f8d753b9eb33a22031"
      ],
      "author": {
        "name": "Marin Shalamanov",
        "email": "shalamanov@google.com",
        "time": "Fri Nov 20 16:22:48 2020 +0100"
      },
      "committer": {
        "name": "Marin Shalamanov",
        "email": "shalamanov@google.com",
        "time": "Tue Nov 24 14:58:35 2020 +0100"
      },
      "message": "SF: Deprecate content detection v1\n\nRemove the code for the old content detection algorithm,\nwhich is no longer used.\n\nBug: 174120566\nTest: presubmit\nChange-Id: I0828bcb886f32ec2ebc896848b72340862613100\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": "62f216c62edbe4c997e959cfb28c8609664978df",
      "tree": "a5f22b610a460033ef656e58df3f3575ffa69d85",
      "parents": [
        "939739b86288069814cf73b37133119983779278"
      ],
      "author": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Tue Oct 13 19:07:23 2020 -0700"
      },
      "committer": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Wed Nov 18 13:30:27 2020 -0800"
      },
      "message": "SurfaceFlinger: Add DISPLAY_EVENT_FRAME_RATE_OVERRIDE\n\nAdd a new event to DisplayEventReceiver that conveys a list\nof apps whose frame rates have been overriden.\nThis event is processed by the DisplayManager to advertise the\nnew frame rate to the overridden app.\n\nChange-Id: I89fce8b5b4d9db65ec5db7dd2393c384c0fcfd82\nBug: 169271059\nBug: 169271062\nBug: 170503758\nTest: manual test using SF backdoor\n"
    },
    {
      "commit": "ba421a88f89fb800732f6f50072b1b3ebd9961e9",
      "tree": "ceb4f30faf4b5129713a40c2f6e8c11a248a7b85",
      "parents": [
        "4608442db90c07dccc833dbdf1cea78f57c7b96d"
      ],
      "author": {
        "name": "Marin Shalamanov",
        "email": "shalamanov@google.com",
        "time": "Tue Nov 10 21:49:26 2020 +0100"
      },
      "committer": {
        "name": "Marin Shalamanov",
        "email": "shalamanov@google.com",
        "time": "Mon Nov 16 18:01:55 2020 +0100"
      },
      "message": "Dump RefreshRateConfigs\n\nAdd RefreshRateConfigs dump to SurfaceFligner dumpsys, dumping the\ncurrent display mode and the list of supported display modes.\nThis is very useful for debugging because SF works with two types of\nIDs  (HwcConfigIndexType and hal::HWConfigId).\n\nBug: 161776961\nTest: adb shell dumpsys SurfaceFlinger\nChange-Id: I628b842d46308a140b2985398672b4dce2e4b952\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": "b6674e7a8d9b78fd75065429f5f173f1fdacde6f",
      "tree": "3c0bc0d12533b1ed41cc1e8d5d47e9bfb3f76387",
      "parents": [
        "ec5c5174b7dbafe3a5096e228b616cf2855afc26"
      ],
      "author": {
        "name": "Marin Shalamanov",
        "email": "shalamanov@google.com",
        "time": "Fri Nov 06 13:05:57 2020 +0100"
      },
      "committer": {
        "name": "Marin Shalamanov",
        "email": "shalamanov@google.com",
        "time": "Fri Nov 06 13:08:08 2020 +0100"
      },
      "message": "Add logging when refresh rate policy is invalid\n\nAdd some logging so we can more easily debug situations\nwhere the refrash rate policy is invalid.\n\nBug: 172637939\nTest: presubmit\nChange-Id: I7309f8aa93e4d02d5fecf65ab3b671037180d92c\n"
    },
    {
      "commit": "0bb6a47f5264571690d57c609f0e945086dba9b1",
      "tree": "f9ab6720e867e1f133360a4515036e15e4f1694f",
      "parents": [
        "9febda8e05bbd924d14682454fdc7a846c38f954"
      ],
      "author": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Mon Oct 12 10:22:13 2020 -0700"
      },
      "committer": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Tue Nov 03 10:19:21 2020 -0800"
      },
      "message": "SurfaceFlinger: throttle applications based on uid\n\nAdd the ability for SurfaceFlinger to be able to throttle down to\na divider of the refresh rate (i.e. for 30/45 for 90Hz)\n\nChange-Id: I6bfd6f43ee1f30e771a136c558d8ae9a6d7fbe0f\nTest: Manually via 1039 SF backdoor\nBug: 170502573\nBug: 169270763\nBug: 169271059\n"
    },
    {
      "commit": "30b0b3cd9cbe5ce06814f2fce26169cb47342a17",
      "tree": "0806763971f85bd0070db4019bd34141b177d477",
      "parents": [
        "58f3654c219bac41a9180983451e41b5445260ad"
      ],
      "author": {
        "name": "Marin Shalamanov",
        "email": "shalamanov@google.com",
        "time": "Tue Oct 13 19:15:06 2020 +0200"
      },
      "committer": {
        "name": "Marin Shalamanov",
        "email": "shalamanov@google.com",
        "time": "Thu Oct 29 11:31:00 2020 +0100"
      },
      "message": "SF: Populate allowGroupSwitching from DM\n\nCurrently we use allowGroupSwitching only for testing. This CL\npopulates its value from DisplayManager so we can use user\nsetting to change its value.\n\nBug: 161776333\nTest: atest libsurfaceflinger_unittest\nChange-Id: I851eaee7f86083d97204cf3553e728350c942dfe\n"
    },
    {
      "commit": "20c029ce8217c2fd0e94ecebb985ed38324328bb",
      "tree": "4c2065950953a9dc32401f7488963b8909f63e42",
      "parents": [
        "f4beceb1e8497d18057818c526003bcbe4c3c06e"
      ],
      "author": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Mon Jul 06 12:58:05 2020 -0700"
      },
      "committer": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Wed Jul 08 01:07:20 2020 +0000"
      },
      "message": "SurfaceFlinger: only ExplicitDefault can use appRequestRange\n\nThis change is limiting layers that are ExplicitExactOrMultiple from\nusing a refresh rate outside of the primary range. When these layers\nare visible and there is an interaction with the device, we usually\nchange the refresh rate due to other layers that are animating. Letting\nlayers that are ExplicitExactOrMultiple to pick a refresh rate from the\nextended appRequestRange results in refresh rate changes which are not\ndesired.\n\nBug: 159940172\nTest: YouTube when the device the primary range is restricted\nChange-Id: I6aa60c359d690a92342963cb14bdeece4e6d5c5f\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": "b9afd79e014b1adc987f5bad7608a52077707bc8",
      "tree": "f0db181a5e9c39c34270a5a428e986fc64142533",
      "parents": [
        "72b3fa467da003ac78248b6868ed51d2401e0b47"
      ],
      "author": {
        "name": "Ana Krulec",
        "email": "akrulec@google.com",
        "time": "Thu Jun 11 13:16:15 2020 -0700"
      },
      "committer": {
        "name": "Ana Krulec",
        "email": "akrulec@google.com",
        "time": "Thu Jun 18 16:31:04 2020 -0700"
      },
      "message": "Move toggling of kernel idle timer to SF\n\nIdle timer is toggled from the SF code using the following logic:\n- If the device policy refresh rate min \u003d max, we turn off the timer.\n- If the device policy refresh rate min \u003e the device min,\n  we turn off the timer.\n- Do not toggle the timer if deviceMin \u003d\u003d policyMin.\n- Timer is on in all other cases.\n\nBug: 140204874\nBug: 158012424\nBug: 145561154\nTest: atest SurfaceFlinger_test\nTest: atest libsurfaceflinger_unittest\nTest: Select force 90hz through Developer Settings. Toggles timer off.\nTest: Low brightness zone. Toggles timer off.\nChange-Id: I9858765861a3b13e11c3930be8f77d85dae6c0c0\n"
    },
    {
      "commit": "dfd6216090f38c15d572c91286282c03eda43147",
      "tree": "bb280298e4aaf7712bc872edc085abee7a5548d1",
      "parents": [
        "0ccd79b10b37de17c78f9ad91ed06a29502d7c6d"
      ],
      "author": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Wed Jun 10 16:11:56 2020 -0700"
      },
      "committer": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Thu Jun 11 17:04:36 2020 -0700"
      },
      "message": "SurfaceFlinger: missing configChanged event on idle\n\nThis change fixes a condition where a configChanged event\nwill be dropped due to idle timer.\n\nChange-Id: I803f478c261be9fceb3495526576b495d7d0f385\nBug: 155367075\nTest: CtsGraphicsTestCases\n"
    },
    {
      "commit": "b1b9d41c73cfb388a81a2bc45b0c6708e2e627f7",
      "tree": "fb39bff05fb24b784939352229330b6eea078d86",
      "parents": [
        "607a0c6d5a2bb18fdf11374a40f5ffedca96d650"
      ],
      "author": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Mon Jun 01 19:53:52 2020 -0700"
      },
      "committer": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Tue Jun 09 16:59:33 2020 -0700"
      },
      "message": "SurfaceFlinger: define a known frame rates list\n\nKeep a list of known frame rates that would be used when we calculated\nheuristically the frame rate of a layer. This keeps the signal to the\nalgorithm that chooses the refresh rate steady and avoid strange\nframe rates like 57.2 due to inconsistent presentation timestamps.\n\nBug: 157540021\nTest: adb shell /data/nativetest64/libsurfaceflinger_unittest/libsurfaceflinger_unittest\nChange-Id: I97a24b74605256646e9b8444bd9f3818fe0a4a2a\n"
    },
    {
      "commit": "a6b676e33aefa3ce43f86ebffaa5cdb9bc35832e",
      "tree": "c7b185969000f5340244e88f9f377247b8e36d3e",
      "parents": [
        "dfb63ba78b72c214592ae1cc70fc059558e35927"
      ],
      "author": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Wed May 27 14:29:09 2020 -0700"
      },
      "committer": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Thu May 28 18:48:29 2020 +0000"
      },
      "message": "SurfaceFlinger: clear LayerHistory on first touch\n\n - Restructure the code in RefreshRateConfigs to be able to clear\n   LayerHistory frames on the first touch event. Without this change we\n   clear the history on every frame as long as the touch timer hasn\u0027t\n   expired.\n - Add log prints for debugging\n\nTest: Play 24fps video in YouTube PIP mode and rotate the device - no jank\nTest: Chrome playing video - no refresh rate switching\nTest: Hide/Show keyboard when inputting text\nTest: Running Hay Day and observing refresh rate\nBug: 157096772\nChange-Id: I7cabecd6ea27ec335e773aa22bb111fa8ec89195\n"
    },
    {
      "commit": "dfb63ba78b72c214592ae1cc70fc059558e35927",
      "tree": "ba700cd7c662af10a2d5c3de4f29296ab85532a2",
      "parents": [
        "f5bc779caa67b3af8a6b6a6c51e77a3db12e5483"
      ],
      "author": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Wed May 27 20:05:05 2020 +0000"
      },
      "committer": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Thu May 28 18:48:22 2020 +0000"
      },
      "message": "Revert \"SurfaceFlinger: more aggressive infrequent layer detection\"\n\nThis reverts commit 1adbb727595c6da51bb088e4ce3f8070d9b32808.\n\nReason for revert: Causing regression with b/157096772\n\nChange-Id: Ib2009f7a4ecbd268ea69304853a91bd22674ec1e\nTest: Play 24fps video in YouTube PIP mode and rotate the device - no jank\nTest: Chrome playing video - no refresh rate switching\nTest: Hide/Show keyboard when inputting text\nTest: Running Hay Day and observing refresh rate\nBug: 157096772\nBug: 155062712\nBug: 156654519\n"
    },
    {
      "commit": "11232a26ad736ccdee6f5e164836412e5ef2288e",
      "tree": "e7b5855573ea34d526687401a5b27070e3dddfab",
      "parents": [
        "c30ebd0188e8c43bdfc59cc87a2a9da8f0caa4ab"
      ],
      "author": {
        "name": "Alec Mouri",
        "email": "alecmouri@google.com",
        "time": "Thu May 14 18:06:25 2020 -0700"
      },
      "committer": {
        "name": "Alec Mouri",
        "email": "alecmouri@google.com",
        "time": "Thu May 21 11:36:01 2020 -0700"
      },
      "message": "Lock display refresh rate when primary range is a single rate.\n\nWhen DMS enforces a fixed refresh rate to hide user-visible flickering,\nwe must respect that refresh rate to avoid unnecessary switches during\nscenarios such as idle and touch boost.\n\nWe must still respect app votes when they explicitly provide a frame\nrate.\n\nBug: 156315203\nTest: Exoplayer\nTest: Modified version of SetFrameRateTest to simulate 60hz video\nTest: libsurfaceflinger_unittest\nChange-Id: I5fe974ddaff30e2f02e381cb63e0a6418834fdb5\n"
    },
    {
      "commit": "98b789db15c11b1d2ed43f4098784a316d9dfcc9",
      "tree": "a6f80bd3da2486183876fe604a2ecf1b9dd398a1",
      "parents": [
        "63da46c3ec1c4cd8b1cc38d1ae6c5d8ad03ad679",
        "debafed2c70484484fa694bd4da53826a6c8168a"
      ],
      "author": {
        "name": "Steven Thomas",
        "email": "steventhomas@google.com",
        "time": "Tue May 19 17:47:14 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue May 19 17:47:14 2020 +0000"
      },
      "message": "Merge \"With content detection off, prefer default frame rate\" into rvc-dev"
    },
    {
      "commit": "debafed2c70484484fa694bd4da53826a6c8168a",
      "tree": "1e3f1557ed33a72f836b63e09274e289dc9f0487",
      "parents": [
        "9b5bf0f42d57387a3451aa9eb9bfb1075fcb91a4"
      ],
      "author": {
        "name": "Steven Thomas",
        "email": "steventhomas@google.com",
        "time": "Mon May 18 17:30:35 2020 -0700"
      },
      "committer": {
        "name": "Steven Thomas",
        "email": "steventhomas@google.com",
        "time": "Mon May 18 18:56:19 2020 -0700"
      },
      "message": "With content detection off, prefer default frame rate\n\nWhen content detection is off, or when we have no layer information to\nmake a decision, prefer the default frame rate.\n\nBug: 154648391\n\nTest: - Modified a Pixel 4 to turn off content detection, idle, touch,\n        and power boost. Confirmed that, without this CL, we have bad\n        behavior where calls to setFrameRate() persist after the layer\n        goes away, and that this CL fixes that behavior.\n\n- Modified and enhanced the \"no layers\" unit test in\n  RefreshRateConfigsTest.cpp.\n\nChange-Id: I2fd0d64a6ad369580cbb2ebf91cbbed7c31e0281\n"
    },
    {
      "commit": "1adbb727595c6da51bb088e4ce3f8070d9b32808",
      "tree": "2a5f8537eb0c30baea946cface0caebca8bec9e1",
      "parents": [
        "b209e7b56b6597d425765d8421184f5ac77d5ae1"
      ],
      "author": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Fri May 15 11:51:48 2020 -0700"
      },
      "committer": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Mon May 18 17:49:01 2020 +0000"
      },
      "message": "SurfaceFlinger: more aggressive infrequent layer detection\n\nChange the algorithm that chooses the refresh rate to treat layers as\ninfrequent unless proven otherwise. This change helps with multiple\nswitches during scenarios of blinking cursor where the detection of\ninfrequent layer is too long. The down side on this change is that\nanimations will be considered infrequent as well for the first few frames.\nHowever the touch boost is a good mitigation of this.\n\nTest: Typing in Messages and observe refresh rate\nTest: Settings-\u003eAbout-\u003eup time and observe refresh rate\nBug: 155062712\nBug: 156654519\nChange-Id: I317c69bd063df5d70f2d5705163cf61c1c9b1fff\n"
    },
    {
      "commit": "bb37432c0f324febd6229798a60ca594eb8005ca",
      "tree": "9670f27892d96b339f1d3be2690fde77e0de9d40",
      "parents": [
        "32bc62dc0ee36890d93ca1bf9e304bdcb3ef623a"
      ],
      "author": {
        "name": "Steven Thomas",
        "email": "steventhomas@google.com",
        "time": "Tue Apr 28 22:47:16 2020 -0700"
      },
      "committer": {
        "name": "Steven Thomas",
        "email": "steventhomas@google.com",
        "time": "Mon May 04 15:23:15 2020 -0700"
      },
      "message": "Give touch boost higher priority than idle detection\n\nWhen the non-kernel idle timer is used, touch boost wasn\u0027t being applied\nwhen the device was idle. I moved the code around to ensure touch boost\nis applied when the device is idle.\n\nBug: 154571341\n\nTest: - Wrote a new unit test to confirm correct idle behavior.\n      - Locally modified a Pixel 4 to use the regular idle timer rather\n        than the kernel idle timer, and confirmed we now apply touch\n        boost correctly.\n\nChange-Id: Id998405a4d79f7a89fc0523b6503fe1a3dea8cce\n"
    },
    {
      "commit": "f734df4201b74a7131ddd9558d7e6c9ea67a9b11",
      "tree": "9dce9e9e332aef02391d3d024d73aa023179c129",
      "parents": [
        "aa8c7011986dd312d575acb09be00f217222cc70"
      ],
      "author": {
        "name": "Steven Thomas",
        "email": "steventhomas@google.com",
        "time": "Mon Apr 13 21:09:28 2020 -0700"
      },
      "committer": {
        "name": "Steven Thomas",
        "email": "steventhomas@google.com",
        "time": "Fri May 01 12:00:01 2020 -0700"
      },
      "message": "Split refresh rate range into two ranges\n\nTo prevent low-priority refresh rate considerations from overriding the\napp frame rate as specified via the new setFrameRate() api, split the\ndisplay refresh rate range into \"primary\" and \"app request\" ranges. The\nprimary range includes the low priority considerations, while the app\nrequest range removes two lower priority considerations.\n\nIn general, surface flinger will keep the display refresh rate within\nthe primary range, but layers with frame rate settings via the\nsetFrameRate() api may cause surface flinger to pick a refresh rate\noutside the primary range. Surface flinger will never choose a refresh\nrate outside the app request range specified by display manager.\n\nBug: 148978562\n\nTest: - Added a new unit test to DisplayModeDirectorTest to verify that\n        display manager strips lower priority considerations when\n        deciding the app request range.\n\n- Added a new unit test to RefreshRateConfigsTest to verify\n  RefreshRateConfigs handles the primary vs app request range\n  correctly.\n\n- Manual test: Confirmed that with the \"force 90Hz refresh rate\" option\n  turned on, we don\u0027t switch to 60Hz when playing a 60Hz video.\n\n- Manual test: Confirmed that with the \"force 90Hz refresh rate\" option\n  turned on, when an app calls setFrameRate(60), we stay at 60Hz.\n\n- Manual test: Modified a Pixel 4 XL to prefer 60Hz in low brightness,\n  entered low brightness, and confirmed we don\u0027t touch boost to 90Hz.\n\n- Manual test: Confirmed that Maps stays at 60Hz on Pixel 4.\n\n- Manual test: Turned on verbose logs in RefreshRateConfigs.cpp,\n  confirmed they look good.\n\n- Manual test: Inspected dumpsys output, confirmed the primary and\n  app request refresh rate ranges are printed correctly.\n\nChange-Id: Ib16cc9b6158efa575cdbfbb7a0ad014008a3e5af\n"
    },
    {
      "commit": "abc2760c6a3b0be88b0cdf0ff4100575992715af",
      "tree": "34f68a077a1a42d6505d23983e187483739149ce",
      "parents": [
        "81ab746c41b355f03eca90849d9d45adea8a3bca"
      ],
      "author": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Wed Apr 08 17:20:29 2020 -0700"
      },
      "committer": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Fri Apr 10 16:14:15 2020 -0700"
      },
      "message": "SurfaceFlinger: Consider resolution when switching refresh rate\n\nDo not change refresh rate across configs with multiple resolutions\n\nBug: 150237118\nTest: adb shell /data/nativetest64/libsurfaceflinger_unittest/libsurfaceflinger_unittest\nChange-Id: I9b0f355a72343cf120229b98e6ad082ea75d3080\n"
    },
    {
      "commit": "d407190b3691b8b404143281840b805ee21d7f8f",
      "tree": "6f5ea79535e90f0c42940db76f4ef57d2b368c8d",
      "parents": [
        "4e2936c2d1d9fa231da596c4288a612574a194e8"
      ],
      "author": {
        "name": "Steven Thomas",
        "email": "steventhomas@google.com",
        "time": "Tue Mar 24 16:02:53 2020 -0700"
      },
      "committer": {
        "name": "Steven Thomas",
        "email": "steventhomas@google.com",
        "time": "Mon Apr 06 12:55:16 2020 -0700"
      },
      "message": "Add frame rate flexibility token\n\nAdd support for temporarily relaxing frame rate restrictions in surface\nflinger. This is used by CTS tests to get a consistent device state\nwhile running frame rate tests.\n\nBug: 148033900\n\nTest: - On a Pixel 4, I turned the brightness down and covered the\nambient light sensor, causing the display manager to set a frame rate\nrestriction. I ran the frame rate CTS test without these CLs applied,\nand confirmed the test failed because surface flinger couldn\u0027t switch\nframe rates, as expected. Then I ran the tests with the CLs applied, and\nconfirmed the tests pass.\n\n- I confirmed that, without adopting shell permission identity, the CTS\ntest is denied the request to acquire a frame rate flexibility token. So\nnormal apps won\u0027t be able to access this.\n\nChange-Id: I6685edc4bc07c7888b79a9dd72a90f56b74e7604\n"
    },
    {
      "commit": "6a6d06f5bae488786ec7eedcee8a998381251b52",
      "tree": "305114e4d8030d5091fda9aeccfbb0e6ee589e3c",
      "parents": [
        "284c0a5477b91306bf528bad6dedd1c8e8cdd460",
        "5b8afb5ae3d96a7c82920fada3a5f12f3bcc6bdf"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Mar 10 02:03:26 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Mar 10 02:03:26 2020 +0000"
      },
      "message": "Merge changes Icda006de,I3590beeb into rvc-dev\n\n* changes:\n  SurfaceFlinger: treat the desiredRefreshRate of ExplicitDefault as max\n  SurfaceFlinger: no touch boost for layer that explicitly voted\n"
    },
    {
      "commit": "5b8afb5ae3d96a7c82920fada3a5f12f3bcc6bdf",
      "tree": "b763341724c9fdbd9f2923dd3756d72a427b26ef",
      "parents": [
        "6fb599bf5b3a1b33c49dbe97c5afab8901245928"
      ],
      "author": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Fri Mar 06 14:57:26 2020 -0800"
      },
      "committer": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Mon Mar 09 17:22:40 2020 -0700"
      },
      "message": "SurfaceFlinger: treat the desiredRefreshRate of ExplicitDefault as max\n\nWhen a an app calls to\nANativeWindow_setFrameRate(..., ANATIVEWINDOW_FRAME_RATE_COMPATIBILITY_DEFAULT)\nit usually uses the frame render time to calculate the desired refresh rate.\nChange the platform side algorithm to consider the desired refresh rate in\nthat case to the highest frame production rate.\n\nTest: adb shell /data/nativetest64/libsurfaceflinger_unittest/libsurfaceflinger_unittest\nBug: 147516364\nBug: 150977265\nChange-Id: Icda006de0aeb22da8244baee936947495f813e1b\n"
    },
    {
      "commit": "6fb599bf5b3a1b33c49dbe97c5afab8901245928",
      "tree": "5419f8b85b8fd2b1447f53ed8817a46dc1901ef3",
      "parents": [
        "104600438dbedd857bbb88291f84759d39b1dc5e"
      ],
      "author": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Thu Mar 05 13:48:22 2020 -0800"
      },
      "committer": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Mon Mar 09 17:22:14 2020 -0700"
      },
      "message": "SurfaceFlinger: no touch boost for layer that explicitly voted\n\nAvoid switching to peak refresh rate on touch when we have\nlayers that explicitly voted via setFrateRate() and they occupy \u003e 80%\nof the screen.\n\nTest: App that calls to setFrameRate + touch\nTest: adb shell /data/nativetest64/libsurfaceflinger_unittest/libsurfaceflinger_unittest\nBug: 147516364\nFixes: 150976355\nChange-Id: I3590beeba1c3ff4c9a1b1575a607ef949ca6dd10\n"
    },
    {
      "commit": "2e1dd89a34ed859d6105bc4f680f1b0738e2aa0a",
      "tree": "7165e3d95ad0ff4a01f3c5643a9da968a09be2f2",
      "parents": [
        "104600438dbedd857bbb88291f84759d39b1dc5e"
      ],
      "author": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Thu Mar 05 13:48:36 2020 -0800"
      },
      "committer": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Thu Mar 05 22:18:13 2020 +0000"
      },
      "message": "SurfaceFlinger: delete RefreshRate copy constructor\n\nAvoid copying RefreshRate objects\n\nChange-Id: Ic00f14bd03465d163e82ee7f4bf34346f1920ad6\nTest: adb shell /data/nativetest64/libsurfaceflinger_unittest/libsurfaceflinger_unittest\nBug: 150887328\n"
    },
    {
      "commit": "de7156e40ab3ed00971df71187ed028587731d2e",
      "tree": "703970bedb08eafff76783f5c08eff1a14cf5b89",
      "parents": [
        "d9eff75a8ffac17a95903a9c4db6994b546cd011"
      ],
      "author": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Fri Feb 28 17:29:39 2020 -0800"
      },
      "committer": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Fri Feb 28 18:28:24 2020 -0800"
      },
      "message": "SurfaceFlinger: getRefreshRateForContentV2 always returns valid config\n\nMake sure getRefreshRateForContentV2 always returns an allowed config.\n\nBug: 150477881\nTest: YouTube video playback\nChange-Id: I2271e4e1b3855875d8bc55d300d33636ca9de3fc\n"
    },
    {
      "commit": "3d367c8b3410968cbe783bb9c8e8542a73a4213e",
      "tree": "1a4ac35cc05eb145399692d1fdca3ee806d1ebdf",
      "parents": [
        "57cabaca38fd527acdec5fb92c7c5189214ba2b1"
      ],
      "author": {
        "name": "Ana Krulec",
        "email": "akrulec@google.com",
        "time": "Tue Feb 25 15:02:01 2020 -0800"
      },
      "committer": {
        "name": "Alistair Delva",
        "email": "adelva@google.com",
        "time": "Thu Feb 27 06:00:25 2020 +0000"
      },
      "message": "SF: Use content detection flag to protect the content detection policy\n\nSomewhere in the process of migration we forgot to include the\nuse_content_detection_for_refresh_rate sysprop flag. This CL guards\nthe content detection policy with this guard.\n\nTest: Turn the flag off. No content detection. Turn the flag on.\n      Observe content detection.\nTest: On Cuttlefish.\nTest: Added unit test in RefreshRateConfigs.\nTest: atest libsurfaceflinger tests\nBug: 150003390\nBug: 150212108\nChange-Id: Icff9ab9ffd3604049dfe36efd5d3939e1d77b091\n"
    },
    {
      "commit": "4ccdcb4162194f844e1eab73d5cf5dd1650d1295",
      "tree": "a993c0e920d717575895aed47814bcc3f9de2944",
      "parents": [
        "5f0ae0e0ef429e884a08134a405b952085852452"
      ],
      "author": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Tue Feb 11 17:34:34 2020 -0800"
      },
      "committer": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Wed Feb 19 00:47:10 2020 +0000"
      },
      "message": "SurfaceFlinger: allow switching when layers vote to refresh rate\n\nThis CL is a refinement of the refresh rate switching algorithm\nto allow refresh rate switching even if some of the layers voted\nexplicitly for a refresh rate.\n\nTest: Run ExoPlayer demo app and scroll the list while playing a video\nBug: 147516364\nChange-Id: Id01ff8477804bba9e859545e20b05eeb1ec0d319\n"
    },
    {
      "commit": "34702107fc865f01338f9538d12543b60e07d16f",
      "tree": "e1b8fcce932acb671960b86974964f5edab6cced",
      "parents": [
        "8c6f9c8fc2aa1d1569552e10360f78495295c0a9"
      ],
      "author": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Mon Feb 10 14:12:05 2020 -0800"
      },
      "committer": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Tue Feb 11 02:37:10 2020 +0000"
      },
      "message": "SurfaceFlinger: handle properly layers with Max refresh rate\n\nFix a bug where layers that voted LayerVoteType::Max are ignored if there are\nother layers with a numerical vote.\n\nTest: adb shell /data/nativetest64/libsurfaceflinger_unittest/libsurfaceflinger_unittest\nBug: 147516364\nChange-Id: I177ebbd9fa31544997216d951fe697f06670e0a4\n"
    },
    {
      "commit": "5d47791e231cdddb2ae933e8b1923c43533c7663",
      "tree": "457c6ad757251cc432e4b3ed862d72e746c2d489",
      "parents": [
        "74a2eb62f434fccd0299e9ca7eab614fa5b7d291"
      ],
      "author": {
        "name": "Ana Krulec",
        "email": "akrulec@google.com",
        "time": "Fri Feb 07 12:02:38 2020 -0800"
      },
      "committer": {
        "name": "Ana Krulec",
        "email": "akrulec@google.com",
        "time": "Fri Feb 07 12:57:06 2020 -0800"
      },
      "message": "SF Crash Bug fix\n\nThere is a state when Scheduler returns a config which is not allowed\nby the policy. This can happen when policy has changed, and scheduler\ndecided that the next config should be the current config. We fix it\nby returning the current config, if allowed, otherwise the default.\n\nChange-Id: Id49674dc5cf6cc36eb6a48dfec7d007063c1f382\nBug: 149077559\nTest: Turn off all policies. Toggle smoooth display. Doesn\u0027t fail.\nTest: Turn off all polcies. Open Waze. Doesn\u0027t fail.\nTest: Turn off all policies. Open TouchLatency app. Switch between 60/90.\nTest: Turn off all policies. Play youtube video.\nTest: Turn off all policies. Open Chrome. Play video.\n"
    },
    {
      "commit": "3f6a2062120308f02f6feae5591b3c33a21f329f",
      "tree": "73be5067a32afeee35ebdd1862de65862a1a93d7",
      "parents": [
        "9ce0322c142533a48093f859ccbdfa1ec848e496"
      ],
      "author": {
        "name": "Ana Krulec",
        "email": "akrulec@google.com",
        "time": "Thu Jan 23 15:48:01 2020 -0800"
      },
      "committer": {
        "name": "Ana Krulec",
        "email": "akrulec@google.com",
        "time": "Thu Feb 06 11:25:52 2020 -0800"
      },
      "message": "SF: Remove refresh_rate_switching flag. With a fix.\n\nag/9294789 introduce a flag to only allow refresh rate switching on the\ndevices that have that flag set to true, because it broke devices that\ndidn\u0027t support multiple refresh rates, and Android TV.\n\nLocalDisplayAdapter sets the refresh rate to default when booting the\nphone, so no need for that in SF anymore.\n\nTest: Turn off Smooth display (see b/148821456), device doesn\u0027t crash.\nTest: Install on devices that doesn\u0027t have multiple refresh rates.\nTest: Run SF unittests.\nTest: Turn on all the flags, and run through set of examples:\n      Video playback stays at 60.\n      Camera stays at 60.\n      Maps play at 60.\n      Low brightness stays at 90.\n      Swappy successfully switches between 60 \u0026 90.\nTest: Turn off all the flags, and rerun the examples from previous.\n      If applications requested the change, the change is honored,\n      otherwise we stay at default (set by DM).\nTest: Ask Android TV team to test the patch.\nBug: 148427603\nBug: 148821456\n\nChange-Id: I5bb964572d93e5cb78d7b75054b900917be563b0\n"
    },
    {
      "commit": "10e0205ce2691eb99940de8fb8a7a0c182fb997a",
      "tree": "d9ee64dd5c5211c33c8ca1038de51c6d79e95d0c",
      "parents": [
        "c3a51cb56713c2ccdbb636332af1dfcfa4216f80"
      ],
      "author": {
        "name": "Ana Krulec",
        "email": "akrulec@google.com",
        "time": "Tue Feb 04 17:16:10 2020 +0000"
      },
      "committer": {
        "name": "Ana Krulec",
        "email": "akrulec@google.com",
        "time": "Tue Feb 04 18:25:26 2020 +0000"
      },
      "message": "Revert \"Revert \"Revert \"SF: Remove refresh_rate_switching flag.\"\"\"\n\nThis reverts commit aa52b007cb5c96d6124a293ca80c430c7051f7f3.\n\nReason for revert: The original revert cause a failure: b/148821456. So the revert was created. Which caused a build failure b/148835312. Reverting the original change and fixing the test (that caused build failure) with it.\n\nBug: 148835312\nBug: 148821456\nBug: 148835894\nTest: build, install on coral.\nTest: adb shell /data/nativetest64/libsurfaceflinger_unittest/libsurfaceflinger_unittest\nChange-Id: I48964c7c27ef53e8fb03d959ef85ee2ec64e1ed1\n"
    },
    {
      "commit": "8fabd068ae9e8b235b433f1e939b64d004f8007e",
      "tree": "1c7d012390776f24bbacd2fefc5f88bf9c2f41c0",
      "parents": [
        "011eee1c8cd62a29ca015e4ffe62d712f6206a8e",
        "aa52b007cb5c96d6124a293ca80c430c7051f7f3"
      ],
      "author": {
        "name": "Christoffer Quist Adamsen",
        "email": "christofferqa@google.com",
        "time": "Tue Feb 04 13:14:51 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Feb 04 13:14:51 2020 +0000"
      },
      "message": "Merge \"Revert \"Revert \"SF: Remove refresh_rate_switching flag.\"\"\""
    },
    {
      "commit": "aa52b007cb5c96d6124a293ca80c430c7051f7f3",
      "tree": "9f3b28c4f7d87914a5de1174e9c1ef280d75798b",
      "parents": [
        "2a215191be4854fcb4b2836929a955157eae52d1"
      ],
      "author": {
        "name": "Christoffer Quist Adamsen",
        "email": "christofferqa@google.com",
        "time": "Tue Feb 04 12:57:19 2020 +0000"
      },
      "committer": {
        "name": "Christoffer Quist Adamsen",
        "email": "christofferqa@google.com",
        "time": "Tue Feb 04 13:00:23 2020 +0000"
      },
      "message": "Revert \"Revert \"SF: Remove refresh_rate_switching flag.\"\"\n\nThis reverts commit 2a215191be4854fcb4b2836929a955157eae52d1.\n\nReason for revert: Droidcop-triggered revert due to breakage https://android-build.googleplex.com/builds/quarterdeck?branch\u003dgit_master\u0026target\u003dhawk-userdebug\u0026lkgb\u003d6180052\u0026lkbb\u003d6180424\u0026fkbb\u003d6180072, bug b/148835312.\n\nBug: 148835312\nChange-Id: Ie8e5d4c683ab7f10051e355a62941bdb37a196b7\n"
    },
    {
      "commit": "cbedfb959b1ef45fd60c38f0e8909410c54ec66a",
      "tree": "712c53d75b763dbb6086ef4091e4c4240f51f7f2",
      "parents": [
        "cbb331be5dfb4b7bdfcd67ece7c26bc8e7db09f1",
        "2a215191be4854fcb4b2836929a955157eae52d1"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Feb 04 03:50:28 2020 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Feb 04 03:50:28 2020 +0000"
      },
      "message": "Merge \"Revert \"SF: Remove refresh_rate_switching flag.\"\""
    },
    {
      "commit": "2a215191be4854fcb4b2836929a955157eae52d1",
      "tree": "3eb2d0dc8ac0de3dda0455797b45e4a1c17ae685",
      "parents": [
        "8c6f3f6bd0c5edce7aa9bfd61b64dd2e7dc43deb"
      ],
      "author": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Tue Feb 04 02:20:50 2020 +0000"
      },
      "committer": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Tue Feb 04 02:20:50 2020 +0000"
      },
      "message": "Revert \"SF: Remove refresh_rate_switching flag.\"\n\nThis reverts commit 8c6f3f6bd0c5edce7aa9bfd61b64dd2e7dc43deb.\n\nReason for revert: Crashes on ToT (b/148822765, b/148821456)\n\nChange-Id: If1bc13b33321727244c3b0f15a0e7b30665d1c43\n"
    },
    {
      "commit": "71c437dcd8b05244a171d477e4dde5ac20be9c4d",
      "tree": "bc37f19a6985c3b48f1842d643336edcb3137a90",
      "parents": [
        "ce172aac0e6b2ed09a2a0911b12986074b3c06f8"
      ],
      "author": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Fri Jan 31 15:56:57 2020 -0800"
      },
      "committer": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Tue Feb 04 00:01:18 2020 +0000"
      },
      "message": "SurfaceFlinger: add support for FrameRateCompatibilityType\n\nBug: 147516364\nTest: adb shell /data/nativetest64/SurfaceFlinger_test/SurfaceFlinger_test --gtest_filter\u003d\u0027SetFrameRateTest.*\u0027\nTest: adb shell /data/nativetest64/libsurfaceflinger_unittest/libsurfaceflinger_unittest --gtest_filter\u003d*RefreshRateConfigs*\nTest: adb shell /data/nativetest64/libsurfaceflinger_unittest/libsurfaceflinger_unittest --gtest_filter\u003d*LayerHistory*\nChange-Id: I49272804e25f04e1d7a148a0008551cbc5428011\n"
    },
    {
      "commit": "8c6f3f6bd0c5edce7aa9bfd61b64dd2e7dc43deb",
      "tree": "9f3b28c4f7d87914a5de1174e9c1ef280d75798b",
      "parents": [
        "5ca59db02b5338df237faad94e8d6f24f3ab11c7"
      ],
      "author": {
        "name": "Ana Krulec",
        "email": "akrulec@google.com",
        "time": "Thu Jan 23 15:48:01 2020 -0800"
      },
      "committer": {
        "name": "Ana Krulec",
        "email": "akrulec@google.com",
        "time": "Fri Jan 31 19:52:02 2020 -0800"
      },
      "message": "SF: Remove refresh_rate_switching flag.\n\nag/9294789 introduce a flag to only allow refresh rate switching on the\ndevices that have that flag set to true, because it broke devices that\ndidn\u0027t support multiple refresh rates, and Android TV.\n\nLocalDisplayAdapter sets the refresh rate to default when booting the\nphone, so no need for that in SF anymore.\n\nTest: Install on devices that doesn\u0027t have multiple refresh rates.\nTest: Run SF unittests.\nTest: Turn on all the flags, and run through set of examples:\n      Video playback stays at 60.\n      Camera stays at 60.\n      Maps play at 60.\n      Low brightness stays at 90.\n      Swappy successfully switches between 60 \u0026 90.\nTest: Turn off all the flags, and rerun the examples from previous.\n      If applications requested the change, the change is honored,\n      otherwise we stay at default (set by DM).\nTest: Ask Android TV team to test the patch.\nBug: 148427603\nChange-Id: I44085e91a74902d102bcf9f1491164cdb50650cc\n"
    },
    {
      "commit": "f6b77071f8a19026373c06870b88c742da260414",
      "tree": "43ba5118dff2ff70420c1fd9dbac15f30e31f13c",
      "parents": [
        "466691bed8140fba59e581600e71cdcb6c64e8bd"
      ],
      "author": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Thu Jan 30 14:22:54 2020 -0800"
      },
      "committer": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Fri Jan 31 00:03:54 2020 +0000"
      },
      "message": "SurfaceFlinger: fix calculation issues with refresh rate selection\n\n - Initialize BufferQueueCore::mFrameRate\n - Load BufferQueueLayer::mLatchedFrameRate value before using it\n - Fix a bug with LayerInfoV2 where a frequent layer needs to post at least\n   FREQUENT_LAYER_WINDOW_SIZE buffers.\n - Fix casting issues in RefreshRateConfigs\n\nTest: adb shell /data/nativetest64/libsurfaceflinger_unittest/libsurfaceflinger_unittest\nBug: 147516364\nChange-Id: Ie6e93ef2f4dd3a030bfd0dbbf8018d96680d8bb3\n"
    },
    {
      "commit": "dec1a41ff1feee14fcb12ad4d866efdb0a12449e",
      "tree": "eadf1d33032c6266fb1f144f7738a09d989472bb",
      "parents": [
        "346d6d912abe1fd39e71ff914658df06586a2732"
      ],
      "author": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Fri Jan 24 10:23:50 2020 -0800"
      },
      "committer": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Fri Jan 24 10:50:58 2020 -0800"
      },
      "message": "SurfaceFlinger: cleanup conversion issues in Scheduler\n\nBug: 129481165\nTest: adb shell /data/nativetest64/libsurfaceflinger_unittest/libsurfaceflinger_unittest\nChange-Id: Iff995777bd4b8e4f734b995373c8b332192d8d84\n"
    },
    {
      "commit": "8a82ba66a22238fe59c02a6309ba8bd3dae4f074",
      "tree": "0ab0962ade34ecd0e09fab57c68d257192db623e",
      "parents": [
        "c34a8a2e960393f434d8307edeb495d0e301c70d"
      ],
      "author": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Fri Jan 17 12:43:17 2020 -0800"
      },
      "committer": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Thu Jan 23 21:27:14 2020 -0800"
      },
      "message": "SurfaceFlinger: enhance refresh rate selection\n\nEnhance the refresh rate selection algorithm to allow having multiple\nrefresh rate. The new process attaches scores to each one of the available\nrefresh rate and chooses the refresh rate with the highest score.\nThis behavior is currently controlled by the sysprop flag\n\u0027debug.sf.use_content_detection_v2\u0027 and currently turned off.\n\nThis algorithm stills needs some tunings which will be done in\nlayer CLs.\n\nTest: adb shell /data/nativetest64/SurfaceFlinger_test/SurfaceFlinger_test\nTest: adb shell /data/nativetest64/libsurfaceflinger_unittest/libsurfaceflinger_unittest\nTest: go/90hzscenarios manual tests\nBug: 147516364\nFixes: 146068419\nChange-Id: I06e07459e469482799ff80fa54fa8dd311325e0e\n"
    },
    {
      "commit": "b0dbdaaf3b1a42ab072af9d111d56900b1197af4",
      "tree": "3563c7be7644cc8fbfc51dbcbbe68db0e71d8533",
      "parents": [
        "902ad99f9862d14bda50d3d63b7c018000b3f527"
      ],
      "author": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Mon Jan 06 16:19:42 2020 -0800"
      },
      "committer": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Wed Jan 15 21:27:09 2020 +0000"
      },
      "message": "SurfaceFlinger: Enable -WConversion in Android.bp\n\nEnable global -WConversion in Android.bp and turn it off in\nindividual files. This is the first step to enable -WConversion\nin SurfaceFlinger.\n\nTest: boot\nBug: 129481165\nChange-Id: Ia752df39ef380bde71705a32582d618242c466f7\n"
    },
    {
      "commit": "72f0d6e0674d948ef74e8bd4b15ce1a428fd3aae",
      "tree": "4657e9e2ae991a1ad44db26e70ef7ba063f1ab1d",
      "parents": [
        "234fca17effce057b6beaf2d8052583c2c1b04e6"
      ],
      "author": {
        "name": "Ana Krulec",
        "email": "akrulec@google.com",
        "time": "Mon Jan 06 15:24:47 2020 -0800"
      },
      "committer": {
        "name": "Ana Krulec",
        "email": "akrulec@google.com",
        "time": "Wed Jan 08 10:14:22 2020 -0800"
      },
      "message": "SF: Round the min/max checking to the closest int\n\nPixel display config is reporting FPS for a given display at 60.000004.\nMake sure to take a small deviation into the account.\n\nTest: manual. open swappy and change between refresh rates.\nTest: manual. open setting and turn smooth display on/off.\nTest: unit.\nChange-Id: I0086c98406a2bd1a9b836fa171b8be14f3152acd\nBug: 147252378\n"
    },
    {
      "commit": "ed3a8cc9a64cb945aed0329f39368b013a9abc00",
      "tree": "cee09d098da783c6dbac21b94d992cd66f1bf3b0",
      "parents": [
        "eb1cdc5b093761733a532779ecde9474831a5789"
      ],
      "author": {
        "name": "Ana Krulec",
        "email": "akrulec@google.com",
        "time": "Thu Nov 14 00:55:07 2019 +0100"
      },
      "committer": {
        "name": "Steven Thomas",
        "email": "steventhomas@google.com",
        "time": "Tue Dec 17 15:02:30 2019 -0800"
      },
      "message": "Switch from allowed display configs to refresh rate range\n\nThis completes the recent work to switch from a list of allowed display\nconfigs to a default config + min/max frame rate.\n\nBug: 142507213\n\nTest: Ran on a device with refresh rate switching, confirmed expected\n      60/90 switching behavior when touching the screen.\nTest: Launched Google Maps on a device with 60/90 switching, confirmed\n      the device stays at 60fps.\nTest: Checked dumpsys output, confirmed new display config specs\n      formatting looks good.\nTest: Ran on a device with refresh rate switching disallowed via the\n      ro.surface_flinger.refresh_rate_switching sysprop, and confirmed\n      we don\u0027t do refresh rate switching.\nTest: Ran on a device that doesn\u0027t support refresh rate switching, and\n      confirmed normal behavior.\nTest: Tested surface flinger\u0027s display config back door, confirmed it\n      still works.\nTest: Inspected log output, made sure there\u0027s nothing weird.\nTest: Ran unit tests for DisplayModeDirector, LocalDisplayAdapter, and\n      RefreshRateConfigs.\nTest: atest FrameworksServicesTests\nTest: atest FrameworksMockingServicesTests\nTest: adb shell /data/nativetest64/libgui_test/libgui_test\nTest: adb shell /data/nativetest64/libsurfaceflinger_unittest/libsurfaceflinger_unittest\n\nChange-Id: I53743a437bce1e3df79539caece0c423051c80a6\n"
    },
    {
      "commit": "2139f73d98f3f0d31f0f90bcca7f4537c66e5e70",
      "tree": "0f40676d9a6fda3fe18ce690a227611f53a0b5fd",
      "parents": [
        "fbbd4fe4a5b0e6167db3406b4078b6b2ea8d5f3c"
      ],
      "author": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Wed Nov 13 18:56:40 2019 -0800"
      },
      "committer": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Thu Dec 05 17:15:53 2019 -0800"
      },
      "message": "SurfaceFlinger: use config groups\n\nComposer 2.4 adds a new attribute for configs groups. This change\ngroups configs according to their group and store them in\nRefreshRateConfigs.\n\nTest: rev up composer to 2.4 and test refresh rate switching\nTest: adb shell /data/nativetest64/libsurfaceflinger_unittest/libsurfaceflinger_unittest\nTest: adb shell /data/nativetest64/SurfaceFlinger_test/SurfaceFlinger_test\nBug: 141329414\nFixes: 139751853\nChange-Id: Ic0bcd3da4bf6b73efa11a60c2594948ce030362f\n"
    },
    {
      "commit": "b4b1e0a92ba25fff9db5239315e58fa86483a871",
      "tree": "80f54af75d83a654f545fe2e34c4e1f053c18abd",
      "parents": [
        "d24ed4d0f7e7f84fb75b7f8b4b94f2f76cbdf933"
      ],
      "author": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Wed Nov 20 18:25:35 2019 -0800"
      },
      "committer": {
        "name": "Ady Abraham",
        "email": "adyabr@google.com",
        "time": "Mon Nov 25 18:11:39 2019 +0000"
      },
      "message": "SurfaceFlinger: move RefreshRateConfigs to a source file\n\nSplit RefreshRateConfigs to .h/.cpp\n\nTest: adb shell /data/nativetest64/libsurfaceflinger_unittest/libsurfaceflinger_unittest\nBug: 141329414\nChange-Id: Ifec7cc090d168115f2864bcb00d2be33aab9a664\n"
    }
  ]
}
