Hwc2Test.cpp revision bad1bc78ef50648fadbe725a1fe1c28d62097351
14d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall/* 24d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * Copyright (C) 2016 The Android Open Source Project 34d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * 44d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * Licensed under the Apache License, Version 2.0 (the "License"); 54d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * you may not use this file except in compliance with the License. 64d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * You may obtain a copy of the License at 74d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * 84d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * http://www.apache.org/licenses/LICENSE-2.0 94d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * 104d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * Unless required by applicable law or agreed to in writing, software 114d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * distributed under the License is distributed on an "AS IS" BASIS, 124d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * See the License for the specific language governing permissions and 144d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * limitations under the License. 154d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall */ 164d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 174d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall#include <array> 18cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall#include <unordered_set> 19563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall#include <unordered_map> 204d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall#include <gtest/gtest.h> 214d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall#include <dlfcn.h> 225a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall#include <android-base/unique_fd.h> 234d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall#include <hardware/hardware.h> 24563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall#include <sync/sync.h> 254d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 264d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall#define HWC2_INCLUDE_STRINGIFICATION 274d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall#define HWC2_USE_CPP11 284d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall#include <hardware/hwcomposer2.h> 294d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall#undef HWC2_INCLUDE_STRINGIFICATION 304d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall#undef HWC2_USE_CPP11 314d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 326bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall#include "Hwc2TestLayer.h" 33273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall#include "Hwc2TestLayers.h" 34f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall#include "Hwc2TestClientTarget.h" 35bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall#include "Hwc2TestVirtualDisplay.h" 366bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 37cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wallvoid hwc2TestHotplugCallback(hwc2_callback_data_t callbackData, 38cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2_display_t display, int32_t connected); 39572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wallvoid hwc2TestVsyncCallback(hwc2_callback_data_t callbackData, 40572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_display_t display, int64_t timestamp); 41cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 424d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wallclass Hwc2Test : public testing::Test { 434d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wallpublic: 444d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 454d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall virtual void SetUp() 464d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall { 474d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall hw_module_t const* hwc2Module; 484d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 494d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall int err = hw_get_module(HWC_HARDWARE_MODULE_ID, &hwc2Module); 504d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall ASSERT_GE(err, 0) << "failed to get hwc hardware module: " 514d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall << strerror(-err); 524d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 534d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall /* The following method will fail if you have not run 544d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * "adb shell stop" */ 554d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall err = hwc2_open(hwc2Module, &mHwc2Device); 564d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall ASSERT_GE(err, 0) << "failed to open hwc hardware module: " 574d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall << strerror(-err); 58cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 59cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall populateDisplays(); 604d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall } 614d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 624d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall virtual void TearDown() 634d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall { 641db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 651db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (auto itr = mLayers.begin(); itr != mLayers.end();) { 661db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_display_t display = itr->first; 671db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_layer_t layer = itr->second; 681db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall itr++; 691db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall /* Destroys and removes the layer from mLayers */ 701db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall destroyLayer(display, layer); 711db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 721db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 7303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall for (auto itr = mActiveDisplays.begin(); itr != mActiveDisplays.end();) { 7403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_display_t display = *itr; 7503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall itr++; 7603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall /* Sets power mode to off and removes the display from 7703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall * mActiveDisplays */ 7803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall setPowerMode(display, HWC2_POWER_MODE_OFF); 7903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 8003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 81bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall for (auto itr = mVirtualDisplays.begin(); itr != mVirtualDisplays.end();) { 82bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall hwc2_display_t display = *itr; 83bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall itr++; 84bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall /* Destroys virtual displays */ 85bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall destroyVirtualDisplay(display); 86bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall } 87bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 884d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall if (mHwc2Device) 894d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall hwc2_close(mHwc2Device); 904d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall } 914d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 92a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall void registerCallback(hwc2_callback_descriptor_t descriptor, 93a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall hwc2_callback_data_t callbackData, hwc2_function_pointer_t pointer, 94a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall hwc2_error_t* outErr = nullptr) 95a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall { 96a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_REGISTER_CALLBACK>( 97a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall getFunction(HWC2_FUNCTION_REGISTER_CALLBACK)); 98a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 99a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 100a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, descriptor, 101a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall callbackData, pointer)); 102a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall if (outErr) { 103a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall *outErr = err; 104a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall } else { 105a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to register callback"; 106a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall } 107a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall } 108a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 109cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall void getDisplayType(hwc2_display_t display, hwc2_display_type_t* outType, 110cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2_error_t* outErr = nullptr) 111cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall { 112cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_GET_DISPLAY_TYPE>( 113cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall getFunction(HWC2_FUNCTION_GET_DISPLAY_TYPE)); 114cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 115cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 116cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 117cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall reinterpret_cast<int32_t*>(outType))); 118cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall if (outErr) { 119cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall *outErr = err; 120cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } else { 121cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to get display type"; 122cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 123cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 124cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 125cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall /* If the populateDisplays function is still receiving displays and the 126cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall * display is connected, the display handle is stored in mDisplays. */ 127cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall void hotplugCallback(hwc2_display_t display, int32_t connected) 128cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall { 129cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::lock_guard<std::mutex> lock(mHotplugMutex); 130cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 131cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall if (mHotplugStatus != Hwc2TestHotplugStatus::Receiving) 132cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall return; 133cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 134cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall if (connected == HWC2_CONNECTION_CONNECTED) 135cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall mDisplays.insert(display); 136cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 137cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall mHotplugCv.notify_all(); 138cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 139cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1401db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall void createLayer(hwc2_display_t display, hwc2_layer_t* outLayer, 1411db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_error_t* outErr = nullptr) 1421db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall { 1431db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_CREATE_LAYER>( 1441db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall getFunction(HWC2_FUNCTION_CREATE_LAYER)); 1451db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 1461db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 1471db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 1481db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall outLayer)); 1491db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 1501db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall if (err == HWC2_ERROR_NONE) 1511db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall mLayers.insert(std::make_pair(display, *outLayer)); 1521db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 1531db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall if (outErr) { 1541db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall *outErr = err; 1551db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } else { 1561db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to create layer"; 1571db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 1581db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 1591db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 1601db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall void destroyLayer(hwc2_display_t display, hwc2_layer_t layer, 1611db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_error_t* outErr = nullptr) 1621db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall { 1631db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_DESTROY_LAYER>( 1641db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall getFunction(HWC2_FUNCTION_DESTROY_LAYER)); 1651db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 1661db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 1671db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer)); 1681db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 1691db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall if (err == HWC2_ERROR_NONE) 1701db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall mLayers.erase(std::make_pair(display, layer)); 1711db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 1721db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall if (outErr) { 1731db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall *outErr = err; 1741db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } else { 1751db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to destroy layer " 1761db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall << layer; 1771db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 1781db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 1791db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 180cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall void getDisplayAttribute(hwc2_display_t display, hwc2_config_t config, 181cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_attribute_t attribute, int32_t* outValue, 182cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_error_t* outErr = nullptr) 183cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall { 184cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_GET_DISPLAY_ATTRIBUTE>( 185cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall getFunction(HWC2_FUNCTION_GET_DISPLAY_ATTRIBUTE)); 186cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 187cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 188cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, config, 189cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall attribute, outValue)); 190cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 191cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall if (outErr) { 192cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall *outErr = err; 193cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } else { 194cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to get display attribute " 195cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall << getAttributeName(attribute) << " for config " << config; 196cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 197cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 198cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 199cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall void getDisplayConfigs(hwc2_display_t display, 200cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t>* outConfigs, 201cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_error_t* outErr = nullptr) 202cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall { 203cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_GET_DISPLAY_CONFIGS>( 204cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall getFunction(HWC2_FUNCTION_GET_DISPLAY_CONFIGS)); 205cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 206cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 207cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall uint32_t numConfigs = 0; 208cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 209cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 210cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall &numConfigs, nullptr)); 211cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 212cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall if (err == HWC2_ERROR_NONE) { 213cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall outConfigs->resize(numConfigs); 214cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 215cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 216cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall &numConfigs, outConfigs->data())); 217cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 218cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 219cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall if (outErr) { 220cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall *outErr = err; 221cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } else { 222cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to get configs for" 223cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall " display " << display; 224cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 225cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 226cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 22793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall void getActiveConfig(hwc2_display_t display, hwc2_config_t* outConfig, 22893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_error_t* outErr = nullptr) 22993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall { 23093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_GET_ACTIVE_CONFIG>( 23193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall getFunction(HWC2_FUNCTION_GET_ACTIVE_CONFIG)); 23293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 23393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 23493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 23593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall outConfig)); 23693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall if (outErr) { 23793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall *outErr = err; 23893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } else { 23993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to get active config on" 24093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall " display " << display; 24193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 24293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 24393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 24493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall void setActiveConfig(hwc2_display_t display, hwc2_config_t config, 24593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_error_t* outErr = nullptr) 24693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall { 24793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_ACTIVE_CONFIG>( 24893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall getFunction(HWC2_FUNCTION_SET_ACTIVE_CONFIG)); 24993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 25093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 25193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, config)); 25293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall if (outErr) { 25393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall *outErr = err; 25493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } else { 25593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set active config " 25693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall << config; 25793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 25893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 25993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 26003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall void getDozeSupport(hwc2_display_t display, int32_t* outSupport, 26103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_error_t* outErr = nullptr) 26203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall { 26303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_GET_DOZE_SUPPORT>( 26403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall getFunction(HWC2_FUNCTION_GET_DOZE_SUPPORT)); 26503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 26603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 26703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 26803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall outSupport)); 26903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (outErr) { 27003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall *outErr = err; 27103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } else { 27203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to get doze support on" 27303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall " display " << display; 27403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 27503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 27603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 27703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall void setPowerMode(hwc2_display_t display, hwc2_power_mode_t mode, 27803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_error_t* outErr = nullptr) 27903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall { 28003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_POWER_MODE>( 28103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall getFunction(HWC2_FUNCTION_SET_POWER_MODE)); 28203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 28303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 28403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 28503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall mode)); 28603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (outErr) { 28703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall *outErr = err; 28803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (err != HWC2_ERROR_NONE) 28903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall return; 29003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } else { 29103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set power mode " 29203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall << getPowerModeName(mode) << " on display " << display; 29303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 29403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 29503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (mode == HWC2_POWER_MODE_OFF) { 29603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall mActiveDisplays.erase(display); 29703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } else { 29803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall mActiveDisplays.insert(display); 29903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 30003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 30103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 302572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall void setVsyncEnabled(hwc2_display_t display, hwc2_vsync_t enabled, 303572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_error_t* outErr = nullptr) 304572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall { 305572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_VSYNC_ENABLED>( 306572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall getFunction(HWC2_FUNCTION_SET_VSYNC_ENABLED)); 307572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 308572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 309572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 310572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall enabled)); 311572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall if (outErr) { 312572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall *outErr = err; 313572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } else { 314572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set vsync enabled " 315572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall << getVsyncName(enabled); 316572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 317572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 318572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 319572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall void vsyncCallback(hwc2_display_t display, int64_t timestamp) 320572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall { 321572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall std::lock_guard<std::mutex> lock(mVsyncMutex); 322572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall mVsyncDisplay = display; 323572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall mVsyncTimestamp = timestamp; 324572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall mVsyncCv.notify_all(); 325572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 326572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 327dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall void getDisplayName(hwc2_display_t display, std::string* outName, 328dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall hwc2_error_t* outErr = nullptr) 329dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall { 330dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_GET_DISPLAY_NAME>( 331dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall getFunction(HWC2_FUNCTION_GET_DISPLAY_NAME)); 332dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 333dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 334dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall uint32_t size = 0; 335dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 336dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, &size, 337dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall nullptr)); 338dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 339dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall if (err == HWC2_ERROR_NONE) { 340dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall std::vector<char> name(size); 341dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 342dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, &size, 343dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall name.data())); 344dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 345dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall outName->assign(name.data()); 346dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall } 347dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 348dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall if (outErr) { 349dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall *outErr = err; 350dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall } else { 351dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to get display name for " 352dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall << display; 353dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall } 354dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall } 355dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 3566bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall void setLayerCompositionType(hwc2_display_t display, hwc2_layer_t layer, 3576bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_composition_t composition, hwc2_error_t* outErr = nullptr) 3586bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall { 3596bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_COMPOSITION_TYPE>( 3606bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_COMPOSITION_TYPE)); 3616bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 3626bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 3636bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 3646bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall composition)); 3656bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall if (outErr) { 3666bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall *outErr = err; 3676bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } else { 3686bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer composition" 3696bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall " type " << getCompositionName(composition); 3706bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 3716bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 3726bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 3732a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall void setCursorPosition(hwc2_display_t display, hwc2_layer_t layer, 3742a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall int32_t x, int32_t y, hwc2_error_t* outErr = nullptr) 3752a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall { 3762a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_CURSOR_POSITION>( 3772a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall getFunction(HWC2_FUNCTION_SET_CURSOR_POSITION)); 3782a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 3792a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 3802a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, x, 3812a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall y)); 3822a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall if (outErr) { 3832a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall *outErr = err; 3842a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall } else { 3852a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set cursor position"; 3862a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall } 3872a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall } 3882a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 389ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall void setLayerBlendMode(hwc2_display_t display, hwc2_layer_t layer, 390ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall hwc2_blend_mode_t mode, hwc2_error_t* outErr = nullptr) 391ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall { 392ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_BLEND_MODE>( 393ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_BLEND_MODE)); 394ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 395ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 396ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 397ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall mode)); 398ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall if (outErr) { 399ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall *outErr = err; 400ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall } else { 401ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer blend mode " 402ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall << getBlendModeName(mode); 403ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall } 404ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall } 405ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 4065a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall void setLayerBuffer(hwc2_display_t display, hwc2_layer_t layer, 4075a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall buffer_handle_t buffer, int32_t acquireFence, 4085a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall hwc2_error_t* outErr = nullptr) 4095a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall { 4105a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_BUFFER>( 4115a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_BUFFER)); 4125a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 4135a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 4145a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 4155a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall buffer, acquireFence)); 4165a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall if (outErr) { 4175a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall *outErr = err; 4185a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall } else { 4195a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer buffer"; 4205a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall } 4215a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall } 4225a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 423ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall void setLayerColor(hwc2_display_t display, hwc2_layer_t layer, 424ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall hwc_color_t color, hwc2_error_t* outErr = nullptr) 425ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall { 426ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_COLOR>( 427ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_COLOR)); 428ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 429ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 430ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 431ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall color)); 432ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall if (outErr) { 433ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall *outErr = err; 434ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall } else { 435ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer color"; 436ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall } 437ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall } 438ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 439b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall void setLayerDataspace(hwc2_display_t display, hwc2_layer_t layer, 440b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall android_dataspace_t dataspace, hwc2_error_t* outErr = nullptr) 441b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall { 442b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_DATASPACE>( 443b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_DATASPACE)); 444b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 445b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 446b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 447b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall layer, dataspace)); 448b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall if (outErr) { 449b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall *outErr = err; 450b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall } else { 451b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer dataspace"; 452b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall } 453b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall } 454b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 455600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall void setLayerDisplayFrame(hwc2_display_t display, hwc2_layer_t layer, 456600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall const hwc_rect_t& displayFrame, hwc2_error_t* outErr = nullptr) 457600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall { 458600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_DISPLAY_FRAME>( 459600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_DISPLAY_FRAME)); 460600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 461600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 462600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 463600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall displayFrame)); 464600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall if (outErr) { 465600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall *outErr = err; 466600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall } else { 467600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer display" 468600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall " frame"; 469600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall } 470600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall } 471600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 4722b1f53060ea8587a428f826cf7890354ff124722Marissa Wall void setLayerPlaneAlpha(hwc2_display_t display, hwc2_layer_t layer, 4732b1f53060ea8587a428f826cf7890354ff124722Marissa Wall float alpha, hwc2_error_t* outErr = nullptr) 4742b1f53060ea8587a428f826cf7890354ff124722Marissa Wall { 4752b1f53060ea8587a428f826cf7890354ff124722Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_PLANE_ALPHA>( 4762b1f53060ea8587a428f826cf7890354ff124722Marissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_PLANE_ALPHA)); 4772b1f53060ea8587a428f826cf7890354ff124722Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 4782b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 4792b1f53060ea8587a428f826cf7890354ff124722Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 4802b1f53060ea8587a428f826cf7890354ff124722Marissa Wall alpha)); 4812b1f53060ea8587a428f826cf7890354ff124722Marissa Wall if (outErr) { 4822b1f53060ea8587a428f826cf7890354ff124722Marissa Wall *outErr = err; 4832b1f53060ea8587a428f826cf7890354ff124722Marissa Wall } else { 4842b1f53060ea8587a428f826cf7890354ff124722Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer plane alpha " 4852b1f53060ea8587a428f826cf7890354ff124722Marissa Wall << alpha; 4862b1f53060ea8587a428f826cf7890354ff124722Marissa Wall } 4872b1f53060ea8587a428f826cf7890354ff124722Marissa Wall } 4882b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 489c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall void setLayerSourceCrop(hwc2_display_t display, hwc2_layer_t layer, 490c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall const hwc_frect_t& sourceCrop, hwc2_error_t* outErr = nullptr) 491c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall { 492c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_SOURCE_CROP>( 493c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_SOURCE_CROP)); 494c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 495c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 496c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 497c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall sourceCrop)); 498c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall if (outErr) { 499c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall *outErr = err; 500c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall } else { 501c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer source crop"; 502c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall } 503c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall } 504c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 505ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall void setLayerSurfaceDamage(hwc2_display_t display, hwc2_layer_t layer, 506ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall const hwc_region_t& surfaceDamage, hwc2_error_t* outErr = nullptr) 507ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall { 508ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_SURFACE_DAMAGE>( 509ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_SURFACE_DAMAGE)); 510ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 511ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 512ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 513ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall surfaceDamage)); 514ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall if (outErr) { 515ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall *outErr = err; 516ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall } else { 517ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer surface" 518ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall " damage"; 519ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall } 520ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall } 521ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 522ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall void setLayerTransform(hwc2_display_t display, hwc2_layer_t layer, 523ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall hwc_transform_t transform, hwc2_error_t* outErr = nullptr) 524ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall { 525ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_TRANSFORM>( 526ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_TRANSFORM)); 527ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 528ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 529ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 530ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall transform)); 531ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall if (outErr) { 532ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall *outErr = err; 533ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall } else { 534ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer transform " 535ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall << getTransformName(transform); 536ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall } 537ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall } 538ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 539f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall void setLayerVisibleRegion(hwc2_display_t display, hwc2_layer_t layer, 540f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall const hwc_region_t& visibleRegion, hwc2_error_t* outErr = nullptr) 541f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall { 542f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_VISIBLE_REGION>( 543f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_VISIBLE_REGION)); 544f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 545f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 546f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 547f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall visibleRegion)); 548f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall if (outErr) { 549f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall *outErr = err; 550f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall } else { 551f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer visible" 552f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall " region"; 553f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall } 554f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall } 555f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 556273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall void setLayerZOrder(hwc2_display_t display, hwc2_layer_t layer, 557273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall uint32_t zOrder, hwc2_error_t* outErr = nullptr) 558273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall { 559273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_Z_ORDER>( 560273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_Z_ORDER)); 561273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 562273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 563273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 564273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall zOrder)); 565273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall if (outErr) { 566273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall *outErr = err; 567273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } else { 568273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer z order " 569273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall << zOrder; 570273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 571273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 572273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 5731cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall void validateDisplay(hwc2_display_t display, uint32_t* outNumTypes, 5741cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall uint32_t* outNumRequests, hwc2_error_t* outErr) 5751cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall { 5761cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_VALIDATE_DISPLAY>( 5771cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall getFunction(HWC2_FUNCTION_VALIDATE_DISPLAY)); 5781cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 5791cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 5801cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall *outErr = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 5811cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall outNumTypes, outNumRequests)); 5821cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } 5831cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 5841cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall void validateDisplay(hwc2_display_t display, uint32_t* outNumTypes, 5851cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall uint32_t* outNumRequests, bool* outHasChanges) 5861cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall { 5871cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 5881cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 5891cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(validateDisplay(display, outNumTypes, 5901cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall outNumRequests, &err)); 5911cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 5921cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall if (err != HWC2_ERROR_HAS_CHANGES) { 5931cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall *outHasChanges = false; 5941cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_EQ(err, HWC2_ERROR_NONE) << "failed to validate display"; 5951cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } else { 5961cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall *outHasChanges = true; 5971cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } 5981cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } 5991cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 600706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall void getDisplayRequests(hwc2_display_t display, 601706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_display_request_t* outDisplayRequests, 602706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_layer_t>* outLayers, 603706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_layer_request_t>* outLayerRequests, 604706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_error_t* outErr = nullptr) 605706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall { 606706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_GET_DISPLAY_REQUESTS>( 607706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall getFunction(HWC2_FUNCTION_GET_DISPLAY_REQUESTS)); 608706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 609706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 610706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall uint32_t numElements = 0; 611706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 612706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 613706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall reinterpret_cast<int32_t*>(outDisplayRequests), &numElements, 614706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall nullptr, nullptr)); 615706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 616706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall if (err == HWC2_ERROR_NONE && numElements > 0) { 617706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall outLayers->resize(numElements); 618706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall outLayerRequests->resize(numElements); 619706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 620706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 621706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall reinterpret_cast<int32_t*>(outDisplayRequests), &numElements, 622706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall reinterpret_cast<uint64_t*>(outLayers->data()), 623706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall reinterpret_cast<int32_t*>(outLayerRequests->data()))); 624706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 625706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 626706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall if (outErr) { 627706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall *outErr = err; 628706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } else { 629706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to get display requests"; 630706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 631706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 632706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 633706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall void handleRequests(hwc2_display_t display, 634706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall const std::vector<hwc2_layer_t>& layers, uint32_t numRequests, 635706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::set<hwc2_layer_t>* outClearLayers = nullptr, 636706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall bool* outFlipClientTarget = nullptr) 637706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall { 638706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_display_request_t displayRequest = 639706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall static_cast<hwc2_display_request_t>(0); 640706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_layer_t> requestedLayers; 641706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_layer_request_t> requests; 642706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 643706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayRequests(display, &displayRequest, 644706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall &requestedLayers, &requests)); 645706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 646706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_EQ(numRequests, requests.size()) << "validate returned " 647706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << numRequests << " requests and get display requests returned " 648706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << requests.size() << " requests"; 649706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 650706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall for (size_t i = 0; i < requests.size(); i++) { 651706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_layer_t requestedLayer = requestedLayers.at(i); 652706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_layer_request_t request = requests.at(i); 653706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 654706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_EQ(std::count(layers.begin(), layers.end(), requestedLayer), 655706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 0) << "get display requests returned an unknown layer"; 656706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_NE(request, 0) << "returned empty request for layer " 657706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << requestedLayer; 658706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 659706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall if (outClearLayers && request 660706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall == HWC2_LAYER_REQUEST_CLEAR_CLIENT_TARGET) 661706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall outClearLayers->insert(requestedLayer); 662706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 663706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 664706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall if (outFlipClientTarget) 665706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall *outFlipClientTarget = displayRequest 666706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall & HWC2_DISPLAY_REQUEST_FLIP_CLIENT_TARGET; 667706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 668706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 669706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall void getChangedCompositionTypes(hwc2_display_t display, 670706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_layer_t>* outLayers, 671706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_composition_t>* outTypes, 672706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_error_t* outErr = nullptr) 673706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall { 674706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_GET_CHANGED_COMPOSITION_TYPES>( 675706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall getFunction(HWC2_FUNCTION_GET_CHANGED_COMPOSITION_TYPES)); 676706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 677706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 678706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall uint32_t numElements = 0; 679706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 680706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 681706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall &numElements, nullptr, nullptr)); 682706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 683706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall if (err == HWC2_ERROR_NONE && numElements > 0) { 684706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall outLayers->resize(numElements); 685706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall outTypes->resize(numElements); 686706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 687706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 688706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall &numElements, reinterpret_cast<uint64_t*>(outLayers->data()), 689706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall reinterpret_cast<int32_t*>(outTypes->data()))); 690706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 691706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 692706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall if (outErr) { 693706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall *outErr = err; 694706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } else { 695706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to get changed" 696706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall " composition types"; 697706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 698706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 699706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 700706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall void handleCompositionChanges(hwc2_display_t display, 701706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall const Hwc2TestLayers& testLayers, 702706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall const std::vector<hwc2_layer_t>& layers, uint32_t numTypes, 703706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::set<hwc2_layer_t>* outClientLayers = nullptr) 704706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall { 705706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_layer_t> changedLayers; 706706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_composition_t> types; 707706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 708706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(getChangedCompositionTypes(display, 709706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall &changedLayers, &types)); 710706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 711706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_EQ(numTypes, types.size()) << "validate returned " 712706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << numTypes << " types and get changed composition types" 713706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall " returned " << types.size() << " types"; 714706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 715706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall for (size_t i = 0; i < types.size(); i++) { 716706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 717706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall auto layer = std::find(layers.begin(), layers.end(), 718706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall changedLayers.at(i)); 719706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 720706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_TRUE(layer != layers.end() || !testLayers.contains(*layer)) 721706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << "get changed composition types returned an unknown layer"; 722706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 723706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_composition_t requestedType = testLayers.getComposition(*layer); 724706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_composition_t returnedType = types.at(i); 725706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 726706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_NE(returnedType, HWC2_COMPOSITION_INVALID) << "get changed" 727706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall " composition types returned invalid composition"; 728706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 729706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall switch (requestedType) { 730706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall case HWC2_COMPOSITION_CLIENT: 731706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_TRUE(false) << getCompositionName(returnedType) 732706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << " cannot be changed"; 733706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall break; 734706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall case HWC2_COMPOSITION_DEVICE: 735706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall case HWC2_COMPOSITION_SOLID_COLOR: 736706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_EQ(returnedType, HWC2_COMPOSITION_CLIENT) 737706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << "composition of type " 738706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << getCompositionName(requestedType) 739706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << " can only be changed to " 740706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << getCompositionName(HWC2_COMPOSITION_CLIENT); 741706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall break; 742706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall case HWC2_COMPOSITION_CURSOR: 743706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall case HWC2_COMPOSITION_SIDEBAND: 744706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_TRUE(returnedType == HWC2_COMPOSITION_CLIENT 745706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall || returnedType == HWC2_COMPOSITION_DEVICE) 746706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << "composition of type " 747706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << getCompositionName(requestedType) 748706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << " can only be changed to " 749706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << getCompositionName(HWC2_COMPOSITION_CLIENT) << " or " 750706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << getCompositionName(HWC2_COMPOSITION_DEVICE); 751706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall break; 752706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall default: 753706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_TRUE(false) << "unknown type " 754706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << getCompositionName(requestedType); 755706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall break; 756706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 757706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 758706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall if (outClientLayers) 759706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall if (returnedType == HWC2_COMPOSITION_CLIENT) 760706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall outClientLayers->insert(*layer); 761706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 762706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 763706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall if (outClientLayers) { 764706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall for (auto layer : layers) { 765706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall if (testLayers.getComposition(layer) == HWC2_COMPOSITION_CLIENT) 766706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall outClientLayers->insert(layer); 767706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 768706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 769706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 770706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 771706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall void acceptDisplayChanges(hwc2_display_t display, 772706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_error_t* outErr = nullptr) 773706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall { 774706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_ACCEPT_DISPLAY_CHANGES>( 775706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall getFunction(HWC2_FUNCTION_ACCEPT_DISPLAY_CHANGES)); 776706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 777706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 778706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display)); 779706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall if (outErr) { 780706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall *outErr = err; 781706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } else { 782706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to accept display changes"; 783706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 784706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 785706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 786f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall void getClientTargetSupport(hwc2_display_t display, int32_t width, 787f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall int32_t height, android_pixel_format_t format, 788f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall android_dataspace_t dataspace, hwc2_error_t* outErr = nullptr) 789f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall { 790f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_GET_CLIENT_TARGET_SUPPORT>( 791f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall getFunction(HWC2_FUNCTION_GET_CLIENT_TARGET_SUPPORT)); 792f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 793f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 794f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, width, 795f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall height, format, dataspace)); 796f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall if (outErr) { 797f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall *outErr = err; 798f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } else { 799f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to get client target" 800f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall " support"; 801f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } 802f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } 803f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 804f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall void setClientTarget(hwc2_display_t display, buffer_handle_t handle, 805f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall int32_t acquireFence, android_dataspace_t dataspace, 806f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall hwc_region_t damage, hwc2_error_t* outErr = nullptr) 807f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall { 808f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_CLIENT_TARGET>( 809f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall getFunction(HWC2_FUNCTION_SET_CLIENT_TARGET)); 810f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 811f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 812f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, handle, 813f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall acquireFence, dataspace, damage)); 814f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall if (outErr) { 815f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall *outErr = err; 816f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } else { 817f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set client target"; 818f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } 819f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } 820f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 821563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall void presentDisplay(hwc2_display_t display, int32_t* outPresentFence, 822563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall hwc2_error_t* outErr = nullptr) 823563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall { 824563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_PRESENT_DISPLAY>( 825563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall getFunction(HWC2_FUNCTION_PRESENT_DISPLAY)); 826563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 827563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 828563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 829563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall outPresentFence)); 830563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall if (outErr) { 831563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall *outErr = err; 832563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall } else { 833563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to present display"; 834563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall } 835563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall } 836563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 837563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall void getReleaseFences(hwc2_display_t display, 838563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::vector<hwc2_layer_t>* outLayers, 839563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::vector<int32_t>* outFences, hwc2_error_t* outErr = nullptr) 840563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall { 841563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_GET_RELEASE_FENCES>( 842563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall getFunction(HWC2_FUNCTION_GET_RELEASE_FENCES)); 843563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 844563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 845563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall uint32_t numElements = 0; 846563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 847563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 848563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall &numElements, nullptr, nullptr)); 849563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 850563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall if (err == HWC2_ERROR_NONE) { 851563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall outLayers->resize(numElements); 852563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall outFences->resize(numElements); 853563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 854563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 855563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall &numElements, outLayers->data(), outFences->data())); 856563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall } 857563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 858563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall if (outErr) { 859563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall *outErr = err; 860563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall } else { 861563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to get release fences"; 862563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall } 863563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall } 864563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 86535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall void getColorModes(hwc2_display_t display, 86635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall std::vector<android_color_mode_t>* outColorModes, 86735040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall hwc2_error_t* outErr = nullptr) 86835040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall { 86935040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_GET_COLOR_MODES>( 87035040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall getFunction(HWC2_FUNCTION_GET_COLOR_MODES)); 87135040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 87235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 87335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall uint32_t numColorModes = 0; 87435040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 87535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 87635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall &numColorModes, nullptr)); 87735040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall if (err == HWC2_ERROR_NONE) { 87835040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall outColorModes->resize(numColorModes); 87935040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 88035040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 88135040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall &numColorModes, 88235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall reinterpret_cast<int32_t*>(outColorModes->data()))); 88335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall } 88435040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 88535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall if (outErr) { 88635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall *outErr = err; 88735040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall } else { 88835040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to get color modes for" 88935040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall " display " << display; 89035040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall } 89135040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall } 89235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 89335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall void setColorMode(hwc2_display_t display, android_color_mode_t colorMode, 89435040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall hwc2_error_t* outErr = nullptr) 89535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall { 89635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_COLOR_MODE>( 89735040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall getFunction(HWC2_FUNCTION_SET_COLOR_MODE)); 89835040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 89935040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 90035040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 90135040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall static_cast<int32_t>(colorMode))); 90235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall if (outErr) { 90335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall *outErr = err; 90435040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall } else { 90535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set color mode " 90635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall << colorMode; 90735040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall } 90835040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall } 90935040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 91035040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall void getHdrCapabilities(hwc2_display_t display, 91135040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall std::vector<android_hdr_t>* outTypes, float* outMaxLuminance, 91235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall float* outMaxAverageLuminance, float* outMinLuminance, 91335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall hwc2_error_t* outErr = nullptr) 91435040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall { 91535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_GET_HDR_CAPABILITIES>( 91635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall getFunction(HWC2_FUNCTION_GET_HDR_CAPABILITIES)); 91735040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 91835040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 91935040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall uint32_t numTypes = 0; 92035040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 92135040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 92235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall &numTypes, nullptr, outMaxLuminance, outMaxAverageLuminance, 92335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall outMinLuminance)); 92435040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 92535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall if (err == HWC2_ERROR_NONE) { 92635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall outTypes->resize(numTypes); 92735040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 92835040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, &numTypes, 92935040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall reinterpret_cast<int32_t*>(outTypes->data()), outMaxLuminance, 93035040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall outMaxAverageLuminance, outMinLuminance)); 93135040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall } 93235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 93335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall if (outErr) { 93435040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall *outErr = err; 93535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall } else { 93635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to get hdr capabilities" 93735040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall " for display " << display; 93835040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall } 93935040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall } 94035040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 94135040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall void setColorTransform(hwc2_display_t display, 94235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall const std::array<float, 16>& matrix, android_color_transform_t hint, 94335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall hwc2_error_t* outErr = nullptr) 94435040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall { 94535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_COLOR_TRANSFORM>( 94635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall getFunction(HWC2_FUNCTION_SET_COLOR_TRANSFORM)); 94735040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 94835040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 94935040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 95035040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall matrix.data(), hint)); 95135040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 95235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall if (outErr) { 95335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall *outErr = err; 95435040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall } else { 95535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set color transform " 95635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall << hint; 95735040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall } 95835040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall } 95935040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 960bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall void createVirtualDisplay(uint32_t width, uint32_t height, 961bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall android_pixel_format_t* outFormat, hwc2_display_t* outDisplay, 962bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall hwc2_error_t* outErr = nullptr) 963bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall { 964bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_CREATE_VIRTUAL_DISPLAY>( 965bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall getFunction(HWC2_FUNCTION_CREATE_VIRTUAL_DISPLAY)); 966bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 967bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 968bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, width, height, 969bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall reinterpret_cast<int32_t*>(outFormat), outDisplay)); 970bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 971bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall if (err == HWC2_ERROR_NONE) 972bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall mVirtualDisplays.insert(*outDisplay); 973bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 974bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall if (outErr) { 975bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall *outErr = err; 976bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall } else { 977bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to create virtual display"; 978bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall } 979bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall } 980bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 981bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall void destroyVirtualDisplay(hwc2_display_t display, 982bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall hwc2_error_t* outErr = nullptr) 983bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall { 984bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_DESTROY_VIRTUAL_DISPLAY>( 985bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall getFunction(HWC2_FUNCTION_DESTROY_VIRTUAL_DISPLAY)); 986bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 987bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 988bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display)); 989bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 990bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall if (err == HWC2_ERROR_NONE) 991bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall mVirtualDisplays.erase(display); 992bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 993bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall if (outErr) { 994bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall *outErr = err; 995bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall } else { 996bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to destroy virtual display"; 997bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall } 998bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall } 999bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 1000bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall void getMaxVirtualDisplayCount(uint32_t* outMaxCnt) 1001bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall { 1002bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_GET_MAX_VIRTUAL_DISPLAY_COUNT>( 1003bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall getFunction(HWC2_FUNCTION_GET_MAX_VIRTUAL_DISPLAY_COUNT)); 1004bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 1005bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 1006bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall *outMaxCnt = pfn(mHwc2Device); 1007bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall } 1008bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 1009bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall void setOutputBuffer(hwc2_display_t display, buffer_handle_t buffer, 1010bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall int32_t releaseFence, hwc2_error_t* outErr = nullptr) 1011bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall { 1012bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_OUTPUT_BUFFER>( 1013bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall getFunction(HWC2_FUNCTION_SET_OUTPUT_BUFFER)); 1014bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 1015bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 1016bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, buffer, 1017bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall releaseFence)); 1018bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall if (outErr) { 1019bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall *outErr = err; 1020bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall } else { 1021bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set output buffer"; 1022bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall } 1023bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall } 1024bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 1025f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall void getBadDisplay(hwc2_display_t* outDisplay) 1026f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall { 1027f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall for (hwc2_display_t display = 0; display < UINT64_MAX; display++) { 1028f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall if (mDisplays.count(display) == 0) { 1029f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall *outDisplay = display; 1030f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall return; 1031f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } 1032f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } 1033f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_TRUE(false) << "Unable to find bad display. UINT64_MAX displays" 1034f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall " are registered. This should never happen."; 1035f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } 1036f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 1037563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall void waitForVsync(hwc2_display_t* outDisplay = nullptr, 1038563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall int64_t* outTimestamp = nullptr) 1039563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall { 1040563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unique_lock<std::mutex> lock(mVsyncMutex); 1041563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_EQ(mVsyncCv.wait_for(lock, std::chrono::seconds(3)), 1042563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::cv_status::no_timeout) << "timed out attempting to get" 1043563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall " vsync callback"; 1044563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall if (outDisplay) 1045563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall *outDisplay = mVsyncDisplay; 1046563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall if (outTimestamp) 1047563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall *outTimestamp = mVsyncTimestamp; 1048563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall } 1049563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1050563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall void enableVsync(hwc2_display_t display) 1051563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall { 1052563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_VSYNC, this, 1053563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall reinterpret_cast<hwc2_function_pointer_t>( 1054563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall hwc2TestVsyncCallback))); 1055563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE)); 1056563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall } 1057563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1058563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall void disableVsync(hwc2_display_t display) 1059563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall { 1060563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 1061563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall } 1062563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 10634d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wallprotected: 10644d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall hwc2_function_pointer_t getFunction(hwc2_function_descriptor_t descriptor) 10654d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall { 10664d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall return mHwc2Device->getFunction(mHwc2Device, descriptor); 10674d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall } 10684d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 10694d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall void getCapabilities(std::vector<hwc2_capability_t>* outCapabilities) 10704d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall { 10714d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall uint32_t num = 0; 10724d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 10734d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall mHwc2Device->getCapabilities(mHwc2Device, &num, nullptr); 10744d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 10754d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall outCapabilities->resize(num); 10764d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 10774d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall mHwc2Device->getCapabilities(mHwc2Device, &num, 10784d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall reinterpret_cast<int32_t*>(outCapabilities->data())); 10794d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall } 10804d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 1081cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall /* Registers a hotplug callback and waits for hotplug callbacks. This 1082cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall * function will have no effect if called more than once. */ 1083cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall void populateDisplays() 1084cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall { 1085cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall /* Sets the hotplug status to receiving */ 1086cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall { 1087cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::lock_guard<std::mutex> lock(mHotplugMutex); 1088cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1089cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall if (mHotplugStatus != Hwc2TestHotplugStatus::Init) 1090cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall return; 1091cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall mHotplugStatus = Hwc2TestHotplugStatus::Receiving; 1092cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 1093cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1094cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall /* Registers the callback. This function call cannot be locked because 1095cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall * a callback could happen on the same thread */ 1096cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_HOTPLUG, this, 1097cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall reinterpret_cast<hwc2_function_pointer_t>( 1098cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2TestHotplugCallback))); 1099cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1100cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall /* Waits for hotplug events. If a hotplug event has not come within 1 1101cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall * second, stop waiting. */ 1102cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::unique_lock<std::mutex> lock(mHotplugMutex); 1103cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1104cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall while (mHotplugCv.wait_for(lock, std::chrono::seconds(1)) != 1105cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::cv_status::timeout) { } 1106cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1107cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall /* Sets the hotplug status to done. Future calls will have no effect */ 1108cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall mHotplugStatus = Hwc2TestHotplugStatus::Done; 1109cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 1110cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 11111db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall /* NOTE: will create min(newlayerCnt, max supported layers) layers */ 11121db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall void createLayers(hwc2_display_t display, 11131db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall std::vector<hwc2_layer_t>* outLayers, size_t newLayerCnt) 11141db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall { 11151db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall std::vector<hwc2_layer_t> newLayers; 11161db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_layer_t layer; 11171db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 11181db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 11191db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (size_t i = 0; i < newLayerCnt; i++) { 11201db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 11211db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_NO_FATAL_FAILURE(createLayer(display, &layer, &err)); 11221db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall if (err == HWC2_ERROR_NO_RESOURCES) 11231db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall break; 11241db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall if (err != HWC2_ERROR_NONE) { 11251db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall newLayers.clear(); 11261db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to create layer"; 11271db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 11281db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall newLayers.push_back(layer); 11291db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 11301db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 11311db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall *outLayers = std::move(newLayers); 11321db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 11331db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 11341db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall void destroyLayers(hwc2_display_t display, 11351db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall std::vector<hwc2_layer_t>&& layers) 11361db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall { 11371db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (hwc2_layer_t layer : layers) { 11381db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 11391db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 11401db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 11411db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 1142cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall void getInvalidConfig(hwc2_display_t display, hwc2_config_t* outConfig) 1143cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall { 1144cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs; 1145cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1146cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 1147cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1148cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_config_t CONFIG_MAX = UINT32_MAX; 1149cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1150cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_LE(configs.size() - 1, CONFIG_MAX) << "every config value" 1151cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall " (2^32 values) has been taken which shouldn't happen"; 1152cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1153cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_config_t config; 1154cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (config = 0; config < CONFIG_MAX; config++) { 1155cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall if (std::count(configs.begin(), configs.end(), config) == 0) 1156cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall break; 1157cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1158cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1159cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall *outConfig = config; 1160cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1161cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 11626bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* Calls a set property function from Hwc2Test to set a property value from 11636bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * Hwc2TestLayer to hwc2_layer_t on hwc2_display_t */ 11646bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall using TestLayerPropertyFunction = void (*)(Hwc2Test* test, 11656bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_display_t display, hwc2_layer_t layer, 11665a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr); 11676bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 1168273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall /* Calls a set property function from Hwc2Test to set property values from 1169273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall * Hwc2TestLayers to hwc2_layer_t on hwc2_display_t */ 1170273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall using TestLayerPropertiesFunction = void (*)(Hwc2Test* test, 1171273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall hwc2_display_t display, hwc2_layer_t layer, 11725a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayers* testLayers); 1173273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 11746bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* Calls a set property function from Hwc2Test to set a bad property value 11756bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * on hwc2_layer_t on hwc2_display_t */ 11766bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall using TestLayerPropertyBadLayerFunction = void (*)(Hwc2Test* test, 11776bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_display_t display, hwc2_layer_t layer, 11785a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr); 11796bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 11806bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* Calls a set property function from Hwc2Test to set a bad property value 11816bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * on hwc2_layer_t on hwc2_display_t */ 11826bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall using TestLayerPropertyBadParameterFunction = void (*)(Hwc2Test* test, 11836bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_display_t display, hwc2_layer_t layer, hwc2_error_t* outErr); 11846bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 11851cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall /* Is called after a display is powered on and all layer properties have 11861cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall * been set. It should be used to test functions such as validate, accepting 11871cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall * changes, present, etc. */ 11881cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall using TestDisplayLayersFunction = void (*)(Hwc2Test* test, 1189706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_display_t display, const std::vector<hwc2_layer_t>& layers, 1190563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestLayers* testLayers); 1191706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 1192706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall /* It is called on an non validated display */ 1193706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall using TestDisplayNonValidatedLayersFunction = void (*)(Hwc2Test* test, 1194706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_display_t display, std::vector<hwc2_layer_t>* layers); 11951cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 1196f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall /* Tests client target support on a particular display and config */ 1197f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall using TestClientTargetSupportFunction = void (*)(Hwc2Test* test, 1198f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall hwc2_display_t display, 1199f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const Hwc2TestClientTargetSupport& testClientTargetSupport); 1200f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 120135040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall /* Tests a particular active display config */ 120235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall using TestActiveDisplayConfigFunction = void (*)(Hwc2Test* test, 120335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall hwc2_display_t display); 120435040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 1205bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall /* Tests a newly created virtual display */ 1206bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall using TestCreateVirtualDisplayFunction = void (*)(Hwc2Test* test, 1207bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall hwc2_display_t display, Hwc2TestVirtualDisplay* testVirtualDisplay); 1208bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 12096bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* Advances a property of Hwc2TestLayer */ 12106bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall using AdvanceProperty = bool (*)(Hwc2TestLayer* testLayer); 12116bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 1212f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall /* Advances properties of Hwc2TestLayers */ 1213f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall using AdvanceProperties = bool (*)(Hwc2TestLayers* testLayer); 1214f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 1215f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall /* Advances properties of Hwc2TestClientTargetSupport */ 1216f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall using AdvanceClientTargetSupport = bool (*)( 1217f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall Hwc2TestClientTargetSupport* testClientTargetSupport); 1218f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 12196bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* For each active display it cycles through each display config and tests 12206bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * each property value. It creates a layer, sets the property and then 12216bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * destroys the layer */ 12226bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall void setLayerProperty(Hwc2TestCoverage coverage, 12236bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall TestLayerPropertyFunction function, AdvanceProperty advance) 12246bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall { 12256bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto display : mDisplays) { 12266bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall std::vector<hwc2_config_t> configs; 12276bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 12286bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 12296bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 12306bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto config : configs) { 12316bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_layer_t layer; 1232600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Area displayArea; 12336bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 12346bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 1235600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveDisplayArea(display, 1236600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall &displayArea)); 1237600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Hwc2TestLayer testLayer(coverage, displayArea); 12386bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 12396bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall do { 12406bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 12416bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 12426bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(function(this, display, layer, 12435a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall &testLayer, nullptr)); 12446bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 12456bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 12466bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } while (advance(&testLayer)); 12476bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 12486bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 12496bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 12506bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 12516bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* For each active display it cycles through each display config and tests 12526bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * each property value. It creates a layer, cycles through each property 12536bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * value and updates the layer property value and then destroys the layer */ 12546bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall void setLayerPropertyUpdate(Hwc2TestCoverage coverage, 12556bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall TestLayerPropertyFunction function, AdvanceProperty advance) 12566bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall { 12576bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto display : mDisplays) { 12586bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall std::vector<hwc2_config_t> configs; 12596bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 12606bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 12616bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 12626bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto config : configs) { 12636bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_layer_t layer; 1264600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Area displayArea; 12656bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 12666bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 1267600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveDisplayArea(display, 1268600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall &displayArea)); 1269600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Hwc2TestLayer testLayer(coverage, displayArea); 12706bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 12716bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 12726bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 12736bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall do { 12746bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(function(this, display, layer, 12755a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall &testLayer, nullptr)); 12766bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } while (advance(&testLayer)); 12776bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 12786bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 12796bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 12806bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 12816bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 12826bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 1283273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall /* For each active display it cycles through each display config and tests 1284273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall * each property value. It creates multiple layers, calls the 1285273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall * TestLayerPropertiesFunction to set property values and then 1286273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall * destroys the layers */ 1287273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall void setLayerProperties(Hwc2TestCoverage coverage, size_t layerCnt, 1288f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall TestLayerPropertiesFunction function, AdvanceProperties advance) 1289273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall { 1290273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall for (auto display : mDisplays) { 1291273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall std::vector<hwc2_config_t> configs; 1292273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 1293273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 1294273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 1295273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall for (auto config : configs) { 1296273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall std::vector<hwc2_layer_t> layers; 1297600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Area displayArea; 1298273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 1299273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 1300600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveDisplayArea(display, 1301600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall &displayArea)); 1302273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 1303273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayers(display, &layers, layerCnt)); 1304600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Hwc2TestLayers testLayers(layers, coverage, displayArea); 1305273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 1306f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall do { 1307f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall for (auto layer : layers) { 1308f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall EXPECT_NO_FATAL_FAILURE(function(this, display, layer, 1309f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall &testLayers)); 1310f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall } 1311f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall } while (advance(&testLayers)); 1312273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 1313273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayers(display, std::move(layers))); 1314273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 1315273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 1316273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 1317273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 13186bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* For each active display it cycles through each display config. 13196bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * 1) It attempts to set a valid property value to bad layer handle. 13206bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * 2) It creates a layer x and attempts to set a valid property value to 13216bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * layer x + 1 13226bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * 3) It destroys the layer x and attempts to set a valid property value to 13236bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * the destroyed layer x. 13246bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall */ 13256bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall void setLayerPropertyBadLayer(Hwc2TestCoverage coverage, 13266bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall TestLayerPropertyBadLayerFunction function) 13276bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall { 13286bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto display : mDisplays) { 13296bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall std::vector<hwc2_config_t> configs; 13306bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 13316bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 13326bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 13336bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto config : configs) { 13346bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_layer_t layer = 0; 1335600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Area displayArea; 13366bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 13376bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 13386bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 1339600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveDisplayArea(display, 1340600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall &displayArea)); 1341600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Hwc2TestLayer testLayer(coverage, displayArea); 13426bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 13436bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(function(this, display, layer, 13445a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall &testLayer, &err)); 13456bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 13466bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 13476bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 13486bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 13496bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(function(this, display, layer + 1, 13505a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall &testLayer, &err)); 13516bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 13526bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 13536bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 13546bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 13556bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(function(this, display, layer, 13565a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall &testLayer, &err)); 13576bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 13586bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 13596bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 13606bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 13616bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 13626bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* For each active display it cycles through each display config and tests 13636bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * each property value. It creates a layer, sets a bad property value and 13646bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * then destroys the layer */ 13656bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall void setLayerPropertyBadParameter(TestLayerPropertyBadParameterFunction function) 13666bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall { 13676bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto display : mDisplays) { 13686bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall std::vector<hwc2_config_t> configs; 13696bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 13706bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 13716bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 13726bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto config : configs) { 13736bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_layer_t layer; 13746bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 13756bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 13766bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 13776bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 13786bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 13796bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 13806bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(function(this, display, layer, &err)); 13816bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_PARAMETER) << "returned wrong" 13826bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall " error code"; 13836bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 13846bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 13856bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 13866bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 13876bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 13886bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 13891cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall /* For each active display it powers on the display, cycles through each 13901cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall * config and creates a set of layers with a certain amount of coverage. 13911cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall * For each active display, for each config and for each set of layers, 13921cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall * it calls the TestDisplayLayersFunction */ 13931cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall void displayLayers(Hwc2TestCoverage coverage, size_t layerCnt, 13941cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall TestDisplayLayersFunction function) 13951cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall { 13961cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall for (auto display : mDisplays) { 13971cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall std::vector<hwc2_config_t> configs; 13981cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 13991cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 14001cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 14011cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 14021cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 14031cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall for (auto config : configs) { 14041cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall Area displayArea; 14051cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall std::vector<hwc2_layer_t> layers; 14061cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 14071cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 14081cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveDisplayArea(display, &displayArea)); 14091cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 14101cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_NO_FATAL_FAILURE(createLayers(display, &layers, layerCnt)); 14111cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall Hwc2TestLayers testLayers(layers, coverage, displayArea); 14121cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 14131cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall do { 14141cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall bool skip; 14151cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 14161cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperties(display, layers, 14171cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall &testLayers, &skip)); 14181cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall if (!skip) 1419706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_NO_FATAL_FAILURE(function(this, display, layers, 1420563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall &testLayers)); 14211cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 14221cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } while (testLayers.advance()); 14231cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 14241cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayers(display, 14251cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall std::move(layers))); 14261cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } 14271cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 14281cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 14291cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } 14301cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } 14311cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 1432706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall /* For each active display, it calls the 1433706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall * TestDisplayNonValidatedLayersFunction on a variety on non-validated 1434706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall * layer combinations */ 1435706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall void displayNonValidatedLayers(size_t layerCnt, 1436706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall TestDisplayNonValidatedLayersFunction function) 1437706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall { 1438706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall for (auto display : mDisplays) { 1439706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall uint32_t numTypes, numRequests; 1440706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_layer_t> layers; 1441706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall bool hasChanges; 1442706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 1443706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 1444706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 1445706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_NO_FATAL_FAILURE(function(this, display, &layers)); 1446706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 1447706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayers(display, &layers, layerCnt)); 1448706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 1449706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_NO_FATAL_FAILURE(function(this, display, &layers)); 1450706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 1451706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall for (auto layer : layers) { 1452706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerCompositionType(display, layer, 1453706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall HWC2_COMPOSITION_CLIENT)); 1454706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 1455706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 1456706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_NO_FATAL_FAILURE(function(this, display, &layers)); 1457706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 1458706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(validateDisplay(display, &numTypes, 1459706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall &numRequests, &hasChanges)); 1460706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 1461706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall for (auto layer : layers) { 1462706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerCompositionType(display, layer, 1463706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall HWC2_COMPOSITION_DEVICE)); 1464706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 1465706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 1466706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_NO_FATAL_FAILURE(function(this, display, &layers)); 1467706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 1468706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayers(display, std::move(layers))); 1469706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 1470706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_NO_FATAL_FAILURE(function(this, display, &layers)); 1471706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 1472706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 1473706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 1474706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 1475706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 1476f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall /* Test client target support on each config on each active display */ 1477f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall void setClientTargetSupport(Hwc2TestCoverage coverage, 1478f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall TestClientTargetSupportFunction function, 1479f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall AdvanceClientTargetSupport advance) 1480f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall { 1481f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall for (auto display : mDisplays) { 1482f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall std::vector<hwc2_config_t> configs; 1483f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 1484f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 1485f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 1486f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall for (auto config : configs) { 1487f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall Area displayArea; 1488f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 1489f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 1490f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(getActiveDisplayArea(display, 1491f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall &displayArea)); 1492f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall Hwc2TestClientTargetSupport testClientTargetSupport(coverage, 1493f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall displayArea); 1494f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 1495f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall do { 1496f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall EXPECT_NO_FATAL_FAILURE(function(this, display, 1497f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall testClientTargetSupport)); 1498f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 1499f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } while (advance(&testClientTargetSupport)); 1500f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } 1501f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } 1502f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } 1503f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 150435040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall /* Cycles through each config on each active display and calls 150535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall * a TestActiveDisplayConfigFunction */ 150635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall void setActiveDisplayConfig(TestActiveDisplayConfigFunction function) 150735040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall { 150835040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall for (auto display : mDisplays) { 150935040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall std::vector<hwc2_config_t> configs; 151035040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 151135040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 151235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 151335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall for (auto config : configs) { 151435040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 151535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 151635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall EXPECT_NO_FATAL_FAILURE(function(this, display)); 151735040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall } 151835040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall } 151935040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall } 152035040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 1521bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall /* Creates a virtual display for testing */ 1522bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall void createVirtualDisplay(Hwc2TestCoverage coverage, 1523bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall TestCreateVirtualDisplayFunction function) 1524bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall { 1525bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall Hwc2TestVirtualDisplay testVirtualDisplay(coverage); 1526bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 1527bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall do { 1528bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall hwc2_display_t display; 1529bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 1530bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 1531bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall const UnsignedArea& dimension = 1532bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall testVirtualDisplay.getDisplayDimension(); 1533bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall android_pixel_format_t desiredFormat = HAL_PIXEL_FORMAT_RGBA_8888; 1534bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 1535bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall ASSERT_NO_FATAL_FAILURE(createVirtualDisplay(dimension.width, 1536bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall dimension.height, &desiredFormat, &display, &err)); 1537bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 1538bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall EXPECT_TRUE(err == HWC2_ERROR_NONE || err == HWC2_ERROR_NO_RESOURCES 1539bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall || err == HWC2_ERROR_UNSUPPORTED) 1540bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall << "returned wrong error code"; 1541bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall EXPECT_GE(desiredFormat, 0) << "invalid format"; 1542bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 1543bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall if (err != HWC2_ERROR_NONE) 1544bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall continue; 1545bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 1546bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall EXPECT_NO_FATAL_FAILURE(function(this, display, 1547bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall &testVirtualDisplay)); 1548bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 1549bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyVirtualDisplay(display)); 1550bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 1551bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall } while (testVirtualDisplay.advance()); 1552bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall } 1553bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 1554bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 1555600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall void getActiveConfigAttribute(hwc2_display_t display, 1556600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall hwc2_attribute_t attribute, int32_t* outValue) 1557600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall { 1558600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall hwc2_config_t config; 1559600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveConfig(display, &config)); 1560600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, 1561600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall attribute, outValue)); 1562600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_GE(*outValue, 0) << "failed to get valid " 1563600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall << getAttributeName(attribute); 1564600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall } 1565600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 1566600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall void getActiveDisplayArea(hwc2_display_t display, Area* displayArea) 1567600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall { 1568600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveConfigAttribute(display, 1569600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall HWC2_ATTRIBUTE_WIDTH, &displayArea->width)); 1570600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveConfigAttribute(display, 1571600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall HWC2_ATTRIBUTE_HEIGHT, &displayArea->height)); 1572600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall } 1573600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 1574563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall void closeFences(hwc2_display_t display, int32_t presentFence) 1575563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall { 1576563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::vector<hwc2_layer_t> layers; 1577563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::vector<int32_t> fences; 1578563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const int msWait = 3000; 1579563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1580563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall if (presentFence >= 0) { 1581563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_GE(sync_wait(presentFence, msWait), 0); 1582563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall close(presentFence); 1583563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall } 1584563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1585563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(getReleaseFences(display, &layers, &fences)); 1586563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall EXPECT_EQ(layers.size(), fences.size()); 1587563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1588563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall for (int32_t fence : fences) { 1589563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall EXPECT_GE(sync_wait(fence, msWait), 0); 1590563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall if (fence >= 0) 1591563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall close(fence); 1592563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall } 1593563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall } 1594563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 15951cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall void setLayerProperties(hwc2_display_t display, hwc2_layer_t layer, 15961cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall Hwc2TestLayers* testLayers, bool* outSkip) 15971cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall { 15981cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall hwc2_composition_t composition; 15991cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall buffer_handle_t handle = nullptr; 16001cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall int32_t acquireFence; 16011cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 16021cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall *outSkip = true; 16031cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 16041cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall if (!testLayers->contains(layer)) 16051cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall return; 16061cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 16071cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall composition = testLayers->getComposition(layer); 16081cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 16091cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall /* If the device cannot support a buffer format, then do not continue */ 16101cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall if ((composition == HWC2_COMPOSITION_DEVICE 16111cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall || composition == HWC2_COMPOSITION_CURSOR) 16121cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall && testLayers->getBuffer(layer, &handle, &acquireFence) < 0) 16131cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall return; 16141cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 16151cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerCompositionType(display, layer, 16161cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall composition, &err)); 16171cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall if (err == HWC2_ERROR_UNSUPPORTED) 16181cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_TRUE(composition != HWC2_COMPOSITION_CLIENT 16191cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall && composition != HWC2_COMPOSITION_DEVICE); 16201cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 16211cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall const hwc_rect_t cursor = testLayers->getCursorPosition(layer); 16221cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 16231cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerBuffer(display, layer, handle, 16241cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall acquireFence)); 16251cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerBlendMode(display, layer, 16261cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall testLayers->getBlendMode(layer))); 16271cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerColor(display, layer, 16281cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall testLayers->getColor(layer))); 16291cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setCursorPosition(display, layer, cursor.left, 16301cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall cursor.top)); 16311cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerDataspace(display, layer, 16321cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall testLayers->getDataspace(layer))); 16331cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerDisplayFrame(display, layer, 16341cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall testLayers->getDisplayFrame(layer))); 16351cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerPlaneAlpha(display, layer, 16361cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall testLayers->getPlaneAlpha(layer))); 16371cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerSourceCrop(display, layer, 16381cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall testLayers->getSourceCrop(layer))); 16391cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerSurfaceDamage(display, layer, 16401cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall testLayers->getSurfaceDamage(layer))); 16411cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerTransform(display, layer, 16421cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall testLayers->getTransform(layer))); 16431cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerVisibleRegion(display, layer, 16441cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall testLayers->getVisibleRegion(layer))); 16451cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerZOrder(display, layer, 16461cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall testLayers->getZOrder(layer))); 16471cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 16481cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall *outSkip = false; 16491cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } 16501cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 16511cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall void setLayerProperties(hwc2_display_t display, 16521cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall const std::vector<hwc2_layer_t>& layers, 16531cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall Hwc2TestLayers* testLayers, bool* outSkip) 16541cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall { 16551cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall for (auto layer : layers) { 16561cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerProperties(display, layer, 16571cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall testLayers, outSkip)); 16581cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall if (*outSkip) 16591cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall return; 16601cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } 16611cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } 16621cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 1663563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall void setClientTarget(hwc2_display_t display, 1664563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestClientTarget* testClientTarget, 1665563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const Hwc2TestLayers& testLayers, 1666563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const std::set<hwc2_layer_t>& clientLayers, 1667563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const std::set<hwc2_layer_t>& clearLayers, bool flipClientTarget, 1668563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const Area& displayArea) 1669563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall { 1670563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall android_dataspace_t dataspace = HAL_DATASPACE_UNKNOWN; 1671563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall hwc_region_t damage = { }; 1672563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall buffer_handle_t handle; 1673563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall int32_t acquireFence; 1674563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1675563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_EQ(testClientTarget->getBuffer(testLayers, clientLayers, 1676563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall clearLayers, flipClientTarget, displayArea, &handle, 1677563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall &acquireFence), 0); 1678563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall EXPECT_NO_FATAL_FAILURE(setClientTarget(display, handle, acquireFence, 1679563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall dataspace, damage)); 1680563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall } 1681563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1682563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall void presentDisplays(size_t layerCnt, Hwc2TestCoverage coverage, 1683563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage>& 1684563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall coverageExceptions, bool optimize) 1685563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall { 1686563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall for (auto display : mDisplays) { 1687563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::vector<hwc2_config_t> configs; 1688563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1689563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 1690563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(enableVsync(display)); 1691563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1692563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 1693563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1694563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall for (auto config : configs) { 1695563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Area displayArea; 1696563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::vector<hwc2_layer_t> layers; 1697563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1698563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 1699563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(getActiveDisplayArea(display, 1700563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall &displayArea)); 1701563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1702563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayers(display, &layers, layerCnt)); 1703563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestLayers testLayers(layers, coverage, displayArea, 1704563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall coverageExceptions); 1705563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1706563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall if (optimize && !testLayers.optimizeLayouts()) 1707563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall continue; 1708563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1709563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::set<hwc2_layer_t> clientLayers; 1710563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::set<hwc2_layer_t> clearLayers; 1711563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestClientTarget testClientTarget; 1712563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1713563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall do { 1714563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall uint32_t numTypes, numRequests; 1715563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool hasChanges, skip; 1716563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool flipClientTarget; 1717563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall int32_t presentFence; 1718563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1719563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperties(display, layers, 1720563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall &testLayers, &skip)); 1721563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall if (skip) 1722563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall continue; 1723563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1724563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(validateDisplay(display, &numTypes, 1725563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall &numRequests, &hasChanges)); 1726563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall if (hasChanges) 1727563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall EXPECT_LE(numTypes, static_cast<uint32_t>(layers.size())) 1728563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall << "wrong number of requests"; 1729563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1730563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(handleCompositionChanges(display, 1731563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall testLayers, layers, numTypes, &clientLayers)); 1732563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(handleRequests(display, layers, 1733563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall numRequests, &clearLayers, &flipClientTarget)); 1734563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(setClientTarget(display, 1735563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall &testClientTarget, testLayers, clientLayers, 1736563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall clearLayers, flipClientTarget, displayArea)); 1737563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(acceptDisplayChanges(display)); 1738563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1739563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(waitForVsync()); 1740563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1741563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall EXPECT_NO_FATAL_FAILURE(presentDisplay(display, 1742563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall &presentFence)); 1743563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1744563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(closeFences(display, presentFence)); 1745563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1746563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall } while (testLayers.advance()); 1747563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1748563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayers(display, 1749563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::move(layers))); 1750563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall } 1751563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1752563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(disableVsync(display)); 1753563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 1754563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall } 1755563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall } 1756563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 17574d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall hwc2_device_t* mHwc2Device = nullptr; 1758cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1759cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall enum class Hwc2TestHotplugStatus { 1760cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall Init = 1, 1761cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall Receiving, 1762cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall Done, 1763cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall }; 1764cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1765cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::mutex mHotplugMutex; 1766cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::condition_variable mHotplugCv; 1767cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall Hwc2TestHotplugStatus mHotplugStatus = Hwc2TestHotplugStatus::Init; 1768cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::unordered_set<hwc2_display_t> mDisplays; 17691db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 17701db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall /* Store all created layers that have not been destroyed. If an ASSERT_* 17711db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall * fails, then destroy the layers on exit */ 17721db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall std::set<std::pair<hwc2_display_t, hwc2_layer_t>> mLayers; 177303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 177403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall /* Store the power mode state. If it is not HWC2_POWER_MODE_OFF when 177503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall * tearing down the test cases, change it to HWC2_POWER_MODE_OFF */ 177603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall std::set<hwc2_display_t> mActiveDisplays; 1777572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1778bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall /* Store all created virtual displays that have not been destroyed. If an 1779bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall * ASSERT_* fails, then destroy the virtual displays on exit */ 1780bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall std::set<hwc2_display_t> mVirtualDisplays; 1781bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 1782572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall std::mutex mVsyncMutex; 1783572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall std::condition_variable mVsyncCv; 1784572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_display_t mVsyncDisplay; 1785572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall int64_t mVsyncTimestamp = -1; 17864d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall}; 17874d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 1788cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wallvoid hwc2TestHotplugCallback(hwc2_callback_data_t callbackData, 1789cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2_display_t display, int32_t connection) 1790cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall{ 1791cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall if (callbackData) 1792cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall static_cast<Hwc2Test*>(callbackData)->hotplugCallback(display, 1793cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall connection); 1794cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall} 1795cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1796572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wallvoid hwc2TestVsyncCallback(hwc2_callback_data_t callbackData, 1797572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_display_t display, int64_t timestamp) 1798572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 1799572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall if (callbackData) 1800572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall static_cast<Hwc2Test*>(callbackData)->vsyncCallback(display, 1801572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall timestamp); 1802572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 1803572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1804ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wallvoid setBlendMode(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 18055a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 1806ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall{ 1807ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerBlendMode(display, layer, 18085a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getBlendMode(), outErr)); 18095a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall} 18105a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 18115a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wallvoid setBuffer(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 18125a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 18135a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall{ 18145a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall buffer_handle_t handle; 18155a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall android::base::unique_fd acquireFence; 18165a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall hwc2_composition_t composition = testLayer->getComposition(); 18175a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 18185a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall if (composition == HWC2_COMPOSITION_CLIENT 18195a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall || composition == HWC2_COMPOSITION_SOLID_COLOR 18205a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall || composition == HWC2_COMPOSITION_SIDEBAND) 18215a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall return; 18225a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 18235a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall if (testLayer->getBuffer(&handle, &acquireFence) < 0) 18245a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall return; 18255a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 18265a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerCompositionType(display, layer, 18275a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall composition)); 18285a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerBuffer(display, layer, 18295a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall handle, acquireFence, outErr)); 1830ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall} 1831ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 1832ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wallvoid setColor(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 18335a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 1834ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall{ 1835ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerCompositionType(display, 1836ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall layer, HWC2_COMPOSITION_SOLID_COLOR)); 1837ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerPlaneAlpha(display, 18385a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall layer, testLayer->getPlaneAlpha())); 1839ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerBlendMode(display, 18405a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall layer, testLayer->getBlendMode())); 1841ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerColor(display, layer, 18425a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getColor(), outErr)); 1843ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall} 1844ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 18456bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wallvoid setComposition(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 18465a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 18476bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall{ 18485a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall hwc2_composition_t composition = testLayer->getComposition(); 18496bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 18506bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 18516bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerCompositionType(display, layer, 18526bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall composition, &err)); 18536bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall if (outErr) { 18546bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall *outErr = err; 18556bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall return; 18566bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 18576bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 18586bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall if (composition != HWC2_COMPOSITION_SIDEBAND) { 18596bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall EXPECT_EQ(err, HWC2_ERROR_NONE) << "returned wrong error code"; 18606bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } else { 18616bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall EXPECT_TRUE(err == HWC2_ERROR_NONE || err == HWC2_ERROR_UNSUPPORTED) 18626bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall << "returned wrong error code"; 18636bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 18646bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall} 18656bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 18662a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wallvoid setCursorPosition(Hwc2Test* test, hwc2_display_t display, 18675a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall hwc2_layer_t layer, Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 18682a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall{ 18692a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerCompositionType(display, 18702a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall layer, HWC2_COMPOSITION_CURSOR)); 18712a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 18725a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall const hwc_rect_t cursorPosition = testLayer->getCursorPosition(); 18732a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setCursorPosition(display, layer, 18742a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall cursorPosition.left, cursorPosition.top, outErr)); 18752a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall} 18762a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 1877b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wallvoid setDataspace(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 18785a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 1879b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall{ 1880b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerDataspace(display, layer, 18815a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getDataspace(), outErr)); 1882b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall} 1883b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 1884600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wallvoid setDisplayFrame(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 18855a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 1886600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall{ 1887600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerDisplayFrame(display, layer, 18885a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getDisplayFrame(), outErr)); 1889600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall} 1890600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 18912b1f53060ea8587a428f826cf7890354ff124722Marissa Wallvoid setPlaneAlpha(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 18925a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t *outErr) 18932b1f53060ea8587a428f826cf7890354ff124722Marissa Wall{ 18942b1f53060ea8587a428f826cf7890354ff124722Marissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerBlendMode(display, layer, 18955a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getBlendMode())); 18962b1f53060ea8587a428f826cf7890354ff124722Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerPlaneAlpha(display, layer, 18975a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getPlaneAlpha(), outErr)); 18982b1f53060ea8587a428f826cf7890354ff124722Marissa Wall} 18992b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 1900c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wallvoid setSourceCrop(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 19015a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 1902c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall{ 1903c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerSourceCrop(display, layer, 19045a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getSourceCrop(), outErr)); 1905c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall} 1906c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 1907ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wallvoid setSurfaceDamage(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 19085a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 1909ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall{ 1910ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerSurfaceDamage(display, layer, 19115a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getSurfaceDamage(), outErr)); 1912ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall} 1913ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 1914ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wallvoid setTransform(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 19155a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 1916ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall{ 1917ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerTransform(display, layer, 19185a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getTransform(), outErr)); 1919ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall} 1920ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 1921f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wallvoid setVisibleRegion(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 1922f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 1923f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall{ 1924f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerVisibleRegion(display, layer, 1925f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall testLayer->getVisibleRegion(), outErr)); 1926f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall} 1927f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 1928273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wallvoid setZOrder(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 19295a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 1930273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall{ 1931273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerZOrder(display, layer, 19325a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getZOrder(), outErr)); 1933273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall} 1934273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 1935ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wallbool advanceBlendMode(Hwc2TestLayer* testLayer) 1936ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall{ 1937ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall return testLayer->advanceBlendMode(); 1938ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall} 1939ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 19405a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wallbool advanceBuffer(Hwc2TestLayer* testLayer) 19415a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall{ 19425a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall if (testLayer->advanceComposition()) 19435a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall return true; 19445a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall return testLayer->advanceBufferArea(); 19455a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall} 19465a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 1947ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wallbool advanceColor(Hwc2TestLayer* testLayer) 1948ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall{ 1949ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall /* Color depends on blend mode so advance blend mode last so color is not 1950ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall * force to update as often */ 1951ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall if (testLayer->advancePlaneAlpha()) 1952ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall return true; 1953ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall if (testLayer->advanceColor()) 1954ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall return true; 1955ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall return testLayer->advanceBlendMode(); 1956ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall} 1957ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 19586bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wallbool advanceComposition(Hwc2TestLayer* testLayer) 19596bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall{ 19606bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall return testLayer->advanceComposition(); 19616bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall} 19626bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 19632a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wallbool advanceCursorPosition(Hwc2TestLayer* testLayer) 19642a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall{ 19652a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall return testLayer->advanceCursorPosition(); 19662a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall} 19672a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 1968b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wallbool advanceDataspace(Hwc2TestLayer* testLayer) 1969b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall{ 1970b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall return testLayer->advanceDataspace(); 1971b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall} 1972b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 1973600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wallbool advanceDisplayFrame(Hwc2TestLayer* testLayer) 1974600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall{ 1975600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall return testLayer->advanceDisplayFrame(); 1976600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall} 1977600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 19782b1f53060ea8587a428f826cf7890354ff124722Marissa Wallbool advancePlaneAlpha(Hwc2TestLayer* testLayer) 19792b1f53060ea8587a428f826cf7890354ff124722Marissa Wall{ 19802b1f53060ea8587a428f826cf7890354ff124722Marissa Wall return testLayer->advancePlaneAlpha(); 19812b1f53060ea8587a428f826cf7890354ff124722Marissa Wall} 19822b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 1983c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wallbool advanceSourceCrop(Hwc2TestLayer* testLayer) 1984c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall{ 1985c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall if (testLayer->advanceSourceCrop()) 1986c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall return true; 1987c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall return testLayer->advanceBufferArea(); 1988c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall} 1989c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 1990ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wallbool advanceSurfaceDamage(Hwc2TestLayer* testLayer) 1991ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall{ 1992ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall if (testLayer->advanceSurfaceDamage()) 1993ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall return true; 1994ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall return testLayer->advanceBufferArea(); 1995ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall} 1996ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 1997ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wallbool advanceTransform(Hwc2TestLayer* testLayer) 1998ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall{ 1999ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall return testLayer->advanceTransform(); 2000ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall} 2001ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 2002f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wallbool advanceVisibleRegions(Hwc2TestLayers* testLayers) 2003f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall{ 2004f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall return testLayers->advanceVisibleRegions(); 2005f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall} 2006f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 2007f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wallbool advanceClientTargetSupport( 2008f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall Hwc2TestClientTargetSupport* testClientTargetSupport) 2009f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall{ 2010f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall return testClientTargetSupport->advance(); 2011f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall} 20124d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 20134d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wallstatic const std::array<hwc2_function_descriptor_t, 42> requiredFunctions = {{ 20144d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_ACCEPT_DISPLAY_CHANGES, 20154d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_CREATE_LAYER, 20164d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_CREATE_VIRTUAL_DISPLAY, 20174d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_DESTROY_LAYER, 20184d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_DESTROY_VIRTUAL_DISPLAY, 20194d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_DUMP, 20204d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_ACTIVE_CONFIG, 20214d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_CHANGED_COMPOSITION_TYPES, 20224d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_CLIENT_TARGET_SUPPORT, 20234d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_COLOR_MODES, 20244d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_DISPLAY_ATTRIBUTE, 20254d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_DISPLAY_CONFIGS, 20264d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_DISPLAY_NAME, 20274d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_DISPLAY_REQUESTS, 20284d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_DISPLAY_TYPE, 20294d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_DOZE_SUPPORT, 20304d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_HDR_CAPABILITIES, 20314d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_MAX_VIRTUAL_DISPLAY_COUNT, 20324d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_RELEASE_FENCES, 20334d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_PRESENT_DISPLAY, 20344d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_REGISTER_CALLBACK, 20354d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_ACTIVE_CONFIG, 20364d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_CLIENT_TARGET, 20374d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_COLOR_MODE, 20384d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_COLOR_TRANSFORM, 20394d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_CURSOR_POSITION, 20404d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_BLEND_MODE, 20414d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_BUFFER, 20424d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_COLOR, 20434d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_COMPOSITION_TYPE, 20444d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_DATASPACE, 20454d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_DISPLAY_FRAME, 20464d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_PLANE_ALPHA, 20474d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_SOURCE_CROP, 20484d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_SURFACE_DAMAGE, 20494d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_TRANSFORM, 20504d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_VISIBLE_REGION, 20514d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_Z_ORDER, 20524d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_OUTPUT_BUFFER, 20534d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_POWER_MODE, 20544d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_VSYNC_ENABLED, 20554d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_VALIDATE_DISPLAY, 20564d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall}}; 20574d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 20584d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall/* TESTCASE: Tests that the HWC2 supports all required functions. */ 20594d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa WallTEST_F(Hwc2Test, GET_FUNCTION) 20604d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall{ 20614d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall for (hwc2_function_descriptor_t descriptor : requiredFunctions) { 20624d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall hwc2_function_pointer_t pfn = getFunction(descriptor); 20634d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall EXPECT_TRUE(pfn) << "failed to get function " 20644d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall << getFunctionDescriptorName(descriptor); 20654d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall } 20664d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall} 20674d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 20684d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall/* TESTCASE: Tests that the HWC2 fails to retrieve and invalid function. */ 20694d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa WallTEST_F(Hwc2Test, GET_FUNCTION_invalid_function) 20704d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall{ 20714d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall hwc2_function_pointer_t pfn = getFunction(HWC2_FUNCTION_INVALID); 20724d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall EXPECT_FALSE(pfn) << "failed to get invalid function"; 20734d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall} 20744d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 20754d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall/* TESTCASE: Tests that the HWC2 does not return an invalid capability. */ 20764d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa WallTEST_F(Hwc2Test, GET_CAPABILITIES) 20774d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall{ 20784d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall std::vector<hwc2_capability_t> capabilities; 20794d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 20804d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall getCapabilities(&capabilities); 20814d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 20824d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall EXPECT_EQ(std::count(capabilities.begin(), capabilities.end(), 20834d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_CAPABILITY_INVALID), 0); 20844d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall} 2085a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 2086a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wallstatic const std::array<hwc2_callback_descriptor_t, 3> callbackDescriptors = {{ 2087a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall HWC2_CALLBACK_HOTPLUG, 2088a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall HWC2_CALLBACK_REFRESH, 2089a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall HWC2_CALLBACK_VSYNC, 2090a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall}}; 2091a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 2092a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall/* TESTCASE: Tests that the HWC2 can successfully register all required 2093a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall * callback functions. */ 2094a4b01488e852c0c16df89d04914e6f060dd862e3Marissa WallTEST_F(Hwc2Test, REGISTER_CALLBACK) 2095a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall{ 2096a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall hwc2_callback_data_t data = reinterpret_cast<hwc2_callback_data_t>( 2097a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall const_cast<char*>("data")); 2098a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 2099a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall for (auto descriptor : callbackDescriptors) { 2100a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(descriptor, data, 2101a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall []() { return; })); 2102a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall } 2103a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall} 2104a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 2105a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall/* TESTCASE: Test that the HWC2 fails to register invalid callbacks. */ 2106a4b01488e852c0c16df89d04914e6f060dd862e3Marissa WallTEST_F(Hwc2Test, REGISTER_CALLBACK_bad_parameter) 2107a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall{ 2108a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall hwc2_callback_data_t data = reinterpret_cast<hwc2_callback_data_t>( 2109a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall const_cast<char*>("data")); 2110a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 2111a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 2112a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_INVALID, data, 2113a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall []() { return; }, &err)); 2114a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_PARAMETER) << "returned wrong error code"; 2115a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall} 2116a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 2117a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall/* TESTCASE: Tests that the HWC2 can register a callback with null data. */ 2118a4b01488e852c0c16df89d04914e6f060dd862e3Marissa WallTEST_F(Hwc2Test, REGISTER_CALLBACK_null_data) 2119a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall{ 2120a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall hwc2_callback_data_t data = nullptr; 2121a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 2122a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall for (auto descriptor : callbackDescriptors) { 2123a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(descriptor, data, 2124a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall []() { return; })); 2125a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall } 2126a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall} 2127cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 2128cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall/* TESTCASE: Tests that the HWC2 returns the correct display type for each 2129cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall * physical display. */ 2130cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa WallTEST_F(Hwc2Test, GET_DISPLAY_TYPE) 2131cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall{ 2132cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall for (auto display : mDisplays) { 2133cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2_display_type_t type; 2134cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 2135cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayType(display, &type)); 2136cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall EXPECT_EQ(type, HWC2_DISPLAY_TYPE_PHYSICAL) << "failed to return" 2137cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall " correct display type"; 2138cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 2139cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall} 2140cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 2141cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall/* TESTCASE: Tests that the HWC2 returns an error when the display type of a bad 2142cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall * display is requested. */ 2143cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa WallTEST_F(Hwc2Test, GET_DISPLAY_TYPE_bad_display) 2144cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall{ 2145cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2_display_t display; 2146cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2_display_type_t type; 2147cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 2148cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 2149cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 2150cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 2151cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayType(display, &type, &err)); 2152cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 2153cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall} 21541db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 21551db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall/* TESTCASE: Tests that the HWC2 can create and destroy layers. */ 21561db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa WallTEST_F(Hwc2Test, CREATE_DESTROY_LAYER) 21571db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall{ 21581db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (auto display : mDisplays) { 21591db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_layer_t layer; 21601db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 21611db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 21621db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 21631db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 21641db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 21651db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall} 21661db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 21671db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall/* TESTCASE: Tests that the HWC2 cannot create a layer for a bad display */ 21681db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa WallTEST_F(Hwc2Test, CREATE_LAYER_bad_display) 21691db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall{ 21701db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_display_t display; 21711db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_layer_t layer; 21721db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 21731db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 21741db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 21751db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 21761db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer, &err)); 21771db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 21781db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall} 21791db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 21801db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall/* TESTCASE: Tests that the HWC2 will either support a large number of resources 21811db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall * or will return no resources. */ 21821db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa WallTEST_F(Hwc2Test, CREATE_LAYER_no_resources) 21831db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall{ 21841db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall const size_t layerCnt = 1000; 21851db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 21861db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (auto display : mDisplays) { 21871db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall std::vector<hwc2_layer_t> layers; 21881db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 21891db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(createLayers(display, &layers, layerCnt)); 21901db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 21911db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayers(display, std::move(layers))); 21921db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 21931db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall} 21941db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 21951db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall/* TESTCASE: Tests that the HWC2 cannot destroy a layer for a bad display */ 21961db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa WallTEST_F(Hwc2Test, DESTROY_LAYER_bad_display) 21971db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall{ 21981db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_display_t badDisplay; 21991db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 22001db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&badDisplay)); 22011db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 22021db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (auto display : mDisplays) { 22031db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_layer_t layer = 0; 22041db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 22051db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 22061db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(badDisplay, layer, &err)); 22071db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 22081db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 22091db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 22101db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 22111db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(badDisplay, layer, &err)); 22121db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 22131db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 22141db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 22151db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 22161db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall} 22171db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 22181db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall/* TESTCASE: Tests that the HWC2 cannot destory a bad layer */ 22191db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa WallTEST_F(Hwc2Test, DESTROY_LAYER_bad_layer) 22201db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall{ 22211db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (auto display : mDisplays) { 22221db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_layer_t layer; 22231db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 22241db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 22251db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, UINT64_MAX / 2, &err)); 22261db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 22271db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 22281db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, 0, &err)); 22291db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 22301db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 22311db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, UINT64_MAX - 1, &err)); 22321db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 22331db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 22341db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, 1, &err)); 22351db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 22361db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 22371db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, UINT64_MAX, &err)); 22381db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 22391db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 22401db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 22411db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 22421db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer + 1, &err)); 22431db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 22441db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 22451db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 22461db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 22471db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer, &err)); 22481db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 22491db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 22501db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall} 2251cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2252cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wallstatic const std::array<hwc2_attribute_t, 2> requiredAttributes = {{ 2253cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall HWC2_ATTRIBUTE_WIDTH, 2254cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall HWC2_ATTRIBUTE_HEIGHT, 2255cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall}}; 2256cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2257cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wallstatic const std::array<hwc2_attribute_t, 3> optionalAttributes = {{ 2258cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall HWC2_ATTRIBUTE_VSYNC_PERIOD, 2259cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall HWC2_ATTRIBUTE_DPI_X, 2260cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall HWC2_ATTRIBUTE_DPI_Y, 2261cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall}}; 2262cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2263cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 can return display attributes for a valid 2264cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall * config. */ 2265cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_ATTRIBUTE) 2266cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 2267cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto display : mDisplays) { 2268cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs; 2269cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2270cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 2271cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2272cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto config : configs) { 2273cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall int32_t value; 2274cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2275cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto attribute : requiredAttributes) { 2276cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, 2277cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall attribute, &value)); 2278cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_GE(value, 0) << "missing required attribute " 2279cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall << getAttributeName(attribute) << " for config " 2280cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall << config; 2281cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 2282cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto attribute : optionalAttributes) { 2283cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, 2284cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall attribute, &value)); 2285cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 2286cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 2287cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 2288cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 2289cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2290cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 will return a value of -1 for an invalid 2291cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall * attribute */ 2292cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_ATTRIBUTE_invalid_attribute) 2293cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 2294cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall const hwc2_attribute_t attribute = HWC2_ATTRIBUTE_INVALID; 2295cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2296cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto display : mDisplays) { 2297cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs; 2298cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2299cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 2300cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2301cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto config : configs) { 2302cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall int32_t value; 2303cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 2304cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2305cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, 2306cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall attribute, &value, &err)); 2307cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(value, -1) << "failed to return -1 for an invalid" 2308cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall " attribute for config " << config; 2309cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 2310cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 2311cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 2312cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2313cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 will fail to get attributes for a bad display */ 2314cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_ATTRIBUTE_bad_display) 2315cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 2316cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_display_t display; 2317cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall const hwc2_config_t config = 0; 2318cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall int32_t value; 2319cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 2320cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2321cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 2322cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2323cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto attribute : requiredAttributes) { 2324cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, attribute, 2325cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall &value, &err)); 2326cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 2327cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 2328cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2329cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto attribute : optionalAttributes) { 2330cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, attribute, 2331cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall &value, &err)); 2332cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 2333cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 2334cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 2335cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2336cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 will fail to get attributes for a bad config */ 2337cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_ATTRIBUTE_bad_config) 2338cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 2339cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto display : mDisplays) { 2340cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_config_t config; 2341cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall int32_t value; 2342cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 2343cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2344cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getInvalidConfig(display, &config)); 2345cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2346cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto attribute : requiredAttributes) { 2347cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, 2348cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall attribute, &value, &err)); 2349cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_CONFIG) << "returned wrong error code"; 2350cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 2351cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2352cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto attribute : optionalAttributes) { 2353cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, 2354cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall attribute, &value, &err)); 2355cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_CONFIG) << "returned wrong error code"; 2356cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 2357cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 2358cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 2359cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2360cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 will get display configs for active displays */ 2361cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_CONFIGS) 2362cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 2363cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto display : mDisplays) { 2364cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs; 2365cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2366cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 2367cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 2368cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 2369cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2370cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 will not get display configs for bad displays */ 2371cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_CONFIGS_bad_display) 2372cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 2373cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_display_t display; 2374cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs; 2375cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 2376cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2377cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 2378cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2379cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs, &err)); 2380cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2381cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 2382cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_TRUE(configs.empty()) << "returned configs for bad display"; 2383cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 2384cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2385cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 will return the same config list multiple 2386cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall * times in a row. */ 2387cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_CONFIGS_same) 2388cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 2389cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto display : mDisplays) { 2390cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs1, configs2; 2391cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2392cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs1)); 2393cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs2)); 2394cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2395cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_TRUE(std::is_permutation(configs1.begin(), configs1.end(), 2396cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall configs2.begin())) << "returned two different config sets"; 2397cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 2398cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 2399cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2400cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 does not return duplicate display configs */ 2401cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_CONFIGS_duplicate) 2402cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 2403cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto display : mDisplays) { 2404cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs; 2405cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2406cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 2407cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2408cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::unordered_set<hwc2_config_t> configsSet(configs.begin(), 2409cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall configs.end()); 2410cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(configs.size(), configsSet.size()) << "returned duplicate" 2411cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall " configs"; 2412cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 2413cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 241493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 241593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall/* TESTCASE: Tests that the HWC2 returns the active config for a display */ 241693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa WallTEST_F(Hwc2Test, GET_ACTIVE_CONFIG) 241793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall{ 241893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall for (auto display : mDisplays) { 241993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall std::vector<hwc2_config_t> configs; 242093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 242193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 242293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 242393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall for (auto config : configs) { 242493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_config_t activeConfig; 242593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 242693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 242793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveConfig(display, &activeConfig)); 242893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 242993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_EQ(activeConfig, config) << "failed to get active config"; 243093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 243193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 243293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall} 243393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 243493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall/* TESTCASE: Tests that the HWC2 does not return an active config for a bad 243593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall * display. */ 243693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa WallTEST_F(Hwc2Test, GET_ACTIVE_CONFIG_bad_display) 243793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall{ 243893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_display_t display; 243993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_config_t activeConfig; 244093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 244193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 244293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 244393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 244493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveConfig(display, &activeConfig, &err)); 244593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 244693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 244793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall} 244893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 244993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall/* TESTCASE: Tests that the HWC2 either begins with a valid active config 245093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall * or returns an error when getActiveConfig is called. */ 245193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa WallTEST_F(Hwc2Test, GET_ACTIVE_CONFIG_bad_config) 245293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall{ 245393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall for (auto display : mDisplays) { 245493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall std::vector<hwc2_config_t> configs; 245593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_config_t activeConfig; 245693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 245793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 245893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 245993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 246093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall if (configs.empty()) 246193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall return; 246293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 246393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveConfig(display, &activeConfig, &err)); 246493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall if (err == HWC2_ERROR_NONE) { 246593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_NE(std::count(configs.begin(), configs.end(), 246693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall activeConfig), 0) << "active config is not found in " 246793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall " configs for display"; 246893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } else { 246993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_CONFIG) << "returned wrong error code"; 247093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 247193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 247293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall} 247393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 247493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall/* TESTCASE: Tests that the HWC2 can set every display config as an active 247593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall * config */ 247693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa WallTEST_F(Hwc2Test, SET_ACTIVE_CONFIG) 247793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall{ 247893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall for (auto display : mDisplays) { 247993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall std::vector<hwc2_config_t> configs; 248093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 248193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 248293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 248393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall for (auto config : configs) { 248493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 248593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 248693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 248793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall} 248893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 248993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set an active config for a bad display */ 249093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa WallTEST_F(Hwc2Test, SET_ACTIVE_CONFIG_bad_display) 249193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall{ 249293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_display_t display; 249393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall const hwc2_config_t config = 0; 249493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 249593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 249693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 249793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 249893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config, &err)); 249993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 250093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall} 250193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 250293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set an invalid active config */ 250393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa WallTEST_F(Hwc2Test, SET_ACTIVE_CONFIG_bad_config) 250493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall{ 250593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall for (auto display : mDisplays) { 250693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_config_t config; 250793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 250893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 250993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getInvalidConfig(display, &config)); 251093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 251193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config, &err)); 251293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_CONFIG) << "returned wrong error code"; 251393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 251493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall} 251503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 251603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 returns a valid value for getDozeSupport. */ 251703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, GET_DOZE_SUPPORT) 251803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 251903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall for (auto display : mDisplays) { 252003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall int32_t support = -1; 252103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 252203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getDozeSupport(display, &support)); 252303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 252403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_TRUE(support == 0 || support == 1) << "invalid doze support value"; 252503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 252603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 252703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 252803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 cannot get doze support for a bad display. */ 252903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, GET_DOZE_SUPPORT_bad_display) 253003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 253103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_display_t display; 253203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall int32_t support = -1; 253303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 253403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 253503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 253603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 253703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getDozeSupport(display, &support, &err)); 253803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 253903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 254003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 254103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 254203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 can set all supported power modes */ 254303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, SET_POWER_MODE) 254403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 254503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall for (auto display : mDisplays) { 254603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 254703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 254803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 254903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall int32_t support = -1; 255003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getDozeSupport(display, &support)); 255103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (support != 1) 255203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall return; 255303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 255403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_DOZE)); 255503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, 255603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall HWC2_POWER_MODE_DOZE_SUSPEND)); 255703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 255803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 255903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 256003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 256103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 256203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set a power mode for a bad display. */ 256303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, SET_POWER_MODE_bad_display) 256403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 256503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_display_t display; 256603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 256703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 256803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 256903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 257003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON, &err)); 257103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 257203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 257303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF, &err)); 257403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 257503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 257603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall int32_t support = -1; 257703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getDozeSupport(display, &support, &err)); 257803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (support != 1) 257903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall return; 258003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 258103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_DOZE, &err)); 258203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 258303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 258403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_DOZE_SUSPEND, 258503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall &err)); 258603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 258703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 258803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 258903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set an invalid power mode value. */ 259003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, SET_POWER_MODE_bad_parameter) 259103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 259203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall for (auto display : mDisplays) { 259303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_power_mode_t mode = static_cast<hwc2_power_mode_t>( 259403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall HWC2_POWER_MODE_DOZE_SUSPEND + 1); 259503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 259603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 259703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, mode, &err)); 259803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_PARAMETER) << "returned wrong error code " 259903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall << mode; 260003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 260103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 260203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 260303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 will return unsupported if it does not support 260403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall * an optional power mode. */ 260503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, SET_POWER_MODE_unsupported) 260603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 260703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall for (auto display : mDisplays) { 260803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall int32_t support = -1; 260903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 261003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 261103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getDozeSupport(display, &support, &err)); 261203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (support == 1) 261303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall return; 261403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 261503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_EQ(support, 0) << "invalid doze support value"; 261603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 261703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_DOZE, 261803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall &err)); 261903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_UNSUPPORTED) << "returned wrong error code"; 262003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 262103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, 262203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall HWC2_POWER_MODE_DOZE_SUSPEND, &err)); 262303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_UNSUPPORTED) << "returned wrong error code"; 262403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 262503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 262603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 262703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 can set the same power mode multiple times. */ 262803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, SET_POWER_MODE_stress) 262903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 263003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall for (auto display : mDisplays) { 263103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 263203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 263303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 263403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 263503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 263603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 263703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 263803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 263903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 264003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall int32_t support = -1; 264103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getDozeSupport(display, &support)); 264203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (support != 1) 264303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall return; 264403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 264503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_DOZE)); 264603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_DOZE)); 264703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 264803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, 264903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall HWC2_POWER_MODE_DOZE_SUSPEND)); 265003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, 265103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall HWC2_POWER_MODE_DOZE_SUSPEND)); 265203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 265303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 265403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 265503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 2656572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2657572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 can enable and disable vsync on active 2658572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall * displays */ 2659572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED) 2660572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 2661572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall for (auto display : mDisplays) { 2662572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_callback_data_t data = reinterpret_cast<hwc2_callback_data_t>( 2663572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall const_cast<char*>("data")); 2664572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2665572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 2666572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2667572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_VSYNC, data, 2668572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall []() { return; })); 2669572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2670572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE)); 2671572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2672572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 2673572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2674572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 2675572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 2676572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 2677572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2678572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 issues a valid vsync callback. */ 2679572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED_callback) 2680572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 2681572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall for (auto display : mDisplays) { 2682572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_display_t receivedDisplay; 2683572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall int64_t receivedTimestamp; 2684572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2685572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 2686572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2687572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(enableVsync(display)); 2688572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2689572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(waitForVsync(&receivedDisplay, 2690572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall &receivedTimestamp)); 2691572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2692572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall EXPECT_EQ(receivedDisplay, display) << "failed to get correct display"; 2693572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall EXPECT_GE(receivedTimestamp, 0) << "failed to get valid timestamp"; 2694572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2695572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(disableVsync(display)); 2696572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2697572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 2698572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 2699572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 2700572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2701572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 cannot enable a vsync for a bad display */ 2702572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED_bad_display) 2703572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 2704572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_display_t display; 2705572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_callback_data_t data = reinterpret_cast<hwc2_callback_data_t>( 2706572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall const_cast<char*>("data")); 2707572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 2708572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2709572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 2710572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2711572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_VSYNC, data, 2712572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall []() { return; })); 2713572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2714572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE, &err)); 2715572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 2716572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2717572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE, &err)); 2718572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 2719572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 2720572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2721572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 cannot enable an invalid vsync value */ 2722572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED_bad_parameter) 2723572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 2724572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall for (auto display : mDisplays) { 2725572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_callback_data_t data = reinterpret_cast<hwc2_callback_data_t>( 2726572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall const_cast<char*>("data")); 2727572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 2728572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2729572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 2730572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2731572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_VSYNC, data, 2732572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall []() { return; })); 2733572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2734572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_INVALID, 2735572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall &err)); 2736572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_PARAMETER) << "returned wrong error code"; 2737572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2738572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 2739572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 2740572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 2741572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2742572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 can enable and disable a vsync value multiple 2743572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall * times. */ 2744572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED_stress) 2745572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 2746572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall for (auto display : mDisplays) { 2747572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_callback_data_t data = reinterpret_cast<hwc2_callback_data_t>( 2748572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall const_cast<char*>("data")); 2749572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2750572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 2751572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2752572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_VSYNC, data, 2753572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall []() { return; })); 2754572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2755572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 2756572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2757572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE)); 2758572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE)); 2759572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2760572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 2761572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 2762572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2763572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 2764572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 2765572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 2766572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2767572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 can set a vsync enable value when the display 2768572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall * is off and no callback is registered. */ 2769572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED_no_callback_no_power) 2770572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 2771572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall const uint secs = 1; 2772572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2773572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall for (auto display : mDisplays) { 2774572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE)); 2775572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2776572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall sleep(secs); 2777572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2778572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 2779572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 2780572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 2781572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2782572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 can set a vsync enable value when no callback 2783572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall * is registered. */ 2784572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED_no_callback) 2785572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 2786572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall const uint secs = 1; 2787572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2788572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall for (auto display : mDisplays) { 2789572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 2790572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2791572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE)); 2792572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2793572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall sleep(secs); 2794572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2795572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 2796572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2797572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 2798572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 2799572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 2800dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 2801dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall/* TESTCASE: Tests that the HWC2 returns a display name for each display */ 2802dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa WallTEST_F(Hwc2Test, GET_DISPLAY_NAME) 2803dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall{ 2804dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall for (auto display : mDisplays) { 2805dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall std::string name; 2806dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 2807dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayName(display, &name)); 2808dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall } 2809dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall} 2810dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 2811dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall/* TESTCASE: Tests that the HWC2 does not return a display name for a bad 2812dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall * display */ 2813dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa WallTEST_F(Hwc2Test, GET_DISPLAY_NAME_bad_display) 2814dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall{ 2815dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall hwc2_display_t display; 2816dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall std::string name; 2817dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 2818dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 2819dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 2820dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 2821dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayName(display, &name, &err)); 2822dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 2823dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall} 28246bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 28256bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall/* TESTCASE: Tests that the HWC2 can set basic composition types. */ 28266bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa WallTEST_F(Hwc2Test, SET_LAYER_COMPOSITION_TYPE) 28276bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall{ 28286bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 28296bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall setComposition, advanceComposition)); 28306bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall} 28316bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 28326bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall/* TESTCASE: Tests that the HWC2 can update a basic composition type on a 28336bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * layer. */ 28346bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa WallTEST_F(Hwc2Test, SET_LAYER_COMPOSITION_TYPE_update) 28356bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall{ 28366bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 28376bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall setComposition, advanceComposition)); 28386bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall} 28396bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 28406bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set a composition type for a bad layer */ 28416bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa WallTEST_F(Hwc2Test, SET_LAYER_COMPOSITION_TYPE_bad_layer) 28426bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall{ 28436bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 28446bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall setComposition)); 28456bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall} 28466bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 28476bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set a bad composition type */ 28486bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa WallTEST_F(Hwc2Test, SET_LAYER_COMPOSITION_TYPE_bad_parameter) 28496bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall{ 28506bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadParameter( 28516bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 28526bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_error_t* outErr) { 28536bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 28546bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerCompositionType(display, 28556bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall layer, HWC2_COMPOSITION_INVALID, outErr)); 28566bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 28576bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall )); 28586bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall} 2859ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 28602a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall/* TESTCASE: Tests that the HWC2 can set the cursor position of a layer. */ 28612a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa WallTEST_F(Hwc2Test, SET_CURSOR_POSITION) 28622a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall{ 28632a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 28642a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ::setCursorPosition, advanceCursorPosition)); 28652a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall} 28662a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 28672a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall/* TESTCASE: Tests that the HWC2 can update the cursor position of a layer. */ 28682a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa WallTEST_F(Hwc2Test, SET_CURSOR_POSITION_update) 28692a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall{ 28702a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 28712a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ::setCursorPosition, advanceCursorPosition)); 28722a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall} 28732a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 28742a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall/* TESTCASE: Tests that the HWC2 can set the cursor position of a layer when the 28752a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall * composition type has not been set to HWC2_COMPOSITION_CURSOR. */ 28762a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa WallTEST_F(Hwc2Test, SET_CURSOR_POSITION_composition_type_unset) 28772a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall{ 28782a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 28792a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 28805a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) { 28812a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 28825a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall const hwc_rect_t cursorPosition = testLayer->getCursorPosition(); 28832a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setCursorPosition(display, layer, 28842a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall cursorPosition.left, cursorPosition.top, outErr)); 28852a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall }, 28862a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 28872a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall advanceCursorPosition)); 28882a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall} 28892a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 28902a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set the cursor position of a bad 28912a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall * display. */ 28922a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa WallTEST_F(Hwc2Test, SET_CURSOR_POSITION_bad_display) 28932a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall{ 28942a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall hwc2_display_t display; 28952a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall hwc2_layer_t layer = 0; 28962a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall int32_t x = 0, y = 0; 28972a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 28982a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 28992a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 29002a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 29012a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_NO_FATAL_FAILURE(setCursorPosition(display, layer, x, y, &err)); 29022a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 29032a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall} 29042a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 29052a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set the cursor position of a bad layer. */ 29062a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa WallTEST_F(Hwc2Test, SET_CURSOR_POSITION_bad_layer) 29072a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall{ 29082a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 29092a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t badLayer, 29105a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) { 29112a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 29125a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall const hwc_rect_t cursorPosition = testLayer->getCursorPosition(); 29132a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setCursorPosition(display, 29142a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall badLayer, cursorPosition.left, cursorPosition.top, 29152a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall outErr)); 29162a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall } 29172a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall )); 29182a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall} 29192a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 2920ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall/* TESTCASE: Tests that the HWC2 can set a blend mode value of a layer. */ 2921ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa WallTEST_F(Hwc2Test, SET_LAYER_BLEND_MODE) 2922ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall{ 2923ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 2924ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall setBlendMode, advanceBlendMode)); 2925ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall} 2926ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 2927ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall/* TESTCASE: Tests that the HWC2 can update a blend mode value of a layer. */ 2928ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa WallTEST_F(Hwc2Test, SET_LAYER_BLEND_MODE_update) 2929ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall{ 2930ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 2931ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall setBlendMode, advanceBlendMode)); 2932ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall} 2933ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 2934ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set a blend mode for a bad layer. */ 2935ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa WallTEST_F(Hwc2Test, SET_LAYER_BLEND_MODE_bad_layer) 2936ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall{ 2937ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 2938ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall setBlendMode)); 2939ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall} 2940ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 2941ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set an invalid blend mode. */ 2942ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa WallTEST_F(Hwc2Test, SET_LAYER_BLEND_MODE_bad_parameter) 2943ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall{ 2944ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadParameter( 2945ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 2946ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall hwc2_error_t* outErr) { 2947ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 2948ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerBlendMode(display, 2949ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall layer, HWC2_BLEND_MODE_INVALID, outErr)); 2950ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall } 2951ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall )); 2952ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall} 2953b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 29545a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall/* TESTCASE: Tests that the HWC2 can set the buffer of a layer. */ 29555a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa WallTEST_F(Hwc2Test, SET_LAYER_BUFFER) 29565a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall{ 29575a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 29585a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall setBuffer, advanceBuffer)); 29595a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall} 29605a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 29615a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall/* TESTCASE: Tests that the HWC2 can update the buffer of a layer. */ 29625a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa WallTEST_F(Hwc2Test, SET_LAYER_BUFFER_update) 29635a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall{ 29645a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 29655a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall setBuffer, advanceBuffer)); 29665a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall} 29675a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 29685a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set the buffer of a bad layer. */ 29695a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa WallTEST_F(Hwc2Test, SET_LAYER_BUFFER_bad_layer) 29705a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall{ 29715a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 29725a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t badLayer, 29735a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) { 29745a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 29755a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall buffer_handle_t handle = nullptr; 29765a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall android::base::unique_fd acquireFence; 29775a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 29785a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall /* If there is not available buffer for the given buffer 29795a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall * properties, it should not fail this test case */ 29805a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall if (testLayer->getBuffer(&handle, &acquireFence) == 0) { 29815a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall *outErr = HWC2_ERROR_BAD_LAYER; 29825a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall return; 29835a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall } 29845a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 29855a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerBuffer(display, badLayer, 29865a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall handle, acquireFence, outErr)); 29875a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall } 29885a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall )); 29895a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall} 29905a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 29915a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall/* TESTCASE: Tests that the HWC2 can set an invalid buffer for a layer. */ 29925a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa WallTEST_F(Hwc2Test, SET_LAYER_BUFFER_bad_parameter) 29935a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall{ 29945a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadParameter( 29955a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 29965a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall hwc2_error_t* outErr) { 29975a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 29985a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall buffer_handle_t handle = nullptr; 29995a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall int32_t acquireFence = -1; 30005a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 30015a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerBuffer(display, layer, 30025a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall handle, acquireFence, outErr)); 30035a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall } 30045a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall )); 30055a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall} 30065a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 3007ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall/* TESTCASE: Tests that the HWC2 can set the color of a layer. */ 3008ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa WallTEST_F(Hwc2Test, SET_LAYER_COLOR) 3009ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall{ 3010ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 3011ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall setColor, advanceColor)); 3012ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall} 3013ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 3014ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall/* TESTCASE: Tests that the HWC2 can update the color of a layer. */ 3015ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa WallTEST_F(Hwc2Test, SET_LAYER_COLOR_update) 3016ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall{ 3017ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 3018ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall setColor, advanceColor)); 3019ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall} 3020ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 3021ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall/* TESTCASE: Tests that the HWC2 can set the color of a layer when the 3022ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall * composition type has not been set to HWC2_COMPOSITION_SOLID_COLOR. */ 3023ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa WallTEST_F(Hwc2Test, SET_LAYER_COLOR_composition_type_unset) 3024ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall{ 3025ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Basic, 3026ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 30275a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) { 3028ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 3029ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerColor(display, layer, 30305a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getColor(), outErr)); 3031ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall }, 3032ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 3033ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall advanceColor)); 3034ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall} 3035ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 3036ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set the color of a bad layer. */ 3037ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa WallTEST_F(Hwc2Test, SET_LAYER_COLOR_bad_layer) 3038ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall{ 3039ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 3040ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t badLayer, 30415a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) { 3042ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 3043ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerColor(display, badLayer, 30445a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getColor(), outErr)); 3045ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall } 3046ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall )); 3047ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall} 3048ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 3049b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall/* TESTCASE: Tests that the HWC2 can set the dataspace of a layer. */ 3050b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa WallTEST_F(Hwc2Test, SET_LAYER_DATASPACE) 3051b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall{ 3052b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 3053b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall setDataspace, advanceDataspace)); 3054b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall} 3055b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 3056b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall/* TESTCASE: Tests that the HWC2 can update the dataspace of a layer. */ 3057b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa WallTEST_F(Hwc2Test, SET_LAYER_DATASPACE_update) 3058b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall{ 3059b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 3060b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall setDataspace, advanceDataspace)); 3061b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall} 3062b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 3063b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set a dataspace for a bad layer. */ 3064b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa WallTEST_F(Hwc2Test, SET_LAYER_DATASPACE_bad_layer) 3065b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall{ 3066b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 3067b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall setDataspace)); 3068b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall} 30692b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 3070600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall/* TESTCASE: Tests that the HWC2 can set the display frame of a layer. */ 3071600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa WallTEST_F(Hwc2Test, SET_LAYER_DISPLAY_FRAME) 3072600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall{ 3073600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 3074600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall setDisplayFrame, advanceDisplayFrame)); 3075600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall} 3076600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 3077600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall/* TESTCASE: Tests that the HWC2 can update the display frame of a layer. */ 3078600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa WallTEST_F(Hwc2Test, SET_LAYER_DISPLAY_FRAME_update) 3079600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall{ 3080600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 3081600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall setDisplayFrame, advanceDisplayFrame)); 3082600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall} 3083600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 3084600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set the display frame of a bad layer. */ 3085600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa WallTEST_F(Hwc2Test, SET_LAYER_DISPLAY_FRAME_bad_layer) 3086600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall{ 3087600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 3088600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall setDisplayFrame)); 3089600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall} 3090600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 30912b1f53060ea8587a428f826cf7890354ff124722Marissa Wall/* TESTCASE: Tests that the HWC2 can set the plane alpha of a layer. */ 30922b1f53060ea8587a428f826cf7890354ff124722Marissa WallTEST_F(Hwc2Test, SET_LAYER_PLANE_ALPHA) 30932b1f53060ea8587a428f826cf7890354ff124722Marissa Wall{ 30942b1f53060ea8587a428f826cf7890354ff124722Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 30952b1f53060ea8587a428f826cf7890354ff124722Marissa Wall setPlaneAlpha, advancePlaneAlpha)); 30962b1f53060ea8587a428f826cf7890354ff124722Marissa Wall} 30972b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 30982b1f53060ea8587a428f826cf7890354ff124722Marissa Wall/* TESTCASE: Tests that the HWC2 can update the plane alpha of a layer. */ 30992b1f53060ea8587a428f826cf7890354ff124722Marissa WallTEST_F(Hwc2Test, SET_LAYER_PLANE_ALPHA_update) 31002b1f53060ea8587a428f826cf7890354ff124722Marissa Wall{ 31012b1f53060ea8587a428f826cf7890354ff124722Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 31022b1f53060ea8587a428f826cf7890354ff124722Marissa Wall setPlaneAlpha, advancePlaneAlpha)); 31032b1f53060ea8587a428f826cf7890354ff124722Marissa Wall} 31042b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 31052b1f53060ea8587a428f826cf7890354ff124722Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set a plane alpha for a bad layer. */ 31062b1f53060ea8587a428f826cf7890354ff124722Marissa WallTEST_F(Hwc2Test, SET_LAYER_PLANE_ALPHA_bad_layer) 31072b1f53060ea8587a428f826cf7890354ff124722Marissa Wall{ 31082b1f53060ea8587a428f826cf7890354ff124722Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 31092b1f53060ea8587a428f826cf7890354ff124722Marissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t badLayer, 31105a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t *outErr) { 31112b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 31122b1f53060ea8587a428f826cf7890354ff124722Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerPlaneAlpha(display, 31135a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall badLayer, testLayer->getPlaneAlpha(), outErr)); 31142b1f53060ea8587a428f826cf7890354ff124722Marissa Wall } 31152b1f53060ea8587a428f826cf7890354ff124722Marissa Wall )); 31162b1f53060ea8587a428f826cf7890354ff124722Marissa Wall} 3117ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 3118c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall/* TESTCASE: Tests that the HWC2 can set the source crop of a layer. */ 3119c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa WallTEST_F(Hwc2Test, SET_LAYER_SOURCE_CROP) 3120c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall{ 3121c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 3122c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall setSourceCrop, advanceSourceCrop)); 3123c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall} 3124c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 3125c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall/* TESTCASE: Tests that the HWC2 can update the source crop of a layer. */ 3126c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa WallTEST_F(Hwc2Test, SET_LAYER_SOURCE_CROP_update) 3127c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall{ 3128c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 3129c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall setSourceCrop, advanceSourceCrop)); 3130c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall} 3131c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 3132c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set the source crop of a bad layer. */ 3133c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa WallTEST_F(Hwc2Test, SET_LAYER_SOURCE_CROP_bad_layer) 3134c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall{ 3135c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 3136c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall setSourceCrop)); 3137c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall} 3138c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 3139ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall/* TESTCASE: Tests that the HWC2 can set the surface damage of a layer. */ 3140ad761818a4426b4e6a0696ba90e05056aa35553cMarissa WallTEST_F(Hwc2Test, SET_LAYER_SURFACE_DAMAGE) 3141ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall{ 3142ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 3143ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall setSurfaceDamage, advanceSurfaceDamage)); 3144ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall} 3145ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 3146ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall/* TESTCASE: Tests that the HWC2 can update the surface damage of a layer. */ 3147ad761818a4426b4e6a0696ba90e05056aa35553cMarissa WallTEST_F(Hwc2Test, SET_LAYER_SURFACE_DAMAGE_update) 3148ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall{ 3149ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 3150ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall setSurfaceDamage, advanceSurfaceDamage)); 3151ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall} 3152ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 3153ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set the surface damage of a bad layer. */ 3154ad761818a4426b4e6a0696ba90e05056aa35553cMarissa WallTEST_F(Hwc2Test, SET_LAYER_SURFACE_DAMAGE_bad_layer) 3155ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall{ 3156ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 3157ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall setSurfaceDamage)); 3158ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall} 3159ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 3160ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall/* TESTCASE: Tests that the HWC2 can set the transform value of a layer. */ 3161ac10819373b1ed4901f26c822484a789a7ca4be0Marissa WallTEST_F(Hwc2Test, SET_LAYER_TRANSFORM) 3162ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall{ 3163ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 3164ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall setTransform, advanceTransform)); 3165ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall} 3166ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 3167ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall/* TESTCASE: Tests that the HWC2 can update the transform value of a layer. */ 3168ac10819373b1ed4901f26c822484a789a7ca4be0Marissa WallTEST_F(Hwc2Test, SET_LAYER_TRANSFORM_update) 3169ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall{ 3170ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 3171ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall setTransform, advanceTransform)); 3172ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall} 3173ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 3174ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set the transform for a bad layer. */ 3175ac10819373b1ed4901f26c822484a789a7ca4be0Marissa WallTEST_F(Hwc2Test, SET_LAYER_TRANSFORM_bad_layer) 3176ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall{ 3177ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 3178ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall setTransform)); 3179ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall} 3180273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 3181f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall/* TESTCASE: Tests that the HWC2 can set the visible region of a layer. */ 3182f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa WallTEST_F(Hwc2Test, SET_LAYER_VISIBLE_REGION) 3183f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall{ 3184f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperties(Hwc2TestCoverage::Basic, 5, 3185f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 3186f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall Hwc2TestLayers* testLayers) { 3187f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 3188f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerVisibleRegion(display, 3189f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall layer, testLayers->getVisibleRegion(layer))); 3190f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall }, 3191f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 3192f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall advanceVisibleRegions)); 3193f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall} 3194f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 3195f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set the visible region of a bad layer. */ 3196f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa WallTEST_F(Hwc2Test, SET_LAYER_VISIBLE_REGION_bad_layer) 3197f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall{ 3198f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 3199f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall setVisibleRegion)); 3200f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall} 3201f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 3202273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall/* TESTCASE: Tests that the HWC2 can set the z order of a layer. */ 3203273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa WallTEST_F(Hwc2Test, SET_LAYER_Z_ORDER) 3204273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall{ 3205273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperties(Hwc2TestCoverage::Complete, 10, 3206273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 32075a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayers* testLayers) { 3208273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 3209273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerZOrder(display, layer, 32105a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayers->getZOrder(layer))); 3211f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall }, 3212f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 3213f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall /* TestLayer z orders are set during the construction of TestLayers 3214f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall * and cannot be updated. There is no need (or ability) to cycle 3215f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall * through additional z order configurations. */ 3216f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall [] (Hwc2TestLayers* /*testLayers*/) { 3217f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall return false; 3218273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 3219273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall )); 3220273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall} 3221273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 3222273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall/* TESTCASE: Tests that the HWC2 can update the z order of a layer. */ 3223273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa WallTEST_F(Hwc2Test, SET_LAYER_Z_ORDER_update) 3224273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall{ 3225273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall const std::vector<uint32_t> zOrders = { static_cast<uint32_t>(0), 3226273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall static_cast<uint32_t>(1), static_cast<uint32_t>(UINT32_MAX / 4), 3227273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall static_cast<uint32_t>(UINT32_MAX / 2), 3228273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall static_cast<uint32_t>(UINT32_MAX) }; 3229273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 3230273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall for (auto display : mDisplays) { 3231273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall std::vector<hwc2_config_t> configs; 3232273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 3233273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 3234273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 3235273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall for (auto config : configs) { 3236273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall hwc2_layer_t layer; 3237273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 3238273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 3239273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 3240273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 3241273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 3242273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall for (uint32_t zOrder : zOrders) { 3243273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall EXPECT_NO_FATAL_FAILURE(setLayerZOrder(display, layer, zOrder)); 3244273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 3245273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 3246273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 3247273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 3248273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 3249273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall} 3250273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 3251273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set the z order of a bad layer. */ 3252273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa WallTEST_F(Hwc2Test, SET_LAYER_Z_ORDER_bad_layer) 3253273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall{ 3254273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 3255273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall setZOrder)); 3256273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall} 32571cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 32581cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall/* TESTCASE: Tests that the HWC2 can display a layer with basic property 32591cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall * coverage */ 32601cd789cd2b300427467586f4ec721a8123f118b7Marissa WallTEST_F(Hwc2Test, VALIDATE_DISPLAY_basic) 32611cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall{ 32621cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_NO_FATAL_FAILURE(displayLayers(Hwc2TestCoverage::Basic, 1, 32631cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall [] (Hwc2Test* test, hwc2_display_t display, 3264706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall const std::vector<hwc2_layer_t>& layers, 3265563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestLayers* /*testLayers*/) { 32661cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 32671cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall uint32_t numTypes, numRequests; 32681cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall bool hasChanges = false; 32691cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 32701cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(test->validateDisplay(display, &numTypes, 32711cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall &numRequests, &hasChanges)); 32721cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall if (hasChanges) 32731cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_LE(numTypes, static_cast<uint32_t>(layers.size())) 32741cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall << "wrong number of requests"; 32751cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } 32761cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall )); 32771cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall} 32781cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 32791cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall/* TESTCASE: Tests that the HWC2 can display 5 layers with default coverage. */ 32801cd789cd2b300427467586f4ec721a8123f118b7Marissa WallTEST_F(Hwc2Test, VALIDATE_DISPLAY_default_5) 32811cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall{ 32821cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_NO_FATAL_FAILURE(displayLayers(Hwc2TestCoverage::Default, 5, 32831cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall [] (Hwc2Test* test, hwc2_display_t display, 3284706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall const std::vector<hwc2_layer_t>& layers, 3285563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestLayers* /*testLayers*/) { 32861cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 32871cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall uint32_t numTypes, numRequests; 32881cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall bool hasChanges = false; 32891cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 32901cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(test->validateDisplay(display, &numTypes, 32911cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall &numRequests, &hasChanges)); 32921cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall if (hasChanges) 32931cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_LE(numTypes, static_cast<uint32_t>(layers.size())) 32941cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall << "wrong number of requests"; 32951cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } 32961cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall )); 32971cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall} 32981cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 32991cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall/* TESTCASE: Tests that the HWC2 cannot validate a bad display */ 33001cd789cd2b300427467586f4ec721a8123f118b7Marissa WallTEST_F(Hwc2Test, VALIDATE_DISPLAY_bad_display) 33011cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall{ 33021cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall hwc2_display_t display; 33031cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall uint32_t numTypes, numRequests; 33041cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 33051cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 33061cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 33071cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 33081cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_NO_FATAL_FAILURE(validateDisplay(display, &numTypes, &numRequests, 33091cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall &err)); 33101cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 33111cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall} 3312706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3313706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall/* TESTCASE: Tests that the HWC2 can get display requests after validating a 3314706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall * basic layer. */ 3315706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa WallTEST_F(Hwc2Test, GET_DISPLAY_REQUESTS_basic) 3316706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall{ 3317706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(displayLayers(Hwc2TestCoverage::Basic, 1, 3318706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, 3319706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall const std::vector<hwc2_layer_t>& layers, 3320563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestLayers* /*testLayers*/) { 3321706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3322706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall uint32_t numTypes, numRequests; 3323706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall bool hasChanges = false; 3324706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3325706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(test->validateDisplay(display, &numTypes, 3326706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall &numRequests, &hasChanges)); 3327706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall if (hasChanges) 3328706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_LE(numTypes, layers.size()) 3329706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << "wrong number of requests"; 3330706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3331706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_NO_FATAL_FAILURE(test->handleRequests(display, layers, 3332706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall numRequests)); 3333706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 3334706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall )); 3335706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall} 3336706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3337706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall/* TESTCASE: Tests that the HWC2 cannot get display requests from a bad display */ 3338706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa WallTEST_F(Hwc2Test, GET_DISPLAY_REQUESTS_bad_display) 3339706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall{ 3340706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_display_t display; 3341706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_display_request_t displayRequests; 3342706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_layer_t> layers; 3343706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_layer_request_t> layerRequests; 3344706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 3345706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3346706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 3347706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3348706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_NO_FATAL_FAILURE(getDisplayRequests(display, &displayRequests, 3349706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall &layers, &layerRequests, &err)); 3350706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 3351706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall} 3352706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3353706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall/* TESTCASE: Tests that the HWC2 cannot get display requests from an non 3354706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall * validated display. */ 3355706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa WallTEST_F(Hwc2Test, GET_DISPLAY_REQUESTS_not_validated) 3356706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall{ 3357706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(displayNonValidatedLayers(5, 3358706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, 3359706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_layer_t>* layers) { 3360706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3361706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_display_request_t displayRequests; 3362706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_layer_request_t> layerRequests; 3363706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 3364706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3365706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(test->getDisplayRequests(display, 3366706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall &displayRequests, layers, &layerRequests, &err)); 3367706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_EQ(err, HWC2_ERROR_NOT_VALIDATED) 3368706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << "returned wrong error code"; 3369706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 3370706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall )); 3371706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall} 3372706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3373706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall/* TESTCASE: Tests that the HWC2 can get changed composition types after 3374706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall * validating a basic layer. */ 3375706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa WallTEST_F(Hwc2Test, GET_CHANGED_COMPOSITION_TYPES_basic) 3376706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall{ 3377706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(displayLayers(Hwc2TestCoverage::Basic, 1, 3378706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, 3379706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall const std::vector<hwc2_layer_t>& layers, 3380563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestLayers* testLayers) { 3381706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3382706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall uint32_t numTypes, numRequests; 3383706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall bool hasChanges = false; 3384706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3385706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(test->validateDisplay(display, &numTypes, 3386706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall &numRequests, &hasChanges)); 3387706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall if (hasChanges) 3388706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_LE(numTypes, layers.size()) 3389706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << "wrong number of requests"; 3390706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3391706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_NO_FATAL_FAILURE(test->handleCompositionChanges(display, 3392563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall *testLayers, layers, numTypes)); 3393706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 3394706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall )); 3395706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall} 3396706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3397706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall/* TESTCASE: Tests that the HWC2 cannot get changed composition types from a bad 3398706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall * display */ 3399706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa WallTEST_F(Hwc2Test, GET_CHANGED_COMPOSITION_TYPES_bad_display) 3400706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall{ 3401706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_display_t display; 3402706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_layer_t> layers; 3403706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_composition_t> types; 3404706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 3405706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3406706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 3407706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3408706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_NO_FATAL_FAILURE(getChangedCompositionTypes(display, &layers, 3409706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall &types, &err)); 3410706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 3411706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall} 3412706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3413706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall/* TESTCASE: Tests that the HWC2 cannot get changed composition types from an non 3414706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall * validated display. */ 3415706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa WallTEST_F(Hwc2Test, GET_CHANGED_COMPOSITION_TYPES_not_validated) 3416706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall{ 3417706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(displayNonValidatedLayers(5, 3418706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, 3419706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_layer_t>* layers) { 3420706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3421706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_composition_t> types; 3422706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 3423706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3424706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(test->getChangedCompositionTypes( 3425706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall display, layers, &types, &err)); 3426706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_EQ(err, HWC2_ERROR_NOT_VALIDATED) 3427706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << "returned wrong error code"; 3428706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 3429706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall )); 3430706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall} 3431706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3432706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall/* TESTCASE: Tests that the HWC2 can accept display changes after validating a 3433706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall * basic layer. */ 3434706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa WallTEST_F(Hwc2Test, ACCEPT_DISPLAY_CHANGES_basic) 3435706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall{ 3436706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(displayLayers(Hwc2TestCoverage::Basic, 1, 3437706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, 3438706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall const std::vector<hwc2_layer_t>& layers, 3439563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestLayers* testLayers) { 3440706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3441706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall uint32_t numTypes, numRequests; 3442706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall bool hasChanges = false; 3443706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3444706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(test->validateDisplay(display, &numTypes, 3445706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall &numRequests, &hasChanges)); 3446706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall if (hasChanges) 3447706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_LE(numTypes, layers.size()) 3448706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << "wrong number of requests"; 3449706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3450706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(test->handleCompositionChanges(display, 3451563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall *testLayers, layers, numTypes)); 3452706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3453706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_NO_FATAL_FAILURE(test->acceptDisplayChanges(display)); 3454706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 3455706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall )); 3456706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall} 3457706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3458706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall/* TESTCASE: Tests that the HWC2 cannot accept display changes from a bad 3459706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall * display */ 3460706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa WallTEST_F(Hwc2Test, ACCEPT_DISPLAY_CHANGES_bad_display) 3461706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall{ 3462706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_display_t display; 3463706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 3464706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3465706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 3466706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3467706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_NO_FATAL_FAILURE(acceptDisplayChanges(display, &err)); 3468706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 3469706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall} 3470706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3471706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall/* TESTCASE: Tests that the HWC2 cannot accept display changes from an non 3472706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall * validated display. */ 3473706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa WallTEST_F(Hwc2Test, ACCEPT_DISPLAY_CHANGES_not_validated) 3474706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall{ 3475706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(displayNonValidatedLayers(5, 3476706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, 3477706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_layer_t>* /*layers*/) { 3478706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3479706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 3480706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3481706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(test->acceptDisplayChanges(display, &err)); 3482706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_EQ(err, HWC2_ERROR_NOT_VALIDATED) 3483706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << "returned wrong error code"; 3484706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 3485706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall )); 3486706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall} 3487f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3488f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall/* TESTCASE: Tests that the HWC2 supports client target with required values */ 3489f18cfb0a780c69f12439457ccc3f5272db767fddMarissa WallTEST_F(Hwc2Test, GET_CLIENT_TARGET_SUPPORT) 3490f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall{ 3491f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(setClientTargetSupport(Hwc2TestCoverage::Default, 3492f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, 3493f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const Hwc2TestClientTargetSupport& testClientTargetSupport) { 3494f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3495f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const Area bufferArea = testClientTargetSupport.getBufferArea(); 3496f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const android_pixel_format_t format = HAL_PIXEL_FORMAT_RGBA_8888; 3497f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3498f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(test->getClientTargetSupport(display, 3499f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall bufferArea.width, bufferArea.height, format, 3500f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall testClientTargetSupport.getDataspace())); 3501f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall }, 3502f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3503f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall advanceClientTargetSupport)); 3504f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall} 3505f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3506f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall/* TESTCASE: Tests that the HWC2 cannot get client target support for a bad 3507f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall * display. */ 3508f18cfb0a780c69f12439457ccc3f5272db767fddMarissa WallTEST_F(Hwc2Test, GET_CLIENT_TARGET_SUPPORT_bad_display) 3509f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall{ 3510f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(setClientTargetSupport(Hwc2TestCoverage::Default, 3511f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall [] (Hwc2Test* test, hwc2_display_t /*display*/, 3512f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const Hwc2TestClientTargetSupport& testClientTargetSupport) { 3513f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3514f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const Area bufferArea = testClientTargetSupport.getBufferArea(); 3515f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const android_pixel_format_t format = HAL_PIXEL_FORMAT_RGBA_8888; 3516f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall hwc2_display_t badDisplay; 3517f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 3518f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3519f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(test->getBadDisplay(&badDisplay)); 3520f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3521f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(test->getClientTargetSupport(badDisplay, 3522f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall bufferArea.width, bufferArea.height, format, 3523f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall testClientTargetSupport.getDataspace(), &err)); 3524f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 3525f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall }, 3526f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3527f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall advanceClientTargetSupport)); 3528f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall} 3529f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3530f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall/* TESTCASE: Tests that the HWC2 either supports or returns error unsupported 3531f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall * for a variety of client target values. */ 3532f18cfb0a780c69f12439457ccc3f5272db767fddMarissa WallTEST_F(Hwc2Test, GET_CLIENT_TARGET_SUPPORT_unsupported) 3533f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall{ 3534f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(setClientTargetSupport(Hwc2TestCoverage::Complete, 3535f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, 3536f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const Hwc2TestClientTargetSupport& testClientTargetSupport) { 3537f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3538f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const Area bufferArea = testClientTargetSupport.getBufferArea(); 3539f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const android_pixel_format_t format = HAL_PIXEL_FORMAT_RGBA_8888; 3540f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 3541f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3542f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(test->getClientTargetSupport(display, 3543f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall bufferArea.width, bufferArea.height, format, 3544f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall testClientTargetSupport.getDataspace(), &err)); 3545f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall EXPECT_TRUE(err == HWC2_ERROR_NONE 3546f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall || err == HWC2_ERROR_UNSUPPORTED) 3547f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall << "returned wrong error code"; 3548f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall }, 3549f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3550f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall advanceClientTargetSupport)); 3551f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall} 3552f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3553f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall/* TESTCASE: Tests that the HWC2 can set a client target buffer for a basic 3554f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall * layer. */ 3555f18cfb0a780c69f12439457ccc3f5272db767fddMarissa WallTEST_F(Hwc2Test, SET_CLIENT_TARGET_basic) 3556f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall{ 3557f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const android_dataspace_t dataspace = HAL_DATASPACE_UNKNOWN; 3558f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const hwc_region_t damage = { }; 3559f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const size_t layerCnt = 1; 3560f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3561f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall for (auto display : mDisplays) { 3562f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall std::vector<hwc2_config_t> configs; 3563f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3564f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 3565f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3566f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 3567f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3568f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall for (auto config : configs) { 3569f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall Area displayArea; 3570f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall std::vector<hwc2_layer_t> layers; 3571f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3572f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 3573f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(getActiveDisplayArea(display, &displayArea)); 3574f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3575f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayers(display, &layers, layerCnt)); 3576f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall Hwc2TestLayers testLayers(layers, Hwc2TestCoverage::Basic, 3577f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall displayArea); 3578f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3579f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall if (!testLayers.optimizeLayouts()) 3580f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall continue; 3581f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3582f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall Hwc2TestClientTarget testClientTarget; 3583f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3584f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall do { 3585f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall std::set<hwc2_layer_t> clientLayers; 3586f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall std::set<hwc2_layer_t> clearLayers; 3587f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall uint32_t numTypes, numRequests; 3588f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall bool hasChanges, skip; 3589f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall bool flipClientTarget; 3590f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall buffer_handle_t handle; 3591f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall int32_t acquireFence; 3592f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3593f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperties(display, layers, 3594f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall &testLayers, &skip)); 3595f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall if (skip) 3596f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall continue; 3597f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3598f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(validateDisplay(display, &numTypes, 3599f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall &numRequests, &hasChanges)); 3600f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall if (hasChanges) 3601f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall EXPECT_LE(numTypes, layers.size()) 3602f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall << "wrong number of requests"; 3603f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3604f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(handleCompositionChanges(display, 3605f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall testLayers, layers, numTypes, &clientLayers)); 3606f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(handleRequests(display, layers, 3607f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall numRequests, &clearLayers, &flipClientTarget)); 3608f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_EQ(testClientTarget.getBuffer(testLayers, clientLayers, 3609f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall clearLayers, flipClientTarget, displayArea, &handle, 3610f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall &acquireFence), 0); 3611f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall EXPECT_NO_FATAL_FAILURE(setClientTarget(display, handle, 3612f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall acquireFence, dataspace, damage)); 3613f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3614f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall if (acquireFence >= 0) 3615f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall close(acquireFence); 3616f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3617f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } while (testLayers.advance()); 3618f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3619f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayers(display, std::move(layers))); 3620f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } 3621f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3622f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 3623f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } 3624f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall} 3625f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3626f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set a client target for a bad display. */ 3627f18cfb0a780c69f12439457ccc3f5272db767fddMarissa WallTEST_F(Hwc2Test, SET_CLIENT_TARGET_bad_display) 3628f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall{ 3629f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall hwc2_display_t display; 3630f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall std::vector<hwc2_layer_t> layers; 3631f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const Area displayArea = {0, 0}; 3632f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall Hwc2TestLayers testLayers(layers, Hwc2TestCoverage::Default, displayArea); 3633f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall std::set<hwc2_layer_t> clientLayers; 3634f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall std::set<hwc2_layer_t> flipClientTargetLayers; 3635f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall bool flipClientTarget = true; 3636f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const android_dataspace_t dataspace = HAL_DATASPACE_UNKNOWN; 3637f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const hwc_region_t damage = { }; 3638f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall buffer_handle_t handle; 3639f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall int32_t acquireFence; 3640f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 3641f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3642f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 3643f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3644f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall Hwc2TestClientTarget testClientTarget; 3645f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3646f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_EQ(testClientTarget.getBuffer(testLayers, clientLayers, 3647f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall flipClientTargetLayers, flipClientTarget, displayArea, &handle, 3648f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall &acquireFence), 0); 3649f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3650f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall EXPECT_NO_FATAL_FAILURE(setClientTarget(display, handle, acquireFence, 3651f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall dataspace, damage, &err)); 3652f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3653f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall if (acquireFence >= 0) 3654f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall close(acquireFence); 3655f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3656f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 3657f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall} 3658563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3659563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 1 default layer. */ 3660563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_default_1) 3661563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3662563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 1; 3663563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3664563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions; 3665563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = false; 3666563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3667563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3668563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3669563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3670563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3671563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 2 default layers. */ 3672563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_default_2) 3673563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3674563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 2; 3675563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3676563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions; 3677563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = false; 3678563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3679563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3680563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3681563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3682563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3683563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 3 default layers. */ 3684563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_default_3) 3685563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3686563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 3; 3687563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3688563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions; 3689563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = false; 3690563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3691563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3692563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3693563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3694563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3695563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 4 default layers. */ 3696563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_default_4) 3697563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3698563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 4; 3699563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3700563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions; 3701563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = false; 3702563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3703563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3704563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3705563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3706563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3707563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 5 default layers. */ 3708563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_default_5) 3709563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3710563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 5; 3711563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3712563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions; 3713563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = false; 3714563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3715563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3716563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3717563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3718563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3719563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 6 default layers. */ 3720563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_default_6) 3721563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3722563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 6; 3723563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3724563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions; 3725563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = false; 3726563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3727563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3728563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3729563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3730563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3731563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 1 layer with complete coverage of 3732563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * blend mode. */ 3733563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_blend_mode_1) 3734563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3735563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 1; 3736563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3737563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions = 3738563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {{Hwc2TestPropertyName::BlendMode, Hwc2TestCoverage::Complete}, 3739563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {Hwc2TestPropertyName::Transform, Hwc2TestCoverage::Basic}, 3740563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {Hwc2TestPropertyName::PlaneAlpha, Hwc2TestCoverage::Basic}}; 3741563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = false; 3742563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3743563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3744563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3745563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3746563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3747563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 2 layers with complete coverage of 3748563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * blend mode. */ 3749563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_blend_mode_2) 3750563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3751563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 2; 3752563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3753563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions = 3754563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {{Hwc2TestPropertyName::BlendMode, Hwc2TestCoverage::Complete}, 3755563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {Hwc2TestPropertyName::PlaneAlpha, Hwc2TestCoverage::Basic}}; 3756563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = false; 3757563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3758563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3759563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3760563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3761563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3762563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 1 layer with complete coverage of 3763563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * buffer. */ 3764563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_buffer_1) 3765563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3766563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 1; 3767563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3768563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions = 3769563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {{Hwc2TestPropertyName::BufferArea, Hwc2TestCoverage::Complete}}; 3770563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = true; 3771563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3772563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3773563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3774563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3775563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3776563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 1 layer with complete coverage of 3777563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * color. */ 3778563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_color_1) 3779563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3780563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 1; 3781563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3782563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions = 3783563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {{Hwc2TestPropertyName::Composition, Hwc2TestCoverage::Complete}, 3784563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {Hwc2TestPropertyName::Color, Hwc2TestCoverage::Complete}}; 3785563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = true; 3786563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3787563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3788563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3789563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3790563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3791563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 2 layers with complete coverage of 3792563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * color. */ 3793563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_color_2) 3794563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3795563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 2; 3796563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3797563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions = 3798563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {{Hwc2TestPropertyName::Composition, Hwc2TestCoverage::Complete}, 3799563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {Hwc2TestPropertyName::BlendMode, Hwc2TestCoverage::Basic}, 3800563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {Hwc2TestPropertyName::PlaneAlpha, Hwc2TestCoverage::Basic}, 3801563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {Hwc2TestPropertyName::Color, Hwc2TestCoverage::Basic}}; 3802563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = true; 3803563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3804563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3805563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3806563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3807563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3808563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 1 layer with complete coverage of 3809563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * composition. */ 3810563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_composition_1) 3811563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3812563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 1; 3813563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3814563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions = 3815563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {{Hwc2TestPropertyName::Composition, Hwc2TestCoverage::Complete}}; 3816563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = true; 3817563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3818563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3819563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3820563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3821563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3822563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 1 layer with complete coverage of 3823563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * cursor. */ 3824563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_cursor_1) 3825563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3826563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 1; 3827563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3828563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions = 3829563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {{Hwc2TestPropertyName::Composition, Hwc2TestCoverage::Complete}, 3830563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {Hwc2TestPropertyName::CursorPosition, Hwc2TestCoverage::Complete}}; 3831563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = true; 3832563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3833563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3834563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3835563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3836563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3837563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 2 layers with complete coverage of 3838563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * cursor. */ 3839563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_cursor_2) 3840563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3841563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 2; 3842563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3843563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions = 3844563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {{Hwc2TestPropertyName::Composition, Hwc2TestCoverage::Complete}, 3845563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {Hwc2TestPropertyName::CursorPosition, Hwc2TestCoverage::Complete}, 3846563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {Hwc2TestPropertyName::DisplayFrame, Hwc2TestCoverage::Basic}}; 3847563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = true; 3848563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3849563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3850563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3851563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3852563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3853563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 1 layer with complete coverage of 3854563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * dataspace. */ 3855563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_dataspace_1) 3856563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3857563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 1; 3858563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3859563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions = 3860563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {{Hwc2TestPropertyName::Dataspace, Hwc2TestCoverage::Complete}}; 3861563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = true; 3862563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3863563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3864563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3865563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3866563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3867563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 1 layer with complete coverage of 3868563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * display frame. */ 3869563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_display_frame_1) 3870563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3871563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 1; 3872563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3873563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions = 3874563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {{Hwc2TestPropertyName::DisplayFrame, Hwc2TestCoverage::Complete}}; 3875563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = true; 3876563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3877563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3878563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3879563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3880563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3881563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 2 layers with complete coverage of 3882563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * display frame. */ 3883563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_display_frame_2) 3884563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3885563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 2; 3886563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3887563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions = 3888563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {{Hwc2TestPropertyName::DisplayFrame, Hwc2TestCoverage::Complete}}; 3889563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = true; 3890563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3891563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3892563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3893563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3894563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3895563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 3 layers with complete coverage of 3896563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * display frame. */ 3897563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_display_frame_3) 3898563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3899563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 3; 3900563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3901563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions = 3902563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {{Hwc2TestPropertyName::DisplayFrame, Hwc2TestCoverage::Complete}}; 3903563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = true; 3904563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3905563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3906563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3907563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3908563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3909563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 4 layers with complete coverage of 3910563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * display frame. */ 3911563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_display_frame_4) 3912563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3913563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 4; 3914563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3915563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions = 3916563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {{Hwc2TestPropertyName::DisplayFrame, Hwc2TestCoverage::Complete}}; 3917563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = true; 3918563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3919563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3920563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3921563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3922563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3923563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 1 layer with complete coverage of 3924563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * plane alpha. */ 3925563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_plane_alpha_1) 3926563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3927563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 1; 3928563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3929563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions = 3930563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {{Hwc2TestPropertyName::BlendMode, Hwc2TestCoverage::Basic}, 3931563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {Hwc2TestPropertyName::PlaneAlpha, Hwc2TestCoverage::Complete}}; 3932563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = false; 3933563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3934563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3935563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3936563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3937563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3938563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 2 layers with complete coverage of 3939563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * plane alpha. */ 3940563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_plane_alpha_2) 3941563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3942563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 2; 3943563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3944563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions = 3945563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {{Hwc2TestPropertyName::BlendMode, Hwc2TestCoverage::Basic}, 3946563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {Hwc2TestPropertyName::PlaneAlpha, Hwc2TestCoverage::Complete}}; 3947563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = false; 3948563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3949563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3950563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3951563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3952563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3953563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 1 layer with complete coverage of 3954563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * source crop. */ 3955563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_source_crop_1) 3956563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3957563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 1; 3958563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3959563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions = 3960563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {{Hwc2TestPropertyName::DisplayFrame, Hwc2TestCoverage::Complete}, 3961563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {Hwc2TestPropertyName::SourceCrop, Hwc2TestCoverage::Complete}}; 3962563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = true; 3963563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3964563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3965563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3966563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3967563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3968563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 2 layers with complete coverage of 3969563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * source crop. */ 3970563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_source_crop_2) 3971563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3972563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 2; 3973563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3974563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions = 3975563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {{Hwc2TestPropertyName::DisplayFrame, Hwc2TestCoverage::Complete}, 3976563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {Hwc2TestPropertyName::SourceCrop, Hwc2TestCoverage::Complete}}; 3977563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = true; 3978563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3979563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3980563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3981563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3982563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3983563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3984563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 1 layer with complete coverage of 3985563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * surface damage. */ 3986563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_surface_damage_1) 3987563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3988563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 1; 3989563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3990563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions = 3991563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {{Hwc2TestPropertyName::SurfaceDamage, Hwc2TestCoverage::Complete}}; 3992563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = true; 3993563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3994563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3995563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3996563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3997563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3998563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 1 layer with complete coverage of 3999563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * transform. */ 4000563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_transform_1) 4001563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 4002563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 1; 4003563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 4004563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions = 4005563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {{Hwc2TestPropertyName::Transform, Hwc2TestCoverage::Complete}}; 4006563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = true; 4007563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 4008563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 4009563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 4010563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 4011563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 4012563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 2 layers with complete coverage of 4013563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * transform. */ 4014563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_transform_2) 4015563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 4016563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 2; 4017563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 4018563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions = 4019563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {{Hwc2TestPropertyName::Transform, Hwc2TestCoverage::Complete}, 4020563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {Hwc2TestPropertyName::DisplayFrame, Hwc2TestCoverage::Basic}}; 4021563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = true; 4022563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 4023563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 4024563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 4025563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 4026563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 4027563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 1 layer with complete coverage of 4028563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * basic. */ 4029563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_basic_1) 4030563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 4031563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 1; 4032563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Basic; 4033563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions; 4034563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = true; 4035563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 4036563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 4037563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 4038563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 4039563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 4040563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 cannot present a bad display. */ 4041563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_bad_display) 4042563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 4043563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall hwc2_display_t display; 4044563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall int32_t presentFence; 4045563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 4046563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 4047563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 4048563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 4049563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplay(display, &presentFence, &err)); 4050563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 4051563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 4052563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 4053563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 cannot present an unvalidated display. */ 4054563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_not_validated) 4055563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 4056563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(displayLayers(Hwc2TestCoverage::Default, 1, 4057563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, 4058563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const std::vector<hwc2_layer_t>& /*layers*/, 4059563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestLayers* /*testLayers*/) { 4060563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 4061563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall int32_t presentFence; 4062563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 4063563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 4064563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setPowerMode(display, 4065563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall HWC2_POWER_MODE_ON)); 4066563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(test->enableVsync(display)); 4067563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 4068563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(test->waitForVsync()); 4069563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 4070563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(test->presentDisplay(display, 4071563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall &presentFence, &err)); 4072563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall EXPECT_EQ(err, HWC2_ERROR_NOT_VALIDATED) 4073563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall << "returned wrong error code"; 4074563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 4075563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(test->disableVsync(display)); 4076563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setPowerMode(display, 4077563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall HWC2_POWER_MODE_OFF)); 4078563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall } 4079563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall )); 4080563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 4081563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 4082563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 cannot get release fences from a bad display. */ 4083563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, GET_RELEASE_FENCES_bad_display) 4084563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 4085563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall hwc2_display_t display; 4086563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::vector<hwc2_layer_t> layers; 4087563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::vector<int32_t> fences; 4088563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 4089563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 4090563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 4091563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 4092563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(getReleaseFences(display, &layers, &fences, &err)); 4093563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 4094563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 409535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 409635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wallstatic const std::array<android_color_mode, 9> androidColorModes = {{ 409735040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall HAL_COLOR_MODE_NATIVE, 409835040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall HAL_COLOR_MODE_STANDARD_BT601_625, 409935040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall HAL_COLOR_MODE_STANDARD_BT601_625_UNADJUSTED, 410035040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall HAL_COLOR_MODE_STANDARD_BT601_525, 410135040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall HAL_COLOR_MODE_STANDARD_BT601_525_UNADJUSTED, 410235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall HAL_COLOR_MODE_STANDARD_BT709, 410335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall HAL_COLOR_MODE_DCI_P3, 410435040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall HAL_COLOR_MODE_SRGB, 410535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall HAL_COLOR_MODE_ADOBE_RGB, 410635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall}}; 410735040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 410835040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall/* TESTCASE: Tests that the HWC2 can get the color modes for a display. The 410935040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall * display must support HAL_COLOR_MODE_NATIVE */ 411035040c559d26d00d6123c894cfc9573b0a5aa860Marissa WallTEST_F(Hwc2Test, GET_COLOR_MODES) 411135040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall{ 411235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall ASSERT_NO_FATAL_FAILURE(setActiveDisplayConfig( 411335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall [] (Hwc2Test* test, hwc2_display_t display) { 411435040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 411535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall std::vector<android_color_mode_t> colorModes; 411635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 411735040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall ASSERT_NO_FATAL_FAILURE(test->getColorModes(display, 411835040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall &colorModes)); 411935040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 412035040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall EXPECT_NE(std::count(colorModes.begin(), colorModes.end(), 412135040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall HAL_COLOR_MODE_NATIVE), 0) << "all displays" 412235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall " must support HAL_COLOR_MODE_NATIVE"; 412335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall } 412435040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall )); 412535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall} 412635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 412735040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall/* TESTCASE: Tests that the HWC2 cannot get color modes from a bad display. */ 412835040c559d26d00d6123c894cfc9573b0a5aa860Marissa WallTEST_F(Hwc2Test, GET_COLOR_MODES_bad_display) 412935040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall{ 413035040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall hwc2_display_t display; 413135040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall std::vector<android_color_mode_t> colorModes; 413235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 413335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 413435040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 413535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 413635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall ASSERT_NO_FATAL_FAILURE(getColorModes(display, &colorModes, &err)); 413735040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 413835040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall} 413935040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 414035040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall/* TESTCASE: Tests that the HWC2 can set the required color mode on a display. */ 414135040c559d26d00d6123c894cfc9573b0a5aa860Marissa WallTEST_F(Hwc2Test, SET_COLOR_MODES) 414235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall{ 414335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall ASSERT_NO_FATAL_FAILURE(setActiveDisplayConfig( 414435040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall [] (Hwc2Test* test, hwc2_display_t display) { 414535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 414635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall const android_color_mode_t colorMode = HAL_COLOR_MODE_NATIVE; 414735040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 414835040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setColorMode(display, colorMode)); 414935040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall } 415035040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall )); 415135040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall} 415235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 415335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set a color mode on a bad display. */ 415435040c559d26d00d6123c894cfc9573b0a5aa860Marissa WallTEST_F(Hwc2Test, SET_COLOR_MODES_bad_display) 415535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall{ 415635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall hwc2_display_t display; 415735040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall const android_color_mode_t colorMode = HAL_COLOR_MODE_NATIVE; 415835040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 415935040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 416035040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 416135040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 416235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall ASSERT_NO_FATAL_FAILURE(setColorMode(display, colorMode, &err)); 416335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 416435040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall} 416535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 416635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set an invalid color mode. */ 416735040c559d26d00d6123c894cfc9573b0a5aa860Marissa WallTEST_F(Hwc2Test, SET_COLOR_MODES_bad_parameter) 416835040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall{ 416935040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall ASSERT_NO_FATAL_FAILURE(setActiveDisplayConfig( 417035040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall [] (Hwc2Test* test, hwc2_display_t display) { 417135040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 417235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall const android_color_mode_t colorMode = 417335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall static_cast<android_color_mode_t>(-1); 417435040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 417535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 417635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall ASSERT_NO_FATAL_FAILURE(test->setColorMode(display, colorMode, 417735040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall &err)); 417835040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_PARAMETER) 417935040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall << "returned wrong error code"; 418035040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall } 418135040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall )); 418235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall} 418335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 418435040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall/* TESTCASE: Tests that the HWC2 either supports or returns error unsupported 418535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall * for all valid color modes. */ 418635040c559d26d00d6123c894cfc9573b0a5aa860Marissa WallTEST_F(Hwc2Test, SET_COLOR_MODES_unsupported) 418735040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall{ 418835040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall ASSERT_NO_FATAL_FAILURE(setActiveDisplayConfig( 418935040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall [] (Hwc2Test* test, hwc2_display_t display) { 419035040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 419135040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall for (auto colorMode : androidColorModes) { 419235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 419335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 419435040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall ASSERT_NO_FATAL_FAILURE(test->setColorMode(display, 419535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall colorMode, &err)); 419635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 419735040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall EXPECT_TRUE(err == HWC2_ERROR_NONE 419835040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall || err == HWC2_ERROR_UNSUPPORTED) 419935040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall << "returned wrong error code"; 420035040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall } 420135040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall } 420235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall )); 420335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall} 420435040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 420535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall/* TESTCASE: Tests that the HWC2 gets the HDR capabilities for a display and 420635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall * test if they are valid. */ 420735040c559d26d00d6123c894cfc9573b0a5aa860Marissa WallTEST_F(Hwc2Test, GET_HDR_CAPABILITIES) 420835040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall{ 420935040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall ASSERT_NO_FATAL_FAILURE(setActiveDisplayConfig( 421035040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall [] (Hwc2Test* test, hwc2_display_t display) { 421135040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 421235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall std::vector<android_hdr_t> hdrCapabilities; 421335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall float maxLuminance, maxAverageLuminance, minLuminance; 421435040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 421535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall EXPECT_NO_FATAL_FAILURE(test->getHdrCapabilities(display, 421635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall &hdrCapabilities, &maxLuminance, &maxAverageLuminance, 421735040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall &minLuminance)); 421835040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 421935040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall if (hdrCapabilities.empty()) 422035040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall return; 422135040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 422235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall EXPECT_GE(maxLuminance, maxAverageLuminance); 422335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall EXPECT_GE(maxAverageLuminance, minLuminance); 422435040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall } 422535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall )); 422635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall} 422735040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 422835040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall/* TESTCASE: Tests that the HWC2 cannot get hdr capabilities from a bad display */ 422935040c559d26d00d6123c894cfc9573b0a5aa860Marissa WallTEST_F(Hwc2Test, GET_HDR_CAPABILITIES_bad_display) 423035040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall{ 423135040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall hwc2_display_t display; 423235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall std::vector<android_hdr_t> hdrCapabilities; 423335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall float maxLuminance, maxAverageLuminance, minLuminance; 423435040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 423535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 423635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 423735040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 423835040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall ASSERT_NO_FATAL_FAILURE(getHdrCapabilities(display, &hdrCapabilities, 423935040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall &maxLuminance, &maxAverageLuminance, &minLuminance, &err)); 424035040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 424135040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall} 424235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 424335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wallstatic const std::array<float, 16> identityMatrix = {{ 424435040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 1.0, 0.0, 0.0, 0.0, 424535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 0.0, 1.0, 0.0, 0.0, 424635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 0.0, 0.0, 1.0, 0.0, 424735040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 0.0, 0.0, 0.0, 1.0, 424835040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall}}; 424935040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 425035040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall/* Values for the color transform matrices were precomputed using the source code 425135040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall * in surfaceflinger/Effects/Daltonizer.cpp. */ 425235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 425335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wallstatic const std::array<const std::array<float, 16>, 5> exampleMatrices = {{ 425435040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall identityMatrix, 425535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall /* Converts RGB color to the XYZ space */ 425635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall {{ 0.4124, 0.2126, 0.0193, 0, 425735040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 0.3576, 0.7152, 0.1192, 0, 425835040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 0.1805, 0.0722, 0.9505, 0, 425935040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 0 , 0 , 0 , 1 }}, 426035040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall /* Protanomaly */ 426135040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall {{ 0.068493, 0.931506, 0, 0, 426235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 0.068493, 0.931507, 0, 0, 426335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 0.013626, -0.013626, 1, 0, 426435040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 0, 0, 0, 1 }}, 426535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall /* Deuteranomaly */ 426635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall {{ 0.288299, 0.711701, 0, 0, 426735040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 0.052709, 0.947291, 0, 0, 426835040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall -0.257912, 0.257912, 1, 0, 426935040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 0, 0, 0, 1 }}, 427035040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall /* Tritanomaly */ 427135040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall {{ 1, -0.805712, 0.805712, 0, 427235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 0, 0.378838, 0.621162, 0, 427335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 0, 0.104823, 0.895177, 0, 427435040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 0, 0, 0, 1 }}, 427535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall}}; 427635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 427735040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall/* TESTCASE: Tests that the HWC2 can set the identity color transform */ 427835040c559d26d00d6123c894cfc9573b0a5aa860Marissa WallTEST_F(Hwc2Test, SET_COLOR_TRANSFORM) 427935040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall{ 428035040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall ASSERT_NO_FATAL_FAILURE(setActiveDisplayConfig( 428135040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall [] (Hwc2Test* test, hwc2_display_t display) { 428235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 428335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setColorTransform(display, 428435040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall identityMatrix, HAL_COLOR_TRANSFORM_IDENTITY)); 428535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall } 428635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall )); 428735040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall} 428835040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 428935040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set the color transform for a bad 429035040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall * display. */ 429135040c559d26d00d6123c894cfc9573b0a5aa860Marissa WallTEST_F(Hwc2Test, SET_COLOR_TRANSFORM_bad_display) 429235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall{ 429335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall hwc2_display_t display; 429435040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 429535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 429635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 429735040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 429835040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall ASSERT_NO_FATAL_FAILURE(setColorTransform(display, identityMatrix, 429935040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall HAL_COLOR_TRANSFORM_IDENTITY, &err)); 430035040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 430135040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall} 430235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 430335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set an invalid color transform. */ 430435040c559d26d00d6123c894cfc9573b0a5aa860Marissa WallTEST_F(Hwc2Test, SET_COLOR_TRANSFORM_bad_parameter) 430535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall{ 430635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall ASSERT_NO_FATAL_FAILURE(setActiveDisplayConfig( 430735040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall [] (Hwc2Test* test, hwc2_display_t display) { 430835040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 430935040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall const android_color_transform_t hint = 431035040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall static_cast<android_color_transform_t>(-1); 431135040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 431235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 431335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall ASSERT_NO_FATAL_FAILURE(test->setColorTransform(display, 431435040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall identityMatrix, hint, &err)); 431535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_PARAMETER) 431635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall << "returned wrong error code"; 431735040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall } 431835040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall )); 431935040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall} 432035040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 432135040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall/* TESTCASE: Tests that the HWC2 can set an arbitrary color matrix. */ 432235040c559d26d00d6123c894cfc9573b0a5aa860Marissa WallTEST_F(Hwc2Test, SET_COLOR_TRANSFORM_arbitrary_matrix) 432335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall{ 432435040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall ASSERT_NO_FATAL_FAILURE(setActiveDisplayConfig( 432535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall [] (Hwc2Test* test, hwc2_display_t display) { 432635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 432735040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall const android_color_transform_t hint = 432835040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall HAL_COLOR_TRANSFORM_ARBITRARY_MATRIX; 432935040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 433035040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall for (const std::array<float, 16>& matrix : exampleMatrices) { 433135040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setColorTransform(display, 433235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall matrix, hint)); 433335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall } 433435040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall } 433535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall )); 433635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall} 4337bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4338bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall/* TESTCASE: Tests that the HWC2 create an destory virtual displays. */ 4339bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa WallTEST_F(Hwc2Test, CREATE_DESTROY_VIRTUAL_DISPLAY) 4340bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall{ 4341bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall ASSERT_NO_FATAL_FAILURE(createVirtualDisplay(Hwc2TestCoverage::Complete, 4342bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall [] (Hwc2Test* /*test*/, hwc2_display_t /*display*/, 4343bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall Hwc2TestVirtualDisplay* /*testVirtualDisplay*/) { })); 4344bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall} 4345bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4346bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall/* TESTCASE: Tests that the HWC2 can create and destroy multiple virtual 4347bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall * displays. */ 4348bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa WallTEST_F(Hwc2Test, CREATE_DESTROY_VIRTUAL_DISPLAY_multiple) 4349bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall{ 4350bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall Hwc2TestVirtualDisplay testVirtualDisplay(Hwc2TestCoverage::Complete); 4351bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall std::vector<hwc2_display_t> displays; 4352bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4353bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall do { 4354bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall const UnsignedArea& dimension = 4355bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall testVirtualDisplay.getDisplayDimension(); 4356bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall android_pixel_format_t desiredFormat = HAL_PIXEL_FORMAT_RGBA_8888; 4357bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall hwc2_display_t display; 4358bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 4359bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4360bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall ASSERT_NO_FATAL_FAILURE(createVirtualDisplay(dimension.width, 4361bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall dimension.height, &desiredFormat, &display, &err)); 4362bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4363bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall EXPECT_TRUE(err == HWC2_ERROR_NONE || err == HWC2_ERROR_NO_RESOURCES 4364bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall || err == HWC2_ERROR_UNSUPPORTED) << "returned wrong error code"; 4365bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall EXPECT_GE(desiredFormat, 0) << "invalid format"; 4366bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4367bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall if (err == HWC2_ERROR_NONE) 4368bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall displays.push_back(display); 4369bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4370bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall } while (testVirtualDisplay.advance()); 4371bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4372bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall for (hwc2_display_t display : displays) { 4373bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall EXPECT_NO_FATAL_FAILURE(destroyVirtualDisplay(display)); 4374bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall } 4375bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall} 4376bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4377bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall/* TESTCASE: Tests that the HWC2 cannot destroy a bad virtual displays. */ 4378bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa WallTEST_F(Hwc2Test, DESTROY_VIRTUAL_DISPLAY_bad_display) 4379bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall{ 4380bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall hwc2_display_t display; 4381bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 4382bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4383bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 4384bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4385bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyVirtualDisplay(display, &err)); 4386bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 4387bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall} 4388bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4389bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall/* TESTCASE: Tests that the HWC2 cannot destroy a physical display. */ 4390bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa WallTEST_F(Hwc2Test, DESTROY_VIRTUAL_DISPLAY_bad_parameter) 4391bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall{ 4392bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall hwc2_display_t display = HWC_DISPLAY_PRIMARY; 4393bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 4394bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4395bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyVirtualDisplay(display, &err)); 4396bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_PARAMETER) << "returned wrong error code"; 4397bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall} 4398bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4399bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall/* TESTCASE: Tests that the HWC2 can get the max virtual display count. */ 4400bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa WallTEST_F(Hwc2Test, GET_MAX_VIRTUAL_DISPLAY_COUNT) 4401bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall{ 4402bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall uint32_t maxCnt; 4403bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4404bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall ASSERT_NO_FATAL_FAILURE(getMaxVirtualDisplayCount(&maxCnt)); 4405bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall} 4406bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4407bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall/* TESTCASE: Tests that the HWC2 returns the same max virtual display count for 4408bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall * each call. */ 4409bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa WallTEST_F(Hwc2Test, GET_MAX_VIRTUAL_DISPLAY_COUNT_duplicate) 4410bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall{ 4411bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall uint32_t maxCnt1, maxCnt2; 4412bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4413bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall ASSERT_NO_FATAL_FAILURE(getMaxVirtualDisplayCount(&maxCnt1)); 4414bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall ASSERT_NO_FATAL_FAILURE(getMaxVirtualDisplayCount(&maxCnt2)); 4415bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4416bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall EXPECT_EQ(maxCnt1, maxCnt2) << "returned two different max virtual display" 4417bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall " counts"; 4418bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall} 4419bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4420bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall/* TESTCASE: Tests that the HWC2 can create the max number of virtual displays 4421bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall * that it reports. */ 4422bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa WallTEST_F(Hwc2Test, GET_MAX_VIRTUAL_DISPLAY_COUNT_create_max) 4423bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall{ 4424bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall std::vector<hwc2_display_t> displays; 4425bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall uint32_t maxCnt; 4426bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4427bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall ASSERT_NO_FATAL_FAILURE(getMaxVirtualDisplayCount(&maxCnt)); 4428bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4429bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall while (displays.size() < maxCnt) { 4430bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall uint32_t width = 1920, height = 1080; 4431bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall android_pixel_format_t desiredFormat = HAL_PIXEL_FORMAT_RGBA_8888; 4432bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall hwc2_display_t display; 4433bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 4434bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4435bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall ASSERT_NO_FATAL_FAILURE(createVirtualDisplay(width, height, 4436bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall &desiredFormat, &display, &err)); 4437bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4438bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall EXPECT_TRUE(err == HWC2_ERROR_NONE || err == HWC2_ERROR_UNSUPPORTED) 4439bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall << "returned wrong error code"; 4440bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall if (err != HWC2_ERROR_NONE) 4441bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall break; 4442bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4443bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall displays.push_back(display); 4444bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall } 4445bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4446bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall for (hwc2_display_t display : displays) { 4447bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall EXPECT_NO_FATAL_FAILURE(destroyVirtualDisplay(display)); 4448bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall } 4449bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall} 4450bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4451bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall/* TESTCASE: Tests that the HWC2 can set an output buffer for a virtual 4452bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall * display. */ 4453bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa WallTEST_F(Hwc2Test, SET_OUTPUT_BUFFER) 4454bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall{ 4455bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall ASSERT_NO_FATAL_FAILURE(createVirtualDisplay(Hwc2TestCoverage::Complete, 4456bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall [] (Hwc2Test* test, hwc2_display_t display, 4457bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall Hwc2TestVirtualDisplay* testVirtualDisplay) { 4458bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4459bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall buffer_handle_t handle; 4460bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall android::base::unique_fd acquireFence; 4461bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4462bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall if (testVirtualDisplay->getBuffer(&handle, &acquireFence) >= 0) 4463bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setOutputBuffer(display, 4464bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall handle, acquireFence)); 4465bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall })); 4466bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall} 4467bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4468bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set an output buffer for a bad display */ 4469bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa WallTEST_F(Hwc2Test, SET_OUTPUT_BUFFER_bad_display) 4470bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall{ 4471bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall ASSERT_NO_FATAL_FAILURE(createVirtualDisplay(Hwc2TestCoverage::Default, 4472bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall [] (Hwc2Test* test, hwc2_display_t /*display*/, 4473bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall Hwc2TestVirtualDisplay* testVirtualDisplay) { 4474bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4475bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall hwc2_display_t badDisplay; 4476bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall buffer_handle_t handle; 4477bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall android::base::unique_fd acquireFence; 4478bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 4479bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4480bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall ASSERT_NO_FATAL_FAILURE(test->getBadDisplay(&badDisplay)); 4481bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4482bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall if (testVirtualDisplay->getBuffer(&handle, &acquireFence) < 0) 4483bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall return; 4484bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4485bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall ASSERT_NO_FATAL_FAILURE(test->setOutputBuffer(badDisplay, 4486bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall handle, acquireFence, &err)); 4487bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall EXPECT_TRUE(err == HWC2_ERROR_BAD_DISPLAY) 4488bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall << "returned wrong error code"; 4489bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall })); 4490bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall} 4491bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4492bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set an invalid output buffer. */ 4493bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa WallTEST_F(Hwc2Test, SET_OUTPUT_BUFFER_bad_parameter) 4494bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall{ 4495bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall ASSERT_NO_FATAL_FAILURE(createVirtualDisplay(Hwc2TestCoverage::Default, 4496bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall [] (Hwc2Test* test, hwc2_display_t display, 4497bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall Hwc2TestVirtualDisplay* /*testVirtualDisplay*/) { 4498bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4499bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall const buffer_handle_t handle = nullptr; 4500bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall uint32_t releaseFence = -1; 4501bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 4502bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4503bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall ASSERT_NO_FATAL_FAILURE(test->setOutputBuffer(display, handle, 4504bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall releaseFence, &err)); 4505bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_PARAMETER) 4506bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall << "returned wrong error code"; 4507bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall })); 4508bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall} 4509bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4510bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set an output buffer for non virtual 4511bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall * display */ 4512bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa WallTEST_F(Hwc2Test, SET_OUTPUT_BUFFER_unsupported) 4513bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall{ 4514bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall for (auto display : mDisplays) { 4515bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall Hwc2TestVirtualDisplay testVirtualDisplay(Hwc2TestCoverage::Complete); 4516bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4517bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall do { 4518bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall buffer_handle_t handle; 4519bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall android::base::unique_fd acquireFence; 4520bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 4521bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4522bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall if (testVirtualDisplay.getBuffer(&handle, &acquireFence) < 0) 4523bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall continue; 4524bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4525bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall ASSERT_NO_FATAL_FAILURE(setOutputBuffer(display, handle, 4526bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall acquireFence, &err)); 4527bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall EXPECT_EQ(err, HWC2_ERROR_UNSUPPORTED) << "returned wrong error code"; 4528bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4529bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall } while (testVirtualDisplay.advance()); 4530bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall } 4531bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall} 4532