Hwc2Test.cpp revision 2a0aaf9f5a3daeb0525249eda40242bb63f56468
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> 214d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall#include <hardware/hardware.h> 224d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 234d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall#define HWC2_INCLUDE_STRINGIFICATION 244d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall#define HWC2_USE_CPP11 254d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall#include <hardware/hwcomposer2.h> 264d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall#undef HWC2_INCLUDE_STRINGIFICATION 274d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall#undef HWC2_USE_CPP11 284d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 296bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall#include "Hwc2TestLayer.h" 30273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall#include "Hwc2TestLayers.h" 316bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 32cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wallvoid hwc2TestHotplugCallback(hwc2_callback_data_t callbackData, 33cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2_display_t display, int32_t connected); 34572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wallvoid hwc2TestVsyncCallback(hwc2_callback_data_t callbackData, 35572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_display_t display, int64_t timestamp); 36cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 374d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wallclass Hwc2Test : public testing::Test { 384d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wallpublic: 394d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 404d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall virtual void SetUp() 414d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall { 424d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall hw_module_t const* hwc2Module; 434d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 444d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall int err = hw_get_module(HWC_HARDWARE_MODULE_ID, &hwc2Module); 454d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall ASSERT_GE(err, 0) << "failed to get hwc hardware module: " 464d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall << strerror(-err); 474d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 484d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall /* The following method will fail if you have not run 494d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * "adb shell stop" */ 504d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall err = hwc2_open(hwc2Module, &mHwc2Device); 514d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall ASSERT_GE(err, 0) << "failed to open hwc hardware module: " 524d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall << strerror(-err); 53cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 54cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall populateDisplays(); 554d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall } 564d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 574d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall virtual void TearDown() 584d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall { 591db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 601db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (auto itr = mLayers.begin(); itr != mLayers.end();) { 611db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_display_t display = itr->first; 621db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_layer_t layer = itr->second; 631db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall itr++; 641db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall /* Destroys and removes the layer from mLayers */ 651db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall destroyLayer(display, layer); 661db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 671db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 6803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall for (auto itr = mActiveDisplays.begin(); itr != mActiveDisplays.end();) { 6903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_display_t display = *itr; 7003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall itr++; 7103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall /* Sets power mode to off and removes the display from 7203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall * mActiveDisplays */ 7303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall setPowerMode(display, HWC2_POWER_MODE_OFF); 7403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 7503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 764d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall if (mHwc2Device) 774d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall hwc2_close(mHwc2Device); 784d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall } 794d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 80a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall void registerCallback(hwc2_callback_descriptor_t descriptor, 81a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall hwc2_callback_data_t callbackData, hwc2_function_pointer_t pointer, 82a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall hwc2_error_t* outErr = nullptr) 83a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall { 84a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_REGISTER_CALLBACK>( 85a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall getFunction(HWC2_FUNCTION_REGISTER_CALLBACK)); 86a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 87a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 88a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, descriptor, 89a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall callbackData, pointer)); 90a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall if (outErr) { 91a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall *outErr = err; 92a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall } else { 93a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to register callback"; 94a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall } 95a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall } 96a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 97cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall void getDisplayType(hwc2_display_t display, hwc2_display_type_t* outType, 98cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2_error_t* outErr = nullptr) 99cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall { 100cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_GET_DISPLAY_TYPE>( 101cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall getFunction(HWC2_FUNCTION_GET_DISPLAY_TYPE)); 102cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 103cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 104cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 105cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall reinterpret_cast<int32_t*>(outType))); 106cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall if (outErr) { 107cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall *outErr = err; 108cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } else { 109cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to get display type"; 110cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 111cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 112cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 113cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall /* If the populateDisplays function is still receiving displays and the 114cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall * display is connected, the display handle is stored in mDisplays. */ 115cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall void hotplugCallback(hwc2_display_t display, int32_t connected) 116cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall { 117cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::lock_guard<std::mutex> lock(mHotplugMutex); 118cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 119cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall if (mHotplugStatus != Hwc2TestHotplugStatus::Receiving) 120cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall return; 121cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 122cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall if (connected == HWC2_CONNECTION_CONNECTED) 123cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall mDisplays.insert(display); 124cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 125cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall mHotplugCv.notify_all(); 126cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 127cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1281db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall void createLayer(hwc2_display_t display, hwc2_layer_t* outLayer, 1291db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_error_t* outErr = nullptr) 1301db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall { 1311db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_CREATE_LAYER>( 1321db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall getFunction(HWC2_FUNCTION_CREATE_LAYER)); 1331db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 1341db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 1351db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 1361db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall outLayer)); 1371db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 1381db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall if (err == HWC2_ERROR_NONE) 1391db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall mLayers.insert(std::make_pair(display, *outLayer)); 1401db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 1411db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall if (outErr) { 1421db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall *outErr = err; 1431db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } else { 1441db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to create layer"; 1451db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 1461db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 1471db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 1481db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall void destroyLayer(hwc2_display_t display, hwc2_layer_t layer, 1491db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_error_t* outErr = nullptr) 1501db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall { 1511db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_DESTROY_LAYER>( 1521db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall getFunction(HWC2_FUNCTION_DESTROY_LAYER)); 1531db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 1541db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 1551db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer)); 1561db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 1571db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall if (err == HWC2_ERROR_NONE) 1581db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall mLayers.erase(std::make_pair(display, layer)); 1591db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 1601db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall if (outErr) { 1611db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall *outErr = err; 1621db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } else { 1631db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to destroy layer " 1641db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall << layer; 1651db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 1661db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 1671db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 168cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall void getDisplayAttribute(hwc2_display_t display, hwc2_config_t config, 169cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_attribute_t attribute, int32_t* outValue, 170cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_error_t* outErr = nullptr) 171cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall { 172cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_GET_DISPLAY_ATTRIBUTE>( 173cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall getFunction(HWC2_FUNCTION_GET_DISPLAY_ATTRIBUTE)); 174cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 175cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 176cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, config, 177cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall attribute, outValue)); 178cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 179cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall if (outErr) { 180cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall *outErr = err; 181cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } else { 182cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to get display attribute " 183cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall << getAttributeName(attribute) << " for config " << config; 184cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 185cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 186cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 187cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall void getDisplayConfigs(hwc2_display_t display, 188cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t>* outConfigs, 189cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_error_t* outErr = nullptr) 190cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall { 191cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_GET_DISPLAY_CONFIGS>( 192cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall getFunction(HWC2_FUNCTION_GET_DISPLAY_CONFIGS)); 193cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 194cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 195cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall uint32_t numConfigs = 0; 196cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 197cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 198cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall &numConfigs, nullptr)); 199cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 200cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall if (err == HWC2_ERROR_NONE) { 201cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall outConfigs->resize(numConfigs); 202cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 203cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 204cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall &numConfigs, outConfigs->data())); 205cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 206cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 207cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall if (outErr) { 208cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall *outErr = err; 209cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } else { 210cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to get configs for" 211cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall " display " << display; 212cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 213cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 214cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 21593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall void getActiveConfig(hwc2_display_t display, hwc2_config_t* outConfig, 21693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_error_t* outErr = nullptr) 21793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall { 21893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_GET_ACTIVE_CONFIG>( 21993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall getFunction(HWC2_FUNCTION_GET_ACTIVE_CONFIG)); 22093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 22193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 22293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 22393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall outConfig)); 22493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall if (outErr) { 22593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall *outErr = err; 22693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } else { 22793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to get active config on" 22893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall " display " << display; 22993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 23093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 23193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 23293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall void setActiveConfig(hwc2_display_t display, hwc2_config_t config, 23393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_error_t* outErr = nullptr) 23493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall { 23593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_ACTIVE_CONFIG>( 23693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall getFunction(HWC2_FUNCTION_SET_ACTIVE_CONFIG)); 23793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 23893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 23993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, config)); 24093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall if (outErr) { 24193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall *outErr = err; 24293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } else { 24393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set active config " 24493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall << config; 24593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 24693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 24793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 24803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall void getDozeSupport(hwc2_display_t display, int32_t* outSupport, 24903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_error_t* outErr = nullptr) 25003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall { 25103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_GET_DOZE_SUPPORT>( 25203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall getFunction(HWC2_FUNCTION_GET_DOZE_SUPPORT)); 25303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 25403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 25503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 25603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall outSupport)); 25703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (outErr) { 25803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall *outErr = err; 25903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } else { 26003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to get doze support on" 26103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall " display " << display; 26203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 26303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 26403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 26503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall void setPowerMode(hwc2_display_t display, hwc2_power_mode_t mode, 26603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_error_t* outErr = nullptr) 26703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall { 26803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_POWER_MODE>( 26903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall getFunction(HWC2_FUNCTION_SET_POWER_MODE)); 27003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 27103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 27203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 27303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall mode)); 27403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (outErr) { 27503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall *outErr = err; 27603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (err != HWC2_ERROR_NONE) 27703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall return; 27803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } else { 27903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set power mode " 28003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall << getPowerModeName(mode) << " on display " << display; 28103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 28203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 28303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (mode == HWC2_POWER_MODE_OFF) { 28403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall mActiveDisplays.erase(display); 28503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } else { 28603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall mActiveDisplays.insert(display); 28703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 28803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 28903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 290572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall void setVsyncEnabled(hwc2_display_t display, hwc2_vsync_t enabled, 291572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_error_t* outErr = nullptr) 292572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall { 293572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_VSYNC_ENABLED>( 294572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall getFunction(HWC2_FUNCTION_SET_VSYNC_ENABLED)); 295572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 296572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 297572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 298572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall enabled)); 299572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall if (outErr) { 300572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall *outErr = err; 301572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } else { 302572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set vsync enabled " 303572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall << getVsyncName(enabled); 304572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 305572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 306572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 307572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall void vsyncCallback(hwc2_display_t display, int64_t timestamp) 308572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall { 309572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall std::lock_guard<std::mutex> lock(mVsyncMutex); 310572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall mVsyncDisplay = display; 311572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall mVsyncTimestamp = timestamp; 312572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall mVsyncCv.notify_all(); 313572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 314572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 315dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall void getDisplayName(hwc2_display_t display, std::string* outName, 316dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall hwc2_error_t* outErr = nullptr) 317dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall { 318dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_GET_DISPLAY_NAME>( 319dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall getFunction(HWC2_FUNCTION_GET_DISPLAY_NAME)); 320dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 321dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 322dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall uint32_t size = 0; 323dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 324dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, &size, 325dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall nullptr)); 326dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 327dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall if (err == HWC2_ERROR_NONE) { 328dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall std::vector<char> name(size); 329dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 330dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, &size, 331dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall name.data())); 332dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 333dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall outName->assign(name.data()); 334dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall } 335dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 336dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall if (outErr) { 337dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall *outErr = err; 338dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall } else { 339dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to get display name for " 340dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall << display; 341dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall } 342dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall } 343dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 3446bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall void setLayerCompositionType(hwc2_display_t display, hwc2_layer_t layer, 3456bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_composition_t composition, hwc2_error_t* outErr = nullptr) 3466bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall { 3476bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_COMPOSITION_TYPE>( 3486bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_COMPOSITION_TYPE)); 3496bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 3506bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 3516bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 3526bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall composition)); 3536bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall if (outErr) { 3546bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall *outErr = err; 3556bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } else { 3566bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer composition" 3576bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall " type " << getCompositionName(composition); 3586bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 3596bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 3606bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 3612a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall void setCursorPosition(hwc2_display_t display, hwc2_layer_t layer, 3622a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall int32_t x, int32_t y, hwc2_error_t* outErr = nullptr) 3632a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall { 3642a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_CURSOR_POSITION>( 3652a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall getFunction(HWC2_FUNCTION_SET_CURSOR_POSITION)); 3662a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 3672a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 3682a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, x, 3692a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall y)); 3702a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall if (outErr) { 3712a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall *outErr = err; 3722a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall } else { 3732a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set cursor position"; 3742a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall } 3752a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall } 3762a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 377ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall void setLayerBlendMode(hwc2_display_t display, hwc2_layer_t layer, 378ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall hwc2_blend_mode_t mode, hwc2_error_t* outErr = nullptr) 379ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall { 380ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_BLEND_MODE>( 381ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_BLEND_MODE)); 382ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 383ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 384ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 385ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall mode)); 386ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall if (outErr) { 387ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall *outErr = err; 388ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall } else { 389ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer blend mode " 390ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall << getBlendModeName(mode); 391ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall } 392ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall } 393ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 394ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall void setLayerColor(hwc2_display_t display, hwc2_layer_t layer, 395ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall hwc_color_t color, hwc2_error_t* outErr = nullptr) 396ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall { 397ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_COLOR>( 398ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_COLOR)); 399ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 400ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 401ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 402ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall color)); 403ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall if (outErr) { 404ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall *outErr = err; 405ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall } else { 406ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer color"; 407ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall } 408ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall } 409ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 410b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall void setLayerDataspace(hwc2_display_t display, hwc2_layer_t layer, 411b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall android_dataspace_t dataspace, hwc2_error_t* outErr = nullptr) 412b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall { 413b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_DATASPACE>( 414b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_DATASPACE)); 415b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 416b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 417b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 418b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall layer, dataspace)); 419b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall if (outErr) { 420b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall *outErr = err; 421b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall } else { 422b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer dataspace"; 423b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall } 424b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall } 425b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 426600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall void setLayerDisplayFrame(hwc2_display_t display, hwc2_layer_t layer, 427600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall const hwc_rect_t& displayFrame, hwc2_error_t* outErr = nullptr) 428600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall { 429600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_DISPLAY_FRAME>( 430600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_DISPLAY_FRAME)); 431600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 432600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 433600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 434600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall displayFrame)); 435600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall if (outErr) { 436600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall *outErr = err; 437600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall } else { 438600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer display" 439600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall " frame"; 440600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall } 441600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall } 442600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 4432b1f53060ea8587a428f826cf7890354ff124722Marissa Wall void setLayerPlaneAlpha(hwc2_display_t display, hwc2_layer_t layer, 4442b1f53060ea8587a428f826cf7890354ff124722Marissa Wall float alpha, hwc2_error_t* outErr = nullptr) 4452b1f53060ea8587a428f826cf7890354ff124722Marissa Wall { 4462b1f53060ea8587a428f826cf7890354ff124722Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_PLANE_ALPHA>( 4472b1f53060ea8587a428f826cf7890354ff124722Marissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_PLANE_ALPHA)); 4482b1f53060ea8587a428f826cf7890354ff124722Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 4492b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 4502b1f53060ea8587a428f826cf7890354ff124722Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 4512b1f53060ea8587a428f826cf7890354ff124722Marissa Wall alpha)); 4522b1f53060ea8587a428f826cf7890354ff124722Marissa Wall if (outErr) { 4532b1f53060ea8587a428f826cf7890354ff124722Marissa Wall *outErr = err; 4542b1f53060ea8587a428f826cf7890354ff124722Marissa Wall } else { 4552b1f53060ea8587a428f826cf7890354ff124722Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer plane alpha " 4562b1f53060ea8587a428f826cf7890354ff124722Marissa Wall << alpha; 4572b1f53060ea8587a428f826cf7890354ff124722Marissa Wall } 4582b1f53060ea8587a428f826cf7890354ff124722Marissa Wall } 4592b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 460c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall void setLayerSourceCrop(hwc2_display_t display, hwc2_layer_t layer, 461c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall const hwc_frect_t& sourceCrop, hwc2_error_t* outErr = nullptr) 462c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall { 463c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_SOURCE_CROP>( 464c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_SOURCE_CROP)); 465c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 466c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 467c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 468c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall sourceCrop)); 469c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall if (outErr) { 470c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall *outErr = err; 471c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall } else { 472c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer source crop"; 473c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall } 474c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall } 475c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 476ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall void setLayerTransform(hwc2_display_t display, hwc2_layer_t layer, 477ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall hwc_transform_t transform, hwc2_error_t* outErr = nullptr) 478ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall { 479ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_TRANSFORM>( 480ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_TRANSFORM)); 481ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 482ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 483ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 484ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall transform)); 485ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall if (outErr) { 486ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall *outErr = err; 487ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall } else { 488ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer transform " 489ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall << getTransformName(transform); 490ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall } 491ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall } 492ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 493273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall void setLayerZOrder(hwc2_display_t display, hwc2_layer_t layer, 494273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall uint32_t zOrder, hwc2_error_t* outErr = nullptr) 495273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall { 496273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_Z_ORDER>( 497273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_Z_ORDER)); 498273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 499273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 500273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 501273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall zOrder)); 502273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall if (outErr) { 503273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall *outErr = err; 504273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } else { 505273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer z order " 506273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall << zOrder; 507273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 508273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 509273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 5104d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wallprotected: 5114d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall hwc2_function_pointer_t getFunction(hwc2_function_descriptor_t descriptor) 5124d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall { 5134d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall return mHwc2Device->getFunction(mHwc2Device, descriptor); 5144d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall } 5154d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 5164d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall void getCapabilities(std::vector<hwc2_capability_t>* outCapabilities) 5174d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall { 5184d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall uint32_t num = 0; 5194d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 5204d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall mHwc2Device->getCapabilities(mHwc2Device, &num, nullptr); 5214d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 5224d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall outCapabilities->resize(num); 5234d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 5244d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall mHwc2Device->getCapabilities(mHwc2Device, &num, 5254d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall reinterpret_cast<int32_t*>(outCapabilities->data())); 5264d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall } 5274d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 528cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall /* Registers a hotplug callback and waits for hotplug callbacks. This 529cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall * function will have no effect if called more than once. */ 530cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall void populateDisplays() 531cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall { 532cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall /* Sets the hotplug status to receiving */ 533cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall { 534cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::lock_guard<std::mutex> lock(mHotplugMutex); 535cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 536cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall if (mHotplugStatus != Hwc2TestHotplugStatus::Init) 537cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall return; 538cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall mHotplugStatus = Hwc2TestHotplugStatus::Receiving; 539cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 540cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 541cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall /* Registers the callback. This function call cannot be locked because 542cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall * a callback could happen on the same thread */ 543cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_HOTPLUG, this, 544cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall reinterpret_cast<hwc2_function_pointer_t>( 545cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2TestHotplugCallback))); 546cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 547cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall /* Waits for hotplug events. If a hotplug event has not come within 1 548cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall * second, stop waiting. */ 549cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::unique_lock<std::mutex> lock(mHotplugMutex); 550cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 551cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall while (mHotplugCv.wait_for(lock, std::chrono::seconds(1)) != 552cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::cv_status::timeout) { } 553cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 554cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall /* Sets the hotplug status to done. Future calls will have no effect */ 555cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall mHotplugStatus = Hwc2TestHotplugStatus::Done; 556cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 557cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 558cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall void getBadDisplay(hwc2_display_t* outDisplay) 559cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall { 560cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall for (hwc2_display_t display = 0; display < UINT64_MAX; display++) { 561cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall if (mDisplays.count(display) == 0) { 562cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall *outDisplay = display; 563cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall return; 564cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 565cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 566cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall ASSERT_TRUE(false) << "Unable to find bad display. UINT64_MAX displays" 567cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall " are registered. This should never happen."; 568cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 569cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 5701db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall /* NOTE: will create min(newlayerCnt, max supported layers) layers */ 5711db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall void createLayers(hwc2_display_t display, 5721db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall std::vector<hwc2_layer_t>* outLayers, size_t newLayerCnt) 5731db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall { 5741db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall std::vector<hwc2_layer_t> newLayers; 5751db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_layer_t layer; 5761db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 5771db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 5781db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (size_t i = 0; i < newLayerCnt; i++) { 5791db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 5801db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_NO_FATAL_FAILURE(createLayer(display, &layer, &err)); 5811db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall if (err == HWC2_ERROR_NO_RESOURCES) 5821db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall break; 5831db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall if (err != HWC2_ERROR_NONE) { 5841db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall newLayers.clear(); 5851db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to create layer"; 5861db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 5871db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall newLayers.push_back(layer); 5881db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 5891db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 5901db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall *outLayers = std::move(newLayers); 5911db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 5921db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 5931db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall void destroyLayers(hwc2_display_t display, 5941db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall std::vector<hwc2_layer_t>&& layers) 5951db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall { 5961db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (hwc2_layer_t layer : layers) { 5971db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 5981db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 5991db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 6001db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 601cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall void getInvalidConfig(hwc2_display_t display, hwc2_config_t* outConfig) 602cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall { 603cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs; 604cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 605cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 606cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 607cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_config_t CONFIG_MAX = UINT32_MAX; 608cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 609cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_LE(configs.size() - 1, CONFIG_MAX) << "every config value" 610cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall " (2^32 values) has been taken which shouldn't happen"; 611cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 612cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_config_t config; 613cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (config = 0; config < CONFIG_MAX; config++) { 614cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall if (std::count(configs.begin(), configs.end(), config) == 0) 615cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall break; 616cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 617cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 618cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall *outConfig = config; 619cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 620cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 621572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall void enableVsync(hwc2_display_t display) 622572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall { 623572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_VSYNC, this, 624572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall reinterpret_cast<hwc2_function_pointer_t>( 625572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2TestVsyncCallback))); 626572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE)); 627572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 628572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 629572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall void disableVsync(hwc2_display_t display) 630572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall { 631572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 632572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 633572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 634572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall void waitForVsync(hwc2_display_t* outDisplay = nullptr, 635572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall int64_t* outTimestamp = nullptr) 636572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall { 637572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall std::unique_lock<std::mutex> lock(mVsyncMutex); 638572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_EQ(mVsyncCv.wait_for(lock, std::chrono::seconds(3)), 639572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall std::cv_status::no_timeout) << "timed out attempting to get" 640572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall " vsync callback"; 641572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall if (outDisplay) 642572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall *outDisplay = mVsyncDisplay; 643572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall if (outTimestamp) 644572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall *outTimestamp = mVsyncTimestamp; 645572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 646572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 6476bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* Calls a set property function from Hwc2Test to set a property value from 6486bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * Hwc2TestLayer to hwc2_layer_t on hwc2_display_t */ 6496bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall using TestLayerPropertyFunction = void (*)(Hwc2Test* test, 6506bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_display_t display, hwc2_layer_t layer, 6516bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall const Hwc2TestLayer& testLayer, hwc2_error_t* outErr); 6526bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 653273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall /* Calls a set property function from Hwc2Test to set property values from 654273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall * Hwc2TestLayers to hwc2_layer_t on hwc2_display_t */ 655273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall using TestLayerPropertiesFunction = void (*)(Hwc2Test* test, 656273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall hwc2_display_t display, hwc2_layer_t layer, 657273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall const Hwc2TestLayers& testLayers); 658273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 6596bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* Calls a set property function from Hwc2Test to set a bad property value 6606bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * on hwc2_layer_t on hwc2_display_t */ 6616bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall using TestLayerPropertyBadLayerFunction = void (*)(Hwc2Test* test, 6626bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_display_t display, hwc2_layer_t layer, 6636bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall const Hwc2TestLayer& testLayer, hwc2_error_t* outErr); 6646bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 6656bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* Calls a set property function from Hwc2Test to set a bad property value 6666bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * on hwc2_layer_t on hwc2_display_t */ 6676bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall using TestLayerPropertyBadParameterFunction = void (*)(Hwc2Test* test, 6686bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_display_t display, hwc2_layer_t layer, hwc2_error_t* outErr); 6696bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 6706bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* Advances a property of Hwc2TestLayer */ 6716bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall using AdvanceProperty = bool (*)(Hwc2TestLayer* testLayer); 6726bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 6736bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* For each active display it cycles through each display config and tests 6746bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * each property value. It creates a layer, sets the property and then 6756bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * destroys the layer */ 6766bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall void setLayerProperty(Hwc2TestCoverage coverage, 6776bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall TestLayerPropertyFunction function, AdvanceProperty advance) 6786bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall { 6796bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto display : mDisplays) { 6806bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall std::vector<hwc2_config_t> configs; 6816bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 6826bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 6836bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 6846bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto config : configs) { 6856bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_layer_t layer; 686600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Area displayArea; 6876bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 6886bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 689600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveDisplayArea(display, 690600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall &displayArea)); 691600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Hwc2TestLayer testLayer(coverage, displayArea); 6926bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 6936bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall do { 6946bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 6956bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 6966bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(function(this, display, layer, 6976bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall testLayer, nullptr)); 6986bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 6996bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 7006bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } while (advance(&testLayer)); 7016bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 7026bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 7036bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 7046bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7056bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* For each active display it cycles through each display config and tests 7066bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * each property value. It creates a layer, cycles through each property 7076bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * value and updates the layer property value and then destroys the layer */ 7086bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall void setLayerPropertyUpdate(Hwc2TestCoverage coverage, 7096bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall TestLayerPropertyFunction function, AdvanceProperty advance) 7106bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall { 7116bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto display : mDisplays) { 7126bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall std::vector<hwc2_config_t> configs; 7136bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7146bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 7156bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7166bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto config : configs) { 7176bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_layer_t layer; 718600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Area displayArea; 7196bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7206bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 721600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveDisplayArea(display, 722600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall &displayArea)); 723600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Hwc2TestLayer testLayer(coverage, displayArea); 7246bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7256bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 7266bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7276bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall do { 7286bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(function(this, display, layer, 7296bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall testLayer, nullptr)); 7306bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } while (advance(&testLayer)); 7316bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7326bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 7336bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 7346bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 7356bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 7366bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 737273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall /* For each active display it cycles through each display config and tests 738273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall * each property value. It creates multiple layers, calls the 739273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall * TestLayerPropertiesFunction to set property values and then 740273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall * destroys the layers */ 741273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall void setLayerProperties(Hwc2TestCoverage coverage, size_t layerCnt, 742273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall TestLayerPropertiesFunction function) 743273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall { 744273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall for (auto display : mDisplays) { 745273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall std::vector<hwc2_config_t> configs; 746273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 747273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 748273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 749273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall for (auto config : configs) { 750273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall std::vector<hwc2_layer_t> layers; 751600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Area displayArea; 752273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 753273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 754600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveDisplayArea(display, 755600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall &displayArea)); 756273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 757273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayers(display, &layers, layerCnt)); 758600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Hwc2TestLayers testLayers(layers, coverage, displayArea); 759273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 760273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall for (auto layer : layers) { 761273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall EXPECT_NO_FATAL_FAILURE(function(this, display, layer, 762273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall testLayers)); 763273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 764273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 765273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayers(display, std::move(layers))); 766273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 767273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 768273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 769273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 7706bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* For each active display it cycles through each display config. 7716bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * 1) It attempts to set a valid property value to bad layer handle. 7726bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * 2) It creates a layer x and attempts to set a valid property value to 7736bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * layer x + 1 7746bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * 3) It destroys the layer x and attempts to set a valid property value to 7756bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * the destroyed layer x. 7766bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall */ 7776bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall void setLayerPropertyBadLayer(Hwc2TestCoverage coverage, 7786bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall TestLayerPropertyBadLayerFunction function) 7796bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall { 7806bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto display : mDisplays) { 7816bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall std::vector<hwc2_config_t> configs; 7826bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7836bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 7846bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7856bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto config : configs) { 7866bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_layer_t layer = 0; 787600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Area displayArea; 7886bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 7896bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7906bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 791600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveDisplayArea(display, 792600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall &displayArea)); 793600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Hwc2TestLayer testLayer(coverage, displayArea); 7946bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7956bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(function(this, display, layer, 7966bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall testLayer, &err)); 7976bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 7986bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7996bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 8006bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 8016bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(function(this, display, layer + 1, 8026bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall testLayer, &err)); 8036bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 8046bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 8056bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 8066bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 8076bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(function(this, display, layer, 8086bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall testLayer, &err)); 8096bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 8106bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 8116bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 8126bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 8136bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 8146bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* For each active display it cycles through each display config and tests 8156bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * each property value. It creates a layer, sets a bad property value and 8166bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * then destroys the layer */ 8176bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall void setLayerPropertyBadParameter(TestLayerPropertyBadParameterFunction function) 8186bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall { 8196bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto display : mDisplays) { 8206bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall std::vector<hwc2_config_t> configs; 8216bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 8226bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 8236bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 8246bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto config : configs) { 8256bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_layer_t layer; 8266bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 8276bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 8286bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 8296bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 8306bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 8316bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 8326bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(function(this, display, layer, &err)); 8336bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_PARAMETER) << "returned wrong" 8346bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall " error code"; 8356bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 8366bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 8376bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 8386bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 8396bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 8406bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 841600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall void getActiveConfigAttribute(hwc2_display_t display, 842600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall hwc2_attribute_t attribute, int32_t* outValue) 843600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall { 844600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall hwc2_config_t config; 845600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveConfig(display, &config)); 846600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, 847600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall attribute, outValue)); 848600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_GE(*outValue, 0) << "failed to get valid " 849600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall << getAttributeName(attribute); 850600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall } 851600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 852600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall void getActiveDisplayArea(hwc2_display_t display, Area* displayArea) 853600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall { 854600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveConfigAttribute(display, 855600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall HWC2_ATTRIBUTE_WIDTH, &displayArea->width)); 856600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveConfigAttribute(display, 857600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall HWC2_ATTRIBUTE_HEIGHT, &displayArea->height)); 858600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall } 859600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 8604d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall hwc2_device_t* mHwc2Device = nullptr; 861cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 862cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall enum class Hwc2TestHotplugStatus { 863cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall Init = 1, 864cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall Receiving, 865cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall Done, 866cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall }; 867cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 868cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::mutex mHotplugMutex; 869cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::condition_variable mHotplugCv; 870cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall Hwc2TestHotplugStatus mHotplugStatus = Hwc2TestHotplugStatus::Init; 871cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::unordered_set<hwc2_display_t> mDisplays; 8721db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 8731db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall /* Store all created layers that have not been destroyed. If an ASSERT_* 8741db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall * fails, then destroy the layers on exit */ 8751db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall std::set<std::pair<hwc2_display_t, hwc2_layer_t>> mLayers; 87603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 87703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall /* Store the power mode state. If it is not HWC2_POWER_MODE_OFF when 87803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall * tearing down the test cases, change it to HWC2_POWER_MODE_OFF */ 87903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall std::set<hwc2_display_t> mActiveDisplays; 880572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 881572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall std::mutex mVsyncMutex; 882572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall std::condition_variable mVsyncCv; 883572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_display_t mVsyncDisplay; 884572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall int64_t mVsyncTimestamp = -1; 8854d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall}; 8864d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 887cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wallvoid hwc2TestHotplugCallback(hwc2_callback_data_t callbackData, 888cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2_display_t display, int32_t connection) 889cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall{ 890cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall if (callbackData) 891cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall static_cast<Hwc2Test*>(callbackData)->hotplugCallback(display, 892cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall connection); 893cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall} 894cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 895572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wallvoid hwc2TestVsyncCallback(hwc2_callback_data_t callbackData, 896572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_display_t display, int64_t timestamp) 897572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 898572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall if (callbackData) 899572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall static_cast<Hwc2Test*>(callbackData)->vsyncCallback(display, 900572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall timestamp); 901572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 902572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 903ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wallvoid setBlendMode(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 904ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall const Hwc2TestLayer& testLayer, hwc2_error_t* outErr) 905ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall{ 906ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerBlendMode(display, layer, 907ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall testLayer.getBlendMode(), outErr)); 908ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall} 909ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 910ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wallvoid setColor(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 911ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall const Hwc2TestLayer& testLayer, hwc2_error_t* outErr) 912ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall{ 913ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerCompositionType(display, 914ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall layer, HWC2_COMPOSITION_SOLID_COLOR)); 915ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerPlaneAlpha(display, 916ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall layer, testLayer.getPlaneAlpha())); 917ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerBlendMode(display, 918ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall layer, testLayer.getBlendMode())); 919ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerColor(display, layer, 920ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall testLayer.getColor(), outErr)); 921ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall} 922ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 9236bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wallvoid setComposition(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 9246bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall const Hwc2TestLayer& testLayer, hwc2_error_t* outErr) 9256bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall{ 9266bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_composition_t composition = testLayer.getComposition(); 9276bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 9286bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 9296bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerCompositionType(display, layer, 9306bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall composition, &err)); 9316bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall if (outErr) { 9326bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall *outErr = err; 9336bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall return; 9346bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 9356bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 9366bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall if (composition != HWC2_COMPOSITION_SIDEBAND) { 9376bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall EXPECT_EQ(err, HWC2_ERROR_NONE) << "returned wrong error code"; 9386bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } else { 9396bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall EXPECT_TRUE(err == HWC2_ERROR_NONE || err == HWC2_ERROR_UNSUPPORTED) 9406bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall << "returned wrong error code"; 9416bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 9426bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall} 9436bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 9442a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wallvoid setCursorPosition(Hwc2Test* test, hwc2_display_t display, 9452a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall hwc2_layer_t layer, const Hwc2TestLayer& testLayer, hwc2_error_t* outErr) 9462a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall{ 9472a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerCompositionType(display, 9482a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall layer, HWC2_COMPOSITION_CURSOR)); 9492a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 9502a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall const hwc_rect_t cursorPosition = testLayer.getCursorPosition(); 9512a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setCursorPosition(display, layer, 9522a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall cursorPosition.left, cursorPosition.top, outErr)); 9532a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall} 9542a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 955b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wallvoid setDataspace(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 956b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall const Hwc2TestLayer& testLayer, hwc2_error_t* outErr) 957b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall{ 958b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerDataspace(display, layer, 959b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall testLayer.getDataspace(), outErr)); 960b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall} 961b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 962600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wallvoid setDisplayFrame(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 963600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall const Hwc2TestLayer& testLayer, hwc2_error_t* outErr) 964600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall{ 965600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerDisplayFrame(display, layer, 966600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall testLayer.getDisplayFrame(), outErr)); 967600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall} 968600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 9692b1f53060ea8587a428f826cf7890354ff124722Marissa Wallvoid setPlaneAlpha(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 9702b1f53060ea8587a428f826cf7890354ff124722Marissa Wall const Hwc2TestLayer& testLayer, hwc2_error_t *outErr) 9712b1f53060ea8587a428f826cf7890354ff124722Marissa Wall{ 9722b1f53060ea8587a428f826cf7890354ff124722Marissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerBlendMode(display, layer, 9732b1f53060ea8587a428f826cf7890354ff124722Marissa Wall testLayer.getBlendMode())); 9742b1f53060ea8587a428f826cf7890354ff124722Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerPlaneAlpha(display, layer, 9752b1f53060ea8587a428f826cf7890354ff124722Marissa Wall testLayer.getPlaneAlpha(), outErr)); 9762b1f53060ea8587a428f826cf7890354ff124722Marissa Wall} 9772b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 978c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wallvoid setSourceCrop(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 979c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall const Hwc2TestLayer& testLayer, hwc2_error_t* outErr) 980c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall{ 981c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerSourceCrop(display, layer, 982c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall testLayer.getSourceCrop(), outErr)); 983c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall} 984c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 985ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wallvoid setTransform(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 986ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall const Hwc2TestLayer& testLayer, hwc2_error_t* outErr) 987ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall{ 988ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerTransform(display, layer, 989ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall testLayer.getTransform(), outErr)); 990ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall} 991ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 992273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wallvoid setZOrder(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 993273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall const Hwc2TestLayer& testLayer, hwc2_error_t* outErr) 994273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall{ 995273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerZOrder(display, layer, 996273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall testLayer.getZOrder(), outErr)); 997273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall} 998273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 999ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wallbool advanceBlendMode(Hwc2TestLayer* testLayer) 1000ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall{ 1001ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall return testLayer->advanceBlendMode(); 1002ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall} 1003ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 1004ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wallbool advanceColor(Hwc2TestLayer* testLayer) 1005ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall{ 1006ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall /* Color depends on blend mode so advance blend mode last so color is not 1007ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall * force to update as often */ 1008ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall if (testLayer->advancePlaneAlpha()) 1009ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall return true; 1010ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall if (testLayer->advanceColor()) 1011ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall return true; 1012ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall return testLayer->advanceBlendMode(); 1013ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall} 1014ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 10156bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wallbool advanceComposition(Hwc2TestLayer* testLayer) 10166bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall{ 10176bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall return testLayer->advanceComposition(); 10186bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall} 10196bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 10202a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wallbool advanceCursorPosition(Hwc2TestLayer* testLayer) 10212a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall{ 10222a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall return testLayer->advanceCursorPosition(); 10232a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall} 10242a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 1025b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wallbool advanceDataspace(Hwc2TestLayer* testLayer) 1026b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall{ 1027b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall return testLayer->advanceDataspace(); 1028b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall} 1029b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 1030600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wallbool advanceDisplayFrame(Hwc2TestLayer* testLayer) 1031600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall{ 1032600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall return testLayer->advanceDisplayFrame(); 1033600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall} 1034600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 10352b1f53060ea8587a428f826cf7890354ff124722Marissa Wallbool advancePlaneAlpha(Hwc2TestLayer* testLayer) 10362b1f53060ea8587a428f826cf7890354ff124722Marissa Wall{ 10372b1f53060ea8587a428f826cf7890354ff124722Marissa Wall return testLayer->advancePlaneAlpha(); 10382b1f53060ea8587a428f826cf7890354ff124722Marissa Wall} 10392b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 1040c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wallbool advanceSourceCrop(Hwc2TestLayer* testLayer) 1041c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall{ 1042c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall if (testLayer->advanceSourceCrop()) 1043c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall return true; 1044c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall return testLayer->advanceBufferArea(); 1045c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall} 1046c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 1047ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wallbool advanceTransform(Hwc2TestLayer* testLayer) 1048ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall{ 1049ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall return testLayer->advanceTransform(); 1050ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall} 1051ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 10524d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 10534d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wallstatic const std::array<hwc2_function_descriptor_t, 42> requiredFunctions = {{ 10544d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_ACCEPT_DISPLAY_CHANGES, 10554d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_CREATE_LAYER, 10564d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_CREATE_VIRTUAL_DISPLAY, 10574d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_DESTROY_LAYER, 10584d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_DESTROY_VIRTUAL_DISPLAY, 10594d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_DUMP, 10604d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_ACTIVE_CONFIG, 10614d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_CHANGED_COMPOSITION_TYPES, 10624d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_CLIENT_TARGET_SUPPORT, 10634d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_COLOR_MODES, 10644d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_DISPLAY_ATTRIBUTE, 10654d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_DISPLAY_CONFIGS, 10664d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_DISPLAY_NAME, 10674d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_DISPLAY_REQUESTS, 10684d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_DISPLAY_TYPE, 10694d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_DOZE_SUPPORT, 10704d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_HDR_CAPABILITIES, 10714d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_MAX_VIRTUAL_DISPLAY_COUNT, 10724d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_RELEASE_FENCES, 10734d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_PRESENT_DISPLAY, 10744d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_REGISTER_CALLBACK, 10754d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_ACTIVE_CONFIG, 10764d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_CLIENT_TARGET, 10774d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_COLOR_MODE, 10784d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_COLOR_TRANSFORM, 10794d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_CURSOR_POSITION, 10804d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_BLEND_MODE, 10814d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_BUFFER, 10824d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_COLOR, 10834d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_COMPOSITION_TYPE, 10844d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_DATASPACE, 10854d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_DISPLAY_FRAME, 10864d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_PLANE_ALPHA, 10874d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_SOURCE_CROP, 10884d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_SURFACE_DAMAGE, 10894d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_TRANSFORM, 10904d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_VISIBLE_REGION, 10914d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_Z_ORDER, 10924d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_OUTPUT_BUFFER, 10934d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_POWER_MODE, 10944d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_VSYNC_ENABLED, 10954d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_VALIDATE_DISPLAY, 10964d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall}}; 10974d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 10984d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall/* TESTCASE: Tests that the HWC2 supports all required functions. */ 10994d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa WallTEST_F(Hwc2Test, GET_FUNCTION) 11004d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall{ 11014d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall for (hwc2_function_descriptor_t descriptor : requiredFunctions) { 11024d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall hwc2_function_pointer_t pfn = getFunction(descriptor); 11034d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall EXPECT_TRUE(pfn) << "failed to get function " 11044d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall << getFunctionDescriptorName(descriptor); 11054d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall } 11064d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall} 11074d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 11084d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall/* TESTCASE: Tests that the HWC2 fails to retrieve and invalid function. */ 11094d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa WallTEST_F(Hwc2Test, GET_FUNCTION_invalid_function) 11104d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall{ 11114d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall hwc2_function_pointer_t pfn = getFunction(HWC2_FUNCTION_INVALID); 11124d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall EXPECT_FALSE(pfn) << "failed to get invalid function"; 11134d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall} 11144d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 11154d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall/* TESTCASE: Tests that the HWC2 does not return an invalid capability. */ 11164d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa WallTEST_F(Hwc2Test, GET_CAPABILITIES) 11174d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall{ 11184d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall std::vector<hwc2_capability_t> capabilities; 11194d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 11204d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall getCapabilities(&capabilities); 11214d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 11224d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall EXPECT_EQ(std::count(capabilities.begin(), capabilities.end(), 11234d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_CAPABILITY_INVALID), 0); 11244d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall} 1125a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 1126a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wallstatic const std::array<hwc2_callback_descriptor_t, 3> callbackDescriptors = {{ 1127a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall HWC2_CALLBACK_HOTPLUG, 1128a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall HWC2_CALLBACK_REFRESH, 1129a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall HWC2_CALLBACK_VSYNC, 1130a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall}}; 1131a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 1132a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall/* TESTCASE: Tests that the HWC2 can successfully register all required 1133a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall * callback functions. */ 1134a4b01488e852c0c16df89d04914e6f060dd862e3Marissa WallTEST_F(Hwc2Test, REGISTER_CALLBACK) 1135a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall{ 1136a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall hwc2_callback_data_t data = reinterpret_cast<hwc2_callback_data_t>( 1137a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall const_cast<char*>("data")); 1138a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 1139a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall for (auto descriptor : callbackDescriptors) { 1140a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(descriptor, data, 1141a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall []() { return; })); 1142a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall } 1143a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall} 1144a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 1145a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall/* TESTCASE: Test that the HWC2 fails to register invalid callbacks. */ 1146a4b01488e852c0c16df89d04914e6f060dd862e3Marissa WallTEST_F(Hwc2Test, REGISTER_CALLBACK_bad_parameter) 1147a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall{ 1148a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall hwc2_callback_data_t data = reinterpret_cast<hwc2_callback_data_t>( 1149a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall const_cast<char*>("data")); 1150a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 1151a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 1152a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_INVALID, data, 1153a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall []() { return; }, &err)); 1154a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_PARAMETER) << "returned wrong error code"; 1155a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall} 1156a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 1157a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall/* TESTCASE: Tests that the HWC2 can register a callback with null data. */ 1158a4b01488e852c0c16df89d04914e6f060dd862e3Marissa WallTEST_F(Hwc2Test, REGISTER_CALLBACK_null_data) 1159a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall{ 1160a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall hwc2_callback_data_t data = nullptr; 1161a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 1162a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall for (auto descriptor : callbackDescriptors) { 1163a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(descriptor, data, 1164a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall []() { return; })); 1165a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall } 1166a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall} 1167cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1168cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall/* TESTCASE: Tests that the HWC2 returns the correct display type for each 1169cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall * physical display. */ 1170cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa WallTEST_F(Hwc2Test, GET_DISPLAY_TYPE) 1171cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall{ 1172cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall for (auto display : mDisplays) { 1173cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2_display_type_t type; 1174cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1175cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayType(display, &type)); 1176cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall EXPECT_EQ(type, HWC2_DISPLAY_TYPE_PHYSICAL) << "failed to return" 1177cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall " correct display type"; 1178cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 1179cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall} 1180cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1181cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall/* TESTCASE: Tests that the HWC2 returns an error when the display type of a bad 1182cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall * display is requested. */ 1183cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa WallTEST_F(Hwc2Test, GET_DISPLAY_TYPE_bad_display) 1184cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall{ 1185cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2_display_t display; 1186cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2_display_type_t type; 1187cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 1188cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1189cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 1190cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1191cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayType(display, &type, &err)); 1192cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 1193cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall} 11941db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 11951db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall/* TESTCASE: Tests that the HWC2 can create and destroy layers. */ 11961db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa WallTEST_F(Hwc2Test, CREATE_DESTROY_LAYER) 11971db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall{ 11981db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (auto display : mDisplays) { 11991db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_layer_t layer; 12001db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 12011db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 12021db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 12031db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 12041db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 12051db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall} 12061db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 12071db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall/* TESTCASE: Tests that the HWC2 cannot create a layer for a bad display */ 12081db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa WallTEST_F(Hwc2Test, CREATE_LAYER_bad_display) 12091db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall{ 12101db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_display_t display; 12111db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_layer_t layer; 12121db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 12131db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 12141db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 12151db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 12161db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer, &err)); 12171db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 12181db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall} 12191db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 12201db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall/* TESTCASE: Tests that the HWC2 will either support a large number of resources 12211db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall * or will return no resources. */ 12221db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa WallTEST_F(Hwc2Test, CREATE_LAYER_no_resources) 12231db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall{ 12241db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall const size_t layerCnt = 1000; 12251db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 12261db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (auto display : mDisplays) { 12271db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall std::vector<hwc2_layer_t> layers; 12281db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 12291db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(createLayers(display, &layers, layerCnt)); 12301db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 12311db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayers(display, std::move(layers))); 12321db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 12331db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall} 12341db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 12351db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall/* TESTCASE: Tests that the HWC2 cannot destroy a layer for a bad display */ 12361db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa WallTEST_F(Hwc2Test, DESTROY_LAYER_bad_display) 12371db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall{ 12381db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_display_t badDisplay; 12391db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 12401db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&badDisplay)); 12411db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 12421db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (auto display : mDisplays) { 12431db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_layer_t layer = 0; 12441db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 12451db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 12461db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(badDisplay, layer, &err)); 12471db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 12481db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 12491db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 12501db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 12511db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(badDisplay, layer, &err)); 12521db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 12531db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 12541db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 12551db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 12561db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall} 12571db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 12581db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall/* TESTCASE: Tests that the HWC2 cannot destory a bad layer */ 12591db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa WallTEST_F(Hwc2Test, DESTROY_LAYER_bad_layer) 12601db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall{ 12611db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (auto display : mDisplays) { 12621db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_layer_t layer; 12631db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 12641db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 12651db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, UINT64_MAX / 2, &err)); 12661db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 12671db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 12681db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, 0, &err)); 12691db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 12701db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 12711db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, UINT64_MAX - 1, &err)); 12721db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 12731db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 12741db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, 1, &err)); 12751db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 12761db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 12771db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, UINT64_MAX, &err)); 12781db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 12791db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 12801db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 12811db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 12821db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer + 1, &err)); 12831db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 12841db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 12851db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 12861db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 12871db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer, &err)); 12881db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 12891db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 12901db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall} 1291cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1292cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wallstatic const std::array<hwc2_attribute_t, 2> requiredAttributes = {{ 1293cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall HWC2_ATTRIBUTE_WIDTH, 1294cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall HWC2_ATTRIBUTE_HEIGHT, 1295cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall}}; 1296cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1297cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wallstatic const std::array<hwc2_attribute_t, 3> optionalAttributes = {{ 1298cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall HWC2_ATTRIBUTE_VSYNC_PERIOD, 1299cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall HWC2_ATTRIBUTE_DPI_X, 1300cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall HWC2_ATTRIBUTE_DPI_Y, 1301cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall}}; 1302cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1303cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 can return display attributes for a valid 1304cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall * config. */ 1305cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_ATTRIBUTE) 1306cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 1307cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto display : mDisplays) { 1308cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs; 1309cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1310cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 1311cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1312cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto config : configs) { 1313cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall int32_t value; 1314cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1315cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto attribute : requiredAttributes) { 1316cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, 1317cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall attribute, &value)); 1318cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_GE(value, 0) << "missing required attribute " 1319cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall << getAttributeName(attribute) << " for config " 1320cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall << config; 1321cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1322cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto attribute : optionalAttributes) { 1323cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, 1324cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall attribute, &value)); 1325cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1326cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1327cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1328cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 1329cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1330cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 will return a value of -1 for an invalid 1331cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall * attribute */ 1332cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_ATTRIBUTE_invalid_attribute) 1333cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 1334cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall const hwc2_attribute_t attribute = HWC2_ATTRIBUTE_INVALID; 1335cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1336cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto display : mDisplays) { 1337cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs; 1338cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1339cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 1340cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1341cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto config : configs) { 1342cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall int32_t value; 1343cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 1344cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1345cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, 1346cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall attribute, &value, &err)); 1347cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(value, -1) << "failed to return -1 for an invalid" 1348cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall " attribute for config " << config; 1349cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1350cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1351cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 1352cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1353cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 will fail to get attributes for a bad display */ 1354cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_ATTRIBUTE_bad_display) 1355cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 1356cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_display_t display; 1357cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall const hwc2_config_t config = 0; 1358cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall int32_t value; 1359cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 1360cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1361cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 1362cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1363cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto attribute : requiredAttributes) { 1364cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, attribute, 1365cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall &value, &err)); 1366cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 1367cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1368cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1369cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto attribute : optionalAttributes) { 1370cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, attribute, 1371cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall &value, &err)); 1372cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 1373cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1374cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 1375cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1376cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 will fail to get attributes for a bad config */ 1377cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_ATTRIBUTE_bad_config) 1378cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 1379cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto display : mDisplays) { 1380cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_config_t config; 1381cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall int32_t value; 1382cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 1383cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1384cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getInvalidConfig(display, &config)); 1385cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1386cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto attribute : requiredAttributes) { 1387cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, 1388cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall attribute, &value, &err)); 1389cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_CONFIG) << "returned wrong error code"; 1390cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1391cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1392cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto attribute : optionalAttributes) { 1393cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, 1394cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall attribute, &value, &err)); 1395cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_CONFIG) << "returned wrong error code"; 1396cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1397cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1398cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 1399cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1400cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 will get display configs for active displays */ 1401cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_CONFIGS) 1402cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 1403cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto display : mDisplays) { 1404cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs; 1405cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1406cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 1407cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1408cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 1409cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1410cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 will not get display configs for bad displays */ 1411cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_CONFIGS_bad_display) 1412cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 1413cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_display_t display; 1414cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs; 1415cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 1416cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1417cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 1418cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1419cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs, &err)); 1420cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1421cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 1422cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_TRUE(configs.empty()) << "returned configs for bad display"; 1423cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 1424cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1425cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 will return the same config list multiple 1426cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall * times in a row. */ 1427cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_CONFIGS_same) 1428cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 1429cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto display : mDisplays) { 1430cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs1, configs2; 1431cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1432cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs1)); 1433cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs2)); 1434cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1435cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_TRUE(std::is_permutation(configs1.begin(), configs1.end(), 1436cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall configs2.begin())) << "returned two different config sets"; 1437cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1438cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 1439cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1440cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 does not return duplicate display configs */ 1441cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_CONFIGS_duplicate) 1442cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 1443cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto display : mDisplays) { 1444cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs; 1445cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1446cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 1447cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1448cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::unordered_set<hwc2_config_t> configsSet(configs.begin(), 1449cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall configs.end()); 1450cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(configs.size(), configsSet.size()) << "returned duplicate" 1451cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall " configs"; 1452cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1453cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 145493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 145593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall/* TESTCASE: Tests that the HWC2 returns the active config for a display */ 145693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa WallTEST_F(Hwc2Test, GET_ACTIVE_CONFIG) 145793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall{ 145893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall for (auto display : mDisplays) { 145993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall std::vector<hwc2_config_t> configs; 146093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 146193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 146293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 146393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall for (auto config : configs) { 146493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_config_t activeConfig; 146593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 146693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 146793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveConfig(display, &activeConfig)); 146893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 146993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_EQ(activeConfig, config) << "failed to get active config"; 147093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 147193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 147293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall} 147393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 147493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall/* TESTCASE: Tests that the HWC2 does not return an active config for a bad 147593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall * display. */ 147693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa WallTEST_F(Hwc2Test, GET_ACTIVE_CONFIG_bad_display) 147793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall{ 147893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_display_t display; 147993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_config_t activeConfig; 148093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 148193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 148293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 148393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 148493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveConfig(display, &activeConfig, &err)); 148593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 148693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 148793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall} 148893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 148993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall/* TESTCASE: Tests that the HWC2 either begins with a valid active config 149093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall * or returns an error when getActiveConfig is called. */ 149193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa WallTEST_F(Hwc2Test, GET_ACTIVE_CONFIG_bad_config) 149293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall{ 149393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall for (auto display : mDisplays) { 149493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall std::vector<hwc2_config_t> configs; 149593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_config_t activeConfig; 149693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 149793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 149893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 149993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 150093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall if (configs.empty()) 150193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall return; 150293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 150393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveConfig(display, &activeConfig, &err)); 150493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall if (err == HWC2_ERROR_NONE) { 150593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_NE(std::count(configs.begin(), configs.end(), 150693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall activeConfig), 0) << "active config is not found in " 150793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall " configs for display"; 150893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } else { 150993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_CONFIG) << "returned wrong error code"; 151093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 151193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 151293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall} 151393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 151493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall/* TESTCASE: Tests that the HWC2 can set every display config as an active 151593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall * config */ 151693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa WallTEST_F(Hwc2Test, SET_ACTIVE_CONFIG) 151793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall{ 151893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall for (auto display : mDisplays) { 151993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall std::vector<hwc2_config_t> configs; 152093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 152193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 152293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 152393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall for (auto config : configs) { 152493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 152593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 152693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 152793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall} 152893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 152993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set an active config for a bad display */ 153093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa WallTEST_F(Hwc2Test, SET_ACTIVE_CONFIG_bad_display) 153193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall{ 153293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_display_t display; 153393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall const hwc2_config_t config = 0; 153493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 153593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 153693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 153793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 153893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config, &err)); 153993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 154093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall} 154193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 154293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set an invalid active config */ 154393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa WallTEST_F(Hwc2Test, SET_ACTIVE_CONFIG_bad_config) 154493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall{ 154593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall for (auto display : mDisplays) { 154693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_config_t config; 154793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 154893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 154993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getInvalidConfig(display, &config)); 155093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 155193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config, &err)); 155293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_CONFIG) << "returned wrong error code"; 155393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 155493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall} 155503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 155603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 returns a valid value for getDozeSupport. */ 155703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, GET_DOZE_SUPPORT) 155803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 155903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall for (auto display : mDisplays) { 156003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall int32_t support = -1; 156103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 156203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getDozeSupport(display, &support)); 156303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 156403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_TRUE(support == 0 || support == 1) << "invalid doze support value"; 156503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 156603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 156703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 156803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 cannot get doze support for a bad display. */ 156903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, GET_DOZE_SUPPORT_bad_display) 157003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 157103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_display_t display; 157203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall int32_t support = -1; 157303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 157403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 157503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 157603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 157703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getDozeSupport(display, &support, &err)); 157803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 157903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 158003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 158103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 158203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 can set all supported power modes */ 158303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, SET_POWER_MODE) 158403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 158503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall for (auto display : mDisplays) { 158603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 158703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 158803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 158903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall int32_t support = -1; 159003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getDozeSupport(display, &support)); 159103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (support != 1) 159203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall return; 159303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 159403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_DOZE)); 159503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, 159603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall HWC2_POWER_MODE_DOZE_SUSPEND)); 159703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 159803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 159903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 160003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 160103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 160203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set a power mode for a bad display. */ 160303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, SET_POWER_MODE_bad_display) 160403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 160503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_display_t display; 160603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 160703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 160803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 160903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 161003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON, &err)); 161103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 161203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 161303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF, &err)); 161403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 161503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 161603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall int32_t support = -1; 161703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getDozeSupport(display, &support, &err)); 161803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (support != 1) 161903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall return; 162003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 162103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_DOZE, &err)); 162203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 162303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 162403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_DOZE_SUSPEND, 162503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall &err)); 162603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 162703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 162803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 162903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set an invalid power mode value. */ 163003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, SET_POWER_MODE_bad_parameter) 163103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 163203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall for (auto display : mDisplays) { 163303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_power_mode_t mode = static_cast<hwc2_power_mode_t>( 163403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall HWC2_POWER_MODE_DOZE_SUSPEND + 1); 163503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 163603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 163703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, mode, &err)); 163803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_PARAMETER) << "returned wrong error code " 163903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall << mode; 164003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 164103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 164203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 164303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 will return unsupported if it does not support 164403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall * an optional power mode. */ 164503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, SET_POWER_MODE_unsupported) 164603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 164703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall for (auto display : mDisplays) { 164803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall int32_t support = -1; 164903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 165003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 165103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getDozeSupport(display, &support, &err)); 165203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (support == 1) 165303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall return; 165403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 165503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_EQ(support, 0) << "invalid doze support value"; 165603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 165703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_DOZE, 165803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall &err)); 165903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_UNSUPPORTED) << "returned wrong error code"; 166003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 166103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, 166203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall HWC2_POWER_MODE_DOZE_SUSPEND, &err)); 166303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_UNSUPPORTED) << "returned wrong error code"; 166403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 166503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 166603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 166703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 can set the same power mode multiple times. */ 166803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, SET_POWER_MODE_stress) 166903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 167003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall for (auto display : mDisplays) { 167103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 167203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 167303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 167403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 167503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 167603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 167703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 167803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 167903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 168003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall int32_t support = -1; 168103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getDozeSupport(display, &support)); 168203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (support != 1) 168303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall return; 168403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 168503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_DOZE)); 168603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_DOZE)); 168703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 168803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, 168903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall HWC2_POWER_MODE_DOZE_SUSPEND)); 169003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, 169103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall HWC2_POWER_MODE_DOZE_SUSPEND)); 169203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 169303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 169403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 169503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 1696572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1697572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 can enable and disable vsync on active 1698572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall * displays */ 1699572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED) 1700572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 1701572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall for (auto display : mDisplays) { 1702572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_callback_data_t data = reinterpret_cast<hwc2_callback_data_t>( 1703572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall const_cast<char*>("data")); 1704572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1705572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 1706572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1707572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_VSYNC, data, 1708572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall []() { return; })); 1709572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1710572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE)); 1711572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1712572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 1713572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1714572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 1715572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 1716572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 1717572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1718572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 issues a valid vsync callback. */ 1719572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED_callback) 1720572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 1721572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall for (auto display : mDisplays) { 1722572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_display_t receivedDisplay; 1723572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall int64_t receivedTimestamp; 1724572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1725572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 1726572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1727572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(enableVsync(display)); 1728572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1729572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(waitForVsync(&receivedDisplay, 1730572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall &receivedTimestamp)); 1731572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1732572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall EXPECT_EQ(receivedDisplay, display) << "failed to get correct display"; 1733572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall EXPECT_GE(receivedTimestamp, 0) << "failed to get valid timestamp"; 1734572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1735572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(disableVsync(display)); 1736572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1737572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 1738572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 1739572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 1740572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1741572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 cannot enable a vsync for a bad display */ 1742572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED_bad_display) 1743572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 1744572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_display_t display; 1745572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_callback_data_t data = reinterpret_cast<hwc2_callback_data_t>( 1746572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall const_cast<char*>("data")); 1747572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 1748572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1749572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 1750572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1751572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_VSYNC, data, 1752572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall []() { return; })); 1753572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1754572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE, &err)); 1755572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 1756572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1757572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE, &err)); 1758572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 1759572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 1760572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1761572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 cannot enable an invalid vsync value */ 1762572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED_bad_parameter) 1763572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 1764572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall for (auto display : mDisplays) { 1765572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_callback_data_t data = reinterpret_cast<hwc2_callback_data_t>( 1766572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall const_cast<char*>("data")); 1767572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 1768572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1769572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 1770572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1771572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_VSYNC, data, 1772572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall []() { return; })); 1773572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1774572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_INVALID, 1775572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall &err)); 1776572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_PARAMETER) << "returned wrong error code"; 1777572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1778572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 1779572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 1780572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 1781572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1782572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 can enable and disable a vsync value multiple 1783572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall * times. */ 1784572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED_stress) 1785572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 1786572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall for (auto display : mDisplays) { 1787572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_callback_data_t data = reinterpret_cast<hwc2_callback_data_t>( 1788572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall const_cast<char*>("data")); 1789572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1790572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 1791572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1792572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_VSYNC, data, 1793572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall []() { return; })); 1794572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1795572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 1796572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1797572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE)); 1798572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE)); 1799572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1800572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 1801572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 1802572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1803572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 1804572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 1805572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 1806572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1807572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 can set a vsync enable value when the display 1808572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall * is off and no callback is registered. */ 1809572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED_no_callback_no_power) 1810572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 1811572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall const uint secs = 1; 1812572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1813572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall for (auto display : mDisplays) { 1814572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE)); 1815572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1816572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall sleep(secs); 1817572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1818572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 1819572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 1820572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 1821572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1822572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 can set a vsync enable value when no callback 1823572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall * is registered. */ 1824572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED_no_callback) 1825572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 1826572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall const uint secs = 1; 1827572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1828572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall for (auto display : mDisplays) { 1829572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 1830572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1831572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE)); 1832572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1833572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall sleep(secs); 1834572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1835572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 1836572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1837572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 1838572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 1839572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 1840dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 1841dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall/* TESTCASE: Tests that the HWC2 returns a display name for each display */ 1842dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa WallTEST_F(Hwc2Test, GET_DISPLAY_NAME) 1843dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall{ 1844dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall for (auto display : mDisplays) { 1845dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall std::string name; 1846dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 1847dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayName(display, &name)); 1848dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall } 1849dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall} 1850dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 1851dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall/* TESTCASE: Tests that the HWC2 does not return a display name for a bad 1852dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall * display */ 1853dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa WallTEST_F(Hwc2Test, GET_DISPLAY_NAME_bad_display) 1854dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall{ 1855dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall hwc2_display_t display; 1856dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall std::string name; 1857dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 1858dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 1859dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 1860dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 1861dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayName(display, &name, &err)); 1862dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 1863dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall} 18646bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 18656bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall/* TESTCASE: Tests that the HWC2 can set basic composition types. */ 18666bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa WallTEST_F(Hwc2Test, SET_LAYER_COMPOSITION_TYPE) 18676bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall{ 18686bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 18696bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall setComposition, advanceComposition)); 18706bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall} 18716bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 18726bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall/* TESTCASE: Tests that the HWC2 can update a basic composition type on a 18736bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * layer. */ 18746bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa WallTEST_F(Hwc2Test, SET_LAYER_COMPOSITION_TYPE_update) 18756bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall{ 18766bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 18776bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall setComposition, advanceComposition)); 18786bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall} 18796bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 18806bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set a composition type for a bad layer */ 18816bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa WallTEST_F(Hwc2Test, SET_LAYER_COMPOSITION_TYPE_bad_layer) 18826bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall{ 18836bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 18846bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall setComposition)); 18856bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall} 18866bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 18876bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set a bad composition type */ 18886bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa WallTEST_F(Hwc2Test, SET_LAYER_COMPOSITION_TYPE_bad_parameter) 18896bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall{ 18906bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadParameter( 18916bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 18926bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_error_t* outErr) { 18936bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 18946bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerCompositionType(display, 18956bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall layer, HWC2_COMPOSITION_INVALID, outErr)); 18966bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 18976bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall )); 18986bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall} 1899ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 19002a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall/* TESTCASE: Tests that the HWC2 can set the cursor position of a layer. */ 19012a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa WallTEST_F(Hwc2Test, SET_CURSOR_POSITION) 19022a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall{ 19032a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 19042a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ::setCursorPosition, advanceCursorPosition)); 19052a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall} 19062a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 19072a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall/* TESTCASE: Tests that the HWC2 can update the cursor position of a layer. */ 19082a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa WallTEST_F(Hwc2Test, SET_CURSOR_POSITION_update) 19092a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall{ 19102a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 19112a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ::setCursorPosition, advanceCursorPosition)); 19122a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall} 19132a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 19142a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall/* TESTCASE: Tests that the HWC2 can set the cursor position of a layer when the 19152a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall * composition type has not been set to HWC2_COMPOSITION_CURSOR. */ 19162a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa WallTEST_F(Hwc2Test, SET_CURSOR_POSITION_composition_type_unset) 19172a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall{ 19182a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 19192a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 19202a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall const Hwc2TestLayer& testLayer, hwc2_error_t* outErr) { 19212a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 19222a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall const hwc_rect_t cursorPosition = testLayer.getCursorPosition(); 19232a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setCursorPosition(display, layer, 19242a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall cursorPosition.left, cursorPosition.top, outErr)); 19252a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall }, 19262a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 19272a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall advanceCursorPosition)); 19282a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall} 19292a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 19302a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set the cursor position of a bad 19312a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall * display. */ 19322a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa WallTEST_F(Hwc2Test, SET_CURSOR_POSITION_bad_display) 19332a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall{ 19342a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall hwc2_display_t display; 19352a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall hwc2_layer_t layer = 0; 19362a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall int32_t x = 0, y = 0; 19372a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 19382a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 19392a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 19402a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 19412a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_NO_FATAL_FAILURE(setCursorPosition(display, layer, x, y, &err)); 19422a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 19432a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall} 19442a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 19452a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set the cursor position of a bad layer. */ 19462a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa WallTEST_F(Hwc2Test, SET_CURSOR_POSITION_bad_layer) 19472a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall{ 19482a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 19492a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t badLayer, 19502a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall const Hwc2TestLayer& testLayer, hwc2_error_t* outErr) { 19512a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 19522a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall const hwc_rect_t cursorPosition = testLayer.getCursorPosition(); 19532a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setCursorPosition(display, 19542a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall badLayer, cursorPosition.left, cursorPosition.top, 19552a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall outErr)); 19562a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall } 19572a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall )); 19582a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall} 19592a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 1960ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall/* TESTCASE: Tests that the HWC2 can set a blend mode value of a layer. */ 1961ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa WallTEST_F(Hwc2Test, SET_LAYER_BLEND_MODE) 1962ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall{ 1963ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 1964ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall setBlendMode, advanceBlendMode)); 1965ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall} 1966ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 1967ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall/* TESTCASE: Tests that the HWC2 can update a blend mode value of a layer. */ 1968ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa WallTEST_F(Hwc2Test, SET_LAYER_BLEND_MODE_update) 1969ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall{ 1970ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 1971ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall setBlendMode, advanceBlendMode)); 1972ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall} 1973ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 1974ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set a blend mode for a bad layer. */ 1975ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa WallTEST_F(Hwc2Test, SET_LAYER_BLEND_MODE_bad_layer) 1976ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall{ 1977ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 1978ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall setBlendMode)); 1979ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall} 1980ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 1981ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set an invalid blend mode. */ 1982ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa WallTEST_F(Hwc2Test, SET_LAYER_BLEND_MODE_bad_parameter) 1983ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall{ 1984ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadParameter( 1985ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 1986ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall hwc2_error_t* outErr) { 1987ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 1988ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerBlendMode(display, 1989ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall layer, HWC2_BLEND_MODE_INVALID, outErr)); 1990ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall } 1991ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall )); 1992ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall} 1993b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 1994ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall/* TESTCASE: Tests that the HWC2 can set the color of a layer. */ 1995ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa WallTEST_F(Hwc2Test, SET_LAYER_COLOR) 1996ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall{ 1997ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 1998ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall setColor, advanceColor)); 1999ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall} 2000ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 2001ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall/* TESTCASE: Tests that the HWC2 can update the color of a layer. */ 2002ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa WallTEST_F(Hwc2Test, SET_LAYER_COLOR_update) 2003ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall{ 2004ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 2005ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall setColor, advanceColor)); 2006ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall} 2007ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 2008ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall/* TESTCASE: Tests that the HWC2 can set the color of a layer when the 2009ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall * composition type has not been set to HWC2_COMPOSITION_SOLID_COLOR. */ 2010ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa WallTEST_F(Hwc2Test, SET_LAYER_COLOR_composition_type_unset) 2011ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall{ 2012ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Basic, 2013ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 2014ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall const Hwc2TestLayer& testLayer, hwc2_error_t* outErr) { 2015ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 2016ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerColor(display, layer, 2017ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall testLayer.getColor(), outErr)); 2018ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall }, 2019ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 2020ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall advanceColor)); 2021ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall} 2022ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 2023ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set the color of a bad layer. */ 2024ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa WallTEST_F(Hwc2Test, SET_LAYER_COLOR_bad_layer) 2025ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall{ 2026ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 2027ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t badLayer, 2028ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall const Hwc2TestLayer& testLayer, hwc2_error_t* outErr) { 2029ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 2030ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerColor(display, badLayer, 2031ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall testLayer.getColor(), outErr)); 2032ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall } 2033ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall )); 2034ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall} 2035ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 2036b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall/* TESTCASE: Tests that the HWC2 can set the dataspace of a layer. */ 2037b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa WallTEST_F(Hwc2Test, SET_LAYER_DATASPACE) 2038b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall{ 2039b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 2040b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall setDataspace, advanceDataspace)); 2041b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall} 2042b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 2043b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall/* TESTCASE: Tests that the HWC2 can update the dataspace of a layer. */ 2044b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa WallTEST_F(Hwc2Test, SET_LAYER_DATASPACE_update) 2045b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall{ 2046b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 2047b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall setDataspace, advanceDataspace)); 2048b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall} 2049b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 2050b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set a dataspace for a bad layer. */ 2051b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa WallTEST_F(Hwc2Test, SET_LAYER_DATASPACE_bad_layer) 2052b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall{ 2053b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 2054b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall setDataspace)); 2055b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall} 20562b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 2057600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall/* TESTCASE: Tests that the HWC2 can set the display frame of a layer. */ 2058600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa WallTEST_F(Hwc2Test, SET_LAYER_DISPLAY_FRAME) 2059600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall{ 2060600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 2061600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall setDisplayFrame, advanceDisplayFrame)); 2062600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall} 2063600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 2064600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall/* TESTCASE: Tests that the HWC2 can update the display frame of a layer. */ 2065600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa WallTEST_F(Hwc2Test, SET_LAYER_DISPLAY_FRAME_update) 2066600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall{ 2067600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 2068600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall setDisplayFrame, advanceDisplayFrame)); 2069600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall} 2070600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 2071600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set the display frame of a bad layer. */ 2072600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa WallTEST_F(Hwc2Test, SET_LAYER_DISPLAY_FRAME_bad_layer) 2073600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall{ 2074600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 2075600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall setDisplayFrame)); 2076600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall} 2077600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 20782b1f53060ea8587a428f826cf7890354ff124722Marissa Wall/* TESTCASE: Tests that the HWC2 can set the plane alpha of a layer. */ 20792b1f53060ea8587a428f826cf7890354ff124722Marissa WallTEST_F(Hwc2Test, SET_LAYER_PLANE_ALPHA) 20802b1f53060ea8587a428f826cf7890354ff124722Marissa Wall{ 20812b1f53060ea8587a428f826cf7890354ff124722Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 20822b1f53060ea8587a428f826cf7890354ff124722Marissa Wall setPlaneAlpha, advancePlaneAlpha)); 20832b1f53060ea8587a428f826cf7890354ff124722Marissa Wall} 20842b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 20852b1f53060ea8587a428f826cf7890354ff124722Marissa Wall/* TESTCASE: Tests that the HWC2 can update the plane alpha of a layer. */ 20862b1f53060ea8587a428f826cf7890354ff124722Marissa WallTEST_F(Hwc2Test, SET_LAYER_PLANE_ALPHA_update) 20872b1f53060ea8587a428f826cf7890354ff124722Marissa Wall{ 20882b1f53060ea8587a428f826cf7890354ff124722Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 20892b1f53060ea8587a428f826cf7890354ff124722Marissa Wall setPlaneAlpha, advancePlaneAlpha)); 20902b1f53060ea8587a428f826cf7890354ff124722Marissa Wall} 20912b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 20922b1f53060ea8587a428f826cf7890354ff124722Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set a plane alpha for a bad layer. */ 20932b1f53060ea8587a428f826cf7890354ff124722Marissa WallTEST_F(Hwc2Test, SET_LAYER_PLANE_ALPHA_bad_layer) 20942b1f53060ea8587a428f826cf7890354ff124722Marissa Wall{ 20952b1f53060ea8587a428f826cf7890354ff124722Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 20962b1f53060ea8587a428f826cf7890354ff124722Marissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t badLayer, 20972b1f53060ea8587a428f826cf7890354ff124722Marissa Wall const Hwc2TestLayer& testLayer, hwc2_error_t *outErr) { 20982b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 20992b1f53060ea8587a428f826cf7890354ff124722Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerPlaneAlpha(display, 21002b1f53060ea8587a428f826cf7890354ff124722Marissa Wall badLayer, testLayer.getPlaneAlpha(), outErr)); 21012b1f53060ea8587a428f826cf7890354ff124722Marissa Wall } 21022b1f53060ea8587a428f826cf7890354ff124722Marissa Wall )); 21032b1f53060ea8587a428f826cf7890354ff124722Marissa Wall} 2104ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 2105c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall/* TESTCASE: Tests that the HWC2 can set the source crop of a layer. */ 2106c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa WallTEST_F(Hwc2Test, SET_LAYER_SOURCE_CROP) 2107c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall{ 2108c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 2109c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall setSourceCrop, advanceSourceCrop)); 2110c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall} 2111c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 2112c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall/* TESTCASE: Tests that the HWC2 can update the source crop of a layer. */ 2113c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa WallTEST_F(Hwc2Test, SET_LAYER_SOURCE_CROP_update) 2114c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall{ 2115c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 2116c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall setSourceCrop, advanceSourceCrop)); 2117c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall} 2118c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 2119c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set the source crop of a bad layer. */ 2120c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa WallTEST_F(Hwc2Test, SET_LAYER_SOURCE_CROP_bad_layer) 2121c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall{ 2122c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 2123c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall setSourceCrop)); 2124c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall} 2125c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 2126ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall/* TESTCASE: Tests that the HWC2 can set the transform value of a layer. */ 2127ac10819373b1ed4901f26c822484a789a7ca4be0Marissa WallTEST_F(Hwc2Test, SET_LAYER_TRANSFORM) 2128ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall{ 2129ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 2130ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall setTransform, advanceTransform)); 2131ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall} 2132ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 2133ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall/* TESTCASE: Tests that the HWC2 can update the transform value of a layer. */ 2134ac10819373b1ed4901f26c822484a789a7ca4be0Marissa WallTEST_F(Hwc2Test, SET_LAYER_TRANSFORM_update) 2135ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall{ 2136ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 2137ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall setTransform, advanceTransform)); 2138ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall} 2139ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 2140ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set the transform for a bad layer. */ 2141ac10819373b1ed4901f26c822484a789a7ca4be0Marissa WallTEST_F(Hwc2Test, SET_LAYER_TRANSFORM_bad_layer) 2142ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall{ 2143ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 2144ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall setTransform)); 2145ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall} 2146273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 2147273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall/* TESTCASE: Tests that the HWC2 can set the z order of a layer. */ 2148273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa WallTEST_F(Hwc2Test, SET_LAYER_Z_ORDER) 2149273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall{ 2150273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperties(Hwc2TestCoverage::Complete, 10, 2151273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 2152273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall const Hwc2TestLayers& testLayers) { 2153273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 2154273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerZOrder(display, layer, 2155273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall testLayers.getZOrder(layer))); 2156273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 2157273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall )); 2158273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall} 2159273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 2160273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall/* TESTCASE: Tests that the HWC2 can update the z order of a layer. */ 2161273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa WallTEST_F(Hwc2Test, SET_LAYER_Z_ORDER_update) 2162273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall{ 2163273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall const std::vector<uint32_t> zOrders = { static_cast<uint32_t>(0), 2164273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall static_cast<uint32_t>(1), static_cast<uint32_t>(UINT32_MAX / 4), 2165273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall static_cast<uint32_t>(UINT32_MAX / 2), 2166273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall static_cast<uint32_t>(UINT32_MAX) }; 2167273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 2168273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall for (auto display : mDisplays) { 2169273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall std::vector<hwc2_config_t> configs; 2170273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 2171273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 2172273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 2173273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall for (auto config : configs) { 2174273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall hwc2_layer_t layer; 2175273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 2176273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 2177273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 2178273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 2179273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 2180273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall for (uint32_t zOrder : zOrders) { 2181273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall EXPECT_NO_FATAL_FAILURE(setLayerZOrder(display, layer, zOrder)); 2182273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 2183273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 2184273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 2185273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 2186273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 2187273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall} 2188273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 2189273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set the z order of a bad layer. */ 2190273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa WallTEST_F(Hwc2Test, SET_LAYER_Z_ORDER_bad_layer) 2191273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall{ 2192273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 2193273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall setZOrder)); 2194273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall} 2195