Hwc2Test.cpp revision 5a240aaf0e3a1dd52be6a8d0811ec727369a210d
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> 194d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall#include <gtest/gtest.h> 204d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall#include <dlfcn.h> 215a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall#include <android-base/unique_fd.h> 224d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall#include <hardware/hardware.h> 234d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 244d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall#define HWC2_INCLUDE_STRINGIFICATION 254d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall#define HWC2_USE_CPP11 264d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall#include <hardware/hwcomposer2.h> 274d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall#undef HWC2_INCLUDE_STRINGIFICATION 284d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall#undef HWC2_USE_CPP11 294d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 306bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall#include "Hwc2TestLayer.h" 31273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall#include "Hwc2TestLayers.h" 326bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 33cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wallvoid hwc2TestHotplugCallback(hwc2_callback_data_t callbackData, 34cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2_display_t display, int32_t connected); 35572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wallvoid hwc2TestVsyncCallback(hwc2_callback_data_t callbackData, 36572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_display_t display, int64_t timestamp); 37cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 384d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wallclass Hwc2Test : public testing::Test { 394d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wallpublic: 404d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 414d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall virtual void SetUp() 424d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall { 434d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall hw_module_t const* hwc2Module; 444d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 454d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall int err = hw_get_module(HWC_HARDWARE_MODULE_ID, &hwc2Module); 464d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall ASSERT_GE(err, 0) << "failed to get hwc hardware module: " 474d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall << strerror(-err); 484d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 494d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall /* The following method will fail if you have not run 504d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * "adb shell stop" */ 514d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall err = hwc2_open(hwc2Module, &mHwc2Device); 524d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall ASSERT_GE(err, 0) << "failed to open hwc hardware module: " 534d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall << strerror(-err); 54cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 55cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall populateDisplays(); 564d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall } 574d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 584d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall virtual void TearDown() 594d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall { 601db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 611db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (auto itr = mLayers.begin(); itr != mLayers.end();) { 621db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_display_t display = itr->first; 631db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_layer_t layer = itr->second; 641db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall itr++; 651db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall /* Destroys and removes the layer from mLayers */ 661db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall destroyLayer(display, layer); 671db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 681db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 6903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall for (auto itr = mActiveDisplays.begin(); itr != mActiveDisplays.end();) { 7003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_display_t display = *itr; 7103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall itr++; 7203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall /* Sets power mode to off and removes the display from 7303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall * mActiveDisplays */ 7403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall setPowerMode(display, HWC2_POWER_MODE_OFF); 7503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 7603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 774d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall if (mHwc2Device) 784d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall hwc2_close(mHwc2Device); 794d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall } 804d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 81a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall void registerCallback(hwc2_callback_descriptor_t descriptor, 82a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall hwc2_callback_data_t callbackData, hwc2_function_pointer_t pointer, 83a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall hwc2_error_t* outErr = nullptr) 84a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall { 85a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_REGISTER_CALLBACK>( 86a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall getFunction(HWC2_FUNCTION_REGISTER_CALLBACK)); 87a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 88a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 89a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, descriptor, 90a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall callbackData, pointer)); 91a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall if (outErr) { 92a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall *outErr = err; 93a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall } else { 94a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to register callback"; 95a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall } 96a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall } 97a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 98cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall void getDisplayType(hwc2_display_t display, hwc2_display_type_t* outType, 99cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2_error_t* outErr = nullptr) 100cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall { 101cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_GET_DISPLAY_TYPE>( 102cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall getFunction(HWC2_FUNCTION_GET_DISPLAY_TYPE)); 103cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 104cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 105cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 106cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall reinterpret_cast<int32_t*>(outType))); 107cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall if (outErr) { 108cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall *outErr = err; 109cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } else { 110cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to get display type"; 111cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 112cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 113cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 114cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall /* If the populateDisplays function is still receiving displays and the 115cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall * display is connected, the display handle is stored in mDisplays. */ 116cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall void hotplugCallback(hwc2_display_t display, int32_t connected) 117cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall { 118cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::lock_guard<std::mutex> lock(mHotplugMutex); 119cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 120cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall if (mHotplugStatus != Hwc2TestHotplugStatus::Receiving) 121cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall return; 122cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 123cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall if (connected == HWC2_CONNECTION_CONNECTED) 124cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall mDisplays.insert(display); 125cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 126cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall mHotplugCv.notify_all(); 127cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 128cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1291db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall void createLayer(hwc2_display_t display, hwc2_layer_t* outLayer, 1301db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_error_t* outErr = nullptr) 1311db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall { 1321db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_CREATE_LAYER>( 1331db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall getFunction(HWC2_FUNCTION_CREATE_LAYER)); 1341db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 1351db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 1361db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 1371db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall outLayer)); 1381db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 1391db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall if (err == HWC2_ERROR_NONE) 1401db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall mLayers.insert(std::make_pair(display, *outLayer)); 1411db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 1421db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall if (outErr) { 1431db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall *outErr = err; 1441db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } else { 1451db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to create layer"; 1461db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 1471db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 1481db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 1491db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall void destroyLayer(hwc2_display_t display, hwc2_layer_t layer, 1501db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_error_t* outErr = nullptr) 1511db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall { 1521db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_DESTROY_LAYER>( 1531db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall getFunction(HWC2_FUNCTION_DESTROY_LAYER)); 1541db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 1551db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 1561db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer)); 1571db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 1581db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall if (err == HWC2_ERROR_NONE) 1591db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall mLayers.erase(std::make_pair(display, layer)); 1601db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 1611db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall if (outErr) { 1621db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall *outErr = err; 1631db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } else { 1641db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to destroy layer " 1651db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall << layer; 1661db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 1671db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 1681db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 169cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall void getDisplayAttribute(hwc2_display_t display, hwc2_config_t config, 170cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_attribute_t attribute, int32_t* outValue, 171cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_error_t* outErr = nullptr) 172cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall { 173cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_GET_DISPLAY_ATTRIBUTE>( 174cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall getFunction(HWC2_FUNCTION_GET_DISPLAY_ATTRIBUTE)); 175cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 176cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 177cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, config, 178cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall attribute, outValue)); 179cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 180cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall if (outErr) { 181cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall *outErr = err; 182cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } else { 183cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to get display attribute " 184cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall << getAttributeName(attribute) << " for config " << config; 185cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 186cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 187cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 188cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall void getDisplayConfigs(hwc2_display_t display, 189cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t>* outConfigs, 190cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_error_t* outErr = nullptr) 191cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall { 192cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_GET_DISPLAY_CONFIGS>( 193cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall getFunction(HWC2_FUNCTION_GET_DISPLAY_CONFIGS)); 194cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 195cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 196cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall uint32_t numConfigs = 0; 197cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 198cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 199cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall &numConfigs, nullptr)); 200cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 201cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall if (err == HWC2_ERROR_NONE) { 202cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall outConfigs->resize(numConfigs); 203cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 204cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 205cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall &numConfigs, outConfigs->data())); 206cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 207cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 208cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall if (outErr) { 209cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall *outErr = err; 210cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } else { 211cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to get configs for" 212cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall " display " << display; 213cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 214cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 215cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 21693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall void getActiveConfig(hwc2_display_t display, hwc2_config_t* outConfig, 21793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_error_t* outErr = nullptr) 21893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall { 21993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_GET_ACTIVE_CONFIG>( 22093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall getFunction(HWC2_FUNCTION_GET_ACTIVE_CONFIG)); 22193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 22293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 22393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 22493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall outConfig)); 22593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall if (outErr) { 22693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall *outErr = err; 22793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } else { 22893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to get active config on" 22993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall " display " << display; 23093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 23193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 23293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 23393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall void setActiveConfig(hwc2_display_t display, hwc2_config_t config, 23493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_error_t* outErr = nullptr) 23593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall { 23693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_ACTIVE_CONFIG>( 23793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall getFunction(HWC2_FUNCTION_SET_ACTIVE_CONFIG)); 23893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 23993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 24093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, config)); 24193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall if (outErr) { 24293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall *outErr = err; 24393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } else { 24493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set active config " 24593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall << config; 24693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 24793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 24893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 24903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall void getDozeSupport(hwc2_display_t display, int32_t* outSupport, 25003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_error_t* outErr = nullptr) 25103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall { 25203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_GET_DOZE_SUPPORT>( 25303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall getFunction(HWC2_FUNCTION_GET_DOZE_SUPPORT)); 25403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 25503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 25603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 25703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall outSupport)); 25803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (outErr) { 25903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall *outErr = err; 26003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } else { 26103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to get doze support on" 26203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall " display " << display; 26303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 26403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 26503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 26603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall void setPowerMode(hwc2_display_t display, hwc2_power_mode_t mode, 26703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_error_t* outErr = nullptr) 26803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall { 26903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_POWER_MODE>( 27003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall getFunction(HWC2_FUNCTION_SET_POWER_MODE)); 27103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 27203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 27303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 27403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall mode)); 27503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (outErr) { 27603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall *outErr = err; 27703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (err != HWC2_ERROR_NONE) 27803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall return; 27903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } else { 28003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set power mode " 28103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall << getPowerModeName(mode) << " on display " << display; 28203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 28303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 28403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (mode == HWC2_POWER_MODE_OFF) { 28503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall mActiveDisplays.erase(display); 28603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } else { 28703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall mActiveDisplays.insert(display); 28803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 28903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 29003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 291572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall void setVsyncEnabled(hwc2_display_t display, hwc2_vsync_t enabled, 292572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_error_t* outErr = nullptr) 293572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall { 294572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_VSYNC_ENABLED>( 295572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall getFunction(HWC2_FUNCTION_SET_VSYNC_ENABLED)); 296572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 297572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 298572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 299572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall enabled)); 300572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall if (outErr) { 301572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall *outErr = err; 302572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } else { 303572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set vsync enabled " 304572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall << getVsyncName(enabled); 305572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 306572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 307572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 308572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall void vsyncCallback(hwc2_display_t display, int64_t timestamp) 309572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall { 310572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall std::lock_guard<std::mutex> lock(mVsyncMutex); 311572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall mVsyncDisplay = display; 312572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall mVsyncTimestamp = timestamp; 313572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall mVsyncCv.notify_all(); 314572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 315572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 316dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall void getDisplayName(hwc2_display_t display, std::string* outName, 317dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall hwc2_error_t* outErr = nullptr) 318dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall { 319dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_GET_DISPLAY_NAME>( 320dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall getFunction(HWC2_FUNCTION_GET_DISPLAY_NAME)); 321dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 322dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 323dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall uint32_t size = 0; 324dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 325dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, &size, 326dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall nullptr)); 327dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 328dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall if (err == HWC2_ERROR_NONE) { 329dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall std::vector<char> name(size); 330dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 331dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, &size, 332dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall name.data())); 333dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 334dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall outName->assign(name.data()); 335dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall } 336dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 337dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall if (outErr) { 338dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall *outErr = err; 339dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall } else { 340dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to get display name for " 341dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall << display; 342dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall } 343dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall } 344dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 3456bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall void setLayerCompositionType(hwc2_display_t display, hwc2_layer_t layer, 3466bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_composition_t composition, hwc2_error_t* outErr = nullptr) 3476bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall { 3486bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_COMPOSITION_TYPE>( 3496bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_COMPOSITION_TYPE)); 3506bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 3516bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 3526bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 3536bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall composition)); 3546bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall if (outErr) { 3556bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall *outErr = err; 3566bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } else { 3576bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer composition" 3586bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall " type " << getCompositionName(composition); 3596bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 3606bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 3616bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 3622a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall void setCursorPosition(hwc2_display_t display, hwc2_layer_t layer, 3632a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall int32_t x, int32_t y, hwc2_error_t* outErr = nullptr) 3642a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall { 3652a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_CURSOR_POSITION>( 3662a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall getFunction(HWC2_FUNCTION_SET_CURSOR_POSITION)); 3672a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 3682a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 3692a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, x, 3702a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall y)); 3712a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall if (outErr) { 3722a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall *outErr = err; 3732a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall } else { 3742a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set cursor position"; 3752a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall } 3762a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall } 3772a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 378ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall void setLayerBlendMode(hwc2_display_t display, hwc2_layer_t layer, 379ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall hwc2_blend_mode_t mode, hwc2_error_t* outErr = nullptr) 380ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall { 381ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_BLEND_MODE>( 382ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_BLEND_MODE)); 383ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 384ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 385ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 386ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall mode)); 387ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall if (outErr) { 388ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall *outErr = err; 389ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall } else { 390ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer blend mode " 391ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall << getBlendModeName(mode); 392ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall } 393ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall } 394ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 3955a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall void setLayerBuffer(hwc2_display_t display, hwc2_layer_t layer, 3965a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall buffer_handle_t buffer, int32_t acquireFence, 3975a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall hwc2_error_t* outErr = nullptr) 3985a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall { 3995a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_BUFFER>( 4005a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_BUFFER)); 4015a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 4025a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 4035a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 4045a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall buffer, acquireFence)); 4055a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall if (outErr) { 4065a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall *outErr = err; 4075a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall } else { 4085a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer buffer"; 4095a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall } 4105a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall } 4115a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 412ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall void setLayerColor(hwc2_display_t display, hwc2_layer_t layer, 413ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall hwc_color_t color, hwc2_error_t* outErr = nullptr) 414ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall { 415ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_COLOR>( 416ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_COLOR)); 417ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 418ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 419ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 420ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall color)); 421ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall if (outErr) { 422ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall *outErr = err; 423ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall } else { 424ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer color"; 425ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall } 426ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall } 427ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 428b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall void setLayerDataspace(hwc2_display_t display, hwc2_layer_t layer, 429b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall android_dataspace_t dataspace, hwc2_error_t* outErr = nullptr) 430b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall { 431b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_DATASPACE>( 432b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_DATASPACE)); 433b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 434b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 435b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 436b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall layer, dataspace)); 437b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall if (outErr) { 438b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall *outErr = err; 439b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall } else { 440b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer dataspace"; 441b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall } 442b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall } 443b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 444600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall void setLayerDisplayFrame(hwc2_display_t display, hwc2_layer_t layer, 445600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall const hwc_rect_t& displayFrame, hwc2_error_t* outErr = nullptr) 446600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall { 447600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_DISPLAY_FRAME>( 448600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_DISPLAY_FRAME)); 449600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 450600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 451600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 452600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall displayFrame)); 453600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall if (outErr) { 454600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall *outErr = err; 455600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall } else { 456600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer display" 457600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall " frame"; 458600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall } 459600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall } 460600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 4612b1f53060ea8587a428f826cf7890354ff124722Marissa Wall void setLayerPlaneAlpha(hwc2_display_t display, hwc2_layer_t layer, 4622b1f53060ea8587a428f826cf7890354ff124722Marissa Wall float alpha, hwc2_error_t* outErr = nullptr) 4632b1f53060ea8587a428f826cf7890354ff124722Marissa Wall { 4642b1f53060ea8587a428f826cf7890354ff124722Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_PLANE_ALPHA>( 4652b1f53060ea8587a428f826cf7890354ff124722Marissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_PLANE_ALPHA)); 4662b1f53060ea8587a428f826cf7890354ff124722Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 4672b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 4682b1f53060ea8587a428f826cf7890354ff124722Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 4692b1f53060ea8587a428f826cf7890354ff124722Marissa Wall alpha)); 4702b1f53060ea8587a428f826cf7890354ff124722Marissa Wall if (outErr) { 4712b1f53060ea8587a428f826cf7890354ff124722Marissa Wall *outErr = err; 4722b1f53060ea8587a428f826cf7890354ff124722Marissa Wall } else { 4732b1f53060ea8587a428f826cf7890354ff124722Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer plane alpha " 4742b1f53060ea8587a428f826cf7890354ff124722Marissa Wall << alpha; 4752b1f53060ea8587a428f826cf7890354ff124722Marissa Wall } 4762b1f53060ea8587a428f826cf7890354ff124722Marissa Wall } 4772b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 478c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall void setLayerSourceCrop(hwc2_display_t display, hwc2_layer_t layer, 479c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall const hwc_frect_t& sourceCrop, hwc2_error_t* outErr = nullptr) 480c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall { 481c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_SOURCE_CROP>( 482c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_SOURCE_CROP)); 483c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 484c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 485c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 486c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall sourceCrop)); 487c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall if (outErr) { 488c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall *outErr = err; 489c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall } else { 490c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer source crop"; 491c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall } 492c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall } 493c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 494ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall void setLayerSurfaceDamage(hwc2_display_t display, hwc2_layer_t layer, 495ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall const hwc_region_t& surfaceDamage, hwc2_error_t* outErr = nullptr) 496ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall { 497ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_SURFACE_DAMAGE>( 498ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_SURFACE_DAMAGE)); 499ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 500ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 501ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 502ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall surfaceDamage)); 503ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall if (outErr) { 504ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall *outErr = err; 505ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall } else { 506ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer surface" 507ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall " damage"; 508ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall } 509ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall } 510ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 511ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall void setLayerTransform(hwc2_display_t display, hwc2_layer_t layer, 512ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall hwc_transform_t transform, hwc2_error_t* outErr = nullptr) 513ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall { 514ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_TRANSFORM>( 515ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_TRANSFORM)); 516ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 517ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 518ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 519ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall transform)); 520ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall if (outErr) { 521ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall *outErr = err; 522ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall } else { 523ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer transform " 524ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall << getTransformName(transform); 525ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall } 526ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall } 527ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 528273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall void setLayerZOrder(hwc2_display_t display, hwc2_layer_t layer, 529273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall uint32_t zOrder, hwc2_error_t* outErr = nullptr) 530273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall { 531273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_Z_ORDER>( 532273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_Z_ORDER)); 533273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 534273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 535273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 536273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall zOrder)); 537273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall if (outErr) { 538273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall *outErr = err; 539273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } else { 540273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer z order " 541273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall << zOrder; 542273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 543273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 544273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 5454d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wallprotected: 5464d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall hwc2_function_pointer_t getFunction(hwc2_function_descriptor_t descriptor) 5474d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall { 5484d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall return mHwc2Device->getFunction(mHwc2Device, descriptor); 5494d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall } 5504d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 5514d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall void getCapabilities(std::vector<hwc2_capability_t>* outCapabilities) 5524d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall { 5534d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall uint32_t num = 0; 5544d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 5554d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall mHwc2Device->getCapabilities(mHwc2Device, &num, nullptr); 5564d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 5574d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall outCapabilities->resize(num); 5584d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 5594d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall mHwc2Device->getCapabilities(mHwc2Device, &num, 5604d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall reinterpret_cast<int32_t*>(outCapabilities->data())); 5614d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall } 5624d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 563cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall /* Registers a hotplug callback and waits for hotplug callbacks. This 564cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall * function will have no effect if called more than once. */ 565cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall void populateDisplays() 566cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall { 567cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall /* Sets the hotplug status to receiving */ 568cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall { 569cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::lock_guard<std::mutex> lock(mHotplugMutex); 570cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 571cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall if (mHotplugStatus != Hwc2TestHotplugStatus::Init) 572cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall return; 573cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall mHotplugStatus = Hwc2TestHotplugStatus::Receiving; 574cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 575cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 576cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall /* Registers the callback. This function call cannot be locked because 577cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall * a callback could happen on the same thread */ 578cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_HOTPLUG, this, 579cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall reinterpret_cast<hwc2_function_pointer_t>( 580cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2TestHotplugCallback))); 581cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 582cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall /* Waits for hotplug events. If a hotplug event has not come within 1 583cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall * second, stop waiting. */ 584cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::unique_lock<std::mutex> lock(mHotplugMutex); 585cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 586cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall while (mHotplugCv.wait_for(lock, std::chrono::seconds(1)) != 587cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::cv_status::timeout) { } 588cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 589cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall /* Sets the hotplug status to done. Future calls will have no effect */ 590cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall mHotplugStatus = Hwc2TestHotplugStatus::Done; 591cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 592cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 593cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall void getBadDisplay(hwc2_display_t* outDisplay) 594cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall { 595cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall for (hwc2_display_t display = 0; display < UINT64_MAX; display++) { 596cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall if (mDisplays.count(display) == 0) { 597cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall *outDisplay = display; 598cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall return; 599cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 600cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 601cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall ASSERT_TRUE(false) << "Unable to find bad display. UINT64_MAX displays" 602cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall " are registered. This should never happen."; 603cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 604cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 6051db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall /* NOTE: will create min(newlayerCnt, max supported layers) layers */ 6061db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall void createLayers(hwc2_display_t display, 6071db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall std::vector<hwc2_layer_t>* outLayers, size_t newLayerCnt) 6081db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall { 6091db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall std::vector<hwc2_layer_t> newLayers; 6101db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_layer_t layer; 6111db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 6121db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 6131db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (size_t i = 0; i < newLayerCnt; i++) { 6141db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 6151db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_NO_FATAL_FAILURE(createLayer(display, &layer, &err)); 6161db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall if (err == HWC2_ERROR_NO_RESOURCES) 6171db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall break; 6181db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall if (err != HWC2_ERROR_NONE) { 6191db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall newLayers.clear(); 6201db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to create layer"; 6211db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 6221db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall newLayers.push_back(layer); 6231db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 6241db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 6251db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall *outLayers = std::move(newLayers); 6261db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 6271db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 6281db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall void destroyLayers(hwc2_display_t display, 6291db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall std::vector<hwc2_layer_t>&& layers) 6301db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall { 6311db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (hwc2_layer_t layer : layers) { 6321db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 6331db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 6341db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 6351db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 636cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall void getInvalidConfig(hwc2_display_t display, hwc2_config_t* outConfig) 637cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall { 638cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs; 639cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 640cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 641cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 642cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_config_t CONFIG_MAX = UINT32_MAX; 643cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 644cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_LE(configs.size() - 1, CONFIG_MAX) << "every config value" 645cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall " (2^32 values) has been taken which shouldn't happen"; 646cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 647cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_config_t config; 648cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (config = 0; config < CONFIG_MAX; config++) { 649cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall if (std::count(configs.begin(), configs.end(), config) == 0) 650cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall break; 651cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 652cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 653cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall *outConfig = config; 654cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 655cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 656572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall void enableVsync(hwc2_display_t display) 657572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall { 658572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_VSYNC, this, 659572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall reinterpret_cast<hwc2_function_pointer_t>( 660572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2TestVsyncCallback))); 661572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE)); 662572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 663572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 664572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall void disableVsync(hwc2_display_t display) 665572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall { 666572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 667572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 668572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 669572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall void waitForVsync(hwc2_display_t* outDisplay = nullptr, 670572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall int64_t* outTimestamp = nullptr) 671572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall { 672572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall std::unique_lock<std::mutex> lock(mVsyncMutex); 673572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_EQ(mVsyncCv.wait_for(lock, std::chrono::seconds(3)), 674572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall std::cv_status::no_timeout) << "timed out attempting to get" 675572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall " vsync callback"; 676572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall if (outDisplay) 677572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall *outDisplay = mVsyncDisplay; 678572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall if (outTimestamp) 679572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall *outTimestamp = mVsyncTimestamp; 680572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 681572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 6826bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* Calls a set property function from Hwc2Test to set a property value from 6836bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * Hwc2TestLayer to hwc2_layer_t on hwc2_display_t */ 6846bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall using TestLayerPropertyFunction = void (*)(Hwc2Test* test, 6856bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_display_t display, hwc2_layer_t layer, 6865a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr); 6876bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 688273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall /* Calls a set property function from Hwc2Test to set property values from 689273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall * Hwc2TestLayers to hwc2_layer_t on hwc2_display_t */ 690273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall using TestLayerPropertiesFunction = void (*)(Hwc2Test* test, 691273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall hwc2_display_t display, hwc2_layer_t layer, 6925a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayers* testLayers); 693273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 6946bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* Calls a set property function from Hwc2Test to set a bad property value 6956bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * on hwc2_layer_t on hwc2_display_t */ 6966bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall using TestLayerPropertyBadLayerFunction = void (*)(Hwc2Test* test, 6976bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_display_t display, hwc2_layer_t layer, 6985a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr); 6996bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7006bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* Calls a set property function from Hwc2Test to set a bad property value 7016bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * on hwc2_layer_t on hwc2_display_t */ 7026bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall using TestLayerPropertyBadParameterFunction = void (*)(Hwc2Test* test, 7036bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_display_t display, hwc2_layer_t layer, hwc2_error_t* outErr); 7046bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7056bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* Advances a property of Hwc2TestLayer */ 7066bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall using AdvanceProperty = bool (*)(Hwc2TestLayer* testLayer); 7076bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7086bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* For each active display it cycles through each display config and tests 7096bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * each property value. It creates a layer, sets the property and then 7106bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * destroys the layer */ 7116bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall void setLayerProperty(Hwc2TestCoverage coverage, 7126bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall TestLayerPropertyFunction function, AdvanceProperty advance) 7136bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall { 7146bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto display : mDisplays) { 7156bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall std::vector<hwc2_config_t> configs; 7166bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7176bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 7186bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7196bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto config : configs) { 7206bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_layer_t layer; 721600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Area displayArea; 7226bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7236bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 724600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveDisplayArea(display, 725600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall &displayArea)); 726600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Hwc2TestLayer testLayer(coverage, displayArea); 7276bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7286bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall do { 7296bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 7306bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7316bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(function(this, display, layer, 7325a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall &testLayer, nullptr)); 7336bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7346bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 7356bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } while (advance(&testLayer)); 7366bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 7376bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 7386bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 7396bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7406bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* For each active display it cycles through each display config and tests 7416bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * each property value. It creates a layer, cycles through each property 7426bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * value and updates the layer property value and then destroys the layer */ 7436bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall void setLayerPropertyUpdate(Hwc2TestCoverage coverage, 7446bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall TestLayerPropertyFunction function, AdvanceProperty advance) 7456bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall { 7466bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto display : mDisplays) { 7476bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall std::vector<hwc2_config_t> configs; 7486bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7496bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 7506bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7516bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto config : configs) { 7526bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_layer_t layer; 753600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Area displayArea; 7546bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7556bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 756600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveDisplayArea(display, 757600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall &displayArea)); 758600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Hwc2TestLayer testLayer(coverage, displayArea); 7596bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7606bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 7616bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7626bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall do { 7636bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(function(this, display, layer, 7645a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall &testLayer, nullptr)); 7656bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } while (advance(&testLayer)); 7666bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7676bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 7686bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 7696bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 7706bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 7716bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 772273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall /* For each active display it cycles through each display config and tests 773273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall * each property value. It creates multiple layers, calls the 774273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall * TestLayerPropertiesFunction to set property values and then 775273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall * destroys the layers */ 776273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall void setLayerProperties(Hwc2TestCoverage coverage, size_t layerCnt, 777273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall TestLayerPropertiesFunction function) 778273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall { 779273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall for (auto display : mDisplays) { 780273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall std::vector<hwc2_config_t> configs; 781273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 782273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 783273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 784273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall for (auto config : configs) { 785273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall std::vector<hwc2_layer_t> layers; 786600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Area displayArea; 787273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 788273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 789600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveDisplayArea(display, 790600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall &displayArea)); 791273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 792273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayers(display, &layers, layerCnt)); 793600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Hwc2TestLayers testLayers(layers, coverage, displayArea); 794273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 795273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall for (auto layer : layers) { 796273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall EXPECT_NO_FATAL_FAILURE(function(this, display, layer, 7975a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall &testLayers)); 798273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 799273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 800273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayers(display, std::move(layers))); 801273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 802273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 803273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 804273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 8056bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* For each active display it cycles through each display config. 8066bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * 1) It attempts to set a valid property value to bad layer handle. 8076bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * 2) It creates a layer x and attempts to set a valid property value to 8086bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * layer x + 1 8096bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * 3) It destroys the layer x and attempts to set a valid property value to 8106bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * the destroyed layer x. 8116bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall */ 8126bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall void setLayerPropertyBadLayer(Hwc2TestCoverage coverage, 8136bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall TestLayerPropertyBadLayerFunction function) 8146bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall { 8156bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto display : mDisplays) { 8166bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall std::vector<hwc2_config_t> configs; 8176bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 8186bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 8196bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 8206bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto config : configs) { 8216bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_layer_t layer = 0; 822600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Area displayArea; 8236bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 8246bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 8256bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 826600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveDisplayArea(display, 827600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall &displayArea)); 828600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Hwc2TestLayer testLayer(coverage, displayArea); 8296bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 8306bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(function(this, display, layer, 8315a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall &testLayer, &err)); 8326bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 8336bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 8346bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 8356bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 8366bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(function(this, display, layer + 1, 8375a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall &testLayer, &err)); 8386bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 8396bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 8406bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 8416bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 8426bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(function(this, display, layer, 8435a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall &testLayer, &err)); 8446bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 8456bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 8466bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 8476bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 8486bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 8496bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* For each active display it cycles through each display config and tests 8506bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * each property value. It creates a layer, sets a bad property value and 8516bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * then destroys the layer */ 8526bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall void setLayerPropertyBadParameter(TestLayerPropertyBadParameterFunction function) 8536bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall { 8546bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto display : mDisplays) { 8556bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall std::vector<hwc2_config_t> configs; 8566bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 8576bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 8586bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 8596bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto config : configs) { 8606bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_layer_t layer; 8616bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 8626bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 8636bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 8646bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 8656bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 8666bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 8676bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(function(this, display, layer, &err)); 8686bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_PARAMETER) << "returned wrong" 8696bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall " error code"; 8706bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 8716bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 8726bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 8736bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 8746bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 8756bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 876600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall void getActiveConfigAttribute(hwc2_display_t display, 877600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall hwc2_attribute_t attribute, int32_t* outValue) 878600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall { 879600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall hwc2_config_t config; 880600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveConfig(display, &config)); 881600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, 882600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall attribute, outValue)); 883600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_GE(*outValue, 0) << "failed to get valid " 884600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall << getAttributeName(attribute); 885600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall } 886600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 887600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall void getActiveDisplayArea(hwc2_display_t display, Area* displayArea) 888600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall { 889600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveConfigAttribute(display, 890600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall HWC2_ATTRIBUTE_WIDTH, &displayArea->width)); 891600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveConfigAttribute(display, 892600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall HWC2_ATTRIBUTE_HEIGHT, &displayArea->height)); 893600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall } 894600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 8954d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall hwc2_device_t* mHwc2Device = nullptr; 896cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 897cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall enum class Hwc2TestHotplugStatus { 898cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall Init = 1, 899cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall Receiving, 900cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall Done, 901cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall }; 902cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 903cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::mutex mHotplugMutex; 904cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::condition_variable mHotplugCv; 905cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall Hwc2TestHotplugStatus mHotplugStatus = Hwc2TestHotplugStatus::Init; 906cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::unordered_set<hwc2_display_t> mDisplays; 9071db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 9081db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall /* Store all created layers that have not been destroyed. If an ASSERT_* 9091db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall * fails, then destroy the layers on exit */ 9101db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall std::set<std::pair<hwc2_display_t, hwc2_layer_t>> mLayers; 91103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 91203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall /* Store the power mode state. If it is not HWC2_POWER_MODE_OFF when 91303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall * tearing down the test cases, change it to HWC2_POWER_MODE_OFF */ 91403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall std::set<hwc2_display_t> mActiveDisplays; 915572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 916572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall std::mutex mVsyncMutex; 917572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall std::condition_variable mVsyncCv; 918572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_display_t mVsyncDisplay; 919572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall int64_t mVsyncTimestamp = -1; 9204d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall}; 9214d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 922cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wallvoid hwc2TestHotplugCallback(hwc2_callback_data_t callbackData, 923cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2_display_t display, int32_t connection) 924cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall{ 925cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall if (callbackData) 926cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall static_cast<Hwc2Test*>(callbackData)->hotplugCallback(display, 927cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall connection); 928cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall} 929cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 930572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wallvoid hwc2TestVsyncCallback(hwc2_callback_data_t callbackData, 931572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_display_t display, int64_t timestamp) 932572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 933572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall if (callbackData) 934572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall static_cast<Hwc2Test*>(callbackData)->vsyncCallback(display, 935572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall timestamp); 936572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 937572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 938ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wallvoid setBlendMode(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 9395a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 940ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall{ 941ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerBlendMode(display, layer, 9425a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getBlendMode(), outErr)); 9435a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall} 9445a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 9455a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wallvoid setBuffer(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 9465a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 9475a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall{ 9485a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall buffer_handle_t handle; 9495a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall android::base::unique_fd acquireFence; 9505a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall hwc2_composition_t composition = testLayer->getComposition(); 9515a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 9525a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall if (composition == HWC2_COMPOSITION_CLIENT 9535a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall || composition == HWC2_COMPOSITION_SOLID_COLOR 9545a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall || composition == HWC2_COMPOSITION_SIDEBAND) 9555a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall return; 9565a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 9575a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall if (testLayer->getBuffer(&handle, &acquireFence) < 0) 9585a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall return; 9595a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 9605a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerCompositionType(display, layer, 9615a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall composition)); 9625a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerBuffer(display, layer, 9635a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall handle, acquireFence, outErr)); 964ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall} 965ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 966ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wallvoid setColor(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 9675a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 968ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall{ 969ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerCompositionType(display, 970ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall layer, HWC2_COMPOSITION_SOLID_COLOR)); 971ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerPlaneAlpha(display, 9725a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall layer, testLayer->getPlaneAlpha())); 973ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerBlendMode(display, 9745a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall layer, testLayer->getBlendMode())); 975ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerColor(display, layer, 9765a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getColor(), outErr)); 977ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall} 978ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 9796bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wallvoid setComposition(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 9805a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 9816bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall{ 9825a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall hwc2_composition_t composition = testLayer->getComposition(); 9836bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 9846bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 9856bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerCompositionType(display, layer, 9866bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall composition, &err)); 9876bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall if (outErr) { 9886bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall *outErr = err; 9896bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall return; 9906bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 9916bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 9926bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall if (composition != HWC2_COMPOSITION_SIDEBAND) { 9936bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall EXPECT_EQ(err, HWC2_ERROR_NONE) << "returned wrong error code"; 9946bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } else { 9956bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall EXPECT_TRUE(err == HWC2_ERROR_NONE || err == HWC2_ERROR_UNSUPPORTED) 9966bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall << "returned wrong error code"; 9976bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 9986bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall} 9996bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 10002a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wallvoid setCursorPosition(Hwc2Test* test, hwc2_display_t display, 10015a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall hwc2_layer_t layer, Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 10022a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall{ 10032a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerCompositionType(display, 10042a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall layer, HWC2_COMPOSITION_CURSOR)); 10052a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 10065a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall const hwc_rect_t cursorPosition = testLayer->getCursorPosition(); 10072a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setCursorPosition(display, layer, 10082a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall cursorPosition.left, cursorPosition.top, outErr)); 10092a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall} 10102a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 1011b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wallvoid setDataspace(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 10125a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 1013b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall{ 1014b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerDataspace(display, layer, 10155a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getDataspace(), outErr)); 1016b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall} 1017b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 1018600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wallvoid setDisplayFrame(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 10195a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 1020600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall{ 1021600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerDisplayFrame(display, layer, 10225a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getDisplayFrame(), outErr)); 1023600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall} 1024600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 10252b1f53060ea8587a428f826cf7890354ff124722Marissa Wallvoid setPlaneAlpha(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 10265a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t *outErr) 10272b1f53060ea8587a428f826cf7890354ff124722Marissa Wall{ 10282b1f53060ea8587a428f826cf7890354ff124722Marissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerBlendMode(display, layer, 10295a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getBlendMode())); 10302b1f53060ea8587a428f826cf7890354ff124722Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerPlaneAlpha(display, layer, 10315a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getPlaneAlpha(), outErr)); 10322b1f53060ea8587a428f826cf7890354ff124722Marissa Wall} 10332b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 1034c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wallvoid setSourceCrop(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 10355a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 1036c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall{ 1037c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerSourceCrop(display, layer, 10385a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getSourceCrop(), outErr)); 1039c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall} 1040c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 1041ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wallvoid setSurfaceDamage(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 10425a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 1043ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall{ 1044ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerSurfaceDamage(display, layer, 10455a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getSurfaceDamage(), outErr)); 1046ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall} 1047ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 1048ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wallvoid setTransform(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 10495a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 1050ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall{ 1051ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerTransform(display, layer, 10525a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getTransform(), outErr)); 1053ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall} 1054ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 1055273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wallvoid setZOrder(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 10565a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 1057273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall{ 1058273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerZOrder(display, layer, 10595a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getZOrder(), outErr)); 1060273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall} 1061273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 1062ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wallbool advanceBlendMode(Hwc2TestLayer* testLayer) 1063ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall{ 1064ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall return testLayer->advanceBlendMode(); 1065ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall} 1066ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 10675a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wallbool advanceBuffer(Hwc2TestLayer* testLayer) 10685a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall{ 10695a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall if (testLayer->advanceComposition()) 10705a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall return true; 10715a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall return testLayer->advanceBufferArea(); 10725a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall} 10735a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 1074ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wallbool advanceColor(Hwc2TestLayer* testLayer) 1075ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall{ 1076ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall /* Color depends on blend mode so advance blend mode last so color is not 1077ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall * force to update as often */ 1078ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall if (testLayer->advancePlaneAlpha()) 1079ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall return true; 1080ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall if (testLayer->advanceColor()) 1081ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall return true; 1082ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall return testLayer->advanceBlendMode(); 1083ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall} 1084ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 10856bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wallbool advanceComposition(Hwc2TestLayer* testLayer) 10866bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall{ 10876bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall return testLayer->advanceComposition(); 10886bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall} 10896bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 10902a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wallbool advanceCursorPosition(Hwc2TestLayer* testLayer) 10912a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall{ 10922a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall return testLayer->advanceCursorPosition(); 10932a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall} 10942a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 1095b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wallbool advanceDataspace(Hwc2TestLayer* testLayer) 1096b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall{ 1097b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall return testLayer->advanceDataspace(); 1098b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall} 1099b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 1100600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wallbool advanceDisplayFrame(Hwc2TestLayer* testLayer) 1101600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall{ 1102600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall return testLayer->advanceDisplayFrame(); 1103600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall} 1104600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 11052b1f53060ea8587a428f826cf7890354ff124722Marissa Wallbool advancePlaneAlpha(Hwc2TestLayer* testLayer) 11062b1f53060ea8587a428f826cf7890354ff124722Marissa Wall{ 11072b1f53060ea8587a428f826cf7890354ff124722Marissa Wall return testLayer->advancePlaneAlpha(); 11082b1f53060ea8587a428f826cf7890354ff124722Marissa Wall} 11092b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 1110c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wallbool advanceSourceCrop(Hwc2TestLayer* testLayer) 1111c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall{ 1112c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall if (testLayer->advanceSourceCrop()) 1113c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall return true; 1114c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall return testLayer->advanceBufferArea(); 1115c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall} 1116c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 1117ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wallbool advanceSurfaceDamage(Hwc2TestLayer* testLayer) 1118ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall{ 1119ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall if (testLayer->advanceSurfaceDamage()) 1120ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall return true; 1121ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall return testLayer->advanceBufferArea(); 1122ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall} 1123ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 1124ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wallbool advanceTransform(Hwc2TestLayer* testLayer) 1125ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall{ 1126ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall return testLayer->advanceTransform(); 1127ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall} 1128ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 11294d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 11304d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wallstatic const std::array<hwc2_function_descriptor_t, 42> requiredFunctions = {{ 11314d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_ACCEPT_DISPLAY_CHANGES, 11324d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_CREATE_LAYER, 11334d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_CREATE_VIRTUAL_DISPLAY, 11344d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_DESTROY_LAYER, 11354d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_DESTROY_VIRTUAL_DISPLAY, 11364d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_DUMP, 11374d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_ACTIVE_CONFIG, 11384d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_CHANGED_COMPOSITION_TYPES, 11394d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_CLIENT_TARGET_SUPPORT, 11404d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_COLOR_MODES, 11414d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_DISPLAY_ATTRIBUTE, 11424d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_DISPLAY_CONFIGS, 11434d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_DISPLAY_NAME, 11444d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_DISPLAY_REQUESTS, 11454d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_DISPLAY_TYPE, 11464d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_DOZE_SUPPORT, 11474d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_HDR_CAPABILITIES, 11484d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_MAX_VIRTUAL_DISPLAY_COUNT, 11494d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_RELEASE_FENCES, 11504d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_PRESENT_DISPLAY, 11514d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_REGISTER_CALLBACK, 11524d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_ACTIVE_CONFIG, 11534d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_CLIENT_TARGET, 11544d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_COLOR_MODE, 11554d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_COLOR_TRANSFORM, 11564d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_CURSOR_POSITION, 11574d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_BLEND_MODE, 11584d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_BUFFER, 11594d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_COLOR, 11604d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_COMPOSITION_TYPE, 11614d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_DATASPACE, 11624d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_DISPLAY_FRAME, 11634d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_PLANE_ALPHA, 11644d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_SOURCE_CROP, 11654d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_SURFACE_DAMAGE, 11664d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_TRANSFORM, 11674d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_VISIBLE_REGION, 11684d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_Z_ORDER, 11694d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_OUTPUT_BUFFER, 11704d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_POWER_MODE, 11714d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_VSYNC_ENABLED, 11724d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_VALIDATE_DISPLAY, 11734d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall}}; 11744d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 11754d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall/* TESTCASE: Tests that the HWC2 supports all required functions. */ 11764d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa WallTEST_F(Hwc2Test, GET_FUNCTION) 11774d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall{ 11784d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall for (hwc2_function_descriptor_t descriptor : requiredFunctions) { 11794d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall hwc2_function_pointer_t pfn = getFunction(descriptor); 11804d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall EXPECT_TRUE(pfn) << "failed to get function " 11814d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall << getFunctionDescriptorName(descriptor); 11824d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall } 11834d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall} 11844d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 11854d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall/* TESTCASE: Tests that the HWC2 fails to retrieve and invalid function. */ 11864d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa WallTEST_F(Hwc2Test, GET_FUNCTION_invalid_function) 11874d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall{ 11884d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall hwc2_function_pointer_t pfn = getFunction(HWC2_FUNCTION_INVALID); 11894d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall EXPECT_FALSE(pfn) << "failed to get invalid function"; 11904d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall} 11914d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 11924d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall/* TESTCASE: Tests that the HWC2 does not return an invalid capability. */ 11934d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa WallTEST_F(Hwc2Test, GET_CAPABILITIES) 11944d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall{ 11954d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall std::vector<hwc2_capability_t> capabilities; 11964d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 11974d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall getCapabilities(&capabilities); 11984d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 11994d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall EXPECT_EQ(std::count(capabilities.begin(), capabilities.end(), 12004d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_CAPABILITY_INVALID), 0); 12014d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall} 1202a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 1203a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wallstatic const std::array<hwc2_callback_descriptor_t, 3> callbackDescriptors = {{ 1204a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall HWC2_CALLBACK_HOTPLUG, 1205a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall HWC2_CALLBACK_REFRESH, 1206a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall HWC2_CALLBACK_VSYNC, 1207a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall}}; 1208a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 1209a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall/* TESTCASE: Tests that the HWC2 can successfully register all required 1210a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall * callback functions. */ 1211a4b01488e852c0c16df89d04914e6f060dd862e3Marissa WallTEST_F(Hwc2Test, REGISTER_CALLBACK) 1212a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall{ 1213a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall hwc2_callback_data_t data = reinterpret_cast<hwc2_callback_data_t>( 1214a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall const_cast<char*>("data")); 1215a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 1216a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall for (auto descriptor : callbackDescriptors) { 1217a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(descriptor, data, 1218a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall []() { return; })); 1219a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall } 1220a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall} 1221a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 1222a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall/* TESTCASE: Test that the HWC2 fails to register invalid callbacks. */ 1223a4b01488e852c0c16df89d04914e6f060dd862e3Marissa WallTEST_F(Hwc2Test, REGISTER_CALLBACK_bad_parameter) 1224a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall{ 1225a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall hwc2_callback_data_t data = reinterpret_cast<hwc2_callback_data_t>( 1226a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall const_cast<char*>("data")); 1227a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 1228a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 1229a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_INVALID, data, 1230a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall []() { return; }, &err)); 1231a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_PARAMETER) << "returned wrong error code"; 1232a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall} 1233a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 1234a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall/* TESTCASE: Tests that the HWC2 can register a callback with null data. */ 1235a4b01488e852c0c16df89d04914e6f060dd862e3Marissa WallTEST_F(Hwc2Test, REGISTER_CALLBACK_null_data) 1236a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall{ 1237a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall hwc2_callback_data_t data = nullptr; 1238a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 1239a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall for (auto descriptor : callbackDescriptors) { 1240a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(descriptor, data, 1241a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall []() { return; })); 1242a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall } 1243a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall} 1244cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1245cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall/* TESTCASE: Tests that the HWC2 returns the correct display type for each 1246cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall * physical display. */ 1247cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa WallTEST_F(Hwc2Test, GET_DISPLAY_TYPE) 1248cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall{ 1249cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall for (auto display : mDisplays) { 1250cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2_display_type_t type; 1251cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1252cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayType(display, &type)); 1253cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall EXPECT_EQ(type, HWC2_DISPLAY_TYPE_PHYSICAL) << "failed to return" 1254cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall " correct display type"; 1255cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 1256cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall} 1257cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1258cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall/* TESTCASE: Tests that the HWC2 returns an error when the display type of a bad 1259cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall * display is requested. */ 1260cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa WallTEST_F(Hwc2Test, GET_DISPLAY_TYPE_bad_display) 1261cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall{ 1262cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2_display_t display; 1263cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2_display_type_t type; 1264cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 1265cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1266cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 1267cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1268cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayType(display, &type, &err)); 1269cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 1270cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall} 12711db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 12721db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall/* TESTCASE: Tests that the HWC2 can create and destroy layers. */ 12731db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa WallTEST_F(Hwc2Test, CREATE_DESTROY_LAYER) 12741db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall{ 12751db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (auto display : mDisplays) { 12761db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_layer_t layer; 12771db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 12781db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 12791db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 12801db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 12811db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 12821db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall} 12831db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 12841db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall/* TESTCASE: Tests that the HWC2 cannot create a layer for a bad display */ 12851db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa WallTEST_F(Hwc2Test, CREATE_LAYER_bad_display) 12861db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall{ 12871db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_display_t display; 12881db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_layer_t layer; 12891db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 12901db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 12911db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 12921db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 12931db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer, &err)); 12941db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 12951db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall} 12961db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 12971db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall/* TESTCASE: Tests that the HWC2 will either support a large number of resources 12981db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall * or will return no resources. */ 12991db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa WallTEST_F(Hwc2Test, CREATE_LAYER_no_resources) 13001db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall{ 13011db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall const size_t layerCnt = 1000; 13021db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 13031db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (auto display : mDisplays) { 13041db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall std::vector<hwc2_layer_t> layers; 13051db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 13061db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(createLayers(display, &layers, layerCnt)); 13071db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 13081db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayers(display, std::move(layers))); 13091db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 13101db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall} 13111db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 13121db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall/* TESTCASE: Tests that the HWC2 cannot destroy a layer for a bad display */ 13131db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa WallTEST_F(Hwc2Test, DESTROY_LAYER_bad_display) 13141db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall{ 13151db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_display_t badDisplay; 13161db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 13171db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&badDisplay)); 13181db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 13191db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (auto display : mDisplays) { 13201db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_layer_t layer = 0; 13211db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 13221db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 13231db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(badDisplay, layer, &err)); 13241db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 13251db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 13261db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 13271db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 13281db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(badDisplay, layer, &err)); 13291db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 13301db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 13311db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 13321db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 13331db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall} 13341db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 13351db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall/* TESTCASE: Tests that the HWC2 cannot destory a bad layer */ 13361db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa WallTEST_F(Hwc2Test, DESTROY_LAYER_bad_layer) 13371db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall{ 13381db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (auto display : mDisplays) { 13391db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_layer_t layer; 13401db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 13411db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 13421db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, UINT64_MAX / 2, &err)); 13431db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 13441db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 13451db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, 0, &err)); 13461db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 13471db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 13481db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, UINT64_MAX - 1, &err)); 13491db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 13501db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 13511db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, 1, &err)); 13521db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 13531db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 13541db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, UINT64_MAX, &err)); 13551db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 13561db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 13571db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 13581db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 13591db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer + 1, &err)); 13601db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 13611db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 13621db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 13631db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 13641db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer, &err)); 13651db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 13661db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 13671db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall} 1368cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1369cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wallstatic const std::array<hwc2_attribute_t, 2> requiredAttributes = {{ 1370cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall HWC2_ATTRIBUTE_WIDTH, 1371cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall HWC2_ATTRIBUTE_HEIGHT, 1372cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall}}; 1373cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1374cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wallstatic const std::array<hwc2_attribute_t, 3> optionalAttributes = {{ 1375cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall HWC2_ATTRIBUTE_VSYNC_PERIOD, 1376cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall HWC2_ATTRIBUTE_DPI_X, 1377cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall HWC2_ATTRIBUTE_DPI_Y, 1378cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall}}; 1379cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1380cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 can return display attributes for a valid 1381cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall * config. */ 1382cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_ATTRIBUTE) 1383cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 1384cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto display : mDisplays) { 1385cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs; 1386cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1387cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 1388cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1389cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto config : configs) { 1390cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall int32_t value; 1391cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1392cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto attribute : requiredAttributes) { 1393cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, 1394cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall attribute, &value)); 1395cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_GE(value, 0) << "missing required attribute " 1396cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall << getAttributeName(attribute) << " for config " 1397cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall << config; 1398cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1399cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto attribute : optionalAttributes) { 1400cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, 1401cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall attribute, &value)); 1402cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1403cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1404cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1405cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 1406cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1407cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 will return a value of -1 for an invalid 1408cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall * attribute */ 1409cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_ATTRIBUTE_invalid_attribute) 1410cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 1411cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall const hwc2_attribute_t attribute = HWC2_ATTRIBUTE_INVALID; 1412cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1413cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto display : mDisplays) { 1414cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs; 1415cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1416cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 1417cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1418cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto config : configs) { 1419cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall int32_t value; 1420cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 1421cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1422cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, 1423cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall attribute, &value, &err)); 1424cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(value, -1) << "failed to return -1 for an invalid" 1425cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall " attribute for config " << config; 1426cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1427cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1428cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 1429cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1430cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 will fail to get attributes for a bad display */ 1431cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_ATTRIBUTE_bad_display) 1432cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 1433cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_display_t display; 1434cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall const hwc2_config_t config = 0; 1435cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall int32_t value; 1436cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 1437cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1438cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 1439cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1440cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto attribute : requiredAttributes) { 1441cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, attribute, 1442cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall &value, &err)); 1443cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 1444cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1445cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1446cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto attribute : optionalAttributes) { 1447cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, attribute, 1448cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall &value, &err)); 1449cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 1450cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1451cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 1452cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1453cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 will fail to get attributes for a bad config */ 1454cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_ATTRIBUTE_bad_config) 1455cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 1456cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto display : mDisplays) { 1457cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_config_t config; 1458cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall int32_t value; 1459cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 1460cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1461cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getInvalidConfig(display, &config)); 1462cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1463cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto attribute : requiredAttributes) { 1464cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, 1465cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall attribute, &value, &err)); 1466cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_CONFIG) << "returned wrong error code"; 1467cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1468cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1469cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto attribute : optionalAttributes) { 1470cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, 1471cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall attribute, &value, &err)); 1472cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_CONFIG) << "returned wrong error code"; 1473cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1474cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1475cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 1476cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1477cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 will get display configs for active displays */ 1478cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_CONFIGS) 1479cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 1480cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto display : mDisplays) { 1481cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs; 1482cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1483cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 1484cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1485cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 1486cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1487cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 will not get display configs for bad displays */ 1488cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_CONFIGS_bad_display) 1489cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 1490cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_display_t display; 1491cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs; 1492cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 1493cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1494cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 1495cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1496cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs, &err)); 1497cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1498cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 1499cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_TRUE(configs.empty()) << "returned configs for bad display"; 1500cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 1501cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1502cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 will return the same config list multiple 1503cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall * times in a row. */ 1504cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_CONFIGS_same) 1505cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 1506cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto display : mDisplays) { 1507cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs1, configs2; 1508cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1509cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs1)); 1510cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs2)); 1511cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1512cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_TRUE(std::is_permutation(configs1.begin(), configs1.end(), 1513cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall configs2.begin())) << "returned two different config sets"; 1514cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1515cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 1516cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1517cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 does not return duplicate display configs */ 1518cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_CONFIGS_duplicate) 1519cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 1520cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto display : mDisplays) { 1521cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs; 1522cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1523cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 1524cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1525cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::unordered_set<hwc2_config_t> configsSet(configs.begin(), 1526cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall configs.end()); 1527cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(configs.size(), configsSet.size()) << "returned duplicate" 1528cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall " configs"; 1529cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1530cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 153193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 153293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall/* TESTCASE: Tests that the HWC2 returns the active config for a display */ 153393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa WallTEST_F(Hwc2Test, GET_ACTIVE_CONFIG) 153493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall{ 153593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall for (auto display : mDisplays) { 153693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall std::vector<hwc2_config_t> configs; 153793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 153893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 153993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 154093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall for (auto config : configs) { 154193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_config_t activeConfig; 154293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 154393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 154493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveConfig(display, &activeConfig)); 154593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 154693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_EQ(activeConfig, config) << "failed to get active config"; 154793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 154893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 154993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall} 155093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 155193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall/* TESTCASE: Tests that the HWC2 does not return an active config for a bad 155293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall * display. */ 155393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa WallTEST_F(Hwc2Test, GET_ACTIVE_CONFIG_bad_display) 155493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall{ 155593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_display_t display; 155693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_config_t activeConfig; 155793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 155893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 155993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 156093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 156193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveConfig(display, &activeConfig, &err)); 156293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 156393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 156493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall} 156593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 156693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall/* TESTCASE: Tests that the HWC2 either begins with a valid active config 156793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall * or returns an error when getActiveConfig is called. */ 156893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa WallTEST_F(Hwc2Test, GET_ACTIVE_CONFIG_bad_config) 156993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall{ 157093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall for (auto display : mDisplays) { 157193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall std::vector<hwc2_config_t> configs; 157293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_config_t activeConfig; 157393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 157493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 157593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 157693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 157793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall if (configs.empty()) 157893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall return; 157993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 158093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveConfig(display, &activeConfig, &err)); 158193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall if (err == HWC2_ERROR_NONE) { 158293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_NE(std::count(configs.begin(), configs.end(), 158393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall activeConfig), 0) << "active config is not found in " 158493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall " configs for display"; 158593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } else { 158693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_CONFIG) << "returned wrong error code"; 158793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 158893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 158993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall} 159093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 159193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall/* TESTCASE: Tests that the HWC2 can set every display config as an active 159293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall * config */ 159393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa WallTEST_F(Hwc2Test, SET_ACTIVE_CONFIG) 159493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall{ 159593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall for (auto display : mDisplays) { 159693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall std::vector<hwc2_config_t> configs; 159793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 159893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 159993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 160093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall for (auto config : configs) { 160193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 160293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 160393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 160493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall} 160593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 160693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set an active config for a bad display */ 160793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa WallTEST_F(Hwc2Test, SET_ACTIVE_CONFIG_bad_display) 160893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall{ 160993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_display_t display; 161093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall const hwc2_config_t config = 0; 161193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 161293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 161393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 161493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 161593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config, &err)); 161693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 161793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall} 161893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 161993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set an invalid active config */ 162093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa WallTEST_F(Hwc2Test, SET_ACTIVE_CONFIG_bad_config) 162193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall{ 162293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall for (auto display : mDisplays) { 162393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_config_t config; 162493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 162593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 162693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getInvalidConfig(display, &config)); 162793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 162893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config, &err)); 162993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_CONFIG) << "returned wrong error code"; 163093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 163193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall} 163203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 163303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 returns a valid value for getDozeSupport. */ 163403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, GET_DOZE_SUPPORT) 163503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 163603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall for (auto display : mDisplays) { 163703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall int32_t support = -1; 163803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 163903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getDozeSupport(display, &support)); 164003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 164103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_TRUE(support == 0 || support == 1) << "invalid doze support value"; 164203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 164303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 164403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 164503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 cannot get doze support for a bad display. */ 164603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, GET_DOZE_SUPPORT_bad_display) 164703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 164803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_display_t display; 164903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall int32_t support = -1; 165003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 165103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 165203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 165303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 165403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getDozeSupport(display, &support, &err)); 165503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 165603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 165703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 165803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 165903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 can set all supported power modes */ 166003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, SET_POWER_MODE) 166103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 166203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall for (auto display : mDisplays) { 166303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 166403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 166503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 166603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall int32_t support = -1; 166703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getDozeSupport(display, &support)); 166803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (support != 1) 166903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall return; 167003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 167103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_DOZE)); 167203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, 167303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall HWC2_POWER_MODE_DOZE_SUSPEND)); 167403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 167503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 167603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 167703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 167803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 167903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set a power mode for a bad display. */ 168003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, SET_POWER_MODE_bad_display) 168103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 168203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_display_t display; 168303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 168403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 168503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 168603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 168703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON, &err)); 168803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 168903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 169003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF, &err)); 169103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 169203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 169303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall int32_t support = -1; 169403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getDozeSupport(display, &support, &err)); 169503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (support != 1) 169603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall return; 169703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 169803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_DOZE, &err)); 169903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 170003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 170103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_DOZE_SUSPEND, 170203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall &err)); 170303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 170403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 170503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 170603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set an invalid power mode value. */ 170703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, SET_POWER_MODE_bad_parameter) 170803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 170903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall for (auto display : mDisplays) { 171003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_power_mode_t mode = static_cast<hwc2_power_mode_t>( 171103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall HWC2_POWER_MODE_DOZE_SUSPEND + 1); 171203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 171303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 171403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, mode, &err)); 171503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_PARAMETER) << "returned wrong error code " 171603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall << mode; 171703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 171803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 171903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 172003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 will return unsupported if it does not support 172103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall * an optional power mode. */ 172203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, SET_POWER_MODE_unsupported) 172303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 172403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall for (auto display : mDisplays) { 172503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall int32_t support = -1; 172603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 172703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 172803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getDozeSupport(display, &support, &err)); 172903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (support == 1) 173003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall return; 173103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 173203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_EQ(support, 0) << "invalid doze support value"; 173303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 173403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_DOZE, 173503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall &err)); 173603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_UNSUPPORTED) << "returned wrong error code"; 173703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 173803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, 173903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall HWC2_POWER_MODE_DOZE_SUSPEND, &err)); 174003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_UNSUPPORTED) << "returned wrong error code"; 174103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 174203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 174303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 174403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 can set the same power mode multiple times. */ 174503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, SET_POWER_MODE_stress) 174603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 174703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall for (auto display : mDisplays) { 174803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 174903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 175003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 175103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 175203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 175303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 175403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 175503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 175603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 175703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall int32_t support = -1; 175803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getDozeSupport(display, &support)); 175903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (support != 1) 176003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall return; 176103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 176203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_DOZE)); 176303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_DOZE)); 176403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 176503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, 176603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall HWC2_POWER_MODE_DOZE_SUSPEND)); 176703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, 176803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall HWC2_POWER_MODE_DOZE_SUSPEND)); 176903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 177003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 177103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 177203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 1773572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1774572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 can enable and disable vsync on active 1775572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall * displays */ 1776572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED) 1777572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 1778572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall for (auto display : mDisplays) { 1779572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_callback_data_t data = reinterpret_cast<hwc2_callback_data_t>( 1780572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall const_cast<char*>("data")); 1781572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1782572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 1783572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1784572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_VSYNC, data, 1785572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall []() { return; })); 1786572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1787572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE)); 1788572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1789572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 1790572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1791572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 1792572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 1793572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 1794572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1795572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 issues a valid vsync callback. */ 1796572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED_callback) 1797572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 1798572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall for (auto display : mDisplays) { 1799572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_display_t receivedDisplay; 1800572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall int64_t receivedTimestamp; 1801572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1802572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 1803572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1804572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(enableVsync(display)); 1805572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1806572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(waitForVsync(&receivedDisplay, 1807572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall &receivedTimestamp)); 1808572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1809572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall EXPECT_EQ(receivedDisplay, display) << "failed to get correct display"; 1810572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall EXPECT_GE(receivedTimestamp, 0) << "failed to get valid timestamp"; 1811572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1812572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(disableVsync(display)); 1813572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1814572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 1815572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 1816572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 1817572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1818572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 cannot enable a vsync for a bad display */ 1819572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED_bad_display) 1820572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 1821572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_display_t display; 1822572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_callback_data_t data = reinterpret_cast<hwc2_callback_data_t>( 1823572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall const_cast<char*>("data")); 1824572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 1825572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1826572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 1827572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1828572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_VSYNC, data, 1829572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall []() { return; })); 1830572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1831572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE, &err)); 1832572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 1833572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1834572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE, &err)); 1835572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 1836572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 1837572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1838572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 cannot enable an invalid vsync value */ 1839572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED_bad_parameter) 1840572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 1841572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall for (auto display : mDisplays) { 1842572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_callback_data_t data = reinterpret_cast<hwc2_callback_data_t>( 1843572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall const_cast<char*>("data")); 1844572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 1845572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1846572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 1847572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1848572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_VSYNC, data, 1849572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall []() { return; })); 1850572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1851572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_INVALID, 1852572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall &err)); 1853572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_PARAMETER) << "returned wrong error code"; 1854572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1855572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 1856572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 1857572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 1858572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1859572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 can enable and disable a vsync value multiple 1860572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall * times. */ 1861572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED_stress) 1862572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 1863572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall for (auto display : mDisplays) { 1864572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_callback_data_t data = reinterpret_cast<hwc2_callback_data_t>( 1865572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall const_cast<char*>("data")); 1866572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1867572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 1868572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1869572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_VSYNC, data, 1870572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall []() { return; })); 1871572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1872572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 1873572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1874572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE)); 1875572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE)); 1876572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1877572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 1878572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 1879572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1880572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 1881572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 1882572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 1883572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1884572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 can set a vsync enable value when the display 1885572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall * is off and no callback is registered. */ 1886572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED_no_callback_no_power) 1887572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 1888572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall const uint secs = 1; 1889572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1890572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall for (auto display : mDisplays) { 1891572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE)); 1892572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1893572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall sleep(secs); 1894572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1895572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 1896572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 1897572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 1898572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1899572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 can set a vsync enable value when no callback 1900572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall * is registered. */ 1901572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED_no_callback) 1902572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 1903572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall const uint secs = 1; 1904572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1905572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall for (auto display : mDisplays) { 1906572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 1907572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1908572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE)); 1909572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1910572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall sleep(secs); 1911572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1912572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 1913572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1914572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 1915572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 1916572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 1917dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 1918dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall/* TESTCASE: Tests that the HWC2 returns a display name for each display */ 1919dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa WallTEST_F(Hwc2Test, GET_DISPLAY_NAME) 1920dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall{ 1921dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall for (auto display : mDisplays) { 1922dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall std::string name; 1923dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 1924dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayName(display, &name)); 1925dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall } 1926dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall} 1927dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 1928dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall/* TESTCASE: Tests that the HWC2 does not return a display name for a bad 1929dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall * display */ 1930dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa WallTEST_F(Hwc2Test, GET_DISPLAY_NAME_bad_display) 1931dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall{ 1932dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall hwc2_display_t display; 1933dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall std::string name; 1934dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 1935dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 1936dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 1937dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 1938dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayName(display, &name, &err)); 1939dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 1940dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall} 19416bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 19426bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall/* TESTCASE: Tests that the HWC2 can set basic composition types. */ 19436bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa WallTEST_F(Hwc2Test, SET_LAYER_COMPOSITION_TYPE) 19446bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall{ 19456bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 19466bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall setComposition, advanceComposition)); 19476bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall} 19486bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 19496bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall/* TESTCASE: Tests that the HWC2 can update a basic composition type on a 19506bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * layer. */ 19516bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa WallTEST_F(Hwc2Test, SET_LAYER_COMPOSITION_TYPE_update) 19526bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall{ 19536bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 19546bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall setComposition, advanceComposition)); 19556bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall} 19566bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 19576bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set a composition type for a bad layer */ 19586bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa WallTEST_F(Hwc2Test, SET_LAYER_COMPOSITION_TYPE_bad_layer) 19596bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall{ 19606bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 19616bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall setComposition)); 19626bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall} 19636bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 19646bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set a bad composition type */ 19656bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa WallTEST_F(Hwc2Test, SET_LAYER_COMPOSITION_TYPE_bad_parameter) 19666bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall{ 19676bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadParameter( 19686bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 19696bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_error_t* outErr) { 19706bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 19716bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerCompositionType(display, 19726bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall layer, HWC2_COMPOSITION_INVALID, outErr)); 19736bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 19746bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall )); 19756bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall} 1976ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 19772a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall/* TESTCASE: Tests that the HWC2 can set the cursor position of a layer. */ 19782a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa WallTEST_F(Hwc2Test, SET_CURSOR_POSITION) 19792a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall{ 19802a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 19812a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ::setCursorPosition, advanceCursorPosition)); 19822a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall} 19832a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 19842a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall/* TESTCASE: Tests that the HWC2 can update the cursor position of a layer. */ 19852a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa WallTEST_F(Hwc2Test, SET_CURSOR_POSITION_update) 19862a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall{ 19872a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 19882a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ::setCursorPosition, advanceCursorPosition)); 19892a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall} 19902a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 19912a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall/* TESTCASE: Tests that the HWC2 can set the cursor position of a layer when the 19922a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall * composition type has not been set to HWC2_COMPOSITION_CURSOR. */ 19932a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa WallTEST_F(Hwc2Test, SET_CURSOR_POSITION_composition_type_unset) 19942a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall{ 19952a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 19962a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 19975a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) { 19982a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 19995a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall const hwc_rect_t cursorPosition = testLayer->getCursorPosition(); 20002a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setCursorPosition(display, layer, 20012a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall cursorPosition.left, cursorPosition.top, outErr)); 20022a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall }, 20032a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 20042a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall advanceCursorPosition)); 20052a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall} 20062a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 20072a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set the cursor position of a bad 20082a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall * display. */ 20092a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa WallTEST_F(Hwc2Test, SET_CURSOR_POSITION_bad_display) 20102a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall{ 20112a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall hwc2_display_t display; 20122a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall hwc2_layer_t layer = 0; 20132a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall int32_t x = 0, y = 0; 20142a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 20152a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 20162a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 20172a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 20182a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_NO_FATAL_FAILURE(setCursorPosition(display, layer, x, y, &err)); 20192a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 20202a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall} 20212a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 20222a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set the cursor position of a bad layer. */ 20232a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa WallTEST_F(Hwc2Test, SET_CURSOR_POSITION_bad_layer) 20242a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall{ 20252a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 20262a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t badLayer, 20275a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) { 20282a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 20295a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall const hwc_rect_t cursorPosition = testLayer->getCursorPosition(); 20302a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setCursorPosition(display, 20312a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall badLayer, cursorPosition.left, cursorPosition.top, 20322a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall outErr)); 20332a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall } 20342a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall )); 20352a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall} 20362a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 2037ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall/* TESTCASE: Tests that the HWC2 can set a blend mode value of a layer. */ 2038ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa WallTEST_F(Hwc2Test, SET_LAYER_BLEND_MODE) 2039ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall{ 2040ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 2041ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall setBlendMode, advanceBlendMode)); 2042ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall} 2043ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 2044ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall/* TESTCASE: Tests that the HWC2 can update a blend mode value of a layer. */ 2045ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa WallTEST_F(Hwc2Test, SET_LAYER_BLEND_MODE_update) 2046ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall{ 2047ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 2048ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall setBlendMode, advanceBlendMode)); 2049ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall} 2050ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 2051ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set a blend mode for a bad layer. */ 2052ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa WallTEST_F(Hwc2Test, SET_LAYER_BLEND_MODE_bad_layer) 2053ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall{ 2054ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 2055ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall setBlendMode)); 2056ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall} 2057ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 2058ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set an invalid blend mode. */ 2059ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa WallTEST_F(Hwc2Test, SET_LAYER_BLEND_MODE_bad_parameter) 2060ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall{ 2061ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadParameter( 2062ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 2063ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall hwc2_error_t* outErr) { 2064ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 2065ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerBlendMode(display, 2066ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall layer, HWC2_BLEND_MODE_INVALID, outErr)); 2067ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall } 2068ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall )); 2069ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall} 2070b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 20715a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall/* TESTCASE: Tests that the HWC2 can set the buffer of a layer. */ 20725a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa WallTEST_F(Hwc2Test, SET_LAYER_BUFFER) 20735a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall{ 20745a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 20755a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall setBuffer, advanceBuffer)); 20765a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall} 20775a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 20785a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall/* TESTCASE: Tests that the HWC2 can update the buffer of a layer. */ 20795a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa WallTEST_F(Hwc2Test, SET_LAYER_BUFFER_update) 20805a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall{ 20815a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 20825a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall setBuffer, advanceBuffer)); 20835a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall} 20845a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 20855a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set the buffer of a bad layer. */ 20865a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa WallTEST_F(Hwc2Test, SET_LAYER_BUFFER_bad_layer) 20875a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall{ 20885a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 20895a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t badLayer, 20905a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) { 20915a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 20925a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall buffer_handle_t handle = nullptr; 20935a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall android::base::unique_fd acquireFence; 20945a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 20955a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall /* If there is not available buffer for the given buffer 20965a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall * properties, it should not fail this test case */ 20975a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall if (testLayer->getBuffer(&handle, &acquireFence) == 0) { 20985a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall *outErr = HWC2_ERROR_BAD_LAYER; 20995a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall return; 21005a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall } 21015a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 21025a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerBuffer(display, badLayer, 21035a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall handle, acquireFence, outErr)); 21045a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall } 21055a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall )); 21065a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall} 21075a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 21085a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall/* TESTCASE: Tests that the HWC2 can set an invalid buffer for a layer. */ 21095a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa WallTEST_F(Hwc2Test, SET_LAYER_BUFFER_bad_parameter) 21105a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall{ 21115a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadParameter( 21125a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 21135a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall hwc2_error_t* outErr) { 21145a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 21155a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall buffer_handle_t handle = nullptr; 21165a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall int32_t acquireFence = -1; 21175a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 21185a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerBuffer(display, layer, 21195a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall handle, acquireFence, outErr)); 21205a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall } 21215a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall )); 21225a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall} 21235a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 2124ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall/* TESTCASE: Tests that the HWC2 can set the color of a layer. */ 2125ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa WallTEST_F(Hwc2Test, SET_LAYER_COLOR) 2126ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall{ 2127ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 2128ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall setColor, advanceColor)); 2129ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall} 2130ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 2131ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall/* TESTCASE: Tests that the HWC2 can update the color of a layer. */ 2132ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa WallTEST_F(Hwc2Test, SET_LAYER_COLOR_update) 2133ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall{ 2134ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 2135ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall setColor, advanceColor)); 2136ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall} 2137ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 2138ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall/* TESTCASE: Tests that the HWC2 can set the color of a layer when the 2139ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall * composition type has not been set to HWC2_COMPOSITION_SOLID_COLOR. */ 2140ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa WallTEST_F(Hwc2Test, SET_LAYER_COLOR_composition_type_unset) 2141ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall{ 2142ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Basic, 2143ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 21445a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) { 2145ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 2146ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerColor(display, layer, 21475a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getColor(), outErr)); 2148ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall }, 2149ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 2150ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall advanceColor)); 2151ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall} 2152ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 2153ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set the color of a bad layer. */ 2154ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa WallTEST_F(Hwc2Test, SET_LAYER_COLOR_bad_layer) 2155ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall{ 2156ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 2157ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t badLayer, 21585a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) { 2159ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 2160ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerColor(display, badLayer, 21615a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getColor(), outErr)); 2162ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall } 2163ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall )); 2164ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall} 2165ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 2166b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall/* TESTCASE: Tests that the HWC2 can set the dataspace of a layer. */ 2167b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa WallTEST_F(Hwc2Test, SET_LAYER_DATASPACE) 2168b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall{ 2169b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 2170b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall setDataspace, advanceDataspace)); 2171b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall} 2172b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 2173b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall/* TESTCASE: Tests that the HWC2 can update the dataspace of a layer. */ 2174b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa WallTEST_F(Hwc2Test, SET_LAYER_DATASPACE_update) 2175b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall{ 2176b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 2177b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall setDataspace, advanceDataspace)); 2178b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall} 2179b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 2180b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set a dataspace for a bad layer. */ 2181b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa WallTEST_F(Hwc2Test, SET_LAYER_DATASPACE_bad_layer) 2182b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall{ 2183b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 2184b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall setDataspace)); 2185b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall} 21862b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 2187600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall/* TESTCASE: Tests that the HWC2 can set the display frame of a layer. */ 2188600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa WallTEST_F(Hwc2Test, SET_LAYER_DISPLAY_FRAME) 2189600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall{ 2190600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 2191600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall setDisplayFrame, advanceDisplayFrame)); 2192600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall} 2193600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 2194600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall/* TESTCASE: Tests that the HWC2 can update the display frame of a layer. */ 2195600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa WallTEST_F(Hwc2Test, SET_LAYER_DISPLAY_FRAME_update) 2196600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall{ 2197600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 2198600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall setDisplayFrame, advanceDisplayFrame)); 2199600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall} 2200600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 2201600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set the display frame of a bad layer. */ 2202600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa WallTEST_F(Hwc2Test, SET_LAYER_DISPLAY_FRAME_bad_layer) 2203600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall{ 2204600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 2205600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall setDisplayFrame)); 2206600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall} 2207600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 22082b1f53060ea8587a428f826cf7890354ff124722Marissa Wall/* TESTCASE: Tests that the HWC2 can set the plane alpha of a layer. */ 22092b1f53060ea8587a428f826cf7890354ff124722Marissa WallTEST_F(Hwc2Test, SET_LAYER_PLANE_ALPHA) 22102b1f53060ea8587a428f826cf7890354ff124722Marissa Wall{ 22112b1f53060ea8587a428f826cf7890354ff124722Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 22122b1f53060ea8587a428f826cf7890354ff124722Marissa Wall setPlaneAlpha, advancePlaneAlpha)); 22132b1f53060ea8587a428f826cf7890354ff124722Marissa Wall} 22142b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 22152b1f53060ea8587a428f826cf7890354ff124722Marissa Wall/* TESTCASE: Tests that the HWC2 can update the plane alpha of a layer. */ 22162b1f53060ea8587a428f826cf7890354ff124722Marissa WallTEST_F(Hwc2Test, SET_LAYER_PLANE_ALPHA_update) 22172b1f53060ea8587a428f826cf7890354ff124722Marissa Wall{ 22182b1f53060ea8587a428f826cf7890354ff124722Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 22192b1f53060ea8587a428f826cf7890354ff124722Marissa Wall setPlaneAlpha, advancePlaneAlpha)); 22202b1f53060ea8587a428f826cf7890354ff124722Marissa Wall} 22212b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 22222b1f53060ea8587a428f826cf7890354ff124722Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set a plane alpha for a bad layer. */ 22232b1f53060ea8587a428f826cf7890354ff124722Marissa WallTEST_F(Hwc2Test, SET_LAYER_PLANE_ALPHA_bad_layer) 22242b1f53060ea8587a428f826cf7890354ff124722Marissa Wall{ 22252b1f53060ea8587a428f826cf7890354ff124722Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 22262b1f53060ea8587a428f826cf7890354ff124722Marissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t badLayer, 22275a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t *outErr) { 22282b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 22292b1f53060ea8587a428f826cf7890354ff124722Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerPlaneAlpha(display, 22305a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall badLayer, testLayer->getPlaneAlpha(), outErr)); 22312b1f53060ea8587a428f826cf7890354ff124722Marissa Wall } 22322b1f53060ea8587a428f826cf7890354ff124722Marissa Wall )); 22332b1f53060ea8587a428f826cf7890354ff124722Marissa Wall} 2234ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 2235c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall/* TESTCASE: Tests that the HWC2 can set the source crop of a layer. */ 2236c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa WallTEST_F(Hwc2Test, SET_LAYER_SOURCE_CROP) 2237c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall{ 2238c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 2239c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall setSourceCrop, advanceSourceCrop)); 2240c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall} 2241c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 2242c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall/* TESTCASE: Tests that the HWC2 can update the source crop of a layer. */ 2243c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa WallTEST_F(Hwc2Test, SET_LAYER_SOURCE_CROP_update) 2244c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall{ 2245c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 2246c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall setSourceCrop, advanceSourceCrop)); 2247c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall} 2248c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 2249c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set the source crop of a bad layer. */ 2250c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa WallTEST_F(Hwc2Test, SET_LAYER_SOURCE_CROP_bad_layer) 2251c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall{ 2252c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 2253c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall setSourceCrop)); 2254c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall} 2255c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 2256ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall/* TESTCASE: Tests that the HWC2 can set the surface damage of a layer. */ 2257ad761818a4426b4e6a0696ba90e05056aa35553cMarissa WallTEST_F(Hwc2Test, SET_LAYER_SURFACE_DAMAGE) 2258ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall{ 2259ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 2260ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall setSurfaceDamage, advanceSurfaceDamage)); 2261ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall} 2262ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 2263ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall/* TESTCASE: Tests that the HWC2 can update the surface damage of a layer. */ 2264ad761818a4426b4e6a0696ba90e05056aa35553cMarissa WallTEST_F(Hwc2Test, SET_LAYER_SURFACE_DAMAGE_update) 2265ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall{ 2266ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 2267ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall setSurfaceDamage, advanceSurfaceDamage)); 2268ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall} 2269ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 2270ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set the surface damage of a bad layer. */ 2271ad761818a4426b4e6a0696ba90e05056aa35553cMarissa WallTEST_F(Hwc2Test, SET_LAYER_SURFACE_DAMAGE_bad_layer) 2272ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall{ 2273ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 2274ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall setSurfaceDamage)); 2275ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall} 2276ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 2277ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall/* TESTCASE: Tests that the HWC2 can set the transform value of a layer. */ 2278ac10819373b1ed4901f26c822484a789a7ca4be0Marissa WallTEST_F(Hwc2Test, SET_LAYER_TRANSFORM) 2279ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall{ 2280ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 2281ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall setTransform, advanceTransform)); 2282ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall} 2283ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 2284ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall/* TESTCASE: Tests that the HWC2 can update the transform value of a layer. */ 2285ac10819373b1ed4901f26c822484a789a7ca4be0Marissa WallTEST_F(Hwc2Test, SET_LAYER_TRANSFORM_update) 2286ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall{ 2287ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 2288ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall setTransform, advanceTransform)); 2289ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall} 2290ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 2291ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set the transform for a bad layer. */ 2292ac10819373b1ed4901f26c822484a789a7ca4be0Marissa WallTEST_F(Hwc2Test, SET_LAYER_TRANSFORM_bad_layer) 2293ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall{ 2294ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 2295ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall setTransform)); 2296ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall} 2297273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 2298273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall/* TESTCASE: Tests that the HWC2 can set the z order of a layer. */ 2299273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa WallTEST_F(Hwc2Test, SET_LAYER_Z_ORDER) 2300273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall{ 2301273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperties(Hwc2TestCoverage::Complete, 10, 2302273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 23035a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayers* testLayers) { 2304273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 2305273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerZOrder(display, layer, 23065a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayers->getZOrder(layer))); 2307273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 2308273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall )); 2309273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall} 2310273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 2311273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall/* TESTCASE: Tests that the HWC2 can update the z order of a layer. */ 2312273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa WallTEST_F(Hwc2Test, SET_LAYER_Z_ORDER_update) 2313273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall{ 2314273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall const std::vector<uint32_t> zOrders = { static_cast<uint32_t>(0), 2315273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall static_cast<uint32_t>(1), static_cast<uint32_t>(UINT32_MAX / 4), 2316273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall static_cast<uint32_t>(UINT32_MAX / 2), 2317273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall static_cast<uint32_t>(UINT32_MAX) }; 2318273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 2319273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall for (auto display : mDisplays) { 2320273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall std::vector<hwc2_config_t> configs; 2321273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 2322273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 2323273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 2324273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall for (auto config : configs) { 2325273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall hwc2_layer_t layer; 2326273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 2327273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 2328273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 2329273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 2330273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 2331273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall for (uint32_t zOrder : zOrders) { 2332273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall EXPECT_NO_FATAL_FAILURE(setLayerZOrder(display, layer, zOrder)); 2333273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 2334273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 2335273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 2336273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 2337273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 2338273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall} 2339273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 2340273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set the z order of a bad layer. */ 2341273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa WallTEST_F(Hwc2Test, SET_LAYER_Z_ORDER_bad_layer) 2342273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall{ 2343273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 2344273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall setZOrder)); 2345273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall} 2346