Hwc2Test.cpp revision 563030b4402f4b9aa08cece732f2a4a756a0f72c
14d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall/* 24d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * Copyright (C) 2016 The Android Open Source Project 34d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * 44d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * Licensed under the Apache License, Version 2.0 (the "License"); 54d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * you may not use this file except in compliance with the License. 64d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * You may obtain a copy of the License at 74d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * 84d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * http://www.apache.org/licenses/LICENSE-2.0 94d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * 104d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * Unless required by applicable law or agreed to in writing, software 114d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * distributed under the License is distributed on an "AS IS" BASIS, 124d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * See the License for the specific language governing permissions and 144d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * limitations under the License. 154d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall */ 164d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 174d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall#include <array> 18cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall#include <unordered_set> 19563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall#include <unordered_map> 204d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall#include <gtest/gtest.h> 214d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall#include <dlfcn.h> 225a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall#include <android-base/unique_fd.h> 234d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall#include <hardware/hardware.h> 24563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall#include <sync/sync.h> 254d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 264d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall#define HWC2_INCLUDE_STRINGIFICATION 274d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall#define HWC2_USE_CPP11 284d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall#include <hardware/hwcomposer2.h> 294d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall#undef HWC2_INCLUDE_STRINGIFICATION 304d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall#undef HWC2_USE_CPP11 314d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 326bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall#include "Hwc2TestLayer.h" 33273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall#include "Hwc2TestLayers.h" 34f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall#include "Hwc2TestClientTarget.h" 356bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 36cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wallvoid hwc2TestHotplugCallback(hwc2_callback_data_t callbackData, 37cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2_display_t display, int32_t connected); 38572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wallvoid hwc2TestVsyncCallback(hwc2_callback_data_t callbackData, 39572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_display_t display, int64_t timestamp); 40cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 414d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wallclass Hwc2Test : public testing::Test { 424d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wallpublic: 434d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 444d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall virtual void SetUp() 454d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall { 464d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall hw_module_t const* hwc2Module; 474d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 484d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall int err = hw_get_module(HWC_HARDWARE_MODULE_ID, &hwc2Module); 494d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall ASSERT_GE(err, 0) << "failed to get hwc hardware module: " 504d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall << strerror(-err); 514d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 524d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall /* The following method will fail if you have not run 534d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * "adb shell stop" */ 544d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall err = hwc2_open(hwc2Module, &mHwc2Device); 554d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall ASSERT_GE(err, 0) << "failed to open hwc hardware module: " 564d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall << strerror(-err); 57cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 58cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall populateDisplays(); 594d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall } 604d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 614d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall virtual void TearDown() 624d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall { 631db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 641db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (auto itr = mLayers.begin(); itr != mLayers.end();) { 651db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_display_t display = itr->first; 661db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_layer_t layer = itr->second; 671db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall itr++; 681db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall /* Destroys and removes the layer from mLayers */ 691db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall destroyLayer(display, layer); 701db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 711db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 7203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall for (auto itr = mActiveDisplays.begin(); itr != mActiveDisplays.end();) { 7303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_display_t display = *itr; 7403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall itr++; 7503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall /* Sets power mode to off and removes the display from 7603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall * mActiveDisplays */ 7703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall setPowerMode(display, HWC2_POWER_MODE_OFF); 7803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 7903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 804d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall if (mHwc2Device) 814d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall hwc2_close(mHwc2Device); 824d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall } 834d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 84a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall void registerCallback(hwc2_callback_descriptor_t descriptor, 85a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall hwc2_callback_data_t callbackData, hwc2_function_pointer_t pointer, 86a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall hwc2_error_t* outErr = nullptr) 87a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall { 88a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_REGISTER_CALLBACK>( 89a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall getFunction(HWC2_FUNCTION_REGISTER_CALLBACK)); 90a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 91a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 92a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, descriptor, 93a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall callbackData, pointer)); 94a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall if (outErr) { 95a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall *outErr = err; 96a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall } else { 97a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to register callback"; 98a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall } 99a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall } 100a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 101cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall void getDisplayType(hwc2_display_t display, hwc2_display_type_t* outType, 102cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2_error_t* outErr = nullptr) 103cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall { 104cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_GET_DISPLAY_TYPE>( 105cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall getFunction(HWC2_FUNCTION_GET_DISPLAY_TYPE)); 106cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 107cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 108cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 109cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall reinterpret_cast<int32_t*>(outType))); 110cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall if (outErr) { 111cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall *outErr = err; 112cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } else { 113cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to get display type"; 114cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 115cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 116cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 117cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall /* If the populateDisplays function is still receiving displays and the 118cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall * display is connected, the display handle is stored in mDisplays. */ 119cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall void hotplugCallback(hwc2_display_t display, int32_t connected) 120cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall { 121cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::lock_guard<std::mutex> lock(mHotplugMutex); 122cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 123cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall if (mHotplugStatus != Hwc2TestHotplugStatus::Receiving) 124cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall return; 125cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 126cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall if (connected == HWC2_CONNECTION_CONNECTED) 127cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall mDisplays.insert(display); 128cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 129cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall mHotplugCv.notify_all(); 130cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 131cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1321db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall void createLayer(hwc2_display_t display, hwc2_layer_t* outLayer, 1331db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_error_t* outErr = nullptr) 1341db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall { 1351db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_CREATE_LAYER>( 1361db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall getFunction(HWC2_FUNCTION_CREATE_LAYER)); 1371db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 1381db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 1391db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 1401db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall outLayer)); 1411db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 1421db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall if (err == HWC2_ERROR_NONE) 1431db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall mLayers.insert(std::make_pair(display, *outLayer)); 1441db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 1451db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall if (outErr) { 1461db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall *outErr = err; 1471db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } else { 1481db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to create layer"; 1491db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 1501db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 1511db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 1521db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall void destroyLayer(hwc2_display_t display, hwc2_layer_t layer, 1531db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_error_t* outErr = nullptr) 1541db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall { 1551db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_DESTROY_LAYER>( 1561db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall getFunction(HWC2_FUNCTION_DESTROY_LAYER)); 1571db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 1581db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 1591db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer)); 1601db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 1611db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall if (err == HWC2_ERROR_NONE) 1621db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall mLayers.erase(std::make_pair(display, layer)); 1631db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 1641db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall if (outErr) { 1651db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall *outErr = err; 1661db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } else { 1671db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to destroy layer " 1681db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall << layer; 1691db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 1701db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 1711db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 172cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall void getDisplayAttribute(hwc2_display_t display, hwc2_config_t config, 173cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_attribute_t attribute, int32_t* outValue, 174cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_error_t* outErr = nullptr) 175cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall { 176cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_GET_DISPLAY_ATTRIBUTE>( 177cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall getFunction(HWC2_FUNCTION_GET_DISPLAY_ATTRIBUTE)); 178cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 179cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 180cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, config, 181cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall attribute, outValue)); 182cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 183cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall if (outErr) { 184cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall *outErr = err; 185cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } else { 186cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to get display attribute " 187cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall << getAttributeName(attribute) << " for config " << config; 188cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 189cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 190cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 191cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall void getDisplayConfigs(hwc2_display_t display, 192cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t>* outConfigs, 193cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_error_t* outErr = nullptr) 194cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall { 195cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_GET_DISPLAY_CONFIGS>( 196cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall getFunction(HWC2_FUNCTION_GET_DISPLAY_CONFIGS)); 197cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 198cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 199cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall uint32_t numConfigs = 0; 200cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 201cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 202cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall &numConfigs, nullptr)); 203cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 204cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall if (err == HWC2_ERROR_NONE) { 205cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall outConfigs->resize(numConfigs); 206cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 207cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 208cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall &numConfigs, outConfigs->data())); 209cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 210cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 211cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall if (outErr) { 212cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall *outErr = err; 213cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } else { 214cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to get configs for" 215cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall " display " << display; 216cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 217cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 218cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 21993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall void getActiveConfig(hwc2_display_t display, hwc2_config_t* outConfig, 22093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_error_t* outErr = nullptr) 22193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall { 22293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_GET_ACTIVE_CONFIG>( 22393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall getFunction(HWC2_FUNCTION_GET_ACTIVE_CONFIG)); 22493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 22593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 22693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 22793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall outConfig)); 22893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall if (outErr) { 22993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall *outErr = err; 23093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } else { 23193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to get active config on" 23293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall " display " << display; 23393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 23493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 23593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 23693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall void setActiveConfig(hwc2_display_t display, hwc2_config_t config, 23793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_error_t* outErr = nullptr) 23893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall { 23993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_ACTIVE_CONFIG>( 24093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall getFunction(HWC2_FUNCTION_SET_ACTIVE_CONFIG)); 24193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 24293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 24393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, config)); 24493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall if (outErr) { 24593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall *outErr = err; 24693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } else { 24793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set active config " 24893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall << config; 24993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 25093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 25193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 25203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall void getDozeSupport(hwc2_display_t display, int32_t* outSupport, 25303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_error_t* outErr = nullptr) 25403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall { 25503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_GET_DOZE_SUPPORT>( 25603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall getFunction(HWC2_FUNCTION_GET_DOZE_SUPPORT)); 25703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 25803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 25903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 26003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall outSupport)); 26103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (outErr) { 26203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall *outErr = err; 26303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } else { 26403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to get doze support on" 26503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall " display " << display; 26603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 26703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 26803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 26903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall void setPowerMode(hwc2_display_t display, hwc2_power_mode_t mode, 27003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_error_t* outErr = nullptr) 27103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall { 27203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_POWER_MODE>( 27303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall getFunction(HWC2_FUNCTION_SET_POWER_MODE)); 27403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 27503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 27603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 27703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall mode)); 27803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (outErr) { 27903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall *outErr = err; 28003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (err != HWC2_ERROR_NONE) 28103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall return; 28203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } else { 28303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set power mode " 28403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall << getPowerModeName(mode) << " on display " << display; 28503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 28603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 28703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (mode == HWC2_POWER_MODE_OFF) { 28803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall mActiveDisplays.erase(display); 28903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } else { 29003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall mActiveDisplays.insert(display); 29103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 29203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 29303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 294572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall void setVsyncEnabled(hwc2_display_t display, hwc2_vsync_t enabled, 295572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_error_t* outErr = nullptr) 296572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall { 297572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_VSYNC_ENABLED>( 298572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall getFunction(HWC2_FUNCTION_SET_VSYNC_ENABLED)); 299572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 300572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 301572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 302572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall enabled)); 303572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall if (outErr) { 304572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall *outErr = err; 305572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } else { 306572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set vsync enabled " 307572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall << getVsyncName(enabled); 308572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 309572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 310572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 311572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall void vsyncCallback(hwc2_display_t display, int64_t timestamp) 312572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall { 313572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall std::lock_guard<std::mutex> lock(mVsyncMutex); 314572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall mVsyncDisplay = display; 315572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall mVsyncTimestamp = timestamp; 316572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall mVsyncCv.notify_all(); 317572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 318572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 319dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall void getDisplayName(hwc2_display_t display, std::string* outName, 320dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall hwc2_error_t* outErr = nullptr) 321dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall { 322dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_GET_DISPLAY_NAME>( 323dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall getFunction(HWC2_FUNCTION_GET_DISPLAY_NAME)); 324dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 325dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 326dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall uint32_t size = 0; 327dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 328dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, &size, 329dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall nullptr)); 330dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 331dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall if (err == HWC2_ERROR_NONE) { 332dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall std::vector<char> name(size); 333dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 334dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, &size, 335dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall name.data())); 336dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 337dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall outName->assign(name.data()); 338dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall } 339dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 340dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall if (outErr) { 341dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall *outErr = err; 342dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall } else { 343dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to get display name for " 344dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall << display; 345dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall } 346dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall } 347dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 3486bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall void setLayerCompositionType(hwc2_display_t display, hwc2_layer_t layer, 3496bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_composition_t composition, hwc2_error_t* outErr = nullptr) 3506bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall { 3516bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_COMPOSITION_TYPE>( 3526bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_COMPOSITION_TYPE)); 3536bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 3546bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 3556bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 3566bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall composition)); 3576bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall if (outErr) { 3586bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall *outErr = err; 3596bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } else { 3606bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer composition" 3616bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall " type " << getCompositionName(composition); 3626bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 3636bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 3646bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 3652a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall void setCursorPosition(hwc2_display_t display, hwc2_layer_t layer, 3662a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall int32_t x, int32_t y, hwc2_error_t* outErr = nullptr) 3672a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall { 3682a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_CURSOR_POSITION>( 3692a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall getFunction(HWC2_FUNCTION_SET_CURSOR_POSITION)); 3702a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 3712a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 3722a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, x, 3732a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall y)); 3742a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall if (outErr) { 3752a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall *outErr = err; 3762a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall } else { 3772a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set cursor position"; 3782a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall } 3792a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall } 3802a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 381ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall void setLayerBlendMode(hwc2_display_t display, hwc2_layer_t layer, 382ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall hwc2_blend_mode_t mode, hwc2_error_t* outErr = nullptr) 383ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall { 384ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_BLEND_MODE>( 385ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_BLEND_MODE)); 386ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 387ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 388ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 389ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall mode)); 390ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall if (outErr) { 391ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall *outErr = err; 392ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall } else { 393ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer blend mode " 394ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall << getBlendModeName(mode); 395ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall } 396ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall } 397ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 3985a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall void setLayerBuffer(hwc2_display_t display, hwc2_layer_t layer, 3995a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall buffer_handle_t buffer, int32_t acquireFence, 4005a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall hwc2_error_t* outErr = nullptr) 4015a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall { 4025a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_BUFFER>( 4035a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_BUFFER)); 4045a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 4055a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 4065a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 4075a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall buffer, acquireFence)); 4085a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall if (outErr) { 4095a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall *outErr = err; 4105a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall } else { 4115a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer buffer"; 4125a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall } 4135a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall } 4145a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 415ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall void setLayerColor(hwc2_display_t display, hwc2_layer_t layer, 416ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall hwc_color_t color, hwc2_error_t* outErr = nullptr) 417ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall { 418ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_COLOR>( 419ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_COLOR)); 420ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 421ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 422ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 423ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall color)); 424ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall if (outErr) { 425ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall *outErr = err; 426ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall } else { 427ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer color"; 428ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall } 429ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall } 430ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 431b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall void setLayerDataspace(hwc2_display_t display, hwc2_layer_t layer, 432b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall android_dataspace_t dataspace, hwc2_error_t* outErr = nullptr) 433b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall { 434b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_DATASPACE>( 435b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_DATASPACE)); 436b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 437b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 438b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 439b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall layer, dataspace)); 440b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall if (outErr) { 441b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall *outErr = err; 442b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall } else { 443b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer dataspace"; 444b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall } 445b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall } 446b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 447600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall void setLayerDisplayFrame(hwc2_display_t display, hwc2_layer_t layer, 448600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall const hwc_rect_t& displayFrame, hwc2_error_t* outErr = nullptr) 449600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall { 450600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_DISPLAY_FRAME>( 451600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_DISPLAY_FRAME)); 452600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 453600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 454600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 455600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall displayFrame)); 456600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall if (outErr) { 457600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall *outErr = err; 458600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall } else { 459600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer display" 460600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall " frame"; 461600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall } 462600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall } 463600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 4642b1f53060ea8587a428f826cf7890354ff124722Marissa Wall void setLayerPlaneAlpha(hwc2_display_t display, hwc2_layer_t layer, 4652b1f53060ea8587a428f826cf7890354ff124722Marissa Wall float alpha, hwc2_error_t* outErr = nullptr) 4662b1f53060ea8587a428f826cf7890354ff124722Marissa Wall { 4672b1f53060ea8587a428f826cf7890354ff124722Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_PLANE_ALPHA>( 4682b1f53060ea8587a428f826cf7890354ff124722Marissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_PLANE_ALPHA)); 4692b1f53060ea8587a428f826cf7890354ff124722Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 4702b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 4712b1f53060ea8587a428f826cf7890354ff124722Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 4722b1f53060ea8587a428f826cf7890354ff124722Marissa Wall alpha)); 4732b1f53060ea8587a428f826cf7890354ff124722Marissa Wall if (outErr) { 4742b1f53060ea8587a428f826cf7890354ff124722Marissa Wall *outErr = err; 4752b1f53060ea8587a428f826cf7890354ff124722Marissa Wall } else { 4762b1f53060ea8587a428f826cf7890354ff124722Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer plane alpha " 4772b1f53060ea8587a428f826cf7890354ff124722Marissa Wall << alpha; 4782b1f53060ea8587a428f826cf7890354ff124722Marissa Wall } 4792b1f53060ea8587a428f826cf7890354ff124722Marissa Wall } 4802b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 481c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall void setLayerSourceCrop(hwc2_display_t display, hwc2_layer_t layer, 482c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall const hwc_frect_t& sourceCrop, hwc2_error_t* outErr = nullptr) 483c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall { 484c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_SOURCE_CROP>( 485c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_SOURCE_CROP)); 486c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 487c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 488c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 489c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall sourceCrop)); 490c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall if (outErr) { 491c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall *outErr = err; 492c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall } else { 493c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer source crop"; 494c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall } 495c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall } 496c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 497ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall void setLayerSurfaceDamage(hwc2_display_t display, hwc2_layer_t layer, 498ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall const hwc_region_t& surfaceDamage, hwc2_error_t* outErr = nullptr) 499ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall { 500ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_SURFACE_DAMAGE>( 501ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_SURFACE_DAMAGE)); 502ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 503ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 504ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 505ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall surfaceDamage)); 506ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall if (outErr) { 507ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall *outErr = err; 508ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall } else { 509ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer surface" 510ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall " damage"; 511ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall } 512ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall } 513ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 514ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall void setLayerTransform(hwc2_display_t display, hwc2_layer_t layer, 515ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall hwc_transform_t transform, hwc2_error_t* outErr = nullptr) 516ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall { 517ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_TRANSFORM>( 518ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_TRANSFORM)); 519ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 520ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 521ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 522ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall transform)); 523ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall if (outErr) { 524ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall *outErr = err; 525ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall } else { 526ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer transform " 527ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall << getTransformName(transform); 528ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall } 529ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall } 530ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 531f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall void setLayerVisibleRegion(hwc2_display_t display, hwc2_layer_t layer, 532f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall const hwc_region_t& visibleRegion, hwc2_error_t* outErr = nullptr) 533f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall { 534f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_VISIBLE_REGION>( 535f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_VISIBLE_REGION)); 536f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 537f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 538f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 539f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall visibleRegion)); 540f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall if (outErr) { 541f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall *outErr = err; 542f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall } else { 543f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer visible" 544f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall " region"; 545f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall } 546f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall } 547f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 548273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall void setLayerZOrder(hwc2_display_t display, hwc2_layer_t layer, 549273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall uint32_t zOrder, hwc2_error_t* outErr = nullptr) 550273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall { 551273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_Z_ORDER>( 552273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_Z_ORDER)); 553273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 554273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 555273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 556273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall zOrder)); 557273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall if (outErr) { 558273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall *outErr = err; 559273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } else { 560273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer z order " 561273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall << zOrder; 562273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 563273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 564273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 5651cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall void validateDisplay(hwc2_display_t display, uint32_t* outNumTypes, 5661cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall uint32_t* outNumRequests, hwc2_error_t* outErr) 5671cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall { 5681cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_VALIDATE_DISPLAY>( 5691cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall getFunction(HWC2_FUNCTION_VALIDATE_DISPLAY)); 5701cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 5711cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 5721cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall *outErr = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 5731cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall outNumTypes, outNumRequests)); 5741cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } 5751cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 5761cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall void validateDisplay(hwc2_display_t display, uint32_t* outNumTypes, 5771cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall uint32_t* outNumRequests, bool* outHasChanges) 5781cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall { 5791cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 5801cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 5811cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(validateDisplay(display, outNumTypes, 5821cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall outNumRequests, &err)); 5831cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 5841cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall if (err != HWC2_ERROR_HAS_CHANGES) { 5851cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall *outHasChanges = false; 5861cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_EQ(err, HWC2_ERROR_NONE) << "failed to validate display"; 5871cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } else { 5881cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall *outHasChanges = true; 5891cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } 5901cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } 5911cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 592706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall void getDisplayRequests(hwc2_display_t display, 593706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_display_request_t* outDisplayRequests, 594706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_layer_t>* outLayers, 595706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_layer_request_t>* outLayerRequests, 596706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_error_t* outErr = nullptr) 597706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall { 598706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_GET_DISPLAY_REQUESTS>( 599706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall getFunction(HWC2_FUNCTION_GET_DISPLAY_REQUESTS)); 600706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 601706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 602706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall uint32_t numElements = 0; 603706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 604706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 605706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall reinterpret_cast<int32_t*>(outDisplayRequests), &numElements, 606706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall nullptr, nullptr)); 607706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 608706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall if (err == HWC2_ERROR_NONE && numElements > 0) { 609706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall outLayers->resize(numElements); 610706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall outLayerRequests->resize(numElements); 611706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 612706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 613706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall reinterpret_cast<int32_t*>(outDisplayRequests), &numElements, 614706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall reinterpret_cast<uint64_t*>(outLayers->data()), 615706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall reinterpret_cast<int32_t*>(outLayerRequests->data()))); 616706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 617706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 618706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall if (outErr) { 619706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall *outErr = err; 620706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } else { 621706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to get display requests"; 622706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 623706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 624706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 625706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall void handleRequests(hwc2_display_t display, 626706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall const std::vector<hwc2_layer_t>& layers, uint32_t numRequests, 627706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::set<hwc2_layer_t>* outClearLayers = nullptr, 628706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall bool* outFlipClientTarget = nullptr) 629706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall { 630706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_display_request_t displayRequest = 631706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall static_cast<hwc2_display_request_t>(0); 632706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_layer_t> requestedLayers; 633706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_layer_request_t> requests; 634706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 635706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayRequests(display, &displayRequest, 636706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall &requestedLayers, &requests)); 637706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 638706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_EQ(numRequests, requests.size()) << "validate returned " 639706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << numRequests << " requests and get display requests returned " 640706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << requests.size() << " requests"; 641706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 642706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall for (size_t i = 0; i < requests.size(); i++) { 643706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_layer_t requestedLayer = requestedLayers.at(i); 644706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_layer_request_t request = requests.at(i); 645706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 646706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_EQ(std::count(layers.begin(), layers.end(), requestedLayer), 647706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 0) << "get display requests returned an unknown layer"; 648706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_NE(request, 0) << "returned empty request for layer " 649706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << requestedLayer; 650706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 651706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall if (outClearLayers && request 652706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall == HWC2_LAYER_REQUEST_CLEAR_CLIENT_TARGET) 653706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall outClearLayers->insert(requestedLayer); 654706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 655706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 656706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall if (outFlipClientTarget) 657706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall *outFlipClientTarget = displayRequest 658706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall & HWC2_DISPLAY_REQUEST_FLIP_CLIENT_TARGET; 659706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 660706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 661706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall void getChangedCompositionTypes(hwc2_display_t display, 662706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_layer_t>* outLayers, 663706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_composition_t>* outTypes, 664706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_error_t* outErr = nullptr) 665706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall { 666706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_GET_CHANGED_COMPOSITION_TYPES>( 667706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall getFunction(HWC2_FUNCTION_GET_CHANGED_COMPOSITION_TYPES)); 668706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 669706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 670706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall uint32_t numElements = 0; 671706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 672706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 673706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall &numElements, nullptr, nullptr)); 674706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 675706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall if (err == HWC2_ERROR_NONE && numElements > 0) { 676706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall outLayers->resize(numElements); 677706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall outTypes->resize(numElements); 678706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 679706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 680706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall &numElements, reinterpret_cast<uint64_t*>(outLayers->data()), 681706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall reinterpret_cast<int32_t*>(outTypes->data()))); 682706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 683706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 684706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall if (outErr) { 685706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall *outErr = err; 686706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } else { 687706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to get changed" 688706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall " composition types"; 689706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 690706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 691706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 692706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall void handleCompositionChanges(hwc2_display_t display, 693706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall const Hwc2TestLayers& testLayers, 694706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall const std::vector<hwc2_layer_t>& layers, uint32_t numTypes, 695706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::set<hwc2_layer_t>* outClientLayers = nullptr) 696706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall { 697706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_layer_t> changedLayers; 698706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_composition_t> types; 699706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 700706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(getChangedCompositionTypes(display, 701706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall &changedLayers, &types)); 702706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 703706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_EQ(numTypes, types.size()) << "validate returned " 704706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << numTypes << " types and get changed composition types" 705706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall " returned " << types.size() << " types"; 706706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 707706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall for (size_t i = 0; i < types.size(); i++) { 708706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 709706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall auto layer = std::find(layers.begin(), layers.end(), 710706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall changedLayers.at(i)); 711706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 712706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_TRUE(layer != layers.end() || !testLayers.contains(*layer)) 713706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << "get changed composition types returned an unknown layer"; 714706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 715706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_composition_t requestedType = testLayers.getComposition(*layer); 716706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_composition_t returnedType = types.at(i); 717706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 718706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_NE(returnedType, HWC2_COMPOSITION_INVALID) << "get changed" 719706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall " composition types returned invalid composition"; 720706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 721706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall switch (requestedType) { 722706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall case HWC2_COMPOSITION_CLIENT: 723706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_TRUE(false) << getCompositionName(returnedType) 724706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << " cannot be changed"; 725706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall break; 726706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall case HWC2_COMPOSITION_DEVICE: 727706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall case HWC2_COMPOSITION_SOLID_COLOR: 728706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_EQ(returnedType, HWC2_COMPOSITION_CLIENT) 729706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << "composition of type " 730706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << getCompositionName(requestedType) 731706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << " can only be changed to " 732706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << getCompositionName(HWC2_COMPOSITION_CLIENT); 733706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall break; 734706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall case HWC2_COMPOSITION_CURSOR: 735706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall case HWC2_COMPOSITION_SIDEBAND: 736706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_TRUE(returnedType == HWC2_COMPOSITION_CLIENT 737706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall || returnedType == HWC2_COMPOSITION_DEVICE) 738706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << "composition of type " 739706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << getCompositionName(requestedType) 740706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << " can only be changed to " 741706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << getCompositionName(HWC2_COMPOSITION_CLIENT) << " or " 742706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << getCompositionName(HWC2_COMPOSITION_DEVICE); 743706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall break; 744706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall default: 745706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_TRUE(false) << "unknown type " 746706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << getCompositionName(requestedType); 747706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall break; 748706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 749706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 750706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall if (outClientLayers) 751706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall if (returnedType == HWC2_COMPOSITION_CLIENT) 752706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall outClientLayers->insert(*layer); 753706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 754706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 755706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall if (outClientLayers) { 756706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall for (auto layer : layers) { 757706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall if (testLayers.getComposition(layer) == HWC2_COMPOSITION_CLIENT) 758706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall outClientLayers->insert(layer); 759706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 760706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 761706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 762706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 763706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall void acceptDisplayChanges(hwc2_display_t display, 764706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_error_t* outErr = nullptr) 765706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall { 766706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_ACCEPT_DISPLAY_CHANGES>( 767706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall getFunction(HWC2_FUNCTION_ACCEPT_DISPLAY_CHANGES)); 768706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 769706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 770706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display)); 771706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall if (outErr) { 772706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall *outErr = err; 773706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } else { 774706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to accept display changes"; 775706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 776706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 777706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 778f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall void getClientTargetSupport(hwc2_display_t display, int32_t width, 779f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall int32_t height, android_pixel_format_t format, 780f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall android_dataspace_t dataspace, hwc2_error_t* outErr = nullptr) 781f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall { 782f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_GET_CLIENT_TARGET_SUPPORT>( 783f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall getFunction(HWC2_FUNCTION_GET_CLIENT_TARGET_SUPPORT)); 784f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 785f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 786f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, width, 787f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall height, format, dataspace)); 788f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall if (outErr) { 789f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall *outErr = err; 790f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } else { 791f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to get client target" 792f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall " support"; 793f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } 794f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } 795f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 796f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall void setClientTarget(hwc2_display_t display, buffer_handle_t handle, 797f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall int32_t acquireFence, android_dataspace_t dataspace, 798f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall hwc_region_t damage, hwc2_error_t* outErr = nullptr) 799f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall { 800f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_CLIENT_TARGET>( 801f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall getFunction(HWC2_FUNCTION_SET_CLIENT_TARGET)); 802f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 803f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 804f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, handle, 805f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall acquireFence, dataspace, damage)); 806f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall if (outErr) { 807f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall *outErr = err; 808f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } else { 809f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set client target"; 810f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } 811f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } 812f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 813563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall void presentDisplay(hwc2_display_t display, int32_t* outPresentFence, 814563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall hwc2_error_t* outErr = nullptr) 815563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall { 816563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_PRESENT_DISPLAY>( 817563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall getFunction(HWC2_FUNCTION_PRESENT_DISPLAY)); 818563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 819563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 820563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 821563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall outPresentFence)); 822563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall if (outErr) { 823563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall *outErr = err; 824563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall } else { 825563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to present display"; 826563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall } 827563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall } 828563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 829563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall void getReleaseFences(hwc2_display_t display, 830563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::vector<hwc2_layer_t>* outLayers, 831563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::vector<int32_t>* outFences, hwc2_error_t* outErr = nullptr) 832563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall { 833563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_GET_RELEASE_FENCES>( 834563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall getFunction(HWC2_FUNCTION_GET_RELEASE_FENCES)); 835563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 836563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 837563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall uint32_t numElements = 0; 838563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 839563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 840563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall &numElements, nullptr, nullptr)); 841563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 842563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall if (err == HWC2_ERROR_NONE) { 843563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall outLayers->resize(numElements); 844563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall outFences->resize(numElements); 845563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 846563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 847563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall &numElements, outLayers->data(), outFences->data())); 848563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall } 849563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 850563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall if (outErr) { 851563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall *outErr = err; 852563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall } else { 853563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to get release fences"; 854563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall } 855563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall } 856563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 857f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall void getBadDisplay(hwc2_display_t* outDisplay) 858f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall { 859f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall for (hwc2_display_t display = 0; display < UINT64_MAX; display++) { 860f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall if (mDisplays.count(display) == 0) { 861f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall *outDisplay = display; 862f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall return; 863f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } 864f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } 865f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_TRUE(false) << "Unable to find bad display. UINT64_MAX displays" 866f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall " are registered. This should never happen."; 867f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } 868f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 869563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall void waitForVsync(hwc2_display_t* outDisplay = nullptr, 870563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall int64_t* outTimestamp = nullptr) 871563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall { 872563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unique_lock<std::mutex> lock(mVsyncMutex); 873563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_EQ(mVsyncCv.wait_for(lock, std::chrono::seconds(3)), 874563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::cv_status::no_timeout) << "timed out attempting to get" 875563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall " vsync callback"; 876563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall if (outDisplay) 877563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall *outDisplay = mVsyncDisplay; 878563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall if (outTimestamp) 879563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall *outTimestamp = mVsyncTimestamp; 880563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall } 881563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 882563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall void enableVsync(hwc2_display_t display) 883563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall { 884563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_VSYNC, this, 885563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall reinterpret_cast<hwc2_function_pointer_t>( 886563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall hwc2TestVsyncCallback))); 887563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE)); 888563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall } 889563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 890563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall void disableVsync(hwc2_display_t display) 891563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall { 892563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 893563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall } 894563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 8954d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wallprotected: 8964d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall hwc2_function_pointer_t getFunction(hwc2_function_descriptor_t descriptor) 8974d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall { 8984d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall return mHwc2Device->getFunction(mHwc2Device, descriptor); 8994d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall } 9004d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 9014d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall void getCapabilities(std::vector<hwc2_capability_t>* outCapabilities) 9024d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall { 9034d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall uint32_t num = 0; 9044d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 9054d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall mHwc2Device->getCapabilities(mHwc2Device, &num, nullptr); 9064d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 9074d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall outCapabilities->resize(num); 9084d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 9094d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall mHwc2Device->getCapabilities(mHwc2Device, &num, 9104d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall reinterpret_cast<int32_t*>(outCapabilities->data())); 9114d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall } 9124d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 913cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall /* Registers a hotplug callback and waits for hotplug callbacks. This 914cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall * function will have no effect if called more than once. */ 915cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall void populateDisplays() 916cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall { 917cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall /* Sets the hotplug status to receiving */ 918cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall { 919cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::lock_guard<std::mutex> lock(mHotplugMutex); 920cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 921cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall if (mHotplugStatus != Hwc2TestHotplugStatus::Init) 922cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall return; 923cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall mHotplugStatus = Hwc2TestHotplugStatus::Receiving; 924cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 925cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 926cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall /* Registers the callback. This function call cannot be locked because 927cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall * a callback could happen on the same thread */ 928cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_HOTPLUG, this, 929cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall reinterpret_cast<hwc2_function_pointer_t>( 930cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2TestHotplugCallback))); 931cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 932cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall /* Waits for hotplug events. If a hotplug event has not come within 1 933cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall * second, stop waiting. */ 934cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::unique_lock<std::mutex> lock(mHotplugMutex); 935cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 936cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall while (mHotplugCv.wait_for(lock, std::chrono::seconds(1)) != 937cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::cv_status::timeout) { } 938cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 939cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall /* Sets the hotplug status to done. Future calls will have no effect */ 940cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall mHotplugStatus = Hwc2TestHotplugStatus::Done; 941cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 942cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 9431db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall /* NOTE: will create min(newlayerCnt, max supported layers) layers */ 9441db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall void createLayers(hwc2_display_t display, 9451db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall std::vector<hwc2_layer_t>* outLayers, size_t newLayerCnt) 9461db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall { 9471db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall std::vector<hwc2_layer_t> newLayers; 9481db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_layer_t layer; 9491db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 9501db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 9511db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (size_t i = 0; i < newLayerCnt; i++) { 9521db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 9531db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_NO_FATAL_FAILURE(createLayer(display, &layer, &err)); 9541db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall if (err == HWC2_ERROR_NO_RESOURCES) 9551db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall break; 9561db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall if (err != HWC2_ERROR_NONE) { 9571db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall newLayers.clear(); 9581db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to create layer"; 9591db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 9601db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall newLayers.push_back(layer); 9611db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 9621db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 9631db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall *outLayers = std::move(newLayers); 9641db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 9651db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 9661db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall void destroyLayers(hwc2_display_t display, 9671db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall std::vector<hwc2_layer_t>&& layers) 9681db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall { 9691db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (hwc2_layer_t layer : layers) { 9701db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 9711db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 9721db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 9731db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 974cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall void getInvalidConfig(hwc2_display_t display, hwc2_config_t* outConfig) 975cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall { 976cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs; 977cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 978cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 979cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 980cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_config_t CONFIG_MAX = UINT32_MAX; 981cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 982cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_LE(configs.size() - 1, CONFIG_MAX) << "every config value" 983cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall " (2^32 values) has been taken which shouldn't happen"; 984cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 985cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_config_t config; 986cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (config = 0; config < CONFIG_MAX; config++) { 987cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall if (std::count(configs.begin(), configs.end(), config) == 0) 988cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall break; 989cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 990cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 991cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall *outConfig = config; 992cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 993cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 9946bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* Calls a set property function from Hwc2Test to set a property value from 9956bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * Hwc2TestLayer to hwc2_layer_t on hwc2_display_t */ 9966bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall using TestLayerPropertyFunction = void (*)(Hwc2Test* test, 9976bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_display_t display, hwc2_layer_t layer, 9985a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr); 9996bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 1000273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall /* Calls a set property function from Hwc2Test to set property values from 1001273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall * Hwc2TestLayers to hwc2_layer_t on hwc2_display_t */ 1002273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall using TestLayerPropertiesFunction = void (*)(Hwc2Test* test, 1003273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall hwc2_display_t display, hwc2_layer_t layer, 10045a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayers* testLayers); 1005273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 10066bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* Calls a set property function from Hwc2Test to set a bad property value 10076bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * on hwc2_layer_t on hwc2_display_t */ 10086bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall using TestLayerPropertyBadLayerFunction = void (*)(Hwc2Test* test, 10096bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_display_t display, hwc2_layer_t layer, 10105a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr); 10116bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 10126bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* Calls a set property function from Hwc2Test to set a bad property value 10136bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * on hwc2_layer_t on hwc2_display_t */ 10146bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall using TestLayerPropertyBadParameterFunction = void (*)(Hwc2Test* test, 10156bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_display_t display, hwc2_layer_t layer, hwc2_error_t* outErr); 10166bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 10171cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall /* Is called after a display is powered on and all layer properties have 10181cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall * been set. It should be used to test functions such as validate, accepting 10191cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall * changes, present, etc. */ 10201cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall using TestDisplayLayersFunction = void (*)(Hwc2Test* test, 1021706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_display_t display, const std::vector<hwc2_layer_t>& layers, 1022563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestLayers* testLayers); 1023706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 1024706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall /* It is called on an non validated display */ 1025706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall using TestDisplayNonValidatedLayersFunction = void (*)(Hwc2Test* test, 1026706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_display_t display, std::vector<hwc2_layer_t>* layers); 10271cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 1028f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall /* Tests client target support on a particular display and config */ 1029f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall using TestClientTargetSupportFunction = void (*)(Hwc2Test* test, 1030f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall hwc2_display_t display, 1031f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const Hwc2TestClientTargetSupport& testClientTargetSupport); 1032f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 10336bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* Advances a property of Hwc2TestLayer */ 10346bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall using AdvanceProperty = bool (*)(Hwc2TestLayer* testLayer); 10356bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 1036f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall /* Advances properties of Hwc2TestLayers */ 1037f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall using AdvanceProperties = bool (*)(Hwc2TestLayers* testLayer); 1038f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 1039f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall /* Advances properties of Hwc2TestClientTargetSupport */ 1040f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall using AdvanceClientTargetSupport = bool (*)( 1041f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall Hwc2TestClientTargetSupport* testClientTargetSupport); 1042f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 10436bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* For each active display it cycles through each display config and tests 10446bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * each property value. It creates a layer, sets the property and then 10456bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * destroys the layer */ 10466bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall void setLayerProperty(Hwc2TestCoverage coverage, 10476bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall TestLayerPropertyFunction function, AdvanceProperty advance) 10486bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall { 10496bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto display : mDisplays) { 10506bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall std::vector<hwc2_config_t> configs; 10516bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 10526bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 10536bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 10546bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto config : configs) { 10556bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_layer_t layer; 1056600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Area displayArea; 10576bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 10586bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 1059600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveDisplayArea(display, 1060600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall &displayArea)); 1061600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Hwc2TestLayer testLayer(coverage, displayArea); 10626bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 10636bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall do { 10646bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 10656bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 10666bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(function(this, display, layer, 10675a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall &testLayer, nullptr)); 10686bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 10696bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 10706bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } while (advance(&testLayer)); 10716bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 10726bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 10736bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 10746bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 10756bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* For each active display it cycles through each display config and tests 10766bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * each property value. It creates a layer, cycles through each property 10776bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * value and updates the layer property value and then destroys the layer */ 10786bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall void setLayerPropertyUpdate(Hwc2TestCoverage coverage, 10796bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall TestLayerPropertyFunction function, AdvanceProperty advance) 10806bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall { 10816bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto display : mDisplays) { 10826bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall std::vector<hwc2_config_t> configs; 10836bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 10846bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 10856bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 10866bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto config : configs) { 10876bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_layer_t layer; 1088600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Area displayArea; 10896bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 10906bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 1091600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveDisplayArea(display, 1092600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall &displayArea)); 1093600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Hwc2TestLayer testLayer(coverage, displayArea); 10946bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 10956bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 10966bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 10976bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall do { 10986bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(function(this, display, layer, 10995a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall &testLayer, nullptr)); 11006bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } while (advance(&testLayer)); 11016bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 11026bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 11036bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 11046bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 11056bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 11066bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 1107273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall /* For each active display it cycles through each display config and tests 1108273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall * each property value. It creates multiple layers, calls the 1109273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall * TestLayerPropertiesFunction to set property values and then 1110273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall * destroys the layers */ 1111273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall void setLayerProperties(Hwc2TestCoverage coverage, size_t layerCnt, 1112f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall TestLayerPropertiesFunction function, AdvanceProperties advance) 1113273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall { 1114273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall for (auto display : mDisplays) { 1115273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall std::vector<hwc2_config_t> configs; 1116273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 1117273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 1118273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 1119273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall for (auto config : configs) { 1120273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall std::vector<hwc2_layer_t> layers; 1121600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Area displayArea; 1122273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 1123273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 1124600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveDisplayArea(display, 1125600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall &displayArea)); 1126273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 1127273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayers(display, &layers, layerCnt)); 1128600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Hwc2TestLayers testLayers(layers, coverage, displayArea); 1129273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 1130f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall do { 1131f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall for (auto layer : layers) { 1132f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall EXPECT_NO_FATAL_FAILURE(function(this, display, layer, 1133f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall &testLayers)); 1134f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall } 1135f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall } while (advance(&testLayers)); 1136273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 1137273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayers(display, std::move(layers))); 1138273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 1139273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 1140273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 1141273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 11426bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* For each active display it cycles through each display config. 11436bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * 1) It attempts to set a valid property value to bad layer handle. 11446bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * 2) It creates a layer x and attempts to set a valid property value to 11456bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * layer x + 1 11466bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * 3) It destroys the layer x and attempts to set a valid property value to 11476bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * the destroyed layer x. 11486bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall */ 11496bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall void setLayerPropertyBadLayer(Hwc2TestCoverage coverage, 11506bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall TestLayerPropertyBadLayerFunction function) 11516bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall { 11526bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto display : mDisplays) { 11536bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall std::vector<hwc2_config_t> configs; 11546bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 11556bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 11566bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 11576bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto config : configs) { 11586bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_layer_t layer = 0; 1159600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Area displayArea; 11606bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 11616bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 11626bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 1163600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveDisplayArea(display, 1164600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall &displayArea)); 1165600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Hwc2TestLayer testLayer(coverage, displayArea); 11666bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 11676bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(function(this, display, layer, 11685a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall &testLayer, &err)); 11696bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 11706bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 11716bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 11726bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 11736bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(function(this, display, layer + 1, 11745a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall &testLayer, &err)); 11756bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 11766bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 11776bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 11786bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 11796bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(function(this, display, layer, 11805a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall &testLayer, &err)); 11816bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 11826bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 11836bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 11846bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 11856bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 11866bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* For each active display it cycles through each display config and tests 11876bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * each property value. It creates a layer, sets a bad property value and 11886bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * then destroys the layer */ 11896bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall void setLayerPropertyBadParameter(TestLayerPropertyBadParameterFunction function) 11906bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall { 11916bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto display : mDisplays) { 11926bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall std::vector<hwc2_config_t> configs; 11936bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 11946bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 11956bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 11966bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto config : configs) { 11976bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_layer_t layer; 11986bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 11996bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 12006bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 12016bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 12026bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 12036bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 12046bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(function(this, display, layer, &err)); 12056bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_PARAMETER) << "returned wrong" 12066bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall " error code"; 12076bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 12086bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 12096bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 12106bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 12116bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 12126bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 12131cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall /* For each active display it powers on the display, cycles through each 12141cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall * config and creates a set of layers with a certain amount of coverage. 12151cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall * For each active display, for each config and for each set of layers, 12161cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall * it calls the TestDisplayLayersFunction */ 12171cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall void displayLayers(Hwc2TestCoverage coverage, size_t layerCnt, 12181cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall TestDisplayLayersFunction function) 12191cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall { 12201cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall for (auto display : mDisplays) { 12211cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall std::vector<hwc2_config_t> configs; 12221cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 12231cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 12241cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 12251cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 12261cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 12271cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall for (auto config : configs) { 12281cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall Area displayArea; 12291cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall std::vector<hwc2_layer_t> layers; 12301cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 12311cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 12321cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveDisplayArea(display, &displayArea)); 12331cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 12341cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_NO_FATAL_FAILURE(createLayers(display, &layers, layerCnt)); 12351cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall Hwc2TestLayers testLayers(layers, coverage, displayArea); 12361cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 12371cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall do { 12381cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall bool skip; 12391cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 12401cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperties(display, layers, 12411cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall &testLayers, &skip)); 12421cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall if (!skip) 1243706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_NO_FATAL_FAILURE(function(this, display, layers, 1244563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall &testLayers)); 12451cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 12461cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } while (testLayers.advance()); 12471cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 12481cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayers(display, 12491cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall std::move(layers))); 12501cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } 12511cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 12521cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 12531cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } 12541cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } 12551cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 1256706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall /* For each active display, it calls the 1257706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall * TestDisplayNonValidatedLayersFunction on a variety on non-validated 1258706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall * layer combinations */ 1259706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall void displayNonValidatedLayers(size_t layerCnt, 1260706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall TestDisplayNonValidatedLayersFunction function) 1261706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall { 1262706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall for (auto display : mDisplays) { 1263706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall uint32_t numTypes, numRequests; 1264706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_layer_t> layers; 1265706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall bool hasChanges; 1266706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 1267706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 1268706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 1269706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_NO_FATAL_FAILURE(function(this, display, &layers)); 1270706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 1271706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayers(display, &layers, layerCnt)); 1272706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 1273706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_NO_FATAL_FAILURE(function(this, display, &layers)); 1274706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 1275706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall for (auto layer : layers) { 1276706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerCompositionType(display, layer, 1277706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall HWC2_COMPOSITION_CLIENT)); 1278706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 1279706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 1280706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_NO_FATAL_FAILURE(function(this, display, &layers)); 1281706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 1282706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(validateDisplay(display, &numTypes, 1283706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall &numRequests, &hasChanges)); 1284706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 1285706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall for (auto layer : layers) { 1286706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerCompositionType(display, layer, 1287706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall HWC2_COMPOSITION_DEVICE)); 1288706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 1289706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 1290706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_NO_FATAL_FAILURE(function(this, display, &layers)); 1291706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 1292706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayers(display, std::move(layers))); 1293706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 1294706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_NO_FATAL_FAILURE(function(this, display, &layers)); 1295706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 1296706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 1297706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 1298706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 1299706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 1300f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall /* Test client target support on each config on each active display */ 1301f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall void setClientTargetSupport(Hwc2TestCoverage coverage, 1302f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall TestClientTargetSupportFunction function, 1303f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall AdvanceClientTargetSupport advance) 1304f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall { 1305f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall for (auto display : mDisplays) { 1306f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall std::vector<hwc2_config_t> configs; 1307f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 1308f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 1309f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 1310f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall for (auto config : configs) { 1311f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall Area displayArea; 1312f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 1313f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 1314f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(getActiveDisplayArea(display, 1315f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall &displayArea)); 1316f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall Hwc2TestClientTargetSupport testClientTargetSupport(coverage, 1317f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall displayArea); 1318f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 1319f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall do { 1320f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall EXPECT_NO_FATAL_FAILURE(function(this, display, 1321f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall testClientTargetSupport)); 1322f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 1323f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } while (advance(&testClientTargetSupport)); 1324f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } 1325f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } 1326f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } 1327f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 1328600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall void getActiveConfigAttribute(hwc2_display_t display, 1329600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall hwc2_attribute_t attribute, int32_t* outValue) 1330600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall { 1331600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall hwc2_config_t config; 1332600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveConfig(display, &config)); 1333600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, 1334600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall attribute, outValue)); 1335600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_GE(*outValue, 0) << "failed to get valid " 1336600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall << getAttributeName(attribute); 1337600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall } 1338600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 1339600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall void getActiveDisplayArea(hwc2_display_t display, Area* displayArea) 1340600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall { 1341600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveConfigAttribute(display, 1342600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall HWC2_ATTRIBUTE_WIDTH, &displayArea->width)); 1343600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveConfigAttribute(display, 1344600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall HWC2_ATTRIBUTE_HEIGHT, &displayArea->height)); 1345600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall } 1346600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 1347563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall void closeFences(hwc2_display_t display, int32_t presentFence) 1348563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall { 1349563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::vector<hwc2_layer_t> layers; 1350563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::vector<int32_t> fences; 1351563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const int msWait = 3000; 1352563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1353563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall if (presentFence >= 0) { 1354563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_GE(sync_wait(presentFence, msWait), 0); 1355563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall close(presentFence); 1356563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall } 1357563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1358563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(getReleaseFences(display, &layers, &fences)); 1359563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall EXPECT_EQ(layers.size(), fences.size()); 1360563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1361563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall for (int32_t fence : fences) { 1362563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall EXPECT_GE(sync_wait(fence, msWait), 0); 1363563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall if (fence >= 0) 1364563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall close(fence); 1365563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall } 1366563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall } 1367563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 13681cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall void setLayerProperties(hwc2_display_t display, hwc2_layer_t layer, 13691cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall Hwc2TestLayers* testLayers, bool* outSkip) 13701cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall { 13711cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall hwc2_composition_t composition; 13721cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall buffer_handle_t handle = nullptr; 13731cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall int32_t acquireFence; 13741cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 13751cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall *outSkip = true; 13761cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 13771cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall if (!testLayers->contains(layer)) 13781cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall return; 13791cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 13801cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall composition = testLayers->getComposition(layer); 13811cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 13821cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall /* If the device cannot support a buffer format, then do not continue */ 13831cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall if ((composition == HWC2_COMPOSITION_DEVICE 13841cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall || composition == HWC2_COMPOSITION_CURSOR) 13851cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall && testLayers->getBuffer(layer, &handle, &acquireFence) < 0) 13861cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall return; 13871cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 13881cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerCompositionType(display, layer, 13891cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall composition, &err)); 13901cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall if (err == HWC2_ERROR_UNSUPPORTED) 13911cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_TRUE(composition != HWC2_COMPOSITION_CLIENT 13921cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall && composition != HWC2_COMPOSITION_DEVICE); 13931cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 13941cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall const hwc_rect_t cursor = testLayers->getCursorPosition(layer); 13951cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 13961cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerBuffer(display, layer, handle, 13971cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall acquireFence)); 13981cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerBlendMode(display, layer, 13991cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall testLayers->getBlendMode(layer))); 14001cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerColor(display, layer, 14011cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall testLayers->getColor(layer))); 14021cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setCursorPosition(display, layer, cursor.left, 14031cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall cursor.top)); 14041cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerDataspace(display, layer, 14051cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall testLayers->getDataspace(layer))); 14061cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerDisplayFrame(display, layer, 14071cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall testLayers->getDisplayFrame(layer))); 14081cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerPlaneAlpha(display, layer, 14091cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall testLayers->getPlaneAlpha(layer))); 14101cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerSourceCrop(display, layer, 14111cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall testLayers->getSourceCrop(layer))); 14121cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerSurfaceDamage(display, layer, 14131cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall testLayers->getSurfaceDamage(layer))); 14141cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerTransform(display, layer, 14151cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall testLayers->getTransform(layer))); 14161cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerVisibleRegion(display, layer, 14171cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall testLayers->getVisibleRegion(layer))); 14181cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerZOrder(display, layer, 14191cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall testLayers->getZOrder(layer))); 14201cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 14211cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall *outSkip = false; 14221cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } 14231cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 14241cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall void setLayerProperties(hwc2_display_t display, 14251cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall const std::vector<hwc2_layer_t>& layers, 14261cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall Hwc2TestLayers* testLayers, bool* outSkip) 14271cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall { 14281cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall for (auto layer : layers) { 14291cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerProperties(display, layer, 14301cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall testLayers, outSkip)); 14311cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall if (*outSkip) 14321cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall return; 14331cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } 14341cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } 14351cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 1436563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall void setClientTarget(hwc2_display_t display, 1437563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestClientTarget* testClientTarget, 1438563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const Hwc2TestLayers& testLayers, 1439563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const std::set<hwc2_layer_t>& clientLayers, 1440563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const std::set<hwc2_layer_t>& clearLayers, bool flipClientTarget, 1441563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const Area& displayArea) 1442563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall { 1443563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall android_dataspace_t dataspace = HAL_DATASPACE_UNKNOWN; 1444563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall hwc_region_t damage = { }; 1445563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall buffer_handle_t handle; 1446563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall int32_t acquireFence; 1447563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1448563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_EQ(testClientTarget->getBuffer(testLayers, clientLayers, 1449563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall clearLayers, flipClientTarget, displayArea, &handle, 1450563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall &acquireFence), 0); 1451563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall EXPECT_NO_FATAL_FAILURE(setClientTarget(display, handle, acquireFence, 1452563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall dataspace, damage)); 1453563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall } 1454563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1455563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall void presentDisplays(size_t layerCnt, Hwc2TestCoverage coverage, 1456563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage>& 1457563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall coverageExceptions, bool optimize) 1458563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall { 1459563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall for (auto display : mDisplays) { 1460563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::vector<hwc2_config_t> configs; 1461563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1462563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 1463563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(enableVsync(display)); 1464563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1465563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 1466563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1467563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall for (auto config : configs) { 1468563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Area displayArea; 1469563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::vector<hwc2_layer_t> layers; 1470563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1471563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 1472563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(getActiveDisplayArea(display, 1473563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall &displayArea)); 1474563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1475563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayers(display, &layers, layerCnt)); 1476563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestLayers testLayers(layers, coverage, displayArea, 1477563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall coverageExceptions); 1478563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1479563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall if (optimize && !testLayers.optimizeLayouts()) 1480563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall continue; 1481563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1482563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::set<hwc2_layer_t> clientLayers; 1483563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::set<hwc2_layer_t> clearLayers; 1484563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestClientTarget testClientTarget; 1485563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1486563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall do { 1487563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall uint32_t numTypes, numRequests; 1488563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool hasChanges, skip; 1489563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool flipClientTarget; 1490563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall int32_t presentFence; 1491563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1492563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperties(display, layers, 1493563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall &testLayers, &skip)); 1494563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall if (skip) 1495563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall continue; 1496563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1497563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(validateDisplay(display, &numTypes, 1498563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall &numRequests, &hasChanges)); 1499563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall if (hasChanges) 1500563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall EXPECT_LE(numTypes, static_cast<uint32_t>(layers.size())) 1501563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall << "wrong number of requests"; 1502563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1503563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(handleCompositionChanges(display, 1504563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall testLayers, layers, numTypes, &clientLayers)); 1505563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(handleRequests(display, layers, 1506563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall numRequests, &clearLayers, &flipClientTarget)); 1507563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(setClientTarget(display, 1508563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall &testClientTarget, testLayers, clientLayers, 1509563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall clearLayers, flipClientTarget, displayArea)); 1510563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(acceptDisplayChanges(display)); 1511563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1512563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(waitForVsync()); 1513563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1514563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall EXPECT_NO_FATAL_FAILURE(presentDisplay(display, 1515563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall &presentFence)); 1516563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1517563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(closeFences(display, presentFence)); 1518563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1519563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall } while (testLayers.advance()); 1520563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1521563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayers(display, 1522563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::move(layers))); 1523563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall } 1524563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 1525563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(disableVsync(display)); 1526563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 1527563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall } 1528563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall } 1529563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 15304d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall hwc2_device_t* mHwc2Device = nullptr; 1531cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1532cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall enum class Hwc2TestHotplugStatus { 1533cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall Init = 1, 1534cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall Receiving, 1535cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall Done, 1536cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall }; 1537cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1538cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::mutex mHotplugMutex; 1539cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::condition_variable mHotplugCv; 1540cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall Hwc2TestHotplugStatus mHotplugStatus = Hwc2TestHotplugStatus::Init; 1541cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::unordered_set<hwc2_display_t> mDisplays; 15421db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 15431db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall /* Store all created layers that have not been destroyed. If an ASSERT_* 15441db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall * fails, then destroy the layers on exit */ 15451db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall std::set<std::pair<hwc2_display_t, hwc2_layer_t>> mLayers; 154603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 154703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall /* Store the power mode state. If it is not HWC2_POWER_MODE_OFF when 154803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall * tearing down the test cases, change it to HWC2_POWER_MODE_OFF */ 154903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall std::set<hwc2_display_t> mActiveDisplays; 1550572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1551572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall std::mutex mVsyncMutex; 1552572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall std::condition_variable mVsyncCv; 1553572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_display_t mVsyncDisplay; 1554572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall int64_t mVsyncTimestamp = -1; 15554d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall}; 15564d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 1557cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wallvoid hwc2TestHotplugCallback(hwc2_callback_data_t callbackData, 1558cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2_display_t display, int32_t connection) 1559cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall{ 1560cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall if (callbackData) 1561cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall static_cast<Hwc2Test*>(callbackData)->hotplugCallback(display, 1562cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall connection); 1563cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall} 1564cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1565572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wallvoid hwc2TestVsyncCallback(hwc2_callback_data_t callbackData, 1566572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_display_t display, int64_t timestamp) 1567572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 1568572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall if (callbackData) 1569572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall static_cast<Hwc2Test*>(callbackData)->vsyncCallback(display, 1570572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall timestamp); 1571572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 1572572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1573ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wallvoid setBlendMode(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 15745a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 1575ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall{ 1576ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerBlendMode(display, layer, 15775a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getBlendMode(), outErr)); 15785a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall} 15795a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 15805a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wallvoid setBuffer(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 15815a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 15825a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall{ 15835a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall buffer_handle_t handle; 15845a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall android::base::unique_fd acquireFence; 15855a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall hwc2_composition_t composition = testLayer->getComposition(); 15865a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 15875a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall if (composition == HWC2_COMPOSITION_CLIENT 15885a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall || composition == HWC2_COMPOSITION_SOLID_COLOR 15895a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall || composition == HWC2_COMPOSITION_SIDEBAND) 15905a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall return; 15915a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 15925a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall if (testLayer->getBuffer(&handle, &acquireFence) < 0) 15935a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall return; 15945a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 15955a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerCompositionType(display, layer, 15965a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall composition)); 15975a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerBuffer(display, layer, 15985a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall handle, acquireFence, outErr)); 1599ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall} 1600ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 1601ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wallvoid setColor(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 16025a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 1603ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall{ 1604ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerCompositionType(display, 1605ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall layer, HWC2_COMPOSITION_SOLID_COLOR)); 1606ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerPlaneAlpha(display, 16075a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall layer, testLayer->getPlaneAlpha())); 1608ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerBlendMode(display, 16095a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall layer, testLayer->getBlendMode())); 1610ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerColor(display, layer, 16115a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getColor(), outErr)); 1612ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall} 1613ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 16146bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wallvoid setComposition(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 16155a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 16166bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall{ 16175a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall hwc2_composition_t composition = testLayer->getComposition(); 16186bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 16196bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 16206bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerCompositionType(display, layer, 16216bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall composition, &err)); 16226bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall if (outErr) { 16236bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall *outErr = err; 16246bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall return; 16256bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 16266bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 16276bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall if (composition != HWC2_COMPOSITION_SIDEBAND) { 16286bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall EXPECT_EQ(err, HWC2_ERROR_NONE) << "returned wrong error code"; 16296bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } else { 16306bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall EXPECT_TRUE(err == HWC2_ERROR_NONE || err == HWC2_ERROR_UNSUPPORTED) 16316bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall << "returned wrong error code"; 16326bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 16336bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall} 16346bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 16352a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wallvoid setCursorPosition(Hwc2Test* test, hwc2_display_t display, 16365a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall hwc2_layer_t layer, Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 16372a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall{ 16382a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerCompositionType(display, 16392a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall layer, HWC2_COMPOSITION_CURSOR)); 16402a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 16415a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall const hwc_rect_t cursorPosition = testLayer->getCursorPosition(); 16422a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setCursorPosition(display, layer, 16432a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall cursorPosition.left, cursorPosition.top, outErr)); 16442a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall} 16452a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 1646b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wallvoid setDataspace(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 16475a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 1648b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall{ 1649b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerDataspace(display, layer, 16505a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getDataspace(), outErr)); 1651b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall} 1652b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 1653600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wallvoid setDisplayFrame(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 16545a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 1655600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall{ 1656600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerDisplayFrame(display, layer, 16575a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getDisplayFrame(), outErr)); 1658600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall} 1659600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 16602b1f53060ea8587a428f826cf7890354ff124722Marissa Wallvoid setPlaneAlpha(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 16615a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t *outErr) 16622b1f53060ea8587a428f826cf7890354ff124722Marissa Wall{ 16632b1f53060ea8587a428f826cf7890354ff124722Marissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerBlendMode(display, layer, 16645a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getBlendMode())); 16652b1f53060ea8587a428f826cf7890354ff124722Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerPlaneAlpha(display, layer, 16665a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getPlaneAlpha(), outErr)); 16672b1f53060ea8587a428f826cf7890354ff124722Marissa Wall} 16682b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 1669c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wallvoid setSourceCrop(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 16705a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 1671c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall{ 1672c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerSourceCrop(display, layer, 16735a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getSourceCrop(), outErr)); 1674c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall} 1675c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 1676ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wallvoid setSurfaceDamage(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 16775a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 1678ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall{ 1679ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerSurfaceDamage(display, layer, 16805a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getSurfaceDamage(), outErr)); 1681ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall} 1682ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 1683ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wallvoid setTransform(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 16845a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 1685ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall{ 1686ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerTransform(display, layer, 16875a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getTransform(), outErr)); 1688ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall} 1689ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 1690f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wallvoid setVisibleRegion(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 1691f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 1692f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall{ 1693f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerVisibleRegion(display, layer, 1694f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall testLayer->getVisibleRegion(), outErr)); 1695f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall} 1696f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 1697273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wallvoid setZOrder(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 16985a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 1699273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall{ 1700273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerZOrder(display, layer, 17015a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getZOrder(), outErr)); 1702273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall} 1703273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 1704ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wallbool advanceBlendMode(Hwc2TestLayer* testLayer) 1705ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall{ 1706ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall return testLayer->advanceBlendMode(); 1707ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall} 1708ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 17095a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wallbool advanceBuffer(Hwc2TestLayer* testLayer) 17105a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall{ 17115a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall if (testLayer->advanceComposition()) 17125a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall return true; 17135a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall return testLayer->advanceBufferArea(); 17145a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall} 17155a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 1716ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wallbool advanceColor(Hwc2TestLayer* testLayer) 1717ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall{ 1718ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall /* Color depends on blend mode so advance blend mode last so color is not 1719ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall * force to update as often */ 1720ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall if (testLayer->advancePlaneAlpha()) 1721ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall return true; 1722ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall if (testLayer->advanceColor()) 1723ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall return true; 1724ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall return testLayer->advanceBlendMode(); 1725ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall} 1726ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 17276bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wallbool advanceComposition(Hwc2TestLayer* testLayer) 17286bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall{ 17296bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall return testLayer->advanceComposition(); 17306bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall} 17316bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 17322a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wallbool advanceCursorPosition(Hwc2TestLayer* testLayer) 17332a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall{ 17342a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall return testLayer->advanceCursorPosition(); 17352a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall} 17362a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 1737b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wallbool advanceDataspace(Hwc2TestLayer* testLayer) 1738b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall{ 1739b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall return testLayer->advanceDataspace(); 1740b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall} 1741b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 1742600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wallbool advanceDisplayFrame(Hwc2TestLayer* testLayer) 1743600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall{ 1744600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall return testLayer->advanceDisplayFrame(); 1745600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall} 1746600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 17472b1f53060ea8587a428f826cf7890354ff124722Marissa Wallbool advancePlaneAlpha(Hwc2TestLayer* testLayer) 17482b1f53060ea8587a428f826cf7890354ff124722Marissa Wall{ 17492b1f53060ea8587a428f826cf7890354ff124722Marissa Wall return testLayer->advancePlaneAlpha(); 17502b1f53060ea8587a428f826cf7890354ff124722Marissa Wall} 17512b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 1752c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wallbool advanceSourceCrop(Hwc2TestLayer* testLayer) 1753c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall{ 1754c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall if (testLayer->advanceSourceCrop()) 1755c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall return true; 1756c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall return testLayer->advanceBufferArea(); 1757c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall} 1758c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 1759ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wallbool advanceSurfaceDamage(Hwc2TestLayer* testLayer) 1760ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall{ 1761ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall if (testLayer->advanceSurfaceDamage()) 1762ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall return true; 1763ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall return testLayer->advanceBufferArea(); 1764ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall} 1765ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 1766ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wallbool advanceTransform(Hwc2TestLayer* testLayer) 1767ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall{ 1768ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall return testLayer->advanceTransform(); 1769ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall} 1770ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 1771f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wallbool advanceVisibleRegions(Hwc2TestLayers* testLayers) 1772f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall{ 1773f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall return testLayers->advanceVisibleRegions(); 1774f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall} 1775f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 1776f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wallbool advanceClientTargetSupport( 1777f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall Hwc2TestClientTargetSupport* testClientTargetSupport) 1778f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall{ 1779f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall return testClientTargetSupport->advance(); 1780f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall} 17814d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 17824d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wallstatic const std::array<hwc2_function_descriptor_t, 42> requiredFunctions = {{ 17834d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_ACCEPT_DISPLAY_CHANGES, 17844d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_CREATE_LAYER, 17854d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_CREATE_VIRTUAL_DISPLAY, 17864d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_DESTROY_LAYER, 17874d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_DESTROY_VIRTUAL_DISPLAY, 17884d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_DUMP, 17894d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_ACTIVE_CONFIG, 17904d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_CHANGED_COMPOSITION_TYPES, 17914d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_CLIENT_TARGET_SUPPORT, 17924d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_COLOR_MODES, 17934d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_DISPLAY_ATTRIBUTE, 17944d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_DISPLAY_CONFIGS, 17954d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_DISPLAY_NAME, 17964d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_DISPLAY_REQUESTS, 17974d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_DISPLAY_TYPE, 17984d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_DOZE_SUPPORT, 17994d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_HDR_CAPABILITIES, 18004d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_MAX_VIRTUAL_DISPLAY_COUNT, 18014d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_RELEASE_FENCES, 18024d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_PRESENT_DISPLAY, 18034d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_REGISTER_CALLBACK, 18044d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_ACTIVE_CONFIG, 18054d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_CLIENT_TARGET, 18064d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_COLOR_MODE, 18074d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_COLOR_TRANSFORM, 18084d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_CURSOR_POSITION, 18094d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_BLEND_MODE, 18104d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_BUFFER, 18114d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_COLOR, 18124d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_COMPOSITION_TYPE, 18134d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_DATASPACE, 18144d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_DISPLAY_FRAME, 18154d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_PLANE_ALPHA, 18164d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_SOURCE_CROP, 18174d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_SURFACE_DAMAGE, 18184d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_TRANSFORM, 18194d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_VISIBLE_REGION, 18204d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_Z_ORDER, 18214d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_OUTPUT_BUFFER, 18224d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_POWER_MODE, 18234d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_VSYNC_ENABLED, 18244d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_VALIDATE_DISPLAY, 18254d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall}}; 18264d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 18274d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall/* TESTCASE: Tests that the HWC2 supports all required functions. */ 18284d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa WallTEST_F(Hwc2Test, GET_FUNCTION) 18294d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall{ 18304d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall for (hwc2_function_descriptor_t descriptor : requiredFunctions) { 18314d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall hwc2_function_pointer_t pfn = getFunction(descriptor); 18324d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall EXPECT_TRUE(pfn) << "failed to get function " 18334d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall << getFunctionDescriptorName(descriptor); 18344d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall } 18354d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall} 18364d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 18374d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall/* TESTCASE: Tests that the HWC2 fails to retrieve and invalid function. */ 18384d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa WallTEST_F(Hwc2Test, GET_FUNCTION_invalid_function) 18394d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall{ 18404d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall hwc2_function_pointer_t pfn = getFunction(HWC2_FUNCTION_INVALID); 18414d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall EXPECT_FALSE(pfn) << "failed to get invalid function"; 18424d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall} 18434d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 18444d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall/* TESTCASE: Tests that the HWC2 does not return an invalid capability. */ 18454d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa WallTEST_F(Hwc2Test, GET_CAPABILITIES) 18464d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall{ 18474d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall std::vector<hwc2_capability_t> capabilities; 18484d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 18494d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall getCapabilities(&capabilities); 18504d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 18514d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall EXPECT_EQ(std::count(capabilities.begin(), capabilities.end(), 18524d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_CAPABILITY_INVALID), 0); 18534d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall} 1854a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 1855a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wallstatic const std::array<hwc2_callback_descriptor_t, 3> callbackDescriptors = {{ 1856a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall HWC2_CALLBACK_HOTPLUG, 1857a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall HWC2_CALLBACK_REFRESH, 1858a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall HWC2_CALLBACK_VSYNC, 1859a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall}}; 1860a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 1861a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall/* TESTCASE: Tests that the HWC2 can successfully register all required 1862a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall * callback functions. */ 1863a4b01488e852c0c16df89d04914e6f060dd862e3Marissa WallTEST_F(Hwc2Test, REGISTER_CALLBACK) 1864a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall{ 1865a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall hwc2_callback_data_t data = reinterpret_cast<hwc2_callback_data_t>( 1866a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall const_cast<char*>("data")); 1867a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 1868a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall for (auto descriptor : callbackDescriptors) { 1869a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(descriptor, data, 1870a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall []() { return; })); 1871a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall } 1872a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall} 1873a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 1874a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall/* TESTCASE: Test that the HWC2 fails to register invalid callbacks. */ 1875a4b01488e852c0c16df89d04914e6f060dd862e3Marissa WallTEST_F(Hwc2Test, REGISTER_CALLBACK_bad_parameter) 1876a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall{ 1877a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall hwc2_callback_data_t data = reinterpret_cast<hwc2_callback_data_t>( 1878a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall const_cast<char*>("data")); 1879a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 1880a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 1881a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_INVALID, data, 1882a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall []() { return; }, &err)); 1883a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_PARAMETER) << "returned wrong error code"; 1884a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall} 1885a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 1886a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall/* TESTCASE: Tests that the HWC2 can register a callback with null data. */ 1887a4b01488e852c0c16df89d04914e6f060dd862e3Marissa WallTEST_F(Hwc2Test, REGISTER_CALLBACK_null_data) 1888a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall{ 1889a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall hwc2_callback_data_t data = nullptr; 1890a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 1891a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall for (auto descriptor : callbackDescriptors) { 1892a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(descriptor, data, 1893a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall []() { return; })); 1894a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall } 1895a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall} 1896cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1897cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall/* TESTCASE: Tests that the HWC2 returns the correct display type for each 1898cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall * physical display. */ 1899cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa WallTEST_F(Hwc2Test, GET_DISPLAY_TYPE) 1900cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall{ 1901cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall for (auto display : mDisplays) { 1902cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2_display_type_t type; 1903cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1904cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayType(display, &type)); 1905cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall EXPECT_EQ(type, HWC2_DISPLAY_TYPE_PHYSICAL) << "failed to return" 1906cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall " correct display type"; 1907cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 1908cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall} 1909cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1910cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall/* TESTCASE: Tests that the HWC2 returns an error when the display type of a bad 1911cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall * display is requested. */ 1912cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa WallTEST_F(Hwc2Test, GET_DISPLAY_TYPE_bad_display) 1913cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall{ 1914cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2_display_t display; 1915cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2_display_type_t type; 1916cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 1917cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1918cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 1919cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1920cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayType(display, &type, &err)); 1921cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 1922cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall} 19231db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 19241db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall/* TESTCASE: Tests that the HWC2 can create and destroy layers. */ 19251db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa WallTEST_F(Hwc2Test, CREATE_DESTROY_LAYER) 19261db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall{ 19271db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (auto display : mDisplays) { 19281db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_layer_t layer; 19291db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 19301db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 19311db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 19321db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 19331db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 19341db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall} 19351db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 19361db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall/* TESTCASE: Tests that the HWC2 cannot create a layer for a bad display */ 19371db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa WallTEST_F(Hwc2Test, CREATE_LAYER_bad_display) 19381db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall{ 19391db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_display_t display; 19401db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_layer_t layer; 19411db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 19421db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 19431db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 19441db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 19451db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer, &err)); 19461db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 19471db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall} 19481db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 19491db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall/* TESTCASE: Tests that the HWC2 will either support a large number of resources 19501db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall * or will return no resources. */ 19511db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa WallTEST_F(Hwc2Test, CREATE_LAYER_no_resources) 19521db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall{ 19531db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall const size_t layerCnt = 1000; 19541db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 19551db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (auto display : mDisplays) { 19561db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall std::vector<hwc2_layer_t> layers; 19571db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 19581db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(createLayers(display, &layers, layerCnt)); 19591db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 19601db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayers(display, std::move(layers))); 19611db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 19621db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall} 19631db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 19641db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall/* TESTCASE: Tests that the HWC2 cannot destroy a layer for a bad display */ 19651db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa WallTEST_F(Hwc2Test, DESTROY_LAYER_bad_display) 19661db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall{ 19671db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_display_t badDisplay; 19681db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 19691db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&badDisplay)); 19701db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 19711db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (auto display : mDisplays) { 19721db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_layer_t layer = 0; 19731db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 19741db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 19751db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(badDisplay, layer, &err)); 19761db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 19771db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 19781db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 19791db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 19801db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(badDisplay, layer, &err)); 19811db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 19821db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 19831db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 19841db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 19851db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall} 19861db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 19871db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall/* TESTCASE: Tests that the HWC2 cannot destory a bad layer */ 19881db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa WallTEST_F(Hwc2Test, DESTROY_LAYER_bad_layer) 19891db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall{ 19901db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (auto display : mDisplays) { 19911db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_layer_t layer; 19921db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 19931db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 19941db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, UINT64_MAX / 2, &err)); 19951db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 19961db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 19971db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, 0, &err)); 19981db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 19991db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 20001db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, UINT64_MAX - 1, &err)); 20011db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 20021db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 20031db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, 1, &err)); 20041db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 20051db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 20061db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, UINT64_MAX, &err)); 20071db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 20081db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 20091db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 20101db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 20111db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer + 1, &err)); 20121db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 20131db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 20141db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 20151db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 20161db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer, &err)); 20171db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 20181db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 20191db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall} 2020cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2021cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wallstatic const std::array<hwc2_attribute_t, 2> requiredAttributes = {{ 2022cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall HWC2_ATTRIBUTE_WIDTH, 2023cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall HWC2_ATTRIBUTE_HEIGHT, 2024cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall}}; 2025cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2026cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wallstatic const std::array<hwc2_attribute_t, 3> optionalAttributes = {{ 2027cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall HWC2_ATTRIBUTE_VSYNC_PERIOD, 2028cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall HWC2_ATTRIBUTE_DPI_X, 2029cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall HWC2_ATTRIBUTE_DPI_Y, 2030cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall}}; 2031cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2032cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 can return display attributes for a valid 2033cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall * config. */ 2034cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_ATTRIBUTE) 2035cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 2036cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto display : mDisplays) { 2037cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs; 2038cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2039cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 2040cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2041cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto config : configs) { 2042cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall int32_t value; 2043cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2044cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto attribute : requiredAttributes) { 2045cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, 2046cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall attribute, &value)); 2047cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_GE(value, 0) << "missing required attribute " 2048cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall << getAttributeName(attribute) << " for config " 2049cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall << config; 2050cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 2051cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto attribute : optionalAttributes) { 2052cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, 2053cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall attribute, &value)); 2054cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 2055cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 2056cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 2057cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 2058cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2059cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 will return a value of -1 for an invalid 2060cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall * attribute */ 2061cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_ATTRIBUTE_invalid_attribute) 2062cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 2063cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall const hwc2_attribute_t attribute = HWC2_ATTRIBUTE_INVALID; 2064cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2065cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto display : mDisplays) { 2066cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs; 2067cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2068cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 2069cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2070cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto config : configs) { 2071cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall int32_t value; 2072cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 2073cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2074cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, 2075cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall attribute, &value, &err)); 2076cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(value, -1) << "failed to return -1 for an invalid" 2077cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall " attribute for config " << config; 2078cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 2079cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 2080cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 2081cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2082cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 will fail to get attributes for a bad display */ 2083cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_ATTRIBUTE_bad_display) 2084cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 2085cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_display_t display; 2086cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall const hwc2_config_t config = 0; 2087cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall int32_t value; 2088cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 2089cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2090cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 2091cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2092cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto attribute : requiredAttributes) { 2093cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, attribute, 2094cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall &value, &err)); 2095cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 2096cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 2097cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2098cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto attribute : optionalAttributes) { 2099cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, attribute, 2100cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall &value, &err)); 2101cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 2102cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 2103cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 2104cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2105cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 will fail to get attributes for a bad config */ 2106cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_ATTRIBUTE_bad_config) 2107cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 2108cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto display : mDisplays) { 2109cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_config_t config; 2110cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall int32_t value; 2111cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 2112cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2113cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getInvalidConfig(display, &config)); 2114cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2115cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto attribute : requiredAttributes) { 2116cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, 2117cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall attribute, &value, &err)); 2118cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_CONFIG) << "returned wrong error code"; 2119cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 2120cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2121cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto attribute : optionalAttributes) { 2122cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, 2123cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall attribute, &value, &err)); 2124cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_CONFIG) << "returned wrong error code"; 2125cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 2126cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 2127cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 2128cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2129cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 will get display configs for active displays */ 2130cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_CONFIGS) 2131cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 2132cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto display : mDisplays) { 2133cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs; 2134cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2135cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 2136cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 2137cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 2138cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2139cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 will not get display configs for bad displays */ 2140cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_CONFIGS_bad_display) 2141cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 2142cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_display_t display; 2143cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs; 2144cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 2145cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2146cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 2147cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2148cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs, &err)); 2149cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2150cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 2151cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_TRUE(configs.empty()) << "returned configs for bad display"; 2152cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 2153cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2154cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 will return the same config list multiple 2155cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall * times in a row. */ 2156cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_CONFIGS_same) 2157cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 2158cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto display : mDisplays) { 2159cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs1, configs2; 2160cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2161cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs1)); 2162cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs2)); 2163cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2164cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_TRUE(std::is_permutation(configs1.begin(), configs1.end(), 2165cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall configs2.begin())) << "returned two different config sets"; 2166cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 2167cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 2168cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2169cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 does not return duplicate display configs */ 2170cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_CONFIGS_duplicate) 2171cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 2172cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto display : mDisplays) { 2173cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs; 2174cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2175cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 2176cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2177cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::unordered_set<hwc2_config_t> configsSet(configs.begin(), 2178cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall configs.end()); 2179cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(configs.size(), configsSet.size()) << "returned duplicate" 2180cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall " configs"; 2181cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 2182cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 218393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 218493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall/* TESTCASE: Tests that the HWC2 returns the active config for a display */ 218593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa WallTEST_F(Hwc2Test, GET_ACTIVE_CONFIG) 218693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall{ 218793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall for (auto display : mDisplays) { 218893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall std::vector<hwc2_config_t> configs; 218993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 219093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 219193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 219293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall for (auto config : configs) { 219393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_config_t activeConfig; 219493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 219593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 219693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveConfig(display, &activeConfig)); 219793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 219893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_EQ(activeConfig, config) << "failed to get active config"; 219993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 220093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 220193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall} 220293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 220393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall/* TESTCASE: Tests that the HWC2 does not return an active config for a bad 220493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall * display. */ 220593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa WallTEST_F(Hwc2Test, GET_ACTIVE_CONFIG_bad_display) 220693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall{ 220793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_display_t display; 220893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_config_t activeConfig; 220993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 221093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 221193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 221293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 221393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveConfig(display, &activeConfig, &err)); 221493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 221593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 221693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall} 221793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 221893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall/* TESTCASE: Tests that the HWC2 either begins with a valid active config 221993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall * or returns an error when getActiveConfig is called. */ 222093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa WallTEST_F(Hwc2Test, GET_ACTIVE_CONFIG_bad_config) 222193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall{ 222293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall for (auto display : mDisplays) { 222393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall std::vector<hwc2_config_t> configs; 222493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_config_t activeConfig; 222593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 222693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 222793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 222893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 222993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall if (configs.empty()) 223093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall return; 223193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 223293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveConfig(display, &activeConfig, &err)); 223393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall if (err == HWC2_ERROR_NONE) { 223493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_NE(std::count(configs.begin(), configs.end(), 223593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall activeConfig), 0) << "active config is not found in " 223693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall " configs for display"; 223793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } else { 223893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_CONFIG) << "returned wrong error code"; 223993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 224093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 224193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall} 224293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 224393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall/* TESTCASE: Tests that the HWC2 can set every display config as an active 224493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall * config */ 224593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa WallTEST_F(Hwc2Test, SET_ACTIVE_CONFIG) 224693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall{ 224793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall for (auto display : mDisplays) { 224893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall std::vector<hwc2_config_t> configs; 224993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 225093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 225193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 225293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall for (auto config : configs) { 225393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 225493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 225593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 225693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall} 225793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 225893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set an active config for a bad display */ 225993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa WallTEST_F(Hwc2Test, SET_ACTIVE_CONFIG_bad_display) 226093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall{ 226193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_display_t display; 226293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall const hwc2_config_t config = 0; 226393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 226493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 226593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 226693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 226793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config, &err)); 226893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 226993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall} 227093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 227193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set an invalid active config */ 227293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa WallTEST_F(Hwc2Test, SET_ACTIVE_CONFIG_bad_config) 227393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall{ 227493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall for (auto display : mDisplays) { 227593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_config_t config; 227693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 227793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 227893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getInvalidConfig(display, &config)); 227993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 228093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config, &err)); 228193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_CONFIG) << "returned wrong error code"; 228293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 228393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall} 228403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 228503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 returns a valid value for getDozeSupport. */ 228603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, GET_DOZE_SUPPORT) 228703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 228803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall for (auto display : mDisplays) { 228903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall int32_t support = -1; 229003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 229103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getDozeSupport(display, &support)); 229203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 229303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_TRUE(support == 0 || support == 1) << "invalid doze support value"; 229403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 229503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 229603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 229703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 cannot get doze support for a bad display. */ 229803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, GET_DOZE_SUPPORT_bad_display) 229903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 230003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_display_t display; 230103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall int32_t support = -1; 230203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 230303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 230403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 230503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 230603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getDozeSupport(display, &support, &err)); 230703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 230803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 230903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 231003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 231103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 can set all supported power modes */ 231203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, SET_POWER_MODE) 231303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 231403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall for (auto display : mDisplays) { 231503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 231603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 231703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 231803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall int32_t support = -1; 231903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getDozeSupport(display, &support)); 232003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (support != 1) 232103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall return; 232203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 232303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_DOZE)); 232403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, 232503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall HWC2_POWER_MODE_DOZE_SUSPEND)); 232603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 232703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 232803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 232903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 233003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 233103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set a power mode for a bad display. */ 233203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, SET_POWER_MODE_bad_display) 233303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 233403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_display_t display; 233503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 233603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 233703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 233803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 233903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON, &err)); 234003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 234103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 234203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF, &err)); 234303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 234403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 234503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall int32_t support = -1; 234603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getDozeSupport(display, &support, &err)); 234703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (support != 1) 234803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall return; 234903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 235003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_DOZE, &err)); 235103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 235203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 235303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_DOZE_SUSPEND, 235403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall &err)); 235503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 235603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 235703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 235803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set an invalid power mode value. */ 235903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, SET_POWER_MODE_bad_parameter) 236003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 236103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall for (auto display : mDisplays) { 236203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_power_mode_t mode = static_cast<hwc2_power_mode_t>( 236303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall HWC2_POWER_MODE_DOZE_SUSPEND + 1); 236403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 236503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 236603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, mode, &err)); 236703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_PARAMETER) << "returned wrong error code " 236803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall << mode; 236903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 237003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 237103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 237203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 will return unsupported if it does not support 237303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall * an optional power mode. */ 237403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, SET_POWER_MODE_unsupported) 237503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 237603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall for (auto display : mDisplays) { 237703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall int32_t support = -1; 237803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 237903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 238003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getDozeSupport(display, &support, &err)); 238103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (support == 1) 238203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall return; 238303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 238403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_EQ(support, 0) << "invalid doze support value"; 238503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 238603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_DOZE, 238703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall &err)); 238803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_UNSUPPORTED) << "returned wrong error code"; 238903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 239003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, 239103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall HWC2_POWER_MODE_DOZE_SUSPEND, &err)); 239203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_UNSUPPORTED) << "returned wrong error code"; 239303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 239403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 239503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 239603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 can set the same power mode multiple times. */ 239703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, SET_POWER_MODE_stress) 239803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 239903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall for (auto display : mDisplays) { 240003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 240103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 240203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 240303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 240403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 240503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 240603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 240703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 240803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 240903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall int32_t support = -1; 241003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getDozeSupport(display, &support)); 241103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (support != 1) 241203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall return; 241303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 241403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_DOZE)); 241503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_DOZE)); 241603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 241703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, 241803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall HWC2_POWER_MODE_DOZE_SUSPEND)); 241903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, 242003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall HWC2_POWER_MODE_DOZE_SUSPEND)); 242103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 242203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 242303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 242403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 2425572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2426572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 can enable and disable vsync on active 2427572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall * displays */ 2428572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED) 2429572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 2430572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall for (auto display : mDisplays) { 2431572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_callback_data_t data = reinterpret_cast<hwc2_callback_data_t>( 2432572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall const_cast<char*>("data")); 2433572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2434572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 2435572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2436572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_VSYNC, data, 2437572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall []() { return; })); 2438572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2439572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE)); 2440572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2441572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 2442572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2443572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 2444572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 2445572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 2446572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2447572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 issues a valid vsync callback. */ 2448572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED_callback) 2449572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 2450572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall for (auto display : mDisplays) { 2451572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_display_t receivedDisplay; 2452572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall int64_t receivedTimestamp; 2453572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2454572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 2455572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2456572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(enableVsync(display)); 2457572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2458572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(waitForVsync(&receivedDisplay, 2459572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall &receivedTimestamp)); 2460572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2461572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall EXPECT_EQ(receivedDisplay, display) << "failed to get correct display"; 2462572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall EXPECT_GE(receivedTimestamp, 0) << "failed to get valid timestamp"; 2463572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2464572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(disableVsync(display)); 2465572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2466572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 2467572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 2468572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 2469572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2470572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 cannot enable a vsync for a bad display */ 2471572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED_bad_display) 2472572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 2473572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_display_t display; 2474572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_callback_data_t data = reinterpret_cast<hwc2_callback_data_t>( 2475572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall const_cast<char*>("data")); 2476572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 2477572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2478572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 2479572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2480572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_VSYNC, data, 2481572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall []() { return; })); 2482572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2483572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE, &err)); 2484572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 2485572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2486572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE, &err)); 2487572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 2488572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 2489572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2490572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 cannot enable an invalid vsync value */ 2491572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED_bad_parameter) 2492572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 2493572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall for (auto display : mDisplays) { 2494572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_callback_data_t data = reinterpret_cast<hwc2_callback_data_t>( 2495572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall const_cast<char*>("data")); 2496572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 2497572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2498572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 2499572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2500572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_VSYNC, data, 2501572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall []() { return; })); 2502572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2503572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_INVALID, 2504572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall &err)); 2505572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_PARAMETER) << "returned wrong error code"; 2506572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2507572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 2508572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 2509572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 2510572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2511572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 can enable and disable a vsync value multiple 2512572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall * times. */ 2513572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED_stress) 2514572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 2515572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall for (auto display : mDisplays) { 2516572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_callback_data_t data = reinterpret_cast<hwc2_callback_data_t>( 2517572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall const_cast<char*>("data")); 2518572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2519572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 2520572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2521572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_VSYNC, data, 2522572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall []() { return; })); 2523572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2524572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 2525572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2526572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE)); 2527572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE)); 2528572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2529572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 2530572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 2531572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2532572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 2533572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 2534572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 2535572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2536572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 can set a vsync enable value when the display 2537572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall * is off and no callback is registered. */ 2538572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED_no_callback_no_power) 2539572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 2540572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall const uint secs = 1; 2541572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2542572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall for (auto display : mDisplays) { 2543572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE)); 2544572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2545572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall sleep(secs); 2546572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2547572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 2548572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 2549572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 2550572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2551572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 can set a vsync enable value when no callback 2552572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall * is registered. */ 2553572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED_no_callback) 2554572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 2555572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall const uint secs = 1; 2556572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2557572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall for (auto display : mDisplays) { 2558572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 2559572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2560572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE)); 2561572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2562572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall sleep(secs); 2563572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2564572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 2565572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2566572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 2567572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 2568572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 2569dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 2570dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall/* TESTCASE: Tests that the HWC2 returns a display name for each display */ 2571dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa WallTEST_F(Hwc2Test, GET_DISPLAY_NAME) 2572dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall{ 2573dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall for (auto display : mDisplays) { 2574dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall std::string name; 2575dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 2576dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayName(display, &name)); 2577dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall } 2578dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall} 2579dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 2580dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall/* TESTCASE: Tests that the HWC2 does not return a display name for a bad 2581dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall * display */ 2582dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa WallTEST_F(Hwc2Test, GET_DISPLAY_NAME_bad_display) 2583dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall{ 2584dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall hwc2_display_t display; 2585dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall std::string name; 2586dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 2587dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 2588dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 2589dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 2590dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayName(display, &name, &err)); 2591dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 2592dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall} 25936bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 25946bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall/* TESTCASE: Tests that the HWC2 can set basic composition types. */ 25956bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa WallTEST_F(Hwc2Test, SET_LAYER_COMPOSITION_TYPE) 25966bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall{ 25976bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 25986bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall setComposition, advanceComposition)); 25996bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall} 26006bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 26016bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall/* TESTCASE: Tests that the HWC2 can update a basic composition type on a 26026bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * layer. */ 26036bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa WallTEST_F(Hwc2Test, SET_LAYER_COMPOSITION_TYPE_update) 26046bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall{ 26056bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 26066bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall setComposition, advanceComposition)); 26076bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall} 26086bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 26096bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set a composition type for a bad layer */ 26106bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa WallTEST_F(Hwc2Test, SET_LAYER_COMPOSITION_TYPE_bad_layer) 26116bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall{ 26126bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 26136bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall setComposition)); 26146bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall} 26156bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 26166bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set a bad composition type */ 26176bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa WallTEST_F(Hwc2Test, SET_LAYER_COMPOSITION_TYPE_bad_parameter) 26186bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall{ 26196bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadParameter( 26206bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 26216bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_error_t* outErr) { 26226bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 26236bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerCompositionType(display, 26246bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall layer, HWC2_COMPOSITION_INVALID, outErr)); 26256bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 26266bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall )); 26276bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall} 2628ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 26292a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall/* TESTCASE: Tests that the HWC2 can set the cursor position of a layer. */ 26302a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa WallTEST_F(Hwc2Test, SET_CURSOR_POSITION) 26312a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall{ 26322a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 26332a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ::setCursorPosition, advanceCursorPosition)); 26342a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall} 26352a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 26362a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall/* TESTCASE: Tests that the HWC2 can update the cursor position of a layer. */ 26372a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa WallTEST_F(Hwc2Test, SET_CURSOR_POSITION_update) 26382a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall{ 26392a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 26402a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ::setCursorPosition, advanceCursorPosition)); 26412a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall} 26422a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 26432a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall/* TESTCASE: Tests that the HWC2 can set the cursor position of a layer when the 26442a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall * composition type has not been set to HWC2_COMPOSITION_CURSOR. */ 26452a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa WallTEST_F(Hwc2Test, SET_CURSOR_POSITION_composition_type_unset) 26462a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall{ 26472a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 26482a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 26495a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) { 26502a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 26515a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall const hwc_rect_t cursorPosition = testLayer->getCursorPosition(); 26522a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setCursorPosition(display, layer, 26532a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall cursorPosition.left, cursorPosition.top, outErr)); 26542a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall }, 26552a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 26562a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall advanceCursorPosition)); 26572a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall} 26582a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 26592a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set the cursor position of a bad 26602a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall * display. */ 26612a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa WallTEST_F(Hwc2Test, SET_CURSOR_POSITION_bad_display) 26622a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall{ 26632a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall hwc2_display_t display; 26642a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall hwc2_layer_t layer = 0; 26652a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall int32_t x = 0, y = 0; 26662a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 26672a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 26682a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 26692a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 26702a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_NO_FATAL_FAILURE(setCursorPosition(display, layer, x, y, &err)); 26712a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 26722a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall} 26732a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 26742a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set the cursor position of a bad layer. */ 26752a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa WallTEST_F(Hwc2Test, SET_CURSOR_POSITION_bad_layer) 26762a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall{ 26772a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 26782a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t badLayer, 26795a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) { 26802a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 26815a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall const hwc_rect_t cursorPosition = testLayer->getCursorPosition(); 26822a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setCursorPosition(display, 26832a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall badLayer, cursorPosition.left, cursorPosition.top, 26842a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall outErr)); 26852a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall } 26862a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall )); 26872a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall} 26882a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 2689ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall/* TESTCASE: Tests that the HWC2 can set a blend mode value of a layer. */ 2690ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa WallTEST_F(Hwc2Test, SET_LAYER_BLEND_MODE) 2691ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall{ 2692ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 2693ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall setBlendMode, advanceBlendMode)); 2694ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall} 2695ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 2696ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall/* TESTCASE: Tests that the HWC2 can update a blend mode value of a layer. */ 2697ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa WallTEST_F(Hwc2Test, SET_LAYER_BLEND_MODE_update) 2698ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall{ 2699ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 2700ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall setBlendMode, advanceBlendMode)); 2701ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall} 2702ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 2703ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set a blend mode for a bad layer. */ 2704ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa WallTEST_F(Hwc2Test, SET_LAYER_BLEND_MODE_bad_layer) 2705ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall{ 2706ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 2707ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall setBlendMode)); 2708ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall} 2709ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 2710ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set an invalid blend mode. */ 2711ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa WallTEST_F(Hwc2Test, SET_LAYER_BLEND_MODE_bad_parameter) 2712ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall{ 2713ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadParameter( 2714ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 2715ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall hwc2_error_t* outErr) { 2716ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 2717ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerBlendMode(display, 2718ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall layer, HWC2_BLEND_MODE_INVALID, outErr)); 2719ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall } 2720ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall )); 2721ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall} 2722b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 27235a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall/* TESTCASE: Tests that the HWC2 can set the buffer of a layer. */ 27245a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa WallTEST_F(Hwc2Test, SET_LAYER_BUFFER) 27255a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall{ 27265a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 27275a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall setBuffer, advanceBuffer)); 27285a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall} 27295a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 27305a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall/* TESTCASE: Tests that the HWC2 can update the buffer of a layer. */ 27315a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa WallTEST_F(Hwc2Test, SET_LAYER_BUFFER_update) 27325a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall{ 27335a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 27345a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall setBuffer, advanceBuffer)); 27355a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall} 27365a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 27375a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set the buffer of a bad layer. */ 27385a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa WallTEST_F(Hwc2Test, SET_LAYER_BUFFER_bad_layer) 27395a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall{ 27405a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 27415a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t badLayer, 27425a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) { 27435a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 27445a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall buffer_handle_t handle = nullptr; 27455a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall android::base::unique_fd acquireFence; 27465a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 27475a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall /* If there is not available buffer for the given buffer 27485a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall * properties, it should not fail this test case */ 27495a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall if (testLayer->getBuffer(&handle, &acquireFence) == 0) { 27505a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall *outErr = HWC2_ERROR_BAD_LAYER; 27515a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall return; 27525a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall } 27535a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 27545a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerBuffer(display, badLayer, 27555a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall handle, acquireFence, outErr)); 27565a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall } 27575a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall )); 27585a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall} 27595a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 27605a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall/* TESTCASE: Tests that the HWC2 can set an invalid buffer for a layer. */ 27615a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa WallTEST_F(Hwc2Test, SET_LAYER_BUFFER_bad_parameter) 27625a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall{ 27635a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadParameter( 27645a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 27655a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall hwc2_error_t* outErr) { 27665a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 27675a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall buffer_handle_t handle = nullptr; 27685a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall int32_t acquireFence = -1; 27695a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 27705a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerBuffer(display, layer, 27715a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall handle, acquireFence, outErr)); 27725a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall } 27735a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall )); 27745a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall} 27755a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 2776ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall/* TESTCASE: Tests that the HWC2 can set the color of a layer. */ 2777ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa WallTEST_F(Hwc2Test, SET_LAYER_COLOR) 2778ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall{ 2779ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 2780ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall setColor, advanceColor)); 2781ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall} 2782ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 2783ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall/* TESTCASE: Tests that the HWC2 can update the color of a layer. */ 2784ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa WallTEST_F(Hwc2Test, SET_LAYER_COLOR_update) 2785ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall{ 2786ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 2787ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall setColor, advanceColor)); 2788ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall} 2789ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 2790ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall/* TESTCASE: Tests that the HWC2 can set the color of a layer when the 2791ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall * composition type has not been set to HWC2_COMPOSITION_SOLID_COLOR. */ 2792ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa WallTEST_F(Hwc2Test, SET_LAYER_COLOR_composition_type_unset) 2793ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall{ 2794ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Basic, 2795ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 27965a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) { 2797ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 2798ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerColor(display, layer, 27995a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getColor(), outErr)); 2800ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall }, 2801ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 2802ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall advanceColor)); 2803ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall} 2804ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 2805ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set the color of a bad layer. */ 2806ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa WallTEST_F(Hwc2Test, SET_LAYER_COLOR_bad_layer) 2807ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall{ 2808ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 2809ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t badLayer, 28105a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) { 2811ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 2812ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerColor(display, badLayer, 28135a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getColor(), outErr)); 2814ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall } 2815ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall )); 2816ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall} 2817ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 2818b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall/* TESTCASE: Tests that the HWC2 can set the dataspace of a layer. */ 2819b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa WallTEST_F(Hwc2Test, SET_LAYER_DATASPACE) 2820b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall{ 2821b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 2822b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall setDataspace, advanceDataspace)); 2823b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall} 2824b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 2825b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall/* TESTCASE: Tests that the HWC2 can update the dataspace of a layer. */ 2826b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa WallTEST_F(Hwc2Test, SET_LAYER_DATASPACE_update) 2827b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall{ 2828b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 2829b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall setDataspace, advanceDataspace)); 2830b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall} 2831b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 2832b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set a dataspace for a bad layer. */ 2833b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa WallTEST_F(Hwc2Test, SET_LAYER_DATASPACE_bad_layer) 2834b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall{ 2835b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 2836b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall setDataspace)); 2837b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall} 28382b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 2839600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall/* TESTCASE: Tests that the HWC2 can set the display frame of a layer. */ 2840600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa WallTEST_F(Hwc2Test, SET_LAYER_DISPLAY_FRAME) 2841600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall{ 2842600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 2843600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall setDisplayFrame, advanceDisplayFrame)); 2844600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall} 2845600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 2846600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall/* TESTCASE: Tests that the HWC2 can update the display frame of a layer. */ 2847600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa WallTEST_F(Hwc2Test, SET_LAYER_DISPLAY_FRAME_update) 2848600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall{ 2849600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 2850600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall setDisplayFrame, advanceDisplayFrame)); 2851600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall} 2852600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 2853600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set the display frame of a bad layer. */ 2854600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa WallTEST_F(Hwc2Test, SET_LAYER_DISPLAY_FRAME_bad_layer) 2855600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall{ 2856600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 2857600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall setDisplayFrame)); 2858600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall} 2859600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 28602b1f53060ea8587a428f826cf7890354ff124722Marissa Wall/* TESTCASE: Tests that the HWC2 can set the plane alpha of a layer. */ 28612b1f53060ea8587a428f826cf7890354ff124722Marissa WallTEST_F(Hwc2Test, SET_LAYER_PLANE_ALPHA) 28622b1f53060ea8587a428f826cf7890354ff124722Marissa Wall{ 28632b1f53060ea8587a428f826cf7890354ff124722Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 28642b1f53060ea8587a428f826cf7890354ff124722Marissa Wall setPlaneAlpha, advancePlaneAlpha)); 28652b1f53060ea8587a428f826cf7890354ff124722Marissa Wall} 28662b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 28672b1f53060ea8587a428f826cf7890354ff124722Marissa Wall/* TESTCASE: Tests that the HWC2 can update the plane alpha of a layer. */ 28682b1f53060ea8587a428f826cf7890354ff124722Marissa WallTEST_F(Hwc2Test, SET_LAYER_PLANE_ALPHA_update) 28692b1f53060ea8587a428f826cf7890354ff124722Marissa Wall{ 28702b1f53060ea8587a428f826cf7890354ff124722Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 28712b1f53060ea8587a428f826cf7890354ff124722Marissa Wall setPlaneAlpha, advancePlaneAlpha)); 28722b1f53060ea8587a428f826cf7890354ff124722Marissa Wall} 28732b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 28742b1f53060ea8587a428f826cf7890354ff124722Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set a plane alpha for a bad layer. */ 28752b1f53060ea8587a428f826cf7890354ff124722Marissa WallTEST_F(Hwc2Test, SET_LAYER_PLANE_ALPHA_bad_layer) 28762b1f53060ea8587a428f826cf7890354ff124722Marissa Wall{ 28772b1f53060ea8587a428f826cf7890354ff124722Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 28782b1f53060ea8587a428f826cf7890354ff124722Marissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t badLayer, 28795a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t *outErr) { 28802b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 28812b1f53060ea8587a428f826cf7890354ff124722Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerPlaneAlpha(display, 28825a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall badLayer, testLayer->getPlaneAlpha(), outErr)); 28832b1f53060ea8587a428f826cf7890354ff124722Marissa Wall } 28842b1f53060ea8587a428f826cf7890354ff124722Marissa Wall )); 28852b1f53060ea8587a428f826cf7890354ff124722Marissa Wall} 2886ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 2887c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall/* TESTCASE: Tests that the HWC2 can set the source crop of a layer. */ 2888c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa WallTEST_F(Hwc2Test, SET_LAYER_SOURCE_CROP) 2889c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall{ 2890c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 2891c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall setSourceCrop, advanceSourceCrop)); 2892c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall} 2893c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 2894c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall/* TESTCASE: Tests that the HWC2 can update the source crop of a layer. */ 2895c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa WallTEST_F(Hwc2Test, SET_LAYER_SOURCE_CROP_update) 2896c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall{ 2897c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 2898c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall setSourceCrop, advanceSourceCrop)); 2899c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall} 2900c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 2901c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set the source crop of a bad layer. */ 2902c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa WallTEST_F(Hwc2Test, SET_LAYER_SOURCE_CROP_bad_layer) 2903c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall{ 2904c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 2905c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall setSourceCrop)); 2906c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall} 2907c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 2908ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall/* TESTCASE: Tests that the HWC2 can set the surface damage of a layer. */ 2909ad761818a4426b4e6a0696ba90e05056aa35553cMarissa WallTEST_F(Hwc2Test, SET_LAYER_SURFACE_DAMAGE) 2910ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall{ 2911ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 2912ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall setSurfaceDamage, advanceSurfaceDamage)); 2913ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall} 2914ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 2915ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall/* TESTCASE: Tests that the HWC2 can update the surface damage of a layer. */ 2916ad761818a4426b4e6a0696ba90e05056aa35553cMarissa WallTEST_F(Hwc2Test, SET_LAYER_SURFACE_DAMAGE_update) 2917ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall{ 2918ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 2919ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall setSurfaceDamage, advanceSurfaceDamage)); 2920ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall} 2921ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 2922ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set the surface damage of a bad layer. */ 2923ad761818a4426b4e6a0696ba90e05056aa35553cMarissa WallTEST_F(Hwc2Test, SET_LAYER_SURFACE_DAMAGE_bad_layer) 2924ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall{ 2925ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 2926ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall setSurfaceDamage)); 2927ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall} 2928ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 2929ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall/* TESTCASE: Tests that the HWC2 can set the transform value of a layer. */ 2930ac10819373b1ed4901f26c822484a789a7ca4be0Marissa WallTEST_F(Hwc2Test, SET_LAYER_TRANSFORM) 2931ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall{ 2932ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 2933ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall setTransform, advanceTransform)); 2934ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall} 2935ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 2936ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall/* TESTCASE: Tests that the HWC2 can update the transform value of a layer. */ 2937ac10819373b1ed4901f26c822484a789a7ca4be0Marissa WallTEST_F(Hwc2Test, SET_LAYER_TRANSFORM_update) 2938ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall{ 2939ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 2940ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall setTransform, advanceTransform)); 2941ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall} 2942ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 2943ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set the transform for a bad layer. */ 2944ac10819373b1ed4901f26c822484a789a7ca4be0Marissa WallTEST_F(Hwc2Test, SET_LAYER_TRANSFORM_bad_layer) 2945ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall{ 2946ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 2947ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall setTransform)); 2948ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall} 2949273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 2950f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall/* TESTCASE: Tests that the HWC2 can set the visible region of a layer. */ 2951f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa WallTEST_F(Hwc2Test, SET_LAYER_VISIBLE_REGION) 2952f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall{ 2953f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperties(Hwc2TestCoverage::Basic, 5, 2954f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 2955f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall Hwc2TestLayers* testLayers) { 2956f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 2957f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerVisibleRegion(display, 2958f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall layer, testLayers->getVisibleRegion(layer))); 2959f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall }, 2960f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 2961f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall advanceVisibleRegions)); 2962f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall} 2963f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 2964f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set the visible region of a bad layer. */ 2965f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa WallTEST_F(Hwc2Test, SET_LAYER_VISIBLE_REGION_bad_layer) 2966f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall{ 2967f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 2968f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall setVisibleRegion)); 2969f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall} 2970f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 2971273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall/* TESTCASE: Tests that the HWC2 can set the z order of a layer. */ 2972273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa WallTEST_F(Hwc2Test, SET_LAYER_Z_ORDER) 2973273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall{ 2974273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperties(Hwc2TestCoverage::Complete, 10, 2975273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 29765a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayers* testLayers) { 2977273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 2978273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerZOrder(display, layer, 29795a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayers->getZOrder(layer))); 2980f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall }, 2981f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 2982f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall /* TestLayer z orders are set during the construction of TestLayers 2983f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall * and cannot be updated. There is no need (or ability) to cycle 2984f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall * through additional z order configurations. */ 2985f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall [] (Hwc2TestLayers* /*testLayers*/) { 2986f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall return false; 2987273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 2988273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall )); 2989273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall} 2990273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 2991273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall/* TESTCASE: Tests that the HWC2 can update the z order of a layer. */ 2992273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa WallTEST_F(Hwc2Test, SET_LAYER_Z_ORDER_update) 2993273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall{ 2994273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall const std::vector<uint32_t> zOrders = { static_cast<uint32_t>(0), 2995273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall static_cast<uint32_t>(1), static_cast<uint32_t>(UINT32_MAX / 4), 2996273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall static_cast<uint32_t>(UINT32_MAX / 2), 2997273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall static_cast<uint32_t>(UINT32_MAX) }; 2998273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 2999273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall for (auto display : mDisplays) { 3000273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall std::vector<hwc2_config_t> configs; 3001273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 3002273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 3003273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 3004273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall for (auto config : configs) { 3005273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall hwc2_layer_t layer; 3006273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 3007273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 3008273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 3009273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 3010273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 3011273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall for (uint32_t zOrder : zOrders) { 3012273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall EXPECT_NO_FATAL_FAILURE(setLayerZOrder(display, layer, zOrder)); 3013273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 3014273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 3015273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 3016273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 3017273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 3018273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall} 3019273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 3020273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set the z order of a bad layer. */ 3021273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa WallTEST_F(Hwc2Test, SET_LAYER_Z_ORDER_bad_layer) 3022273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall{ 3023273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 3024273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall setZOrder)); 3025273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall} 30261cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 30271cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall/* TESTCASE: Tests that the HWC2 can display a layer with basic property 30281cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall * coverage */ 30291cd789cd2b300427467586f4ec721a8123f118b7Marissa WallTEST_F(Hwc2Test, VALIDATE_DISPLAY_basic) 30301cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall{ 30311cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_NO_FATAL_FAILURE(displayLayers(Hwc2TestCoverage::Basic, 1, 30321cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall [] (Hwc2Test* test, hwc2_display_t display, 3033706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall const std::vector<hwc2_layer_t>& layers, 3034563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestLayers* /*testLayers*/) { 30351cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 30361cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall uint32_t numTypes, numRequests; 30371cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall bool hasChanges = false; 30381cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 30391cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(test->validateDisplay(display, &numTypes, 30401cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall &numRequests, &hasChanges)); 30411cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall if (hasChanges) 30421cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_LE(numTypes, static_cast<uint32_t>(layers.size())) 30431cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall << "wrong number of requests"; 30441cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } 30451cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall )); 30461cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall} 30471cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 30481cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall/* TESTCASE: Tests that the HWC2 can display 5 layers with default coverage. */ 30491cd789cd2b300427467586f4ec721a8123f118b7Marissa WallTEST_F(Hwc2Test, VALIDATE_DISPLAY_default_5) 30501cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall{ 30511cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_NO_FATAL_FAILURE(displayLayers(Hwc2TestCoverage::Default, 5, 30521cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall [] (Hwc2Test* test, hwc2_display_t display, 3053706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall const std::vector<hwc2_layer_t>& layers, 3054563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestLayers* /*testLayers*/) { 30551cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 30561cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall uint32_t numTypes, numRequests; 30571cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall bool hasChanges = false; 30581cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 30591cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(test->validateDisplay(display, &numTypes, 30601cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall &numRequests, &hasChanges)); 30611cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall if (hasChanges) 30621cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_LE(numTypes, static_cast<uint32_t>(layers.size())) 30631cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall << "wrong number of requests"; 30641cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } 30651cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall )); 30661cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall} 30671cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 30681cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall/* TESTCASE: Tests that the HWC2 cannot validate a bad display */ 30691cd789cd2b300427467586f4ec721a8123f118b7Marissa WallTEST_F(Hwc2Test, VALIDATE_DISPLAY_bad_display) 30701cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall{ 30711cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall hwc2_display_t display; 30721cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall uint32_t numTypes, numRequests; 30731cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 30741cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 30751cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 30761cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 30771cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_NO_FATAL_FAILURE(validateDisplay(display, &numTypes, &numRequests, 30781cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall &err)); 30791cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 30801cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall} 3081706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3082706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall/* TESTCASE: Tests that the HWC2 can get display requests after validating a 3083706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall * basic layer. */ 3084706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa WallTEST_F(Hwc2Test, GET_DISPLAY_REQUESTS_basic) 3085706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall{ 3086706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(displayLayers(Hwc2TestCoverage::Basic, 1, 3087706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, 3088706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall const std::vector<hwc2_layer_t>& layers, 3089563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestLayers* /*testLayers*/) { 3090706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3091706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall uint32_t numTypes, numRequests; 3092706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall bool hasChanges = false; 3093706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3094706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(test->validateDisplay(display, &numTypes, 3095706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall &numRequests, &hasChanges)); 3096706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall if (hasChanges) 3097706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_LE(numTypes, layers.size()) 3098706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << "wrong number of requests"; 3099706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3100706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_NO_FATAL_FAILURE(test->handleRequests(display, layers, 3101706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall numRequests)); 3102706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 3103706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall )); 3104706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall} 3105706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3106706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall/* TESTCASE: Tests that the HWC2 cannot get display requests from a bad display */ 3107706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa WallTEST_F(Hwc2Test, GET_DISPLAY_REQUESTS_bad_display) 3108706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall{ 3109706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_display_t display; 3110706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_display_request_t displayRequests; 3111706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_layer_t> layers; 3112706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_layer_request_t> layerRequests; 3113706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 3114706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3115706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 3116706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3117706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_NO_FATAL_FAILURE(getDisplayRequests(display, &displayRequests, 3118706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall &layers, &layerRequests, &err)); 3119706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 3120706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall} 3121706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3122706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall/* TESTCASE: Tests that the HWC2 cannot get display requests from an non 3123706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall * validated display. */ 3124706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa WallTEST_F(Hwc2Test, GET_DISPLAY_REQUESTS_not_validated) 3125706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall{ 3126706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(displayNonValidatedLayers(5, 3127706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, 3128706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_layer_t>* layers) { 3129706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3130706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_display_request_t displayRequests; 3131706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_layer_request_t> layerRequests; 3132706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 3133706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3134706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(test->getDisplayRequests(display, 3135706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall &displayRequests, layers, &layerRequests, &err)); 3136706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_EQ(err, HWC2_ERROR_NOT_VALIDATED) 3137706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << "returned wrong error code"; 3138706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 3139706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall )); 3140706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall} 3141706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3142706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall/* TESTCASE: Tests that the HWC2 can get changed composition types after 3143706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall * validating a basic layer. */ 3144706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa WallTEST_F(Hwc2Test, GET_CHANGED_COMPOSITION_TYPES_basic) 3145706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall{ 3146706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(displayLayers(Hwc2TestCoverage::Basic, 1, 3147706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, 3148706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall const std::vector<hwc2_layer_t>& layers, 3149563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestLayers* testLayers) { 3150706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3151706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall uint32_t numTypes, numRequests; 3152706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall bool hasChanges = false; 3153706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3154706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(test->validateDisplay(display, &numTypes, 3155706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall &numRequests, &hasChanges)); 3156706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall if (hasChanges) 3157706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_LE(numTypes, layers.size()) 3158706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << "wrong number of requests"; 3159706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3160706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_NO_FATAL_FAILURE(test->handleCompositionChanges(display, 3161563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall *testLayers, layers, numTypes)); 3162706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 3163706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall )); 3164706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall} 3165706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3166706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall/* TESTCASE: Tests that the HWC2 cannot get changed composition types from a bad 3167706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall * display */ 3168706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa WallTEST_F(Hwc2Test, GET_CHANGED_COMPOSITION_TYPES_bad_display) 3169706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall{ 3170706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_display_t display; 3171706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_layer_t> layers; 3172706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_composition_t> types; 3173706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 3174706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3175706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 3176706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3177706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_NO_FATAL_FAILURE(getChangedCompositionTypes(display, &layers, 3178706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall &types, &err)); 3179706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 3180706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall} 3181706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3182706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall/* TESTCASE: Tests that the HWC2 cannot get changed composition types from an non 3183706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall * validated display. */ 3184706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa WallTEST_F(Hwc2Test, GET_CHANGED_COMPOSITION_TYPES_not_validated) 3185706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall{ 3186706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(displayNonValidatedLayers(5, 3187706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, 3188706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_layer_t>* layers) { 3189706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3190706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_composition_t> types; 3191706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 3192706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3193706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(test->getChangedCompositionTypes( 3194706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall display, layers, &types, &err)); 3195706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_EQ(err, HWC2_ERROR_NOT_VALIDATED) 3196706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << "returned wrong error code"; 3197706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 3198706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall )); 3199706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall} 3200706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3201706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall/* TESTCASE: Tests that the HWC2 can accept display changes after validating a 3202706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall * basic layer. */ 3203706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa WallTEST_F(Hwc2Test, ACCEPT_DISPLAY_CHANGES_basic) 3204706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall{ 3205706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(displayLayers(Hwc2TestCoverage::Basic, 1, 3206706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, 3207706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall const std::vector<hwc2_layer_t>& layers, 3208563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestLayers* testLayers) { 3209706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3210706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall uint32_t numTypes, numRequests; 3211706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall bool hasChanges = false; 3212706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3213706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(test->validateDisplay(display, &numTypes, 3214706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall &numRequests, &hasChanges)); 3215706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall if (hasChanges) 3216706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_LE(numTypes, layers.size()) 3217706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << "wrong number of requests"; 3218706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3219706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(test->handleCompositionChanges(display, 3220563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall *testLayers, layers, numTypes)); 3221706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3222706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_NO_FATAL_FAILURE(test->acceptDisplayChanges(display)); 3223706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 3224706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall )); 3225706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall} 3226706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3227706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall/* TESTCASE: Tests that the HWC2 cannot accept display changes from a bad 3228706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall * display */ 3229706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa WallTEST_F(Hwc2Test, ACCEPT_DISPLAY_CHANGES_bad_display) 3230706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall{ 3231706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_display_t display; 3232706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 3233706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3234706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 3235706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3236706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_NO_FATAL_FAILURE(acceptDisplayChanges(display, &err)); 3237706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 3238706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall} 3239706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3240706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall/* TESTCASE: Tests that the HWC2 cannot accept display changes from an non 3241706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall * validated display. */ 3242706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa WallTEST_F(Hwc2Test, ACCEPT_DISPLAY_CHANGES_not_validated) 3243706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall{ 3244706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(displayNonValidatedLayers(5, 3245706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, 3246706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_layer_t>* /*layers*/) { 3247706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3248706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 3249706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3250706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(test->acceptDisplayChanges(display, &err)); 3251706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_EQ(err, HWC2_ERROR_NOT_VALIDATED) 3252706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << "returned wrong error code"; 3253706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 3254706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall )); 3255706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall} 3256f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3257f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall/* TESTCASE: Tests that the HWC2 supports client target with required values */ 3258f18cfb0a780c69f12439457ccc3f5272db767fddMarissa WallTEST_F(Hwc2Test, GET_CLIENT_TARGET_SUPPORT) 3259f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall{ 3260f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(setClientTargetSupport(Hwc2TestCoverage::Default, 3261f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, 3262f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const Hwc2TestClientTargetSupport& testClientTargetSupport) { 3263f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3264f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const Area bufferArea = testClientTargetSupport.getBufferArea(); 3265f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const android_pixel_format_t format = HAL_PIXEL_FORMAT_RGBA_8888; 3266f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3267f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(test->getClientTargetSupport(display, 3268f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall bufferArea.width, bufferArea.height, format, 3269f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall testClientTargetSupport.getDataspace())); 3270f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall }, 3271f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3272f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall advanceClientTargetSupport)); 3273f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall} 3274f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3275f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall/* TESTCASE: Tests that the HWC2 cannot get client target support for a bad 3276f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall * display. */ 3277f18cfb0a780c69f12439457ccc3f5272db767fddMarissa WallTEST_F(Hwc2Test, GET_CLIENT_TARGET_SUPPORT_bad_display) 3278f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall{ 3279f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(setClientTargetSupport(Hwc2TestCoverage::Default, 3280f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall [] (Hwc2Test* test, hwc2_display_t /*display*/, 3281f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const Hwc2TestClientTargetSupport& testClientTargetSupport) { 3282f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3283f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const Area bufferArea = testClientTargetSupport.getBufferArea(); 3284f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const android_pixel_format_t format = HAL_PIXEL_FORMAT_RGBA_8888; 3285f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall hwc2_display_t badDisplay; 3286f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 3287f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3288f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(test->getBadDisplay(&badDisplay)); 3289f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3290f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(test->getClientTargetSupport(badDisplay, 3291f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall bufferArea.width, bufferArea.height, format, 3292f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall testClientTargetSupport.getDataspace(), &err)); 3293f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 3294f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall }, 3295f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3296f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall advanceClientTargetSupport)); 3297f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall} 3298f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3299f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall/* TESTCASE: Tests that the HWC2 either supports or returns error unsupported 3300f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall * for a variety of client target values. */ 3301f18cfb0a780c69f12439457ccc3f5272db767fddMarissa WallTEST_F(Hwc2Test, GET_CLIENT_TARGET_SUPPORT_unsupported) 3302f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall{ 3303f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(setClientTargetSupport(Hwc2TestCoverage::Complete, 3304f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, 3305f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const Hwc2TestClientTargetSupport& testClientTargetSupport) { 3306f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3307f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const Area bufferArea = testClientTargetSupport.getBufferArea(); 3308f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const android_pixel_format_t format = HAL_PIXEL_FORMAT_RGBA_8888; 3309f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 3310f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3311f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(test->getClientTargetSupport(display, 3312f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall bufferArea.width, bufferArea.height, format, 3313f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall testClientTargetSupport.getDataspace(), &err)); 3314f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall EXPECT_TRUE(err == HWC2_ERROR_NONE 3315f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall || err == HWC2_ERROR_UNSUPPORTED) 3316f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall << "returned wrong error code"; 3317f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall }, 3318f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3319f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall advanceClientTargetSupport)); 3320f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall} 3321f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3322f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall/* TESTCASE: Tests that the HWC2 can set a client target buffer for a basic 3323f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall * layer. */ 3324f18cfb0a780c69f12439457ccc3f5272db767fddMarissa WallTEST_F(Hwc2Test, SET_CLIENT_TARGET_basic) 3325f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall{ 3326f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const android_dataspace_t dataspace = HAL_DATASPACE_UNKNOWN; 3327f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const hwc_region_t damage = { }; 3328f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const size_t layerCnt = 1; 3329f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3330f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall for (auto display : mDisplays) { 3331f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall std::vector<hwc2_config_t> configs; 3332f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3333f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 3334f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3335f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 3336f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3337f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall for (auto config : configs) { 3338f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall Area displayArea; 3339f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall std::vector<hwc2_layer_t> layers; 3340f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3341f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 3342f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(getActiveDisplayArea(display, &displayArea)); 3343f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3344f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayers(display, &layers, layerCnt)); 3345f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall Hwc2TestLayers testLayers(layers, Hwc2TestCoverage::Basic, 3346f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall displayArea); 3347f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3348f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall if (!testLayers.optimizeLayouts()) 3349f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall continue; 3350f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3351f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall Hwc2TestClientTarget testClientTarget; 3352f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3353f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall do { 3354f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall std::set<hwc2_layer_t> clientLayers; 3355f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall std::set<hwc2_layer_t> clearLayers; 3356f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall uint32_t numTypes, numRequests; 3357f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall bool hasChanges, skip; 3358f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall bool flipClientTarget; 3359f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall buffer_handle_t handle; 3360f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall int32_t acquireFence; 3361f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3362f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperties(display, layers, 3363f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall &testLayers, &skip)); 3364f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall if (skip) 3365f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall continue; 3366f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3367f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(validateDisplay(display, &numTypes, 3368f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall &numRequests, &hasChanges)); 3369f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall if (hasChanges) 3370f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall EXPECT_LE(numTypes, layers.size()) 3371f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall << "wrong number of requests"; 3372f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3373f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(handleCompositionChanges(display, 3374f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall testLayers, layers, numTypes, &clientLayers)); 3375f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(handleRequests(display, layers, 3376f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall numRequests, &clearLayers, &flipClientTarget)); 3377f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_EQ(testClientTarget.getBuffer(testLayers, clientLayers, 3378f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall clearLayers, flipClientTarget, displayArea, &handle, 3379f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall &acquireFence), 0); 3380f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall EXPECT_NO_FATAL_FAILURE(setClientTarget(display, handle, 3381f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall acquireFence, dataspace, damage)); 3382f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3383f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall if (acquireFence >= 0) 3384f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall close(acquireFence); 3385f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3386f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } while (testLayers.advance()); 3387f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3388f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayers(display, std::move(layers))); 3389f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } 3390f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3391f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 3392f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } 3393f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall} 3394f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3395f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set a client target for a bad display. */ 3396f18cfb0a780c69f12439457ccc3f5272db767fddMarissa WallTEST_F(Hwc2Test, SET_CLIENT_TARGET_bad_display) 3397f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall{ 3398f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall hwc2_display_t display; 3399f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall std::vector<hwc2_layer_t> layers; 3400f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const Area displayArea = {0, 0}; 3401f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall Hwc2TestLayers testLayers(layers, Hwc2TestCoverage::Default, displayArea); 3402f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall std::set<hwc2_layer_t> clientLayers; 3403f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall std::set<hwc2_layer_t> flipClientTargetLayers; 3404f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall bool flipClientTarget = true; 3405f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const android_dataspace_t dataspace = HAL_DATASPACE_UNKNOWN; 3406f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const hwc_region_t damage = { }; 3407f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall buffer_handle_t handle; 3408f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall int32_t acquireFence; 3409f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 3410f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3411f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 3412f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3413f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall Hwc2TestClientTarget testClientTarget; 3414f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3415f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_EQ(testClientTarget.getBuffer(testLayers, clientLayers, 3416f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall flipClientTargetLayers, flipClientTarget, displayArea, &handle, 3417f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall &acquireFence), 0); 3418f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3419f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall EXPECT_NO_FATAL_FAILURE(setClientTarget(display, handle, acquireFence, 3420f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall dataspace, damage, &err)); 3421f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3422f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall if (acquireFence >= 0) 3423f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall close(acquireFence); 3424f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3425f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 3426f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall} 3427563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3428563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 1 default layer. */ 3429563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_default_1) 3430563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3431563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 1; 3432563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3433563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions; 3434563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = false; 3435563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3436563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3437563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3438563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3439563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3440563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 2 default layers. */ 3441563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_default_2) 3442563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3443563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 2; 3444563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3445563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions; 3446563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = false; 3447563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3448563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3449563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3450563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3451563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3452563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 3 default layers. */ 3453563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_default_3) 3454563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3455563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 3; 3456563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3457563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions; 3458563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = false; 3459563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3460563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3461563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3462563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3463563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3464563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 4 default layers. */ 3465563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_default_4) 3466563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3467563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 4; 3468563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3469563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions; 3470563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = false; 3471563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3472563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3473563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3474563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3475563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3476563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 5 default layers. */ 3477563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_default_5) 3478563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3479563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 5; 3480563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3481563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions; 3482563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = false; 3483563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3484563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3485563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3486563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3487563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3488563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 6 default layers. */ 3489563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_default_6) 3490563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3491563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 6; 3492563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3493563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions; 3494563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = false; 3495563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3496563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3497563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3498563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3499563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3500563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 1 layer with complete coverage of 3501563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * blend mode. */ 3502563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_blend_mode_1) 3503563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3504563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 1; 3505563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3506563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions = 3507563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {{Hwc2TestPropertyName::BlendMode, Hwc2TestCoverage::Complete}, 3508563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {Hwc2TestPropertyName::Transform, Hwc2TestCoverage::Basic}, 3509563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {Hwc2TestPropertyName::PlaneAlpha, Hwc2TestCoverage::Basic}}; 3510563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = false; 3511563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3512563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3513563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3514563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3515563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3516563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 2 layers with complete coverage of 3517563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * blend mode. */ 3518563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_blend_mode_2) 3519563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3520563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 2; 3521563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3522563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions = 3523563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {{Hwc2TestPropertyName::BlendMode, Hwc2TestCoverage::Complete}, 3524563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {Hwc2TestPropertyName::PlaneAlpha, Hwc2TestCoverage::Basic}}; 3525563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = false; 3526563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3527563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3528563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3529563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3530563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3531563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 1 layer with complete coverage of 3532563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * buffer. */ 3533563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_buffer_1) 3534563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3535563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 1; 3536563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3537563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions = 3538563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {{Hwc2TestPropertyName::BufferArea, Hwc2TestCoverage::Complete}}; 3539563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = true; 3540563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3541563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3542563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3543563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3544563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3545563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 1 layer with complete coverage of 3546563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * color. */ 3547563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_color_1) 3548563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3549563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 1; 3550563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3551563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions = 3552563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {{Hwc2TestPropertyName::Composition, Hwc2TestCoverage::Complete}, 3553563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {Hwc2TestPropertyName::Color, Hwc2TestCoverage::Complete}}; 3554563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = true; 3555563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3556563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3557563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3558563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3559563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3560563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 2 layers with complete coverage of 3561563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * color. */ 3562563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_color_2) 3563563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3564563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 2; 3565563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3566563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions = 3567563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {{Hwc2TestPropertyName::Composition, Hwc2TestCoverage::Complete}, 3568563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {Hwc2TestPropertyName::BlendMode, Hwc2TestCoverage::Basic}, 3569563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {Hwc2TestPropertyName::PlaneAlpha, Hwc2TestCoverage::Basic}, 3570563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {Hwc2TestPropertyName::Color, Hwc2TestCoverage::Basic}}; 3571563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = true; 3572563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3573563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3574563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3575563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3576563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3577563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 1 layer with complete coverage of 3578563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * composition. */ 3579563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_composition_1) 3580563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3581563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 1; 3582563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3583563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions = 3584563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {{Hwc2TestPropertyName::Composition, Hwc2TestCoverage::Complete}}; 3585563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = true; 3586563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3587563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3588563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3589563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3590563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3591563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 1 layer with complete coverage of 3592563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * cursor. */ 3593563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_cursor_1) 3594563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3595563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 1; 3596563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3597563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions = 3598563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {{Hwc2TestPropertyName::Composition, Hwc2TestCoverage::Complete}, 3599563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {Hwc2TestPropertyName::CursorPosition, Hwc2TestCoverage::Complete}}; 3600563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = true; 3601563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3602563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3603563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3604563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3605563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3606563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 2 layers with complete coverage of 3607563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * cursor. */ 3608563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_cursor_2) 3609563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3610563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 2; 3611563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3612563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions = 3613563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {{Hwc2TestPropertyName::Composition, Hwc2TestCoverage::Complete}, 3614563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {Hwc2TestPropertyName::CursorPosition, Hwc2TestCoverage::Complete}, 3615563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {Hwc2TestPropertyName::DisplayFrame, Hwc2TestCoverage::Basic}}; 3616563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = true; 3617563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3618563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3619563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3620563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3621563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3622563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 1 layer with complete coverage of 3623563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * dataspace. */ 3624563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_dataspace_1) 3625563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3626563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 1; 3627563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3628563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions = 3629563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {{Hwc2TestPropertyName::Dataspace, Hwc2TestCoverage::Complete}}; 3630563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = true; 3631563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3632563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3633563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3634563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3635563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3636563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 1 layer with complete coverage of 3637563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * display frame. */ 3638563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_display_frame_1) 3639563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3640563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 1; 3641563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3642563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions = 3643563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {{Hwc2TestPropertyName::DisplayFrame, Hwc2TestCoverage::Complete}}; 3644563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = true; 3645563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3646563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3647563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3648563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3649563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3650563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 2 layers with complete coverage of 3651563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * display frame. */ 3652563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_display_frame_2) 3653563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3654563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 2; 3655563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3656563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions = 3657563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {{Hwc2TestPropertyName::DisplayFrame, Hwc2TestCoverage::Complete}}; 3658563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = true; 3659563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3660563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3661563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3662563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3663563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3664563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 3 layers with complete coverage of 3665563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * display frame. */ 3666563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_display_frame_3) 3667563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3668563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 3; 3669563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3670563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions = 3671563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {{Hwc2TestPropertyName::DisplayFrame, Hwc2TestCoverage::Complete}}; 3672563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = true; 3673563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3674563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3675563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3676563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3677563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3678563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 4 layers with complete coverage of 3679563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * display frame. */ 3680563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_display_frame_4) 3681563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3682563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 4; 3683563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3684563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions = 3685563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {{Hwc2TestPropertyName::DisplayFrame, Hwc2TestCoverage::Complete}}; 3686563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = true; 3687563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3688563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3689563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3690563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3691563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3692563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 1 layer with complete coverage of 3693563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * plane alpha. */ 3694563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_plane_alpha_1) 3695563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3696563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 1; 3697563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3698563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions = 3699563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {{Hwc2TestPropertyName::BlendMode, Hwc2TestCoverage::Basic}, 3700563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {Hwc2TestPropertyName::PlaneAlpha, Hwc2TestCoverage::Complete}}; 3701563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = false; 3702563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3703563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3704563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3705563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3706563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3707563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 2 layers with complete coverage of 3708563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * plane alpha. */ 3709563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_plane_alpha_2) 3710563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3711563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 2; 3712563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3713563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions = 3714563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {{Hwc2TestPropertyName::BlendMode, Hwc2TestCoverage::Basic}, 3715563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {Hwc2TestPropertyName::PlaneAlpha, Hwc2TestCoverage::Complete}}; 3716563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = false; 3717563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3718563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3719563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3720563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3721563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3722563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 1 layer with complete coverage of 3723563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * source crop. */ 3724563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_source_crop_1) 3725563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3726563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 1; 3727563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3728563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions = 3729563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {{Hwc2TestPropertyName::DisplayFrame, Hwc2TestCoverage::Complete}, 3730563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {Hwc2TestPropertyName::SourceCrop, Hwc2TestCoverage::Complete}}; 3731563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = true; 3732563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3733563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3734563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3735563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3736563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3737563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 2 layers with complete coverage of 3738563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * source crop. */ 3739563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_source_crop_2) 3740563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3741563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 2; 3742563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3743563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions = 3744563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {{Hwc2TestPropertyName::DisplayFrame, Hwc2TestCoverage::Complete}, 3745563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {Hwc2TestPropertyName::SourceCrop, Hwc2TestCoverage::Complete}}; 3746563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = true; 3747563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3748563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3749563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3750563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3751563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3752563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3753563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 1 layer with complete coverage of 3754563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * surface damage. */ 3755563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_surface_damage_1) 3756563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3757563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 1; 3758563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3759563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions = 3760563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {{Hwc2TestPropertyName::SurfaceDamage, Hwc2TestCoverage::Complete}}; 3761563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = true; 3762563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3763563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3764563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3765563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3766563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3767563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 1 layer with complete coverage of 3768563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * transform. */ 3769563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_transform_1) 3770563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3771563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 1; 3772563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3773563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions = 3774563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {{Hwc2TestPropertyName::Transform, Hwc2TestCoverage::Complete}}; 3775563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = true; 3776563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3777563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3778563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3779563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3780563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3781563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 2 layers with complete coverage of 3782563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * transform. */ 3783563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_transform_2) 3784563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3785563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 2; 3786563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Default; 3787563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions = 3788563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {{Hwc2TestPropertyName::Transform, Hwc2TestCoverage::Complete}, 3789563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall {Hwc2TestPropertyName::DisplayFrame, Hwc2TestCoverage::Basic}}; 3790563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = true; 3791563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3792563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3793563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3794563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3795563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3796563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 can present 1 layer with complete coverage of 3797563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall * basic. */ 3798563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_basic_1) 3799563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3800563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const size_t layerCnt = 1; 3801563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestCoverage coverage = Hwc2TestCoverage::Basic; 3802563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::unordered_map<Hwc2TestPropertyName, Hwc2TestCoverage> exceptions; 3803563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall bool optimize = true; 3804563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3805563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplays(layerCnt, coverage, exceptions, 3806563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall optimize)); 3807563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3808563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3809563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 cannot present a bad display. */ 3810563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_bad_display) 3811563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3812563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall hwc2_display_t display; 3813563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall int32_t presentFence; 3814563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 3815563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3816563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 3817563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3818563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(presentDisplay(display, &presentFence, &err)); 3819563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 3820563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3821563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3822563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 cannot present an unvalidated display. */ 3823563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, PRESENT_DISPLAY_not_validated) 3824563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3825563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(displayLayers(Hwc2TestCoverage::Default, 1, 3826563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, 3827563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall const std::vector<hwc2_layer_t>& /*layers*/, 3828563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall Hwc2TestLayers* /*testLayers*/) { 3829563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3830563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall int32_t presentFence; 3831563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 3832563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3833563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setPowerMode(display, 3834563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall HWC2_POWER_MODE_ON)); 3835563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(test->enableVsync(display)); 3836563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3837563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(test->waitForVsync()); 3838563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3839563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(test->presentDisplay(display, 3840563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall &presentFence, &err)); 3841563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall EXPECT_EQ(err, HWC2_ERROR_NOT_VALIDATED) 3842563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall << "returned wrong error code"; 3843563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3844563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(test->disableVsync(display)); 3845563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setPowerMode(display, 3846563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall HWC2_POWER_MODE_OFF)); 3847563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall } 3848563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall )); 3849563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3850563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3851563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall/* TESTCASE: Tests that the HWC2 cannot get release fences from a bad display. */ 3852563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa WallTEST_F(Hwc2Test, GET_RELEASE_FENCES_bad_display) 3853563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall{ 3854563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall hwc2_display_t display; 3855563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::vector<hwc2_layer_t> layers; 3856563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall std::vector<int32_t> fences; 3857563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 3858563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3859563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 3860563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall 3861563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall ASSERT_NO_FATAL_FAILURE(getReleaseFences(display, &layers, &fences, &err)); 3862563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 3863563030b4402f4b9aa08cece732f2a4a756a0f72cMarissa Wall} 3864