Hwc2Test.cpp revision 600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7
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 361ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall void setLayerBlendMode(hwc2_display_t display, hwc2_layer_t layer, 362ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall hwc2_blend_mode_t mode, hwc2_error_t* outErr = nullptr) 363ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall { 364ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_BLEND_MODE>( 365ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_BLEND_MODE)); 366ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 367ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 368ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 369ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall mode)); 370ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall if (outErr) { 371ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall *outErr = err; 372ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall } else { 373ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer blend mode " 374ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall << getBlendModeName(mode); 375ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall } 376ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall } 377ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 378b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall void setLayerDataspace(hwc2_display_t display, hwc2_layer_t layer, 379b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall android_dataspace_t dataspace, hwc2_error_t* outErr = nullptr) 380b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall { 381b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_DATASPACE>( 382b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_DATASPACE)); 383b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 384b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 385b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 386b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall layer, dataspace)); 387b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall if (outErr) { 388b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall *outErr = err; 389b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall } else { 390b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer dataspace"; 391b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall } 392b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall } 393b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 394600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall void setLayerDisplayFrame(hwc2_display_t display, hwc2_layer_t layer, 395600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall const hwc_rect_t& displayFrame, hwc2_error_t* outErr = nullptr) 396600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall { 397600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_DISPLAY_FRAME>( 398600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_DISPLAY_FRAME)); 399600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 400600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 401600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 402600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall displayFrame)); 403600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall if (outErr) { 404600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall *outErr = err; 405600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall } else { 406600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer display" 407600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall " frame"; 408600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall } 409600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall } 410600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 4112b1f53060ea8587a428f826cf7890354ff124722Marissa Wall void setLayerPlaneAlpha(hwc2_display_t display, hwc2_layer_t layer, 4122b1f53060ea8587a428f826cf7890354ff124722Marissa Wall float alpha, hwc2_error_t* outErr = nullptr) 4132b1f53060ea8587a428f826cf7890354ff124722Marissa Wall { 4142b1f53060ea8587a428f826cf7890354ff124722Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_PLANE_ALPHA>( 4152b1f53060ea8587a428f826cf7890354ff124722Marissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_PLANE_ALPHA)); 4162b1f53060ea8587a428f826cf7890354ff124722Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 4172b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 4182b1f53060ea8587a428f826cf7890354ff124722Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 4192b1f53060ea8587a428f826cf7890354ff124722Marissa Wall alpha)); 4202b1f53060ea8587a428f826cf7890354ff124722Marissa Wall if (outErr) { 4212b1f53060ea8587a428f826cf7890354ff124722Marissa Wall *outErr = err; 4222b1f53060ea8587a428f826cf7890354ff124722Marissa Wall } else { 4232b1f53060ea8587a428f826cf7890354ff124722Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer plane alpha " 4242b1f53060ea8587a428f826cf7890354ff124722Marissa Wall << alpha; 4252b1f53060ea8587a428f826cf7890354ff124722Marissa Wall } 4262b1f53060ea8587a428f826cf7890354ff124722Marissa Wall } 4272b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 428ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall void setLayerTransform(hwc2_display_t display, hwc2_layer_t layer, 429ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall hwc_transform_t transform, hwc2_error_t* outErr = nullptr) 430ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall { 431ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_TRANSFORM>( 432ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_TRANSFORM)); 433ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 434ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 435ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 436ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall transform)); 437ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall if (outErr) { 438ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall *outErr = err; 439ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall } else { 440ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer transform " 441ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall << getTransformName(transform); 442ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall } 443ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall } 444ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 445273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall void setLayerZOrder(hwc2_display_t display, hwc2_layer_t layer, 446273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall uint32_t zOrder, hwc2_error_t* outErr = nullptr) 447273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall { 448273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_Z_ORDER>( 449273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_Z_ORDER)); 450273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 451273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 452273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 453273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall zOrder)); 454273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall if (outErr) { 455273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall *outErr = err; 456273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } else { 457273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer z order " 458273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall << zOrder; 459273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 460273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 461273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 4624d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wallprotected: 4634d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall hwc2_function_pointer_t getFunction(hwc2_function_descriptor_t descriptor) 4644d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall { 4654d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall return mHwc2Device->getFunction(mHwc2Device, descriptor); 4664d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall } 4674d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 4684d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall void getCapabilities(std::vector<hwc2_capability_t>* outCapabilities) 4694d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall { 4704d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall uint32_t num = 0; 4714d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 4724d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall mHwc2Device->getCapabilities(mHwc2Device, &num, nullptr); 4734d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 4744d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall outCapabilities->resize(num); 4754d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 4764d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall mHwc2Device->getCapabilities(mHwc2Device, &num, 4774d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall reinterpret_cast<int32_t*>(outCapabilities->data())); 4784d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall } 4794d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 480cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall /* Registers a hotplug callback and waits for hotplug callbacks. This 481cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall * function will have no effect if called more than once. */ 482cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall void populateDisplays() 483cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall { 484cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall /* Sets the hotplug status to receiving */ 485cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall { 486cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::lock_guard<std::mutex> lock(mHotplugMutex); 487cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 488cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall if (mHotplugStatus != Hwc2TestHotplugStatus::Init) 489cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall return; 490cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall mHotplugStatus = Hwc2TestHotplugStatus::Receiving; 491cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 492cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 493cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall /* Registers the callback. This function call cannot be locked because 494cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall * a callback could happen on the same thread */ 495cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_HOTPLUG, this, 496cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall reinterpret_cast<hwc2_function_pointer_t>( 497cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2TestHotplugCallback))); 498cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 499cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall /* Waits for hotplug events. If a hotplug event has not come within 1 500cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall * second, stop waiting. */ 501cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::unique_lock<std::mutex> lock(mHotplugMutex); 502cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 503cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall while (mHotplugCv.wait_for(lock, std::chrono::seconds(1)) != 504cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::cv_status::timeout) { } 505cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 506cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall /* Sets the hotplug status to done. Future calls will have no effect */ 507cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall mHotplugStatus = Hwc2TestHotplugStatus::Done; 508cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 509cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 510cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall void getBadDisplay(hwc2_display_t* outDisplay) 511cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall { 512cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall for (hwc2_display_t display = 0; display < UINT64_MAX; display++) { 513cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall if (mDisplays.count(display) == 0) { 514cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall *outDisplay = display; 515cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall return; 516cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 517cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 518cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall ASSERT_TRUE(false) << "Unable to find bad display. UINT64_MAX displays" 519cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall " are registered. This should never happen."; 520cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 521cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 5221db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall /* NOTE: will create min(newlayerCnt, max supported layers) layers */ 5231db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall void createLayers(hwc2_display_t display, 5241db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall std::vector<hwc2_layer_t>* outLayers, size_t newLayerCnt) 5251db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall { 5261db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall std::vector<hwc2_layer_t> newLayers; 5271db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_layer_t layer; 5281db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 5291db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 5301db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (size_t i = 0; i < newLayerCnt; i++) { 5311db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 5321db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_NO_FATAL_FAILURE(createLayer(display, &layer, &err)); 5331db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall if (err == HWC2_ERROR_NO_RESOURCES) 5341db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall break; 5351db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall if (err != HWC2_ERROR_NONE) { 5361db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall newLayers.clear(); 5371db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to create layer"; 5381db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 5391db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall newLayers.push_back(layer); 5401db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 5411db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 5421db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall *outLayers = std::move(newLayers); 5431db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 5441db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 5451db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall void destroyLayers(hwc2_display_t display, 5461db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall std::vector<hwc2_layer_t>&& layers) 5471db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall { 5481db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (hwc2_layer_t layer : layers) { 5491db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 5501db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 5511db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 5521db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 553cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall void getInvalidConfig(hwc2_display_t display, hwc2_config_t* outConfig) 554cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall { 555cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs; 556cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 557cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 558cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 559cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_config_t CONFIG_MAX = UINT32_MAX; 560cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 561cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_LE(configs.size() - 1, CONFIG_MAX) << "every config value" 562cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall " (2^32 values) has been taken which shouldn't happen"; 563cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 564cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_config_t config; 565cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (config = 0; config < CONFIG_MAX; config++) { 566cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall if (std::count(configs.begin(), configs.end(), config) == 0) 567cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall break; 568cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 569cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 570cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall *outConfig = config; 571cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 572cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 573572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall void enableVsync(hwc2_display_t display) 574572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall { 575572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_VSYNC, this, 576572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall reinterpret_cast<hwc2_function_pointer_t>( 577572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2TestVsyncCallback))); 578572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE)); 579572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 580572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 581572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall void disableVsync(hwc2_display_t display) 582572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall { 583572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 584572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 585572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 586572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall void waitForVsync(hwc2_display_t* outDisplay = nullptr, 587572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall int64_t* outTimestamp = nullptr) 588572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall { 589572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall std::unique_lock<std::mutex> lock(mVsyncMutex); 590572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_EQ(mVsyncCv.wait_for(lock, std::chrono::seconds(3)), 591572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall std::cv_status::no_timeout) << "timed out attempting to get" 592572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall " vsync callback"; 593572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall if (outDisplay) 594572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall *outDisplay = mVsyncDisplay; 595572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall if (outTimestamp) 596572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall *outTimestamp = mVsyncTimestamp; 597572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 598572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 5996bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* Calls a set property function from Hwc2Test to set a property value from 6006bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * Hwc2TestLayer to hwc2_layer_t on hwc2_display_t */ 6016bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall using TestLayerPropertyFunction = void (*)(Hwc2Test* test, 6026bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_display_t display, hwc2_layer_t layer, 6036bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall const Hwc2TestLayer& testLayer, hwc2_error_t* outErr); 6046bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 605273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall /* Calls a set property function from Hwc2Test to set property values from 606273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall * Hwc2TestLayers to hwc2_layer_t on hwc2_display_t */ 607273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall using TestLayerPropertiesFunction = void (*)(Hwc2Test* test, 608273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall hwc2_display_t display, hwc2_layer_t layer, 609273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall const Hwc2TestLayers& testLayers); 610273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 6116bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* Calls a set property function from Hwc2Test to set a bad property value 6126bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * on hwc2_layer_t on hwc2_display_t */ 6136bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall using TestLayerPropertyBadLayerFunction = void (*)(Hwc2Test* test, 6146bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_display_t display, hwc2_layer_t layer, 6156bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall const Hwc2TestLayer& testLayer, hwc2_error_t* outErr); 6166bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 6176bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* Calls a set property function from Hwc2Test to set a bad property value 6186bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * on hwc2_layer_t on hwc2_display_t */ 6196bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall using TestLayerPropertyBadParameterFunction = void (*)(Hwc2Test* test, 6206bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_display_t display, hwc2_layer_t layer, hwc2_error_t* outErr); 6216bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 6226bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* Advances a property of Hwc2TestLayer */ 6236bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall using AdvanceProperty = bool (*)(Hwc2TestLayer* testLayer); 6246bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 6256bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* For each active display it cycles through each display config and tests 6266bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * each property value. It creates a layer, sets the property and then 6276bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * destroys the layer */ 6286bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall void setLayerProperty(Hwc2TestCoverage coverage, 6296bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall TestLayerPropertyFunction function, AdvanceProperty advance) 6306bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall { 6316bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto display : mDisplays) { 6326bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall std::vector<hwc2_config_t> configs; 6336bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 6346bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 6356bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 6366bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto config : configs) { 6376bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_layer_t layer; 638600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Area displayArea; 6396bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 6406bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 641600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveDisplayArea(display, 642600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall &displayArea)); 643600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Hwc2TestLayer testLayer(coverage, displayArea); 6446bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 6456bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall do { 6466bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 6476bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 6486bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(function(this, display, layer, 6496bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall testLayer, nullptr)); 6506bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 6516bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 6526bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } while (advance(&testLayer)); 6536bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 6546bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 6556bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 6566bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 6576bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* For each active display it cycles through each display config and tests 6586bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * each property value. It creates a layer, cycles through each property 6596bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * value and updates the layer property value and then destroys the layer */ 6606bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall void setLayerPropertyUpdate(Hwc2TestCoverage coverage, 6616bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall TestLayerPropertyFunction function, AdvanceProperty advance) 6626bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall { 6636bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto display : mDisplays) { 6646bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall std::vector<hwc2_config_t> configs; 6656bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 6666bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 6676bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 6686bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto config : configs) { 6696bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_layer_t layer; 670600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Area displayArea; 6716bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 6726bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 673600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveDisplayArea(display, 674600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall &displayArea)); 675600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Hwc2TestLayer testLayer(coverage, displayArea); 6766bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 6776bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 6786bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 6796bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall do { 6806bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(function(this, display, layer, 6816bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall testLayer, nullptr)); 6826bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } while (advance(&testLayer)); 6836bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 6846bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 6856bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 6866bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 6876bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 6886bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 689273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall /* For each active display it cycles through each display config and tests 690273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall * each property value. It creates multiple layers, calls the 691273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall * TestLayerPropertiesFunction to set property values and then 692273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall * destroys the layers */ 693273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall void setLayerProperties(Hwc2TestCoverage coverage, size_t layerCnt, 694273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall TestLayerPropertiesFunction function) 695273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall { 696273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall for (auto display : mDisplays) { 697273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall std::vector<hwc2_config_t> configs; 698273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 699273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 700273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 701273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall for (auto config : configs) { 702273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall std::vector<hwc2_layer_t> layers; 703600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Area displayArea; 704273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 705273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 706600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveDisplayArea(display, 707600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall &displayArea)); 708273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 709273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayers(display, &layers, layerCnt)); 710600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Hwc2TestLayers testLayers(layers, coverage, displayArea); 711273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 712273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall for (auto layer : layers) { 713273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall EXPECT_NO_FATAL_FAILURE(function(this, display, layer, 714273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall testLayers)); 715273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 716273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 717273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayers(display, std::move(layers))); 718273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 719273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 720273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 721273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 7226bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* For each active display it cycles through each display config. 7236bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * 1) It attempts to set a valid property value to bad layer handle. 7246bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * 2) It creates a layer x and attempts to set a valid property value to 7256bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * layer x + 1 7266bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * 3) It destroys the layer x and attempts to set a valid property value to 7276bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * the destroyed layer x. 7286bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall */ 7296bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall void setLayerPropertyBadLayer(Hwc2TestCoverage coverage, 7306bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall TestLayerPropertyBadLayerFunction function) 7316bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall { 7326bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto display : mDisplays) { 7336bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall std::vector<hwc2_config_t> configs; 7346bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7356bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 7366bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7376bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto config : configs) { 7386bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_layer_t layer = 0; 739600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Area displayArea; 7406bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 7416bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7426bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 743600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveDisplayArea(display, 744600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall &displayArea)); 745600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Hwc2TestLayer testLayer(coverage, displayArea); 7466bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7476bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(function(this, display, layer, 7486bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall testLayer, &err)); 7496bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 7506bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7516bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 7526bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7536bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(function(this, display, layer + 1, 7546bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall testLayer, &err)); 7556bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 7566bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7576bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 7586bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7596bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(function(this, display, layer, 7606bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall testLayer, &err)); 7616bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 7626bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 7636bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 7646bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 7656bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7666bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* For each active display it cycles through each display config and tests 7676bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * each property value. It creates a layer, sets a bad property value and 7686bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * then destroys the layer */ 7696bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall void setLayerPropertyBadParameter(TestLayerPropertyBadParameterFunction function) 7706bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall { 7716bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto display : mDisplays) { 7726bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall std::vector<hwc2_config_t> configs; 7736bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7746bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 7756bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7766bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto config : configs) { 7776bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_layer_t layer; 7786bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 7796bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7806bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 7816bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7826bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 7836bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7846bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(function(this, display, layer, &err)); 7856bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_PARAMETER) << "returned wrong" 7866bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall " error code"; 7876bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7886bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 7896bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 7906bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 7916bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 7926bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 793600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall void getActiveConfigAttribute(hwc2_display_t display, 794600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall hwc2_attribute_t attribute, int32_t* outValue) 795600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall { 796600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall hwc2_config_t config; 797600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveConfig(display, &config)); 798600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, 799600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall attribute, outValue)); 800600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_GE(*outValue, 0) << "failed to get valid " 801600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall << getAttributeName(attribute); 802600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall } 803600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 804600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall void getActiveDisplayArea(hwc2_display_t display, Area* displayArea) 805600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall { 806600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveConfigAttribute(display, 807600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall HWC2_ATTRIBUTE_WIDTH, &displayArea->width)); 808600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveConfigAttribute(display, 809600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall HWC2_ATTRIBUTE_HEIGHT, &displayArea->height)); 810600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall } 811600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 8124d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall hwc2_device_t* mHwc2Device = nullptr; 813cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 814cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall enum class Hwc2TestHotplugStatus { 815cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall Init = 1, 816cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall Receiving, 817cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall Done, 818cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall }; 819cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 820cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::mutex mHotplugMutex; 821cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::condition_variable mHotplugCv; 822cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall Hwc2TestHotplugStatus mHotplugStatus = Hwc2TestHotplugStatus::Init; 823cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::unordered_set<hwc2_display_t> mDisplays; 8241db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 8251db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall /* Store all created layers that have not been destroyed. If an ASSERT_* 8261db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall * fails, then destroy the layers on exit */ 8271db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall std::set<std::pair<hwc2_display_t, hwc2_layer_t>> mLayers; 82803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 82903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall /* Store the power mode state. If it is not HWC2_POWER_MODE_OFF when 83003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall * tearing down the test cases, change it to HWC2_POWER_MODE_OFF */ 83103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall std::set<hwc2_display_t> mActiveDisplays; 832572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 833572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall std::mutex mVsyncMutex; 834572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall std::condition_variable mVsyncCv; 835572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_display_t mVsyncDisplay; 836572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall int64_t mVsyncTimestamp = -1; 8374d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall}; 8384d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 839cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wallvoid hwc2TestHotplugCallback(hwc2_callback_data_t callbackData, 840cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2_display_t display, int32_t connection) 841cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall{ 842cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall if (callbackData) 843cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall static_cast<Hwc2Test*>(callbackData)->hotplugCallback(display, 844cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall connection); 845cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall} 846cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 847572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wallvoid hwc2TestVsyncCallback(hwc2_callback_data_t callbackData, 848572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_display_t display, int64_t timestamp) 849572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 850572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall if (callbackData) 851572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall static_cast<Hwc2Test*>(callbackData)->vsyncCallback(display, 852572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall timestamp); 853572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 854572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 855ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wallvoid setBlendMode(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 856ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall const Hwc2TestLayer& testLayer, hwc2_error_t* outErr) 857ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall{ 858ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerBlendMode(display, layer, 859ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall testLayer.getBlendMode(), outErr)); 860ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall} 861ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 8626bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wallvoid setComposition(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 8636bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall const Hwc2TestLayer& testLayer, hwc2_error_t* outErr) 8646bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall{ 8656bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_composition_t composition = testLayer.getComposition(); 8666bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 8676bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 8686bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerCompositionType(display, layer, 8696bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall composition, &err)); 8706bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall if (outErr) { 8716bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall *outErr = err; 8726bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall return; 8736bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 8746bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 8756bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall if (composition != HWC2_COMPOSITION_SIDEBAND) { 8766bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall EXPECT_EQ(err, HWC2_ERROR_NONE) << "returned wrong error code"; 8776bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } else { 8786bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall EXPECT_TRUE(err == HWC2_ERROR_NONE || err == HWC2_ERROR_UNSUPPORTED) 8796bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall << "returned wrong error code"; 8806bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 8816bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall} 8826bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 883b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wallvoid setDataspace(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 884b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall const Hwc2TestLayer& testLayer, hwc2_error_t* outErr) 885b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall{ 886b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerDataspace(display, layer, 887b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall testLayer.getDataspace(), outErr)); 888b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall} 889b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 890600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wallvoid setDisplayFrame(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 891600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall const Hwc2TestLayer& testLayer, hwc2_error_t* outErr) 892600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall{ 893600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerDisplayFrame(display, layer, 894600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall testLayer.getDisplayFrame(), outErr)); 895600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall} 896600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 8972b1f53060ea8587a428f826cf7890354ff124722Marissa Wallvoid setPlaneAlpha(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 8982b1f53060ea8587a428f826cf7890354ff124722Marissa Wall const Hwc2TestLayer& testLayer, hwc2_error_t *outErr) 8992b1f53060ea8587a428f826cf7890354ff124722Marissa Wall{ 9002b1f53060ea8587a428f826cf7890354ff124722Marissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerBlendMode(display, layer, 9012b1f53060ea8587a428f826cf7890354ff124722Marissa Wall testLayer.getBlendMode())); 9022b1f53060ea8587a428f826cf7890354ff124722Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerPlaneAlpha(display, layer, 9032b1f53060ea8587a428f826cf7890354ff124722Marissa Wall testLayer.getPlaneAlpha(), outErr)); 9042b1f53060ea8587a428f826cf7890354ff124722Marissa Wall} 9052b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 906ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wallvoid setTransform(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 907ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall const Hwc2TestLayer& testLayer, hwc2_error_t* outErr) 908ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall{ 909ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerTransform(display, layer, 910ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall testLayer.getTransform(), outErr)); 911ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall} 912ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 913273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wallvoid setZOrder(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 914273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall const Hwc2TestLayer& testLayer, hwc2_error_t* outErr) 915273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall{ 916273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerZOrder(display, layer, 917273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall testLayer.getZOrder(), outErr)); 918273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall} 919273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 920ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wallbool advanceBlendMode(Hwc2TestLayer* testLayer) 921ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall{ 922ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall return testLayer->advanceBlendMode(); 923ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall} 924ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 9256bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wallbool advanceComposition(Hwc2TestLayer* testLayer) 9266bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall{ 9276bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall return testLayer->advanceComposition(); 9286bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall} 9296bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 930b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wallbool advanceDataspace(Hwc2TestLayer* testLayer) 931b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall{ 932b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall return testLayer->advanceDataspace(); 933b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall} 934b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 935600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wallbool advanceDisplayFrame(Hwc2TestLayer* testLayer) 936600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall{ 937600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall return testLayer->advanceDisplayFrame(); 938600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall} 939600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 9402b1f53060ea8587a428f826cf7890354ff124722Marissa Wallbool advancePlaneAlpha(Hwc2TestLayer* testLayer) 9412b1f53060ea8587a428f826cf7890354ff124722Marissa Wall{ 9422b1f53060ea8587a428f826cf7890354ff124722Marissa Wall return testLayer->advancePlaneAlpha(); 9432b1f53060ea8587a428f826cf7890354ff124722Marissa Wall} 9442b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 945ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wallbool advanceTransform(Hwc2TestLayer* testLayer) 946ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall{ 947ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall return testLayer->advanceTransform(); 948ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall} 949ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 9504d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 9514d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wallstatic const std::array<hwc2_function_descriptor_t, 42> requiredFunctions = {{ 9524d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_ACCEPT_DISPLAY_CHANGES, 9534d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_CREATE_LAYER, 9544d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_CREATE_VIRTUAL_DISPLAY, 9554d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_DESTROY_LAYER, 9564d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_DESTROY_VIRTUAL_DISPLAY, 9574d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_DUMP, 9584d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_ACTIVE_CONFIG, 9594d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_CHANGED_COMPOSITION_TYPES, 9604d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_CLIENT_TARGET_SUPPORT, 9614d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_COLOR_MODES, 9624d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_DISPLAY_ATTRIBUTE, 9634d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_DISPLAY_CONFIGS, 9644d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_DISPLAY_NAME, 9654d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_DISPLAY_REQUESTS, 9664d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_DISPLAY_TYPE, 9674d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_DOZE_SUPPORT, 9684d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_HDR_CAPABILITIES, 9694d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_MAX_VIRTUAL_DISPLAY_COUNT, 9704d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_RELEASE_FENCES, 9714d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_PRESENT_DISPLAY, 9724d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_REGISTER_CALLBACK, 9734d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_ACTIVE_CONFIG, 9744d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_CLIENT_TARGET, 9754d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_COLOR_MODE, 9764d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_COLOR_TRANSFORM, 9774d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_CURSOR_POSITION, 9784d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_BLEND_MODE, 9794d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_BUFFER, 9804d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_COLOR, 9814d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_COMPOSITION_TYPE, 9824d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_DATASPACE, 9834d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_DISPLAY_FRAME, 9844d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_PLANE_ALPHA, 9854d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_SOURCE_CROP, 9864d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_SURFACE_DAMAGE, 9874d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_TRANSFORM, 9884d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_VISIBLE_REGION, 9894d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_Z_ORDER, 9904d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_OUTPUT_BUFFER, 9914d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_POWER_MODE, 9924d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_VSYNC_ENABLED, 9934d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_VALIDATE_DISPLAY, 9944d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall}}; 9954d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 9964d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall/* TESTCASE: Tests that the HWC2 supports all required functions. */ 9974d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa WallTEST_F(Hwc2Test, GET_FUNCTION) 9984d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall{ 9994d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall for (hwc2_function_descriptor_t descriptor : requiredFunctions) { 10004d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall hwc2_function_pointer_t pfn = getFunction(descriptor); 10014d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall EXPECT_TRUE(pfn) << "failed to get function " 10024d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall << getFunctionDescriptorName(descriptor); 10034d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall } 10044d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall} 10054d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 10064d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall/* TESTCASE: Tests that the HWC2 fails to retrieve and invalid function. */ 10074d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa WallTEST_F(Hwc2Test, GET_FUNCTION_invalid_function) 10084d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall{ 10094d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall hwc2_function_pointer_t pfn = getFunction(HWC2_FUNCTION_INVALID); 10104d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall EXPECT_FALSE(pfn) << "failed to get invalid function"; 10114d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall} 10124d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 10134d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall/* TESTCASE: Tests that the HWC2 does not return an invalid capability. */ 10144d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa WallTEST_F(Hwc2Test, GET_CAPABILITIES) 10154d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall{ 10164d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall std::vector<hwc2_capability_t> capabilities; 10174d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 10184d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall getCapabilities(&capabilities); 10194d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 10204d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall EXPECT_EQ(std::count(capabilities.begin(), capabilities.end(), 10214d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_CAPABILITY_INVALID), 0); 10224d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall} 1023a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 1024a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wallstatic const std::array<hwc2_callback_descriptor_t, 3> callbackDescriptors = {{ 1025a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall HWC2_CALLBACK_HOTPLUG, 1026a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall HWC2_CALLBACK_REFRESH, 1027a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall HWC2_CALLBACK_VSYNC, 1028a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall}}; 1029a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 1030a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall/* TESTCASE: Tests that the HWC2 can successfully register all required 1031a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall * callback functions. */ 1032a4b01488e852c0c16df89d04914e6f060dd862e3Marissa WallTEST_F(Hwc2Test, REGISTER_CALLBACK) 1033a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall{ 1034a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall hwc2_callback_data_t data = reinterpret_cast<hwc2_callback_data_t>( 1035a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall const_cast<char*>("data")); 1036a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 1037a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall for (auto descriptor : callbackDescriptors) { 1038a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(descriptor, data, 1039a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall []() { return; })); 1040a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall } 1041a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall} 1042a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 1043a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall/* TESTCASE: Test that the HWC2 fails to register invalid callbacks. */ 1044a4b01488e852c0c16df89d04914e6f060dd862e3Marissa WallTEST_F(Hwc2Test, REGISTER_CALLBACK_bad_parameter) 1045a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall{ 1046a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall hwc2_callback_data_t data = reinterpret_cast<hwc2_callback_data_t>( 1047a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall const_cast<char*>("data")); 1048a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 1049a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 1050a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_INVALID, data, 1051a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall []() { return; }, &err)); 1052a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_PARAMETER) << "returned wrong error code"; 1053a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall} 1054a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 1055a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall/* TESTCASE: Tests that the HWC2 can register a callback with null data. */ 1056a4b01488e852c0c16df89d04914e6f060dd862e3Marissa WallTEST_F(Hwc2Test, REGISTER_CALLBACK_null_data) 1057a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall{ 1058a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall hwc2_callback_data_t data = nullptr; 1059a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 1060a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall for (auto descriptor : callbackDescriptors) { 1061a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(descriptor, data, 1062a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall []() { return; })); 1063a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall } 1064a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall} 1065cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1066cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall/* TESTCASE: Tests that the HWC2 returns the correct display type for each 1067cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall * physical display. */ 1068cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa WallTEST_F(Hwc2Test, GET_DISPLAY_TYPE) 1069cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall{ 1070cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall for (auto display : mDisplays) { 1071cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2_display_type_t type; 1072cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1073cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayType(display, &type)); 1074cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall EXPECT_EQ(type, HWC2_DISPLAY_TYPE_PHYSICAL) << "failed to return" 1075cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall " correct display type"; 1076cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 1077cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall} 1078cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1079cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall/* TESTCASE: Tests that the HWC2 returns an error when the display type of a bad 1080cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall * display is requested. */ 1081cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa WallTEST_F(Hwc2Test, GET_DISPLAY_TYPE_bad_display) 1082cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall{ 1083cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2_display_t display; 1084cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2_display_type_t type; 1085cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 1086cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1087cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 1088cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1089cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayType(display, &type, &err)); 1090cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 1091cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall} 10921db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 10931db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall/* TESTCASE: Tests that the HWC2 can create and destroy layers. */ 10941db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa WallTEST_F(Hwc2Test, CREATE_DESTROY_LAYER) 10951db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall{ 10961db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (auto display : mDisplays) { 10971db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_layer_t layer; 10981db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 10991db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 11001db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 11011db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 11021db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 11031db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall} 11041db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 11051db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall/* TESTCASE: Tests that the HWC2 cannot create a layer for a bad display */ 11061db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa WallTEST_F(Hwc2Test, CREATE_LAYER_bad_display) 11071db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall{ 11081db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_display_t display; 11091db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_layer_t layer; 11101db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 11111db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 11121db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 11131db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 11141db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer, &err)); 11151db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 11161db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall} 11171db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 11181db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall/* TESTCASE: Tests that the HWC2 will either support a large number of resources 11191db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall * or will return no resources. */ 11201db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa WallTEST_F(Hwc2Test, CREATE_LAYER_no_resources) 11211db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall{ 11221db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall const size_t layerCnt = 1000; 11231db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 11241db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (auto display : mDisplays) { 11251db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall std::vector<hwc2_layer_t> layers; 11261db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 11271db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(createLayers(display, &layers, layerCnt)); 11281db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 11291db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayers(display, std::move(layers))); 11301db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 11311db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall} 11321db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 11331db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall/* TESTCASE: Tests that the HWC2 cannot destroy a layer for a bad display */ 11341db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa WallTEST_F(Hwc2Test, DESTROY_LAYER_bad_display) 11351db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall{ 11361db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_display_t badDisplay; 11371db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 11381db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&badDisplay)); 11391db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 11401db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (auto display : mDisplays) { 11411db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_layer_t layer = 0; 11421db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 11431db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 11441db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(badDisplay, layer, &err)); 11451db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 11461db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 11471db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 11481db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 11491db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(badDisplay, layer, &err)); 11501db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 11511db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 11521db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 11531db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 11541db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall} 11551db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 11561db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall/* TESTCASE: Tests that the HWC2 cannot destory a bad layer */ 11571db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa WallTEST_F(Hwc2Test, DESTROY_LAYER_bad_layer) 11581db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall{ 11591db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (auto display : mDisplays) { 11601db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_layer_t layer; 11611db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 11621db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 11631db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, UINT64_MAX / 2, &err)); 11641db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 11651db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 11661db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, 0, &err)); 11671db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 11681db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 11691db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, UINT64_MAX - 1, &err)); 11701db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 11711db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 11721db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, 1, &err)); 11731db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 11741db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 11751db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, UINT64_MAX, &err)); 11761db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 11771db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 11781db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 11791db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 11801db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer + 1, &err)); 11811db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 11821db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 11831db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 11841db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 11851db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer, &err)); 11861db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 11871db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 11881db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall} 1189cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1190cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wallstatic const std::array<hwc2_attribute_t, 2> requiredAttributes = {{ 1191cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall HWC2_ATTRIBUTE_WIDTH, 1192cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall HWC2_ATTRIBUTE_HEIGHT, 1193cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall}}; 1194cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1195cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wallstatic const std::array<hwc2_attribute_t, 3> optionalAttributes = {{ 1196cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall HWC2_ATTRIBUTE_VSYNC_PERIOD, 1197cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall HWC2_ATTRIBUTE_DPI_X, 1198cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall HWC2_ATTRIBUTE_DPI_Y, 1199cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall}}; 1200cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1201cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 can return display attributes for a valid 1202cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall * config. */ 1203cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_ATTRIBUTE) 1204cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 1205cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto display : mDisplays) { 1206cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs; 1207cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1208cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 1209cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1210cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto config : configs) { 1211cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall int32_t value; 1212cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1213cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto attribute : requiredAttributes) { 1214cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, 1215cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall attribute, &value)); 1216cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_GE(value, 0) << "missing required attribute " 1217cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall << getAttributeName(attribute) << " for config " 1218cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall << config; 1219cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1220cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto attribute : optionalAttributes) { 1221cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, 1222cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall attribute, &value)); 1223cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1224cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1225cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1226cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 1227cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1228cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 will return a value of -1 for an invalid 1229cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall * attribute */ 1230cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_ATTRIBUTE_invalid_attribute) 1231cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 1232cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall const hwc2_attribute_t attribute = HWC2_ATTRIBUTE_INVALID; 1233cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1234cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto display : mDisplays) { 1235cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs; 1236cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1237cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 1238cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1239cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto config : configs) { 1240cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall int32_t value; 1241cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 1242cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1243cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, 1244cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall attribute, &value, &err)); 1245cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(value, -1) << "failed to return -1 for an invalid" 1246cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall " attribute for config " << config; 1247cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1248cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1249cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 1250cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1251cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 will fail to get attributes for a bad display */ 1252cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_ATTRIBUTE_bad_display) 1253cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 1254cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_display_t display; 1255cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall const hwc2_config_t config = 0; 1256cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall int32_t value; 1257cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 1258cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1259cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 1260cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1261cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto attribute : requiredAttributes) { 1262cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, attribute, 1263cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall &value, &err)); 1264cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 1265cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1266cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1267cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto attribute : optionalAttributes) { 1268cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, attribute, 1269cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall &value, &err)); 1270cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 1271cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1272cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 1273cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1274cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 will fail to get attributes for a bad config */ 1275cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_ATTRIBUTE_bad_config) 1276cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 1277cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto display : mDisplays) { 1278cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_config_t config; 1279cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall int32_t value; 1280cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 1281cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1282cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getInvalidConfig(display, &config)); 1283cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1284cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto attribute : requiredAttributes) { 1285cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, 1286cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall attribute, &value, &err)); 1287cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_CONFIG) << "returned wrong error code"; 1288cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1289cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1290cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto attribute : optionalAttributes) { 1291cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, 1292cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall attribute, &value, &err)); 1293cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_CONFIG) << "returned wrong error code"; 1294cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1295cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1296cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 1297cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1298cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 will get display configs for active displays */ 1299cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_CONFIGS) 1300cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 1301cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto display : mDisplays) { 1302cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs; 1303cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1304cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 1305cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1306cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 1307cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1308cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 will not get display configs for bad displays */ 1309cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_CONFIGS_bad_display) 1310cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 1311cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_display_t display; 1312cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs; 1313cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 1314cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1315cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 1316cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1317cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs, &err)); 1318cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1319cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 1320cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_TRUE(configs.empty()) << "returned configs for bad display"; 1321cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 1322cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1323cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 will return the same config list multiple 1324cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall * times in a row. */ 1325cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_CONFIGS_same) 1326cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 1327cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto display : mDisplays) { 1328cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs1, configs2; 1329cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1330cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs1)); 1331cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs2)); 1332cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1333cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_TRUE(std::is_permutation(configs1.begin(), configs1.end(), 1334cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall configs2.begin())) << "returned two different config sets"; 1335cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1336cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 1337cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1338cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 does not return duplicate display configs */ 1339cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_CONFIGS_duplicate) 1340cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 1341cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto display : mDisplays) { 1342cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs; 1343cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1344cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 1345cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1346cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::unordered_set<hwc2_config_t> configsSet(configs.begin(), 1347cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall configs.end()); 1348cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(configs.size(), configsSet.size()) << "returned duplicate" 1349cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall " configs"; 1350cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1351cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 135293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 135393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall/* TESTCASE: Tests that the HWC2 returns the active config for a display */ 135493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa WallTEST_F(Hwc2Test, GET_ACTIVE_CONFIG) 135593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall{ 135693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall for (auto display : mDisplays) { 135793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall std::vector<hwc2_config_t> configs; 135893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 135993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 136093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 136193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall for (auto config : configs) { 136293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_config_t activeConfig; 136393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 136493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 136593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveConfig(display, &activeConfig)); 136693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 136793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_EQ(activeConfig, config) << "failed to get active config"; 136893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 136993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 137093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall} 137193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 137293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall/* TESTCASE: Tests that the HWC2 does not return an active config for a bad 137393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall * display. */ 137493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa WallTEST_F(Hwc2Test, GET_ACTIVE_CONFIG_bad_display) 137593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall{ 137693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_display_t display; 137793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_config_t activeConfig; 137893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 137993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 138093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 138193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 138293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveConfig(display, &activeConfig, &err)); 138393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 138493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 138593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall} 138693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 138793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall/* TESTCASE: Tests that the HWC2 either begins with a valid active config 138893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall * or returns an error when getActiveConfig is called. */ 138993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa WallTEST_F(Hwc2Test, GET_ACTIVE_CONFIG_bad_config) 139093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall{ 139193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall for (auto display : mDisplays) { 139293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall std::vector<hwc2_config_t> configs; 139393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_config_t activeConfig; 139493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 139593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 139693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 139793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 139893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall if (configs.empty()) 139993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall return; 140093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 140193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveConfig(display, &activeConfig, &err)); 140293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall if (err == HWC2_ERROR_NONE) { 140393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_NE(std::count(configs.begin(), configs.end(), 140493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall activeConfig), 0) << "active config is not found in " 140593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall " configs for display"; 140693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } else { 140793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_CONFIG) << "returned wrong error code"; 140893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 140993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 141093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall} 141193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 141293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall/* TESTCASE: Tests that the HWC2 can set every display config as an active 141393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall * config */ 141493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa WallTEST_F(Hwc2Test, SET_ACTIVE_CONFIG) 141593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall{ 141693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall for (auto display : mDisplays) { 141793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall std::vector<hwc2_config_t> configs; 141893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 141993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 142093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 142193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall for (auto config : configs) { 142293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 142393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 142493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 142593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall} 142693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 142793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set an active config for a bad display */ 142893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa WallTEST_F(Hwc2Test, SET_ACTIVE_CONFIG_bad_display) 142993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall{ 143093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_display_t display; 143193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall const hwc2_config_t config = 0; 143293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 143393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 143493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 143593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 143693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config, &err)); 143793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 143893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall} 143993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 144093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set an invalid active config */ 144193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa WallTEST_F(Hwc2Test, SET_ACTIVE_CONFIG_bad_config) 144293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall{ 144393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall for (auto display : mDisplays) { 144493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_config_t config; 144593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 144693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 144793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getInvalidConfig(display, &config)); 144893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 144993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config, &err)); 145093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_CONFIG) << "returned wrong error code"; 145193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 145293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall} 145303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 145403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 returns a valid value for getDozeSupport. */ 145503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, GET_DOZE_SUPPORT) 145603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 145703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall for (auto display : mDisplays) { 145803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall int32_t support = -1; 145903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 146003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getDozeSupport(display, &support)); 146103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 146203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_TRUE(support == 0 || support == 1) << "invalid doze support value"; 146303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 146403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 146503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 146603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 cannot get doze support for a bad display. */ 146703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, GET_DOZE_SUPPORT_bad_display) 146803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 146903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_display_t display; 147003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall int32_t support = -1; 147103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 147203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 147303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 147403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 147503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getDozeSupport(display, &support, &err)); 147603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 147703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 147803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 147903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 148003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 can set all supported power modes */ 148103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, SET_POWER_MODE) 148203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 148303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall for (auto display : mDisplays) { 148403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 148503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 148603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 148703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall int32_t support = -1; 148803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getDozeSupport(display, &support)); 148903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (support != 1) 149003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall return; 149103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 149203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_DOZE)); 149303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, 149403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall HWC2_POWER_MODE_DOZE_SUSPEND)); 149503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 149603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 149703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 149803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 149903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 150003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set a power mode for a bad display. */ 150103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, SET_POWER_MODE_bad_display) 150203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 150303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_display_t display; 150403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 150503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 150603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 150703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 150803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON, &err)); 150903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 151003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 151103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF, &err)); 151203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 151303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 151403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall int32_t support = -1; 151503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getDozeSupport(display, &support, &err)); 151603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (support != 1) 151703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall return; 151803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 151903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_DOZE, &err)); 152003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 152103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 152203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_DOZE_SUSPEND, 152303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall &err)); 152403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 152503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 152603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 152703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set an invalid power mode value. */ 152803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, SET_POWER_MODE_bad_parameter) 152903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 153003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall for (auto display : mDisplays) { 153103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_power_mode_t mode = static_cast<hwc2_power_mode_t>( 153203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall HWC2_POWER_MODE_DOZE_SUSPEND + 1); 153303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 153403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 153503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, mode, &err)); 153603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_PARAMETER) << "returned wrong error code " 153703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall << mode; 153803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 153903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 154003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 154103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 will return unsupported if it does not support 154203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall * an optional power mode. */ 154303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, SET_POWER_MODE_unsupported) 154403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 154503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall for (auto display : mDisplays) { 154603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall int32_t support = -1; 154703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 154803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 154903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getDozeSupport(display, &support, &err)); 155003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (support == 1) 155103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall return; 155203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 155303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_EQ(support, 0) << "invalid doze support value"; 155403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 155503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_DOZE, 155603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall &err)); 155703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_UNSUPPORTED) << "returned wrong error code"; 155803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 155903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, 156003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall HWC2_POWER_MODE_DOZE_SUSPEND, &err)); 156103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_UNSUPPORTED) << "returned wrong error code"; 156203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 156303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 156403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 156503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 can set the same power mode multiple times. */ 156603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, SET_POWER_MODE_stress) 156703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 156803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall for (auto display : mDisplays) { 156903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 157003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 157103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 157203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 157303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 157403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 157503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 157603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 157703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 157803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall int32_t support = -1; 157903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getDozeSupport(display, &support)); 158003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (support != 1) 158103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall return; 158203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 158303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_DOZE)); 158403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_DOZE)); 158503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 158603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, 158703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall HWC2_POWER_MODE_DOZE_SUSPEND)); 158803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, 158903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall HWC2_POWER_MODE_DOZE_SUSPEND)); 159003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 159103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 159203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 159303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 1594572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1595572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 can enable and disable vsync on active 1596572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall * displays */ 1597572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED) 1598572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 1599572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall for (auto display : mDisplays) { 1600572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_callback_data_t data = reinterpret_cast<hwc2_callback_data_t>( 1601572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall const_cast<char*>("data")); 1602572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1603572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 1604572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1605572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_VSYNC, data, 1606572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall []() { return; })); 1607572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1608572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE)); 1609572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1610572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 1611572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1612572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 1613572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 1614572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 1615572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1616572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 issues a valid vsync callback. */ 1617572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED_callback) 1618572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 1619572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall for (auto display : mDisplays) { 1620572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_display_t receivedDisplay; 1621572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall int64_t receivedTimestamp; 1622572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1623572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 1624572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1625572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(enableVsync(display)); 1626572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1627572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(waitForVsync(&receivedDisplay, 1628572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall &receivedTimestamp)); 1629572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1630572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall EXPECT_EQ(receivedDisplay, display) << "failed to get correct display"; 1631572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall EXPECT_GE(receivedTimestamp, 0) << "failed to get valid timestamp"; 1632572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1633572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(disableVsync(display)); 1634572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1635572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 1636572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 1637572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 1638572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1639572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 cannot enable a vsync for a bad display */ 1640572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED_bad_display) 1641572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 1642572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_display_t display; 1643572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_callback_data_t data = reinterpret_cast<hwc2_callback_data_t>( 1644572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall const_cast<char*>("data")); 1645572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 1646572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1647572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 1648572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1649572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_VSYNC, data, 1650572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall []() { return; })); 1651572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1652572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE, &err)); 1653572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 1654572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1655572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE, &err)); 1656572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 1657572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 1658572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1659572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 cannot enable an invalid vsync value */ 1660572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED_bad_parameter) 1661572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 1662572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall for (auto display : mDisplays) { 1663572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_callback_data_t data = reinterpret_cast<hwc2_callback_data_t>( 1664572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall const_cast<char*>("data")); 1665572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 1666572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1667572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 1668572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1669572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_VSYNC, data, 1670572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall []() { return; })); 1671572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1672572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_INVALID, 1673572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall &err)); 1674572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_PARAMETER) << "returned wrong error code"; 1675572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1676572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 1677572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 1678572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 1679572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1680572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 can enable and disable a vsync value multiple 1681572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall * times. */ 1682572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED_stress) 1683572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 1684572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall for (auto display : mDisplays) { 1685572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_callback_data_t data = reinterpret_cast<hwc2_callback_data_t>( 1686572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall const_cast<char*>("data")); 1687572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1688572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 1689572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1690572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_VSYNC, data, 1691572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall []() { return; })); 1692572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1693572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 1694572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1695572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE)); 1696572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE)); 1697572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1698572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 1699572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 1700572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1701572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 1702572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 1703572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 1704572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1705572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 can set a vsync enable value when the display 1706572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall * is off and no callback is registered. */ 1707572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED_no_callback_no_power) 1708572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 1709572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall const uint secs = 1; 1710572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1711572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall for (auto display : mDisplays) { 1712572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE)); 1713572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1714572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall sleep(secs); 1715572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1716572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 1717572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 1718572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 1719572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1720572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 can set a vsync enable value when no callback 1721572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall * is registered. */ 1722572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED_no_callback) 1723572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 1724572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall const uint secs = 1; 1725572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1726572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall for (auto display : mDisplays) { 1727572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 1728572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1729572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE)); 1730572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1731572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall sleep(secs); 1732572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1733572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 1734572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1735572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 1736572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 1737572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 1738dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 1739dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall/* TESTCASE: Tests that the HWC2 returns a display name for each display */ 1740dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa WallTEST_F(Hwc2Test, GET_DISPLAY_NAME) 1741dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall{ 1742dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall for (auto display : mDisplays) { 1743dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall std::string name; 1744dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 1745dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayName(display, &name)); 1746dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall } 1747dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall} 1748dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 1749dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall/* TESTCASE: Tests that the HWC2 does not return a display name for a bad 1750dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall * display */ 1751dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa WallTEST_F(Hwc2Test, GET_DISPLAY_NAME_bad_display) 1752dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall{ 1753dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall hwc2_display_t display; 1754dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall std::string name; 1755dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 1756dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 1757dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 1758dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 1759dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayName(display, &name, &err)); 1760dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 1761dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall} 17626bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 17636bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall/* TESTCASE: Tests that the HWC2 can set basic composition types. */ 17646bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa WallTEST_F(Hwc2Test, SET_LAYER_COMPOSITION_TYPE) 17656bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall{ 17666bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 17676bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall setComposition, advanceComposition)); 17686bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall} 17696bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 17706bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall/* TESTCASE: Tests that the HWC2 can update a basic composition type on a 17716bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * layer. */ 17726bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa WallTEST_F(Hwc2Test, SET_LAYER_COMPOSITION_TYPE_update) 17736bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall{ 17746bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 17756bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall setComposition, advanceComposition)); 17766bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall} 17776bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 17786bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set a composition type for a bad layer */ 17796bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa WallTEST_F(Hwc2Test, SET_LAYER_COMPOSITION_TYPE_bad_layer) 17806bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall{ 17816bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 17826bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall setComposition)); 17836bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall} 17846bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 17856bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set a bad composition type */ 17866bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa WallTEST_F(Hwc2Test, SET_LAYER_COMPOSITION_TYPE_bad_parameter) 17876bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall{ 17886bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadParameter( 17896bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 17906bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_error_t* outErr) { 17916bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 17926bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerCompositionType(display, 17936bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall layer, HWC2_COMPOSITION_INVALID, outErr)); 17946bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 17956bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall )); 17966bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall} 1797ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 1798ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall/* TESTCASE: Tests that the HWC2 can set a blend mode value of a layer. */ 1799ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa WallTEST_F(Hwc2Test, SET_LAYER_BLEND_MODE) 1800ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall{ 1801ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 1802ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall setBlendMode, advanceBlendMode)); 1803ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall} 1804ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 1805ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall/* TESTCASE: Tests that the HWC2 can update a blend mode value of a layer. */ 1806ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa WallTEST_F(Hwc2Test, SET_LAYER_BLEND_MODE_update) 1807ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall{ 1808ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 1809ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall setBlendMode, advanceBlendMode)); 1810ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall} 1811ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 1812ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set a blend mode for a bad layer. */ 1813ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa WallTEST_F(Hwc2Test, SET_LAYER_BLEND_MODE_bad_layer) 1814ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall{ 1815ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 1816ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall setBlendMode)); 1817ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall} 1818ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 1819ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set an invalid blend mode. */ 1820ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa WallTEST_F(Hwc2Test, SET_LAYER_BLEND_MODE_bad_parameter) 1821ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall{ 1822ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadParameter( 1823ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 1824ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall hwc2_error_t* outErr) { 1825ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 1826ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerBlendMode(display, 1827ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall layer, HWC2_BLEND_MODE_INVALID, outErr)); 1828ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall } 1829ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall )); 1830ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall} 1831b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 1832b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall/* TESTCASE: Tests that the HWC2 can set the dataspace of a layer. */ 1833b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa WallTEST_F(Hwc2Test, SET_LAYER_DATASPACE) 1834b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall{ 1835b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 1836b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall setDataspace, advanceDataspace)); 1837b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall} 1838b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 1839b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall/* TESTCASE: Tests that the HWC2 can update the dataspace of a layer. */ 1840b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa WallTEST_F(Hwc2Test, SET_LAYER_DATASPACE_update) 1841b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall{ 1842b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 1843b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall setDataspace, advanceDataspace)); 1844b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall} 1845b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 1846b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set a dataspace for a bad layer. */ 1847b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa WallTEST_F(Hwc2Test, SET_LAYER_DATASPACE_bad_layer) 1848b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall{ 1849b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 1850b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall setDataspace)); 1851b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall} 18522b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 1853600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall/* TESTCASE: Tests that the HWC2 can set the display frame of a layer. */ 1854600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa WallTEST_F(Hwc2Test, SET_LAYER_DISPLAY_FRAME) 1855600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall{ 1856600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 1857600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall setDisplayFrame, advanceDisplayFrame)); 1858600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall} 1859600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 1860600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall/* TESTCASE: Tests that the HWC2 can update the display frame of a layer. */ 1861600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa WallTEST_F(Hwc2Test, SET_LAYER_DISPLAY_FRAME_update) 1862600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall{ 1863600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 1864600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall setDisplayFrame, advanceDisplayFrame)); 1865600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall} 1866600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 1867600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set the display frame of a bad layer. */ 1868600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa WallTEST_F(Hwc2Test, SET_LAYER_DISPLAY_FRAME_bad_layer) 1869600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall{ 1870600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 1871600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall setDisplayFrame)); 1872600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall} 1873600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 18742b1f53060ea8587a428f826cf7890354ff124722Marissa Wall/* TESTCASE: Tests that the HWC2 can set the plane alpha of a layer. */ 18752b1f53060ea8587a428f826cf7890354ff124722Marissa WallTEST_F(Hwc2Test, SET_LAYER_PLANE_ALPHA) 18762b1f53060ea8587a428f826cf7890354ff124722Marissa Wall{ 18772b1f53060ea8587a428f826cf7890354ff124722Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 18782b1f53060ea8587a428f826cf7890354ff124722Marissa Wall setPlaneAlpha, advancePlaneAlpha)); 18792b1f53060ea8587a428f826cf7890354ff124722Marissa Wall} 18802b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 18812b1f53060ea8587a428f826cf7890354ff124722Marissa Wall/* TESTCASE: Tests that the HWC2 can update the plane alpha of a layer. */ 18822b1f53060ea8587a428f826cf7890354ff124722Marissa WallTEST_F(Hwc2Test, SET_LAYER_PLANE_ALPHA_update) 18832b1f53060ea8587a428f826cf7890354ff124722Marissa Wall{ 18842b1f53060ea8587a428f826cf7890354ff124722Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 18852b1f53060ea8587a428f826cf7890354ff124722Marissa Wall setPlaneAlpha, advancePlaneAlpha)); 18862b1f53060ea8587a428f826cf7890354ff124722Marissa Wall} 18872b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 18882b1f53060ea8587a428f826cf7890354ff124722Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set a plane alpha for a bad layer. */ 18892b1f53060ea8587a428f826cf7890354ff124722Marissa WallTEST_F(Hwc2Test, SET_LAYER_PLANE_ALPHA_bad_layer) 18902b1f53060ea8587a428f826cf7890354ff124722Marissa Wall{ 18912b1f53060ea8587a428f826cf7890354ff124722Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 18922b1f53060ea8587a428f826cf7890354ff124722Marissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t badLayer, 18932b1f53060ea8587a428f826cf7890354ff124722Marissa Wall const Hwc2TestLayer& testLayer, hwc2_error_t *outErr) { 18942b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 18952b1f53060ea8587a428f826cf7890354ff124722Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerPlaneAlpha(display, 18962b1f53060ea8587a428f826cf7890354ff124722Marissa Wall badLayer, testLayer.getPlaneAlpha(), outErr)); 18972b1f53060ea8587a428f826cf7890354ff124722Marissa Wall } 18982b1f53060ea8587a428f826cf7890354ff124722Marissa Wall )); 18992b1f53060ea8587a428f826cf7890354ff124722Marissa Wall} 1900ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 1901ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall/* TESTCASE: Tests that the HWC2 can set the transform value of a layer. */ 1902ac10819373b1ed4901f26c822484a789a7ca4be0Marissa WallTEST_F(Hwc2Test, SET_LAYER_TRANSFORM) 1903ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall{ 1904ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 1905ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall setTransform, advanceTransform)); 1906ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall} 1907ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 1908ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall/* TESTCASE: Tests that the HWC2 can update the transform value of a layer. */ 1909ac10819373b1ed4901f26c822484a789a7ca4be0Marissa WallTEST_F(Hwc2Test, SET_LAYER_TRANSFORM_update) 1910ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall{ 1911ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 1912ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall setTransform, advanceTransform)); 1913ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall} 1914ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 1915ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set the transform for a bad layer. */ 1916ac10819373b1ed4901f26c822484a789a7ca4be0Marissa WallTEST_F(Hwc2Test, SET_LAYER_TRANSFORM_bad_layer) 1917ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall{ 1918ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 1919ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall setTransform)); 1920ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall} 1921273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 1922273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall/* TESTCASE: Tests that the HWC2 can set the z order of a layer. */ 1923273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa WallTEST_F(Hwc2Test, SET_LAYER_Z_ORDER) 1924273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall{ 1925273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperties(Hwc2TestCoverage::Complete, 10, 1926273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 1927273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall const Hwc2TestLayers& testLayers) { 1928273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 1929273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerZOrder(display, layer, 1930273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall testLayers.getZOrder(layer))); 1931273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 1932273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall )); 1933273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall} 1934273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 1935273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall/* TESTCASE: Tests that the HWC2 can update the z order of a layer. */ 1936273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa WallTEST_F(Hwc2Test, SET_LAYER_Z_ORDER_update) 1937273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall{ 1938273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall const std::vector<uint32_t> zOrders = { static_cast<uint32_t>(0), 1939273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall static_cast<uint32_t>(1), static_cast<uint32_t>(UINT32_MAX / 4), 1940273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall static_cast<uint32_t>(UINT32_MAX / 2), 1941273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall static_cast<uint32_t>(UINT32_MAX) }; 1942273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 1943273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall for (auto display : mDisplays) { 1944273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall std::vector<hwc2_config_t> configs; 1945273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 1946273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 1947273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 1948273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall for (auto config : configs) { 1949273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall hwc2_layer_t layer; 1950273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 1951273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 1952273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 1953273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 1954273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 1955273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall for (uint32_t zOrder : zOrders) { 1956273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall EXPECT_NO_FATAL_FAILURE(setLayerZOrder(display, layer, zOrder)); 1957273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 1958273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 1959273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 1960273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 1961273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 1962273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall} 1963273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 1964273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set the z order of a bad layer. */ 1965273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa WallTEST_F(Hwc2Test, SET_LAYER_Z_ORDER_bad_layer) 1966273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall{ 1967273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 1968273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall setZOrder)); 1969273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall} 1970