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 1025ae7d324fcad6d561bc0ee460f296ff2ad8306b00Marissa Wall void dump(std::string* outBuffer) 1026ae7d324fcad6d561bc0ee460f296ff2ad8306b00Marissa Wall { 1027ae7d324fcad6d561bc0ee460f296ff2ad8306b00Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_DUMP>( 1028ae7d324fcad6d561bc0ee460f296ff2ad8306b00Marissa Wall getFunction(HWC2_FUNCTION_DUMP)); 1029ae7d324fcad6d561bc0ee460f296ff2ad8306b00Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 1030ae7d324fcad6d561bc0ee460f296ff2ad8306b00Marissa Wall 1031ae7d324fcad6d561bc0ee460f296ff2ad8306b00Marissa Wall uint32_t size = 0; 1032ae7d324fcad6d561bc0ee460f296ff2ad8306b00Marissa Wall 1033ae7d324fcad6d561bc0ee460f296ff2ad8306b00Marissa Wall pfn(mHwc2Device, &size, nullptr); 1034ae7d324fcad6d561bc0ee460f296ff2ad8306b00Marissa Wall 1035ae7d324fcad6d561bc0ee460f296ff2ad8306b00Marissa Wall std::vector<char> buffer(size); 1036ae7d324fcad6d561bc0ee460f296ff2ad8306b00Marissa Wall 1037ae7d324fcad6d561bc0ee460f296ff2ad8306b00Marissa Wall pfn(mHwc2Device, &size, buffer.data()); 1038ae7d324fcad6d561bc0ee460f296ff2ad8306b00Marissa Wall 1039ae7d324fcad6d561bc0ee460f296ff2ad8306b00Marissa Wall outBuffer->assign(buffer.data()); 1040ae7d324fcad6d561bc0ee460f296ff2ad8306b00Marissa Wall } 1041ae7d324fcad6d561bc0ee460f296ff2ad8306b00Marissa Wall 1042f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall void getBadDisplay(hwc2_display_t* outDisplay) 1043f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall { 1044f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall for (hwc2_display_t display = 0; display < UINT64_MAX; display++) { 1045f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall if (mDisplays.count(display) == 0) { 1046f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall *outDisplay = display; 1047f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall return; 1048f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } 1049f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } 1050f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_TRUE(false) << "Unable to find bad display. UINT64_MAX displays" 1051f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall " are registered. This should never happen."; 1052f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } 1053f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 1054563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall void waitForVsync(hwc2_display_t* outDisplay = nullptr, 1055563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall int64_t* outTimestamp = nullptr) 1056563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall { 1057563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unique_lock<std::mutex> lock(mVsyncMutex); 1058563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_EQ(mVsyncCv.wait_for(lock, std::chrono::seconds(3)), 1059563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::cv_status::no_timeout) << "timed out attempting to get" 1060563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall " vsync callback"; 1061563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall if (outDisplay) 1062563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall *outDisplay = mVsyncDisplay; 1063563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall if (outTimestamp) 1064563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall *outTimestamp = mVsyncTimestamp; 1065563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall } 1066563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1067563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall void enableVsync(hwc2_display_t display) 1068563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall { 1069563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_VSYNC, this, 1070563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall reinterpret_cast<hwc2_function_pointer_t>( 1071563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall hwc2TestVsyncCallback))); 1072563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE)); 1073563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall } 1074563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1075563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall void disableVsync(hwc2_display_t display) 1076563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall { 1077563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 1078563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall } 1079563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 10804d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wallprotected: 10814d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall hwc2_function_pointer_t getFunction(hwc2_function_descriptor_t descriptor) 10824d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall { 10834d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall return mHwc2Device->getFunction(mHwc2Device, descriptor); 10844d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall } 10854d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 10864d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall void getCapabilities(std::vector<hwc2_capability_t>* outCapabilities) 10874d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall { 10884d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall uint32_t num = 0; 10894d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 10904d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall mHwc2Device->getCapabilities(mHwc2Device, &num, nullptr); 10914d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 10924d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall outCapabilities->resize(num); 10934d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 10944d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall mHwc2Device->getCapabilities(mHwc2Device, &num, 10954d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall reinterpret_cast<int32_t*>(outCapabilities->data())); 10964d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall } 10974d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 1098cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall /* Registers a hotplug callback and waits for hotplug callbacks. This 1099cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall * function will have no effect if called more than once. */ 1100cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall void populateDisplays() 1101cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall { 1102cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall /* Sets the hotplug status to receiving */ 1103cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall { 1104cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::lock_guard<std::mutex> lock(mHotplugMutex); 1105cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1106cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall if (mHotplugStatus != Hwc2TestHotplugStatus::Init) 1107cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall return; 1108cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall mHotplugStatus = Hwc2TestHotplugStatus::Receiving; 1109cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 1110cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1111cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall /* Registers the callback. This function call cannot be locked because 1112cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall * a callback could happen on the same thread */ 1113cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_HOTPLUG, this, 1114cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall reinterpret_cast<hwc2_function_pointer_t>( 1115cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2TestHotplugCallback))); 1116cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1117cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall /* Waits for hotplug events. If a hotplug event has not come within 1 1118cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall * second, stop waiting. */ 1119cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::unique_lock<std::mutex> lock(mHotplugMutex); 1120cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1121cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall while (mHotplugCv.wait_for(lock, std::chrono::seconds(1)) != 1122cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::cv_status::timeout) { } 1123cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1124cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall /* Sets the hotplug status to done. Future calls will have no effect */ 1125cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall mHotplugStatus = Hwc2TestHotplugStatus::Done; 1126cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 1127cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 11281db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall /* NOTE: will create min(newlayerCnt, max supported layers) layers */ 11291db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall void createLayers(hwc2_display_t display, 11301db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall std::vector<hwc2_layer_t>* outLayers, size_t newLayerCnt) 11311db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall { 11321db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall std::vector<hwc2_layer_t> newLayers; 11331db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_layer_t layer; 11341db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 11351db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 11361db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (size_t i = 0; i < newLayerCnt; i++) { 11371db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 11381db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_NO_FATAL_FAILURE(createLayer(display, &layer, &err)); 11391db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall if (err == HWC2_ERROR_NO_RESOURCES) 11401db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall break; 11411db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall if (err != HWC2_ERROR_NONE) { 11421db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall newLayers.clear(); 11431db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to create layer"; 11441db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 11451db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall newLayers.push_back(layer); 11461db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 11471db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 11481db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall *outLayers = std::move(newLayers); 11491db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 11501db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 11511db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall void destroyLayers(hwc2_display_t display, 11521db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall std::vector<hwc2_layer_t>&& layers) 11531db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall { 11541db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (hwc2_layer_t layer : layers) { 11551db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 11561db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 11571db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 11581db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 1159cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall void getInvalidConfig(hwc2_display_t display, hwc2_config_t* outConfig) 1160cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall { 1161cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs; 1162cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1163cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 1164cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1165cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_config_t CONFIG_MAX = UINT32_MAX; 1166cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1167cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_LE(configs.size() - 1, CONFIG_MAX) << "every config value" 1168cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall " (2^32 values) has been taken which shouldn't happen"; 1169cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1170cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_config_t config; 1171cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (config = 0; config < CONFIG_MAX; config++) { 1172cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall if (std::count(configs.begin(), configs.end(), config) == 0) 1173cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall break; 1174cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1175cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1176cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall *outConfig = config; 1177cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1178cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 11796bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* Calls a set property function from Hwc2Test to set a property value from 11806bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * Hwc2TestLayer to hwc2_layer_t on hwc2_display_t */ 11816bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall using TestLayerPropertyFunction = void (*)(Hwc2Test* test, 11826bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_display_t display, hwc2_layer_t layer, 11835a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr); 11846bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 1185273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall /* Calls a set property function from Hwc2Test to set property values from 1186273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall * Hwc2TestLayers to hwc2_layer_t on hwc2_display_t */ 1187273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall using TestLayerPropertiesFunction = void (*)(Hwc2Test* test, 1188273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall hwc2_display_t display, hwc2_layer_t layer, 11895a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayers* testLayers); 1190273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 11916bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* Calls a set property function from Hwc2Test to set a bad property value 11926bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * on hwc2_layer_t on hwc2_display_t */ 11936bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall using TestLayerPropertyBadLayerFunction = void (*)(Hwc2Test* test, 11946bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_display_t display, hwc2_layer_t layer, 11955a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr); 11966bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 11976bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* Calls a set property function from Hwc2Test to set a bad property value 11986bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * on hwc2_layer_t on hwc2_display_t */ 11996bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall using TestLayerPropertyBadParameterFunction = void (*)(Hwc2Test* test, 12006bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_display_t display, hwc2_layer_t layer, hwc2_error_t* outErr); 12016bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 12021cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall /* Is called after a display is powered on and all layer properties have 12031cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall * been set. It should be used to test functions such as validate, accepting 12041cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall * changes, present, etc. */ 12051cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall using TestDisplayLayersFunction = void (*)(Hwc2Test* test, 1206706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_display_t display, const std::vector<hwc2_layer_t>& layers, 1207563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestLayers* testLayers); 1208706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 1209706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall /* It is called on an non validated display */ 1210706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall using TestDisplayNonValidatedLayersFunction = void (*)(Hwc2Test* test, 1211706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_display_t display, std::vector<hwc2_layer_t>* layers); 12121cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 1213f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall /* Tests client target support on a particular display and config */ 1214f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall using TestClientTargetSupportFunction = void (*)(Hwc2Test* test, 1215f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall hwc2_display_t display, 1216f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const Hwc2TestClientTargetSupport& testClientTargetSupport); 1217f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 121835040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall /* Tests a particular active display config */ 121935040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall using TestActiveDisplayConfigFunction = void (*)(Hwc2Test* test, 122035040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall hwc2_display_t display); 122135040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 1222bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall /* Tests a newly created virtual display */ 1223bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall using TestCreateVirtualDisplayFunction = void (*)(Hwc2Test* test, 1224bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall hwc2_display_t display, Hwc2TestVirtualDisplay* testVirtualDisplay); 1225bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 12266bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* Advances a property of Hwc2TestLayer */ 12276bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall using AdvanceProperty = bool (*)(Hwc2TestLayer* testLayer); 12286bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 1229f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall /* Advances properties of Hwc2TestLayers */ 1230f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall using AdvanceProperties = bool (*)(Hwc2TestLayers* testLayer); 1231f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 1232f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall /* Advances properties of Hwc2TestClientTargetSupport */ 1233f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall using AdvanceClientTargetSupport = bool (*)( 1234f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall Hwc2TestClientTargetSupport* testClientTargetSupport); 1235f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 12366bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* For each active display it cycles through each display config and tests 12376bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * each property value. It creates a layer, sets the property and then 12386bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * destroys the layer */ 12396bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall void setLayerProperty(Hwc2TestCoverage coverage, 12406bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall TestLayerPropertyFunction function, AdvanceProperty advance) 12416bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall { 12426bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto display : mDisplays) { 12436bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall std::vector<hwc2_config_t> configs; 12446bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 12456bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 12466bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 12476bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto config : configs) { 12486bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_layer_t layer; 1249600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Area displayArea; 12506bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 12516bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 1252600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveDisplayArea(display, 1253600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall &displayArea)); 1254600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Hwc2TestLayer testLayer(coverage, displayArea); 12556bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 12566bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall do { 12576bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 12586bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 12596bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(function(this, display, layer, 12605a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall &testLayer, nullptr)); 12616bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 12626bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 12636bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } while (advance(&testLayer)); 12646bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 12656bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 12666bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 12676bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 12686bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* For each active display it cycles through each display config and tests 12696bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * each property value. It creates a layer, cycles through each property 12706bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * value and updates the layer property value and then destroys the layer */ 12716bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall void setLayerPropertyUpdate(Hwc2TestCoverage coverage, 12726bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall TestLayerPropertyFunction function, AdvanceProperty advance) 12736bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall { 12746bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto display : mDisplays) { 12756bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall std::vector<hwc2_config_t> configs; 12766bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 12776bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 12786bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 12796bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto config : configs) { 12806bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_layer_t layer; 1281600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Area displayArea; 12826bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 12836bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 1284600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveDisplayArea(display, 1285600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall &displayArea)); 1286600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Hwc2TestLayer testLayer(coverage, displayArea); 12876bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 12886bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 12896bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 12906bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall do { 12916bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(function(this, display, layer, 12925a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall &testLayer, nullptr)); 12936bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } while (advance(&testLayer)); 12946bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 12956bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 12966bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 12976bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 12986bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 12996bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 1300273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall /* For each active display it cycles through each display config and tests 1301273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall * each property value. It creates multiple layers, calls the 1302273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall * TestLayerPropertiesFunction to set property values and then 1303273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall * destroys the layers */ 1304273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall void setLayerProperties(Hwc2TestCoverage coverage, size_t layerCnt, 1305f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall TestLayerPropertiesFunction function, AdvanceProperties advance) 1306273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall { 1307273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall for (auto display : mDisplays) { 1308273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall std::vector<hwc2_config_t> configs; 1309273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 1310273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 1311273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 1312273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall for (auto config : configs) { 1313273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall std::vector<hwc2_layer_t> layers; 1314600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Area displayArea; 1315273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 1316273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 1317600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveDisplayArea(display, 1318600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall &displayArea)); 1319273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 1320273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayers(display, &layers, layerCnt)); 1321600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Hwc2TestLayers testLayers(layers, coverage, displayArea); 1322273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 1323f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall do { 1324f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall for (auto layer : layers) { 1325f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall EXPECT_NO_FATAL_FAILURE(function(this, display, layer, 1326f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall &testLayers)); 1327f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall } 1328f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall } while (advance(&testLayers)); 1329273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 1330273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayers(display, std::move(layers))); 1331273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 1332273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 1333273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 1334273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 13356bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* For each active display it cycles through each display config. 13366bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * 1) It attempts to set a valid property value to bad layer handle. 13376bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * 2) It creates a layer x and attempts to set a valid property value to 13386bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * layer x + 1 13396bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * 3) It destroys the layer x and attempts to set a valid property value to 13406bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * the destroyed layer x. 13416bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall */ 13426bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall void setLayerPropertyBadLayer(Hwc2TestCoverage coverage, 13436bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall TestLayerPropertyBadLayerFunction function) 13446bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall { 13456bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto display : mDisplays) { 13466bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall std::vector<hwc2_config_t> configs; 13476bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 13486bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 13496bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 13506bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto config : configs) { 13516bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_layer_t layer = 0; 1352600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Area displayArea; 13536bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 13546bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 13556bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 1356600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveDisplayArea(display, 1357600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall &displayArea)); 1358600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Hwc2TestLayer testLayer(coverage, displayArea); 13596bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 13606bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(function(this, display, layer, 13615a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall &testLayer, &err)); 13626bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 13636bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 13646bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 13656bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 13666bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(function(this, display, layer + 1, 13675a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall &testLayer, &err)); 13686bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 13696bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 13706bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 13716bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 13726bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(function(this, display, layer, 13735a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall &testLayer, &err)); 13746bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 13756bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 13766bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 13776bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 13786bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 13796bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* For each active display it cycles through each display config and tests 13806bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * each property value. It creates a layer, sets a bad property value and 13816bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * then destroys the layer */ 13826bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall void setLayerPropertyBadParameter(TestLayerPropertyBadParameterFunction function) 13836bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall { 13846bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto display : mDisplays) { 13856bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall std::vector<hwc2_config_t> configs; 13866bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 13876bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 13886bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 13896bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto config : configs) { 13906bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_layer_t layer; 13916bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 13926bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 13936bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 13946bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 13956bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 13966bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 13976bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(function(this, display, layer, &err)); 13986bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_PARAMETER) << "returned wrong" 13996bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall " error code"; 14006bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 14016bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 14026bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 14036bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 14046bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 14056bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 14061cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall /* For each active display it powers on the display, cycles through each 14071cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall * config and creates a set of layers with a certain amount of coverage. 14081cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall * For each active display, for each config and for each set of layers, 14091cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall * it calls the TestDisplayLayersFunction */ 14101cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall void displayLayers(Hwc2TestCoverage coverage, size_t layerCnt, 14111cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall TestDisplayLayersFunction function) 14121cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall { 14131cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall for (auto display : mDisplays) { 14141cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall std::vector<hwc2_config_t> configs; 14151cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 14161cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 14171cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 14181cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 14191cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 14201cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall for (auto config : configs) { 14211cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall Area displayArea; 14221cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall std::vector<hwc2_layer_t> layers; 14231cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 14241cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 14251cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveDisplayArea(display, &displayArea)); 14261cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 14271cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_NO_FATAL_FAILURE(createLayers(display, &layers, layerCnt)); 14281cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall Hwc2TestLayers testLayers(layers, coverage, displayArea); 14291cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 14301cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall do { 14311cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall bool skip; 14321cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 14331cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperties(display, layers, 14341cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall &testLayers, &skip)); 14351cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall if (!skip) 1436706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_NO_FATAL_FAILURE(function(this, display, layers, 1437563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall &testLayers)); 14381cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 14391cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } while (testLayers.advance()); 14401cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 14411cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayers(display, 14421cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall std::move(layers))); 14431cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } 14441cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 14451cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 14461cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } 14471cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } 14481cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 1449706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall /* For each active display, it calls the 1450706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall * TestDisplayNonValidatedLayersFunction on a variety on non-validated 1451706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall * layer combinations */ 1452706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall void displayNonValidatedLayers(size_t layerCnt, 1453706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall TestDisplayNonValidatedLayersFunction function) 1454706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall { 1455706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall for (auto display : mDisplays) { 1456706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall uint32_t numTypes, numRequests; 1457706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_layer_t> layers; 1458706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall bool hasChanges; 1459706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 1460706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 1461706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 1462706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_NO_FATAL_FAILURE(function(this, display, &layers)); 1463706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 1464706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayers(display, &layers, layerCnt)); 1465706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 1466706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_NO_FATAL_FAILURE(function(this, display, &layers)); 1467706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 1468706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall for (auto layer : layers) { 1469706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerCompositionType(display, layer, 1470706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall HWC2_COMPOSITION_CLIENT)); 1471706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 1472706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 1473706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_NO_FATAL_FAILURE(function(this, display, &layers)); 1474706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 1475706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(validateDisplay(display, &numTypes, 1476706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall &numRequests, &hasChanges)); 1477706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 1478706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall for (auto layer : layers) { 1479706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerCompositionType(display, layer, 1480706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall HWC2_COMPOSITION_DEVICE)); 1481706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 1482706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 1483706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_NO_FATAL_FAILURE(function(this, display, &layers)); 1484706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 1485706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayers(display, std::move(layers))); 1486706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 1487706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_NO_FATAL_FAILURE(function(this, display, &layers)); 1488706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 1489706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 1490706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 1491706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 1492706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 1493f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall /* Test client target support on each config on each active display */ 1494f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall void setClientTargetSupport(Hwc2TestCoverage coverage, 1495f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall TestClientTargetSupportFunction function, 1496f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall AdvanceClientTargetSupport advance) 1497f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall { 1498f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall for (auto display : mDisplays) { 1499f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall std::vector<hwc2_config_t> configs; 1500f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 1501f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 1502f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 1503f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall for (auto config : configs) { 1504f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall Area displayArea; 1505f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 1506f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 1507f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(getActiveDisplayArea(display, 1508f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall &displayArea)); 1509f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall Hwc2TestClientTargetSupport testClientTargetSupport(coverage, 1510f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall displayArea); 1511f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 1512f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall do { 1513f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall EXPECT_NO_FATAL_FAILURE(function(this, display, 1514f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall testClientTargetSupport)); 1515f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 1516f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } while (advance(&testClientTargetSupport)); 1517f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } 1518f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } 1519f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } 1520f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 152135040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall /* Cycles through each config on each active display and calls 152235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall * a TestActiveDisplayConfigFunction */ 152335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall void setActiveDisplayConfig(TestActiveDisplayConfigFunction function) 152435040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall { 152535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall for (auto display : mDisplays) { 152635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall std::vector<hwc2_config_t> configs; 152735040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 152835040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 152935040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 153035040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall for (auto config : configs) { 153135040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 153235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 153335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall EXPECT_NO_FATAL_FAILURE(function(this, display)); 153435040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall } 153535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall } 153635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall } 153735040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 1538bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall /* Creates a virtual display for testing */ 1539bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall void createVirtualDisplay(Hwc2TestCoverage coverage, 1540bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall TestCreateVirtualDisplayFunction function) 1541bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall { 1542bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall Hwc2TestVirtualDisplay testVirtualDisplay(coverage); 1543bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 1544bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall do { 1545bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall hwc2_display_t display; 1546bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 1547bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 1548bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall const UnsignedArea& dimension = 1549bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall testVirtualDisplay.getDisplayDimension(); 1550bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall android_pixel_format_t desiredFormat = HAL_PIXEL_FORMAT_RGBA_8888; 1551bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 1552bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall ASSERT_NO_FATAL_FAILURE(createVirtualDisplay(dimension.width, 1553bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall dimension.height, &desiredFormat, &display, &err)); 1554bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 1555bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall EXPECT_TRUE(err == HWC2_ERROR_NONE || err == HWC2_ERROR_NO_RESOURCES 1556bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall || err == HWC2_ERROR_UNSUPPORTED) 1557bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall << "returned wrong error code"; 1558bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall EXPECT_GE(desiredFormat, 0) << "invalid format"; 1559bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 1560bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall if (err != HWC2_ERROR_NONE) 1561bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall continue; 1562bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 1563bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall EXPECT_NO_FATAL_FAILURE(function(this, display, 1564bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall &testVirtualDisplay)); 1565bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 1566bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyVirtualDisplay(display)); 1567bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 1568bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall } while (testVirtualDisplay.advance()); 1569bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall } 1570bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 1571bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 1572600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall void getActiveConfigAttribute(hwc2_display_t display, 1573600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall hwc2_attribute_t attribute, int32_t* outValue) 1574600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall { 1575600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall hwc2_config_t config; 1576600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveConfig(display, &config)); 1577600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, 1578600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall attribute, outValue)); 1579600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_GE(*outValue, 0) << "failed to get valid " 1580600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall << getAttributeName(attribute); 1581600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall } 1582600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 1583600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall void getActiveDisplayArea(hwc2_display_t display, Area* displayArea) 1584600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall { 1585600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveConfigAttribute(display, 1586600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall HWC2_ATTRIBUTE_WIDTH, &displayArea->width)); 1587600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveConfigAttribute(display, 1588600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall HWC2_ATTRIBUTE_HEIGHT, &displayArea->height)); 1589600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall } 1590600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 1591563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall void closeFences(hwc2_display_t display, int32_t presentFence) 1592563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall { 1593563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::vector<hwc2_layer_t> layers; 1594563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::vector<int32_t> fences; 1595563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const int msWait = 3000; 1596563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1597563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall if (presentFence >= 0) { 1598563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_GE(sync_wait(presentFence, msWait), 0); 1599563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall close(presentFence); 1600563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall } 1601563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1602563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(getReleaseFences(display, &layers, &fences)); 1603563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall EXPECT_EQ(layers.size(), fences.size()); 1604563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1605563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall for (int32_t fence : fences) { 1606563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall EXPECT_GE(sync_wait(fence, msWait), 0); 1607563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall if (fence >= 0) 1608563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall close(fence); 1609563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall } 1610563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall } 1611563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 16121cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall void setLayerProperties(hwc2_display_t display, hwc2_layer_t layer, 16131cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall Hwc2TestLayers* testLayers, bool* outSkip) 16141cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall { 16151cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall hwc2_composition_t composition; 16161cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall buffer_handle_t handle = nullptr; 16171cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall int32_t acquireFence; 16181cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 16191cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall *outSkip = true; 16201cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 16211cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall if (!testLayers->contains(layer)) 16221cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall return; 16231cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 16241cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall composition = testLayers->getComposition(layer); 16251cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 16261cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall /* If the device cannot support a buffer format, then do not continue */ 16271cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall if ((composition == HWC2_COMPOSITION_DEVICE 16281cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall || composition == HWC2_COMPOSITION_CURSOR) 16291cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall && testLayers->getBuffer(layer, &handle, &acquireFence) < 0) 16301cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall return; 16311cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 16321cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerCompositionType(display, layer, 16331cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall composition, &err)); 16341cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall if (err == HWC2_ERROR_UNSUPPORTED) 16351cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_TRUE(composition != HWC2_COMPOSITION_CLIENT 16361cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall && composition != HWC2_COMPOSITION_DEVICE); 16371cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 16381cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall const hwc_rect_t cursor = testLayers->getCursorPosition(layer); 16391cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 16401cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerBuffer(display, layer, handle, 16411cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall acquireFence)); 16421cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerBlendMode(display, layer, 16431cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall testLayers->getBlendMode(layer))); 16441cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerColor(display, layer, 16451cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall testLayers->getColor(layer))); 16461cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setCursorPosition(display, layer, cursor.left, 16471cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall cursor.top)); 16481cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerDataspace(display, layer, 16491cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall testLayers->getDataspace(layer))); 16501cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerDisplayFrame(display, layer, 16511cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall testLayers->getDisplayFrame(layer))); 16521cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerPlaneAlpha(display, layer, 16531cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall testLayers->getPlaneAlpha(layer))); 16541cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerSourceCrop(display, layer, 16551cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall testLayers->getSourceCrop(layer))); 16561cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerSurfaceDamage(display, layer, 16571cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall testLayers->getSurfaceDamage(layer))); 16581cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerTransform(display, layer, 16591cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall testLayers->getTransform(layer))); 16601cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerVisibleRegion(display, layer, 16611cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall testLayers->getVisibleRegion(layer))); 16621cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerZOrder(display, layer, 16631cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall testLayers->getZOrder(layer))); 16641cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 16651cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall *outSkip = false; 16661cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } 16671cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 16681cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall void setLayerProperties(hwc2_display_t display, 16691cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall const std::vector<hwc2_layer_t>& layers, 16701cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall Hwc2TestLayers* testLayers, bool* outSkip) 16711cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall { 16721cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall for (auto layer : layers) { 16731cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerProperties(display, layer, 16741cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall testLayers, outSkip)); 16751cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall if (*outSkip) 16761cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall return; 16771cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } 16781cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } 16791cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 1680563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall void setClientTarget(hwc2_display_t display, 1681563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestClientTarget* testClientTarget, 1682563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const Hwc2TestLayers& testLayers, 1683563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const std::set<hwc2_layer_t>& clientLayers, 1684563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const std::set<hwc2_layer_t>& clearLayers, bool flipClientTarget, 1685563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const Area& displayArea) 1686563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall { 1687563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall android_dataspace_t dataspace = HAL_DATASPACE_UNKNOWN; 1688563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall hwc_region_t damage = { }; 1689563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall buffer_handle_t handle; 1690563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall int32_t acquireFence; 1691563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1692563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_EQ(testClientTarget->getBuffer(testLayers, clientLayers, 1693563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall clearLayers, flipClientTarget, displayArea, &handle, 1694563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall &acquireFence), 0); 1695563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall EXPECT_NO_FATAL_FAILURE(setClientTarget(display, handle, acquireFence, 1696563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall dataspace, damage)); 1697563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall } 1698563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1699563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall void presentDisplays(size_t layerCnt, Hwc2TestCoverage coverage, 1700563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage>& 1701563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall coverageExceptions, bool optimize) 1702563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall { 1703563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall for (auto display : mDisplays) { 1704563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::vector<hwc2_config_t> configs; 1705563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1706563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 1707563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(enableVsync(display)); 1708563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1709563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 1710563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1711563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall for (auto config : configs) { 1712563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Area displayArea; 1713563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::vector<hwc2_layer_t> layers; 1714563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1715563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 1716563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(getActiveDisplayArea(display, 1717563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall &displayArea)); 1718563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1719563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayers(display, &layers, layerCnt)); 1720563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestLayers testLayers(layers, coverage, displayArea, 1721563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall coverageExceptions); 1722563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1723563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall if (optimize && !testLayers.optimizeLayouts()) 1724563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall continue; 1725563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1726563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::set<hwc2_layer_t> clientLayers; 1727563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::set<hwc2_layer_t> clearLayers; 1728563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestClientTarget testClientTarget; 1729563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1730563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall do { 1731563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall uint32_t numTypes, numRequests; 1732563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool hasChanges, skip; 1733563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool flipClientTarget; 1734563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall int32_t presentFence; 1735563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1736563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperties(display, layers, 1737563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall &testLayers, &skip)); 1738563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall if (skip) 1739563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall continue; 1740563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1741563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(validateDisplay(display, &numTypes, 1742563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall &numRequests, &hasChanges)); 1743563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall if (hasChanges) 1744563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall EXPECT_LE(numTypes, static_cast<uint32_t>(layers.size())) 1745563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall << "wrong number of requests"; 1746563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1747563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(handleCompositionChanges(display, 1748563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall testLayers, layers, numTypes, &clientLayers)); 1749563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(handleRequests(display, layers, 1750563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall numRequests, &clearLayers, &flipClientTarget)); 1751563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(setClientTarget(display, 1752563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall &testClientTarget, testLayers, clientLayers, 1753563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall clearLayers, flipClientTarget, displayArea)); 1754563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(acceptDisplayChanges(display)); 1755563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1756563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(waitForVsync()); 1757563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1758563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall EXPECT_NO_FATAL_FAILURE(presentDisplay(display, 1759563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall &presentFence)); 1760563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1761563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(closeFences(display, presentFence)); 1762563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1763563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall } while (testLayers.advance()); 1764563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1765563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayers(display, 1766563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::move(layers))); 1767563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall } 1768563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1769563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(disableVsync(display)); 1770563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 1771563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall } 1772563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall } 1773563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 17744d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall hwc2_device_t* mHwc2Device = nullptr; 1775cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1776cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall enum class Hwc2TestHotplugStatus { 1777cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall Init = 1, 1778cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall Receiving, 1779cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall Done, 1780cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall }; 1781cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1782cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::mutex mHotplugMutex; 1783cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::condition_variable mHotplugCv; 1784cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall Hwc2TestHotplugStatus mHotplugStatus = Hwc2TestHotplugStatus::Init; 1785cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::unordered_set<hwc2_display_t> mDisplays; 17861db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 17871db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall /* Store all created layers that have not been destroyed. If an ASSERT_* 17881db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall * fails, then destroy the layers on exit */ 17891db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall std::set<std::pair<hwc2_display_t, hwc2_layer_t>> mLayers; 179003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 179103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall /* Store the power mode state. If it is not HWC2_POWER_MODE_OFF when 179203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall * tearing down the test cases, change it to HWC2_POWER_MODE_OFF */ 179303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall std::set<hwc2_display_t> mActiveDisplays; 1794572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1795bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall /* Store all created virtual displays that have not been destroyed. If an 1796bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall * ASSERT_* fails, then destroy the virtual displays on exit */ 1797bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall std::set<hwc2_display_t> mVirtualDisplays; 1798bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 1799572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall std::mutex mVsyncMutex; 1800572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall std::condition_variable mVsyncCv; 1801572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_display_t mVsyncDisplay; 1802572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall int64_t mVsyncTimestamp = -1; 18034d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall}; 18044d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 1805cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wallvoid hwc2TestHotplugCallback(hwc2_callback_data_t callbackData, 1806cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2_display_t display, int32_t connection) 1807cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall{ 1808cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall if (callbackData) 1809cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall static_cast<Hwc2Test*>(callbackData)->hotplugCallback(display, 1810cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall connection); 1811cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall} 1812cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1813572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wallvoid hwc2TestVsyncCallback(hwc2_callback_data_t callbackData, 1814572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_display_t display, int64_t timestamp) 1815572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 1816572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall if (callbackData) 1817572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall static_cast<Hwc2Test*>(callbackData)->vsyncCallback(display, 1818572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall timestamp); 1819572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 1820572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1821ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wallvoid setBlendMode(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 18225a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 1823ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall{ 1824ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerBlendMode(display, layer, 18255a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getBlendMode(), outErr)); 18265a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall} 18275a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 18285a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wallvoid setBuffer(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 18295a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 18305a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall{ 18315a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall buffer_handle_t handle; 18325a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall android::base::unique_fd acquireFence; 18335a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall hwc2_composition_t composition = testLayer->getComposition(); 18345a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 18355a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall if (composition == HWC2_COMPOSITION_CLIENT 18365a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall || composition == HWC2_COMPOSITION_SOLID_COLOR 18375a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall || composition == HWC2_COMPOSITION_SIDEBAND) 18385a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall return; 18395a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 18405a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall if (testLayer->getBuffer(&handle, &acquireFence) < 0) 18415a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall return; 18425a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 18435a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerCompositionType(display, layer, 18445a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall composition)); 18455a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerBuffer(display, layer, 18465a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall handle, acquireFence, outErr)); 1847ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall} 1848ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 1849ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wallvoid setColor(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 18505a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 1851ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall{ 1852ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerCompositionType(display, 1853ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall layer, HWC2_COMPOSITION_SOLID_COLOR)); 1854ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerPlaneAlpha(display, 18555a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall layer, testLayer->getPlaneAlpha())); 1856ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerBlendMode(display, 18575a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall layer, testLayer->getBlendMode())); 1858ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerColor(display, layer, 18595a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getColor(), outErr)); 1860ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall} 1861ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 18626bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wallvoid setComposition(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 18635a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 18646bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall{ 18655a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall hwc2_composition_t composition = testLayer->getComposition(); 18666bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 18676bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 18686bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerCompositionType(display, layer, 18696bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall composition, &err)); 18706bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall if (outErr) { 18716bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall *outErr = err; 18726bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall return; 18736bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 18746bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 18756bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall if (composition != HWC2_COMPOSITION_SIDEBAND) { 18766bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall EXPECT_EQ(err, HWC2_ERROR_NONE) << "returned wrong error code"; 18776bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } else { 18786bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall EXPECT_TRUE(err == HWC2_ERROR_NONE || err == HWC2_ERROR_UNSUPPORTED) 18796bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall << "returned wrong error code"; 18806bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 18816bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall} 18826bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 18832a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wallvoid setCursorPosition(Hwc2Test* test, hwc2_display_t display, 18845a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall hwc2_layer_t layer, Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 18852a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall{ 18862a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerCompositionType(display, 18872a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall layer, HWC2_COMPOSITION_CURSOR)); 18882a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 18895a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall const hwc_rect_t cursorPosition = testLayer->getCursorPosition(); 18902a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setCursorPosition(display, layer, 18912a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall cursorPosition.left, cursorPosition.top, outErr)); 18922a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall} 18932a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 1894b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wallvoid setDataspace(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 18955a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 1896b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall{ 1897b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerDataspace(display, layer, 18985a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getDataspace(), outErr)); 1899b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall} 1900b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 1901600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wallvoid setDisplayFrame(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 19025a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 1903600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall{ 1904600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerDisplayFrame(display, layer, 19055a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getDisplayFrame(), outErr)); 1906600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall} 1907600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 19082b1f53060ea8587a428f826cf7890354ff124722Marissa Wallvoid setPlaneAlpha(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 19095a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t *outErr) 19102b1f53060ea8587a428f826cf7890354ff124722Marissa Wall{ 19112b1f53060ea8587a428f826cf7890354ff124722Marissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerBlendMode(display, layer, 19125a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getBlendMode())); 19132b1f53060ea8587a428f826cf7890354ff124722Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerPlaneAlpha(display, layer, 19145a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getPlaneAlpha(), outErr)); 19152b1f53060ea8587a428f826cf7890354ff124722Marissa Wall} 19162b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 1917c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wallvoid setSourceCrop(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 19185a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 1919c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall{ 1920c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerSourceCrop(display, layer, 19215a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getSourceCrop(), outErr)); 1922c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall} 1923c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 1924ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wallvoid setSurfaceDamage(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 19255a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 1926ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall{ 1927ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerSurfaceDamage(display, layer, 19285a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getSurfaceDamage(), outErr)); 1929ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall} 1930ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 1931ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wallvoid setTransform(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 19325a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 1933ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall{ 1934ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerTransform(display, layer, 19355a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getTransform(), outErr)); 1936ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall} 1937ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 1938f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wallvoid setVisibleRegion(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 1939f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 1940f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall{ 1941f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerVisibleRegion(display, layer, 1942f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall testLayer->getVisibleRegion(), outErr)); 1943f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall} 1944f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 1945273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wallvoid setZOrder(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 19465a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 1947273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall{ 1948273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerZOrder(display, layer, 19495a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getZOrder(), outErr)); 1950273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall} 1951273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 1952ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wallbool advanceBlendMode(Hwc2TestLayer* testLayer) 1953ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall{ 1954ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall return testLayer->advanceBlendMode(); 1955ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall} 1956ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 19575a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wallbool advanceBuffer(Hwc2TestLayer* testLayer) 19585a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall{ 19595a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall if (testLayer->advanceComposition()) 19605a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall return true; 19615a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall return testLayer->advanceBufferArea(); 19625a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall} 19635a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 1964ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wallbool advanceColor(Hwc2TestLayer* testLayer) 1965ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall{ 1966ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall /* Color depends on blend mode so advance blend mode last so color is not 1967ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall * force to update as often */ 1968ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall if (testLayer->advancePlaneAlpha()) 1969ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall return true; 1970ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall if (testLayer->advanceColor()) 1971ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall return true; 1972ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall return testLayer->advanceBlendMode(); 1973ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall} 1974ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 19756bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wallbool advanceComposition(Hwc2TestLayer* testLayer) 19766bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall{ 19776bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall return testLayer->advanceComposition(); 19786bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall} 19796bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 19802a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wallbool advanceCursorPosition(Hwc2TestLayer* testLayer) 19812a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall{ 19822a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall return testLayer->advanceCursorPosition(); 19832a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall} 19842a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 1985b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wallbool advanceDataspace(Hwc2TestLayer* testLayer) 1986b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall{ 1987b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall return testLayer->advanceDataspace(); 1988b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall} 1989b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 1990600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wallbool advanceDisplayFrame(Hwc2TestLayer* testLayer) 1991600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall{ 1992600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall return testLayer->advanceDisplayFrame(); 1993600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall} 1994600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 19952b1f53060ea8587a428f826cf7890354ff124722Marissa Wallbool advancePlaneAlpha(Hwc2TestLayer* testLayer) 19962b1f53060ea8587a428f826cf7890354ff124722Marissa Wall{ 19972b1f53060ea8587a428f826cf7890354ff124722Marissa Wall return testLayer->advancePlaneAlpha(); 19982b1f53060ea8587a428f826cf7890354ff124722Marissa Wall} 19992b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 2000c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wallbool advanceSourceCrop(Hwc2TestLayer* testLayer) 2001c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall{ 2002c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall if (testLayer->advanceSourceCrop()) 2003c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall return true; 2004c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall return testLayer->advanceBufferArea(); 2005c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall} 2006c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 2007ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wallbool advanceSurfaceDamage(Hwc2TestLayer* testLayer) 2008ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall{ 2009ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall if (testLayer->advanceSurfaceDamage()) 2010ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall return true; 2011ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall return testLayer->advanceBufferArea(); 2012ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall} 2013ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 2014ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wallbool advanceTransform(Hwc2TestLayer* testLayer) 2015ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall{ 2016ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall return testLayer->advanceTransform(); 2017ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall} 2018ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 2019f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wallbool advanceVisibleRegions(Hwc2TestLayers* testLayers) 2020f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall{ 2021f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall return testLayers->advanceVisibleRegions(); 2022f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall} 2023f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 2024f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wallbool advanceClientTargetSupport( 2025f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall Hwc2TestClientTargetSupport* testClientTargetSupport) 2026f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall{ 2027f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall return testClientTargetSupport->advance(); 2028f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall} 20294d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 20304d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wallstatic const std::array<hwc2_function_descriptor_t, 42> requiredFunctions = {{ 20314d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_ACCEPT_DISPLAY_CHANGES, 20324d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_CREATE_LAYER, 20334d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_CREATE_VIRTUAL_DISPLAY, 20344d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_DESTROY_LAYER, 20354d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_DESTROY_VIRTUAL_DISPLAY, 20364d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_DUMP, 20374d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_ACTIVE_CONFIG, 20384d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_CHANGED_COMPOSITION_TYPES, 20394d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_CLIENT_TARGET_SUPPORT, 20404d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_COLOR_MODES, 20414d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_DISPLAY_ATTRIBUTE, 20424d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_DISPLAY_CONFIGS, 20434d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_DISPLAY_NAME, 20444d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_DISPLAY_REQUESTS, 20454d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_DISPLAY_TYPE, 20464d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_DOZE_SUPPORT, 20474d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_HDR_CAPABILITIES, 20484d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_MAX_VIRTUAL_DISPLAY_COUNT, 20494d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_RELEASE_FENCES, 20504d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_PRESENT_DISPLAY, 20514d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_REGISTER_CALLBACK, 20524d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_ACTIVE_CONFIG, 20534d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_CLIENT_TARGET, 20544d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_COLOR_MODE, 20554d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_COLOR_TRANSFORM, 20564d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_CURSOR_POSITION, 20574d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_BLEND_MODE, 20584d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_BUFFER, 20594d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_COLOR, 20604d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_COMPOSITION_TYPE, 20614d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_DATASPACE, 20624d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_DISPLAY_FRAME, 20634d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_PLANE_ALPHA, 20644d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_SOURCE_CROP, 20654d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_SURFACE_DAMAGE, 20664d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_TRANSFORM, 20674d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_VISIBLE_REGION, 20684d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_Z_ORDER, 20694d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_OUTPUT_BUFFER, 20704d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_POWER_MODE, 20714d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_VSYNC_ENABLED, 20724d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_VALIDATE_DISPLAY, 20734d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall}}; 20744d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 20754d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall/* TESTCASE: Tests that the HWC2 supports all required functions. */ 20764d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa WallTEST_F(Hwc2Test, GET_FUNCTION) 20774d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall{ 20784d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall for (hwc2_function_descriptor_t descriptor : requiredFunctions) { 20794d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall hwc2_function_pointer_t pfn = getFunction(descriptor); 20804d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall EXPECT_TRUE(pfn) << "failed to get function " 20814d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall << getFunctionDescriptorName(descriptor); 20824d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall } 20834d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall} 20844d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 20854d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall/* TESTCASE: Tests that the HWC2 fails to retrieve and invalid function. */ 20864d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa WallTEST_F(Hwc2Test, GET_FUNCTION_invalid_function) 20874d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall{ 20884d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall hwc2_function_pointer_t pfn = getFunction(HWC2_FUNCTION_INVALID); 20894d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall EXPECT_FALSE(pfn) << "failed to get invalid function"; 20904d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall} 20914d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 20924d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall/* TESTCASE: Tests that the HWC2 does not return an invalid capability. */ 20934d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa WallTEST_F(Hwc2Test, GET_CAPABILITIES) 20944d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall{ 20954d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall std::vector<hwc2_capability_t> capabilities; 20964d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 20974d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall getCapabilities(&capabilities); 20984d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 20994d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall EXPECT_EQ(std::count(capabilities.begin(), capabilities.end(), 21004d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_CAPABILITY_INVALID), 0); 21014d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall} 2102a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 2103a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wallstatic const std::array<hwc2_callback_descriptor_t, 3> callbackDescriptors = {{ 2104a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall HWC2_CALLBACK_HOTPLUG, 2105a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall HWC2_CALLBACK_REFRESH, 2106a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall HWC2_CALLBACK_VSYNC, 2107a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall}}; 2108a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 2109a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall/* TESTCASE: Tests that the HWC2 can successfully register all required 2110a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall * callback functions. */ 2111a4b01488e852c0c16df89d04914e6f060dd862e3Marissa WallTEST_F(Hwc2Test, REGISTER_CALLBACK) 2112a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall{ 2113a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall hwc2_callback_data_t data = reinterpret_cast<hwc2_callback_data_t>( 2114a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall const_cast<char*>("data")); 2115a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 2116a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall for (auto descriptor : callbackDescriptors) { 2117a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(descriptor, data, 2118a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall []() { return; })); 2119a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall } 2120a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall} 2121a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 2122a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall/* TESTCASE: Test that the HWC2 fails to register invalid callbacks. */ 2123a4b01488e852c0c16df89d04914e6f060dd862e3Marissa WallTEST_F(Hwc2Test, REGISTER_CALLBACK_bad_parameter) 2124a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall{ 2125a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall hwc2_callback_data_t data = reinterpret_cast<hwc2_callback_data_t>( 2126a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall const_cast<char*>("data")); 2127a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 2128a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 2129a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_INVALID, data, 2130a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall []() { return; }, &err)); 2131a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_PARAMETER) << "returned wrong error code"; 2132a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall} 2133a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 2134a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall/* TESTCASE: Tests that the HWC2 can register a callback with null data. */ 2135a4b01488e852c0c16df89d04914e6f060dd862e3Marissa WallTEST_F(Hwc2Test, REGISTER_CALLBACK_null_data) 2136a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall{ 2137a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall hwc2_callback_data_t data = nullptr; 2138a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 2139a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall for (auto descriptor : callbackDescriptors) { 2140a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(descriptor, data, 2141a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall []() { return; })); 2142a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall } 2143a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall} 2144cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 2145cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall/* TESTCASE: Tests that the HWC2 returns the correct display type for each 2146cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall * physical display. */ 2147cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa WallTEST_F(Hwc2Test, GET_DISPLAY_TYPE) 2148cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall{ 2149cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall for (auto display : mDisplays) { 2150cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2_display_type_t type; 2151cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 2152cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayType(display, &type)); 2153cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall EXPECT_EQ(type, HWC2_DISPLAY_TYPE_PHYSICAL) << "failed to return" 2154cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall " correct display type"; 2155cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 2156cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall} 2157cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 2158cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall/* TESTCASE: Tests that the HWC2 returns an error when the display type of a bad 2159cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall * display is requested. */ 2160cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa WallTEST_F(Hwc2Test, GET_DISPLAY_TYPE_bad_display) 2161cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall{ 2162cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2_display_t display; 2163cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2_display_type_t type; 2164cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 2165cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 2166cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 2167cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 2168cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayType(display, &type, &err)); 2169cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 2170cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall} 21711db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 21721db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall/* TESTCASE: Tests that the HWC2 can create and destroy layers. */ 21731db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa WallTEST_F(Hwc2Test, CREATE_DESTROY_LAYER) 21741db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall{ 21751db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (auto display : mDisplays) { 21761db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_layer_t layer; 21771db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 21781db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 21791db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 21801db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 21811db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 21821db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall} 21831db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 21841db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall/* TESTCASE: Tests that the HWC2 cannot create a layer for a bad display */ 21851db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa WallTEST_F(Hwc2Test, CREATE_LAYER_bad_display) 21861db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall{ 21871db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_display_t display; 21881db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_layer_t layer; 21891db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 21901db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 21911db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 21921db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 21931db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer, &err)); 21941db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 21951db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall} 21961db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 21971db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall/* TESTCASE: Tests that the HWC2 will either support a large number of resources 21981db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall * or will return no resources. */ 21991db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa WallTEST_F(Hwc2Test, CREATE_LAYER_no_resources) 22001db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall{ 22011db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall const size_t layerCnt = 1000; 22021db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 22031db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (auto display : mDisplays) { 22041db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall std::vector<hwc2_layer_t> layers; 22051db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 22061db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(createLayers(display, &layers, layerCnt)); 22071db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 22081db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayers(display, std::move(layers))); 22091db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 22101db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall} 22111db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 22121db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall/* TESTCASE: Tests that the HWC2 cannot destroy a layer for a bad display */ 22131db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa WallTEST_F(Hwc2Test, DESTROY_LAYER_bad_display) 22141db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall{ 22151db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_display_t badDisplay; 22161db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 22171db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&badDisplay)); 22181db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 22191db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (auto display : mDisplays) { 22201db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_layer_t layer = 0; 22211db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 22221db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 22231db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(badDisplay, layer, &err)); 22241db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 22251db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 22261db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 22271db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 22281db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(badDisplay, layer, &err)); 22291db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 22301db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 22311db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 22321db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 22331db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall} 22341db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 22351db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall/* TESTCASE: Tests that the HWC2 cannot destory a bad layer */ 22361db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa WallTEST_F(Hwc2Test, DESTROY_LAYER_bad_layer) 22371db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall{ 22381db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (auto display : mDisplays) { 22391db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_layer_t layer; 22401db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 22411db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 22421db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, UINT64_MAX / 2, &err)); 22431db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 22441db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 22451db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, 0, &err)); 22461db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 22471db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 22481db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, UINT64_MAX - 1, &err)); 22491db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 22501db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 22511db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, 1, &err)); 22521db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 22531db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 22541db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, UINT64_MAX, &err)); 22551db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 22561db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 22571db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 22581db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 22591db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer + 1, &err)); 22601db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 22611db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 22621db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 22631db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 22641db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer, &err)); 22651db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 22661db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 22671db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall} 2268cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2269cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wallstatic const std::array<hwc2_attribute_t, 2> requiredAttributes = {{ 2270cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall HWC2_ATTRIBUTE_WIDTH, 2271cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall HWC2_ATTRIBUTE_HEIGHT, 2272cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall}}; 2273cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2274cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wallstatic const std::array<hwc2_attribute_t, 3> optionalAttributes = {{ 2275cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall HWC2_ATTRIBUTE_VSYNC_PERIOD, 2276cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall HWC2_ATTRIBUTE_DPI_X, 2277cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall HWC2_ATTRIBUTE_DPI_Y, 2278cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall}}; 2279cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2280cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 can return display attributes for a valid 2281cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall * config. */ 2282cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_ATTRIBUTE) 2283cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 2284cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto display : mDisplays) { 2285cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs; 2286cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2287cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 2288cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2289cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto config : configs) { 2290cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall int32_t value; 2291cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2292cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto attribute : requiredAttributes) { 2293cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, 2294cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall attribute, &value)); 2295cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_GE(value, 0) << "missing required attribute " 2296cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall << getAttributeName(attribute) << " for config " 2297cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall << config; 2298cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 2299cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto attribute : optionalAttributes) { 2300cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, 2301cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall attribute, &value)); 2302cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 2303cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 2304cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 2305cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 2306cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2307cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 will return a value of -1 for an invalid 2308cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall * attribute */ 2309cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_ATTRIBUTE_invalid_attribute) 2310cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 2311cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall const hwc2_attribute_t attribute = HWC2_ATTRIBUTE_INVALID; 2312cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2313cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto display : mDisplays) { 2314cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs; 2315cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2316cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 2317cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2318cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto config : configs) { 2319cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall int32_t value; 2320cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 2321cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2322cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, 2323cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall attribute, &value, &err)); 2324cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(value, -1) << "failed to return -1 for an invalid" 2325cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall " attribute for config " << config; 2326cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 2327cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 2328cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 2329cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2330cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 will fail to get attributes for a bad display */ 2331cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_ATTRIBUTE_bad_display) 2332cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 2333cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_display_t display; 2334cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall const hwc2_config_t config = 0; 2335cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall int32_t value; 2336cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 2337cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2338cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 2339cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2340cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto attribute : requiredAttributes) { 2341cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, attribute, 2342cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall &value, &err)); 2343cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 2344cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 2345cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2346cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto attribute : optionalAttributes) { 2347cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, attribute, 2348cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall &value, &err)); 2349cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 2350cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 2351cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 2352cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2353cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 will fail to get attributes for a bad config */ 2354cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_ATTRIBUTE_bad_config) 2355cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 2356cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto display : mDisplays) { 2357cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_config_t config; 2358cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall int32_t value; 2359cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 2360cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2361cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getInvalidConfig(display, &config)); 2362cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2363cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto attribute : requiredAttributes) { 2364cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, 2365cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall attribute, &value, &err)); 2366cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_CONFIG) << "returned wrong error code"; 2367cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 2368cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2369cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto attribute : optionalAttributes) { 2370cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, 2371cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall attribute, &value, &err)); 2372cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_CONFIG) << "returned wrong error code"; 2373cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 2374cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 2375cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 2376cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2377cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 will get display configs for active displays */ 2378cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_CONFIGS) 2379cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 2380cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto display : mDisplays) { 2381cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs; 2382cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2383cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 2384cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 2385cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 2386cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2387cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 will not get display configs for bad displays */ 2388cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_CONFIGS_bad_display) 2389cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 2390cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_display_t display; 2391cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs; 2392cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 2393cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2394cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 2395cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2396cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs, &err)); 2397cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2398cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 2399cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_TRUE(configs.empty()) << "returned configs for bad display"; 2400cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 2401cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2402cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 will return the same config list multiple 2403cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall * times in a row. */ 2404cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_CONFIGS_same) 2405cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 2406cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto display : mDisplays) { 2407cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs1, configs2; 2408cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2409cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs1)); 2410cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs2)); 2411cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2412cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_TRUE(std::is_permutation(configs1.begin(), configs1.end(), 2413cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall configs2.begin())) << "returned two different config sets"; 2414cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 2415cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 2416cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2417cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 does not return duplicate display configs */ 2418cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_CONFIGS_duplicate) 2419cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 2420cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto display : mDisplays) { 2421cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs; 2422cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2423cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 2424cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2425cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::unordered_set<hwc2_config_t> configsSet(configs.begin(), 2426cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall configs.end()); 2427cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(configs.size(), configsSet.size()) << "returned duplicate" 2428cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall " configs"; 2429cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 2430cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 243193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 243293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall/* TESTCASE: Tests that the HWC2 returns the active config for a display */ 243393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa WallTEST_F(Hwc2Test, GET_ACTIVE_CONFIG) 243493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall{ 243593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall for (auto display : mDisplays) { 243693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall std::vector<hwc2_config_t> configs; 243793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 243893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 243993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 244093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall for (auto config : configs) { 244193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_config_t activeConfig; 244293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 244393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 244493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveConfig(display, &activeConfig)); 244593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 244693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_EQ(activeConfig, config) << "failed to get active config"; 244793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 244893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 244993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall} 245093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 245193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall/* TESTCASE: Tests that the HWC2 does not return an active config for a bad 245293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall * display. */ 245393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa WallTEST_F(Hwc2Test, GET_ACTIVE_CONFIG_bad_display) 245493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall{ 245593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_display_t display; 245693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_config_t activeConfig; 245793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 245893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 245993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 246093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 246193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveConfig(display, &activeConfig, &err)); 246293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 246393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 246493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall} 246593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 246693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall/* TESTCASE: Tests that the HWC2 either begins with a valid active config 246793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall * or returns an error when getActiveConfig is called. */ 246893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa WallTEST_F(Hwc2Test, GET_ACTIVE_CONFIG_bad_config) 246993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall{ 247093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall for (auto display : mDisplays) { 247193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall std::vector<hwc2_config_t> configs; 247293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_config_t activeConfig; 247393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 247493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 247593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 247693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 247793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall if (configs.empty()) 247893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall return; 247993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 248093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveConfig(display, &activeConfig, &err)); 248193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall if (err == HWC2_ERROR_NONE) { 248293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_NE(std::count(configs.begin(), configs.end(), 248393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall activeConfig), 0) << "active config is not found in " 248493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall " configs for display"; 248593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } else { 248693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_CONFIG) << "returned wrong error code"; 248793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 248893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 248993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall} 249093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 249193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall/* TESTCASE: Tests that the HWC2 can set every display config as an active 249293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall * config */ 249393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa WallTEST_F(Hwc2Test, SET_ACTIVE_CONFIG) 249493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall{ 249593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall for (auto display : mDisplays) { 249693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall std::vector<hwc2_config_t> configs; 249793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 249893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 249993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 250093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall for (auto config : configs) { 250193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 250293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 250393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 250493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall} 250593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 250693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set an active config for a bad display */ 250793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa WallTEST_F(Hwc2Test, SET_ACTIVE_CONFIG_bad_display) 250893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall{ 250993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_display_t display; 251093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall const hwc2_config_t config = 0; 251193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 251293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 251393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 251493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 251593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config, &err)); 251693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 251793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall} 251893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 251993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set an invalid active config */ 252093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa WallTEST_F(Hwc2Test, SET_ACTIVE_CONFIG_bad_config) 252193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall{ 252293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall for (auto display : mDisplays) { 252393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_config_t config; 252493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 252593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 252693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getInvalidConfig(display, &config)); 252793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 252893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config, &err)); 252993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_CONFIG) << "returned wrong error code"; 253093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 253193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall} 253203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 253303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 returns a valid value for getDozeSupport. */ 253403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, GET_DOZE_SUPPORT) 253503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 253603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall for (auto display : mDisplays) { 253703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall int32_t support = -1; 253803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 253903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getDozeSupport(display, &support)); 254003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 254103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_TRUE(support == 0 || support == 1) << "invalid doze support value"; 254203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 254303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 254403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 254503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 cannot get doze support for a bad display. */ 254603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, GET_DOZE_SUPPORT_bad_display) 254703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 254803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_display_t display; 254903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall int32_t support = -1; 255003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 255103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 255203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 255303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 255403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getDozeSupport(display, &support, &err)); 255503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 255603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 255703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 255803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 255903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 can set all supported power modes */ 256003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, SET_POWER_MODE) 256103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 256203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall for (auto display : mDisplays) { 256303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 256403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 256503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 256603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall int32_t support = -1; 256703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getDozeSupport(display, &support)); 256803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (support != 1) 256903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall return; 257003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 257103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_DOZE)); 257203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, 257303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall HWC2_POWER_MODE_DOZE_SUSPEND)); 257403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 257503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 257603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 257703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 257803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 257903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set a power mode for a bad display. */ 258003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, SET_POWER_MODE_bad_display) 258103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 258203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_display_t display; 258303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 258403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 258503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 258603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 258703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON, &err)); 258803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 258903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 259003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF, &err)); 259103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 259203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 259303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall int32_t support = -1; 259403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getDozeSupport(display, &support, &err)); 259503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (support != 1) 259603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall return; 259703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 259803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_DOZE, &err)); 259903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 260003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 260103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_DOZE_SUSPEND, 260203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall &err)); 260303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 260403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 260503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 260603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set an invalid power mode value. */ 260703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, SET_POWER_MODE_bad_parameter) 260803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 260903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall for (auto display : mDisplays) { 261003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_power_mode_t mode = static_cast<hwc2_power_mode_t>( 261103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall HWC2_POWER_MODE_DOZE_SUSPEND + 1); 261203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 261303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 261403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, mode, &err)); 261503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_PARAMETER) << "returned wrong error code " 261603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall << mode; 261703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 261803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 261903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 262003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 will return unsupported if it does not support 262103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall * an optional power mode. */ 262203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, SET_POWER_MODE_unsupported) 262303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 262403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall for (auto display : mDisplays) { 262503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall int32_t support = -1; 262603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 262703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 262803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getDozeSupport(display, &support, &err)); 262903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (support == 1) 263003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall return; 263103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 263203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_EQ(support, 0) << "invalid doze support value"; 263303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 263403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_DOZE, 263503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall &err)); 263603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_UNSUPPORTED) << "returned wrong error code"; 263703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 263803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, 263903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall HWC2_POWER_MODE_DOZE_SUSPEND, &err)); 264003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_UNSUPPORTED) << "returned wrong error code"; 264103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 264203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 264303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 264403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 can set the same power mode multiple times. */ 264503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, SET_POWER_MODE_stress) 264603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 264703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall for (auto display : mDisplays) { 264803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 264903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 265003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 265103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 265203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 265303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 265403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 265503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 265603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 265703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall int32_t support = -1; 265803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getDozeSupport(display, &support)); 265903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (support != 1) 266003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall return; 266103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 266203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_DOZE)); 266303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_DOZE)); 266403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 266503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, 266603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall HWC2_POWER_MODE_DOZE_SUSPEND)); 266703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, 266803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall HWC2_POWER_MODE_DOZE_SUSPEND)); 266903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 267003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 267103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 267203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 2673572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2674572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 can enable and disable vsync on active 2675572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall * displays */ 2676572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED) 2677572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 2678572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall for (auto display : mDisplays) { 2679572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_callback_data_t data = reinterpret_cast<hwc2_callback_data_t>( 2680572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall const_cast<char*>("data")); 2681572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2682572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 2683572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2684572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_VSYNC, data, 2685572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall []() { return; })); 2686572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2687572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE)); 2688572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2689572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 2690572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2691572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 2692572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 2693572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 2694572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2695572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 issues a valid vsync callback. */ 2696572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED_callback) 2697572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 2698572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall for (auto display : mDisplays) { 2699572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_display_t receivedDisplay; 2700572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall int64_t receivedTimestamp; 2701572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2702572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 2703572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2704572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(enableVsync(display)); 2705572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2706572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(waitForVsync(&receivedDisplay, 2707572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall &receivedTimestamp)); 2708572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2709572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall EXPECT_EQ(receivedDisplay, display) << "failed to get correct display"; 2710572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall EXPECT_GE(receivedTimestamp, 0) << "failed to get valid timestamp"; 2711572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2712572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(disableVsync(display)); 2713572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2714572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 2715572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 2716572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 2717572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2718572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 cannot enable a vsync for a bad display */ 2719572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED_bad_display) 2720572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 2721572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_display_t display; 2722572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_callback_data_t data = reinterpret_cast<hwc2_callback_data_t>( 2723572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall const_cast<char*>("data")); 2724572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 2725572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2726572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 2727572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2728572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_VSYNC, data, 2729572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall []() { return; })); 2730572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2731572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE, &err)); 2732572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 2733572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2734572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE, &err)); 2735572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 2736572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 2737572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2738572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 cannot enable an invalid vsync value */ 2739572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED_bad_parameter) 2740572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 2741572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall for (auto display : mDisplays) { 2742572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_callback_data_t data = reinterpret_cast<hwc2_callback_data_t>( 2743572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall const_cast<char*>("data")); 2744572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 2745572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2746572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 2747572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2748572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_VSYNC, data, 2749572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall []() { return; })); 2750572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2751572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_INVALID, 2752572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall &err)); 2753572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_PARAMETER) << "returned wrong error code"; 2754572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2755572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 2756572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 2757572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 2758572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2759572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 can enable and disable a vsync value multiple 2760572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall * times. */ 2761572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED_stress) 2762572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 2763572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall for (auto display : mDisplays) { 2764572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_callback_data_t data = reinterpret_cast<hwc2_callback_data_t>( 2765572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall const_cast<char*>("data")); 2766572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2767572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 2768572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2769572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_VSYNC, data, 2770572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall []() { return; })); 2771572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2772572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 2773572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2774572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE)); 2775572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE)); 2776572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2777572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 2778572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 2779572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2780572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 2781572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 2782572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 2783572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2784572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 can set a vsync enable value when the display 2785572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall * is off and no callback is registered. */ 2786572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED_no_callback_no_power) 2787572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 2788572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall const uint secs = 1; 2789572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2790572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall for (auto display : mDisplays) { 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} 2798572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2799572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 can set a vsync enable value when no callback 2800572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall * is registered. */ 2801572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED_no_callback) 2802572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 2803572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall const uint secs = 1; 2804572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2805572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall for (auto display : mDisplays) { 2806572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 2807572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2808572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE)); 2809572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2810572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall sleep(secs); 2811572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2812572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 2813572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2814572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 2815572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 2816572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 2817dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 2818dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall/* TESTCASE: Tests that the HWC2 returns a display name for each display */ 2819dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa WallTEST_F(Hwc2Test, GET_DISPLAY_NAME) 2820dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall{ 2821dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall for (auto display : mDisplays) { 2822dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall std::string name; 2823dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 2824dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayName(display, &name)); 2825dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall } 2826dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall} 2827dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 2828dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall/* TESTCASE: Tests that the HWC2 does not return a display name for a bad 2829dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall * display */ 2830dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa WallTEST_F(Hwc2Test, GET_DISPLAY_NAME_bad_display) 2831dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall{ 2832dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall hwc2_display_t display; 2833dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall std::string name; 2834dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 2835dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 2836dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 2837dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 2838dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayName(display, &name, &err)); 2839dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 2840dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall} 28416bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 28426bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall/* TESTCASE: Tests that the HWC2 can set basic composition types. */ 28436bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa WallTEST_F(Hwc2Test, SET_LAYER_COMPOSITION_TYPE) 28446bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall{ 28456bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 28466bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall setComposition, advanceComposition)); 28476bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall} 28486bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 28496bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall/* TESTCASE: Tests that the HWC2 can update a basic composition type on a 28506bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * layer. */ 28516bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa WallTEST_F(Hwc2Test, SET_LAYER_COMPOSITION_TYPE_update) 28526bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall{ 28536bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 28546bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall setComposition, advanceComposition)); 28556bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall} 28566bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 28576bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set a composition type for a bad layer */ 28586bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa WallTEST_F(Hwc2Test, SET_LAYER_COMPOSITION_TYPE_bad_layer) 28596bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall{ 28606bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 28616bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall setComposition)); 28626bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall} 28636bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 28646bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set a bad composition type */ 28656bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa WallTEST_F(Hwc2Test, SET_LAYER_COMPOSITION_TYPE_bad_parameter) 28666bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall{ 28676bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadParameter( 28686bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 28696bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_error_t* outErr) { 28706bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 28716bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerCompositionType(display, 28726bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall layer, HWC2_COMPOSITION_INVALID, outErr)); 28736bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 28746bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall )); 28756bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall} 2876ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 28772a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall/* TESTCASE: Tests that the HWC2 can set the cursor position of a layer. */ 28782a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa WallTEST_F(Hwc2Test, SET_CURSOR_POSITION) 28792a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall{ 28802a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 28812a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ::setCursorPosition, advanceCursorPosition)); 28822a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall} 28832a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 28842a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall/* TESTCASE: Tests that the HWC2 can update the cursor position of a layer. */ 28852a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa WallTEST_F(Hwc2Test, SET_CURSOR_POSITION_update) 28862a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall{ 28872a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 28882a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ::setCursorPosition, advanceCursorPosition)); 28892a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall} 28902a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 28912a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall/* TESTCASE: Tests that the HWC2 can set the cursor position of a layer when the 28922a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall * composition type has not been set to HWC2_COMPOSITION_CURSOR. */ 28932a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa WallTEST_F(Hwc2Test, SET_CURSOR_POSITION_composition_type_unset) 28942a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall{ 28952a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 28962a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 28975a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) { 28982a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 28995a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall const hwc_rect_t cursorPosition = testLayer->getCursorPosition(); 29002a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setCursorPosition(display, layer, 29012a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall cursorPosition.left, cursorPosition.top, outErr)); 29022a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall }, 29032a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 29042a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall advanceCursorPosition)); 29052a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall} 29062a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 29072a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set the cursor position of a bad 29082a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall * display. */ 29092a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa WallTEST_F(Hwc2Test, SET_CURSOR_POSITION_bad_display) 29102a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall{ 29112a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall hwc2_display_t display; 29122a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall hwc2_layer_t layer = 0; 29132a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall int32_t x = 0, y = 0; 29142a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 29152a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 29162a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 29172a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 29182a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_NO_FATAL_FAILURE(setCursorPosition(display, layer, x, y, &err)); 29192a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 29202a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall} 29212a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 29222a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set the cursor position of a bad layer. */ 29232a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa WallTEST_F(Hwc2Test, SET_CURSOR_POSITION_bad_layer) 29242a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall{ 29252a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 29262a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t badLayer, 29275a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) { 29282a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 29295a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall const hwc_rect_t cursorPosition = testLayer->getCursorPosition(); 29302a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setCursorPosition(display, 29312a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall badLayer, cursorPosition.left, cursorPosition.top, 29322a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall outErr)); 29332a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall } 29342a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall )); 29352a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall} 29362a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 2937ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall/* TESTCASE: Tests that the HWC2 can set a blend mode value of a layer. */ 2938ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa WallTEST_F(Hwc2Test, SET_LAYER_BLEND_MODE) 2939ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall{ 2940ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 2941ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall setBlendMode, advanceBlendMode)); 2942ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall} 2943ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 2944ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall/* TESTCASE: Tests that the HWC2 can update a blend mode value of a layer. */ 2945ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa WallTEST_F(Hwc2Test, SET_LAYER_BLEND_MODE_update) 2946ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall{ 2947ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 2948ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall setBlendMode, advanceBlendMode)); 2949ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall} 2950ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 2951ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set a blend mode for a bad layer. */ 2952ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa WallTEST_F(Hwc2Test, SET_LAYER_BLEND_MODE_bad_layer) 2953ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall{ 2954ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 2955ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall setBlendMode)); 2956ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall} 2957ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 2958ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set an invalid blend mode. */ 2959ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa WallTEST_F(Hwc2Test, SET_LAYER_BLEND_MODE_bad_parameter) 2960ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall{ 2961ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadParameter( 2962ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 2963ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall hwc2_error_t* outErr) { 2964ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 2965ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerBlendMode(display, 2966ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall layer, HWC2_BLEND_MODE_INVALID, outErr)); 2967ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall } 2968ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall )); 2969ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall} 2970b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 29715a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall/* TESTCASE: Tests that the HWC2 can set the buffer of a layer. */ 29725a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa WallTEST_F(Hwc2Test, SET_LAYER_BUFFER) 29735a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall{ 29745a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 29755a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall setBuffer, advanceBuffer)); 29765a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall} 29775a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 29785a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall/* TESTCASE: Tests that the HWC2 can update the buffer of a layer. */ 29795a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa WallTEST_F(Hwc2Test, SET_LAYER_BUFFER_update) 29805a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall{ 29815a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 29825a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall setBuffer, advanceBuffer)); 29835a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall} 29845a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 29855a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set the buffer of a bad layer. */ 29865a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa WallTEST_F(Hwc2Test, SET_LAYER_BUFFER_bad_layer) 29875a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall{ 29885a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 29895a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t badLayer, 29905a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) { 29915a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 29925a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall buffer_handle_t handle = nullptr; 29935a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall android::base::unique_fd acquireFence; 29945a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 29955a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall /* If there is not available buffer for the given buffer 29965a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall * properties, it should not fail this test case */ 29975a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall if (testLayer->getBuffer(&handle, &acquireFence) == 0) { 29985a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall *outErr = HWC2_ERROR_BAD_LAYER; 29995a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall return; 30005a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall } 30015a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 30025a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerBuffer(display, badLayer, 30035a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall handle, acquireFence, outErr)); 30045a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall } 30055a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall )); 30065a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall} 30075a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 30085a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall/* TESTCASE: Tests that the HWC2 can set an invalid buffer for a layer. */ 30095a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa WallTEST_F(Hwc2Test, SET_LAYER_BUFFER_bad_parameter) 30105a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall{ 30115a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadParameter( 30125a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 30135a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall hwc2_error_t* outErr) { 30145a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 30155a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall buffer_handle_t handle = nullptr; 30165a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall int32_t acquireFence = -1; 30175a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 30185a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerBuffer(display, layer, 30195a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall handle, acquireFence, outErr)); 30205a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall } 30215a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall )); 30225a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall} 30235a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 3024ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall/* TESTCASE: Tests that the HWC2 can set the color of a layer. */ 3025ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa WallTEST_F(Hwc2Test, SET_LAYER_COLOR) 3026ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall{ 3027ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 3028ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall setColor, advanceColor)); 3029ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall} 3030ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 3031ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall/* TESTCASE: Tests that the HWC2 can update the color of a layer. */ 3032ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa WallTEST_F(Hwc2Test, SET_LAYER_COLOR_update) 3033ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall{ 3034ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 3035ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall setColor, advanceColor)); 3036ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall} 3037ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 3038ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall/* TESTCASE: Tests that the HWC2 can set the color of a layer when the 3039ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall * composition type has not been set to HWC2_COMPOSITION_SOLID_COLOR. */ 3040ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa WallTEST_F(Hwc2Test, SET_LAYER_COLOR_composition_type_unset) 3041ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall{ 3042ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Basic, 3043ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 30445a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) { 3045ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 3046ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerColor(display, layer, 30475a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getColor(), outErr)); 3048ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall }, 3049ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 3050ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall advanceColor)); 3051ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall} 3052ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 3053ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set the color of a bad layer. */ 3054ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa WallTEST_F(Hwc2Test, SET_LAYER_COLOR_bad_layer) 3055ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall{ 3056ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 3057ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t badLayer, 30585a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) { 3059ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 3060ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerColor(display, badLayer, 30615a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getColor(), outErr)); 3062ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall } 3063ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall )); 3064ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall} 3065ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 3066b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall/* TESTCASE: Tests that the HWC2 can set the dataspace of a layer. */ 3067b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa WallTEST_F(Hwc2Test, SET_LAYER_DATASPACE) 3068b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall{ 3069b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 3070b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall setDataspace, advanceDataspace)); 3071b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall} 3072b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 3073b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall/* TESTCASE: Tests that the HWC2 can update the dataspace of a layer. */ 3074b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa WallTEST_F(Hwc2Test, SET_LAYER_DATASPACE_update) 3075b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall{ 3076b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 3077b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall setDataspace, advanceDataspace)); 3078b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall} 3079b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 3080b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set a dataspace for a bad layer. */ 3081b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa WallTEST_F(Hwc2Test, SET_LAYER_DATASPACE_bad_layer) 3082b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall{ 3083b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 3084b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall setDataspace)); 3085b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall} 30862b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 3087600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall/* TESTCASE: Tests that the HWC2 can set the display frame of a layer. */ 3088600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa WallTEST_F(Hwc2Test, SET_LAYER_DISPLAY_FRAME) 3089600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall{ 3090600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 3091600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall setDisplayFrame, advanceDisplayFrame)); 3092600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall} 3093600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 3094600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall/* TESTCASE: Tests that the HWC2 can update the display frame of a layer. */ 3095600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa WallTEST_F(Hwc2Test, SET_LAYER_DISPLAY_FRAME_update) 3096600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall{ 3097600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 3098600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall setDisplayFrame, advanceDisplayFrame)); 3099600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall} 3100600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 3101600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set the display frame of a bad layer. */ 3102600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa WallTEST_F(Hwc2Test, SET_LAYER_DISPLAY_FRAME_bad_layer) 3103600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall{ 3104600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 3105600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall setDisplayFrame)); 3106600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall} 3107600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 31082b1f53060ea8587a428f826cf7890354ff124722Marissa Wall/* TESTCASE: Tests that the HWC2 can set the plane alpha of a layer. */ 31092b1f53060ea8587a428f826cf7890354ff124722Marissa WallTEST_F(Hwc2Test, SET_LAYER_PLANE_ALPHA) 31102b1f53060ea8587a428f826cf7890354ff124722Marissa Wall{ 31112b1f53060ea8587a428f826cf7890354ff124722Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 31122b1f53060ea8587a428f826cf7890354ff124722Marissa Wall setPlaneAlpha, advancePlaneAlpha)); 31132b1f53060ea8587a428f826cf7890354ff124722Marissa Wall} 31142b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 31152b1f53060ea8587a428f826cf7890354ff124722Marissa Wall/* TESTCASE: Tests that the HWC2 can update the plane alpha of a layer. */ 31162b1f53060ea8587a428f826cf7890354ff124722Marissa WallTEST_F(Hwc2Test, SET_LAYER_PLANE_ALPHA_update) 31172b1f53060ea8587a428f826cf7890354ff124722Marissa Wall{ 31182b1f53060ea8587a428f826cf7890354ff124722Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 31192b1f53060ea8587a428f826cf7890354ff124722Marissa Wall setPlaneAlpha, advancePlaneAlpha)); 31202b1f53060ea8587a428f826cf7890354ff124722Marissa Wall} 31212b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 31222b1f53060ea8587a428f826cf7890354ff124722Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set a plane alpha for a bad layer. */ 31232b1f53060ea8587a428f826cf7890354ff124722Marissa WallTEST_F(Hwc2Test, SET_LAYER_PLANE_ALPHA_bad_layer) 31242b1f53060ea8587a428f826cf7890354ff124722Marissa Wall{ 31252b1f53060ea8587a428f826cf7890354ff124722Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 31262b1f53060ea8587a428f826cf7890354ff124722Marissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t badLayer, 31275a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t *outErr) { 31282b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 31292b1f53060ea8587a428f826cf7890354ff124722Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerPlaneAlpha(display, 31305a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall badLayer, testLayer->getPlaneAlpha(), outErr)); 31312b1f53060ea8587a428f826cf7890354ff124722Marissa Wall } 31322b1f53060ea8587a428f826cf7890354ff124722Marissa Wall )); 31332b1f53060ea8587a428f826cf7890354ff124722Marissa Wall} 3134ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 3135c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall/* TESTCASE: Tests that the HWC2 can set the source crop of a layer. */ 3136c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa WallTEST_F(Hwc2Test, SET_LAYER_SOURCE_CROP) 3137c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall{ 3138c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 3139c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall setSourceCrop, advanceSourceCrop)); 3140c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall} 3141c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 3142c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall/* TESTCASE: Tests that the HWC2 can update the source crop of a layer. */ 3143c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa WallTEST_F(Hwc2Test, SET_LAYER_SOURCE_CROP_update) 3144c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall{ 3145c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 3146c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall setSourceCrop, advanceSourceCrop)); 3147c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall} 3148c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 3149c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set the source crop of a bad layer. */ 3150c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa WallTEST_F(Hwc2Test, SET_LAYER_SOURCE_CROP_bad_layer) 3151c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall{ 3152c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 3153c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall setSourceCrop)); 3154c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall} 3155c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 3156ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall/* TESTCASE: Tests that the HWC2 can set the surface damage of a layer. */ 3157ad761818a4426b4e6a0696ba90e05056aa35553cMarissa WallTEST_F(Hwc2Test, SET_LAYER_SURFACE_DAMAGE) 3158ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall{ 3159ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 3160ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall setSurfaceDamage, advanceSurfaceDamage)); 3161ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall} 3162ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 3163ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall/* TESTCASE: Tests that the HWC2 can update the surface damage of a layer. */ 3164ad761818a4426b4e6a0696ba90e05056aa35553cMarissa WallTEST_F(Hwc2Test, SET_LAYER_SURFACE_DAMAGE_update) 3165ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall{ 3166ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 3167ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall setSurfaceDamage, advanceSurfaceDamage)); 3168ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall} 3169ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 3170ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set the surface damage of a bad layer. */ 3171ad761818a4426b4e6a0696ba90e05056aa35553cMarissa WallTEST_F(Hwc2Test, SET_LAYER_SURFACE_DAMAGE_bad_layer) 3172ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall{ 3173ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 3174ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall setSurfaceDamage)); 3175ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall} 3176ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 3177ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall/* TESTCASE: Tests that the HWC2 can set the transform value of a layer. */ 3178ac10819373b1ed4901f26c822484a789a7ca4be0Marissa WallTEST_F(Hwc2Test, SET_LAYER_TRANSFORM) 3179ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall{ 3180ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 3181ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall setTransform, advanceTransform)); 3182ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall} 3183ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 3184ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall/* TESTCASE: Tests that the HWC2 can update the transform value of a layer. */ 3185ac10819373b1ed4901f26c822484a789a7ca4be0Marissa WallTEST_F(Hwc2Test, SET_LAYER_TRANSFORM_update) 3186ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall{ 3187ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 3188ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall setTransform, advanceTransform)); 3189ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall} 3190ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 3191ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set the transform for a bad layer. */ 3192ac10819373b1ed4901f26c822484a789a7ca4be0Marissa WallTEST_F(Hwc2Test, SET_LAYER_TRANSFORM_bad_layer) 3193ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall{ 3194ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 3195ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall setTransform)); 3196ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall} 3197273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 3198f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall/* TESTCASE: Tests that the HWC2 can set the visible region of a layer. */ 3199f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa WallTEST_F(Hwc2Test, SET_LAYER_VISIBLE_REGION) 3200f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall{ 3201f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperties(Hwc2TestCoverage::Basic, 5, 3202f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 3203f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall Hwc2TestLayers* testLayers) { 3204f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 3205f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerVisibleRegion(display, 3206f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall layer, testLayers->getVisibleRegion(layer))); 3207f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall }, 3208f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 3209f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall advanceVisibleRegions)); 3210f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall} 3211f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 3212f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set the visible region of a bad layer. */ 3213f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa WallTEST_F(Hwc2Test, SET_LAYER_VISIBLE_REGION_bad_layer) 3214f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall{ 3215f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 3216f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall setVisibleRegion)); 3217f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall} 3218f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 3219273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall/* TESTCASE: Tests that the HWC2 can set the z order of a layer. */ 3220273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa WallTEST_F(Hwc2Test, SET_LAYER_Z_ORDER) 3221273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall{ 3222273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperties(Hwc2TestCoverage::Complete, 10, 3223273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 32245a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayers* testLayers) { 3225273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 3226273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerZOrder(display, layer, 32275a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayers->getZOrder(layer))); 3228f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall }, 3229f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 3230f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall /* TestLayer z orders are set during the construction of TestLayers 3231f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall * and cannot be updated. There is no need (or ability) to cycle 3232f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall * through additional z order configurations. */ 3233f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall [] (Hwc2TestLayers* /*testLayers*/) { 3234f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall return false; 3235273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 3236273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall )); 3237273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall} 3238273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 3239273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall/* TESTCASE: Tests that the HWC2 can update the z order of a layer. */ 3240273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa WallTEST_F(Hwc2Test, SET_LAYER_Z_ORDER_update) 3241273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall{ 3242273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall const std::vector<uint32_t> zOrders = { static_cast<uint32_t>(0), 3243273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall static_cast<uint32_t>(1), static_cast<uint32_t>(UINT32_MAX / 4), 3244273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall static_cast<uint32_t>(UINT32_MAX / 2), 3245273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall static_cast<uint32_t>(UINT32_MAX) }; 3246273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 3247273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall for (auto display : mDisplays) { 3248273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall std::vector<hwc2_config_t> configs; 3249273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 3250273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 3251273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 3252273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall for (auto config : configs) { 3253273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall hwc2_layer_t layer; 3254273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 3255273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 3256273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 3257273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 3258273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 3259273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall for (uint32_t zOrder : zOrders) { 3260273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall EXPECT_NO_FATAL_FAILURE(setLayerZOrder(display, layer, zOrder)); 3261273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 3262273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 3263273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 3264273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 3265273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 3266273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall} 3267273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 3268273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set the z order of a bad layer. */ 3269273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa WallTEST_F(Hwc2Test, SET_LAYER_Z_ORDER_bad_layer) 3270273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall{ 3271273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 3272273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall setZOrder)); 3273273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall} 32741cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 32751cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall/* TESTCASE: Tests that the HWC2 can display a layer with basic property 32761cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall * coverage */ 32771cd789cd2b300427467586f4ec721a8123f118b7Marissa WallTEST_F(Hwc2Test, VALIDATE_DISPLAY_basic) 32781cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall{ 32791cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_NO_FATAL_FAILURE(displayLayers(Hwc2TestCoverage::Basic, 1, 32801cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall [] (Hwc2Test* test, hwc2_display_t display, 3281706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall const std::vector<hwc2_layer_t>& layers, 3282563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestLayers* /*testLayers*/) { 32831cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 32841cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall uint32_t numTypes, numRequests; 32851cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall bool hasChanges = false; 32861cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 32871cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(test->validateDisplay(display, &numTypes, 32881cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall &numRequests, &hasChanges)); 32891cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall if (hasChanges) 32901cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_LE(numTypes, static_cast<uint32_t>(layers.size())) 32911cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall << "wrong number of requests"; 32921cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } 32931cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall )); 32941cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall} 32951cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 32961cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall/* TESTCASE: Tests that the HWC2 can display 5 layers with default coverage. */ 32971cd789cd2b300427467586f4ec721a8123f118b7Marissa WallTEST_F(Hwc2Test, VALIDATE_DISPLAY_default_5) 32981cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall{ 32991cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_NO_FATAL_FAILURE(displayLayers(Hwc2TestCoverage::Default, 5, 33001cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall [] (Hwc2Test* test, hwc2_display_t display, 3301706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall const std::vector<hwc2_layer_t>& layers, 3302563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestLayers* /*testLayers*/) { 33031cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 33041cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall uint32_t numTypes, numRequests; 33051cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall bool hasChanges = false; 33061cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 33071cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(test->validateDisplay(display, &numTypes, 33081cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall &numRequests, &hasChanges)); 33091cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall if (hasChanges) 33101cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_LE(numTypes, static_cast<uint32_t>(layers.size())) 33111cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall << "wrong number of requests"; 33121cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } 33131cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall )); 33141cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall} 33151cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 33161cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall/* TESTCASE: Tests that the HWC2 cannot validate a bad display */ 33171cd789cd2b300427467586f4ec721a8123f118b7Marissa WallTEST_F(Hwc2Test, VALIDATE_DISPLAY_bad_display) 33181cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall{ 33191cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall hwc2_display_t display; 33201cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall uint32_t numTypes, numRequests; 33211cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 33221cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 33231cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 33241cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 33251cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_NO_FATAL_FAILURE(validateDisplay(display, &numTypes, &numRequests, 33261cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall &err)); 33271cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 33281cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall} 3329706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3330706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall/* TESTCASE: Tests that the HWC2 can get display requests after validating a 3331706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall * basic layer. */ 3332706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa WallTEST_F(Hwc2Test, GET_DISPLAY_REQUESTS_basic) 3333706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall{ 3334706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(displayLayers(Hwc2TestCoverage::Basic, 1, 3335706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, 3336706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall const std::vector<hwc2_layer_t>& layers, 3337563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestLayers* /*testLayers*/) { 3338706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3339706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall uint32_t numTypes, numRequests; 3340706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall bool hasChanges = false; 3341706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3342706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(test->validateDisplay(display, &numTypes, 3343706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall &numRequests, &hasChanges)); 3344706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall if (hasChanges) 3345706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_LE(numTypes, layers.size()) 3346706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << "wrong number of requests"; 3347706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3348706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_NO_FATAL_FAILURE(test->handleRequests(display, layers, 3349706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall numRequests)); 3350706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 3351706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall )); 3352706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall} 3353706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3354706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall/* TESTCASE: Tests that the HWC2 cannot get display requests from a bad display */ 3355706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa WallTEST_F(Hwc2Test, GET_DISPLAY_REQUESTS_bad_display) 3356706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall{ 3357706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_display_t display; 3358706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_display_request_t displayRequests; 3359706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_layer_t> layers; 3360706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_layer_request_t> layerRequests; 3361706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 3362706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3363706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 3364706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3365706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_NO_FATAL_FAILURE(getDisplayRequests(display, &displayRequests, 3366706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall &layers, &layerRequests, &err)); 3367706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 3368706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall} 3369706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3370706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall/* TESTCASE: Tests that the HWC2 cannot get display requests from an non 3371706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall * validated display. */ 3372706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa WallTEST_F(Hwc2Test, GET_DISPLAY_REQUESTS_not_validated) 3373706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall{ 3374706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(displayNonValidatedLayers(5, 3375706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, 3376706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_layer_t>* layers) { 3377706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3378706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_display_request_t displayRequests; 3379706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_layer_request_t> layerRequests; 3380706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 3381706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3382706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(test->getDisplayRequests(display, 3383706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall &displayRequests, layers, &layerRequests, &err)); 3384706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_EQ(err, HWC2_ERROR_NOT_VALIDATED) 3385706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << "returned wrong error code"; 3386706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 3387706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall )); 3388706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall} 3389706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3390706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall/* TESTCASE: Tests that the HWC2 can get changed composition types after 3391706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall * validating a basic layer. */ 3392706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa WallTEST_F(Hwc2Test, GET_CHANGED_COMPOSITION_TYPES_basic) 3393706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall{ 3394706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(displayLayers(Hwc2TestCoverage::Basic, 1, 3395706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, 3396706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall const std::vector<hwc2_layer_t>& layers, 3397563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestLayers* testLayers) { 3398706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3399706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall uint32_t numTypes, numRequests; 3400706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall bool hasChanges = false; 3401706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3402706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(test->validateDisplay(display, &numTypes, 3403706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall &numRequests, &hasChanges)); 3404706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall if (hasChanges) 3405706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_LE(numTypes, layers.size()) 3406706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << "wrong number of requests"; 3407706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3408706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_NO_FATAL_FAILURE(test->handleCompositionChanges(display, 3409563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall *testLayers, layers, numTypes)); 3410706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 3411706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall )); 3412706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall} 3413706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3414706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall/* TESTCASE: Tests that the HWC2 cannot get changed composition types from a bad 3415706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall * display */ 3416706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa WallTEST_F(Hwc2Test, GET_CHANGED_COMPOSITION_TYPES_bad_display) 3417706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall{ 3418706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_display_t display; 3419706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_layer_t> layers; 3420706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_composition_t> types; 3421706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 3422706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3423706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 3424706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3425706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_NO_FATAL_FAILURE(getChangedCompositionTypes(display, &layers, 3426706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall &types, &err)); 3427706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 3428706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall} 3429706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3430706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall/* TESTCASE: Tests that the HWC2 cannot get changed composition types from an non 3431706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall * validated display. */ 3432706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa WallTEST_F(Hwc2Test, GET_CHANGED_COMPOSITION_TYPES_not_validated) 3433706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall{ 3434706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(displayNonValidatedLayers(5, 3435706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, 3436706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_layer_t>* layers) { 3437706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3438706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_composition_t> types; 3439706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 3440706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3441706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(test->getChangedCompositionTypes( 3442706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall display, layers, &types, &err)); 3443706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_EQ(err, HWC2_ERROR_NOT_VALIDATED) 3444706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << "returned wrong error code"; 3445706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 3446706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall )); 3447706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall} 3448706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3449706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall/* TESTCASE: Tests that the HWC2 can accept display changes after validating a 3450706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall * basic layer. */ 3451706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa WallTEST_F(Hwc2Test, ACCEPT_DISPLAY_CHANGES_basic) 3452706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall{ 3453706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(displayLayers(Hwc2TestCoverage::Basic, 1, 3454706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, 3455706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall const std::vector<hwc2_layer_t>& layers, 3456563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestLayers* testLayers) { 3457706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3458706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall uint32_t numTypes, numRequests; 3459706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall bool hasChanges = false; 3460706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3461706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(test->validateDisplay(display, &numTypes, 3462706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall &numRequests, &hasChanges)); 3463706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall if (hasChanges) 3464706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_LE(numTypes, layers.size()) 3465706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << "wrong number of requests"; 3466706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3467706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(test->handleCompositionChanges(display, 3468563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall *testLayers, layers, numTypes)); 3469706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3470706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_NO_FATAL_FAILURE(test->acceptDisplayChanges(display)); 3471706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 3472706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall )); 3473706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall} 3474706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3475706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall/* TESTCASE: Tests that the HWC2 cannot accept display changes from a bad 3476706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall * display */ 3477706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa WallTEST_F(Hwc2Test, ACCEPT_DISPLAY_CHANGES_bad_display) 3478706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall{ 3479706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_display_t display; 3480706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 3481706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3482706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 3483706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3484706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_NO_FATAL_FAILURE(acceptDisplayChanges(display, &err)); 3485706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 3486706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall} 3487706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3488706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall/* TESTCASE: Tests that the HWC2 cannot accept display changes from an non 3489706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall * validated display. */ 3490706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa WallTEST_F(Hwc2Test, ACCEPT_DISPLAY_CHANGES_not_validated) 3491706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall{ 3492706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(displayNonValidatedLayers(5, 3493706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, 3494706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_layer_t>* /*layers*/) { 3495706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3496706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 3497706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3498706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(test->acceptDisplayChanges(display, &err)); 3499706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_EQ(err, HWC2_ERROR_NOT_VALIDATED) 3500706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << "returned wrong error code"; 3501706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 3502706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall )); 3503706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall} 3504f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3505f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall/* TESTCASE: Tests that the HWC2 supports client target with required values */ 3506f18cfb0a780c69f12439457ccc3f5272db767fddMarissa WallTEST_F(Hwc2Test, GET_CLIENT_TARGET_SUPPORT) 3507f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall{ 3508f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(setClientTargetSupport(Hwc2TestCoverage::Default, 3509f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, 3510f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const Hwc2TestClientTargetSupport& testClientTargetSupport) { 3511f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3512f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const Area bufferArea = testClientTargetSupport.getBufferArea(); 3513f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const android_pixel_format_t format = HAL_PIXEL_FORMAT_RGBA_8888; 3514f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3515f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(test->getClientTargetSupport(display, 3516f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall bufferArea.width, bufferArea.height, format, 3517f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall testClientTargetSupport.getDataspace())); 3518f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall }, 3519f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3520f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall advanceClientTargetSupport)); 3521f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall} 3522f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3523f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall/* TESTCASE: Tests that the HWC2 cannot get client target support for a bad 3524f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall * display. */ 3525f18cfb0a780c69f12439457ccc3f5272db767fddMarissa WallTEST_F(Hwc2Test, GET_CLIENT_TARGET_SUPPORT_bad_display) 3526f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall{ 3527f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(setClientTargetSupport(Hwc2TestCoverage::Default, 3528f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall [] (Hwc2Test* test, hwc2_display_t /*display*/, 3529f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const Hwc2TestClientTargetSupport& testClientTargetSupport) { 3530f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3531f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const Area bufferArea = testClientTargetSupport.getBufferArea(); 3532f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const android_pixel_format_t format = HAL_PIXEL_FORMAT_RGBA_8888; 3533f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall hwc2_display_t badDisplay; 3534f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 3535f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3536f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(test->getBadDisplay(&badDisplay)); 3537f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3538f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(test->getClientTargetSupport(badDisplay, 3539f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall bufferArea.width, bufferArea.height, format, 3540f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall testClientTargetSupport.getDataspace(), &err)); 3541f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 3542f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall }, 3543f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3544f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall advanceClientTargetSupport)); 3545f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall} 3546f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3547f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall/* TESTCASE: Tests that the HWC2 either supports or returns error unsupported 3548f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall * for a variety of client target values. */ 3549f18cfb0a780c69f12439457ccc3f5272db767fddMarissa WallTEST_F(Hwc2Test, GET_CLIENT_TARGET_SUPPORT_unsupported) 3550f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall{ 3551f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(setClientTargetSupport(Hwc2TestCoverage::Complete, 3552f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, 3553f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const Hwc2TestClientTargetSupport& testClientTargetSupport) { 3554f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3555f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const Area bufferArea = testClientTargetSupport.getBufferArea(); 3556f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const android_pixel_format_t format = HAL_PIXEL_FORMAT_RGBA_8888; 3557f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 3558f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3559f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(test->getClientTargetSupport(display, 3560f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall bufferArea.width, bufferArea.height, format, 3561f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall testClientTargetSupport.getDataspace(), &err)); 3562f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall EXPECT_TRUE(err == HWC2_ERROR_NONE 3563f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall || err == HWC2_ERROR_UNSUPPORTED) 3564f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall << "returned wrong error code"; 3565f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall }, 3566f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3567f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall advanceClientTargetSupport)); 3568f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall} 3569f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3570f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall/* TESTCASE: Tests that the HWC2 can set a client target buffer for a basic 3571f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall * layer. */ 3572f18cfb0a780c69f12439457ccc3f5272db767fddMarissa WallTEST_F(Hwc2Test, SET_CLIENT_TARGET_basic) 3573f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall{ 3574f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const android_dataspace_t dataspace = HAL_DATASPACE_UNKNOWN; 3575f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const hwc_region_t damage = { }; 3576f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const size_t layerCnt = 1; 3577f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3578f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall for (auto display : mDisplays) { 3579f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall std::vector<hwc2_config_t> configs; 3580f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3581f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 3582f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3583f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 3584f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3585f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall for (auto config : configs) { 3586f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall Area displayArea; 3587f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall std::vector<hwc2_layer_t> layers; 3588f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3589f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 3590f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(getActiveDisplayArea(display, &displayArea)); 3591f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3592f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayers(display, &layers, layerCnt)); 3593f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall Hwc2TestLayers testLayers(layers, Hwc2TestCoverage::Basic, 3594f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall displayArea); 3595f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3596f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall if (!testLayers.optimizeLayouts()) 3597f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall continue; 3598f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3599f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall Hwc2TestClientTarget testClientTarget; 3600f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3601f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall do { 3602f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall std::set<hwc2_layer_t> clientLayers; 3603f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall std::set<hwc2_layer_t> clearLayers; 3604f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall uint32_t numTypes, numRequests; 3605f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall bool hasChanges, skip; 3606f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall bool flipClientTarget; 3607f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall buffer_handle_t handle; 3608f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall int32_t acquireFence; 3609f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3610f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperties(display, layers, 3611f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall &testLayers, &skip)); 3612f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall if (skip) 3613f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall continue; 3614f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3615f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(validateDisplay(display, &numTypes, 3616f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall &numRequests, &hasChanges)); 3617f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall if (hasChanges) 3618f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall EXPECT_LE(numTypes, layers.size()) 3619f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall << "wrong number of requests"; 3620f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3621f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(handleCompositionChanges(display, 3622f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall testLayers, layers, numTypes, &clientLayers)); 3623f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(handleRequests(display, layers, 3624f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall numRequests, &clearLayers, &flipClientTarget)); 3625f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_EQ(testClientTarget.getBuffer(testLayers, clientLayers, 3626f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall clearLayers, flipClientTarget, displayArea, &handle, 3627f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall &acquireFence), 0); 3628f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall EXPECT_NO_FATAL_FAILURE(setClientTarget(display, handle, 3629f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall acquireFence, dataspace, damage)); 3630f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3631f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall if (acquireFence >= 0) 3632f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall close(acquireFence); 3633f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3634f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } while (testLayers.advance()); 3635f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3636f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayers(display, std::move(layers))); 3637f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } 3638f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3639f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 3640f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } 3641f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall} 3642f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3643f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set a client target for a bad display. */ 3644f18cfb0a780c69f12439457ccc3f5272db767fddMarissa WallTEST_F(Hwc2Test, SET_CLIENT_TARGET_bad_display) 3645f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall{ 3646f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall hwc2_display_t display; 3647f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall std::vector<hwc2_layer_t> layers; 3648f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const Area displayArea = {0, 0}; 3649f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall Hwc2TestLayers testLayers(layers, Hwc2TestCoverage::Default, displayArea); 3650f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall std::set<hwc2_layer_t> clientLayers; 3651f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall std::set<hwc2_layer_t> flipClientTargetLayers; 3652f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall bool flipClientTarget = true; 3653f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const android_dataspace_t dataspace = HAL_DATASPACE_UNKNOWN; 3654f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const hwc_region_t damage = { }; 3655f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall buffer_handle_t handle; 3656f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall int32_t acquireFence; 3657f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 3658f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3659f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 3660f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3661f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall Hwc2TestClientTarget testClientTarget; 3662f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3663f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_EQ(testClientTarget.getBuffer(testLayers, clientLayers, 3664f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall flipClientTargetLayers, flipClientTarget, displayArea, &handle, 3665f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall &acquireFence), 0); 3666f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3667f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall EXPECT_NO_FATAL_FAILURE(setClientTarget(display, handle, acquireFence, 3668f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall dataspace, damage, &err)); 3669f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3670f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall if (acquireFence >= 0) 3671f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall close(acquireFence); 3672f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3673f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 3674f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall} 3675563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3676563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 1 default layer. */ 3677563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_default_1) 3678563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3679563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 1; 3680563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3681563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions; 3682563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = false; 3683563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3684563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3685563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3686563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3687563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3688563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 2 default layers. */ 3689563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_default_2) 3690563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3691563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 2; 3692563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3693563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions; 3694563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = false; 3695563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3696563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3697563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3698563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3699563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3700563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 3 default layers. */ 3701563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_default_3) 3702563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3703563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 3; 3704563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3705563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions; 3706563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = false; 3707563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3708563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3709563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3710563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3711563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3712563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 4 default layers. */ 3713563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_default_4) 3714563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3715563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 4; 3716563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3717563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions; 3718563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = false; 3719563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3720563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3721563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3722563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3723563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3724563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 5 default layers. */ 3725563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_default_5) 3726563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3727563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 5; 3728563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3729563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions; 3730563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = false; 3731563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3732563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3733563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3734563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3735563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3736563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 6 default layers. */ 3737563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_default_6) 3738563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3739563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 6; 3740563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3741563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions; 3742563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = false; 3743563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3744563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3745563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3746563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3747563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3748563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 1 layer with complete coverage of 3749563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * blend mode. */ 3750563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_blend_mode_1) 3751563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3752563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 1; 3753563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3754563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions = 3755563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {{Hwc2TestPropertyName::BlendMode, Hwc2TestCoverage::Complete}, 3756563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {Hwc2TestPropertyName::Transform, Hwc2TestCoverage::Basic}, 3757563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {Hwc2TestPropertyName::PlaneAlpha, Hwc2TestCoverage::Basic}}; 3758563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = false; 3759563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3760563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3761563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3762563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3763563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3764563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 2 layers with complete coverage of 3765563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * blend mode. */ 3766563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_blend_mode_2) 3767563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3768563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 2; 3769563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3770563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions = 3771563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {{Hwc2TestPropertyName::BlendMode, Hwc2TestCoverage::Complete}, 3772563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {Hwc2TestPropertyName::PlaneAlpha, Hwc2TestCoverage::Basic}}; 3773563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = false; 3774563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3775563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3776563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3777563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3778563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3779563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 1 layer with complete coverage of 3780563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * buffer. */ 3781563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_buffer_1) 3782563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3783563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 1; 3784563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3785563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions = 3786563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {{Hwc2TestPropertyName::BufferArea, Hwc2TestCoverage::Complete}}; 3787563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = true; 3788563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3789563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3790563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3791563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3792563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3793563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 1 layer with complete coverage of 3794563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * color. */ 3795563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_color_1) 3796563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3797563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 1; 3798563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3799563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions = 3800563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {{Hwc2TestPropertyName::Composition, Hwc2TestCoverage::Complete}, 3801563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {Hwc2TestPropertyName::Color, Hwc2TestCoverage::Complete}}; 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 2 layers with complete coverage of 3809563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * color. */ 3810563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_color_2) 3811563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3812563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 2; 3813563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3814563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions = 3815563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {{Hwc2TestPropertyName::Composition, Hwc2TestCoverage::Complete}, 3816563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {Hwc2TestPropertyName::BlendMode, Hwc2TestCoverage::Basic}, 3817563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {Hwc2TestPropertyName::PlaneAlpha, Hwc2TestCoverage::Basic}, 3818563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {Hwc2TestPropertyName::Color, Hwc2TestCoverage::Basic}}; 3819563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = true; 3820563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3821563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3822563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3823563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3824563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3825563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 1 layer with complete coverage of 3826563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * composition. */ 3827563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_composition_1) 3828563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3829563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 1; 3830563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3831563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions = 3832563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {{Hwc2TestPropertyName::Composition, Hwc2TestCoverage::Complete}}; 3833563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = true; 3834563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3835563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3836563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3837563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3838563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3839563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 1 layer with complete coverage of 3840563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * cursor. */ 3841563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_cursor_1) 3842563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3843563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 1; 3844563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3845563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions = 3846563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {{Hwc2TestPropertyName::Composition, Hwc2TestCoverage::Complete}, 3847563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {Hwc2TestPropertyName::CursorPosition, Hwc2TestCoverage::Complete}}; 3848563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = true; 3849563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3850563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3851563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3852563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3853563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3854563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 2 layers with complete coverage of 3855563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * cursor. */ 3856563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_cursor_2) 3857563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3858563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 2; 3859563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3860563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions = 3861563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {{Hwc2TestPropertyName::Composition, Hwc2TestCoverage::Complete}, 3862563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {Hwc2TestPropertyName::CursorPosition, Hwc2TestCoverage::Complete}, 3863563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {Hwc2TestPropertyName::DisplayFrame, Hwc2TestCoverage::Basic}}; 3864563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = true; 3865563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3866563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3867563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3868563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3869563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3870563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 1 layer with complete coverage of 3871563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * dataspace. */ 3872563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_dataspace_1) 3873563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3874563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 1; 3875563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3876563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions = 3877563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {{Hwc2TestPropertyName::Dataspace, Hwc2TestCoverage::Complete}}; 3878563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = true; 3879563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3880563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3881563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3882563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3883563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3884563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 1 layer with complete coverage of 3885563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * display frame. */ 3886563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_display_frame_1) 3887563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3888563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 1; 3889563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3890563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions = 3891563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {{Hwc2TestPropertyName::DisplayFrame, Hwc2TestCoverage::Complete}}; 3892563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = true; 3893563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3894563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3895563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3896563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3897563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3898563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 2 layers with complete coverage of 3899563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * display frame. */ 3900563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_display_frame_2) 3901563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3902563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 2; 3903563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3904563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions = 3905563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {{Hwc2TestPropertyName::DisplayFrame, Hwc2TestCoverage::Complete}}; 3906563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = true; 3907563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3908563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3909563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3910563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3911563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3912563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 3 layers with complete coverage of 3913563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * display frame. */ 3914563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_display_frame_3) 3915563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3916563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 3; 3917563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3918563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions = 3919563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {{Hwc2TestPropertyName::DisplayFrame, Hwc2TestCoverage::Complete}}; 3920563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = true; 3921563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3922563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3923563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3924563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3925563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3926563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 4 layers with complete coverage of 3927563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * display frame. */ 3928563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_display_frame_4) 3929563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3930563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 4; 3931563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3932563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions = 3933563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {{Hwc2TestPropertyName::DisplayFrame, Hwc2TestCoverage::Complete}}; 3934563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = true; 3935563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3936563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3937563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3938563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3939563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3940563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 1 layer with complete coverage of 3941563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * plane alpha. */ 3942563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_plane_alpha_1) 3943563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3944563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 1; 3945563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3946563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions = 3947563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {{Hwc2TestPropertyName::BlendMode, Hwc2TestCoverage::Basic}, 3948563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {Hwc2TestPropertyName::PlaneAlpha, Hwc2TestCoverage::Complete}}; 3949563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = false; 3950563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3951563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3952563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3953563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3954563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3955563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 2 layers with complete coverage of 3956563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * plane alpha. */ 3957563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_plane_alpha_2) 3958563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3959563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 2; 3960563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3961563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions = 3962563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {{Hwc2TestPropertyName::BlendMode, Hwc2TestCoverage::Basic}, 3963563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {Hwc2TestPropertyName::PlaneAlpha, Hwc2TestCoverage::Complete}}; 3964563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = false; 3965563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3966563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3967563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3968563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3969563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3970563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 1 layer with complete coverage of 3971563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * source crop. */ 3972563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_source_crop_1) 3973563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3974563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 1; 3975563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3976563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions = 3977563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {{Hwc2TestPropertyName::DisplayFrame, Hwc2TestCoverage::Complete}, 3978563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {Hwc2TestPropertyName::SourceCrop, Hwc2TestCoverage::Complete}}; 3979563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = true; 3980563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3981563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3982563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3983563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3984563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3985563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 2 layers with complete coverage of 3986563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * source crop. */ 3987563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_source_crop_2) 3988563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3989563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 2; 3990563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3991563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions = 3992563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {{Hwc2TestPropertyName::DisplayFrame, Hwc2TestCoverage::Complete}, 3993563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {Hwc2TestPropertyName::SourceCrop, Hwc2TestCoverage::Complete}}; 3994563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = true; 3995563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3996563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3997563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3998563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3999563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 4000563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 4001563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 1 layer with complete coverage of 4002563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * surface damage. */ 4003563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_surface_damage_1) 4004563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 4005563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 1; 4006563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 4007563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions = 4008563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {{Hwc2TestPropertyName::SurfaceDamage, Hwc2TestCoverage::Complete}}; 4009563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = true; 4010563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 4011563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 4012563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 4013563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 4014563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 4015563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 1 layer with complete coverage of 4016563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * transform. */ 4017563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_transform_1) 4018563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 4019563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 1; 4020563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 4021563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions = 4022563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {{Hwc2TestPropertyName::Transform, Hwc2TestCoverage::Complete}}; 4023563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = true; 4024563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 4025563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 4026563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 4027563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 4028563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 4029563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 2 layers with complete coverage of 4030563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * transform. */ 4031563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_transform_2) 4032563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 4033563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 2; 4034563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 4035563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions = 4036563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {{Hwc2TestPropertyName::Transform, Hwc2TestCoverage::Complete}, 4037563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {Hwc2TestPropertyName::DisplayFrame, Hwc2TestCoverage::Basic}}; 4038563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = true; 4039563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 4040563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 4041563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 4042563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 4043563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 4044563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 1 layer with complete coverage of 4045563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * basic. */ 4046563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_basic_1) 4047563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 4048563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 1; 4049563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Basic; 4050563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions; 4051563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = true; 4052563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 4053563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 4054563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 4055563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 4056563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 4057563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 cannot present a bad display. */ 4058563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_bad_display) 4059563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 4060563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall hwc2_display_t display; 4061563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall int32_t presentFence; 4062563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 4063563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 4064563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 4065563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 4066563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplay(display, &presentFence, &err)); 4067563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 4068563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 4069563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 4070563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 cannot present an unvalidated display. */ 4071563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_not_validated) 4072563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 4073563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(displayLayers(Hwc2TestCoverage::Default, 1, 4074563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, 4075563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const std::vector<hwc2_layer_t>& /*layers*/, 4076563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestLayers* /*testLayers*/) { 4077563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 4078563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall int32_t presentFence; 4079563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 4080563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 4081563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setPowerMode(display, 4082563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall HWC2_POWER_MODE_ON)); 4083563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(test->enableVsync(display)); 4084563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 4085563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(test->waitForVsync()); 4086563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 4087563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(test->presentDisplay(display, 4088563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall &presentFence, &err)); 4089563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall EXPECT_EQ(err, HWC2_ERROR_NOT_VALIDATED) 4090563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall << "returned wrong error code"; 4091563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 4092563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(test->disableVsync(display)); 4093563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setPowerMode(display, 4094563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall HWC2_POWER_MODE_OFF)); 4095563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall } 4096563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall )); 4097563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 4098563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 4099563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 cannot get release fences from a bad display. */ 4100563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, GET_RELEASE_FENCES_bad_display) 4101563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 4102563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall hwc2_display_t display; 4103563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::vector<hwc2_layer_t> layers; 4104563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::vector<int32_t> fences; 4105563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 4106563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 4107563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 4108563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 4109563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(getReleaseFences(display, &layers, &fences, &err)); 4110563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 4111563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 411235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 411335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wallstatic const std::array<android_color_mode, 9> androidColorModes = {{ 411435040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall HAL_COLOR_MODE_NATIVE, 411535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall HAL_COLOR_MODE_STANDARD_BT601_625, 411635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall HAL_COLOR_MODE_STANDARD_BT601_625_UNADJUSTED, 411735040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall HAL_COLOR_MODE_STANDARD_BT601_525, 411835040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall HAL_COLOR_MODE_STANDARD_BT601_525_UNADJUSTED, 411935040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall HAL_COLOR_MODE_STANDARD_BT709, 412035040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall HAL_COLOR_MODE_DCI_P3, 412135040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall HAL_COLOR_MODE_SRGB, 412235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall HAL_COLOR_MODE_ADOBE_RGB, 412335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall}}; 412435040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 412535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall/* TESTCASE: Tests that the HWC2 can get the color modes for a display. The 412635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall * display must support HAL_COLOR_MODE_NATIVE */ 412735040c559d26d00d6123c894cfc9573b0a5aa860Marissa WallTEST_F(Hwc2Test, GET_COLOR_MODES) 412835040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall{ 412935040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall ASSERT_NO_FATAL_FAILURE(setActiveDisplayConfig( 413035040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall [] (Hwc2Test* test, hwc2_display_t display) { 413135040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 413235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall std::vector<android_color_mode_t> colorModes; 413335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 413435040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall ASSERT_NO_FATAL_FAILURE(test->getColorModes(display, 413535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall &colorModes)); 413635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 413735040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall EXPECT_NE(std::count(colorModes.begin(), colorModes.end(), 413835040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall HAL_COLOR_MODE_NATIVE), 0) << "all displays" 413935040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall " must support HAL_COLOR_MODE_NATIVE"; 414035040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall } 414135040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall )); 414235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall} 414335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 414435040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall/* TESTCASE: Tests that the HWC2 cannot get color modes from a bad display. */ 414535040c559d26d00d6123c894cfc9573b0a5aa860Marissa WallTEST_F(Hwc2Test, GET_COLOR_MODES_bad_display) 414635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall{ 414735040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall hwc2_display_t display; 414835040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall std::vector<android_color_mode_t> colorModes; 414935040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 415035040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 415135040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 415235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 415335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall ASSERT_NO_FATAL_FAILURE(getColorModes(display, &colorModes, &err)); 415435040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 415535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall} 415635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 415735040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall/* TESTCASE: Tests that the HWC2 can set the required color mode on a display. */ 415835040c559d26d00d6123c894cfc9573b0a5aa860Marissa WallTEST_F(Hwc2Test, SET_COLOR_MODES) 415935040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall{ 416035040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall ASSERT_NO_FATAL_FAILURE(setActiveDisplayConfig( 416135040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall [] (Hwc2Test* test, hwc2_display_t display) { 416235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 416335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall const android_color_mode_t colorMode = HAL_COLOR_MODE_NATIVE; 416435040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 416535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setColorMode(display, colorMode)); 416635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall } 416735040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall )); 416835040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall} 416935040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 417035040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set a color mode on a bad display. */ 417135040c559d26d00d6123c894cfc9573b0a5aa860Marissa WallTEST_F(Hwc2Test, SET_COLOR_MODES_bad_display) 417235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall{ 417335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall hwc2_display_t display; 417435040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall const android_color_mode_t colorMode = HAL_COLOR_MODE_NATIVE; 417535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 417635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 417735040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 417835040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 417935040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall ASSERT_NO_FATAL_FAILURE(setColorMode(display, colorMode, &err)); 418035040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 418135040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall} 418235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 418335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set an invalid color mode. */ 418435040c559d26d00d6123c894cfc9573b0a5aa860Marissa WallTEST_F(Hwc2Test, SET_COLOR_MODES_bad_parameter) 418535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall{ 418635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall ASSERT_NO_FATAL_FAILURE(setActiveDisplayConfig( 418735040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall [] (Hwc2Test* test, hwc2_display_t display) { 418835040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 418935040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall const android_color_mode_t colorMode = 419035040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall static_cast<android_color_mode_t>(-1); 419135040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 419235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 419335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall ASSERT_NO_FATAL_FAILURE(test->setColorMode(display, colorMode, 419435040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall &err)); 419535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_PARAMETER) 419635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall << "returned wrong error code"; 419735040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall } 419835040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall )); 419935040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall} 420035040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 420135040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall/* TESTCASE: Tests that the HWC2 either supports or returns error unsupported 420235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall * for all valid color modes. */ 420335040c559d26d00d6123c894cfc9573b0a5aa860Marissa WallTEST_F(Hwc2Test, SET_COLOR_MODES_unsupported) 420435040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall{ 420535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall ASSERT_NO_FATAL_FAILURE(setActiveDisplayConfig( 420635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall [] (Hwc2Test* test, hwc2_display_t display) { 420735040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 420835040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall for (auto colorMode : androidColorModes) { 420935040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 421035040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 421135040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall ASSERT_NO_FATAL_FAILURE(test->setColorMode(display, 421235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall colorMode, &err)); 421335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 421435040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall EXPECT_TRUE(err == HWC2_ERROR_NONE 421535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall || err == HWC2_ERROR_UNSUPPORTED) 421635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall << "returned wrong error code"; 421735040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall } 421835040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall } 421935040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall )); 422035040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall} 422135040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 422235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall/* TESTCASE: Tests that the HWC2 gets the HDR capabilities for a display and 422335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall * test if they are valid. */ 422435040c559d26d00d6123c894cfc9573b0a5aa860Marissa WallTEST_F(Hwc2Test, GET_HDR_CAPABILITIES) 422535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall{ 422635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall ASSERT_NO_FATAL_FAILURE(setActiveDisplayConfig( 422735040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall [] (Hwc2Test* test, hwc2_display_t display) { 422835040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 422935040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall std::vector<android_hdr_t> hdrCapabilities; 423035040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall float maxLuminance, maxAverageLuminance, minLuminance; 423135040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 423235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall EXPECT_NO_FATAL_FAILURE(test->getHdrCapabilities(display, 423335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall &hdrCapabilities, &maxLuminance, &maxAverageLuminance, 423435040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall &minLuminance)); 423535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 423635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall if (hdrCapabilities.empty()) 423735040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall return; 423835040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 423935040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall EXPECT_GE(maxLuminance, maxAverageLuminance); 424035040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall EXPECT_GE(maxAverageLuminance, minLuminance); 424135040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall } 424235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall )); 424335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall} 424435040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 424535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall/* TESTCASE: Tests that the HWC2 cannot get hdr capabilities from a bad display */ 424635040c559d26d00d6123c894cfc9573b0a5aa860Marissa WallTEST_F(Hwc2Test, GET_HDR_CAPABILITIES_bad_display) 424735040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall{ 424835040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall hwc2_display_t display; 424935040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall std::vector<android_hdr_t> hdrCapabilities; 425035040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall float maxLuminance, maxAverageLuminance, minLuminance; 425135040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 425235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 425335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 425435040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 425535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall ASSERT_NO_FATAL_FAILURE(getHdrCapabilities(display, &hdrCapabilities, 425635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall &maxLuminance, &maxAverageLuminance, &minLuminance, &err)); 425735040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 425835040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall} 425935040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 426035040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wallstatic const std::array<float, 16> identityMatrix = {{ 426135040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 1.0, 0.0, 0.0, 0.0, 426235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 0.0, 1.0, 0.0, 0.0, 426335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 0.0, 0.0, 1.0, 0.0, 426435040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 0.0, 0.0, 0.0, 1.0, 426535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall}}; 426635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 426735040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall/* Values for the color transform matrices were precomputed using the source code 426835040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall * in surfaceflinger/Effects/Daltonizer.cpp. */ 426935040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 427035040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wallstatic const std::array<const std::array<float, 16>, 5> exampleMatrices = {{ 427135040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall identityMatrix, 427235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall /* Converts RGB color to the XYZ space */ 427335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall {{ 0.4124, 0.2126, 0.0193, 0, 427435040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 0.3576, 0.7152, 0.1192, 0, 427535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 0.1805, 0.0722, 0.9505, 0, 427635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 0 , 0 , 0 , 1 }}, 427735040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall /* Protanomaly */ 427835040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall {{ 0.068493, 0.931506, 0, 0, 427935040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 0.068493, 0.931507, 0, 0, 428035040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 0.013626, -0.013626, 1, 0, 428135040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 0, 0, 0, 1 }}, 428235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall /* Deuteranomaly */ 428335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall {{ 0.288299, 0.711701, 0, 0, 428435040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 0.052709, 0.947291, 0, 0, 428535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall -0.257912, 0.257912, 1, 0, 428635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 0, 0, 0, 1 }}, 428735040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall /* Tritanomaly */ 428835040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall {{ 1, -0.805712, 0.805712, 0, 428935040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 0, 0.378838, 0.621162, 0, 429035040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 0, 0.104823, 0.895177, 0, 429135040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 0, 0, 0, 1 }}, 429235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall}}; 429335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 429435040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall/* TESTCASE: Tests that the HWC2 can set the identity color transform */ 429535040c559d26d00d6123c894cfc9573b0a5aa860Marissa WallTEST_F(Hwc2Test, SET_COLOR_TRANSFORM) 429635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall{ 429735040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall ASSERT_NO_FATAL_FAILURE(setActiveDisplayConfig( 429835040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall [] (Hwc2Test* test, hwc2_display_t display) { 429935040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 430035040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setColorTransform(display, 430135040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall identityMatrix, HAL_COLOR_TRANSFORM_IDENTITY)); 430235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall } 430335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall )); 430435040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall} 430535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 430635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set the color transform for a bad 430735040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall * display. */ 430835040c559d26d00d6123c894cfc9573b0a5aa860Marissa WallTEST_F(Hwc2Test, SET_COLOR_TRANSFORM_bad_display) 430935040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall{ 431035040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall hwc2_display_t display; 431135040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 431235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 431335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 431435040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 431535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall ASSERT_NO_FATAL_FAILURE(setColorTransform(display, identityMatrix, 431635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall HAL_COLOR_TRANSFORM_IDENTITY, &err)); 431735040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 431835040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall} 431935040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 432035040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set an invalid color transform. */ 432135040c559d26d00d6123c894cfc9573b0a5aa860Marissa WallTEST_F(Hwc2Test, SET_COLOR_TRANSFORM_bad_parameter) 432235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall{ 432335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall ASSERT_NO_FATAL_FAILURE(setActiveDisplayConfig( 432435040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall [] (Hwc2Test* test, hwc2_display_t display) { 432535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 432635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall const android_color_transform_t hint = 432735040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall static_cast<android_color_transform_t>(-1); 432835040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 432935040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 433035040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall ASSERT_NO_FATAL_FAILURE(test->setColorTransform(display, 433135040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall identityMatrix, hint, &err)); 433235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_PARAMETER) 433335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall << "returned wrong error code"; 433435040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall } 433535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall )); 433635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall} 433735040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 433835040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall/* TESTCASE: Tests that the HWC2 can set an arbitrary color matrix. */ 433935040c559d26d00d6123c894cfc9573b0a5aa860Marissa WallTEST_F(Hwc2Test, SET_COLOR_TRANSFORM_arbitrary_matrix) 434035040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall{ 434135040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall ASSERT_NO_FATAL_FAILURE(setActiveDisplayConfig( 434235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall [] (Hwc2Test* test, hwc2_display_t display) { 434335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 434435040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall const android_color_transform_t hint = 434535040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall HAL_COLOR_TRANSFORM_ARBITRARY_MATRIX; 434635040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall 434735040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall for (const std::array<float, 16>& matrix : exampleMatrices) { 434835040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setColorTransform(display, 434935040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall matrix, hint)); 435035040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall } 435135040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall } 435235040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall )); 435335040c559d26d00d6123c894cfc9573b0a5aa860Marissa Wall} 4354bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4355bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall/* TESTCASE: Tests that the HWC2 create an destory virtual displays. */ 4356bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa WallTEST_F(Hwc2Test, CREATE_DESTROY_VIRTUAL_DISPLAY) 4357bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall{ 4358bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall ASSERT_NO_FATAL_FAILURE(createVirtualDisplay(Hwc2TestCoverage::Complete, 4359bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall [] (Hwc2Test* /*test*/, hwc2_display_t /*display*/, 4360bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall Hwc2TestVirtualDisplay* /*testVirtualDisplay*/) { })); 4361bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall} 4362bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4363bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall/* TESTCASE: Tests that the HWC2 can create and destroy multiple virtual 4364bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall * displays. */ 4365bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa WallTEST_F(Hwc2Test, CREATE_DESTROY_VIRTUAL_DISPLAY_multiple) 4366bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall{ 4367bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall Hwc2TestVirtualDisplay testVirtualDisplay(Hwc2TestCoverage::Complete); 4368bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall std::vector<hwc2_display_t> displays; 4369bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4370bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall do { 4371bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall const UnsignedArea& dimension = 4372bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall testVirtualDisplay.getDisplayDimension(); 4373bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall android_pixel_format_t desiredFormat = HAL_PIXEL_FORMAT_RGBA_8888; 4374bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall hwc2_display_t display; 4375bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 4376bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4377bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall ASSERT_NO_FATAL_FAILURE(createVirtualDisplay(dimension.width, 4378bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall dimension.height, &desiredFormat, &display, &err)); 4379bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4380bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall EXPECT_TRUE(err == HWC2_ERROR_NONE || err == HWC2_ERROR_NO_RESOURCES 4381bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall || err == HWC2_ERROR_UNSUPPORTED) << "returned wrong error code"; 4382bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall EXPECT_GE(desiredFormat, 0) << "invalid format"; 4383bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4384bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall if (err == HWC2_ERROR_NONE) 4385bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall displays.push_back(display); 4386bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4387bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall } while (testVirtualDisplay.advance()); 4388bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4389bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall for (hwc2_display_t display : displays) { 4390bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall EXPECT_NO_FATAL_FAILURE(destroyVirtualDisplay(display)); 4391bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall } 4392bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall} 4393bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4394bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall/* TESTCASE: Tests that the HWC2 cannot destroy a bad virtual displays. */ 4395bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa WallTEST_F(Hwc2Test, DESTROY_VIRTUAL_DISPLAY_bad_display) 4396bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall{ 4397bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall hwc2_display_t display; 4398bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 4399bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4400bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 4401bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4402bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyVirtualDisplay(display, &err)); 4403bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 4404bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall} 4405bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4406bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall/* TESTCASE: Tests that the HWC2 cannot destroy a physical display. */ 4407bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa WallTEST_F(Hwc2Test, DESTROY_VIRTUAL_DISPLAY_bad_parameter) 4408bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall{ 4409bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall hwc2_display_t display = HWC_DISPLAY_PRIMARY; 4410bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 4411bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4412bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyVirtualDisplay(display, &err)); 4413bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_PARAMETER) << "returned wrong error code"; 4414bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall} 4415bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4416bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall/* TESTCASE: Tests that the HWC2 can get the max virtual display count. */ 4417bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa WallTEST_F(Hwc2Test, GET_MAX_VIRTUAL_DISPLAY_COUNT) 4418bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall{ 4419bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall uint32_t maxCnt; 4420bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4421bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall ASSERT_NO_FATAL_FAILURE(getMaxVirtualDisplayCount(&maxCnt)); 4422bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall} 4423bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4424bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall/* TESTCASE: Tests that the HWC2 returns the same max virtual display count for 4425bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall * each call. */ 4426bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa WallTEST_F(Hwc2Test, GET_MAX_VIRTUAL_DISPLAY_COUNT_duplicate) 4427bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall{ 4428bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall uint32_t maxCnt1, maxCnt2; 4429bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4430bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall ASSERT_NO_FATAL_FAILURE(getMaxVirtualDisplayCount(&maxCnt1)); 4431bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall ASSERT_NO_FATAL_FAILURE(getMaxVirtualDisplayCount(&maxCnt2)); 4432bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4433bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall EXPECT_EQ(maxCnt1, maxCnt2) << "returned two different max virtual display" 4434bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall " counts"; 4435bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall} 4436bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4437bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall/* TESTCASE: Tests that the HWC2 can create the max number of virtual displays 4438bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall * that it reports. */ 4439bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa WallTEST_F(Hwc2Test, GET_MAX_VIRTUAL_DISPLAY_COUNT_create_max) 4440bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall{ 4441bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall std::vector<hwc2_display_t> displays; 4442bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall uint32_t maxCnt; 4443bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4444bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall ASSERT_NO_FATAL_FAILURE(getMaxVirtualDisplayCount(&maxCnt)); 4445bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4446bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall while (displays.size() < maxCnt) { 4447bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall uint32_t width = 1920, height = 1080; 4448bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall android_pixel_format_t desiredFormat = HAL_PIXEL_FORMAT_RGBA_8888; 4449bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall hwc2_display_t display; 4450bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 4451bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4452bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall ASSERT_NO_FATAL_FAILURE(createVirtualDisplay(width, height, 4453bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall &desiredFormat, &display, &err)); 4454bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4455bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall EXPECT_TRUE(err == HWC2_ERROR_NONE || err == HWC2_ERROR_UNSUPPORTED) 4456bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall << "returned wrong error code"; 4457bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall if (err != HWC2_ERROR_NONE) 4458bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall break; 4459bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4460bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall displays.push_back(display); 4461bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall } 4462bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4463bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall for (hwc2_display_t display : displays) { 4464bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall EXPECT_NO_FATAL_FAILURE(destroyVirtualDisplay(display)); 4465bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall } 4466bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall} 4467bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4468bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall/* TESTCASE: Tests that the HWC2 can set an output buffer for a virtual 4469bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall * display. */ 4470bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa WallTEST_F(Hwc2Test, SET_OUTPUT_BUFFER) 4471bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall{ 4472bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall ASSERT_NO_FATAL_FAILURE(createVirtualDisplay(Hwc2TestCoverage::Complete, 4473bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall [] (Hwc2Test* test, hwc2_display_t display, 4474bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall Hwc2TestVirtualDisplay* testVirtualDisplay) { 4475bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4476bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall buffer_handle_t handle; 4477bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall android::base::unique_fd acquireFence; 4478bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4479bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall if (testVirtualDisplay->getBuffer(&handle, &acquireFence) >= 0) 4480bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setOutputBuffer(display, 4481bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall handle, acquireFence)); 4482bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall })); 4483bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall} 4484bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4485bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set an output buffer for a bad display */ 4486bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa WallTEST_F(Hwc2Test, SET_OUTPUT_BUFFER_bad_display) 4487bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall{ 4488bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall ASSERT_NO_FATAL_FAILURE(createVirtualDisplay(Hwc2TestCoverage::Default, 4489bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall [] (Hwc2Test* test, hwc2_display_t /*display*/, 4490bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall Hwc2TestVirtualDisplay* testVirtualDisplay) { 4491bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4492bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall hwc2_display_t badDisplay; 4493bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall buffer_handle_t handle; 4494bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall android::base::unique_fd acquireFence; 4495bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 4496bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4497bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall ASSERT_NO_FATAL_FAILURE(test->getBadDisplay(&badDisplay)); 4498bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4499bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall if (testVirtualDisplay->getBuffer(&handle, &acquireFence) < 0) 4500bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall return; 4501bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4502bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall ASSERT_NO_FATAL_FAILURE(test->setOutputBuffer(badDisplay, 4503bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall handle, acquireFence, &err)); 4504bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall EXPECT_TRUE(err == HWC2_ERROR_BAD_DISPLAY) 4505bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall << "returned wrong error code"; 4506bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall })); 4507bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall} 4508bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4509bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set an invalid output buffer. */ 4510bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa WallTEST_F(Hwc2Test, SET_OUTPUT_BUFFER_bad_parameter) 4511bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall{ 4512bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall ASSERT_NO_FATAL_FAILURE(createVirtualDisplay(Hwc2TestCoverage::Default, 4513bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall [] (Hwc2Test* test, hwc2_display_t display, 4514bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall Hwc2TestVirtualDisplay* /*testVirtualDisplay*/) { 4515bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4516bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall const buffer_handle_t handle = nullptr; 4517bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall uint32_t releaseFence = -1; 4518bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 4519bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4520bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall ASSERT_NO_FATAL_FAILURE(test->setOutputBuffer(display, handle, 4521bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall releaseFence, &err)); 4522bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_PARAMETER) 4523bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall << "returned wrong error code"; 4524bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall })); 4525bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall} 4526bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4527bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set an output buffer for non virtual 4528bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall * display */ 4529bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa WallTEST_F(Hwc2Test, SET_OUTPUT_BUFFER_unsupported) 4530bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall{ 4531bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall for (auto display : mDisplays) { 4532bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall Hwc2TestVirtualDisplay testVirtualDisplay(Hwc2TestCoverage::Complete); 4533bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4534bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall do { 4535bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall buffer_handle_t handle; 4536bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall android::base::unique_fd acquireFence; 4537bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 4538bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4539bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall if (testVirtualDisplay.getBuffer(&handle, &acquireFence) < 0) 4540bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall continue; 4541bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4542bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall ASSERT_NO_FATAL_FAILURE(setOutputBuffer(display, handle, 4543bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall acquireFence, &err)); 4544bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall EXPECT_EQ(err, HWC2_ERROR_UNSUPPORTED) << "returned wrong error code"; 4545bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 4546bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall } while (testVirtualDisplay.advance()); 4547bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall } 4548bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall} 4549ae7d324fcad6d561bc0ee460f296ff2ad8306b00Marissa Wall 4550ae7d324fcad6d561bc0ee460f296ff2ad8306b00Marissa Wall/* TESTCASE: Tests that the HWC2 can dump debug information. */ 4551ae7d324fcad6d561bc0ee460f296ff2ad8306b00Marissa WallTEST_F(Hwc2Test, DUMP) 4552ae7d324fcad6d561bc0ee460f296ff2ad8306b00Marissa Wall{ 4553ae7d324fcad6d561bc0ee460f296ff2ad8306b00Marissa Wall std::string buffer; 4554ae7d324fcad6d561bc0ee460f296ff2ad8306b00Marissa Wall 4555ae7d324fcad6d561bc0ee460f296ff2ad8306b00Marissa Wall ASSERT_NO_FATAL_FAILURE(dump(&buffer)); 4556ae7d324fcad6d561bc0ee460f296ff2ad8306b00Marissa Wall} 4557