Hwc2Test.cpp revision 1cd789cd2b300427467586f4ec721a8123f118b7
14d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall/* 24d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * Copyright (C) 2016 The Android Open Source Project 34d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * 44d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * Licensed under the Apache License, Version 2.0 (the "License"); 54d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * you may not use this file except in compliance with the License. 64d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * You may obtain a copy of the License at 74d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * 84d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * http://www.apache.org/licenses/LICENSE-2.0 94d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * 104d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * Unless required by applicable law or agreed to in writing, software 114d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * distributed under the License is distributed on an "AS IS" BASIS, 124d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * See the License for the specific language governing permissions and 144d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * limitations under the License. 154d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall */ 164d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 174d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall#include <array> 18cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall#include <unordered_set> 194d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall#include <gtest/gtest.h> 204d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall#include <dlfcn.h> 215a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall#include <android-base/unique_fd.h> 224d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall#include <hardware/hardware.h> 234d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 244d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall#define HWC2_INCLUDE_STRINGIFICATION 254d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall#define HWC2_USE_CPP11 264d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall#include <hardware/hwcomposer2.h> 274d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall#undef HWC2_INCLUDE_STRINGIFICATION 284d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall#undef HWC2_USE_CPP11 294d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 306bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall#include "Hwc2TestLayer.h" 31273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall#include "Hwc2TestLayers.h" 326bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 33cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wallvoid hwc2TestHotplugCallback(hwc2_callback_data_t callbackData, 34cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2_display_t display, int32_t connected); 35572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wallvoid hwc2TestVsyncCallback(hwc2_callback_data_t callbackData, 36572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_display_t display, int64_t timestamp); 37cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 384d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wallclass Hwc2Test : public testing::Test { 394d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wallpublic: 404d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 414d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall virtual void SetUp() 424d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall { 434d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall hw_module_t const* hwc2Module; 444d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 454d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall int err = hw_get_module(HWC_HARDWARE_MODULE_ID, &hwc2Module); 464d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall ASSERT_GE(err, 0) << "failed to get hwc hardware module: " 474d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall << strerror(-err); 484d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 494d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall /* The following method will fail if you have not run 504d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * "adb shell stop" */ 514d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall err = hwc2_open(hwc2Module, &mHwc2Device); 524d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall ASSERT_GE(err, 0) << "failed to open hwc hardware module: " 534d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall << strerror(-err); 54cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 55cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall populateDisplays(); 564d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall } 574d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 584d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall virtual void TearDown() 594d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall { 601db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 611db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (auto itr = mLayers.begin(); itr != mLayers.end();) { 621db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_display_t display = itr->first; 631db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_layer_t layer = itr->second; 641db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall itr++; 651db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall /* Destroys and removes the layer from mLayers */ 661db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall destroyLayer(display, layer); 671db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 681db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 6903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall for (auto itr = mActiveDisplays.begin(); itr != mActiveDisplays.end();) { 7003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_display_t display = *itr; 7103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall itr++; 7203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall /* Sets power mode to off and removes the display from 7303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall * mActiveDisplays */ 7403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall setPowerMode(display, HWC2_POWER_MODE_OFF); 7503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 7603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 774d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall if (mHwc2Device) 784d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall hwc2_close(mHwc2Device); 794d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall } 804d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 81a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall void registerCallback(hwc2_callback_descriptor_t descriptor, 82a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall hwc2_callback_data_t callbackData, hwc2_function_pointer_t pointer, 83a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall hwc2_error_t* outErr = nullptr) 84a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall { 85a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_REGISTER_CALLBACK>( 86a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall getFunction(HWC2_FUNCTION_REGISTER_CALLBACK)); 87a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 88a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 89a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, descriptor, 90a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall callbackData, pointer)); 91a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall if (outErr) { 92a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall *outErr = err; 93a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall } else { 94a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to register callback"; 95a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall } 96a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall } 97a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 98cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall void getDisplayType(hwc2_display_t display, hwc2_display_type_t* outType, 99cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2_error_t* outErr = nullptr) 100cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall { 101cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_GET_DISPLAY_TYPE>( 102cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall getFunction(HWC2_FUNCTION_GET_DISPLAY_TYPE)); 103cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 104cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 105cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 106cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall reinterpret_cast<int32_t*>(outType))); 107cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall if (outErr) { 108cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall *outErr = err; 109cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } else { 110cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to get display type"; 111cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 112cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 113cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 114cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall /* If the populateDisplays function is still receiving displays and the 115cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall * display is connected, the display handle is stored in mDisplays. */ 116cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall void hotplugCallback(hwc2_display_t display, int32_t connected) 117cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall { 118cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::lock_guard<std::mutex> lock(mHotplugMutex); 119cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 120cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall if (mHotplugStatus != Hwc2TestHotplugStatus::Receiving) 121cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall return; 122cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 123cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall if (connected == HWC2_CONNECTION_CONNECTED) 124cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall mDisplays.insert(display); 125cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 126cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall mHotplugCv.notify_all(); 127cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 128cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1291db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall void createLayer(hwc2_display_t display, hwc2_layer_t* outLayer, 1301db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_error_t* outErr = nullptr) 1311db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall { 1321db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_CREATE_LAYER>( 1331db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall getFunction(HWC2_FUNCTION_CREATE_LAYER)); 1341db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 1351db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 1361db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 1371db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall outLayer)); 1381db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 1391db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall if (err == HWC2_ERROR_NONE) 1401db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall mLayers.insert(std::make_pair(display, *outLayer)); 1411db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 1421db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall if (outErr) { 1431db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall *outErr = err; 1441db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } else { 1451db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to create layer"; 1461db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 1471db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 1481db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 1491db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall void destroyLayer(hwc2_display_t display, hwc2_layer_t layer, 1501db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_error_t* outErr = nullptr) 1511db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall { 1521db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_DESTROY_LAYER>( 1531db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall getFunction(HWC2_FUNCTION_DESTROY_LAYER)); 1541db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 1551db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 1561db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer)); 1571db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 1581db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall if (err == HWC2_ERROR_NONE) 1591db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall mLayers.erase(std::make_pair(display, layer)); 1601db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 1611db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall if (outErr) { 1621db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall *outErr = err; 1631db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } else { 1641db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to destroy layer " 1651db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall << layer; 1661db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 1671db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 1681db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 169cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall void getDisplayAttribute(hwc2_display_t display, hwc2_config_t config, 170cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_attribute_t attribute, int32_t* outValue, 171cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_error_t* outErr = nullptr) 172cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall { 173cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_GET_DISPLAY_ATTRIBUTE>( 174cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall getFunction(HWC2_FUNCTION_GET_DISPLAY_ATTRIBUTE)); 175cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 176cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 177cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, config, 178cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall attribute, outValue)); 179cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 180cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall if (outErr) { 181cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall *outErr = err; 182cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } else { 183cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to get display attribute " 184cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall << getAttributeName(attribute) << " for config " << config; 185cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 186cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 187cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 188cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall void getDisplayConfigs(hwc2_display_t display, 189cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t>* outConfigs, 190cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_error_t* outErr = nullptr) 191cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall { 192cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_GET_DISPLAY_CONFIGS>( 193cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall getFunction(HWC2_FUNCTION_GET_DISPLAY_CONFIGS)); 194cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 195cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 196cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall uint32_t numConfigs = 0; 197cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 198cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 199cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall &numConfigs, nullptr)); 200cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 201cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall if (err == HWC2_ERROR_NONE) { 202cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall outConfigs->resize(numConfigs); 203cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 204cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 205cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall &numConfigs, outConfigs->data())); 206cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 207cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 208cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall if (outErr) { 209cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall *outErr = err; 210cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } else { 211cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to get configs for" 212cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall " display " << display; 213cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 214cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 215cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 21693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall void getActiveConfig(hwc2_display_t display, hwc2_config_t* outConfig, 21793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_error_t* outErr = nullptr) 21893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall { 21993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_GET_ACTIVE_CONFIG>( 22093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall getFunction(HWC2_FUNCTION_GET_ACTIVE_CONFIG)); 22193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 22293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 22393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 22493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall outConfig)); 22593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall if (outErr) { 22693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall *outErr = err; 22793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } else { 22893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to get active config on" 22993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall " display " << display; 23093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 23193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 23293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 23393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall void setActiveConfig(hwc2_display_t display, hwc2_config_t config, 23493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_error_t* outErr = nullptr) 23593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall { 23693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_ACTIVE_CONFIG>( 23793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall getFunction(HWC2_FUNCTION_SET_ACTIVE_CONFIG)); 23893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 23993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 24093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, config)); 24193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall if (outErr) { 24293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall *outErr = err; 24393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } else { 24493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set active config " 24593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall << config; 24693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 24793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 24893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 24903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall void getDozeSupport(hwc2_display_t display, int32_t* outSupport, 25003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_error_t* outErr = nullptr) 25103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall { 25203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_GET_DOZE_SUPPORT>( 25303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall getFunction(HWC2_FUNCTION_GET_DOZE_SUPPORT)); 25403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 25503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 25603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 25703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall outSupport)); 25803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (outErr) { 25903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall *outErr = err; 26003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } else { 26103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to get doze support on" 26203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall " display " << display; 26303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 26403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 26503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 26603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall void setPowerMode(hwc2_display_t display, hwc2_power_mode_t mode, 26703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_error_t* outErr = nullptr) 26803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall { 26903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_POWER_MODE>( 27003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall getFunction(HWC2_FUNCTION_SET_POWER_MODE)); 27103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 27203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 27303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 27403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall mode)); 27503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (outErr) { 27603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall *outErr = err; 27703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (err != HWC2_ERROR_NONE) 27803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall return; 27903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } else { 28003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set power mode " 28103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall << getPowerModeName(mode) << " on display " << display; 28203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 28303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 28403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (mode == HWC2_POWER_MODE_OFF) { 28503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall mActiveDisplays.erase(display); 28603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } else { 28703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall mActiveDisplays.insert(display); 28803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 28903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 29003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 291572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall void setVsyncEnabled(hwc2_display_t display, hwc2_vsync_t enabled, 292572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_error_t* outErr = nullptr) 293572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall { 294572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_VSYNC_ENABLED>( 295572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall getFunction(HWC2_FUNCTION_SET_VSYNC_ENABLED)); 296572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 297572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 298572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 299572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall enabled)); 300572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall if (outErr) { 301572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall *outErr = err; 302572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } else { 303572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set vsync enabled " 304572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall << getVsyncName(enabled); 305572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 306572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 307572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 308572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall void vsyncCallback(hwc2_display_t display, int64_t timestamp) 309572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall { 310572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall std::lock_guard<std::mutex> lock(mVsyncMutex); 311572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall mVsyncDisplay = display; 312572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall mVsyncTimestamp = timestamp; 313572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall mVsyncCv.notify_all(); 314572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 315572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 316dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall void getDisplayName(hwc2_display_t display, std::string* outName, 317dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall hwc2_error_t* outErr = nullptr) 318dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall { 319dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_GET_DISPLAY_NAME>( 320dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall getFunction(HWC2_FUNCTION_GET_DISPLAY_NAME)); 321dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 322dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 323dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall uint32_t size = 0; 324dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 325dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, &size, 326dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall nullptr)); 327dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 328dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall if (err == HWC2_ERROR_NONE) { 329dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall std::vector<char> name(size); 330dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 331dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, &size, 332dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall name.data())); 333dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 334dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall outName->assign(name.data()); 335dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall } 336dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 337dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall if (outErr) { 338dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall *outErr = err; 339dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall } else { 340dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to get display name for " 341dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall << display; 342dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall } 343dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall } 344dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 3456bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall void setLayerCompositionType(hwc2_display_t display, hwc2_layer_t layer, 3466bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_composition_t composition, hwc2_error_t* outErr = nullptr) 3476bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall { 3486bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_COMPOSITION_TYPE>( 3496bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_COMPOSITION_TYPE)); 3506bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 3516bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 3526bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 3536bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall composition)); 3546bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall if (outErr) { 3556bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall *outErr = err; 3566bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } else { 3576bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer composition" 3586bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall " type " << getCompositionName(composition); 3596bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 3606bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 3616bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 3622a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall void setCursorPosition(hwc2_display_t display, hwc2_layer_t layer, 3632a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall int32_t x, int32_t y, hwc2_error_t* outErr = nullptr) 3642a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall { 3652a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_CURSOR_POSITION>( 3662a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall getFunction(HWC2_FUNCTION_SET_CURSOR_POSITION)); 3672a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 3682a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 3692a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, x, 3702a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall y)); 3712a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall if (outErr) { 3722a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall *outErr = err; 3732a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall } else { 3742a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set cursor position"; 3752a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall } 3762a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall } 3772a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 378ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall void setLayerBlendMode(hwc2_display_t display, hwc2_layer_t layer, 379ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall hwc2_blend_mode_t mode, hwc2_error_t* outErr = nullptr) 380ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall { 381ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_BLEND_MODE>( 382ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_BLEND_MODE)); 383ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 384ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 385ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 386ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall mode)); 387ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall if (outErr) { 388ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall *outErr = err; 389ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall } else { 390ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer blend mode " 391ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall << getBlendModeName(mode); 392ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall } 393ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall } 394ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 3955a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall void setLayerBuffer(hwc2_display_t display, hwc2_layer_t layer, 3965a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall buffer_handle_t buffer, int32_t acquireFence, 3975a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall hwc2_error_t* outErr = nullptr) 3985a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall { 3995a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_BUFFER>( 4005a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_BUFFER)); 4015a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 4025a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 4035a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 4045a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall buffer, acquireFence)); 4055a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall if (outErr) { 4065a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall *outErr = err; 4075a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall } else { 4085a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer buffer"; 4095a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall } 4105a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall } 4115a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 412ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall void setLayerColor(hwc2_display_t display, hwc2_layer_t layer, 413ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall hwc_color_t color, hwc2_error_t* outErr = nullptr) 414ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall { 415ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_COLOR>( 416ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_COLOR)); 417ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 418ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 419ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 420ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall color)); 421ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall if (outErr) { 422ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall *outErr = err; 423ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall } else { 424ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer color"; 425ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall } 426ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall } 427ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 428b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall void setLayerDataspace(hwc2_display_t display, hwc2_layer_t layer, 429b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall android_dataspace_t dataspace, hwc2_error_t* outErr = nullptr) 430b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall { 431b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_DATASPACE>( 432b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_DATASPACE)); 433b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 434b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 435b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 436b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall layer, dataspace)); 437b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall if (outErr) { 438b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall *outErr = err; 439b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall } else { 440b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer dataspace"; 441b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall } 442b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall } 443b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 444600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall void setLayerDisplayFrame(hwc2_display_t display, hwc2_layer_t layer, 445600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall const hwc_rect_t& displayFrame, hwc2_error_t* outErr = nullptr) 446600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall { 447600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_DISPLAY_FRAME>( 448600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_DISPLAY_FRAME)); 449600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 450600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 451600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 452600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall displayFrame)); 453600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall if (outErr) { 454600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall *outErr = err; 455600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall } else { 456600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer display" 457600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall " frame"; 458600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall } 459600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall } 460600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 4612b1f53060ea8587a428f826cf7890354ff124722Marissa Wall void setLayerPlaneAlpha(hwc2_display_t display, hwc2_layer_t layer, 4622b1f53060ea8587a428f826cf7890354ff124722Marissa Wall float alpha, hwc2_error_t* outErr = nullptr) 4632b1f53060ea8587a428f826cf7890354ff124722Marissa Wall { 4642b1f53060ea8587a428f826cf7890354ff124722Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_PLANE_ALPHA>( 4652b1f53060ea8587a428f826cf7890354ff124722Marissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_PLANE_ALPHA)); 4662b1f53060ea8587a428f826cf7890354ff124722Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 4672b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 4682b1f53060ea8587a428f826cf7890354ff124722Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 4692b1f53060ea8587a428f826cf7890354ff124722Marissa Wall alpha)); 4702b1f53060ea8587a428f826cf7890354ff124722Marissa Wall if (outErr) { 4712b1f53060ea8587a428f826cf7890354ff124722Marissa Wall *outErr = err; 4722b1f53060ea8587a428f826cf7890354ff124722Marissa Wall } else { 4732b1f53060ea8587a428f826cf7890354ff124722Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer plane alpha " 4742b1f53060ea8587a428f826cf7890354ff124722Marissa Wall << alpha; 4752b1f53060ea8587a428f826cf7890354ff124722Marissa Wall } 4762b1f53060ea8587a428f826cf7890354ff124722Marissa Wall } 4772b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 478c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall void setLayerSourceCrop(hwc2_display_t display, hwc2_layer_t layer, 479c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall const hwc_frect_t& sourceCrop, hwc2_error_t* outErr = nullptr) 480c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall { 481c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_SOURCE_CROP>( 482c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_SOURCE_CROP)); 483c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 484c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 485c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 486c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall sourceCrop)); 487c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall if (outErr) { 488c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall *outErr = err; 489c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall } else { 490c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer source crop"; 491c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall } 492c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall } 493c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 494ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall void setLayerSurfaceDamage(hwc2_display_t display, hwc2_layer_t layer, 495ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall const hwc_region_t& surfaceDamage, hwc2_error_t* outErr = nullptr) 496ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall { 497ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_SURFACE_DAMAGE>( 498ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_SURFACE_DAMAGE)); 499ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 500ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 501ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 502ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall surfaceDamage)); 503ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall if (outErr) { 504ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall *outErr = err; 505ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall } else { 506ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer surface" 507ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall " damage"; 508ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall } 509ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall } 510ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 511ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall void setLayerTransform(hwc2_display_t display, hwc2_layer_t layer, 512ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall hwc_transform_t transform, hwc2_error_t* outErr = nullptr) 513ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall { 514ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_TRANSFORM>( 515ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_TRANSFORM)); 516ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 517ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 518ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 519ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall transform)); 520ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall if (outErr) { 521ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall *outErr = err; 522ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall } else { 523ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer transform " 524ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall << getTransformName(transform); 525ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall } 526ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall } 527ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 528f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall void setLayerVisibleRegion(hwc2_display_t display, hwc2_layer_t layer, 529f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall const hwc_region_t& visibleRegion, hwc2_error_t* outErr = nullptr) 530f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall { 531f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_VISIBLE_REGION>( 532f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_VISIBLE_REGION)); 533f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 534f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 535f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 536f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall visibleRegion)); 537f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall if (outErr) { 538f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall *outErr = err; 539f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall } else { 540f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer visible" 541f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall " region"; 542f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall } 543f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall } 544f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 545273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall void setLayerZOrder(hwc2_display_t display, hwc2_layer_t layer, 546273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall uint32_t zOrder, hwc2_error_t* outErr = nullptr) 547273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall { 548273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_Z_ORDER>( 549273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_Z_ORDER)); 550273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 551273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 552273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 553273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall zOrder)); 554273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall if (outErr) { 555273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall *outErr = err; 556273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } else { 557273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer z order " 558273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall << zOrder; 559273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 560273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 561273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 5621cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall void validateDisplay(hwc2_display_t display, uint32_t* outNumTypes, 5631cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall uint32_t* outNumRequests, hwc2_error_t* outErr) 5641cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall { 5651cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_VALIDATE_DISPLAY>( 5661cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall getFunction(HWC2_FUNCTION_VALIDATE_DISPLAY)); 5671cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 5681cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 5691cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall *outErr = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 5701cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall outNumTypes, outNumRequests)); 5711cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } 5721cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 5731cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall void validateDisplay(hwc2_display_t display, uint32_t* outNumTypes, 5741cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall uint32_t* outNumRequests, bool* outHasChanges) 5751cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall { 5761cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 5771cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 5781cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(validateDisplay(display, outNumTypes, 5791cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall outNumRequests, &err)); 5801cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 5811cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall if (err != HWC2_ERROR_HAS_CHANGES) { 5821cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall *outHasChanges = false; 5831cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_EQ(err, HWC2_ERROR_NONE) << "failed to validate display"; 5841cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } else { 5851cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall *outHasChanges = true; 5861cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } 5871cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } 5881cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 5894d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wallprotected: 5904d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall hwc2_function_pointer_t getFunction(hwc2_function_descriptor_t descriptor) 5914d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall { 5924d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall return mHwc2Device->getFunction(mHwc2Device, descriptor); 5934d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall } 5944d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 5954d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall void getCapabilities(std::vector<hwc2_capability_t>* outCapabilities) 5964d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall { 5974d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall uint32_t num = 0; 5984d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 5994d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall mHwc2Device->getCapabilities(mHwc2Device, &num, nullptr); 6004d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 6014d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall outCapabilities->resize(num); 6024d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 6034d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall mHwc2Device->getCapabilities(mHwc2Device, &num, 6044d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall reinterpret_cast<int32_t*>(outCapabilities->data())); 6054d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall } 6064d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 607cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall /* Registers a hotplug callback and waits for hotplug callbacks. This 608cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall * function will have no effect if called more than once. */ 609cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall void populateDisplays() 610cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall { 611cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall /* Sets the hotplug status to receiving */ 612cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall { 613cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::lock_guard<std::mutex> lock(mHotplugMutex); 614cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 615cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall if (mHotplugStatus != Hwc2TestHotplugStatus::Init) 616cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall return; 617cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall mHotplugStatus = Hwc2TestHotplugStatus::Receiving; 618cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 619cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 620cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall /* Registers the callback. This function call cannot be locked because 621cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall * a callback could happen on the same thread */ 622cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_HOTPLUG, this, 623cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall reinterpret_cast<hwc2_function_pointer_t>( 624cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2TestHotplugCallback))); 625cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 626cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall /* Waits for hotplug events. If a hotplug event has not come within 1 627cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall * second, stop waiting. */ 628cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::unique_lock<std::mutex> lock(mHotplugMutex); 629cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 630cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall while (mHotplugCv.wait_for(lock, std::chrono::seconds(1)) != 631cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::cv_status::timeout) { } 632cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 633cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall /* Sets the hotplug status to done. Future calls will have no effect */ 634cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall mHotplugStatus = Hwc2TestHotplugStatus::Done; 635cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 636cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 637cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall void getBadDisplay(hwc2_display_t* outDisplay) 638cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall { 639cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall for (hwc2_display_t display = 0; display < UINT64_MAX; display++) { 640cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall if (mDisplays.count(display) == 0) { 641cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall *outDisplay = display; 642cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall return; 643cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 644cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 645cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall ASSERT_TRUE(false) << "Unable to find bad display. UINT64_MAX displays" 646cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall " are registered. This should never happen."; 647cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 648cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 6491db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall /* NOTE: will create min(newlayerCnt, max supported layers) layers */ 6501db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall void createLayers(hwc2_display_t display, 6511db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall std::vector<hwc2_layer_t>* outLayers, size_t newLayerCnt) 6521db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall { 6531db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall std::vector<hwc2_layer_t> newLayers; 6541db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_layer_t layer; 6551db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 6561db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 6571db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (size_t i = 0; i < newLayerCnt; i++) { 6581db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 6591db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_NO_FATAL_FAILURE(createLayer(display, &layer, &err)); 6601db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall if (err == HWC2_ERROR_NO_RESOURCES) 6611db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall break; 6621db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall if (err != HWC2_ERROR_NONE) { 6631db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall newLayers.clear(); 6641db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to create layer"; 6651db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 6661db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall newLayers.push_back(layer); 6671db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 6681db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 6691db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall *outLayers = std::move(newLayers); 6701db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 6711db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 6721db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall void destroyLayers(hwc2_display_t display, 6731db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall std::vector<hwc2_layer_t>&& layers) 6741db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall { 6751db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (hwc2_layer_t layer : layers) { 6761db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 6771db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 6781db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 6791db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 680cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall void getInvalidConfig(hwc2_display_t display, hwc2_config_t* outConfig) 681cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall { 682cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs; 683cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 684cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 685cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 686cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_config_t CONFIG_MAX = UINT32_MAX; 687cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 688cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_LE(configs.size() - 1, CONFIG_MAX) << "every config value" 689cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall " (2^32 values) has been taken which shouldn't happen"; 690cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 691cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_config_t config; 692cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (config = 0; config < CONFIG_MAX; config++) { 693cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall if (std::count(configs.begin(), configs.end(), config) == 0) 694cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall break; 695cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 696cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 697cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall *outConfig = config; 698cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 699cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 700572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall void enableVsync(hwc2_display_t display) 701572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall { 702572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_VSYNC, this, 703572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall reinterpret_cast<hwc2_function_pointer_t>( 704572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2TestVsyncCallback))); 705572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE)); 706572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 707572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 708572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall void disableVsync(hwc2_display_t display) 709572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall { 710572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 711572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 712572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 713572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall void waitForVsync(hwc2_display_t* outDisplay = nullptr, 714572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall int64_t* outTimestamp = nullptr) 715572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall { 716572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall std::unique_lock<std::mutex> lock(mVsyncMutex); 717572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_EQ(mVsyncCv.wait_for(lock, std::chrono::seconds(3)), 718572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall std::cv_status::no_timeout) << "timed out attempting to get" 719572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall " vsync callback"; 720572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall if (outDisplay) 721572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall *outDisplay = mVsyncDisplay; 722572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall if (outTimestamp) 723572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall *outTimestamp = mVsyncTimestamp; 724572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 725572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 7266bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* Calls a set property function from Hwc2Test to set a property value from 7276bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * Hwc2TestLayer to hwc2_layer_t on hwc2_display_t */ 7286bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall using TestLayerPropertyFunction = void (*)(Hwc2Test* test, 7296bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_display_t display, hwc2_layer_t layer, 7305a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr); 7316bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 732273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall /* Calls a set property function from Hwc2Test to set property values from 733273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall * Hwc2TestLayers to hwc2_layer_t on hwc2_display_t */ 734273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall using TestLayerPropertiesFunction = void (*)(Hwc2Test* test, 735273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall hwc2_display_t display, hwc2_layer_t layer, 7365a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayers* testLayers); 737273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 7386bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* Calls a set property function from Hwc2Test to set a bad property value 7396bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * on hwc2_layer_t on hwc2_display_t */ 7406bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall using TestLayerPropertyBadLayerFunction = void (*)(Hwc2Test* test, 7416bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_display_t display, hwc2_layer_t layer, 7425a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr); 7436bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7446bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* Calls a set property function from Hwc2Test to set a bad property value 7456bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * on hwc2_layer_t on hwc2_display_t */ 7466bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall using TestLayerPropertyBadParameterFunction = void (*)(Hwc2Test* test, 7476bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_display_t display, hwc2_layer_t layer, hwc2_error_t* outErr); 7486bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7491cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall /* Is called after a display is powered on and all layer properties have 7501cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall * been set. It should be used to test functions such as validate, accepting 7511cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall * changes, present, etc. */ 7521cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall using TestDisplayLayersFunction = void (*)(Hwc2Test* test, 7531cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall hwc2_display_t display, const std::vector<hwc2_layer_t>& layers); 7541cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 7556bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* Advances a property of Hwc2TestLayer */ 7566bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall using AdvanceProperty = bool (*)(Hwc2TestLayer* testLayer); 7576bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 758f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall /* Advances properties of Hwc2TestLayers */ 759f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall using AdvanceProperties = bool (*)(Hwc2TestLayers* testLayer); 760f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 7616bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* For each active display it cycles through each display config and tests 7626bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * each property value. It creates a layer, sets the property and then 7636bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * destroys the layer */ 7646bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall void setLayerProperty(Hwc2TestCoverage coverage, 7656bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall TestLayerPropertyFunction function, AdvanceProperty advance) 7666bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall { 7676bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto display : mDisplays) { 7686bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall std::vector<hwc2_config_t> configs; 7696bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7706bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 7716bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7726bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto config : configs) { 7736bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_layer_t layer; 774600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Area displayArea; 7756bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7766bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 777600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveDisplayArea(display, 778600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall &displayArea)); 779600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Hwc2TestLayer testLayer(coverage, displayArea); 7806bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7816bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall do { 7826bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 7836bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7846bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(function(this, display, layer, 7855a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall &testLayer, nullptr)); 7866bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7876bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 7886bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } while (advance(&testLayer)); 7896bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 7906bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 7916bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 7926bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7936bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* For each active display it cycles through each display config and tests 7946bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * each property value. It creates a layer, cycles through each property 7956bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * value and updates the layer property value and then destroys the layer */ 7966bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall void setLayerPropertyUpdate(Hwc2TestCoverage coverage, 7976bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall TestLayerPropertyFunction function, AdvanceProperty advance) 7986bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall { 7996bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto display : mDisplays) { 8006bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall std::vector<hwc2_config_t> configs; 8016bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 8026bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 8036bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 8046bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto config : configs) { 8056bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_layer_t layer; 806600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Area displayArea; 8076bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 8086bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 809600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveDisplayArea(display, 810600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall &displayArea)); 811600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Hwc2TestLayer testLayer(coverage, displayArea); 8126bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 8136bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 8146bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 8156bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall do { 8166bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(function(this, display, layer, 8175a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall &testLayer, nullptr)); 8186bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } while (advance(&testLayer)); 8196bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 8206bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 8216bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 8226bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 8236bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 8246bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 825273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall /* For each active display it cycles through each display config and tests 826273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall * each property value. It creates multiple layers, calls the 827273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall * TestLayerPropertiesFunction to set property values and then 828273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall * destroys the layers */ 829273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall void setLayerProperties(Hwc2TestCoverage coverage, size_t layerCnt, 830f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall TestLayerPropertiesFunction function, AdvanceProperties advance) 831273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall { 832273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall for (auto display : mDisplays) { 833273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall std::vector<hwc2_config_t> configs; 834273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 835273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 836273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 837273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall for (auto config : configs) { 838273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall std::vector<hwc2_layer_t> layers; 839600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Area displayArea; 840273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 841273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 842600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveDisplayArea(display, 843600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall &displayArea)); 844273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 845273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayers(display, &layers, layerCnt)); 846600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Hwc2TestLayers testLayers(layers, coverage, displayArea); 847273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 848f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall do { 849f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall for (auto layer : layers) { 850f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall EXPECT_NO_FATAL_FAILURE(function(this, display, layer, 851f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall &testLayers)); 852f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall } 853f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall } while (advance(&testLayers)); 854273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 855273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayers(display, std::move(layers))); 856273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 857273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 858273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 859273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 8606bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* For each active display it cycles through each display config. 8616bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * 1) It attempts to set a valid property value to bad layer handle. 8626bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * 2) It creates a layer x and attempts to set a valid property value to 8636bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * layer x + 1 8646bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * 3) It destroys the layer x and attempts to set a valid property value to 8656bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * the destroyed layer x. 8666bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall */ 8676bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall void setLayerPropertyBadLayer(Hwc2TestCoverage coverage, 8686bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall TestLayerPropertyBadLayerFunction function) 8696bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall { 8706bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto display : mDisplays) { 8716bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall std::vector<hwc2_config_t> configs; 8726bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 8736bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 8746bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 8756bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto config : configs) { 8766bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_layer_t layer = 0; 877600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Area displayArea; 8786bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 8796bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 8806bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 881600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveDisplayArea(display, 882600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall &displayArea)); 883600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Hwc2TestLayer testLayer(coverage, displayArea); 8846bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 8856bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(function(this, display, layer, 8865a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall &testLayer, &err)); 8876bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 8886bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 8896bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 8906bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 8916bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(function(this, display, layer + 1, 8925a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall &testLayer, &err)); 8936bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 8946bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 8956bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 8966bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 8976bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(function(this, display, layer, 8985a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall &testLayer, &err)); 8996bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 9006bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 9016bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 9026bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 9036bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 9046bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* For each active display it cycles through each display config and tests 9056bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * each property value. It creates a layer, sets a bad property value and 9066bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * then destroys the layer */ 9076bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall void setLayerPropertyBadParameter(TestLayerPropertyBadParameterFunction function) 9086bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall { 9096bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto display : mDisplays) { 9106bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall std::vector<hwc2_config_t> configs; 9116bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 9126bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 9136bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 9146bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto config : configs) { 9156bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_layer_t layer; 9166bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 9176bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 9186bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 9196bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 9206bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 9216bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 9226bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(function(this, display, layer, &err)); 9236bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_PARAMETER) << "returned wrong" 9246bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall " error code"; 9256bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 9266bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 9276bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 9286bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 9296bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 9306bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 9311cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall /* For each active display it powers on the display, cycles through each 9321cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall * config and creates a set of layers with a certain amount of coverage. 9331cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall * For each active display, for each config and for each set of layers, 9341cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall * it calls the TestDisplayLayersFunction */ 9351cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall void displayLayers(Hwc2TestCoverage coverage, size_t layerCnt, 9361cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall TestDisplayLayersFunction function) 9371cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall { 9381cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall for (auto display : mDisplays) { 9391cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall std::vector<hwc2_config_t> configs; 9401cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 9411cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 9421cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 9431cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 9441cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 9451cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall for (auto config : configs) { 9461cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall Area displayArea; 9471cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall std::vector<hwc2_layer_t> layers; 9481cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 9491cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 9501cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveDisplayArea(display, &displayArea)); 9511cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 9521cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_NO_FATAL_FAILURE(createLayers(display, &layers, layerCnt)); 9531cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall Hwc2TestLayers testLayers(layers, coverage, displayArea); 9541cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 9551cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall do { 9561cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall bool skip; 9571cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 9581cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperties(display, layers, 9591cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall &testLayers, &skip)); 9601cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall if (!skip) 9611cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(function(this, display, layers)); 9621cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 9631cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } while (testLayers.advance()); 9641cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 9651cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayers(display, 9661cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall std::move(layers))); 9671cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } 9681cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 9691cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 9701cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } 9711cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } 9721cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 973600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall void getActiveConfigAttribute(hwc2_display_t display, 974600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall hwc2_attribute_t attribute, int32_t* outValue) 975600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall { 976600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall hwc2_config_t config; 977600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveConfig(display, &config)); 978600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, 979600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall attribute, outValue)); 980600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_GE(*outValue, 0) << "failed to get valid " 981600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall << getAttributeName(attribute); 982600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall } 983600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 984600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall void getActiveDisplayArea(hwc2_display_t display, Area* displayArea) 985600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall { 986600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveConfigAttribute(display, 987600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall HWC2_ATTRIBUTE_WIDTH, &displayArea->width)); 988600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveConfigAttribute(display, 989600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall HWC2_ATTRIBUTE_HEIGHT, &displayArea->height)); 990600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall } 991600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 9921cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall void setLayerProperties(hwc2_display_t display, hwc2_layer_t layer, 9931cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall Hwc2TestLayers* testLayers, bool* outSkip) 9941cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall { 9951cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall hwc2_composition_t composition; 9961cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall buffer_handle_t handle = nullptr; 9971cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall int32_t acquireFence; 9981cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 9991cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall *outSkip = true; 10001cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 10011cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall if (!testLayers->contains(layer)) 10021cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall return; 10031cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 10041cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall composition = testLayers->getComposition(layer); 10051cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 10061cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall /* If the device cannot support a buffer format, then do not continue */ 10071cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall if ((composition == HWC2_COMPOSITION_DEVICE 10081cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall || composition == HWC2_COMPOSITION_CURSOR) 10091cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall && testLayers->getBuffer(layer, &handle, &acquireFence) < 0) 10101cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall return; 10111cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 10121cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerCompositionType(display, layer, 10131cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall composition, &err)); 10141cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall if (err == HWC2_ERROR_UNSUPPORTED) 10151cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_TRUE(composition != HWC2_COMPOSITION_CLIENT 10161cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall && composition != HWC2_COMPOSITION_DEVICE); 10171cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 10181cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall const hwc_rect_t cursor = testLayers->getCursorPosition(layer); 10191cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 10201cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerBuffer(display, layer, handle, 10211cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall acquireFence)); 10221cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerBlendMode(display, layer, 10231cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall testLayers->getBlendMode(layer))); 10241cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerColor(display, layer, 10251cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall testLayers->getColor(layer))); 10261cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setCursorPosition(display, layer, cursor.left, 10271cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall cursor.top)); 10281cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerDataspace(display, layer, 10291cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall testLayers->getDataspace(layer))); 10301cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerDisplayFrame(display, layer, 10311cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall testLayers->getDisplayFrame(layer))); 10321cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerPlaneAlpha(display, layer, 10331cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall testLayers->getPlaneAlpha(layer))); 10341cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerSourceCrop(display, layer, 10351cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall testLayers->getSourceCrop(layer))); 10361cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerSurfaceDamage(display, layer, 10371cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall testLayers->getSurfaceDamage(layer))); 10381cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerTransform(display, layer, 10391cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall testLayers->getTransform(layer))); 10401cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerVisibleRegion(display, layer, 10411cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall testLayers->getVisibleRegion(layer))); 10421cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerZOrder(display, layer, 10431cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall testLayers->getZOrder(layer))); 10441cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 10451cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall *outSkip = false; 10461cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } 10471cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 10481cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall void setLayerProperties(hwc2_display_t display, 10491cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall const std::vector<hwc2_layer_t>& layers, 10501cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall Hwc2TestLayers* testLayers, bool* outSkip) 10511cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall { 10521cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall for (auto layer : layers) { 10531cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerProperties(display, layer, 10541cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall testLayers, outSkip)); 10551cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall if (*outSkip) 10561cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall return; 10571cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } 10581cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } 10591cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 10604d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall hwc2_device_t* mHwc2Device = nullptr; 1061cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1062cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall enum class Hwc2TestHotplugStatus { 1063cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall Init = 1, 1064cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall Receiving, 1065cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall Done, 1066cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall }; 1067cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1068cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::mutex mHotplugMutex; 1069cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::condition_variable mHotplugCv; 1070cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall Hwc2TestHotplugStatus mHotplugStatus = Hwc2TestHotplugStatus::Init; 1071cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::unordered_set<hwc2_display_t> mDisplays; 10721db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 10731db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall /* Store all created layers that have not been destroyed. If an ASSERT_* 10741db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall * fails, then destroy the layers on exit */ 10751db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall std::set<std::pair<hwc2_display_t, hwc2_layer_t>> mLayers; 107603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 107703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall /* Store the power mode state. If it is not HWC2_POWER_MODE_OFF when 107803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall * tearing down the test cases, change it to HWC2_POWER_MODE_OFF */ 107903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall std::set<hwc2_display_t> mActiveDisplays; 1080572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1081572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall std::mutex mVsyncMutex; 1082572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall std::condition_variable mVsyncCv; 1083572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_display_t mVsyncDisplay; 1084572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall int64_t mVsyncTimestamp = -1; 10854d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall}; 10864d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 1087cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wallvoid hwc2TestHotplugCallback(hwc2_callback_data_t callbackData, 1088cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2_display_t display, int32_t connection) 1089cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall{ 1090cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall if (callbackData) 1091cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall static_cast<Hwc2Test*>(callbackData)->hotplugCallback(display, 1092cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall connection); 1093cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall} 1094cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1095572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wallvoid hwc2TestVsyncCallback(hwc2_callback_data_t callbackData, 1096572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_display_t display, int64_t timestamp) 1097572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 1098572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall if (callbackData) 1099572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall static_cast<Hwc2Test*>(callbackData)->vsyncCallback(display, 1100572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall timestamp); 1101572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 1102572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1103ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wallvoid setBlendMode(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 11045a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 1105ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall{ 1106ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerBlendMode(display, layer, 11075a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getBlendMode(), outErr)); 11085a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall} 11095a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 11105a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wallvoid setBuffer(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 11115a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 11125a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall{ 11135a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall buffer_handle_t handle; 11145a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall android::base::unique_fd acquireFence; 11155a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall hwc2_composition_t composition = testLayer->getComposition(); 11165a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 11175a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall if (composition == HWC2_COMPOSITION_CLIENT 11185a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall || composition == HWC2_COMPOSITION_SOLID_COLOR 11195a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall || composition == HWC2_COMPOSITION_SIDEBAND) 11205a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall return; 11215a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 11225a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall if (testLayer->getBuffer(&handle, &acquireFence) < 0) 11235a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall return; 11245a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 11255a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerCompositionType(display, layer, 11265a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall composition)); 11275a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerBuffer(display, layer, 11285a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall handle, acquireFence, outErr)); 1129ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall} 1130ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 1131ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wallvoid setColor(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 11325a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 1133ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall{ 1134ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerCompositionType(display, 1135ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall layer, HWC2_COMPOSITION_SOLID_COLOR)); 1136ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerPlaneAlpha(display, 11375a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall layer, testLayer->getPlaneAlpha())); 1138ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerBlendMode(display, 11395a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall layer, testLayer->getBlendMode())); 1140ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerColor(display, layer, 11415a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getColor(), outErr)); 1142ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall} 1143ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 11446bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wallvoid setComposition(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 11455a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 11466bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall{ 11475a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall hwc2_composition_t composition = testLayer->getComposition(); 11486bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 11496bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 11506bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerCompositionType(display, layer, 11516bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall composition, &err)); 11526bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall if (outErr) { 11536bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall *outErr = err; 11546bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall return; 11556bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 11566bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 11576bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall if (composition != HWC2_COMPOSITION_SIDEBAND) { 11586bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall EXPECT_EQ(err, HWC2_ERROR_NONE) << "returned wrong error code"; 11596bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } else { 11606bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall EXPECT_TRUE(err == HWC2_ERROR_NONE || err == HWC2_ERROR_UNSUPPORTED) 11616bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall << "returned wrong error code"; 11626bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 11636bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall} 11646bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 11652a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wallvoid setCursorPosition(Hwc2Test* test, hwc2_display_t display, 11665a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall hwc2_layer_t layer, Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 11672a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall{ 11682a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerCompositionType(display, 11692a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall layer, HWC2_COMPOSITION_CURSOR)); 11702a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 11715a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall const hwc_rect_t cursorPosition = testLayer->getCursorPosition(); 11722a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setCursorPosition(display, layer, 11732a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall cursorPosition.left, cursorPosition.top, outErr)); 11742a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall} 11752a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 1176b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wallvoid setDataspace(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 11775a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 1178b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall{ 1179b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerDataspace(display, layer, 11805a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getDataspace(), outErr)); 1181b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall} 1182b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 1183600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wallvoid setDisplayFrame(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 11845a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 1185600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall{ 1186600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerDisplayFrame(display, layer, 11875a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getDisplayFrame(), outErr)); 1188600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall} 1189600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 11902b1f53060ea8587a428f826cf7890354ff124722Marissa Wallvoid setPlaneAlpha(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 11915a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t *outErr) 11922b1f53060ea8587a428f826cf7890354ff124722Marissa Wall{ 11932b1f53060ea8587a428f826cf7890354ff124722Marissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerBlendMode(display, layer, 11945a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getBlendMode())); 11952b1f53060ea8587a428f826cf7890354ff124722Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerPlaneAlpha(display, layer, 11965a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getPlaneAlpha(), outErr)); 11972b1f53060ea8587a428f826cf7890354ff124722Marissa Wall} 11982b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 1199c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wallvoid setSourceCrop(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 12005a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 1201c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall{ 1202c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerSourceCrop(display, layer, 12035a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getSourceCrop(), outErr)); 1204c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall} 1205c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 1206ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wallvoid setSurfaceDamage(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 12075a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 1208ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall{ 1209ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerSurfaceDamage(display, layer, 12105a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getSurfaceDamage(), outErr)); 1211ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall} 1212ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 1213ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wallvoid setTransform(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 12145a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 1215ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall{ 1216ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerTransform(display, layer, 12175a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getTransform(), outErr)); 1218ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall} 1219ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 1220f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wallvoid setVisibleRegion(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 1221f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 1222f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall{ 1223f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerVisibleRegion(display, layer, 1224f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall testLayer->getVisibleRegion(), outErr)); 1225f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall} 1226f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 1227273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wallvoid setZOrder(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 12285a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 1229273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall{ 1230273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerZOrder(display, layer, 12315a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getZOrder(), outErr)); 1232273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall} 1233273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 1234ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wallbool advanceBlendMode(Hwc2TestLayer* testLayer) 1235ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall{ 1236ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall return testLayer->advanceBlendMode(); 1237ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall} 1238ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 12395a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wallbool advanceBuffer(Hwc2TestLayer* testLayer) 12405a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall{ 12415a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall if (testLayer->advanceComposition()) 12425a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall return true; 12435a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall return testLayer->advanceBufferArea(); 12445a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall} 12455a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 1246ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wallbool advanceColor(Hwc2TestLayer* testLayer) 1247ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall{ 1248ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall /* Color depends on blend mode so advance blend mode last so color is not 1249ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall * force to update as often */ 1250ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall if (testLayer->advancePlaneAlpha()) 1251ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall return true; 1252ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall if (testLayer->advanceColor()) 1253ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall return true; 1254ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall return testLayer->advanceBlendMode(); 1255ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall} 1256ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 12576bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wallbool advanceComposition(Hwc2TestLayer* testLayer) 12586bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall{ 12596bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall return testLayer->advanceComposition(); 12606bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall} 12616bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 12622a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wallbool advanceCursorPosition(Hwc2TestLayer* testLayer) 12632a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall{ 12642a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall return testLayer->advanceCursorPosition(); 12652a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall} 12662a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 1267b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wallbool advanceDataspace(Hwc2TestLayer* testLayer) 1268b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall{ 1269b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall return testLayer->advanceDataspace(); 1270b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall} 1271b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 1272600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wallbool advanceDisplayFrame(Hwc2TestLayer* testLayer) 1273600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall{ 1274600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall return testLayer->advanceDisplayFrame(); 1275600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall} 1276600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 12772b1f53060ea8587a428f826cf7890354ff124722Marissa Wallbool advancePlaneAlpha(Hwc2TestLayer* testLayer) 12782b1f53060ea8587a428f826cf7890354ff124722Marissa Wall{ 12792b1f53060ea8587a428f826cf7890354ff124722Marissa Wall return testLayer->advancePlaneAlpha(); 12802b1f53060ea8587a428f826cf7890354ff124722Marissa Wall} 12812b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 1282c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wallbool advanceSourceCrop(Hwc2TestLayer* testLayer) 1283c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall{ 1284c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall if (testLayer->advanceSourceCrop()) 1285c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall return true; 1286c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall return testLayer->advanceBufferArea(); 1287c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall} 1288c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 1289ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wallbool advanceSurfaceDamage(Hwc2TestLayer* testLayer) 1290ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall{ 1291ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall if (testLayer->advanceSurfaceDamage()) 1292ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall return true; 1293ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall return testLayer->advanceBufferArea(); 1294ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall} 1295ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 1296ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wallbool advanceTransform(Hwc2TestLayer* testLayer) 1297ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall{ 1298ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall return testLayer->advanceTransform(); 1299ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall} 1300ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 1301f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wallbool advanceVisibleRegions(Hwc2TestLayers* testLayers) 1302f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall{ 1303f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall return testLayers->advanceVisibleRegions(); 1304f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall} 1305f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 13064d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 13074d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wallstatic const std::array<hwc2_function_descriptor_t, 42> requiredFunctions = {{ 13084d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_ACCEPT_DISPLAY_CHANGES, 13094d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_CREATE_LAYER, 13104d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_CREATE_VIRTUAL_DISPLAY, 13114d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_DESTROY_LAYER, 13124d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_DESTROY_VIRTUAL_DISPLAY, 13134d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_DUMP, 13144d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_ACTIVE_CONFIG, 13154d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_CHANGED_COMPOSITION_TYPES, 13164d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_CLIENT_TARGET_SUPPORT, 13174d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_COLOR_MODES, 13184d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_DISPLAY_ATTRIBUTE, 13194d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_DISPLAY_CONFIGS, 13204d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_DISPLAY_NAME, 13214d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_DISPLAY_REQUESTS, 13224d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_DISPLAY_TYPE, 13234d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_DOZE_SUPPORT, 13244d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_HDR_CAPABILITIES, 13254d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_MAX_VIRTUAL_DISPLAY_COUNT, 13264d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_RELEASE_FENCES, 13274d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_PRESENT_DISPLAY, 13284d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_REGISTER_CALLBACK, 13294d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_ACTIVE_CONFIG, 13304d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_CLIENT_TARGET, 13314d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_COLOR_MODE, 13324d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_COLOR_TRANSFORM, 13334d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_CURSOR_POSITION, 13344d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_BLEND_MODE, 13354d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_BUFFER, 13364d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_COLOR, 13374d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_COMPOSITION_TYPE, 13384d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_DATASPACE, 13394d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_DISPLAY_FRAME, 13404d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_PLANE_ALPHA, 13414d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_SOURCE_CROP, 13424d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_SURFACE_DAMAGE, 13434d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_TRANSFORM, 13444d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_VISIBLE_REGION, 13454d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_Z_ORDER, 13464d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_OUTPUT_BUFFER, 13474d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_POWER_MODE, 13484d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_VSYNC_ENABLED, 13494d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_VALIDATE_DISPLAY, 13504d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall}}; 13514d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 13524d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall/* TESTCASE: Tests that the HWC2 supports all required functions. */ 13534d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa WallTEST_F(Hwc2Test, GET_FUNCTION) 13544d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall{ 13554d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall for (hwc2_function_descriptor_t descriptor : requiredFunctions) { 13564d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall hwc2_function_pointer_t pfn = getFunction(descriptor); 13574d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall EXPECT_TRUE(pfn) << "failed to get function " 13584d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall << getFunctionDescriptorName(descriptor); 13594d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall } 13604d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall} 13614d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 13624d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall/* TESTCASE: Tests that the HWC2 fails to retrieve and invalid function. */ 13634d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa WallTEST_F(Hwc2Test, GET_FUNCTION_invalid_function) 13644d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall{ 13654d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall hwc2_function_pointer_t pfn = getFunction(HWC2_FUNCTION_INVALID); 13664d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall EXPECT_FALSE(pfn) << "failed to get invalid function"; 13674d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall} 13684d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 13694d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall/* TESTCASE: Tests that the HWC2 does not return an invalid capability. */ 13704d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa WallTEST_F(Hwc2Test, GET_CAPABILITIES) 13714d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall{ 13724d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall std::vector<hwc2_capability_t> capabilities; 13734d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 13744d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall getCapabilities(&capabilities); 13754d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 13764d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall EXPECT_EQ(std::count(capabilities.begin(), capabilities.end(), 13774d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_CAPABILITY_INVALID), 0); 13784d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall} 1379a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 1380a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wallstatic const std::array<hwc2_callback_descriptor_t, 3> callbackDescriptors = {{ 1381a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall HWC2_CALLBACK_HOTPLUG, 1382a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall HWC2_CALLBACK_REFRESH, 1383a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall HWC2_CALLBACK_VSYNC, 1384a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall}}; 1385a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 1386a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall/* TESTCASE: Tests that the HWC2 can successfully register all required 1387a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall * callback functions. */ 1388a4b01488e852c0c16df89d04914e6f060dd862e3Marissa WallTEST_F(Hwc2Test, REGISTER_CALLBACK) 1389a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall{ 1390a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall hwc2_callback_data_t data = reinterpret_cast<hwc2_callback_data_t>( 1391a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall const_cast<char*>("data")); 1392a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 1393a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall for (auto descriptor : callbackDescriptors) { 1394a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(descriptor, data, 1395a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall []() { return; })); 1396a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall } 1397a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall} 1398a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 1399a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall/* TESTCASE: Test that the HWC2 fails to register invalid callbacks. */ 1400a4b01488e852c0c16df89d04914e6f060dd862e3Marissa WallTEST_F(Hwc2Test, REGISTER_CALLBACK_bad_parameter) 1401a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall{ 1402a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall hwc2_callback_data_t data = reinterpret_cast<hwc2_callback_data_t>( 1403a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall const_cast<char*>("data")); 1404a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 1405a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 1406a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_INVALID, data, 1407a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall []() { return; }, &err)); 1408a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_PARAMETER) << "returned wrong error code"; 1409a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall} 1410a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 1411a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall/* TESTCASE: Tests that the HWC2 can register a callback with null data. */ 1412a4b01488e852c0c16df89d04914e6f060dd862e3Marissa WallTEST_F(Hwc2Test, REGISTER_CALLBACK_null_data) 1413a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall{ 1414a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall hwc2_callback_data_t data = nullptr; 1415a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 1416a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall for (auto descriptor : callbackDescriptors) { 1417a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(descriptor, data, 1418a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall []() { return; })); 1419a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall } 1420a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall} 1421cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1422cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall/* TESTCASE: Tests that the HWC2 returns the correct display type for each 1423cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall * physical display. */ 1424cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa WallTEST_F(Hwc2Test, GET_DISPLAY_TYPE) 1425cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall{ 1426cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall for (auto display : mDisplays) { 1427cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2_display_type_t type; 1428cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1429cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayType(display, &type)); 1430cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall EXPECT_EQ(type, HWC2_DISPLAY_TYPE_PHYSICAL) << "failed to return" 1431cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall " correct display type"; 1432cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 1433cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall} 1434cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1435cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall/* TESTCASE: Tests that the HWC2 returns an error when the display type of a bad 1436cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall * display is requested. */ 1437cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa WallTEST_F(Hwc2Test, GET_DISPLAY_TYPE_bad_display) 1438cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall{ 1439cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2_display_t display; 1440cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2_display_type_t type; 1441cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 1442cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1443cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 1444cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1445cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayType(display, &type, &err)); 1446cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 1447cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall} 14481db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 14491db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall/* TESTCASE: Tests that the HWC2 can create and destroy layers. */ 14501db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa WallTEST_F(Hwc2Test, CREATE_DESTROY_LAYER) 14511db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall{ 14521db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (auto display : mDisplays) { 14531db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_layer_t layer; 14541db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 14551db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 14561db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 14571db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 14581db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 14591db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall} 14601db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 14611db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall/* TESTCASE: Tests that the HWC2 cannot create a layer for a bad display */ 14621db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa WallTEST_F(Hwc2Test, CREATE_LAYER_bad_display) 14631db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall{ 14641db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_display_t display; 14651db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_layer_t layer; 14661db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 14671db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 14681db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 14691db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 14701db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer, &err)); 14711db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 14721db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall} 14731db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 14741db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall/* TESTCASE: Tests that the HWC2 will either support a large number of resources 14751db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall * or will return no resources. */ 14761db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa WallTEST_F(Hwc2Test, CREATE_LAYER_no_resources) 14771db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall{ 14781db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall const size_t layerCnt = 1000; 14791db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 14801db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (auto display : mDisplays) { 14811db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall std::vector<hwc2_layer_t> layers; 14821db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 14831db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(createLayers(display, &layers, layerCnt)); 14841db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 14851db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayers(display, std::move(layers))); 14861db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 14871db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall} 14881db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 14891db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall/* TESTCASE: Tests that the HWC2 cannot destroy a layer for a bad display */ 14901db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa WallTEST_F(Hwc2Test, DESTROY_LAYER_bad_display) 14911db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall{ 14921db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_display_t badDisplay; 14931db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 14941db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&badDisplay)); 14951db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 14961db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (auto display : mDisplays) { 14971db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_layer_t layer = 0; 14981db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 14991db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 15001db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(badDisplay, layer, &err)); 15011db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 15021db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 15031db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 15041db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 15051db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(badDisplay, layer, &err)); 15061db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 15071db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 15081db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 15091db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 15101db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall} 15111db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 15121db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall/* TESTCASE: Tests that the HWC2 cannot destory a bad layer */ 15131db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa WallTEST_F(Hwc2Test, DESTROY_LAYER_bad_layer) 15141db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall{ 15151db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (auto display : mDisplays) { 15161db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_layer_t layer; 15171db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 15181db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 15191db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, UINT64_MAX / 2, &err)); 15201db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 15211db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 15221db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, 0, &err)); 15231db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 15241db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 15251db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, UINT64_MAX - 1, &err)); 15261db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 15271db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 15281db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, 1, &err)); 15291db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 15301db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 15311db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, UINT64_MAX, &err)); 15321db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 15331db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 15341db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 15351db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 15361db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer + 1, &err)); 15371db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 15381db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 15391db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 15401db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 15411db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer, &err)); 15421db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 15431db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 15441db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall} 1545cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1546cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wallstatic const std::array<hwc2_attribute_t, 2> requiredAttributes = {{ 1547cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall HWC2_ATTRIBUTE_WIDTH, 1548cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall HWC2_ATTRIBUTE_HEIGHT, 1549cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall}}; 1550cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1551cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wallstatic const std::array<hwc2_attribute_t, 3> optionalAttributes = {{ 1552cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall HWC2_ATTRIBUTE_VSYNC_PERIOD, 1553cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall HWC2_ATTRIBUTE_DPI_X, 1554cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall HWC2_ATTRIBUTE_DPI_Y, 1555cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall}}; 1556cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1557cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 can return display attributes for a valid 1558cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall * config. */ 1559cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_ATTRIBUTE) 1560cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 1561cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto display : mDisplays) { 1562cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs; 1563cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1564cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 1565cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1566cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto config : configs) { 1567cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall int32_t value; 1568cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1569cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto attribute : requiredAttributes) { 1570cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, 1571cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall attribute, &value)); 1572cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_GE(value, 0) << "missing required attribute " 1573cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall << getAttributeName(attribute) << " for config " 1574cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall << config; 1575cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1576cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto attribute : optionalAttributes) { 1577cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, 1578cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall attribute, &value)); 1579cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1580cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1581cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1582cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 1583cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1584cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 will return a value of -1 for an invalid 1585cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall * attribute */ 1586cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_ATTRIBUTE_invalid_attribute) 1587cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 1588cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall const hwc2_attribute_t attribute = HWC2_ATTRIBUTE_INVALID; 1589cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1590cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto display : mDisplays) { 1591cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs; 1592cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1593cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 1594cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1595cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto config : configs) { 1596cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall int32_t value; 1597cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 1598cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1599cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, 1600cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall attribute, &value, &err)); 1601cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(value, -1) << "failed to return -1 for an invalid" 1602cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall " attribute for config " << config; 1603cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1604cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1605cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 1606cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1607cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 will fail to get attributes for a bad display */ 1608cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_ATTRIBUTE_bad_display) 1609cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 1610cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_display_t display; 1611cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall const hwc2_config_t config = 0; 1612cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall int32_t value; 1613cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 1614cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1615cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 1616cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1617cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto attribute : requiredAttributes) { 1618cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, attribute, 1619cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall &value, &err)); 1620cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 1621cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1622cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1623cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto attribute : optionalAttributes) { 1624cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, attribute, 1625cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall &value, &err)); 1626cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 1627cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1628cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 1629cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1630cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 will fail to get attributes for a bad config */ 1631cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_ATTRIBUTE_bad_config) 1632cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 1633cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto display : mDisplays) { 1634cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_config_t config; 1635cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall int32_t value; 1636cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 1637cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1638cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getInvalidConfig(display, &config)); 1639cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1640cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto attribute : requiredAttributes) { 1641cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, 1642cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall attribute, &value, &err)); 1643cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_CONFIG) << "returned wrong error code"; 1644cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1645cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1646cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto attribute : optionalAttributes) { 1647cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, 1648cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall attribute, &value, &err)); 1649cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_CONFIG) << "returned wrong error code"; 1650cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1651cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1652cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 1653cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1654cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 will get display configs for active displays */ 1655cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_CONFIGS) 1656cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 1657cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto display : mDisplays) { 1658cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs; 1659cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1660cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 1661cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1662cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 1663cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1664cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 will not get display configs for bad displays */ 1665cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_CONFIGS_bad_display) 1666cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 1667cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_display_t display; 1668cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs; 1669cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 1670cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1671cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 1672cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1673cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs, &err)); 1674cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1675cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 1676cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_TRUE(configs.empty()) << "returned configs for bad display"; 1677cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 1678cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1679cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 will return the same config list multiple 1680cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall * times in a row. */ 1681cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_CONFIGS_same) 1682cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 1683cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto display : mDisplays) { 1684cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs1, configs2; 1685cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1686cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs1)); 1687cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs2)); 1688cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1689cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_TRUE(std::is_permutation(configs1.begin(), configs1.end(), 1690cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall configs2.begin())) << "returned two different config sets"; 1691cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1692cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 1693cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1694cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 does not return duplicate display configs */ 1695cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_CONFIGS_duplicate) 1696cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 1697cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto display : mDisplays) { 1698cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs; 1699cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1700cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 1701cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1702cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::unordered_set<hwc2_config_t> configsSet(configs.begin(), 1703cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall configs.end()); 1704cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(configs.size(), configsSet.size()) << "returned duplicate" 1705cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall " configs"; 1706cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1707cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 170893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 170993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall/* TESTCASE: Tests that the HWC2 returns the active config for a display */ 171093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa WallTEST_F(Hwc2Test, GET_ACTIVE_CONFIG) 171193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall{ 171293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall for (auto display : mDisplays) { 171393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall std::vector<hwc2_config_t> configs; 171493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 171593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 171693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 171793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall for (auto config : configs) { 171893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_config_t activeConfig; 171993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 172093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 172193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveConfig(display, &activeConfig)); 172293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 172393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_EQ(activeConfig, config) << "failed to get active config"; 172493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 172593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 172693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall} 172793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 172893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall/* TESTCASE: Tests that the HWC2 does not return an active config for a bad 172993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall * display. */ 173093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa WallTEST_F(Hwc2Test, GET_ACTIVE_CONFIG_bad_display) 173193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall{ 173293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_display_t display; 173393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_config_t activeConfig; 173493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 173593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 173693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 173793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 173893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveConfig(display, &activeConfig, &err)); 173993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 174093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 174193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall} 174293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 174393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall/* TESTCASE: Tests that the HWC2 either begins with a valid active config 174493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall * or returns an error when getActiveConfig is called. */ 174593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa WallTEST_F(Hwc2Test, GET_ACTIVE_CONFIG_bad_config) 174693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall{ 174793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall for (auto display : mDisplays) { 174893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall std::vector<hwc2_config_t> configs; 174993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_config_t activeConfig; 175093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 175193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 175293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 175393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 175493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall if (configs.empty()) 175593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall return; 175693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 175793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveConfig(display, &activeConfig, &err)); 175893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall if (err == HWC2_ERROR_NONE) { 175993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_NE(std::count(configs.begin(), configs.end(), 176093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall activeConfig), 0) << "active config is not found in " 176193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall " configs for display"; 176293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } else { 176393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_CONFIG) << "returned wrong error code"; 176493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 176593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 176693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall} 176793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 176893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall/* TESTCASE: Tests that the HWC2 can set every display config as an active 176993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall * config */ 177093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa WallTEST_F(Hwc2Test, SET_ACTIVE_CONFIG) 177193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall{ 177293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall for (auto display : mDisplays) { 177393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall std::vector<hwc2_config_t> configs; 177493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 177593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 177693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 177793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall for (auto config : configs) { 177893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 177993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 178093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 178193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall} 178293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 178393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set an active config for a bad display */ 178493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa WallTEST_F(Hwc2Test, SET_ACTIVE_CONFIG_bad_display) 178593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall{ 178693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_display_t display; 178793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall const hwc2_config_t config = 0; 178893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 178993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 179093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 179193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 179293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config, &err)); 179393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 179493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall} 179593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 179693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set an invalid active config */ 179793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa WallTEST_F(Hwc2Test, SET_ACTIVE_CONFIG_bad_config) 179893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall{ 179993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall for (auto display : mDisplays) { 180093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_config_t config; 180193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 180293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 180393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getInvalidConfig(display, &config)); 180493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 180593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config, &err)); 180693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_CONFIG) << "returned wrong error code"; 180793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 180893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall} 180903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 181003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 returns a valid value for getDozeSupport. */ 181103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, GET_DOZE_SUPPORT) 181203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 181303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall for (auto display : mDisplays) { 181403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall int32_t support = -1; 181503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 181603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getDozeSupport(display, &support)); 181703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 181803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_TRUE(support == 0 || support == 1) << "invalid doze support value"; 181903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 182003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 182103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 182203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 cannot get doze support for a bad display. */ 182303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, GET_DOZE_SUPPORT_bad_display) 182403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 182503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_display_t display; 182603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall int32_t support = -1; 182703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 182803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 182903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 183003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 183103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getDozeSupport(display, &support, &err)); 183203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 183303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 183403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 183503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 183603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 can set all supported power modes */ 183703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, SET_POWER_MODE) 183803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 183903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall for (auto display : mDisplays) { 184003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 184103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 184203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 184303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall int32_t support = -1; 184403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getDozeSupport(display, &support)); 184503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (support != 1) 184603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall return; 184703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 184803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_DOZE)); 184903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, 185003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall HWC2_POWER_MODE_DOZE_SUSPEND)); 185103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 185203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 185303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 185403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 185503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 185603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set a power mode for a bad display. */ 185703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, SET_POWER_MODE_bad_display) 185803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 185903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_display_t display; 186003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 186103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 186203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 186303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 186403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON, &err)); 186503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 186603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 186703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF, &err)); 186803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 186903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 187003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall int32_t support = -1; 187103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getDozeSupport(display, &support, &err)); 187203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (support != 1) 187303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall return; 187403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 187503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_DOZE, &err)); 187603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 187703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 187803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_DOZE_SUSPEND, 187903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall &err)); 188003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 188103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 188203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 188303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set an invalid power mode value. */ 188403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, SET_POWER_MODE_bad_parameter) 188503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 188603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall for (auto display : mDisplays) { 188703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_power_mode_t mode = static_cast<hwc2_power_mode_t>( 188803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall HWC2_POWER_MODE_DOZE_SUSPEND + 1); 188903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 189003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 189103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, mode, &err)); 189203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_PARAMETER) << "returned wrong error code " 189303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall << mode; 189403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 189503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 189603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 189703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 will return unsupported if it does not support 189803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall * an optional power mode. */ 189903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, SET_POWER_MODE_unsupported) 190003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 190103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall for (auto display : mDisplays) { 190203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall int32_t support = -1; 190303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 190403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 190503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getDozeSupport(display, &support, &err)); 190603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (support == 1) 190703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall return; 190803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 190903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_EQ(support, 0) << "invalid doze support value"; 191003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 191103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_DOZE, 191203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall &err)); 191303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_UNSUPPORTED) << "returned wrong error code"; 191403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 191503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, 191603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall HWC2_POWER_MODE_DOZE_SUSPEND, &err)); 191703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_UNSUPPORTED) << "returned wrong error code"; 191803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 191903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 192003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 192103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 can set the same power mode multiple times. */ 192203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, SET_POWER_MODE_stress) 192303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 192403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall for (auto display : mDisplays) { 192503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 192603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 192703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 192803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 192903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 193003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 193103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 193203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 193303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 193403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall int32_t support = -1; 193503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getDozeSupport(display, &support)); 193603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (support != 1) 193703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall return; 193803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 193903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_DOZE)); 194003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_DOZE)); 194103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 194203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, 194303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall HWC2_POWER_MODE_DOZE_SUSPEND)); 194403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, 194503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall HWC2_POWER_MODE_DOZE_SUSPEND)); 194603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 194703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 194803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 194903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 1950572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1951572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 can enable and disable vsync on active 1952572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall * displays */ 1953572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED) 1954572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 1955572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall for (auto display : mDisplays) { 1956572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_callback_data_t data = reinterpret_cast<hwc2_callback_data_t>( 1957572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall const_cast<char*>("data")); 1958572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1959572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 1960572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1961572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_VSYNC, data, 1962572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall []() { return; })); 1963572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1964572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE)); 1965572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1966572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 1967572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1968572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 1969572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 1970572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 1971572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1972572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 issues a valid vsync callback. */ 1973572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED_callback) 1974572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 1975572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall for (auto display : mDisplays) { 1976572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_display_t receivedDisplay; 1977572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall int64_t receivedTimestamp; 1978572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1979572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 1980572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1981572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(enableVsync(display)); 1982572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1983572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(waitForVsync(&receivedDisplay, 1984572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall &receivedTimestamp)); 1985572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1986572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall EXPECT_EQ(receivedDisplay, display) << "failed to get correct display"; 1987572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall EXPECT_GE(receivedTimestamp, 0) << "failed to get valid timestamp"; 1988572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1989572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(disableVsync(display)); 1990572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1991572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 1992572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 1993572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 1994572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1995572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 cannot enable a vsync for a bad display */ 1996572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED_bad_display) 1997572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 1998572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_display_t display; 1999572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_callback_data_t data = reinterpret_cast<hwc2_callback_data_t>( 2000572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall const_cast<char*>("data")); 2001572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 2002572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2003572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 2004572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2005572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_VSYNC, data, 2006572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall []() { return; })); 2007572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2008572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE, &err)); 2009572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 2010572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2011572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE, &err)); 2012572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 2013572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 2014572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2015572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 cannot enable an invalid vsync value */ 2016572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED_bad_parameter) 2017572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 2018572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall for (auto display : mDisplays) { 2019572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_callback_data_t data = reinterpret_cast<hwc2_callback_data_t>( 2020572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall const_cast<char*>("data")); 2021572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 2022572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2023572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 2024572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2025572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_VSYNC, data, 2026572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall []() { return; })); 2027572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2028572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_INVALID, 2029572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall &err)); 2030572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_PARAMETER) << "returned wrong error code"; 2031572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2032572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 2033572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 2034572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 2035572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2036572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 can enable and disable a vsync value multiple 2037572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall * times. */ 2038572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED_stress) 2039572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 2040572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall for (auto display : mDisplays) { 2041572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_callback_data_t data = reinterpret_cast<hwc2_callback_data_t>( 2042572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall const_cast<char*>("data")); 2043572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2044572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 2045572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2046572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_VSYNC, data, 2047572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall []() { return; })); 2048572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2049572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 2050572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2051572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE)); 2052572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE)); 2053572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2054572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 2055572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 2056572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2057572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 2058572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 2059572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 2060572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2061572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 can set a vsync enable value when the display 2062572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall * is off and no callback is registered. */ 2063572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED_no_callback_no_power) 2064572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 2065572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall const uint secs = 1; 2066572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2067572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall for (auto display : mDisplays) { 2068572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE)); 2069572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2070572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall sleep(secs); 2071572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2072572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 2073572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 2074572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 2075572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2076572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 can set a vsync enable value when no callback 2077572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall * is registered. */ 2078572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED_no_callback) 2079572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 2080572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall const uint secs = 1; 2081572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2082572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall for (auto display : mDisplays) { 2083572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 2084572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2085572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE)); 2086572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2087572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall sleep(secs); 2088572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2089572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 2090572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2091572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 2092572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 2093572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 2094dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 2095dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall/* TESTCASE: Tests that the HWC2 returns a display name for each display */ 2096dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa WallTEST_F(Hwc2Test, GET_DISPLAY_NAME) 2097dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall{ 2098dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall for (auto display : mDisplays) { 2099dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall std::string name; 2100dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 2101dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayName(display, &name)); 2102dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall } 2103dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall} 2104dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 2105dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall/* TESTCASE: Tests that the HWC2 does not return a display name for a bad 2106dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall * display */ 2107dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa WallTEST_F(Hwc2Test, GET_DISPLAY_NAME_bad_display) 2108dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall{ 2109dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall hwc2_display_t display; 2110dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall std::string name; 2111dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 2112dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 2113dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 2114dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 2115dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayName(display, &name, &err)); 2116dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 2117dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall} 21186bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 21196bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall/* TESTCASE: Tests that the HWC2 can set basic composition types. */ 21206bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa WallTEST_F(Hwc2Test, SET_LAYER_COMPOSITION_TYPE) 21216bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall{ 21226bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 21236bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall setComposition, advanceComposition)); 21246bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall} 21256bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 21266bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall/* TESTCASE: Tests that the HWC2 can update a basic composition type on a 21276bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * layer. */ 21286bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa WallTEST_F(Hwc2Test, SET_LAYER_COMPOSITION_TYPE_update) 21296bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall{ 21306bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 21316bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall setComposition, advanceComposition)); 21326bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall} 21336bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 21346bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set a composition type for a bad layer */ 21356bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa WallTEST_F(Hwc2Test, SET_LAYER_COMPOSITION_TYPE_bad_layer) 21366bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall{ 21376bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 21386bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall setComposition)); 21396bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall} 21406bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 21416bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set a bad composition type */ 21426bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa WallTEST_F(Hwc2Test, SET_LAYER_COMPOSITION_TYPE_bad_parameter) 21436bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall{ 21446bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadParameter( 21456bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 21466bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_error_t* outErr) { 21476bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 21486bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerCompositionType(display, 21496bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall layer, HWC2_COMPOSITION_INVALID, outErr)); 21506bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 21516bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall )); 21526bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall} 2153ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 21542a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall/* TESTCASE: Tests that the HWC2 can set the cursor position of a layer. */ 21552a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa WallTEST_F(Hwc2Test, SET_CURSOR_POSITION) 21562a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall{ 21572a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 21582a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ::setCursorPosition, advanceCursorPosition)); 21592a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall} 21602a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 21612a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall/* TESTCASE: Tests that the HWC2 can update the cursor position of a layer. */ 21622a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa WallTEST_F(Hwc2Test, SET_CURSOR_POSITION_update) 21632a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall{ 21642a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 21652a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ::setCursorPosition, advanceCursorPosition)); 21662a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall} 21672a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 21682a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall/* TESTCASE: Tests that the HWC2 can set the cursor position of a layer when the 21692a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall * composition type has not been set to HWC2_COMPOSITION_CURSOR. */ 21702a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa WallTEST_F(Hwc2Test, SET_CURSOR_POSITION_composition_type_unset) 21712a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall{ 21722a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 21732a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 21745a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) { 21752a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 21765a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall const hwc_rect_t cursorPosition = testLayer->getCursorPosition(); 21772a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setCursorPosition(display, layer, 21782a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall cursorPosition.left, cursorPosition.top, outErr)); 21792a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall }, 21802a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 21812a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall advanceCursorPosition)); 21822a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall} 21832a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 21842a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set the cursor position of a bad 21852a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall * display. */ 21862a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa WallTEST_F(Hwc2Test, SET_CURSOR_POSITION_bad_display) 21872a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall{ 21882a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall hwc2_display_t display; 21892a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall hwc2_layer_t layer = 0; 21902a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall int32_t x = 0, y = 0; 21912a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 21922a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 21932a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 21942a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 21952a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_NO_FATAL_FAILURE(setCursorPosition(display, layer, x, y, &err)); 21962a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 21972a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall} 21982a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 21992a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set the cursor position of a bad layer. */ 22002a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa WallTEST_F(Hwc2Test, SET_CURSOR_POSITION_bad_layer) 22012a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall{ 22022a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 22032a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t badLayer, 22045a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) { 22052a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 22065a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall const hwc_rect_t cursorPosition = testLayer->getCursorPosition(); 22072a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setCursorPosition(display, 22082a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall badLayer, cursorPosition.left, cursorPosition.top, 22092a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall outErr)); 22102a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall } 22112a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall )); 22122a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall} 22132a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 2214ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall/* TESTCASE: Tests that the HWC2 can set a blend mode value of a layer. */ 2215ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa WallTEST_F(Hwc2Test, SET_LAYER_BLEND_MODE) 2216ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall{ 2217ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 2218ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall setBlendMode, advanceBlendMode)); 2219ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall} 2220ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 2221ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall/* TESTCASE: Tests that the HWC2 can update a blend mode value of a layer. */ 2222ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa WallTEST_F(Hwc2Test, SET_LAYER_BLEND_MODE_update) 2223ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall{ 2224ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 2225ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall setBlendMode, advanceBlendMode)); 2226ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall} 2227ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 2228ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set a blend mode for a bad layer. */ 2229ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa WallTEST_F(Hwc2Test, SET_LAYER_BLEND_MODE_bad_layer) 2230ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall{ 2231ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 2232ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall setBlendMode)); 2233ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall} 2234ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 2235ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set an invalid blend mode. */ 2236ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa WallTEST_F(Hwc2Test, SET_LAYER_BLEND_MODE_bad_parameter) 2237ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall{ 2238ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadParameter( 2239ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 2240ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall hwc2_error_t* outErr) { 2241ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 2242ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerBlendMode(display, 2243ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall layer, HWC2_BLEND_MODE_INVALID, outErr)); 2244ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall } 2245ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall )); 2246ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall} 2247b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 22485a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall/* TESTCASE: Tests that the HWC2 can set the buffer of a layer. */ 22495a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa WallTEST_F(Hwc2Test, SET_LAYER_BUFFER) 22505a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall{ 22515a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 22525a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall setBuffer, advanceBuffer)); 22535a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall} 22545a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 22555a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall/* TESTCASE: Tests that the HWC2 can update the buffer of a layer. */ 22565a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa WallTEST_F(Hwc2Test, SET_LAYER_BUFFER_update) 22575a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall{ 22585a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 22595a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall setBuffer, advanceBuffer)); 22605a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall} 22615a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 22625a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set the buffer of a bad layer. */ 22635a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa WallTEST_F(Hwc2Test, SET_LAYER_BUFFER_bad_layer) 22645a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall{ 22655a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 22665a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t badLayer, 22675a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) { 22685a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 22695a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall buffer_handle_t handle = nullptr; 22705a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall android::base::unique_fd acquireFence; 22715a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 22725a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall /* If there is not available buffer for the given buffer 22735a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall * properties, it should not fail this test case */ 22745a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall if (testLayer->getBuffer(&handle, &acquireFence) == 0) { 22755a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall *outErr = HWC2_ERROR_BAD_LAYER; 22765a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall return; 22775a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall } 22785a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 22795a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerBuffer(display, badLayer, 22805a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall handle, acquireFence, outErr)); 22815a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall } 22825a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall )); 22835a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall} 22845a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 22855a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall/* TESTCASE: Tests that the HWC2 can set an invalid buffer for a layer. */ 22865a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa WallTEST_F(Hwc2Test, SET_LAYER_BUFFER_bad_parameter) 22875a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall{ 22885a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadParameter( 22895a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 22905a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall hwc2_error_t* outErr) { 22915a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 22925a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall buffer_handle_t handle = nullptr; 22935a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall int32_t acquireFence = -1; 22945a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 22955a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerBuffer(display, layer, 22965a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall handle, acquireFence, outErr)); 22975a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall } 22985a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall )); 22995a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall} 23005a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 2301ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall/* TESTCASE: Tests that the HWC2 can set the color of a layer. */ 2302ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa WallTEST_F(Hwc2Test, SET_LAYER_COLOR) 2303ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall{ 2304ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 2305ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall setColor, advanceColor)); 2306ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall} 2307ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 2308ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall/* TESTCASE: Tests that the HWC2 can update the color of a layer. */ 2309ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa WallTEST_F(Hwc2Test, SET_LAYER_COLOR_update) 2310ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall{ 2311ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 2312ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall setColor, advanceColor)); 2313ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall} 2314ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 2315ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall/* TESTCASE: Tests that the HWC2 can set the color of a layer when the 2316ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall * composition type has not been set to HWC2_COMPOSITION_SOLID_COLOR. */ 2317ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa WallTEST_F(Hwc2Test, SET_LAYER_COLOR_composition_type_unset) 2318ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall{ 2319ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Basic, 2320ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 23215a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) { 2322ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 2323ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerColor(display, layer, 23245a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getColor(), outErr)); 2325ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall }, 2326ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 2327ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall advanceColor)); 2328ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall} 2329ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 2330ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set the color of a bad layer. */ 2331ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa WallTEST_F(Hwc2Test, SET_LAYER_COLOR_bad_layer) 2332ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall{ 2333ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 2334ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t badLayer, 23355a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) { 2336ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 2337ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerColor(display, badLayer, 23385a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getColor(), outErr)); 2339ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall } 2340ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall )); 2341ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall} 2342ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 2343b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall/* TESTCASE: Tests that the HWC2 can set the dataspace of a layer. */ 2344b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa WallTEST_F(Hwc2Test, SET_LAYER_DATASPACE) 2345b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall{ 2346b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 2347b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall setDataspace, advanceDataspace)); 2348b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall} 2349b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 2350b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall/* TESTCASE: Tests that the HWC2 can update the dataspace of a layer. */ 2351b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa WallTEST_F(Hwc2Test, SET_LAYER_DATASPACE_update) 2352b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall{ 2353b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 2354b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall setDataspace, advanceDataspace)); 2355b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall} 2356b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 2357b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set a dataspace for a bad layer. */ 2358b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa WallTEST_F(Hwc2Test, SET_LAYER_DATASPACE_bad_layer) 2359b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall{ 2360b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 2361b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall setDataspace)); 2362b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall} 23632b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 2364600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall/* TESTCASE: Tests that the HWC2 can set the display frame of a layer. */ 2365600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa WallTEST_F(Hwc2Test, SET_LAYER_DISPLAY_FRAME) 2366600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall{ 2367600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 2368600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall setDisplayFrame, advanceDisplayFrame)); 2369600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall} 2370600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 2371600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall/* TESTCASE: Tests that the HWC2 can update the display frame of a layer. */ 2372600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa WallTEST_F(Hwc2Test, SET_LAYER_DISPLAY_FRAME_update) 2373600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall{ 2374600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 2375600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall setDisplayFrame, advanceDisplayFrame)); 2376600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall} 2377600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 2378600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set the display frame of a bad layer. */ 2379600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa WallTEST_F(Hwc2Test, SET_LAYER_DISPLAY_FRAME_bad_layer) 2380600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall{ 2381600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 2382600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall setDisplayFrame)); 2383600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall} 2384600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 23852b1f53060ea8587a428f826cf7890354ff124722Marissa Wall/* TESTCASE: Tests that the HWC2 can set the plane alpha of a layer. */ 23862b1f53060ea8587a428f826cf7890354ff124722Marissa WallTEST_F(Hwc2Test, SET_LAYER_PLANE_ALPHA) 23872b1f53060ea8587a428f826cf7890354ff124722Marissa Wall{ 23882b1f53060ea8587a428f826cf7890354ff124722Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 23892b1f53060ea8587a428f826cf7890354ff124722Marissa Wall setPlaneAlpha, advancePlaneAlpha)); 23902b1f53060ea8587a428f826cf7890354ff124722Marissa Wall} 23912b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 23922b1f53060ea8587a428f826cf7890354ff124722Marissa Wall/* TESTCASE: Tests that the HWC2 can update the plane alpha of a layer. */ 23932b1f53060ea8587a428f826cf7890354ff124722Marissa WallTEST_F(Hwc2Test, SET_LAYER_PLANE_ALPHA_update) 23942b1f53060ea8587a428f826cf7890354ff124722Marissa Wall{ 23952b1f53060ea8587a428f826cf7890354ff124722Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 23962b1f53060ea8587a428f826cf7890354ff124722Marissa Wall setPlaneAlpha, advancePlaneAlpha)); 23972b1f53060ea8587a428f826cf7890354ff124722Marissa Wall} 23982b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 23992b1f53060ea8587a428f826cf7890354ff124722Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set a plane alpha for a bad layer. */ 24002b1f53060ea8587a428f826cf7890354ff124722Marissa WallTEST_F(Hwc2Test, SET_LAYER_PLANE_ALPHA_bad_layer) 24012b1f53060ea8587a428f826cf7890354ff124722Marissa Wall{ 24022b1f53060ea8587a428f826cf7890354ff124722Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 24032b1f53060ea8587a428f826cf7890354ff124722Marissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t badLayer, 24045a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t *outErr) { 24052b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 24062b1f53060ea8587a428f826cf7890354ff124722Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerPlaneAlpha(display, 24075a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall badLayer, testLayer->getPlaneAlpha(), outErr)); 24082b1f53060ea8587a428f826cf7890354ff124722Marissa Wall } 24092b1f53060ea8587a428f826cf7890354ff124722Marissa Wall )); 24102b1f53060ea8587a428f826cf7890354ff124722Marissa Wall} 2411ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 2412c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall/* TESTCASE: Tests that the HWC2 can set the source crop of a layer. */ 2413c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa WallTEST_F(Hwc2Test, SET_LAYER_SOURCE_CROP) 2414c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall{ 2415c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 2416c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall setSourceCrop, advanceSourceCrop)); 2417c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall} 2418c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 2419c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall/* TESTCASE: Tests that the HWC2 can update the source crop of a layer. */ 2420c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa WallTEST_F(Hwc2Test, SET_LAYER_SOURCE_CROP_update) 2421c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall{ 2422c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 2423c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall setSourceCrop, advanceSourceCrop)); 2424c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall} 2425c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 2426c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set the source crop of a bad layer. */ 2427c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa WallTEST_F(Hwc2Test, SET_LAYER_SOURCE_CROP_bad_layer) 2428c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall{ 2429c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 2430c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall setSourceCrop)); 2431c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall} 2432c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 2433ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall/* TESTCASE: Tests that the HWC2 can set the surface damage of a layer. */ 2434ad761818a4426b4e6a0696ba90e05056aa35553cMarissa WallTEST_F(Hwc2Test, SET_LAYER_SURFACE_DAMAGE) 2435ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall{ 2436ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 2437ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall setSurfaceDamage, advanceSurfaceDamage)); 2438ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall} 2439ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 2440ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall/* TESTCASE: Tests that the HWC2 can update the surface damage of a layer. */ 2441ad761818a4426b4e6a0696ba90e05056aa35553cMarissa WallTEST_F(Hwc2Test, SET_LAYER_SURFACE_DAMAGE_update) 2442ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall{ 2443ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 2444ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall setSurfaceDamage, advanceSurfaceDamage)); 2445ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall} 2446ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 2447ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set the surface damage of a bad layer. */ 2448ad761818a4426b4e6a0696ba90e05056aa35553cMarissa WallTEST_F(Hwc2Test, SET_LAYER_SURFACE_DAMAGE_bad_layer) 2449ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall{ 2450ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 2451ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall setSurfaceDamage)); 2452ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall} 2453ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 2454ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall/* TESTCASE: Tests that the HWC2 can set the transform value of a layer. */ 2455ac10819373b1ed4901f26c822484a789a7ca4be0Marissa WallTEST_F(Hwc2Test, SET_LAYER_TRANSFORM) 2456ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall{ 2457ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 2458ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall setTransform, advanceTransform)); 2459ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall} 2460ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 2461ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall/* TESTCASE: Tests that the HWC2 can update the transform value of a layer. */ 2462ac10819373b1ed4901f26c822484a789a7ca4be0Marissa WallTEST_F(Hwc2Test, SET_LAYER_TRANSFORM_update) 2463ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall{ 2464ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 2465ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall setTransform, advanceTransform)); 2466ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall} 2467ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 2468ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set the transform for a bad layer. */ 2469ac10819373b1ed4901f26c822484a789a7ca4be0Marissa WallTEST_F(Hwc2Test, SET_LAYER_TRANSFORM_bad_layer) 2470ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall{ 2471ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 2472ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall setTransform)); 2473ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall} 2474273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 2475f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall/* TESTCASE: Tests that the HWC2 can set the visible region of a layer. */ 2476f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa WallTEST_F(Hwc2Test, SET_LAYER_VISIBLE_REGION) 2477f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall{ 2478f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperties(Hwc2TestCoverage::Basic, 5, 2479f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 2480f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall Hwc2TestLayers* testLayers) { 2481f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 2482f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerVisibleRegion(display, 2483f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall layer, testLayers->getVisibleRegion(layer))); 2484f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall }, 2485f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 2486f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall advanceVisibleRegions)); 2487f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall} 2488f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 2489f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set the visible region of a bad layer. */ 2490f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa WallTEST_F(Hwc2Test, SET_LAYER_VISIBLE_REGION_bad_layer) 2491f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall{ 2492f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 2493f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall setVisibleRegion)); 2494f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall} 2495f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 2496273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall/* TESTCASE: Tests that the HWC2 can set the z order of a layer. */ 2497273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa WallTEST_F(Hwc2Test, SET_LAYER_Z_ORDER) 2498273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall{ 2499273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperties(Hwc2TestCoverage::Complete, 10, 2500273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 25015a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayers* testLayers) { 2502273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 2503273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerZOrder(display, layer, 25045a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayers->getZOrder(layer))); 2505f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall }, 2506f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 2507f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall /* TestLayer z orders are set during the construction of TestLayers 2508f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall * and cannot be updated. There is no need (or ability) to cycle 2509f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall * through additional z order configurations. */ 2510f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall [] (Hwc2TestLayers* /*testLayers*/) { 2511f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall return false; 2512273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 2513273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall )); 2514273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall} 2515273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 2516273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall/* TESTCASE: Tests that the HWC2 can update the z order of a layer. */ 2517273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa WallTEST_F(Hwc2Test, SET_LAYER_Z_ORDER_update) 2518273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall{ 2519273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall const std::vector<uint32_t> zOrders = { static_cast<uint32_t>(0), 2520273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall static_cast<uint32_t>(1), static_cast<uint32_t>(UINT32_MAX / 4), 2521273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall static_cast<uint32_t>(UINT32_MAX / 2), 2522273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall static_cast<uint32_t>(UINT32_MAX) }; 2523273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 2524273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall for (auto display : mDisplays) { 2525273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall std::vector<hwc2_config_t> configs; 2526273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 2527273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 2528273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 2529273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall for (auto config : configs) { 2530273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall hwc2_layer_t layer; 2531273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 2532273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 2533273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 2534273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 2535273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 2536273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall for (uint32_t zOrder : zOrders) { 2537273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall EXPECT_NO_FATAL_FAILURE(setLayerZOrder(display, layer, zOrder)); 2538273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 2539273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 2540273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 2541273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 2542273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 2543273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall} 2544273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 2545273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set the z order of a bad layer. */ 2546273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa WallTEST_F(Hwc2Test, SET_LAYER_Z_ORDER_bad_layer) 2547273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall{ 2548273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 2549273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall setZOrder)); 2550273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall} 25511cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 25521cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall/* TESTCASE: Tests that the HWC2 can display a layer with basic property 25531cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall * coverage */ 25541cd789cd2b300427467586f4ec721a8123f118b7Marissa WallTEST_F(Hwc2Test, VALIDATE_DISPLAY_basic) 25551cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall{ 25561cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_NO_FATAL_FAILURE(displayLayers(Hwc2TestCoverage::Basic, 1, 25571cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall [] (Hwc2Test* test, hwc2_display_t display, 25581cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall const std::vector<hwc2_layer_t>& layers) { 25591cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 25601cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall uint32_t numTypes, numRequests; 25611cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall bool hasChanges = false; 25621cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 25631cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(test->validateDisplay(display, &numTypes, 25641cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall &numRequests, &hasChanges)); 25651cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall if (hasChanges) 25661cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_LE(numTypes, static_cast<uint32_t>(layers.size())) 25671cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall << "wrong number of requests"; 25681cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } 25691cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall )); 25701cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall} 25711cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 25721cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall/* TESTCASE: Tests that the HWC2 can display 5 layers with default coverage. */ 25731cd789cd2b300427467586f4ec721a8123f118b7Marissa WallTEST_F(Hwc2Test, VALIDATE_DISPLAY_default_5) 25741cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall{ 25751cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_NO_FATAL_FAILURE(displayLayers(Hwc2TestCoverage::Default, 5, 25761cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall [] (Hwc2Test* test, hwc2_display_t display, 25771cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall const std::vector<hwc2_layer_t>& layers) { 25781cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 25791cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall uint32_t numTypes, numRequests; 25801cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall bool hasChanges = false; 25811cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 25821cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(test->validateDisplay(display, &numTypes, 25831cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall &numRequests, &hasChanges)); 25841cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall if (hasChanges) 25851cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_LE(numTypes, static_cast<uint32_t>(layers.size())) 25861cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall << "wrong number of requests"; 25871cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } 25881cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall )); 25891cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall} 25901cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 25911cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall/* TESTCASE: Tests that the HWC2 cannot validate a bad display */ 25921cd789cd2b300427467586f4ec721a8123f118b7Marissa WallTEST_F(Hwc2Test, VALIDATE_DISPLAY_bad_display) 25931cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall{ 25941cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall hwc2_display_t display; 25951cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall uint32_t numTypes, numRequests; 25961cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 25971cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 25981cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 25991cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 26001cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_NO_FATAL_FAILURE(validateDisplay(display, &numTypes, &numRequests, 26011cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall &err)); 26021cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 26031cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall} 2604