)]}'
{
  "log": [
    {
      "commit": "f3749f80ee6694c7c27d0daca024616d92744223",
      "tree": "66c7706466908d66f83c0d9881d781156b4ec27c",
      "parents": [
        "c1f18f6fd56e2e7c090f838232df14779f300d6e"
      ],
      "author": {
        "name": "Dominik Laskowski",
        "email": "domlaskowski@google.com",
        "time": "Wed Jun 13 15:49:25 2018 -0700"
      },
      "committer": {
        "name": "Dominik Laskowski",
        "email": "domlaskowski@google.com",
        "time": "Tue Jun 19 15:17:31 2018 -0700"
      },
      "message": "SF: Clean up HWComposer logging\n\nBug: 74619554\nTest: Build\nChange-Id: I5526ac8613b4cae537c1c7ce0f15f94188c46c4d\n"
    },
    {
      "commit": "c1f18f6fd56e2e7c090f838232df14779f300d6e",
      "tree": "227ac41b77fac1350cec2796437adc8e7e0e451a",
      "parents": [
        "0954b1d8388c134b3d8c3d7f5bfb05a60e97eb5a"
      ],
      "author": {
        "name": "Dominik Laskowski",
        "email": "domlaskowski@google.com",
        "time": "Wed Jun 13 15:17:55 2018 -0700"
      },
      "committer": {
        "name": "Dominik Laskowski",
        "email": "domlaskowski@google.com",
        "time": "Tue Jun 19 15:17:27 2018 -0700"
      },
      "message": "SF: Remember display type in DisplayData\n\nThis obviates querying the HWC to determine if a display is physical or\nvirtual.\n\nBug: 74619554\nTest: libsurfaceflinger_unittest\nChange-Id: I9a18d480358f4195c66c183c70ffbe8480bd25b8\n"
    },
    {
      "commit": "0954b1d8388c134b3d8c3d7f5bfb05a60e97eb5a",
      "tree": "3b7994baad1561a9bd614a1568847d1c81e3f73b",
      "parents": [
        "45de9bdad463f47dd3619dbd64565bad6a351766"
      ],
      "author": {
        "name": "Dominik Laskowski",
        "email": "domlaskowski@google.com",
        "time": "Wed Jun 13 14:58:49 2018 -0700"
      },
      "committer": {
        "name": "Dominik Laskowski",
        "email": "domlaskowski@google.com",
        "time": "Tue Jun 19 15:12:42 2018 -0700"
      },
      "message": "SF: Move getDisplayIdentificationData to HWC2::Device\n\nThe hotplug callback will query it before HWC2::Display creation.\n\nBug: 74619554\nTest: Build\nChange-Id: Ib2f8c04cf40274cb4e6f30cd737286ede5010e23\n"
    },
    {
      "commit": "a2edf615f9a185918654867e28c5d999f9d74900",
      "tree": "052e52d99cfc19fdb1c04419613e54c733cb6863",
      "parents": [
        "f9750f2808a11502569d798e19818ba0fc82a750"
      ],
      "author": {
        "name": "Dominik Laskowski",
        "email": "domlaskowski@google.com",
        "time": "Fri Jun 01 13:15:16 2018 -0700"
      },
      "committer": {
        "name": "Dominik Laskowski",
        "email": "domlaskowski@google.com",
        "time": "Tue Jun 19 14:53:29 2018 -0700"
      },
      "message": "SF: Clean up remaining display identifiers\n\nBug: 74619554\nTest: Build\nChange-Id: Icd8457b6496f02c6010c724cfa6ae678f6e01adf\n"
    },
    {
      "commit": "f9750f2808a11502569d798e19818ba0fc82a750",
      "tree": "fe9276b54da159b55c4c531155b7815131ce5fc5",
      "parents": [
        "e62926e6fe492693440c78cd7bdb13632d5ec515"
      ],
      "author": {
        "name": "Dominik Laskowski",
        "email": "domlaskowski@google.com",
        "time": "Wed Jun 06 12:24:53 2018 -0700"
      },
      "committer": {
        "name": "Dominik Laskowski",
        "email": "domlaskowski@google.com",
        "time": "Tue Jun 19 14:51:06 2018 -0700"
      },
      "message": "SF: Remove DisplayData constructor/destructor\n\nBug: 74619554\nTest: Build\nChange-Id: I3e60b8d7978917035d00241a2d9f15d9d756ab96\n"
    },
    {
      "commit": "7e045460d345a3bf2b62f9dcb2eb794ab6ba2a28",
      "tree": "aad9da3526fe99041b7f7e83f78d21fb7471f08a",
      "parents": [
        "9fae102f8edf2e54e0baaa2fc5d657b25fdfc67e"
      ],
      "author": {
        "name": "Dominik Laskowski",
        "email": "domlaskowski@google.com",
        "time": "Wed May 30 13:02:02 2018 -0700"
      },
      "committer": {
        "name": "Dominik Laskowski",
        "email": "domlaskowski@google.com",
        "time": "Thu May 31 14:34:24 2018 -0700"
      },
      "message": "SF: Use consistent names for display IDs\n\nThere are two types of display IDs: hwc2_display_t for HWC IDs, and\nint32_t for SF IDs. The latter are confusingly referred to as \"hwcId\".\n\nThis CL renames them to \"hwcDisplayId\" and \"displayId\", respectively.\nNote that int32_t will be replaced by DisplayId in a follow-up CL.\n\nBug: 74619554\nTest: Build\nChange-Id: Ia9b621d385c2bf842a2093b578140dc7a2eaea69\n"
    },
    {
      "commit": "eecd6597d013b2bb879bc51957ed1b5e6b61c35e",
      "tree": "5951b1d466e39561ce064a5abf18e5638a19c48d",
      "parents": [
        "ba65e2d216021c37f8ba40dcab772e092e0e6740"
      ],
      "author": {
        "name": "Dominik Laskowski",
        "email": "domlaskowski@google.com",
        "time": "Tue May 29 10:25:41 2018 -0700"
      },
      "committer": {
        "name": "Dominik Laskowski",
        "email": "domlaskowski@google.com",
        "time": "Thu May 31 14:34:22 2018 -0700"
      },
      "message": "SF: Use consistent names for display references\n\nThis CL renames IBinder tokens to \"displayToken\", and DisplayDevice\nreferences to \"display\". It also cleans up style for affected lines.\n\nBug: 74619554\nTest: Build\nChange-Id: I04fc7264bf2a856caf30d662029b6f603f432938\n"
    },
    {
      "commit": "2de60f022e5b7e75deed9f069309eeabe30c49fe",
      "tree": "11a37a0b2e5d4863e738fe21826aafa4e531fbf5",
      "parents": [
        "ffd6a2fb9096b5e9bc0b91231f650aad0fc356c2",
        "7b8e9c623d3bc3259ac29995b061e455e36413e4"
      ],
      "author": {
        "name": "Lloyd Pique",
        "email": "lpique@google.com",
        "time": "Mon May 21 12:53:21 2018 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Mon May 21 12:53:21 2018 -0700"
      },
      "message": "Merge \"SF: Initialize DisplayDevice with the active config index\" into pi-dev am: 384bf40ae9\nam: 7b8e9c623d\n\nChange-Id: I4f31f2cbc3a6c897d31591d521df032b9cec7002\n"
    },
    {
      "commit": "3c085a07a84bc03aefb2c0caf24a1ae1a9f5f90c",
      "tree": "bf77ae64bc105679776edd7806edb21313ca034e",
      "parents": [
        "892e17d7e57169ffd217aaa3852feaa7545df669"
      ],
      "author": {
        "name": "Lloyd Pique",
        "email": "lpique@google.com",
        "time": "Wed May 09 19:38:32 2018 -0700"
      },
      "committer": {
        "name": "Lloyd Pique",
        "email": "lpique@google.com",
        "time": "Mon May 21 10:00:10 2018 -0700"
      },
      "message": "SF: Initialize DisplayDevice with the active config index\n\nThis is a port of aosp/580542, with added unit test changes now that the\ncorrect config is being set in the DisplayDevice.\n\nBug: 69807179\nTest: atest libsurfaceflinger_unittest\n\nChange-Id: I51c13678bc28c715fa116ad127478d4afa3d0349\n"
    },
    {
      "commit": "c12e3a8f57fc85e894ed4b84463a78a5a4744871",
      "tree": "b9600e9944ec6aa1698d8b444c51f6b6456d92b4",
      "parents": [
        "fcea6af00f824f20d901f2ac6650ce1763df736f",
        "e4fb763503d0a8eedbcdfe98b9c98d3019297574"
      ],
      "author": {
        "name": "Peiyong Lin",
        "email": "lpy@google.com",
        "time": "Tue May 08 11:43:46 2018 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Tue May 08 11:43:46 2018 -0700"
      },
      "message": "Merge \"[SurfaceFlinger] Fix HWComposer error message.\" into pi-dev am: 02a7a668c4\nam: e4fb763503\n\nChange-Id: I5376d7556bc29b48ef478a0ba30c57ef6f288084\n"
    },
    {
      "commit": "306e499d2599edb882f4e3f85a438e5f4497f773",
      "tree": "808162addd8221590ec21eafaaadc0f99153c2be",
      "parents": [
        "84d1fb6d373c36974a7ee69b48afb7e5f2831e0d"
      ],
      "author": {
        "name": "Peiyong Lin",
        "email": "lpy@google.com",
        "time": "Mon May 07 16:18:22 2018 -0700"
      },
      "committer": {
        "name": "Peiyong Lin",
        "email": "lpy@google.com",
        "time": "Mon May 07 16:18:22 2018 -0700"
      },
      "message": "[SurfaceFlinger] Fix HWComposer error message.\n\nBUG: 79362190\nTest: build, flash and verify with adb logcat\nChange-Id: I507cb53d9e291f5fe53134e820ceb6fda3e341d7\n"
    },
    {
      "commit": "e9ef7c430a223bfebe0d5206f72b1b20af0a0d23",
      "tree": "ab849f69e7f22d259c21007bc842618d5803d924",
      "parents": [
        "555c303adccae00d428cd6b6187680b36f0ef262"
      ],
      "author": {
        "name": "Dominik Laskowski",
        "email": "domlaskowski@google.com",
        "time": "Mon Mar 12 19:34:30 2018 -0700"
      },
      "committer": {
        "name": "Dominik Laskowski",
        "email": "domlaskowski@google.com",
        "time": "Mon Apr 30 10:44:35 2018 -0700"
      },
      "message": "SF: Generate stable display IDs using EDID\n\nThe display IDs generated by HWC are opaque handles. In order for SF and\neventually DisplayManagerService to keep track of more than two displays\nand recognize previously seen displays, displays should be given stable\nand persistent IDs.\n\nIf the HWC supports IComposerClient.getDisplayIdentificationData, SF\nparses the EDID structure to generate stable display IDs, which will\nbe used in a follow-up CL to replace HWC_DISPLAY_{PRIMARY,EXTERNAL}.\n\nBug: 74619554\nTest: dumpsys SurfaceFlinger --display-identification\nTest: libsurfaceflinger_unittest\nChange-Id: I1a710e2efcf1581fabe48ab96a0eb4e7a5163c0c\n"
    },
    {
      "commit": "56a9e5d33ce9a60f042288ef8b62952d44ffec4c",
      "tree": "8f233da57dc7c457249414ef123a6f08d062db35",
      "parents": [
        "4693e7370e51ed3a93c5d98a0ca6e47b26a82218"
      ],
      "author": {
        "name": "Dominik Laskowski",
        "email": "domlaskowski@google.com",
        "time": "Thu Apr 19 14:47:33 2018 -0700"
      },
      "committer": {
        "name": "Dominik Laskowski",
        "email": "domlaskowski@google.com",
        "time": "Thu Apr 26 17:37:11 2018 +0000"
      },
      "message": "SF: Clean up HWC validation\n\nThis CL adds macros for validating HWC displays and return values.\n\nBug: 74619554\nTest: Build\nChange-Id: I9f8eff97255087d13fe975f3fc45cfbb6d4ea4d6\n(cherry picked from commit fc2c032b2c1bec0494f1a69497aafa2df4992dc5)\n"
    },
    {
      "commit": "bf170d93e4a313201c8fe9b7bced685b1395828a",
      "tree": "b42a23fa5d435a9eb6d04fbe03ec420081b64cfa",
      "parents": [
        "fc2c032b2c1bec0494f1a69497aafa2df4992dc5"
      ],
      "author": {
        "name": "Dominik Laskowski",
        "email": "domlaskowski@google.com",
        "time": "Thu Apr 19 15:08:05 2018 -0700"
      },
      "committer": {
        "name": "Dominik Laskowski",
        "email": "domlaskowski@google.com",
        "time": "Wed Apr 25 12:25:50 2018 -0700"
      },
      "message": "SF: Use std::string for display name\n\nBug: 74619554\nTest: Build\nChange-Id: Ic07b38516233dda0c275774ccca315b1ac205d47\n"
    },
    {
      "commit": "fc2c032b2c1bec0494f1a69497aafa2df4992dc5",
      "tree": "8f5bab8b6413db87968632bc742c4f0d2978db5b",
      "parents": [
        "cbcf18673ce3babd571e32b2cdbb240bd708e05e"
      ],
      "author": {
        "name": "Dominik Laskowski",
        "email": "domlaskowski@google.com",
        "time": "Thu Apr 19 14:47:33 2018 -0700"
      },
      "committer": {
        "name": "Dominik Laskowski",
        "email": "domlaskowski@google.com",
        "time": "Wed Apr 25 12:25:47 2018 -0700"
      },
      "message": "SF: Clean up HWC validation\n\nThis CL adds macros for validating HWC displays and return values.\n\nBug: 74619554\nTest: Build\nChange-Id: I9f8eff97255087d13fe975f3fc45cfbb6d4ea4d6\n"
    },
    {
      "commit": "2c327ac2840b34848543cc961d16d3dbad102f16",
      "tree": "7a9781a15c5027b316b63a29d532681651f20d1a",
      "parents": [
        "d3898410e25f484e30e4ffc5a0fa33018189b19d"
      ],
      "author": {
        "name": "Peiyong Lin",
        "email": "lpy@google.com",
        "time": "Thu Apr 19 22:06:34 2018 -0700"
      },
      "committer": {
        "name": "Peiyong Lin",
        "email": "lpy@google.com",
        "time": "Mon Apr 23 15:07:14 2018 -0700"
      },
      "message": "[SurfaceFlinger] Plumb getPerFrameMetadataKeys and setLayerPerFrameMetadata.\n\nThis patch compresses supported metdata types into a bitmask and stores it in\nDisplayDevice and refactors the code in Hwc2::Layer regarding HdrMetadata. When\nDisplayDevice is created, the ability of accepting metadata will be queried\nfrom hardware composer and stored in DisplayDevice. Hwc2::Layer will construct\nHdrMetadata to PerFrameMetadata when setPerFrameHdrMetadata is called if the\nincoming meta data is changed.\n\nPreviously, setLayerPerFrameMetadata was named as setLayerHdrMetadata, but\nsince we move the responsibility of constructing PerFrameMetadata from\nComposerHal to Hwc2::Layer, we change the name to setLayerPerFrameMetadata,\nwhich is more generic and matches the HIDL interface.\n\nBUG: 77831156\nTest: Build and flash\nChange-Id: I447956f4dcf42c90ceb3d29091cd5034ad91061a\nMerged-In: I447956f4dcf42c90ceb3d29091cd5034ad91061a\n"
    },
    {
      "commit": "0ac5f4ee103f7138aee213af818f7f446dcc2151",
      "tree": "0543947855591cf2ddc3acbd513f62576a547d78",
      "parents": [
        "6a4178ea71850c319b88bd181b944ccdf195c801"
      ],
      "author": {
        "name": "Peiyong Lin",
        "email": "lpy@google.com",
        "time": "Thu Apr 19 22:06:34 2018 -0700"
      },
      "committer": {
        "name": "Peiyong Lin",
        "email": "lpy@google.com",
        "time": "Mon Apr 23 12:42:35 2018 -0700"
      },
      "message": "[SurfaceFlinger] Plumb getPerFrameMetadataKeys and setLayerPerFrameMetadata.\n\nThis patch compresses supported metdata types into a bitmask and stores it in\nDisplayDevice and refactors the code in Hwc2::Layer regarding HdrMetadata. When\nDisplayDevice is created, the ability of accepting metadata will be queried\nfrom hardware composer and stored in DisplayDevice. Hwc2::Layer will construct\nHdrMetadata to PerFrameMetadata when setPerFrameHdrMetadata is called if the\nincoming meta data is changed.\n\nPreviously, setLayerPerFrameMetadata was named as setLayerHdrMetadata, but\nsince we move the responsibility of constructing PerFrameMetadata from\nComposerHal to Hwc2::Layer, we change the name to setLayerPerFrameMetadata,\nwhich is more generic and matches the HIDL interface.\n\nBUG: 77831156\nTest: Build and flash\nChange-Id: I447956f4dcf42c90ceb3d29091cd5034ad91061a\n"
    },
    {
      "commit": "3c89463809229f53bdcfc7f3116beb5b222428fb",
      "tree": "a818c49114192f42839f40b9fd10d24e1d3f98d4",
      "parents": [
        "b6dc4034bf7ea750875c0e3c41c9039f8dec6371"
      ],
      "author": {
        "name": "Dominik Laskowski",
        "email": "domlaskowski@google.com",
        "time": "Mon Apr 02 17:10:23 2018 -0700"
      },
      "committer": {
        "name": "Peiyong Lin",
        "email": "lpy@google.com",
        "time": "Fri Apr 20 20:47:07 2018 +0000"
      },
      "message": "SF: Clean up name lookup in ComposerHal.{h,cpp}\n\nBug: 74619554\nTest: Build\nChange-Id: I3096c67dbd994a5df087d8744934ba3c0b8bf9e3\nMerged-In: I3096c67dbd994a5df087d8744934ba3c0b8bf9e3\n(cherry picked from commit 6231aaf11145a20676d9e759073aa400d78885a6)\n"
    },
    {
      "commit": "bcecacdccb7f4001be5f7310e3eaa91f1e4742c6",
      "tree": "62a616e2ed9c41ab80cd7a3d988cd9e5699a5fe5",
      "parents": [
        "279cd0512f4144b685ef7242f2192be820a02b45",
        "92b1f9afc46fd382b467b06af955b1f5dabdf9c2"
      ],
      "author": {
        "name": "Peiyong Lin",
        "email": "lpy@google.com",
        "time": "Mon Apr 16 23:16:36 2018 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Mon Apr 16 23:16:36 2018 -0700"
      },
      "message": "Merge \"[SurfaceFlinger] Extend HDR support.\" into pi-dev am: 88428cd0af\nam: 92b1f9afc4\n\nChange-Id: Ifa9e277fa3f7ca5ad47b8ee5b5703f1c7733d949\n"
    },
    {
      "commit": "6266589793ddd9769a649a6b5f61ef115179572b",
      "tree": "22da6e7e12b620c1c1fbc651382edb3829458683",
      "parents": [
        "8cafb0cc57cedf3012b4b7f99519f4a9150dc38b"
      ],
      "author": {
        "name": "Peiyong Lin",
        "email": "lpy@google.com",
        "time": "Mon Apr 16 11:07:44 2018 -0700"
      },
      "committer": {
        "name": "Peiyong Lin",
        "email": "lpy@google.com",
        "time": "Mon Apr 16 14:08:53 2018 -0700"
      },
      "message": "[SurfaceFlinger] Extend HDR support.\n\nPreviously we stored HDR10 support in DisplayDevice. This patch extends and\ngeneralizes the support to HLG and Dolby Vision.\n\nMinor: Adapt Hdr type from HAL.\n\nBUG: 73825729\nBUG: 77156734\nTest: Build, flash, watch Youtube HDR\nChange-Id: Id642bc9482523b4646814dca9ecfb1f043987dc5\n"
    },
    {
      "commit": "6231aaf11145a20676d9e759073aa400d78885a6",
      "tree": "1bcc72c10fd5df4b3a6f89ca2b51fbad7e8600a4",
      "parents": [
        "444261800f07c04230e774b28aa51ba40cc6d418"
      ],
      "author": {
        "name": "Dominik Laskowski",
        "email": "domlaskowski@google.com",
        "time": "Mon Apr 02 17:10:23 2018 -0700"
      },
      "committer": {
        "name": "Dominik Laskowski",
        "email": "domlaskowski@google.com",
        "time": "Mon Apr 09 12:42:51 2018 -0700"
      },
      "message": "SF: Clean up name lookup in ComposerHal.{h,cpp}\n\nBug: 74619554\nTest: Build\nChange-Id: I3096c67dbd994a5df087d8744934ba3c0b8bf9e3\n"
    },
    {
      "commit": "e9f0cf68b7d859c5a25cd2c57ec6ffa889f07e33",
      "tree": "eb2f14d63ac3c4a7ed70051d0ace5018645d2708",
      "parents": [
        "1b022b4a6e3ebb744a383502ecc7385d6679547b",
        "e0b9cb4dd4511f406a2464b4f2b64983a3c11a15"
      ],
      "author": {
        "name": "Peiyong Lin",
        "email": "lpy@google.com",
        "time": "Thu Apr 05 18:16:37 2018 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu Apr 05 18:16:37 2018 -0700"
      },
      "message": "[SurfaceFlinger] Plumb HAL to hardware composer. am: 0e7a791d51\nam: e0b9cb4dd4\n\nChange-Id: Id2d5359151434c1758fdc593f7858eba5f40cc3a\n"
    },
    {
      "commit": "0e7a791d51e92aafefd416044a2d38b6eec22a00",
      "tree": "298c22b754e3ca39d0dfb82f63cd3147ded7061f",
      "parents": [
        "89238e9438500e2e92a98930e4617d9ca43462df"
      ],
      "author": {
        "name": "Peiyong Lin",
        "email": "lpy@google.com",
        "time": "Thu Apr 05 14:36:36 2018 -0700"
      },
      "committer": {
        "name": "Peiyong Lin",
        "email": "lpy@google.com",
        "time": "Thu Apr 05 15:29:03 2018 -0700"
      },
      "message": "[SurfaceFlinger] Plumb HAL to hardware composer.\n\nPreviously we introduced HIDL interfaces for Auto Color support. This patch\nimplements HAL interfaces in DisplayHardware/.\n\nBUG: 73824924\nBUG: 73825729\nTest: Build\nChange-Id: I4f2011bfa9306552d50a88fe0f065932be3efd0c\n"
    },
    {
      "commit": "f27a1aca7eb992104795b2d970c401501bc02c87",
      "tree": "7e84f02bd4fe7de6b3b16dce3a95ecab31bc0c89",
      "parents": [
        "091a8255920e2ee6ecdfda81a32df1c92a43433a",
        "2e099ead6d699cd3fc8b62db91b651ac490564c5"
      ],
      "author": {
        "name": "Peiyong Lin",
        "email": "lpy@google.com",
        "time": "Mon Apr 02 23:05:44 2018 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Mon Apr 02 23:05:44 2018 -0700"
      },
      "message": "Merge \"[SurfaceFlinger] Replace android_dataspace with Dataspace.\" into pi-dev am: 2e14fbae72\nam: 2e099ead6d\n\nChange-Id: I7df67310821293f15a9f03604f2505280e6f8158\n"
    },
    {
      "commit": "6a72ffb19baac4bc1c4e80f0ce7aad59ac87f4af",
      "tree": "ed6acf608d29b860f4ab50654a0c3d6c8da234c4",
      "parents": [
        "c5b35436299b3a492c045bc80b3148b306d25480",
        "b769ea501d5f017dc7fbca20745870124716dd59"
      ],
      "author": {
        "name": "Chia-I Wu",
        "email": "olv@google.com",
        "time": "Mon Apr 02 18:32:57 2018 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Mon Apr 02 18:32:57 2018 -0700"
      },
      "message": "Merge \"surfaceflinger: fix per-frame metadata to be per-layer\" into pi-dev am: 0cab4a5302\nam: b769ea501d\n\nChange-Id: I2d66796af16c557dd1eb1b831fbab995c291b570\n"
    },
    {
      "commit": "7299f71216d9212f9c5a0f3dd159ad99bb7afb4a",
      "tree": "5baa937f0a36d862a4a8091edac9ce2779c31d5c",
      "parents": [
        "fd11c33a4784f652b2c1beb4da67737583e2f4e5",
        "bb208e65692b15dfadf2c04c92816540603812d2"
      ],
      "author": {
        "name": "Peiyong Lin",
        "email": "lpy@google.com",
        "time": "Mon Apr 02 18:28:50 2018 -0700"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Mon Apr 02 18:28:50 2018 -0700"
      },
      "message": "[SurfaceFlinger] Removed unreached return statement. am: 63e3a5e6ce\nam: bb208e6569\n\nChange-Id: I9fc48479a67f2e27e8685ed0eb6f04fc8c190e9b\n"
    },
    {
      "commit": "34beb7a0ff0494b0c5ad81104171f8a49e599163",
      "tree": "033e25eb8ef1e0f0b06d7c20e094ecf7b4139ff5",
      "parents": [
        "0cab4a530234efe62ab279ced52744de8833a69a"
      ],
      "author": {
        "name": "Peiyong Lin",
        "email": "lpy@google.com",
        "time": "Wed Mar 28 11:57:12 2018 -0700"
      },
      "committer": {
        "name": "Peiyong Lin",
        "email": "lpy@google.com",
        "time": "Mon Apr 02 15:27:17 2018 -0700"
      },
      "message": "[SurfaceFlinger] Replace android_dataspace with Dataspace.\n\nThis patch replaces all android_dataspace in SurfaceFlinger with Dataspace\nV1.1. 3 commands in sequence are used to do the conversion:\n\nfind ./ -type f -exec sed -i -e \u0027s/android_dataspace_t/Dataspace/g\u0027 {} \\;\nfind ./ -type f -exec sed -i -e \u0027s/android_dataspace/Dataspace/g\u0027 {} \\;\nfind ./ -type f -exec sed -i -e \u0027s/HAL_DATASPACE_/Dataspace::/g\u0027 {} \\;\n\nWith some minor tweak because most of the APIs in frameworks/native are still\naccepting android_dataspace/android_dataspace_t.\n\nNext step is to convert the rest of android_dataspace usage to Dataspace in\nframeworks/native as well as frameworks/base.\n\nBUG: 77156734\nTest: Build and flash\nChange-Id: I2304c7014cb49a1c9f67c4563603fb55e8dbd679\n"
    },
    {
      "commit": "0cab4a530234efe62ab279ced52744de8833a69a",
      "tree": "e39e28ccf9fe195d2e6b6f33ea8fda3cfc0909c9",
      "parents": [
        "57a532e60bad601e1a6d8aa97e0e131d16200d5a",
        "bcbd53c5b6330ebd08fef2e1d8256b6ceb1c0317"
      ],
      "author": {
        "name": "Chia-I Wu",
        "email": "olv@google.com",
        "time": "Mon Apr 02 22:22:28 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Mon Apr 02 22:22:28 2018 +0000"
      },
      "message": "Merge \"surfaceflinger: fix per-frame metadata to be per-layer\" into pi-dev"
    },
    {
      "commit": "63e3a5e6ce7ffcbac2eaa65fe4f1ccf98f781a79",
      "tree": "a5de63f582d1ede364a4eaa2333307fba54edc2f",
      "parents": [
        "b62346a3ed0d8e4a9144aa90d68b10425b5b8afa"
      ],
      "author": {
        "name": "Peiyong Lin",
        "email": "lpy@google.com",
        "time": "Mon Apr 02 09:11:17 2018 -0700"
      },
      "committer": {
        "name": "Peiyong Lin",
        "email": "lpy@google.com",
        "time": "Mon Apr 02 09:13:13 2018 -0700"
      },
      "message": "[SurfaceFlinger] Removed unreached return statement.\n\nThis bug was introduced in ag/3818244.\n\nBUG: 77466401\nBUG: 77156734\nTest: Build\nChange-Id: I22b57e9b9dc7a517180c5aed25c907d5c8f2674c\n"
    },
    {
      "commit": "97e0df6089313f3f943381a50bd9ed85f1c167bd",
      "tree": "fe9740b298346a30a578d7299292464fa0faf1b9",
      "parents": [
        "981dcd467f57430f74db76587e6c0598accd282e",
        "51ecdf3b308d743401d1bacc8816098a3e4e2d6d"
      ],
      "author": {
        "name": "Chia-I Wu",
        "email": "olv@google.com",
        "time": "Fri Mar 30 21:05:32 2018 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri Mar 30 21:05:32 2018 +0000"
      },
      "message": "Merge \"surfaceflinger: minor dumpsys improvements\" into pi-dev am: 36d8ba8714\nam: 51ecdf3b30\n\nChange-Id: I66703a46a4008646d0b74189f61504f058a35c43\n"
    },
    {
      "commit": "bcbd53c5b6330ebd08fef2e1d8256b6ceb1c0317",
      "tree": "9ff16274a0232c8e80f40d9451975926cedce637",
      "parents": [
        "0d5aac13b1d0cab7837f03ec7cfe4bc73152e7b4"
      ],
      "author": {
        "name": "Chia-I Wu",
        "email": "olv@google.com",
        "time": "Fri Mar 30 12:35:13 2018 -0700"
      },
      "committer": {
        "name": "Chia-I Wu",
        "email": "olv@google.com",
        "time": "Fri Mar 30 12:36:22 2018 -0700"
      },
      "message": "surfaceflinger: fix per-frame metadata to be per-layer\n\nsetPerFrameMetadata is renamed to setLayerPerFrameMetadata.\n\nBug: 32148660\nTest: builds\nChange-Id: I4a6a8eb3479c4535277a2de1f432cf7f6fa95db4\n"
    },
    {
      "commit": "36d8ba87141022784b4f1dede894bfd039d14f8e",
      "tree": "32b804d3a61c08098b467c67e0a6a28391cd4bd7",
      "parents": [
        "92f8d8b1f3818a793bce02b6c956a6a23ae7985a",
        "1e04361db1b65d3998edbf820078ccfaed477cb6"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Fri Mar 30 17:22:51 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Mar 30 17:22:51 2018 +0000"
      },
      "message": "Merge \"surfaceflinger: minor dumpsys improvements\" into pi-dev"
    },
    {
      "commit": "fd997e0969100418b4df8b8d97d21d497afa76c3",
      "tree": "02c194f3b987994405472e435f53ab6ae757c1bd",
      "parents": [
        "f228d58990fe4f2e66bf952b93dbebcf7db5ec3e"
      ],
      "author": {
        "name": "Peiyong Lin",
        "email": "lpy@google.com",
        "time": "Wed Mar 28 15:29:00 2018 -0700"
      },
      "committer": {
        "name": "Peiyong Lin",
        "email": "lpy@google.com",
        "time": "Thu Mar 29 15:28:14 2018 -0700"
      },
      "message": "Add proper namespace to GraphicTypes.\n\nRenamed GraphicsTypes.h to GraphicTypes.h and added proper namespace to avoid\nnaming conflict.\n\nBUG: 77156734\nTest: Build and flash\nChange-Id: Ibd9f454b5b72d5f8c6d94a3869a60a1bf821f106\nMerged-In: Ibd9f454b5b72d5f8c6d94a3869a60a1bf821f106\n"
    },
    {
      "commit": "9f034475d961892e4c10e6ff7ecee96e464be00c",
      "tree": "3a15d3bb2007cab02ce82e11d0fb1c3887add301",
      "parents": [
        "7909a89bb1a3f5142130c2ea9208966af8a76c8e"
      ],
      "author": {
        "name": "Peiyong Lin",
        "email": "lpy@google.com",
        "time": "Wed Mar 28 15:29:00 2018 -0700"
      },
      "committer": {
        "name": "Peiyong Lin",
        "email": "lpy@google.com",
        "time": "Thu Mar 29 15:04:35 2018 -0700"
      },
      "message": "Add proper namespace to GraphicTypes.\n\nRenamed GraphicsTypes.h to GraphicTypes.h and added proper namespace to avoid\nnaming conflict.\n\nBUG: 77156734\nTest: Build and flash\nChange-Id: Ibd9f454b5b72d5f8c6d94a3869a60a1bf821f106\n"
    },
    {
      "commit": "1e04361db1b65d3998edbf820078ccfaed477cb6",
      "tree": "44f903bbfacb523697c826f71649763253898dcf",
      "parents": [
        "f7a23bd97a8ea900f9bf023c57f812855cfbf539"
      ],
      "author": {
        "name": "Chia-I Wu",
        "email": "olv@google.com",
        "time": "Thu Mar 01 09:45:09 2018 -0800"
      },
      "committer": {
        "name": "Chia-I Wu",
        "email": "olv@google.com",
        "time": "Wed Mar 28 22:06:34 2018 +0000"
      },
      "message": "surfaceflinger: minor dumpsys improvements\n\nIn the order of importance,\n\n - fix eglGetConfigAttrib calls\n - mark Zs as relative in minidump\n - dump DisplayDevice wide color states\n - rename pixelformat to defaultPixelFormat in layer state\n - better grouping and indentation for DisplayDevice dump\n\nBug: 76415976\nTest: dumpsys\nChange-Id: If9254ffe43cb1de82d562fcc27e828d54eba9387\n"
    },
    {
      "commit": "bc79209c0b392f2d450658167d01f8d8b13cbb96",
      "tree": "85a6a9ffd5ae258cca696f487738182c29005e5e",
      "parents": [
        "f7a23bd97a8ea900f9bf023c57f812855cfbf539"
      ],
      "author": {
        "name": "Lloyd Pique",
        "email": "lpique@google.com",
        "time": "Wed Jan 17 11:52:30 2018 -0800"
      },
      "committer": {
        "name": "Lloyd Pique",
        "email": "lpique@google.com",
        "time": "Mon Mar 26 17:25:14 2018 -0700"
      },
      "message": "SF: Switch to internal display setup\n\nRather than call the public hotplug() functions, which may have\nundesired effects, set the internal state directly for a display in the\nmiddle of being connected.\n\n[Test execution time not significantly reduced]\n\nTest: libsurfaceflinger_unittest passes on Pixel XL\nBug: 74827900\nChange-Id: I604ff7267e7ea3af94095ca05e288ef18e248ee5\n(cherry picked from commit a618d855a2c1192c3817863b373a9cbfcba3ffbb)\n"
    },
    {
      "commit": "3bed0524e31f5f1844909006d952ff72196b98a2",
      "tree": "b2ab7447ee56b0ef8517226cbe2ac658d2c255a2",
      "parents": [
        "a46412ea433d5dae175ad3e471368a44747171a2"
      ],
      "author": {
        "name": "Steven Thomas",
        "email": "steventhomas@google.com",
        "time": "Tue Mar 20 15:40:48 2018 -0700"
      },
      "committer": {
        "name": "Steven Thomas",
        "email": "steventhomas@google.com",
        "time": "Thu Mar 22 22:43:06 2018 +0000"
      },
      "message": "Fix frozen screen after exiting vr\n\nWhen a hotplug connected event occurs, don\u0027t recreate any\nalready-existing entries in mBuiltinDisplays. This fixes a problem where\nthe screen would freeze after exiting vr.\n\nIn the future, we may want to use hotplug connected events to notify\nsurface flinger to reinitialize display state. This CL includes a change\nto the code in HWC2.cpp to always reinitialize the display state when we\nget a hotplug connected event, even if the display is already connected.\n\nBug: 74985350\n\nTest: - Confirmed exiting vr no longer freezes the screen.\n\n- Added code to simulate a hotplug connected event while the device is\n  running, to test the changes in HWC2.cpp. Confirmed the device\n  continued to function normally.\n\nChange-Id: I6afda67cae84842b2568c773e6b5aa4f38df6a96\nMerged-In: I6afda67cae84842b2568c773e6b5aa4f38df6a96\n"
    },
    {
      "commit": "eb6d205930870dd9c5dedf786454d6ab41f321af",
      "tree": "c13a28005b8c2e35c65cdb56b2be01e224786076",
      "parents": [
        "a5f61831a9d2ae3cf0846b3942e63361a0928857"
      ],
      "author": {
        "name": "Steven Thomas",
        "email": "steventhomas@google.com",
        "time": "Tue Mar 20 15:40:48 2018 -0700"
      },
      "committer": {
        "name": "Steven Thomas",
        "email": "steventhomas@google.com",
        "time": "Thu Mar 22 15:36:37 2018 -0700"
      },
      "message": "Fix frozen screen after exiting vr\n\nWhen a hotplug connected event occurs, don\u0027t recreate any\nalready-existing entries in mBuiltinDisplays. This fixes a problem where\nthe screen would freeze after exiting vr.\n\nIn the future, we may want to use hotplug connected events to notify\nsurface flinger to reinitialize display state. This CL includes a change\nto the code in HWC2.cpp to always reinitialize the display state when we\nget a hotplug connected event, even if the display is already connected.\n\nBug: 74985350\n\nTest: - Confirmed exiting vr no longer freezes the screen.\n\n- Added code to simulate a hotplug connected event while the device is\n  running, to test the changes in HWC2.cpp. Confirmed the device\n  continued to function normally.\n\nChange-Id: I6afda67cae84842b2568c773e6b5aa4f38df6a96\n"
    },
    {
      "commit": "0f93281bdfae73f7bbcdb911e6b645d133da1fb2",
      "tree": "c5e630f15640fa94a25ed383b317e6f721f6c6ca",
      "parents": [
        "fbd1be3cf2729217e3c96e9793d2d91aa067801d",
        "d16bad95ceb623d82d8f84776721f3d355bab89b"
      ],
      "author": {
        "name": "TreeHugger Robot",
        "email": "treehugger-gerrit@google.com",
        "time": "Tue Mar 20 03:27:30 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Tue Mar 20 03:27:30 2018 +0000"
      },
      "message": "Merge changes I73599f62,I8526e671,I8ab696b1,Ib7950386,I0051c41a, ...\n\n* changes:\n  SF: Introduce mock::NativeWindow\n  SF: Introduce mock::DisplaySurface\n  SF: Introduce mock::EventControlThread\n  SF: Separate EventControlThread into interface and impl\n  SF: Define mock::SurfaceInterceptor\n  SF: Separate SurfaceInterceptor into interface and impl\n  SF: Define mock::MessageQueue\n  SF: Separate MessageQueue into interface and impl\n  SF: libsurfaceflinger_unittest should skip SF ctor\n  SF: Switch to internal display setup\n"
    },
    {
      "commit": "a618d855a2c1192c3817863b373a9cbfcba3ffbb",
      "tree": "b01f55a74aa063214ab1aed5f4bb9f61c712f3f8",
      "parents": [
        "9638c3461fc553cb93c14a4f06e55fc636ee91ee"
      ],
      "author": {
        "name": "Lloyd Pique",
        "email": "lpique@google.com",
        "time": "Wed Jan 17 11:52:30 2018 -0800"
      },
      "committer": {
        "name": "Lloyd Pique",
        "email": "lpique@google.com",
        "time": "Mon Mar 19 17:51:16 2018 -0700"
      },
      "message": "SF: Switch to internal display setup\n\nRather than call the public hotplug() functions, which may have\nundesired effects, set the internal state directly for a display in the\nmiddle of being connected.\n\n[Test execution time not significantly reduced]\n\nTest: libsurfaceflinger_unittest passes on Pixel XL\nBug: 74827900\nChange-Id: I604ff7267e7ea3af94095ca05e288ef18e248ee5\n"
    },
    {
      "commit": "81410947481aa86e8fe653de2496d6de3e9e908f",
      "tree": "a6bea893e96e1081ee6d7f029ee69d8ef3e7dc0b",
      "parents": [
        "cdfc497b58ffaed2ea236ee39782f09b9d09d123",
        "8e272aac7b00ea8c7c1b2dcb1b5956acbf4335c6"
      ],
      "author": {
        "name": "Peiyong Lin",
        "email": "lpy@google.com",
        "time": "Fri Mar 16 04:40:39 2018 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri Mar 16 04:40:39 2018 +0000"
      },
      "message": "[Native] Replace android_color_mode usage with ColorMode. am: a52f029562\nam: 8e272aac7b\n\nChange-Id: I26f54f1659efd5257911df4ed6aa917716d113f2\n"
    },
    {
      "commit": "a52f0295622a42849f5ef81c44589b816b2ccacb",
      "tree": "fa5b66c2866be26e85f8bbcda940662d55212089",
      "parents": [
        "17511b0527cad3a68015c4fef2e0ab451ba2de6f"
      ],
      "author": {
        "name": "Peiyong Lin",
        "email": "lpy@google.com",
        "time": "Wed Mar 14 17:26:31 2018 -0700"
      },
      "committer": {
        "name": "Peiyong Lin",
        "email": "lpy@google.com",
        "time": "Thu Mar 15 21:14:01 2018 +0000"
      },
      "message": "[Native] Replace android_color_mode usage with ColorMode.\n\nTo ease the pain when we add color mode v1.1, we replace all current\nandroid_color_mode usage in framework native with ColorMode directly from HAL.\n\nBUG: 73824924\nTest: Build \u0026 flash\nChange-Id: I4436fc225c7807506825c7148bc794cb99f278dc\n"
    },
    {
      "commit": "99e2a83a4e544bf9c5ff6ae8c39d9e0cfaa808b8",
      "tree": "11f9e918c8bc71f4028ee27206b402b423cb3e62",
      "parents": [
        "a9de23af3ce3286896757d29d37021d4d2b260c8",
        "43f64f49bbb21ed6845b58025f43a73944fe4125"
      ],
      "author": {
        "name": "Courtney Goeltzenleuchter",
        "email": "courtneygo@google.com",
        "time": "Tue Mar 13 16:36:24 2018 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Tue Mar 13 16:36:24 2018 +0000"
      },
      "message": "Merge \"Do not send HdrMetadata on older interface\" into pi-dev am: 14b791afb6\nam: 43f64f49bb\n\nChange-Id: I45747763b99fb81e49612f1a50ef24e0b78d92ba\n"
    },
    {
      "commit": "301bb3097c267e6dbab25f6099403269b75a4e1c",
      "tree": "0f64d4e859c284850119bd73f413d2279be5eb94",
      "parents": [
        "990cc3e31debfb9c7891b2d6348ccc73c09147b2"
      ],
      "author": {
        "name": "Courtney Goeltzenleuchter",
        "email": "courtneygo@google.com",
        "time": "Mon Mar 12 11:12:42 2018 -0600"
      },
      "committer": {
        "name": "Courtney Goeltzenleuchter",
        "email": "courtneygo@google.com",
        "time": "Mon Mar 12 13:31:04 2018 -0600"
      },
      "message": "Do not send HdrMetadata on older interface\n\nNeed to make sure composer@2.2 is supported before sending\nHDR data across composer interface.\nTest: boot\nBug: 74523164\n\nChange-Id: I551c8568098990193309939483f10a30cc47350c\n"
    },
    {
      "commit": "95ae4c1762c5da85049a71ea1e6bbf3e93977a1b",
      "tree": "b994143f90c3d3ac5ecd20f9b41b02cae8d12d2b",
      "parents": [
        "421d290f600ff775e28be7aadd2d2b9a3e1fac91",
        "d828b8f5f5596801e9d5f1d646e665dcc6754b16"
      ],
      "author": {
        "name": "Courtney Goeltzenleuchter",
        "email": "courtneygo@google.com",
        "time": "Mon Mar 12 15:22:50 2018 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Mon Mar 12 15:22:50 2018 +0000"
      },
      "message": "Merge changes I2b89dce1,I5412eae0,I2e428ec1 into pi-dev am: 990cc3e31d\nam: d828b8f5f5\n\nChange-Id: I5f8173f6cb7505355d4d89f554d0e6389e1ed384\n"
    },
    {
      "commit": "f9c98e552b2ca404200048d8a78244e4fa080223",
      "tree": "e87b47cf37985260763eecbb173d333d49eab081",
      "parents": [
        "936799c1d4bb80f5595153ef9efddbef4983526b"
      ],
      "author": {
        "name": "Courtney Goeltzenleuchter",
        "email": "courtneygo@google.com",
        "time": "Mon Feb 12 07:23:17 2018 -0700"
      },
      "committer": {
        "name": "Courtney Goeltzenleuchter",
        "email": "courtneygo@google.com",
        "time": "Sat Mar 10 16:09:42 2018 -0700"
      },
      "message": "SF: Update to composer@2.2 implementation\n\nBug: 63710530\nTest: adb -d shell am start -n \\\n      com.drawelements.deqp/android.app.NativeActivity \\\n      -e cmdLine \u0027\"deqp --deqp-case\u003ddEQP-EGL.functional.hdr_metadata.* \\\n      --deqp-log-filename\u003d/sdcard/dEQP-Log.qpa\"\u0027\nChange-Id: I5412eae0a001406e058cd6687b02f3a37c82a7f1\n"
    },
    {
      "commit": "4577d4d559eef285cf92a880ba4a67f4a29c1dcd",
      "tree": "f5de60da16a673a30dee65bb430073203a6982bd",
      "parents": [
        "47a855e9b9f40b0c0d35586679434e0c830118e9"
      ],
      "author": {
        "name": "Peiyong Lin",
        "email": "lpy@google.com",
        "time": "Fri Mar 09 11:53:00 2018 -0800"
      },
      "committer": {
        "name": "Peiyong Lin",
        "email": "lpy@google.com",
        "time": "Fri Mar 09 11:53:00 2018 -0800"
      },
      "message": "[SurfaceFlinger] Remove hwc1 header.\n\nThis patch removes HWComposer_hwc1.h, it\u0027s deprecated and on longer referenced\nfrom anywhere.\n\nTest: make\nChange-Id: Ib3f6ed72b3e053550454167254c7d78f2af18e16\n"
    },
    {
      "commit": "fb0aa3da65ca60f5c9d69f9760faf2c81e4d294b",
      "tree": "05658f33cb2075b10586b8631cb35e9714500f77",
      "parents": [
        "1624c6144a265c95f56fbdf707c5be032f471f2d",
        "b6c6ad48fb0d6ad51d660a7b1ef72a1bdd8198d0"
      ],
      "author": {
        "name": "Steven Thomas",
        "email": "steventhomas@google.com",
        "time": "Fri Feb 16 21:19:58 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Feb 16 21:19:58 2018 +0000"
      },
      "message": "Merge \"Fix \"invalid buffer slot\" hardware composer error\""
    },
    {
      "commit": "b6c6ad48fb0d6ad51d660a7b1ef72a1bdd8198d0",
      "tree": "957a07e1bdccfd820e171592a96590eacd777819",
      "parents": [
        "7e3b57a2f100bd7047ee33e786e9ac32185270d5"
      ],
      "author": {
        "name": "Steven Thomas",
        "email": "steventhomas@google.com",
        "time": "Mon Jan 29 12:22:00 2018 -0800"
      },
      "committer": {
        "name": "Steven Thomas",
        "email": "steventhomas@google.com",
        "time": "Thu Feb 15 19:26:58 2018 +0000"
      },
      "message": "Fix \"invalid buffer slot\" hardware composer error\n\nFor virtual displays we weren\u0027t calling setClientTargetSlotCount(),\nleading to \"invalid buffer slot\" errors from the hardware composer\nservice.\n\nBug: 69814692\n\nTest: Observed the \"invalid buffer slot\" errors are gone.\n\nChange-Id: I2268acd7d59dcbe2a943ddf388d88632a8b81b5d\n(cherry picked from commit 8f1110776981bf35d5952532f99f32d9420dc017)\n"
    },
    {
      "commit": "e39cad28aa810490861512e0ada7757c2887f8c5",
      "tree": "cc416bf76c3108ed068454e3b31ea2203db24a05",
      "parents": [
        "a8cbd47495b4bbf8977388d371ae9e3a71652639"
      ],
      "author": {
        "name": "Lloyd Pique",
        "email": "lpique@google.com",
        "time": "Wed Dec 20 17:01:29 2017 -0800"
      },
      "committer": {
        "name": "Lloyd Pique",
        "email": "lpique@google.com",
        "time": "Fri Feb 09 15:41:34 2018 -0800"
      },
      "message": "SF: Add a first real unit test\n\nUse the newly defined mocks to substitute for the real instances,\nallowing a simple direct test of\nSurfaceFlinger::processDisplayChangesLocked(), for the case of a display\nbeing added.\n\n[Test execution time 25ms]\n\nTest: libsurfaceflinger_unittest passes on Pixel XL\nBug: None\nChange-Id: Icdb763ecc3adb1a8bf04268f3dc5716606e6e7e8\n"
    },
    {
      "commit": "d0094aaeba95917949b80f491924aeb21077778e",
      "tree": "de5baa953f1336c199b6d3d3b477d4ccd05a18f8",
      "parents": [
        "a822d52f1a7f651bf1056f4b99e7b8dd214c2ebb"
      ],
      "author": {
        "name": "Lloyd Pique",
        "email": "lpique@google.com",
        "time": "Wed Dec 20 16:43:28 2017 -0800"
      },
      "committer": {
        "name": "Lloyd Pique",
        "email": "lpique@google.com",
        "time": "Wed Feb 07 13:16:40 2018 -0800"
      },
      "message": "SF: Define Hwc2::mock::Composer\n\nThis allows the unit test to use a mock in place of android::Hwc2::Composer.\n\nTest: Code builds\nBug: None\nChange-Id: Ia6f0df083d579cf69e97abc2ff7f2d3f5789a320\n"
    },
    {
      "commit": "a822d52f1a7f651bf1056f4b99e7b8dd214c2ebb",
      "tree": "5c560acdb4ccce15aa99683590b91807c1a977f5",
      "parents": [
        "989fc50a1a52c57c218c9ccc681847c6c120d892"
      ],
      "author": {
        "name": "Lloyd Pique",
        "email": "lpique@google.com",
        "time": "Wed Dec 20 16:42:57 2017 -0800"
      },
      "committer": {
        "name": "Lloyd Pique",
        "email": "lpique@google.com",
        "time": "Wed Feb 07 13:16:40 2018 -0800"
      },
      "message": "SF: Separate Hwc2::Composer into interface and impl\n\nThis makes the android::Hwc2::Composer substitutable. In this case the\nintent is to allow a mock::Composer GMock class to be defined.\n\nHwc2::Composer now is a pure interface class. Hwc2::impl::Composer is\nthe normal implementation.\n\nAlso included is another minor change to allow HWC2::Device to be\nconstructed with a Hwc2::Composer (interface) pointer instead of a\nservice name. This means that now SurfaceFlinger itself constructs the\nHwc2::impl::Composer using the service name, rather than passing it down\na call chain.\n\nTest: Code builds\nBug: None\nChange-Id: Ic79f645cee40c534651b9c7b70f05497d98e51dc\n"
    },
    {
      "commit": "87551225ede71b5b64cd3bf14ed0d0daca2be356",
      "tree": "6af407cc53bfcf2794f66aeae28cabc70c7eed5d",
      "parents": [
        "5e92144cbd03008636016d543d5ae620e9b2f65a"
      ],
      "author": {
        "name": "Courtney Goeltzenleuchter",
        "email": "courtneygo@google.com",
        "time": "Tue Jan 16 14:00:09 2018 -0800"
      },
      "committer": {
        "name": "Courtney Goeltzenleuchter",
        "email": "courtneygo@google.com",
        "time": "Fri Jan 19 14:12:33 2018 -0800"
      },
      "message": "Update hwcomposer include paths\n\nIn preparation of new hwcomposer interface, updating\nexisting includes to include specific version.\nBug: 71513561\nTest: compile\n\nChange-Id: Iab13368f782067f255f7dee5318bfd57872f30dd\n"
    },
    {
      "commit": "0c114599e52bfcbe2b5ff0b734c9f8ca11de8879",
      "tree": "3e157fcf975799b99201c72f910dc820582d8153",
      "parents": [
        "f1831a120a44ef9260eb16191195a7db5d6c03d7",
        "88a905b9aff600150916a644d5bfd01a31c0ba82"
      ],
      "author": {
        "name": "Matthew Bouyack",
        "email": "mbouyack@google.com",
        "time": "Fri Jan 19 00:19:58 2018 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Fri Jan 19 00:19:58 2018 +0000"
      },
      "message": "Merge \"SurfaceFlinger: Change to support client target flip\""
    },
    {
      "commit": "88a905b9aff600150916a644d5bfd01a31c0ba82",
      "tree": "bc0197eaf0fd1084234d69e014dbade0b324e1d7",
      "parents": [
        "7f96780bc978d7eeba4b9ab51c13a371161927ab"
      ],
      "author": {
        "name": "Madhuri Athota",
        "email": "mathota@codeaurora.org",
        "time": "Thu May 04 16:58:15 2017 +0530"
      },
      "committer": {
        "name": "Matthew Bouyack",
        "email": "mbouyack@google.com",
        "time": "Thu Jan 18 22:35:52 2018 +0000"
      },
      "message": "SurfaceFlinger: Change to support client target flip\n\n- Add support to flip framebuffer target if\n  HWC2 implementation requests for it.\n\nb/38114488\nb/68271386\nCRs-Fixed: 2057401\nChange-Id: I91422ef60a139cbaf491db219b216cd1252e7e63\nSigned-off-by: Madhuri Athota \u003cmathota@codeaurora.org\u003e\n"
    },
    {
      "commit": "2ae2b3bd5bfbacc3b52f222441bfbbeb9bd54dc7",
      "tree": "141d9aca0dda54a3172139b0ac6e3a888c9e780e",
      "parents": [
        "715a2c13e6a010143761c1822ce7c4975921aa0b"
      ],
      "author": {
        "name": "Lloyd Pique",
        "email": "lpique@google.com",
        "time": "Thu Dec 14 17:18:17 2017 -0800"
      },
      "committer": {
        "name": "Lloyd Pique",
        "email": "lpique@google.com",
        "time": "Thu Jan 11 12:44:55 2018 -0800"
      },
      "message": "Allow a primary display disconnect\n\nThis patch forwards the primary display disconnect event to the\nFramework, and otherwise ensures that SurfaceFlinger does not crash\nwhile there is no primary display.\n\nNote that the Framework does not yet accept this change. In particular\nthe ActivityManager ActivityStackSupervisor code promptly asserts that\none cannot remove the primary display. With this assertion disabled, the\nframework does not crash (surprisingly). And if the Framework\nsubsequently receives a primary display connect event, it does not seem\nto do anything useful -- the display remains in a default off state, and\nno layer stack/viewport/etc is set on it.\n\nBug: 38464421\nTest: Works (with workarounds as noted) on a Chromebook\nTest: Added Unit test passes on Pixel 1 XL\n\nChange-Id: Ia11439030efdc53bc17474b71a0ffb3d3085bb49\n"
    },
    {
      "commit": "715a2c13e6a010143761c1822ce7c4975921aa0b",
      "tree": "8f7020c16c7deaccad40ca10b0316fa9a9f1bb90",
      "parents": [
        "fcd86617fb5cbbad3463c828211868859de23329"
      ],
      "author": {
        "name": "Lloyd Pique",
        "email": "lpique@google.com",
        "time": "Thu Dec 14 17:18:08 2017 -0800"
      },
      "committer": {
        "name": "Lloyd Pique",
        "email": "lpique@google.com",
        "time": "Wed Jan 10 17:57:44 2018 -0800"
      },
      "message": "Determine displayType in SurfaceFlinger\n\nThis change eliminates an assumption that the first hotplug connect\nevent is for the primary display, and all other events are for the\nexternal display.\n\nBug: 38464421\nTest: Boots, settings app navigable\nChange-Id: I753deb9a4e99a7b225ab89562c7acf4ce284dbf5\n"
    },
    {
      "commit": "566a3b4a1d1a2a6d38257113700eea92aa44ea2b",
      "tree": "c65bbfda9d8315e611bcadc4274b6ba5165d8fbc",
      "parents": [
        "44c26300d9dbd478d91cba2aab1861fc4d5f3f41"
      ],
      "author": {
        "name": "Peiyong Lin",
        "email": "lpy@google.com",
        "time": "Tue Jan 09 18:22:43 2018 -0800"
      },
      "committer": {
        "name": "Peiyong Lin",
        "email": "lpy@google.com",
        "time": "Wed Jan 10 10:54:38 2018 -0800"
      },
      "message": "[SurfaceFlinger] Replace NULL with nullptr.\n\nTest: make\nChange-Id: Ia0ecb3160cd5fddf22fb7100c1759d62e723d0b7\n"
    },
    {
      "commit": "7a9477298d8c5d231d20629962bcc2173e82ed6c",
      "tree": "9a7ebff80ebe5018d17150c6a81dcae2a940dbd6",
      "parents": [
        "de50968a01d70ad46db3cbba87f06daf4facf336"
      ],
      "author": {
        "name": "Greg Kaiser",
        "email": "gkaiser@google.com",
        "time": "Fri Jan 05 11:02:14 2018 -0800"
      },
      "committer": {
        "name": "Greg Kaiser",
        "email": "gkaiser@google.com",
        "time": "Fri Jan 05 13:48:42 2018 -0800"
      },
      "message": "surfaceflinger: Remove unused variable\n\nThe stack variable \u0027numTypes\u0027 was set but never used in\nDisplay::getHdrCapabilities(), so we remove it.\n\nTest: Built aosp_arm-eng\nChange-Id: I9d823feb73a14a416d21ad98396622fe72beb730\n"
    },
    {
      "commit": "9c5795640b7a03541ec31b93b6a3217709599a8d",
      "tree": "4006f3c9b3ad734d80ce52abb18d73c73bf6d83c",
      "parents": [
        "93b263755d3c5d4d081571c071a84ec0b770841c",
        "7fef217993211681e5f3923018b06b5da397451d"
      ],
      "author": {
        "name": "Chia-I Wu",
        "email": "olv@google.com",
        "time": "Thu Dec 21 17:40:46 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu Dec 21 17:40:46 2017 +0000"
      },
      "message": "Merge \"surfaceflinger: do not check HWC2::Capability::SkipValidate\" am: c770d27ff0 am: 45f9c3871b\nam: 7fef217993\n\nChange-Id: Id58026df73f211769764537f5648b83ff6b1b568\n"
    },
    {
      "commit": "41b98d41f9f4e94a1a9a31960a317649cbec3b09",
      "tree": "ea9c224be1441de5ae057570754b880f71e8318b",
      "parents": [
        "f02c8b410ab8d83907cfa88a49085c8ac63f88a3"
      ],
      "author": {
        "name": "Chia-I Wu",
        "email": "olv@google.com",
        "time": "Mon Dec 11 11:04:36 2017 -0800"
      },
      "committer": {
        "name": "Chia-I Wu",
        "email": "olv@google.com",
        "time": "Fri Dec 15 10:49:36 2017 -0800"
      },
      "message": "surfaceflinger: do not check HWC2::Capability::SkipValidate\n\nHWC2::Capability::SkipValidate is not defined in HIDL.  We cannot\ncheck against it.\n\nBesides, presentOrValidate is equivalent to validate in HIDL when\nthe underlying hwcomposer2 implementation does not support the cap.\nThere is not need to check against it.\n\nBug: 70407085\nTest: boots\nChange-Id: Ib0c11e99ce3389ad555605de18e194d9b51b2bc0\n"
    },
    {
      "commit": "2c3217576fda79c0fc8113f157fa7f32ff81d844",
      "tree": "d34c5a10f5a39836a4f5fa3daa22f5d7991ee28d",
      "parents": [
        "f49c189d6b20a1c72d0079b418b7050e0a9a1ef2"
      ],
      "author": {
        "name": "Tim Murray",
        "email": "timmurray@google.com",
        "time": "Wed Dec 13 13:46:40 2017 -0800"
      },
      "committer": {
        "name": "Tim Murray",
        "email": "timmurray@google.com",
        "time": "Wed Dec 13 15:43:58 2017 -0800"
      },
      "message": "surfaceflinger: remove vsync hint\n\nThe vsync hint isn\u0027t actually useful.\n\nTest: used taimen\nbug 69982006\n\nChange-Id: Ic64577901f95f31beb50e96b7a0570e4068a33b4\n"
    },
    {
      "commit": "1e24ccebeeb6798afce2730a120abcf9927960fa",
      "tree": "fadaedd30f8b1c96628d19691a6a4a2ba8aced49",
      "parents": [
        "f846a35a68f14b0eca45e3cd7c6d3ca88a57fe52"
      ],
      "author": {
        "name": "Chia-I Wu",
        "email": "olv@google.com",
        "time": "Fri Nov 10 10:36:01 2017 -0800"
      },
      "committer": {
        "name": "Chia-I Wu",
        "email": "olv@google.com",
        "time": "Wed Nov 29 14:03:13 2017 -0800"
      },
      "message": "surfaceflinger: remove all direct use of EGL\n\nSurfaceFlinger now uses EGL/GLES only indirectly through\nRenderEngine and GLConsumer.\n\nTest: SurfaceFlinger_test\nChange-Id: I78418b00168b79594979212eb488f530e738498d\n"
    },
    {
      "commit": "6e8f706c21a01d6a1225e86972ff432bba5f0106",
      "tree": "f134188aa351daedf514b29653e026afc1af1bcf",
      "parents": [
        "123704e1d7bdd1ea7dd9eecb6869d9337d9d73a3"
      ],
      "author": {
        "name": "Steven Thomas",
        "email": "steventhomas@google.com",
        "time": "Wed Nov 22 14:15:29 2017 -0800"
      },
      "committer": {
        "name": "Steven Thomas",
        "email": "steventhomas@google.com",
        "time": "Mon Nov 27 13:32:19 2017 -0800"
      },
      "message": "Fix usage of HWC_DISPLAY_PRIMARY in vr flinger\n\nThe hardware composer functions require display ids obtained from the\nonHotplug() composer callback. Our vr flinger code was supplying\nHWC_DISPLAY_PRIMARY as the primary display id, which is incorrect. The\nHWC_DISPLAY_* values are used for representing the display type, not the\ndisplay id. The code worked anyway because most hardware composers\nalways use 0 as the primary display id, which happens to be the same\nvalue as HWC_DISPLAY_PRIMARY. The emulator uses 1 as the primary display\nid though, which exposed the bug.\n\nThis CL changes the vr flinger code to get the display id from the\nonHotplug() composer callback, and uses that value when talking to\nhardware composer, instead of HWC_DISPLAY_PRIMARY. This matches the\nbehavior of surface flinger.\n\nBug: 69631196\n\nTest: Verified the vr flinger code path works as expected on phones and\nstandalones.\n\nChange-Id: Ia691941d0eafaa1f89e0ee81a4ae27fdef5a57cf\n"
    },
    {
      "commit": "83ce7c162855742a2d9eeebc0cd70fe48d2cd125",
      "tree": "833e155f283924bce9e33673d1f6a4562c61ed23",
      "parents": [
        "d265c4238699ea899cc3b01cc90b643d9692db2a"
      ],
      "author": {
        "name": "Chia-I Wu",
        "email": "olv@google.com",
        "time": "Thu Oct 19 15:18:55 2017 -0700"
      },
      "committer": {
        "name": "Chia-I Wu",
        "email": "olv@google.com",
        "time": "Fri Nov 10 13:06:38 2017 -0800"
      },
      "message": "surfaceflinger: remove USE_HWC2\n\nRemove USE_HWC2 and assume it to be true.  Remove all !USE_HWC2\ncode.\n\nThis also fixes a compile error in tests/fakehwc, which never\ndefines USE_HWC2.\n\nTest: boots taimen and hikey960\nChange-Id: Ie6d2fcf884aa6fc715ab0ce19a1e0f7c8acf734c\n"
    },
    {
      "commit": "d265c4238699ea899cc3b01cc90b643d9692db2a",
      "tree": "1f050b2d789290fe744201701b683780aa84a7f7",
      "parents": [
        "de1eb9c03becf0207aea85983692d7e7e43ff3bc"
      ],
      "author": {
        "name": "Chia-I Wu",
        "email": "olv@google.com",
        "time": "Thu Oct 19 15:16:41 2017 -0700"
      },
      "committer": {
        "name": "Chia-I Wu",
        "email": "olv@google.com",
        "time": "Fri Nov 10 13:06:37 2017 -0800"
      },
      "message": "surfaceflinger: remove TARGET_USES_HWC2\n\nRemove TARGET_USES_HWC2 and assume it to be true.  Remove the unused\nSurfaceFlinger_hwc1.cpp and DisplayHardware/HWComposer_hwc1.cpp.\n\nThis is expected to break some devices.  All affected devices should\nadd\n\n  PRODUCT_PACKAGES +\u003d android.hardware.graphics.composer@2.1-impl\n\nto their device.mk and update their manifest.xml.  In the worse\ncase, we want to fork frameworks/native/services/surfaceflinger\nbefore this change to\nframeworks/native/services/surfaceflinger_hwc1.\n\nTest: boots taimen and hikey960\nChange-Id: I27ddd4c6c8af3c39cda99d94002d179486575b28\n"
    },
    {
      "commit": "ae5a6b896a7c622dd029aa428f4f2c2493d5fc12",
      "tree": "d39e7ab5c0166a168d7d5db57c54e17eacdecf51",
      "parents": [
        "3bafe396c4cfef8c3a162c1cbfc69b28b2f09165"
      ],
      "author": {
        "name": "Chia-I Wu",
        "email": "olv@google.com",
        "time": "Tue Oct 10 09:09:22 2017 -0700"
      },
      "committer": {
        "name": "Chia-I Wu",
        "email": "olv@google.com",
        "time": "Thu Oct 12 12:41:50 2017 -0700"
      },
      "message": "surfaceflinger: flush HWC commands when present is skipped\n\nThis is how SF talks to HWC in each frame\n\n  1) queue state changes for display\n  2) queue validate display\n  3) flush\n  4) queue more state changes for display\n  5) queue present display\n  6) another flush\n\nWhen validate implies present, we skip all steps after 3).  This can\nbe less desirable because, when SF (incorrectly) queues more state\nchanges in 4), we still want to flush them to HWC such that SF\nstates and HWC states are consistent.  The only step we want to skip\nis 5) in that case.  Note that we still skip 6) when 4) and 5) do\nnot queue anything.\n\nThe problem is much more worse in a multiple display setup\n\n  1) queue state changes for display 1\n  2) queue validate display 1\n  3) flush\n  4) queue state changes for display 2\n  5) queue validate display 2\n  6) flush\n  7) queue more state changes for display 1\n  8) queue more state changes for display 2\n  9) queue present display 1\n  a) flush\n  b) queue present display 2\n  c) flush\n\nWhen validate implies present for display 1, but not for display 2,\nwe skip steps 7) to a), including the valid state changes for\ndisplay 2 in 8)!  The only step we want to skip should be 9).  Maybe\na) as well, but that is an optimization.\n\nIn both cases, what we really want is to skip the unnecessary\npresent and nothing else.\n\nBug: 67512553\nTest: manual\nChange-Id: I32d6218cda5c953e0359fecda94d2bb5482e061e\n"
    },
    {
      "commit": "f797decfb2d21b0cf4340202b3c49a290d386d90",
      "tree": "22ea04234a1fcd14b2c4177b92d4c6f582dd9ff6",
      "parents": [
        "878a9b16244e4f254e0f1d2ed70b4f597b24b72a",
        "f7e10c82b04e0f6a2a445609144612ac2f47c8a8"
      ],
      "author": {
        "name": "Chia-I Wu",
        "email": "olv@google.com",
        "time": "Fri Sep 08 22:39:28 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Fri Sep 08 22:39:28 2017 +0000"
      },
      "message": "Merge \"surfaceflinger: handle executeCommands transaction errors\" into oc-mr1-dev\nam: f7e10c82b0\n\nChange-Id: I02f1e3e8cb4f8c31e2959be375b8cac31c94601d\n"
    },
    {
      "commit": "c0b2b0c457c45e09479029748e07e6d1b1c9d457",
      "tree": "0bfcca8934d6c4934bd244e0b923db2ff49c7a76",
      "parents": [
        "a60e6a4548141eb6c179607ff6debba374e3a211"
      ],
      "author": {
        "name": "Chia-I Wu",
        "email": "olv@google.com",
        "time": "Fri Sep 08 10:14:34 2017 -0700"
      },
      "committer": {
        "name": "Chia-I Wu",
        "email": "olv@google.com",
        "time": "Fri Sep 08 11:32:03 2017 -0700"
      },
      "message": "surfaceflinger: handle executeCommands transaction errors\n\nUnlike other functions, executeCommands both sends and receives\nhandles.  It can fail for reasons such as out-of-fd.  We want to\nprotect SurfaceFlinger against out-of-fd.\n\nBug: 65449888\nTest: manual\nChange-Id: Id9420dbd6d0a943737c90bd3a1ae0df3805a4cb0\n"
    },
    {
      "commit": "c50be85de01a61cbb004837e960d9db294436969",
      "tree": "ad3f3407e96f50ac2869b1d98048e5f1a7dc533b",
      "parents": [
        "319682ef5a2bdf7fc0ad718a79d20cd34586be99",
        "64c9a3ee48208183f90ed9b2c5112ef796cce6e2"
      ],
      "author": {
        "name": "Chia-I Wu",
        "email": "olv@google.com",
        "time": "Sat Aug 12 03:50:00 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Sat Aug 12 03:50:00 2017 +0000"
      },
      "message": "Merge \"libgui: support 64-bit BQ consumer usage\" into oc-mr1-dev\nam: 64c9a3ee48\n\nChange-Id: I2f28217c4c372c57b1a3b4ca64e499c7a1b34459\n"
    },
    {
      "commit": "b02664ddc146893e6bbe7939ee2b948d54e7166a",
      "tree": "3377693a4f147d4c9193d3aa74b5752fc5f6fe24",
      "parents": [
        "50bd661d4bac9c903946f95ead7770252032bd1a"
      ],
      "author": {
        "name": "Steven Thomas",
        "email": "steventhomas@google.com",
        "time": "Wed Jul 26 18:48:28 2017 -0700"
      },
      "committer": {
        "name": "Steven Thomas",
        "email": "steventhomas@google.com",
        "time": "Wed Aug 09 16:28:52 2017 -0700"
      },
      "message": "Use a separate hwcomposer hidl instance for vr flinger\n\nImprove robustness of vr flinger \u003c--\u003e surface flinger switching by\nhaving vr flinger use a separate hardware composer hidl instance instead\nof sharing the instance with surface flinger. Sharing the hardware\ncomposer instance has proven to be error prone, with situations where\nboth the vr flinger thread and surface flinger main thread would write\nto the composer at the same time, causing hard to diagnose\ncrashes (b/62925812).\n\nInstead of sharing the hardware composer instance, when switching to vr\nflinger we now delete the existing instance, create a new instance\ndirected to the vr hardware composer shim, and vr flinger creates its\nown composer instance connected to the real hardware composer. By\ncreating a separate composer instance for vr flinger, crashes like the\nones found in b/62925812 are no longer impossible.\n\nMost of the changes in this commit are related to enabling surface\nflinger to delete HWComposer instances cleanly. In particular:\n\n- Previously the hardware composer callbacks (which come in on a\n  hwbinder thread) would land in HWC2::Device and bubble up to the\n  SurfaceFlinger object. But with the new behavior the HWC2::Device\n  might be dead or in the process of being destroyed, so instead we have\n  SurfaceFlinger receive the composer callbacks directly, and forward\n  them to HWComposer and HWC2::Device. We include a composer id field in\n  the callbacks so surface flinger can ignore stale callbacks from dead\n  composer instances.\n\n- Object ownership for HWC2::Display and HWC2::Layer was shared by\n  passing around shared_ptrs to these objects. This was problematic\n  because they referenced and used the HWC2::Device, which can now be\n  destroyed when switching to vr flinger. Simplify the ownership model\n  by having HWC2::Device own (via unique_ptr\u003c\u003e) instances of\n  HWC2::Display, which owns (again via unique_ptr\u003c\u003e) instances of\n  HWC2::Layer. In cases where we previously passed std::shared_ptr\u003c\u003e to\n  HWC2::Display or HWC2::Layer, instead pass non-owning HWC2::Display*\n  and HWC2::Layer* pointers. This ensures clean composer instance\n  teardown with no stale references to the deleted HWC2::Device.\n\n- When the hardware composer instance is destroyed and the HWC2::Layers\n  are removed, notify the android::Layer via a callback, so it can\n  remove the HWC2::Layer from its internal table of hardware composer\n  layers. This removes the burden to explicitly clear out all hardware\n  composer layers when switching to vr flinger, which has been a source\n  of bugs.\n\n- We were missing an mStateLock lock in\n  SurfaceFlinger::setVsyncEnabled(), which was necessary to ensure we\n  were setting vsync on the correct hardware composer instance. Once\n  that lock was added, surface flinger would sometimes deadlock when\n  transitioning to vr flinger, because the surface flinger main thread\n  would acquire mStateLock and then EventControlThread::mMutex, whereas\n  the event control thread would acquire the locks in the opposite\n  order. The changes in EventControlThread.cpp are to ensure it doesn\u0027t\n  hold a lock on EventControlThread::mMutex while calling\n  setVsyncEnabled(), to avoid the deadlock.\n\nI found that without a composer callback registered in vr flinger the\nvsync_event file wasn\u0027t getting vsync timestamps written, so vr flinger\nwould get stuck in an infinite loop trying to parse a vsync\ntimestamp. Since we need to have a callback anyway I changed the code in\nhardware_composer.cpp to get the vsync timestamp from the callback, as\nsurface flinger does. I confirmed the timestamps are the same with\neither method, and this lets us remove some extra code for extracting\nthe vsync timestamp that (probably) wasn\u0027t compatible with all devices\nwe want to run on anyway. I also added a timeout to the vysnc wait so\nwe\u0027ll see an error message in the log if we fail to wait for vsync,\ninstead of looping forever.\n\nBug: 62925812\n\nTest: - Confirmed surface flinger \u003c--\u003e vr flinger switching is robust by\n        switching devices on and off hundreds of times and observing no\n        hardware composer related issues, surface flinger crashes, or\n        hardware composer service crashes.\n\n- Confirmed 2d in vr works as before by going through the OOBE flow on a\n  standalone. This also exercises virtual display creation and usage\n  through surface flinger.\n\n- Added logs to confirm perfect layer/display cleanup when destroying\n  hardware composer instances.\n\n- Tested normal 2d phone usage to confirm basic layer create/destroy\n  functionality works as before.\n\n- Monitored surface flinger file descriptor usage across dozens of\n  surface flinger \u003c--\u003e vr flinger transitions and observed no file\n  descriptor leaks.\n\n- Confirmed the HWC1 code path still compiles.\n\n- Ran the surface flinger tests and confirmed there are no new test\n  failures.\n\n- Ran the hardware composer hidl in passthrough mode on a Marlin and\n  confirmed it works.\n\n- Ran CTS tests for virtual displays and confirmed they all pass.\n\n- Tested Android Auto and confirmed basic graphics functionality still\n  works.\n\nChange-Id: Ibf1dbdf3ec15ca66467697d711f8109dc9e46a47\nMerged-In: I17dc0e060bfb5cb447ffbaa573b279fc6d2d8bd1\n"
    },
    {
      "commit": "e2786ea5aec3a12d948feb85ffbb535fc89c0fe6",
      "tree": "e5e0e87d4093b1888e5f5767493cc4f08c97990e",
      "parents": [
        "27a7c02f0ca4afa27cd1516b342ab485df03c15b"
      ],
      "author": {
        "name": "Chia-I Wu",
        "email": "olv@google.com",
        "time": "Mon Aug 07 10:36:08 2017 -0700"
      },
      "committer": {
        "name": "Chia-I Wu",
        "email": "olv@google.com",
        "time": "Tue Aug 08 15:25:51 2017 -0700"
      },
      "message": "libgui: support 64-bit BQ consumer usage\n\nAdd NATIVE_WINDOW_GET_CONSUMER_USAGE64.  Support 64-bit consumer\nusage flags in BufferItemConsumer and GLConsumer.\n\nIn H2BGraphicBufferProducer::getConsumerUsage, however, we will\nissue a warning and return 32-bit consumer usage.  We will need a\nHIDL interface version bump to fix it.\n\nBug: 35215313\nTest: manual\nChange-Id: I1f8884a7db71bbdb269d05b94443ddec2ff46f8a\n"
    },
    {
      "commit": "d7f49c5e93a554c2f0e85e279a765f92fb1e66f1",
      "tree": "aa2ddf0f8f361a00c9f10277efc123fb508b1e5a",
      "parents": [
        "0632b778331dfc46979b8865fdd530e61d5bdef9"
      ],
      "author": {
        "name": "Steven Thomas",
        "email": "steventhomas@google.com",
        "time": "Wed Jul 26 18:48:28 2017 -0700"
      },
      "committer": {
        "name": "Steven Thomas",
        "email": "steventhomas@google.com",
        "time": "Mon Aug 07 20:32:36 2017 -0700"
      },
      "message": "Use a separate hwcomposer hidl instance for vr flinger\n\nImprove robustness of vr flinger \u003c--\u003e surface flinger switching by\nhaving vr flinger use a separate hardware composer hidl instance instead\nof sharing the instance with surface flinger. Sharing the hardware\ncomposer instance has proven to be error prone, with situations where\nboth the vr flinger thread and surface flinger main thread would write\nto the composer at the same time, causing hard to diagnose\ncrashes (b/62925812).\n\nInstead of sharing the hardware composer instance, when switching to vr\nflinger we now delete the existing instance, create a new instance\ndirected to the vr hardware composer shim, and vr flinger creates its\nown composer instance connected to the real hardware composer. By\ncreating a separate composer instance for vr flinger, crashes like the\nones found in b/62925812 are no longer impossible.\n\nMost of the changes in this commit are related to enabling surface\nflinger to delete HWComposer instances cleanly. In particular:\n\n- Previously the hardware composer callbacks (which come in on a\n  hwbinder thread) would land in HWC2::Device and bubble up to the\n  SurfaceFlinger object. But with the new behavior the HWC2::Device\n  might be dead or in the process of being destroyed, so instead we have\n  SurfaceFlinger receive the composer callbacks directly, and forward\n  them to HWComposer and HWC2::Device. We include a composer id field in\n  the callbacks so surface flinger can ignore stale callbacks from dead\n  composer instances.\n\n- Object ownership for HWC2::Display and HWC2::Layer was shared by\n  passing around shared_ptrs to these objects. This was problematic\n  because they referenced and used the HWC2::Device, which can now be\n  destroyed when switching to vr flinger. Simplify the ownership model\n  by having HWC2::Device own (via unique_ptr\u003c\u003e) instances of\n  HWC2::Display, which owns (again via unique_ptr\u003c\u003e) instances of\n  HWC2::Layer. In cases where we previously passed std::shared_ptr\u003c\u003e to\n  HWC2::Display or HWC2::Layer, instead pass non-owning HWC2::Display*\n  and HWC2::Layer* pointers. This ensures clean composer instance\n  teardown with no stale references to the deleted HWC2::Device.\n\n- When the hardware composer instance is destroyed and the HWC2::Layers\n  are removed, notify the android::Layer via a callback, so it can\n  remove the HWC2::Layer from its internal table of hardware composer\n  layers. This removes the burden to explicitly clear out all hardware\n  composer layers when switching to vr flinger, which has been a source\n  of bugs.\n\n- We were missing an mStateLock lock in\n  SurfaceFlinger::setVsyncEnabled(), which was necessary to ensure we\n  were setting vsync on the correct hardware composer instance. Once\n  that lock was added, surface flinger would sometimes deadlock when\n  transitioning to vr flinger, because the surface flinger main thread\n  would acquire mStateLock and then EventControlThread::mMutex, whereas\n  the event control thread would acquire the locks in the opposite\n  order. The changes in EventControlThread.cpp are to ensure it doesn\u0027t\n  hold a lock on EventControlThread::mMutex while calling\n  setVsyncEnabled(), to avoid the deadlock.\n\nI found that without a composer callback registered in vr flinger the\nvsync_event file wasn\u0027t getting vsync timestamps written, so vr flinger\nwould get stuck in an infinite loop trying to parse a vsync\ntimestamp. Since we need to have a callback anyway I changed the code in\nhardware_composer.cpp to get the vsync timestamp from the callback, as\nsurface flinger does. I confirmed the timestamps are the same with\neither method, and this lets us remove some extra code for extracting\nthe vsync timestamp that (probably) wasn\u0027t compatible with all devices\nwe want to run on anyway. I also added a timeout to the vysnc wait so\nwe\u0027ll see an error message in the log if we fail to wait for vsync,\ninstead of looping forever.\n\nBug: 62925812\n\nTest: - Confirmed surface flinger \u003c--\u003e vr flinger switching is robust by\n        switching devices on and off hundreds of times and observing no\n        hardware composer related issues, surface flinger crashes, or\n        hardware composer service crashes.\n\n- Confirmed 2d in vr works as before by going through the OOBE flow on a\n  standalone. This also exercises virtual display creation and usage\n  through surface flinger.\n\n- Added logs to confirm perfect layer/display cleanup when destroying\n  hardware composer instances.\n\n- Tested normal 2d phone usage to confirm basic layer create/destroy\n  functionality works as before.\n\n- Monitored surface flinger file descriptor usage across dozens of\n  surface flinger \u003c--\u003e vr flinger transitions and observed no file\n  descriptor leaks.\n\n- Confirmed the HWC1 code path still compiles.\n\n- Ran the surface flinger tests and confirmed there are no new test\n  failures.\n\n- Ran the hardware composer hidl in passthrough mode on a Marlin and\n  confirmed it works.\n\n- Ran CTS tests for virtual displays and confirmed they all pass.\n\n- Tested Android Auto and confirmed basic graphics functionality still\n  works.\n\nChange-Id: I17dc0e060bfb5cb447ffbaa573b279fc6d2d8bd1\nMerged-In: I17dc0e060bfb5cb447ffbaa573b279fc6d2d8bd1\n"
    },
    {
      "commit": "a564aa8c84efed8555119dff31109e588225b298",
      "tree": "25d8ca461fd0d13cdfb59146c3ad95bd89224072",
      "parents": [
        "6aa5b4e7fdaa86a76e00e2508d7122e59cbd2aa2"
      ],
      "author": {
        "name": "Courtney Goeltzenleuchter",
        "email": "courtneygo@google.com",
        "time": "Wed Aug 02 15:55:06 2017 -0600"
      },
      "committer": {
        "name": "Romain Guy",
        "email": "romainguy@google.com",
        "time": "Fri Aug 04 23:47:03 2017 +0000"
      },
      "message": "Fix build error from diamond merge\n\nSomehow between various merges on master and oc-dr1-dev\nmaster ended up in bad state.\nCL\u0027s involved are:\ncd939aa6622430 Fix build for non-HWC2 targets (master)\n281e8113d0ce Communicate composition buffer dataspace to HWC (oc-dr1-dev)\n79d272442ce13 Communicate composition buffer dataspace to HWC (master)\nI think 281e got merged into master and re-introduced the change that\nwas fixed by cd93.\nTest: make\n\nChange-Id: I087244348392098f516905eb1cebebf0362fcc20\n(cherry picked from commit 6461806da8d8f0677ce337700153e5a972c36593)\n"
    },
    {
      "commit": "a099a24c93bfa599fc5c36a647e946c26f68514f",
      "tree": "a28d284ac7ff816f6cd08a3710a65eb9fbe1e6ed",
      "parents": [
        "d9fd3caf92c541e1ba8120f1e95bfb855183b905"
      ],
      "author": {
        "name": "Kalle Raita",
        "email": "kraita@google.com",
        "time": "Wed Jan 11 11:17:29 2017 -0800"
      },
      "committer": {
        "name": "Kalle Raita",
        "email": "kraita@google.com",
        "time": "Fri Aug 04 15:20:09 2017 -0700"
      },
      "message": "Faked HWC for SurfaceFlinger testing\n\nInfrastructure and initial port of transaction tests. Faking the HWC\nallows exercising the real path through the SurfaceFlinger, not relying\non screen captures. Faked HWC also opens up the possibility of faking\ninteractions like display hotplugs.\n\nThe tests are verifying the composition rectangles instead of a set of\nselect pixels. GLES rendering differences won\u0027t affect the\nresults. Also, the test expectations become clearer.\n\nThe ported transaction tests ran roughly twice as fast when compared\nwith the original transaction test. This is mostly due to the thighter\ncontrol over the vsyncs.\n\nTest: Running the test on Marlin\nChange-Id: I1c876cda78db94c1965498af957e64fdd23459ce\n"
    },
    {
      "commit": "6461806da8d8f0677ce337700153e5a972c36593",
      "tree": "c1c0ab687c4f44ee64cf32d816836e52a3b0dbf4",
      "parents": [
        "9b67ec1df383de4e63b7e0346ec068dda325e072"
      ],
      "author": {
        "name": "Courtney Goeltzenleuchter",
        "email": "courtneygo@google.com",
        "time": "Wed Aug 02 15:55:06 2017 -0600"
      },
      "committer": {
        "name": "Courtney Goeltzenleuchter",
        "email": "courtneygo@google.com",
        "time": "Wed Aug 02 16:00:31 2017 -0600"
      },
      "message": "Fix build error from diamond merge\n\nSomehow between various merges on master and oc-dr1-dev\nmaster ended up in bad state.\nCL\u0027s involved are:\ncd939aa6622430 Fix build for non-HWC2 targets (master)\n281e8113d0ce Communicate composition buffer dataspace to HWC (oc-dr1-dev)\n79d272442ce13 Communicate composition buffer dataspace to HWC (master)\nI think 281e got merged into master and re-introduced the change that\nwas fixed by cd93.\nTest: make\n\nChange-Id: I087244348392098f516905eb1cebebf0362fcc20\n"
    },
    {
      "commit": "d0bdfcb261c4c27cb048ea4abd9e0cd67454bbf5",
      "tree": "df436e307de5641c28db4b7deaed6d97741cbece",
      "parents": [
        "896a01d7ddc323184e5a038226c8b77c78065131",
        "346203f942789898b8be209049fa2c73a29a9330"
      ],
      "author": {
        "name": "Courtney Goeltzenleuchter",
        "email": "courtneygo@google.com",
        "time": "Wed Aug 02 19:51:51 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed Aug 02 19:51:51 2017 +0000"
      },
      "message": "Merge changes If4271719,I9c9b5de9,I46a26a67 into oc-dr1-dev am: ddd9c71272 am: e124f74dff\nam: 346203f942\n\nChange-Id: Ied0a2337150aaf982833dc99dacb7015ae0fa01e\n"
    },
    {
      "commit": "ac8661beae733fde679c3ec190ea4f04974ed0cb",
      "tree": "e0930b493e0aac334ca484b8d9a0bfa843bd27c8",
      "parents": [
        "e15271d37e5bd94caa9c1d766862679d80279d82",
        "ddd9c712727881acbedec8a66535ab31fa2a5b4f"
      ],
      "author": {
        "name": "Courtney Goeltzenleuchter",
        "email": "courtneygo@google.com",
        "time": "Wed Aug 02 19:46:22 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed Aug 02 19:46:22 2017 +0000"
      },
      "message": "Merge changes If4271719,I9c9b5de9,I46a26a67 into oc-dr1-dev\nam: ddd9c71272\n\nChange-Id: Ie3868b140dfc675f450ac5f436f3533c1d2bdc93\n"
    },
    {
      "commit": "346203f942789898b8be209049fa2c73a29a9330",
      "tree": "929adf4b7960edc2d035e35d47ddd3ba52ece821",
      "parents": [
        "98583cc7b2ea775fdbebe2418fbc78c54e766ce4",
        "e124f74dff97dfd178babd6e857a06e23e1d3394"
      ],
      "author": {
        "name": "Courtney Goeltzenleuchter",
        "email": "courtneygo@google.com",
        "time": "Wed Aug 02 19:36:35 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Wed Aug 02 19:36:35 2017 +0000"
      },
      "message": "Merge changes If4271719,I9c9b5de9,I46a26a67 into oc-dr1-dev am: ddd9c71272\nam: e124f74dff\n\nChange-Id: I17280865ba7570933c3bfd04f2104704ac854607\n"
    },
    {
      "commit": "281e8113d0ce20c702e847caf971663021eb65e3",
      "tree": "1ecc306a089ac5a1743427afe9ad17236836c707",
      "parents": [
        "3329c085ef2747b7ab16011da3f0264301fdd922"
      ],
      "author": {
        "name": "Courtney Goeltzenleuchter",
        "email": "courtneygo@google.com",
        "time": "Thu Jul 13 17:54:01 2017 -0600"
      },
      "committer": {
        "name": "Courtney Goeltzenleuchter",
        "email": "courtneygo@google.com",
        "time": "Tue Aug 01 10:53:32 2017 -0600"
      },
      "message": "Communicate composition buffer dataspace to HWC\n\nTest: adb shell dumpsys SurfaceFlinger\n      look for dataspace info in DisplayDevice section\nBug: 63146977\nChange-Id: If427171994fbc91faacf5bad9cc736ddfbd35ec3\n(cherry picked from commit 79d272442ce13418c3ea81c95d7fea0159b4b481)\n"
    },
    {
      "commit": "a2eb34cfbe089deb9a519e9702e17d9dfe26f9e8",
      "tree": "292e7d3fb3a109268e8e5304b789023b10ecbbbf",
      "parents": [
        "8cbab7c3c93c1bc9364a81726f02eeacc4a9356b"
      ],
      "author": {
        "name": "Ian Elliott",
        "email": "ianelliott@google.com",
        "time": "Tue Jul 18 11:05:49 2017 -0600"
      },
      "committer": {
        "name": "Ian Elliott",
        "email": "ianelliott@google.com",
        "time": "Mon Jul 31 15:34:11 2017 +0000"
      },
      "message": "Have the Surface class track the buffer age.\n\nHave the Surface class track the buffer age, so that Surface::query()\ncan return the buffer age without having to use a binder call to\nBufferQueueProducer::query().  The idea is for\nBufferQueueProducer::dequeueBuffer() to return the value, which the\nSurface class will cache for later use by Surface::query().\n\nBug: b/27903668\nTest: Use systrace to no ensure query binder call after dequeueBuffer.\nChange-Id: I106a7bd27461d381f0bd84df70d804de56a128ab\n(cherry picked from commit d11b044864be525a1646f93106ab496195bb8239)\n"
    },
    {
      "commit": "d11b044864be525a1646f93106ab496195bb8239",
      "tree": "259c69333b05790f7b79031ea50475977e1765e3",
      "parents": [
        "dba34b72c40dbb354fe7dc67e43123ea30900915"
      ],
      "author": {
        "name": "Ian Elliott",
        "email": "ianelliott@google.com",
        "time": "Tue Jul 18 11:05:49 2017 -0600"
      },
      "committer": {
        "name": "Ian Elliott",
        "email": "ianelliott@google.com",
        "time": "Thu Jul 27 08:51:35 2017 -0600"
      },
      "message": "Have the Surface class track the buffer age.\n\nHave the Surface class track the buffer age, so that Surface::query()\ncan return the buffer age without having to use a binder call to\nBufferQueueProducer::query().  The idea is for\nBufferQueueProducer::dequeueBuffer() to return the value, which the\nSurface class will cache for later use by Surface::query().\n\nBug: b/27903668\nTest: Use systrace to no ensure query binder call after dequeueBuffer.\nChange-Id: I106a7bd27461d381f0bd84df70d804de56a128ab\n"
    },
    {
      "commit": "74074f158a4535d34bfd845240c00f12e13cb614",
      "tree": "98bbc8d7eaafbd40381697c764e14dcc39ed37a2",
      "parents": [
        "56954aa36e7a81217624e58e195f357404759237",
        "ad74480d6d9b15878bb14701aa81e73f86f70c75"
      ],
      "author": {
        "name": "Ian Elliott",
        "email": "ianelliott@google.com",
        "time": "Wed Jul 26 21:54:47 2017 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jul 26 21:54:47 2017 +0000"
      },
      "message": "Merge \"Revert \"Have the Surface class track the buffer age.\"\""
    },
    {
      "commit": "ad74480d6d9b15878bb14701aa81e73f86f70c75",
      "tree": "ce5b9c9f173181c9b45ec7a108bb3938adfc29bb",
      "parents": [
        "b4f7493fbdb1d9d5b437a1dcb82e98b1531f4e3e"
      ],
      "author": {
        "name": "Ian Elliott",
        "email": "ianelliott@google.com",
        "time": "Wed Jul 26 21:46:43 2017 +0000"
      },
      "committer": {
        "name": "Ian Elliott",
        "email": "ianelliott@google.com",
        "time": "Wed Jul 26 21:46:43 2017 +0000"
      },
      "message": "Revert \"Have the Surface class track the buffer age.\"\n\nThis reverts commit b4f7493fbdb1d9d5b437a1dcb82e98b1531f4e3e.\n\nChange-Id: I9a783c8e768637bd73ac53a856e5f42703dcd82b\n"
    },
    {
      "commit": "56954aa36e7a81217624e58e195f357404759237",
      "tree": "e233b5088efe3cfb82a6166873ada67accdaac7a",
      "parents": [
        "1b5589b9c69970b64abaf982e583a97e1b53c2bd",
        "b4f7493fbdb1d9d5b437a1dcb82e98b1531f4e3e"
      ],
      "author": {
        "name": "Ian Elliott",
        "email": "ianelliott@google.com",
        "time": "Wed Jul 26 20:45:22 2017 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Wed Jul 26 20:45:22 2017 +0000"
      },
      "message": "Merge \"Have the Surface class track the buffer age.\""
    },
    {
      "commit": "b4f7493fbdb1d9d5b437a1dcb82e98b1531f4e3e",
      "tree": "e6aef13bfd9d4ee5f0fb956e0715c95bc27801ac",
      "parents": [
        "b8b53824fb8b38c24072b482a18a95b4a55d8943"
      ],
      "author": {
        "name": "Ian Elliott",
        "email": "ianelliott@google.com",
        "time": "Tue Jul 18 11:05:49 2017 -0600"
      },
      "committer": {
        "name": "Ian Elliott",
        "email": "ianelliott@google.com",
        "time": "Tue Jul 25 14:18:53 2017 -0600"
      },
      "message": "Have the Surface class track the buffer age.\n\nHave the Surface class track the buffer age, so that Surface::query()\ncan return the buffer age without having to use a binder call to\nBufferQueueProducer::query().  The idea is for\nBufferQueueProducer::dequeueBuffer() to return the value, which the\nSurface class will cache for later use by Surface::query().\n\nBug: b/27903668\nTest: Use systrace to no ensure query binder call after dequeueBuffer.\n\nChange-Id: I7a4d79d02ea68781b464a463f0ecdf64978b7fb8\n"
    },
    {
      "commit": "cd939aa6622430482d2c79bb9deefb67d3ee4611",
      "tree": "0b66a52f960b9d87ef4b96ef52bbf3d870e9ad26",
      "parents": [
        "79d272442ce13418c3ea81c95d7fea0159b4b481"
      ],
      "author": {
        "name": "Courtney Goeltzenleuchter",
        "email": "courtneygo@google.com",
        "time": "Tue Jul 25 10:34:27 2017 -0600"
      },
      "committer": {
        "name": "Courtney Goeltzenleuchter",
        "email": "courtneygo@google.com",
        "time": "Tue Jul 25 10:38:29 2017 -0600"
      },
      "message": "Fix build for non-HWC2 targets\n\nFix build error introduced by ag/2528660\nTest: lunch mini_x86-userdebug; make\n\nChange-Id: I39b758c6456a6f334479ec4aed97db1659823a8b\n"
    },
    {
      "commit": "79d272442ce13418c3ea81c95d7fea0159b4b481",
      "tree": "88a9daf32f436d4cd5e75392206152f3f9303d39",
      "parents": [
        "19987a8cb2ca05e45876946b1eab66cc9d1f9a77"
      ],
      "author": {
        "name": "Courtney Goeltzenleuchter",
        "email": "courtneygo@google.com",
        "time": "Thu Jul 13 17:54:01 2017 -0600"
      },
      "committer": {
        "name": "Courtney Goeltzenleuchter",
        "email": "courtneygo@google.com",
        "time": "Mon Jul 24 17:18:06 2017 -0600"
      },
      "message": "Communicate composition buffer dataspace to HWC\n\nTest: adb shell dumpsys SurfaceFlinger\n      look for dataspace info in DisplayDevice section\nBug: 63146977\nChange-Id: If427171994fbc91faacf5bad9cc736ddfbd35ec3\n"
    },
    {
      "commit": "19987a8cb2ca05e45876946b1eab66cc9d1f9a77",
      "tree": "e9909d4ee82941d0e385913f0ffa6517e34b3b31",
      "parents": [
        "9f484649648a86d607d10bb18bbbb81fa1419e5b"
      ],
      "author": {
        "name": "Courtney Goeltzenleuchter",
        "email": "courtneygo@google.com",
        "time": "Fri Jul 14 12:16:56 2017 -0600"
      },
      "committer": {
        "name": "Courtney Goeltzenleuchter",
        "email": "courtneygo@google.com",
        "time": "Mon Jul 24 17:17:56 2017 -0600"
      },
      "message": "Dump FramebufferSurface dataspace\n\nFor debugging, dump the dataspace details for the\nFramebufferSurface. Value will be 0 (UNKNOWN) if HWC is\ndoing composition.\nTest: adb shell dumpsys SurfaceFlinger\n      Look for FramebufferSurface details.\nBug: 63146977\n\nChange-Id: I9eb40739a616246bdac6e039270609d42eb56b59\n"
    },
    {
      "commit": "49cdc635a222a495b5b5e17962c31a308003e23d",
      "tree": "f4fe99ce4fae522d9c6e08c08293d2cde00870ef",
      "parents": [
        "d9517fe958bc374aacb21e17a78480c3af7163a1",
        "f8ca9a0875685003defb13f1a342bb8bd37cf4e0"
      ],
      "author": {
        "name": "Chia-I Wu",
        "email": "olv@google.com",
        "time": "Thu Jun 22 20:04:12 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu Jun 22 20:04:12 2017 +0000"
      },
      "message": "Merge \"surfaceflinger: discard stale commands\" into oc-dev\nam: f8ca9a0875\n\nChange-Id: Ief69f6fcf0c738612b14b94d65b3ae1555973d6c\n"
    },
    {
      "commit": "89283e56d6b76464ae9a61b5da5d2ba8e65c7d90",
      "tree": "d497978a48cab2196cfbae71ed20297753f94c65",
      "parents": [
        "8976c6ae3710f3f524150f07be870075c9b1de9d",
        "269c2361096cb8a17ea5fedbd20f800cd1b65d05"
      ],
      "author": {
        "name": "Fabien Sanglard",
        "email": "sanglardf@google.com",
        "time": "Thu Jun 22 20:02:43 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu Jun 22 20:02:43 2017 +0000"
      },
      "message": "Disable skip Validate on client composition\nam: 269c236109\n\nChange-Id: Ib0d2f8a9e59cf4618ed029fe35391f566d11bcfb\n"
    },
    {
      "commit": "f8ca9a0875685003defb13f1a342bb8bd37cf4e0",
      "tree": "e92f25db27279e9372a286d953df51209c47eaaf",
      "parents": [
        "be597daebd63feeb786855f8af6c96a706eb283c",
        "0c6ce4608fc022608537162dd919e7f729b9cb77"
      ],
      "author": {
        "name": "Chia-I Wu",
        "email": "olv@google.com",
        "time": "Thu Jun 22 19:59:35 2017 +0000"
      },
      "committer": {
        "name": "Android (Google) Code Review",
        "email": "android-gerrit@google.com",
        "time": "Thu Jun 22 19:59:36 2017 +0000"
      },
      "message": "Merge \"surfaceflinger: discard stale commands\" into oc-dev"
    },
    {
      "commit": "269c2361096cb8a17ea5fedbd20f800cd1b65d05",
      "tree": "4ee083e02299902597699ae8e77fa18787908f58",
      "parents": [
        "249c0ae80a6e5690d091294c4447cb3facafbc37"
      ],
      "author": {
        "name": "Fabien Sanglard",
        "email": "sanglardf@google.com",
        "time": "Thu Jun 22 11:35:16 2017 -0700"
      },
      "committer": {
        "name": "Fabien Sanglard",
        "email": "sanglardf@google.com",
        "time": "Thu Jun 22 12:30:31 2017 -0700"
      },
      "message": "Disable skip Validate on client composition\n\nSurfaceFlinger should not skip validate when GLComposition is\nneeded. This can happen when SF decides to force GLComposition\n(like when a screen rotation occurs).\n\nBug: 62906801\nTest: Manual\nChange-Id: I248146eade395a124cb149773287abd88ae36511\n"
    },
    {
      "commit": "0c6ce4608fc022608537162dd919e7f729b9cb77",
      "tree": "69694d8a31d0f59f84ffe52f34ae00e9893caf8a",
      "parents": [
        "249c0ae80a6e5690d091294c4447cb3facafbc37"
      ],
      "author": {
        "name": "Chia-I Wu",
        "email": "olv@google.com",
        "time": "Thu Jun 22 10:48:28 2017 -0700"
      },
      "committer": {
        "name": "Chia-I Wu",
        "email": "olv@google.com",
        "time": "Thu Jun 22 19:01:07 2017 +0000"
      },
      "message": "surfaceflinger: discard stale commands\n\nWhen we skip validate, we may have stale commands on the command\nbuffer.  They should be discarded.\n\nBug: 62906801\nTest: manual\nChange-Id: Ie7921ba75ab2252b834cda6924e1fcfdf236f759\n"
    },
    {
      "commit": "8976c6ae3710f3f524150f07be870075c9b1de9d",
      "tree": "c22f19bbc553a11a6f5cb432587039776e783727",
      "parents": [
        "8d897e60031d1c772070a5a2935fb5080ce2482e",
        "249c0ae80a6e5690d091294c4447cb3facafbc37"
      ],
      "author": {
        "name": "Fabien Sanglard",
        "email": "sanglardf@google.com",
        "time": "Thu Jun 22 05:58:06 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu Jun 22 05:58:06 2017 +0000"
      },
      "message": "Skip Validate\nam: 249c0ae80a\n\nChange-Id: I336fce473d21e5fdfb80ad8eb48f1df5a24497d8\n"
    },
    {
      "commit": "249c0ae80a6e5690d091294c4447cb3facafbc37",
      "tree": "ea560d0f5a647273c6f7d182bb2137087fb674a0",
      "parents": [
        "1b02b6329e7a2e3ed60b2209abec1f70c33c3d18"
      ],
      "author": {
        "name": "Fabien Sanglard",
        "email": "sanglardf@google.com",
        "time": "Mon Jun 19 19:22:36 2017 -0700"
      },
      "committer": {
        "name": "Iliyan Malchev",
        "email": "malchev@google.com",
        "time": "Thu Jun 22 04:48:06 2017 +0000"
      },
      "message": "Skip Validate\n\nb/37474580\nb/62806392\n\nTest: marlin, ryu\n\nChange-Id: I09e0c52cb7c914dcd883dc771d97a365c89f7037\n"
    },
    {
      "commit": "d8449e55a6461802514e3bd62e90e72070d3ffb4",
      "tree": "a4b175ec36300d1df6fc3f64a2802b229a2cd10d",
      "parents": [
        "b209c12155da92f2756c016eda55636c1d8952c1",
        "c175253b6d0738aec6235ef1c2e723ad36fcd346"
      ],
      "author": {
        "name": "Alistair Strachan",
        "email": "alistair.strachan@imgtec.com",
        "time": "Thu Jun 15 17:30:19 2017 +0000"
      },
      "committer": {
        "name": "android-build-merger",
        "email": "android-build-merger@google.com",
        "time": "Thu Jun 15 17:30:19 2017 +0000"
      },
      "message": "Fix getDisplayInfo() for SurfaceFlinger in HWC2 mode.\nam: c175253b6d\n\nChange-Id: I55ca473facef90f00eb1a401d9bc8ad7a36e4878\n"
    },
    {
      "commit": "c175253b6d0738aec6235ef1c2e723ad36fcd346",
      "tree": "4727c105293e239028eae5a7ce5a77b7e6b101e4",
      "parents": [
        "fd43dc6723e721c41fb5e0d84258672a036cc006"
      ],
      "author": {
        "name": "Alistair Strachan",
        "email": "alistair.strachan@imgtec.com",
        "time": "Wed Jun 07 16:34:44 2017 -0700"
      },
      "committer": {
        "name": "Fabien Sanglard",
        "email": "sanglardf@google.com",
        "time": "Thu Jun 15 00:44:01 2017 +0000"
      },
      "message": "Fix getDisplayInfo() for SurfaceFlinger in HWC2 mode.\n\nWhen HWC2 mode is enabled in SurfaceFlinger, the getDisplayInfo()\nfunction would fail to return the correct active mode in some cases.\n\nThis bug was only noticable if you had more than one mode registered\nby the HWC2 backend.\n\nThe SurfaceComposerClient::getDisplayInfo() function works by calling\ngetDisplayConfigs(), and de-referencing the config at the index\nreturned by getActiveConfig(). The active config returned was correct,\nbut the getDisplayConfigs() array was not properly sorted.\n\nTracing this back, this problem occurs because the configId is stored\nalongside the config in an unordered_map, so when this is converted\nto a vector and the configId is discarded, the conversion must be\nsorted correctly; it can\u0027t just be the hash order returned from\nthe unordered_map.\n\nThere are a few ways to fix this problem, but the easiest was to nip\nthe problem in the bud by not allowing an unsorted list of configs\nto exist on the base HWC2 class. It may be better still to just get\nrid of the map and go back to a vector, as this data is more often\nused as an array than it is indexed by configId, so the use of an\nunordered_map was probably overkill.\n\nChange-Id: Ibfb015a6d9b49c870f37a1c892f15f90abbd1e2c\nBug: 62617569\nTest: ./cts-tradefed run cts -m CtsViewTestCases -t android.view.cts.DisplayRefreshRateTest#testRefreshRate\n"
    },
    {
      "commit": "c988ee4c4c21331e2a33467dc899ebb561035b0b",
      "tree": "2c817e393f8d8286f79506709006f45c9960dc94",
      "parents": [
        "a5978594a80a0632e9c35b5e6e02edda4f430d70"
      ],
      "author": {
        "name": "Courtney Goeltzenleuchter",
        "email": "courtneygo@google.com",
        "time": "Wed May 31 17:56:46 2017 -0600"
      },
      "committer": {
        "name": "Courtney Goeltzenleuchter",
        "email": "courtneygo@google.com",
        "time": "Fri Jun 02 12:17:27 2017 -0600"
      },
      "message": "Remove redundent layer setDataspace calls.\n\nCache the layer\u0027s dataspace in hwc2 and only send\nto the HAL when it changes. Allows HAL to optimize\nuse of layer.\n\nBug: 38396128\nTest: Manually checked systraces on Pixel\nChange-Id: Ia94bebe7de9f79d01ae19b9917591837d865fea9\n"
    },
    {
      "commit": "cb496acbe593326e8d5d563847067d02b2df40ec",
      "tree": "be669654542a7fe19d85d17d89e092b1880ccb3e",
      "parents": [
        "177759a90584489b1b77cdaf3818ebdb79b1b9bf"
      ],
      "author": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Mon May 22 14:21:00 2017 -0700"
      },
      "committer": {
        "name": "Mathias Agopian",
        "email": "mathias@google.com",
        "time": "Fri May 26 15:16:36 2017 -0700"
      },
      "message": "use 64-bits usage bits almost everywhere\n\nRevert \"Revert \"use 64-bits usage bits almost everywhere\"\"\nThis reverts commit 1671de0068de40f57288628d4b757a1c84962a62.\n\nTest: manual, build\nBug: 33350696\nBug: 38466700\nChange-Id: Ia2f51b97137dba754b1938dfb1e235f4babc8a88"
    }
  ],
  "next": "d8ac4fd17a71b8b523121186b8a03212cd5122fe"
}
