Hwc2Test.cpp revision f18cfb0a780c69f12439457ccc3f5272db767fdd
14d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall/* 24d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * Copyright (C) 2016 The Android Open Source Project 34d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * 44d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * Licensed under the Apache License, Version 2.0 (the "License"); 54d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * you may not use this file except in compliance with the License. 64d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * You may obtain a copy of the License at 74d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * 84d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * http://www.apache.org/licenses/LICENSE-2.0 94d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * 104d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * Unless required by applicable law or agreed to in writing, software 114d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * distributed under the License is distributed on an "AS IS" BASIS, 124d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * See the License for the specific language governing permissions and 144d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * limitations under the License. 154d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall */ 164d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 174d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall#include <array> 18cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall#include <unordered_set> 194d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall#include <gtest/gtest.h> 204d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall#include <dlfcn.h> 215a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall#include <android-base/unique_fd.h> 224d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall#include <hardware/hardware.h> 234d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 244d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall#define HWC2_INCLUDE_STRINGIFICATION 254d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall#define HWC2_USE_CPP11 264d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall#include <hardware/hwcomposer2.h> 274d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall#undef HWC2_INCLUDE_STRINGIFICATION 284d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall#undef HWC2_USE_CPP11 294d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 306bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall#include "Hwc2TestLayer.h" 31273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall#include "Hwc2TestLayers.h" 32f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall#include "Hwc2TestClientTarget.h" 336bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 34cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wallvoid hwc2TestHotplugCallback(hwc2_callback_data_t callbackData, 35cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2_display_t display, int32_t connected); 36572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wallvoid hwc2TestVsyncCallback(hwc2_callback_data_t callbackData, 37572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_display_t display, int64_t timestamp); 38cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 394d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wallclass Hwc2Test : public testing::Test { 404d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wallpublic: 414d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 424d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall virtual void SetUp() 434d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall { 444d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall hw_module_t const* hwc2Module; 454d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 464d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall int err = hw_get_module(HWC_HARDWARE_MODULE_ID, &hwc2Module); 474d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall ASSERT_GE(err, 0) << "failed to get hwc hardware module: " 484d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall << strerror(-err); 494d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 504d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall /* The following method will fail if you have not run 514d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * "adb shell stop" */ 524d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall err = hwc2_open(hwc2Module, &mHwc2Device); 534d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall ASSERT_GE(err, 0) << "failed to open hwc hardware module: " 544d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall << strerror(-err); 55cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 56cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall populateDisplays(); 574d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall } 584d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 594d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall virtual void TearDown() 604d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall { 611db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 621db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (auto itr = mLayers.begin(); itr != mLayers.end();) { 631db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_display_t display = itr->first; 641db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_layer_t layer = itr->second; 651db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall itr++; 661db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall /* Destroys and removes the layer from mLayers */ 671db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall destroyLayer(display, layer); 681db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 691db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 7003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall for (auto itr = mActiveDisplays.begin(); itr != mActiveDisplays.end();) { 7103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_display_t display = *itr; 7203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall itr++; 7303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall /* Sets power mode to off and removes the display from 7403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall * mActiveDisplays */ 7503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall setPowerMode(display, HWC2_POWER_MODE_OFF); 7603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 7703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 784d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall if (mHwc2Device) 794d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall hwc2_close(mHwc2Device); 804d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall } 814d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 82a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall void registerCallback(hwc2_callback_descriptor_t descriptor, 83a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall hwc2_callback_data_t callbackData, hwc2_function_pointer_t pointer, 84a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall hwc2_error_t* outErr = nullptr) 85a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall { 86a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_REGISTER_CALLBACK>( 87a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall getFunction(HWC2_FUNCTION_REGISTER_CALLBACK)); 88a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 89a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 90a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, descriptor, 91a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall callbackData, pointer)); 92a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall if (outErr) { 93a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall *outErr = err; 94a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall } else { 95a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to register callback"; 96a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall } 97a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall } 98a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 99cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall void getDisplayType(hwc2_display_t display, hwc2_display_type_t* outType, 100cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2_error_t* outErr = nullptr) 101cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall { 102cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_GET_DISPLAY_TYPE>( 103cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall getFunction(HWC2_FUNCTION_GET_DISPLAY_TYPE)); 104cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 105cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 106cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 107cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall reinterpret_cast<int32_t*>(outType))); 108cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall if (outErr) { 109cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall *outErr = err; 110cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } else { 111cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to get display type"; 112cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 113cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 114cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 115cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall /* If the populateDisplays function is still receiving displays and the 116cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall * display is connected, the display handle is stored in mDisplays. */ 117cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall void hotplugCallback(hwc2_display_t display, int32_t connected) 118cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall { 119cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::lock_guard<std::mutex> lock(mHotplugMutex); 120cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 121cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall if (mHotplugStatus != Hwc2TestHotplugStatus::Receiving) 122cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall return; 123cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 124cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall if (connected == HWC2_CONNECTION_CONNECTED) 125cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall mDisplays.insert(display); 126cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 127cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall mHotplugCv.notify_all(); 128cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 129cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1301db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall void createLayer(hwc2_display_t display, hwc2_layer_t* outLayer, 1311db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_error_t* outErr = nullptr) 1321db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall { 1331db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_CREATE_LAYER>( 1341db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall getFunction(HWC2_FUNCTION_CREATE_LAYER)); 1351db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 1361db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 1371db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 1381db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall outLayer)); 1391db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 1401db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall if (err == HWC2_ERROR_NONE) 1411db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall mLayers.insert(std::make_pair(display, *outLayer)); 1421db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 1431db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall if (outErr) { 1441db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall *outErr = err; 1451db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } else { 1461db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to create layer"; 1471db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 1481db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 1491db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 1501db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall void destroyLayer(hwc2_display_t display, hwc2_layer_t layer, 1511db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_error_t* outErr = nullptr) 1521db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall { 1531db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_DESTROY_LAYER>( 1541db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall getFunction(HWC2_FUNCTION_DESTROY_LAYER)); 1551db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 1561db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 1571db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer)); 1581db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 1591db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall if (err == HWC2_ERROR_NONE) 1601db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall mLayers.erase(std::make_pair(display, layer)); 1611db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 1621db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall if (outErr) { 1631db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall *outErr = err; 1641db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } else { 1651db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to destroy layer " 1661db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall << layer; 1671db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 1681db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 1691db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 170cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall void getDisplayAttribute(hwc2_display_t display, hwc2_config_t config, 171cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_attribute_t attribute, int32_t* outValue, 172cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_error_t* outErr = nullptr) 173cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall { 174cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_GET_DISPLAY_ATTRIBUTE>( 175cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall getFunction(HWC2_FUNCTION_GET_DISPLAY_ATTRIBUTE)); 176cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 177cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 178cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, config, 179cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall attribute, outValue)); 180cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 181cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall if (outErr) { 182cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall *outErr = err; 183cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } else { 184cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to get display attribute " 185cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall << getAttributeName(attribute) << " for config " << config; 186cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 187cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 188cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 189cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall void getDisplayConfigs(hwc2_display_t display, 190cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t>* outConfigs, 191cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_error_t* outErr = nullptr) 192cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall { 193cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_GET_DISPLAY_CONFIGS>( 194cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall getFunction(HWC2_FUNCTION_GET_DISPLAY_CONFIGS)); 195cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 196cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 197cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall uint32_t numConfigs = 0; 198cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 199cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 200cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall &numConfigs, nullptr)); 201cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 202cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall if (err == HWC2_ERROR_NONE) { 203cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall outConfigs->resize(numConfigs); 204cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 205cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 206cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall &numConfigs, outConfigs->data())); 207cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 208cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 209cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall if (outErr) { 210cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall *outErr = err; 211cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } else { 212cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to get configs for" 213cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall " display " << display; 214cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 215cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 216cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 21793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall void getActiveConfig(hwc2_display_t display, hwc2_config_t* outConfig, 21893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_error_t* outErr = nullptr) 21993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall { 22093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_GET_ACTIVE_CONFIG>( 22193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall getFunction(HWC2_FUNCTION_GET_ACTIVE_CONFIG)); 22293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 22393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 22493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 22593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall outConfig)); 22693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall if (outErr) { 22793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall *outErr = err; 22893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } else { 22993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to get active config on" 23093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall " display " << display; 23193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 23293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 23393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 23493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall void setActiveConfig(hwc2_display_t display, hwc2_config_t config, 23593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_error_t* outErr = nullptr) 23693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall { 23793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_ACTIVE_CONFIG>( 23893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall getFunction(HWC2_FUNCTION_SET_ACTIVE_CONFIG)); 23993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 24093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 24193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, config)); 24293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall if (outErr) { 24393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall *outErr = err; 24493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } else { 24593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set active config " 24693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall << config; 24793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 24893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 24993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 25003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall void getDozeSupport(hwc2_display_t display, int32_t* outSupport, 25103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_error_t* outErr = nullptr) 25203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall { 25303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_GET_DOZE_SUPPORT>( 25403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall getFunction(HWC2_FUNCTION_GET_DOZE_SUPPORT)); 25503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 25603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 25703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 25803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall outSupport)); 25903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (outErr) { 26003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall *outErr = err; 26103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } else { 26203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to get doze support on" 26303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall " display " << display; 26403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 26503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 26603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 26703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall void setPowerMode(hwc2_display_t display, hwc2_power_mode_t mode, 26803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_error_t* outErr = nullptr) 26903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall { 27003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_POWER_MODE>( 27103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall getFunction(HWC2_FUNCTION_SET_POWER_MODE)); 27203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 27303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 27403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 27503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall mode)); 27603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (outErr) { 27703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall *outErr = err; 27803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (err != HWC2_ERROR_NONE) 27903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall return; 28003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } else { 28103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set power mode " 28203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall << getPowerModeName(mode) << " on display " << display; 28303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 28403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 28503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (mode == HWC2_POWER_MODE_OFF) { 28603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall mActiveDisplays.erase(display); 28703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } else { 28803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall mActiveDisplays.insert(display); 28903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 29003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 29103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 292572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall void setVsyncEnabled(hwc2_display_t display, hwc2_vsync_t enabled, 293572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_error_t* outErr = nullptr) 294572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall { 295572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_VSYNC_ENABLED>( 296572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall getFunction(HWC2_FUNCTION_SET_VSYNC_ENABLED)); 297572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 298572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 299572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 300572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall enabled)); 301572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall if (outErr) { 302572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall *outErr = err; 303572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } else { 304572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set vsync enabled " 305572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall << getVsyncName(enabled); 306572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 307572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 308572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 309572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall void vsyncCallback(hwc2_display_t display, int64_t timestamp) 310572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall { 311572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall std::lock_guard<std::mutex> lock(mVsyncMutex); 312572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall mVsyncDisplay = display; 313572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall mVsyncTimestamp = timestamp; 314572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall mVsyncCv.notify_all(); 315572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 316572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 317dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall void getDisplayName(hwc2_display_t display, std::string* outName, 318dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall hwc2_error_t* outErr = nullptr) 319dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall { 320dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_GET_DISPLAY_NAME>( 321dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall getFunction(HWC2_FUNCTION_GET_DISPLAY_NAME)); 322dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 323dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 324dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall uint32_t size = 0; 325dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 326dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, &size, 327dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall nullptr)); 328dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 329dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall if (err == HWC2_ERROR_NONE) { 330dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall std::vector<char> name(size); 331dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 332dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, &size, 333dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall name.data())); 334dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 335dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall outName->assign(name.data()); 336dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall } 337dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 338dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall if (outErr) { 339dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall *outErr = err; 340dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall } else { 341dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to get display name for " 342dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall << display; 343dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall } 344dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall } 345dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 3466bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall void setLayerCompositionType(hwc2_display_t display, hwc2_layer_t layer, 3476bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_composition_t composition, hwc2_error_t* outErr = nullptr) 3486bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall { 3496bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_COMPOSITION_TYPE>( 3506bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_COMPOSITION_TYPE)); 3516bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 3526bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 3536bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 3546bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall composition)); 3556bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall if (outErr) { 3566bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall *outErr = err; 3576bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } else { 3586bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer composition" 3596bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall " type " << getCompositionName(composition); 3606bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 3616bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 3626bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 3632a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall void setCursorPosition(hwc2_display_t display, hwc2_layer_t layer, 3642a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall int32_t x, int32_t y, hwc2_error_t* outErr = nullptr) 3652a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall { 3662a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_CURSOR_POSITION>( 3672a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall getFunction(HWC2_FUNCTION_SET_CURSOR_POSITION)); 3682a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 3692a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 3702a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, x, 3712a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall y)); 3722a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall if (outErr) { 3732a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall *outErr = err; 3742a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall } else { 3752a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set cursor position"; 3762a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall } 3772a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall } 3782a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 379ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall void setLayerBlendMode(hwc2_display_t display, hwc2_layer_t layer, 380ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall hwc2_blend_mode_t mode, hwc2_error_t* outErr = nullptr) 381ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall { 382ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_BLEND_MODE>( 383ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_BLEND_MODE)); 384ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 385ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 386ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 387ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall mode)); 388ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall if (outErr) { 389ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall *outErr = err; 390ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall } else { 391ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer blend mode " 392ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall << getBlendModeName(mode); 393ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall } 394ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall } 395ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 3965a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall void setLayerBuffer(hwc2_display_t display, hwc2_layer_t layer, 3975a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall buffer_handle_t buffer, int32_t acquireFence, 3985a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall hwc2_error_t* outErr = nullptr) 3995a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall { 4005a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_BUFFER>( 4015a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_BUFFER)); 4025a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 4035a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 4045a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 4055a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall buffer, acquireFence)); 4065a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall if (outErr) { 4075a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall *outErr = err; 4085a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall } else { 4095a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer buffer"; 4105a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall } 4115a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall } 4125a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 413ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall void setLayerColor(hwc2_display_t display, hwc2_layer_t layer, 414ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall hwc_color_t color, hwc2_error_t* outErr = nullptr) 415ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall { 416ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_COLOR>( 417ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_COLOR)); 418ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 419ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 420ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 421ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall color)); 422ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall if (outErr) { 423ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall *outErr = err; 424ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall } else { 425ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer color"; 426ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall } 427ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall } 428ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 429b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall void setLayerDataspace(hwc2_display_t display, hwc2_layer_t layer, 430b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall android_dataspace_t dataspace, hwc2_error_t* outErr = nullptr) 431b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall { 432b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_DATASPACE>( 433b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_DATASPACE)); 434b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 435b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 436b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 437b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall layer, dataspace)); 438b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall if (outErr) { 439b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall *outErr = err; 440b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall } else { 441b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer dataspace"; 442b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall } 443b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall } 444b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 445600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall void setLayerDisplayFrame(hwc2_display_t display, hwc2_layer_t layer, 446600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall const hwc_rect_t& displayFrame, hwc2_error_t* outErr = nullptr) 447600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall { 448600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_DISPLAY_FRAME>( 449600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_DISPLAY_FRAME)); 450600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 451600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 452600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 453600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall displayFrame)); 454600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall if (outErr) { 455600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall *outErr = err; 456600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall } else { 457600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer display" 458600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall " frame"; 459600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall } 460600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall } 461600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 4622b1f53060ea8587a428f826cf7890354ff124722Marissa Wall void setLayerPlaneAlpha(hwc2_display_t display, hwc2_layer_t layer, 4632b1f53060ea8587a428f826cf7890354ff124722Marissa Wall float alpha, hwc2_error_t* outErr = nullptr) 4642b1f53060ea8587a428f826cf7890354ff124722Marissa Wall { 4652b1f53060ea8587a428f826cf7890354ff124722Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_PLANE_ALPHA>( 4662b1f53060ea8587a428f826cf7890354ff124722Marissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_PLANE_ALPHA)); 4672b1f53060ea8587a428f826cf7890354ff124722Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 4682b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 4692b1f53060ea8587a428f826cf7890354ff124722Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 4702b1f53060ea8587a428f826cf7890354ff124722Marissa Wall alpha)); 4712b1f53060ea8587a428f826cf7890354ff124722Marissa Wall if (outErr) { 4722b1f53060ea8587a428f826cf7890354ff124722Marissa Wall *outErr = err; 4732b1f53060ea8587a428f826cf7890354ff124722Marissa Wall } else { 4742b1f53060ea8587a428f826cf7890354ff124722Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer plane alpha " 4752b1f53060ea8587a428f826cf7890354ff124722Marissa Wall << alpha; 4762b1f53060ea8587a428f826cf7890354ff124722Marissa Wall } 4772b1f53060ea8587a428f826cf7890354ff124722Marissa Wall } 4782b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 479c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall void setLayerSourceCrop(hwc2_display_t display, hwc2_layer_t layer, 480c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall const hwc_frect_t& sourceCrop, hwc2_error_t* outErr = nullptr) 481c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall { 482c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_SOURCE_CROP>( 483c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_SOURCE_CROP)); 484c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 485c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 486c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 487c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall sourceCrop)); 488c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall if (outErr) { 489c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall *outErr = err; 490c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall } else { 491c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer source crop"; 492c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall } 493c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall } 494c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 495ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall void setLayerSurfaceDamage(hwc2_display_t display, hwc2_layer_t layer, 496ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall const hwc_region_t& surfaceDamage, hwc2_error_t* outErr = nullptr) 497ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall { 498ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_SURFACE_DAMAGE>( 499ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_SURFACE_DAMAGE)); 500ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 501ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 502ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 503ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall surfaceDamage)); 504ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall if (outErr) { 505ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall *outErr = err; 506ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall } else { 507ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer surface" 508ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall " damage"; 509ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall } 510ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall } 511ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 512ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall void setLayerTransform(hwc2_display_t display, hwc2_layer_t layer, 513ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall hwc_transform_t transform, hwc2_error_t* outErr = nullptr) 514ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall { 515ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_TRANSFORM>( 516ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_TRANSFORM)); 517ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 518ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 519ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 520ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall transform)); 521ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall if (outErr) { 522ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall *outErr = err; 523ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall } else { 524ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer transform " 525ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall << getTransformName(transform); 526ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall } 527ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall } 528ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 529f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall void setLayerVisibleRegion(hwc2_display_t display, hwc2_layer_t layer, 530f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall const hwc_region_t& visibleRegion, hwc2_error_t* outErr = nullptr) 531f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall { 532f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_VISIBLE_REGION>( 533f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_VISIBLE_REGION)); 534f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 535f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 536f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 537f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall visibleRegion)); 538f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall if (outErr) { 539f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall *outErr = err; 540f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall } else { 541f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer visible" 542f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall " region"; 543f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall } 544f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall } 545f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 546273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall void setLayerZOrder(hwc2_display_t display, hwc2_layer_t layer, 547273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall uint32_t zOrder, hwc2_error_t* outErr = nullptr) 548273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall { 549273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_Z_ORDER>( 550273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_Z_ORDER)); 551273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 552273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 553273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 554273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall zOrder)); 555273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall if (outErr) { 556273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall *outErr = err; 557273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } else { 558273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer z order " 559273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall << zOrder; 560273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 561273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 562273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 5631cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall void validateDisplay(hwc2_display_t display, uint32_t* outNumTypes, 5641cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall uint32_t* outNumRequests, hwc2_error_t* outErr) 5651cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall { 5661cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_VALIDATE_DISPLAY>( 5671cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall getFunction(HWC2_FUNCTION_VALIDATE_DISPLAY)); 5681cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 5691cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 5701cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall *outErr = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 5711cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall outNumTypes, outNumRequests)); 5721cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } 5731cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 5741cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall void validateDisplay(hwc2_display_t display, uint32_t* outNumTypes, 5751cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall uint32_t* outNumRequests, bool* outHasChanges) 5761cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall { 5771cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 5781cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 5791cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(validateDisplay(display, outNumTypes, 5801cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall outNumRequests, &err)); 5811cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 5821cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall if (err != HWC2_ERROR_HAS_CHANGES) { 5831cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall *outHasChanges = false; 5841cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_EQ(err, HWC2_ERROR_NONE) << "failed to validate display"; 5851cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } else { 5861cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall *outHasChanges = true; 5871cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } 5881cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } 5891cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 590706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall void getDisplayRequests(hwc2_display_t display, 591706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_display_request_t* outDisplayRequests, 592706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_layer_t>* outLayers, 593706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_layer_request_t>* outLayerRequests, 594706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_error_t* outErr = nullptr) 595706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall { 596706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_GET_DISPLAY_REQUESTS>( 597706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall getFunction(HWC2_FUNCTION_GET_DISPLAY_REQUESTS)); 598706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 599706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 600706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall uint32_t numElements = 0; 601706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 602706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 603706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall reinterpret_cast<int32_t*>(outDisplayRequests), &numElements, 604706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall nullptr, nullptr)); 605706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 606706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall if (err == HWC2_ERROR_NONE && numElements > 0) { 607706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall outLayers->resize(numElements); 608706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall outLayerRequests->resize(numElements); 609706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 610706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 611706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall reinterpret_cast<int32_t*>(outDisplayRequests), &numElements, 612706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall reinterpret_cast<uint64_t*>(outLayers->data()), 613706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall reinterpret_cast<int32_t*>(outLayerRequests->data()))); 614706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 615706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 616706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall if (outErr) { 617706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall *outErr = err; 618706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } else { 619706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to get display requests"; 620706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 621706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 622706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 623706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall void handleRequests(hwc2_display_t display, 624706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall const std::vector<hwc2_layer_t>& layers, uint32_t numRequests, 625706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::set<hwc2_layer_t>* outClearLayers = nullptr, 626706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall bool* outFlipClientTarget = nullptr) 627706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall { 628706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_display_request_t displayRequest = 629706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall static_cast<hwc2_display_request_t>(0); 630706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_layer_t> requestedLayers; 631706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_layer_request_t> requests; 632706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 633706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayRequests(display, &displayRequest, 634706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall &requestedLayers, &requests)); 635706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 636706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_EQ(numRequests, requests.size()) << "validate returned " 637706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << numRequests << " requests and get display requests returned " 638706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << requests.size() << " requests"; 639706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 640706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall for (size_t i = 0; i < requests.size(); i++) { 641706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_layer_t requestedLayer = requestedLayers.at(i); 642706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_layer_request_t request = requests.at(i); 643706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 644706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_EQ(std::count(layers.begin(), layers.end(), requestedLayer), 645706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 0) << "get display requests returned an unknown layer"; 646706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_NE(request, 0) << "returned empty request for layer " 647706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << requestedLayer; 648706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 649706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall if (outClearLayers && request 650706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall == HWC2_LAYER_REQUEST_CLEAR_CLIENT_TARGET) 651706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall outClearLayers->insert(requestedLayer); 652706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 653706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 654706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall if (outFlipClientTarget) 655706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall *outFlipClientTarget = displayRequest 656706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall & HWC2_DISPLAY_REQUEST_FLIP_CLIENT_TARGET; 657706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 658706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 659706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall void getChangedCompositionTypes(hwc2_display_t display, 660706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_layer_t>* outLayers, 661706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_composition_t>* outTypes, 662706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_error_t* outErr = nullptr) 663706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall { 664706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_GET_CHANGED_COMPOSITION_TYPES>( 665706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall getFunction(HWC2_FUNCTION_GET_CHANGED_COMPOSITION_TYPES)); 666706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 667706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 668706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall uint32_t numElements = 0; 669706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 670706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 671706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall &numElements, nullptr, nullptr)); 672706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 673706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall if (err == HWC2_ERROR_NONE && numElements > 0) { 674706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall outLayers->resize(numElements); 675706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall outTypes->resize(numElements); 676706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 677706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 678706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall &numElements, reinterpret_cast<uint64_t*>(outLayers->data()), 679706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall reinterpret_cast<int32_t*>(outTypes->data()))); 680706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 681706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 682706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall if (outErr) { 683706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall *outErr = err; 684706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } else { 685706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to get changed" 686706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall " composition types"; 687706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 688706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 689706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 690706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall void handleCompositionChanges(hwc2_display_t display, 691706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall const Hwc2TestLayers& testLayers, 692706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall const std::vector<hwc2_layer_t>& layers, uint32_t numTypes, 693706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::set<hwc2_layer_t>* outClientLayers = nullptr) 694706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall { 695706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_layer_t> changedLayers; 696706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_composition_t> types; 697706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 698706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(getChangedCompositionTypes(display, 699706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall &changedLayers, &types)); 700706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 701706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_EQ(numTypes, types.size()) << "validate returned " 702706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << numTypes << " types and get changed composition types" 703706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall " returned " << types.size() << " types"; 704706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 705706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall for (size_t i = 0; i < types.size(); i++) { 706706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 707706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall auto layer = std::find(layers.begin(), layers.end(), 708706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall changedLayers.at(i)); 709706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 710706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_TRUE(layer != layers.end() || !testLayers.contains(*layer)) 711706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << "get changed composition types returned an unknown layer"; 712706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 713706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_composition_t requestedType = testLayers.getComposition(*layer); 714706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_composition_t returnedType = types.at(i); 715706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 716706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_NE(returnedType, HWC2_COMPOSITION_INVALID) << "get changed" 717706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall " composition types returned invalid composition"; 718706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 719706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall switch (requestedType) { 720706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall case HWC2_COMPOSITION_CLIENT: 721706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_TRUE(false) << getCompositionName(returnedType) 722706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << " cannot be changed"; 723706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall break; 724706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall case HWC2_COMPOSITION_DEVICE: 725706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall case HWC2_COMPOSITION_SOLID_COLOR: 726706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_EQ(returnedType, HWC2_COMPOSITION_CLIENT) 727706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << "composition of type " 728706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << getCompositionName(requestedType) 729706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << " can only be changed to " 730706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << getCompositionName(HWC2_COMPOSITION_CLIENT); 731706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall break; 732706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall case HWC2_COMPOSITION_CURSOR: 733706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall case HWC2_COMPOSITION_SIDEBAND: 734706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_TRUE(returnedType == HWC2_COMPOSITION_CLIENT 735706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall || returnedType == HWC2_COMPOSITION_DEVICE) 736706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << "composition of type " 737706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << getCompositionName(requestedType) 738706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << " can only be changed to " 739706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << getCompositionName(HWC2_COMPOSITION_CLIENT) << " or " 740706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << getCompositionName(HWC2_COMPOSITION_DEVICE); 741706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall break; 742706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall default: 743706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_TRUE(false) << "unknown type " 744706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << getCompositionName(requestedType); 745706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall break; 746706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 747706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 748706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall if (outClientLayers) 749706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall if (returnedType == HWC2_COMPOSITION_CLIENT) 750706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall outClientLayers->insert(*layer); 751706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 752706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 753706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall if (outClientLayers) { 754706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall for (auto layer : layers) { 755706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall if (testLayers.getComposition(layer) == HWC2_COMPOSITION_CLIENT) 756706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall outClientLayers->insert(layer); 757706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 758706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 759706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 760706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 761706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall void acceptDisplayChanges(hwc2_display_t display, 762706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_error_t* outErr = nullptr) 763706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall { 764706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_ACCEPT_DISPLAY_CHANGES>( 765706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall getFunction(HWC2_FUNCTION_ACCEPT_DISPLAY_CHANGES)); 766706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 767706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 768706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display)); 769706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall if (outErr) { 770706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall *outErr = err; 771706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } else { 772706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to accept display changes"; 773706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 774706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 775706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 776f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall void getClientTargetSupport(hwc2_display_t display, int32_t width, 777f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall int32_t height, android_pixel_format_t format, 778f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall android_dataspace_t dataspace, hwc2_error_t* outErr = nullptr) 779f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall { 780f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_GET_CLIENT_TARGET_SUPPORT>( 781f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall getFunction(HWC2_FUNCTION_GET_CLIENT_TARGET_SUPPORT)); 782f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 783f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 784f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, width, 785f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall height, format, dataspace)); 786f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall if (outErr) { 787f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall *outErr = err; 788f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } else { 789f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to get client target" 790f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall " support"; 791f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } 792f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } 793f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 794f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall void setClientTarget(hwc2_display_t display, buffer_handle_t handle, 795f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall int32_t acquireFence, android_dataspace_t dataspace, 796f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall hwc_region_t damage, hwc2_error_t* outErr = nullptr) 797f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall { 798f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_CLIENT_TARGET>( 799f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall getFunction(HWC2_FUNCTION_SET_CLIENT_TARGET)); 800f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 801f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 802f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, handle, 803f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall acquireFence, dataspace, damage)); 804f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall if (outErr) { 805f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall *outErr = err; 806f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } else { 807f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set client target"; 808f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } 809f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } 810f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 811f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall void getBadDisplay(hwc2_display_t* outDisplay) 812f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall { 813f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall for (hwc2_display_t display = 0; display < UINT64_MAX; display++) { 814f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall if (mDisplays.count(display) == 0) { 815f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall *outDisplay = display; 816f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall return; 817f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } 818f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } 819f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_TRUE(false) << "Unable to find bad display. UINT64_MAX displays" 820f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall " are registered. This should never happen."; 821f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } 822f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 8234d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wallprotected: 8244d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall hwc2_function_pointer_t getFunction(hwc2_function_descriptor_t descriptor) 8254d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall { 8264d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall return mHwc2Device->getFunction(mHwc2Device, descriptor); 8274d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall } 8284d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 8294d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall void getCapabilities(std::vector<hwc2_capability_t>* outCapabilities) 8304d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall { 8314d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall uint32_t num = 0; 8324d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 8334d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall mHwc2Device->getCapabilities(mHwc2Device, &num, nullptr); 8344d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 8354d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall outCapabilities->resize(num); 8364d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 8374d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall mHwc2Device->getCapabilities(mHwc2Device, &num, 8384d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall reinterpret_cast<int32_t*>(outCapabilities->data())); 8394d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall } 8404d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 841cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall /* Registers a hotplug callback and waits for hotplug callbacks. This 842cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall * function will have no effect if called more than once. */ 843cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall void populateDisplays() 844cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall { 845cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall /* Sets the hotplug status to receiving */ 846cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall { 847cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::lock_guard<std::mutex> lock(mHotplugMutex); 848cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 849cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall if (mHotplugStatus != Hwc2TestHotplugStatus::Init) 850cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall return; 851cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall mHotplugStatus = Hwc2TestHotplugStatus::Receiving; 852cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 853cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 854cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall /* Registers the callback. This function call cannot be locked because 855cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall * a callback could happen on the same thread */ 856cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_HOTPLUG, this, 857cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall reinterpret_cast<hwc2_function_pointer_t>( 858cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2TestHotplugCallback))); 859cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 860cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall /* Waits for hotplug events. If a hotplug event has not come within 1 861cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall * second, stop waiting. */ 862cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::unique_lock<std::mutex> lock(mHotplugMutex); 863cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 864cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall while (mHotplugCv.wait_for(lock, std::chrono::seconds(1)) != 865cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::cv_status::timeout) { } 866cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 867cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall /* Sets the hotplug status to done. Future calls will have no effect */ 868cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall mHotplugStatus = Hwc2TestHotplugStatus::Done; 869cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 870cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 8711db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall /* NOTE: will create min(newlayerCnt, max supported layers) layers */ 8721db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall void createLayers(hwc2_display_t display, 8731db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall std::vector<hwc2_layer_t>* outLayers, size_t newLayerCnt) 8741db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall { 8751db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall std::vector<hwc2_layer_t> newLayers; 8761db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_layer_t layer; 8771db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 8781db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 8791db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (size_t i = 0; i < newLayerCnt; i++) { 8801db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 8811db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_NO_FATAL_FAILURE(createLayer(display, &layer, &err)); 8821db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall if (err == HWC2_ERROR_NO_RESOURCES) 8831db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall break; 8841db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall if (err != HWC2_ERROR_NONE) { 8851db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall newLayers.clear(); 8861db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to create layer"; 8871db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 8881db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall newLayers.push_back(layer); 8891db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 8901db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 8911db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall *outLayers = std::move(newLayers); 8921db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 8931db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 8941db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall void destroyLayers(hwc2_display_t display, 8951db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall std::vector<hwc2_layer_t>&& layers) 8961db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall { 8971db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (hwc2_layer_t layer : layers) { 8981db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 8991db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 9001db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 9011db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 902cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall void getInvalidConfig(hwc2_display_t display, hwc2_config_t* outConfig) 903cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall { 904cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs; 905cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 906cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 907cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 908cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_config_t CONFIG_MAX = UINT32_MAX; 909cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 910cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_LE(configs.size() - 1, CONFIG_MAX) << "every config value" 911cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall " (2^32 values) has been taken which shouldn't happen"; 912cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 913cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_config_t config; 914cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (config = 0; config < CONFIG_MAX; config++) { 915cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall if (std::count(configs.begin(), configs.end(), config) == 0) 916cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall break; 917cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 918cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 919cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall *outConfig = config; 920cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 921cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 922572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall void enableVsync(hwc2_display_t display) 923572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall { 924572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_VSYNC, this, 925572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall reinterpret_cast<hwc2_function_pointer_t>( 926572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2TestVsyncCallback))); 927572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE)); 928572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 929572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 930572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall void disableVsync(hwc2_display_t display) 931572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall { 932572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 933572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 934572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 935572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall void waitForVsync(hwc2_display_t* outDisplay = nullptr, 936572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall int64_t* outTimestamp = nullptr) 937572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall { 938572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall std::unique_lock<std::mutex> lock(mVsyncMutex); 939572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_EQ(mVsyncCv.wait_for(lock, std::chrono::seconds(3)), 940572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall std::cv_status::no_timeout) << "timed out attempting to get" 941572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall " vsync callback"; 942572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall if (outDisplay) 943572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall *outDisplay = mVsyncDisplay; 944572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall if (outTimestamp) 945572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall *outTimestamp = mVsyncTimestamp; 946572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 947572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 9486bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* Calls a set property function from Hwc2Test to set a property value from 9496bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * Hwc2TestLayer to hwc2_layer_t on hwc2_display_t */ 9506bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall using TestLayerPropertyFunction = void (*)(Hwc2Test* test, 9516bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_display_t display, hwc2_layer_t layer, 9525a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr); 9536bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 954273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall /* Calls a set property function from Hwc2Test to set property values from 955273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall * Hwc2TestLayers to hwc2_layer_t on hwc2_display_t */ 956273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall using TestLayerPropertiesFunction = void (*)(Hwc2Test* test, 957273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall hwc2_display_t display, hwc2_layer_t layer, 9585a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayers* testLayers); 959273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 9606bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* Calls a set property function from Hwc2Test to set a bad property value 9616bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * on hwc2_layer_t on hwc2_display_t */ 9626bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall using TestLayerPropertyBadLayerFunction = void (*)(Hwc2Test* test, 9636bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_display_t display, hwc2_layer_t layer, 9645a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr); 9656bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 9666bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* Calls a set property function from Hwc2Test to set a bad property value 9676bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * on hwc2_layer_t on hwc2_display_t */ 9686bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall using TestLayerPropertyBadParameterFunction = void (*)(Hwc2Test* test, 9696bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_display_t display, hwc2_layer_t layer, hwc2_error_t* outErr); 9706bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 9711cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall /* Is called after a display is powered on and all layer properties have 9721cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall * been set. It should be used to test functions such as validate, accepting 9731cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall * changes, present, etc. */ 9741cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall using TestDisplayLayersFunction = void (*)(Hwc2Test* test, 975706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_display_t display, const std::vector<hwc2_layer_t>& layers, 976706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall const Hwc2TestLayers& testLayers); 977706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 978706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall /* It is called on an non validated display */ 979706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall using TestDisplayNonValidatedLayersFunction = void (*)(Hwc2Test* test, 980706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_display_t display, std::vector<hwc2_layer_t>* layers); 9811cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 982f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall /* Tests client target support on a particular display and config */ 983f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall using TestClientTargetSupportFunction = void (*)(Hwc2Test* test, 984f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall hwc2_display_t display, 985f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const Hwc2TestClientTargetSupport& testClientTargetSupport); 986f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 9876bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* Advances a property of Hwc2TestLayer */ 9886bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall using AdvanceProperty = bool (*)(Hwc2TestLayer* testLayer); 9896bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 990f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall /* Advances properties of Hwc2TestLayers */ 991f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall using AdvanceProperties = bool (*)(Hwc2TestLayers* testLayer); 992f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 993f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall /* Advances properties of Hwc2TestClientTargetSupport */ 994f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall using AdvanceClientTargetSupport = bool (*)( 995f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall Hwc2TestClientTargetSupport* testClientTargetSupport); 996f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 9976bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* For each active display it cycles through each display config and tests 9986bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * each property value. It creates a layer, sets the property and then 9996bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * destroys the layer */ 10006bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall void setLayerProperty(Hwc2TestCoverage coverage, 10016bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall TestLayerPropertyFunction function, AdvanceProperty advance) 10026bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall { 10036bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto display : mDisplays) { 10046bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall std::vector<hwc2_config_t> configs; 10056bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 10066bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 10076bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 10086bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto config : configs) { 10096bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_layer_t layer; 1010600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Area displayArea; 10116bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 10126bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 1013600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveDisplayArea(display, 1014600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall &displayArea)); 1015600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Hwc2TestLayer testLayer(coverage, displayArea); 10166bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 10176bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall do { 10186bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 10196bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 10206bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(function(this, display, layer, 10215a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall &testLayer, nullptr)); 10226bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 10236bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 10246bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } while (advance(&testLayer)); 10256bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 10266bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 10276bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 10286bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 10296bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* For each active display it cycles through each display config and tests 10306bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * each property value. It creates a layer, cycles through each property 10316bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * value and updates the layer property value and then destroys the layer */ 10326bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall void setLayerPropertyUpdate(Hwc2TestCoverage coverage, 10336bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall TestLayerPropertyFunction function, AdvanceProperty advance) 10346bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall { 10356bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto display : mDisplays) { 10366bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall std::vector<hwc2_config_t> configs; 10376bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 10386bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 10396bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 10406bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto config : configs) { 10416bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_layer_t layer; 1042600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Area displayArea; 10436bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 10446bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 1045600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveDisplayArea(display, 1046600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall &displayArea)); 1047600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Hwc2TestLayer testLayer(coverage, displayArea); 10486bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 10496bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 10506bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 10516bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall do { 10526bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(function(this, display, layer, 10535a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall &testLayer, nullptr)); 10546bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } while (advance(&testLayer)); 10556bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 10566bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 10576bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 10586bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 10596bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 10606bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 1061273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall /* For each active display it cycles through each display config and tests 1062273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall * each property value. It creates multiple layers, calls the 1063273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall * TestLayerPropertiesFunction to set property values and then 1064273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall * destroys the layers */ 1065273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall void setLayerProperties(Hwc2TestCoverage coverage, size_t layerCnt, 1066f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall TestLayerPropertiesFunction function, AdvanceProperties advance) 1067273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall { 1068273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall for (auto display : mDisplays) { 1069273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall std::vector<hwc2_config_t> configs; 1070273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 1071273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 1072273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 1073273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall for (auto config : configs) { 1074273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall std::vector<hwc2_layer_t> layers; 1075600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Area displayArea; 1076273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 1077273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 1078600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveDisplayArea(display, 1079600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall &displayArea)); 1080273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 1081273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayers(display, &layers, layerCnt)); 1082600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Hwc2TestLayers testLayers(layers, coverage, displayArea); 1083273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 1084f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall do { 1085f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall for (auto layer : layers) { 1086f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall EXPECT_NO_FATAL_FAILURE(function(this, display, layer, 1087f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall &testLayers)); 1088f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall } 1089f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall } while (advance(&testLayers)); 1090273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 1091273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayers(display, std::move(layers))); 1092273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 1093273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 1094273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 1095273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 10966bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* For each active display it cycles through each display config. 10976bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * 1) It attempts to set a valid property value to bad layer handle. 10986bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * 2) It creates a layer x and attempts to set a valid property value to 10996bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * layer x + 1 11006bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * 3) It destroys the layer x and attempts to set a valid property value to 11016bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * the destroyed layer x. 11026bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall */ 11036bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall void setLayerPropertyBadLayer(Hwc2TestCoverage coverage, 11046bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall TestLayerPropertyBadLayerFunction function) 11056bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall { 11066bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto display : mDisplays) { 11076bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall std::vector<hwc2_config_t> configs; 11086bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 11096bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 11106bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 11116bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto config : configs) { 11126bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_layer_t layer = 0; 1113600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Area displayArea; 11146bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 11156bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 11166bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 1117600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveDisplayArea(display, 1118600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall &displayArea)); 1119600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Hwc2TestLayer testLayer(coverage, displayArea); 11206bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 11216bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(function(this, display, layer, 11225a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall &testLayer, &err)); 11236bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 11246bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 11256bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 11266bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 11276bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(function(this, display, layer + 1, 11285a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall &testLayer, &err)); 11296bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 11306bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 11316bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 11326bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 11336bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(function(this, display, layer, 11345a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall &testLayer, &err)); 11356bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 11366bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 11376bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 11386bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 11396bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 11406bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* For each active display it cycles through each display config and tests 11416bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * each property value. It creates a layer, sets a bad property value and 11426bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * then destroys the layer */ 11436bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall void setLayerPropertyBadParameter(TestLayerPropertyBadParameterFunction function) 11446bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall { 11456bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto display : mDisplays) { 11466bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall std::vector<hwc2_config_t> configs; 11476bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 11486bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 11496bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 11506bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto config : configs) { 11516bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_layer_t layer; 11526bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 11536bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 11546bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 11556bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 11566bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 11576bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 11586bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(function(this, display, layer, &err)); 11596bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_PARAMETER) << "returned wrong" 11606bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall " error code"; 11616bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 11626bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 11636bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 11646bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 11656bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 11666bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 11671cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall /* For each active display it powers on the display, cycles through each 11681cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall * config and creates a set of layers with a certain amount of coverage. 11691cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall * For each active display, for each config and for each set of layers, 11701cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall * it calls the TestDisplayLayersFunction */ 11711cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall void displayLayers(Hwc2TestCoverage coverage, size_t layerCnt, 11721cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall TestDisplayLayersFunction function) 11731cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall { 11741cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall for (auto display : mDisplays) { 11751cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall std::vector<hwc2_config_t> configs; 11761cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 11771cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 11781cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 11791cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 11801cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 11811cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall for (auto config : configs) { 11821cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall Area displayArea; 11831cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall std::vector<hwc2_layer_t> layers; 11841cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 11851cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 11861cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveDisplayArea(display, &displayArea)); 11871cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 11881cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_NO_FATAL_FAILURE(createLayers(display, &layers, layerCnt)); 11891cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall Hwc2TestLayers testLayers(layers, coverage, displayArea); 11901cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 11911cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall do { 11921cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall bool skip; 11931cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 11941cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperties(display, layers, 11951cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall &testLayers, &skip)); 11961cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall if (!skip) 1197706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_NO_FATAL_FAILURE(function(this, display, layers, 1198706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall testLayers)); 11991cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 12001cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } while (testLayers.advance()); 12011cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 12021cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayers(display, 12031cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall std::move(layers))); 12041cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } 12051cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 12061cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 12071cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } 12081cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } 12091cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 1210706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall /* For each active display, it calls the 1211706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall * TestDisplayNonValidatedLayersFunction on a variety on non-validated 1212706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall * layer combinations */ 1213706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall void displayNonValidatedLayers(size_t layerCnt, 1214706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall TestDisplayNonValidatedLayersFunction function) 1215706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall { 1216706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall for (auto display : mDisplays) { 1217706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall uint32_t numTypes, numRequests; 1218706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_layer_t> layers; 1219706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall bool hasChanges; 1220706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 1221706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 1222706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 1223706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_NO_FATAL_FAILURE(function(this, display, &layers)); 1224706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 1225706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayers(display, &layers, layerCnt)); 1226706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 1227706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_NO_FATAL_FAILURE(function(this, display, &layers)); 1228706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 1229706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall for (auto layer : layers) { 1230706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerCompositionType(display, layer, 1231706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall HWC2_COMPOSITION_CLIENT)); 1232706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 1233706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 1234706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_NO_FATAL_FAILURE(function(this, display, &layers)); 1235706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 1236706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(validateDisplay(display, &numTypes, 1237706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall &numRequests, &hasChanges)); 1238706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 1239706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall for (auto layer : layers) { 1240706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerCompositionType(display, layer, 1241706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall HWC2_COMPOSITION_DEVICE)); 1242706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 1243706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 1244706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_NO_FATAL_FAILURE(function(this, display, &layers)); 1245706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 1246706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayers(display, std::move(layers))); 1247706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 1248706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_NO_FATAL_FAILURE(function(this, display, &layers)); 1249706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 1250706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 1251706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 1252706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 1253706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 1254f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall /* Test client target support on each config on each active display */ 1255f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall void setClientTargetSupport(Hwc2TestCoverage coverage, 1256f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall TestClientTargetSupportFunction function, 1257f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall AdvanceClientTargetSupport advance) 1258f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall { 1259f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall for (auto display : mDisplays) { 1260f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall std::vector<hwc2_config_t> configs; 1261f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 1262f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 1263f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 1264f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall for (auto config : configs) { 1265f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall Area displayArea; 1266f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 1267f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 1268f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(getActiveDisplayArea(display, 1269f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall &displayArea)); 1270f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall Hwc2TestClientTargetSupport testClientTargetSupport(coverage, 1271f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall displayArea); 1272f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 1273f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall do { 1274f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall EXPECT_NO_FATAL_FAILURE(function(this, display, 1275f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall testClientTargetSupport)); 1276f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 1277f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } while (advance(&testClientTargetSupport)); 1278f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } 1279f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } 1280f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } 1281f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 1282600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall void getActiveConfigAttribute(hwc2_display_t display, 1283600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall hwc2_attribute_t attribute, int32_t* outValue) 1284600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall { 1285600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall hwc2_config_t config; 1286600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveConfig(display, &config)); 1287600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, 1288600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall attribute, outValue)); 1289600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_GE(*outValue, 0) << "failed to get valid " 1290600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall << getAttributeName(attribute); 1291600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall } 1292600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 1293600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall void getActiveDisplayArea(hwc2_display_t display, Area* displayArea) 1294600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall { 1295600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveConfigAttribute(display, 1296600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall HWC2_ATTRIBUTE_WIDTH, &displayArea->width)); 1297600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveConfigAttribute(display, 1298600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall HWC2_ATTRIBUTE_HEIGHT, &displayArea->height)); 1299600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall } 1300600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 13011cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall void setLayerProperties(hwc2_display_t display, hwc2_layer_t layer, 13021cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall Hwc2TestLayers* testLayers, bool* outSkip) 13031cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall { 13041cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall hwc2_composition_t composition; 13051cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall buffer_handle_t handle = nullptr; 13061cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall int32_t acquireFence; 13071cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 13081cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall *outSkip = true; 13091cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 13101cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall if (!testLayers->contains(layer)) 13111cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall return; 13121cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 13131cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall composition = testLayers->getComposition(layer); 13141cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 13151cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall /* If the device cannot support a buffer format, then do not continue */ 13161cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall if ((composition == HWC2_COMPOSITION_DEVICE 13171cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall || composition == HWC2_COMPOSITION_CURSOR) 13181cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall && testLayers->getBuffer(layer, &handle, &acquireFence) < 0) 13191cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall return; 13201cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 13211cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerCompositionType(display, layer, 13221cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall composition, &err)); 13231cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall if (err == HWC2_ERROR_UNSUPPORTED) 13241cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_TRUE(composition != HWC2_COMPOSITION_CLIENT 13251cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall && composition != HWC2_COMPOSITION_DEVICE); 13261cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 13271cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall const hwc_rect_t cursor = testLayers->getCursorPosition(layer); 13281cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 13291cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerBuffer(display, layer, handle, 13301cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall acquireFence)); 13311cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerBlendMode(display, layer, 13321cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall testLayers->getBlendMode(layer))); 13331cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerColor(display, layer, 13341cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall testLayers->getColor(layer))); 13351cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setCursorPosition(display, layer, cursor.left, 13361cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall cursor.top)); 13371cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerDataspace(display, layer, 13381cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall testLayers->getDataspace(layer))); 13391cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerDisplayFrame(display, layer, 13401cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall testLayers->getDisplayFrame(layer))); 13411cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerPlaneAlpha(display, layer, 13421cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall testLayers->getPlaneAlpha(layer))); 13431cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerSourceCrop(display, layer, 13441cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall testLayers->getSourceCrop(layer))); 13451cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerSurfaceDamage(display, layer, 13461cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall testLayers->getSurfaceDamage(layer))); 13471cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerTransform(display, layer, 13481cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall testLayers->getTransform(layer))); 13491cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerVisibleRegion(display, layer, 13501cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall testLayers->getVisibleRegion(layer))); 13511cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerZOrder(display, layer, 13521cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall testLayers->getZOrder(layer))); 13531cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 13541cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall *outSkip = false; 13551cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } 13561cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 13571cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall void setLayerProperties(hwc2_display_t display, 13581cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall const std::vector<hwc2_layer_t>& layers, 13591cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall Hwc2TestLayers* testLayers, bool* outSkip) 13601cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall { 13611cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall for (auto layer : layers) { 13621cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(setLayerProperties(display, layer, 13631cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall testLayers, outSkip)); 13641cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall if (*outSkip) 13651cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall return; 13661cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } 13671cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } 13681cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 13694d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall hwc2_device_t* mHwc2Device = nullptr; 1370cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1371cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall enum class Hwc2TestHotplugStatus { 1372cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall Init = 1, 1373cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall Receiving, 1374cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall Done, 1375cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall }; 1376cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1377cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::mutex mHotplugMutex; 1378cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::condition_variable mHotplugCv; 1379cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall Hwc2TestHotplugStatus mHotplugStatus = Hwc2TestHotplugStatus::Init; 1380cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::unordered_set<hwc2_display_t> mDisplays; 13811db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 13821db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall /* Store all created layers that have not been destroyed. If an ASSERT_* 13831db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall * fails, then destroy the layers on exit */ 13841db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall std::set<std::pair<hwc2_display_t, hwc2_layer_t>> mLayers; 138503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 138603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall /* Store the power mode state. If it is not HWC2_POWER_MODE_OFF when 138703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall * tearing down the test cases, change it to HWC2_POWER_MODE_OFF */ 138803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall std::set<hwc2_display_t> mActiveDisplays; 1389572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1390572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall std::mutex mVsyncMutex; 1391572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall std::condition_variable mVsyncCv; 1392572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_display_t mVsyncDisplay; 1393572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall int64_t mVsyncTimestamp = -1; 13944d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall}; 13954d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 1396cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wallvoid hwc2TestHotplugCallback(hwc2_callback_data_t callbackData, 1397cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2_display_t display, int32_t connection) 1398cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall{ 1399cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall if (callbackData) 1400cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall static_cast<Hwc2Test*>(callbackData)->hotplugCallback(display, 1401cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall connection); 1402cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall} 1403cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1404572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wallvoid hwc2TestVsyncCallback(hwc2_callback_data_t callbackData, 1405572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_display_t display, int64_t timestamp) 1406572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 1407572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall if (callbackData) 1408572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall static_cast<Hwc2Test*>(callbackData)->vsyncCallback(display, 1409572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall timestamp); 1410572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 1411572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1412ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wallvoid setBlendMode(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 14135a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 1414ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall{ 1415ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerBlendMode(display, layer, 14165a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getBlendMode(), outErr)); 14175a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall} 14185a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 14195a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wallvoid setBuffer(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 14205a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 14215a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall{ 14225a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall buffer_handle_t handle; 14235a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall android::base::unique_fd acquireFence; 14245a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall hwc2_composition_t composition = testLayer->getComposition(); 14255a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 14265a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall if (composition == HWC2_COMPOSITION_CLIENT 14275a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall || composition == HWC2_COMPOSITION_SOLID_COLOR 14285a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall || composition == HWC2_COMPOSITION_SIDEBAND) 14295a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall return; 14305a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 14315a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall if (testLayer->getBuffer(&handle, &acquireFence) < 0) 14325a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall return; 14335a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 14345a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerCompositionType(display, layer, 14355a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall composition)); 14365a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerBuffer(display, layer, 14375a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall handle, acquireFence, outErr)); 1438ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall} 1439ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 1440ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wallvoid setColor(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 14415a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 1442ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall{ 1443ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerCompositionType(display, 1444ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall layer, HWC2_COMPOSITION_SOLID_COLOR)); 1445ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerPlaneAlpha(display, 14465a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall layer, testLayer->getPlaneAlpha())); 1447ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerBlendMode(display, 14485a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall layer, testLayer->getBlendMode())); 1449ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerColor(display, layer, 14505a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getColor(), outErr)); 1451ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall} 1452ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 14536bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wallvoid setComposition(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 14545a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 14556bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall{ 14565a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall hwc2_composition_t composition = testLayer->getComposition(); 14576bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 14586bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 14596bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerCompositionType(display, layer, 14606bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall composition, &err)); 14616bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall if (outErr) { 14626bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall *outErr = err; 14636bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall return; 14646bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 14656bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 14666bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall if (composition != HWC2_COMPOSITION_SIDEBAND) { 14676bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall EXPECT_EQ(err, HWC2_ERROR_NONE) << "returned wrong error code"; 14686bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } else { 14696bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall EXPECT_TRUE(err == HWC2_ERROR_NONE || err == HWC2_ERROR_UNSUPPORTED) 14706bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall << "returned wrong error code"; 14716bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 14726bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall} 14736bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 14742a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wallvoid setCursorPosition(Hwc2Test* test, hwc2_display_t display, 14755a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall hwc2_layer_t layer, Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 14762a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall{ 14772a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerCompositionType(display, 14782a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall layer, HWC2_COMPOSITION_CURSOR)); 14792a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 14805a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall const hwc_rect_t cursorPosition = testLayer->getCursorPosition(); 14812a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setCursorPosition(display, layer, 14822a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall cursorPosition.left, cursorPosition.top, outErr)); 14832a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall} 14842a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 1485b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wallvoid setDataspace(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 14865a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 1487b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall{ 1488b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerDataspace(display, layer, 14895a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getDataspace(), outErr)); 1490b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall} 1491b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 1492600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wallvoid setDisplayFrame(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 14935a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 1494600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall{ 1495600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerDisplayFrame(display, layer, 14965a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getDisplayFrame(), outErr)); 1497600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall} 1498600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 14992b1f53060ea8587a428f826cf7890354ff124722Marissa Wallvoid setPlaneAlpha(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 15005a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t *outErr) 15012b1f53060ea8587a428f826cf7890354ff124722Marissa Wall{ 15022b1f53060ea8587a428f826cf7890354ff124722Marissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerBlendMode(display, layer, 15035a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getBlendMode())); 15042b1f53060ea8587a428f826cf7890354ff124722Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerPlaneAlpha(display, layer, 15055a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getPlaneAlpha(), outErr)); 15062b1f53060ea8587a428f826cf7890354ff124722Marissa Wall} 15072b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 1508c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wallvoid setSourceCrop(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 15095a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 1510c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall{ 1511c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerSourceCrop(display, layer, 15125a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getSourceCrop(), outErr)); 1513c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall} 1514c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 1515ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wallvoid setSurfaceDamage(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 15165a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 1517ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall{ 1518ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerSurfaceDamage(display, layer, 15195a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getSurfaceDamage(), outErr)); 1520ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall} 1521ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 1522ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wallvoid setTransform(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 15235a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 1524ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall{ 1525ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerTransform(display, layer, 15265a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getTransform(), outErr)); 1527ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall} 1528ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 1529f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wallvoid setVisibleRegion(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 1530f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 1531f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall{ 1532f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerVisibleRegion(display, layer, 1533f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall testLayer->getVisibleRegion(), outErr)); 1534f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall} 1535f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 1536273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wallvoid setZOrder(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 15375a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 1538273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall{ 1539273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerZOrder(display, layer, 15405a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getZOrder(), outErr)); 1541273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall} 1542273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 1543ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wallbool advanceBlendMode(Hwc2TestLayer* testLayer) 1544ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall{ 1545ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall return testLayer->advanceBlendMode(); 1546ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall} 1547ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 15485a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wallbool advanceBuffer(Hwc2TestLayer* testLayer) 15495a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall{ 15505a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall if (testLayer->advanceComposition()) 15515a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall return true; 15525a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall return testLayer->advanceBufferArea(); 15535a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall} 15545a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 1555ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wallbool advanceColor(Hwc2TestLayer* testLayer) 1556ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall{ 1557ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall /* Color depends on blend mode so advance blend mode last so color is not 1558ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall * force to update as often */ 1559ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall if (testLayer->advancePlaneAlpha()) 1560ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall return true; 1561ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall if (testLayer->advanceColor()) 1562ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall return true; 1563ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall return testLayer->advanceBlendMode(); 1564ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall} 1565ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 15666bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wallbool advanceComposition(Hwc2TestLayer* testLayer) 15676bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall{ 15686bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall return testLayer->advanceComposition(); 15696bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall} 15706bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 15712a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wallbool advanceCursorPosition(Hwc2TestLayer* testLayer) 15722a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall{ 15732a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall return testLayer->advanceCursorPosition(); 15742a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall} 15752a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 1576b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wallbool advanceDataspace(Hwc2TestLayer* testLayer) 1577b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall{ 1578b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall return testLayer->advanceDataspace(); 1579b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall} 1580b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 1581600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wallbool advanceDisplayFrame(Hwc2TestLayer* testLayer) 1582600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall{ 1583600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall return testLayer->advanceDisplayFrame(); 1584600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall} 1585600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 15862b1f53060ea8587a428f826cf7890354ff124722Marissa Wallbool advancePlaneAlpha(Hwc2TestLayer* testLayer) 15872b1f53060ea8587a428f826cf7890354ff124722Marissa Wall{ 15882b1f53060ea8587a428f826cf7890354ff124722Marissa Wall return testLayer->advancePlaneAlpha(); 15892b1f53060ea8587a428f826cf7890354ff124722Marissa Wall} 15902b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 1591c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wallbool advanceSourceCrop(Hwc2TestLayer* testLayer) 1592c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall{ 1593c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall if (testLayer->advanceSourceCrop()) 1594c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall return true; 1595c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall return testLayer->advanceBufferArea(); 1596c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall} 1597c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 1598ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wallbool advanceSurfaceDamage(Hwc2TestLayer* testLayer) 1599ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall{ 1600ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall if (testLayer->advanceSurfaceDamage()) 1601ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall return true; 1602ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall return testLayer->advanceBufferArea(); 1603ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall} 1604ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 1605ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wallbool advanceTransform(Hwc2TestLayer* testLayer) 1606ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall{ 1607ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall return testLayer->advanceTransform(); 1608ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall} 1609ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 1610f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wallbool advanceVisibleRegions(Hwc2TestLayers* testLayers) 1611f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall{ 1612f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall return testLayers->advanceVisibleRegions(); 1613f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall} 1614f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 1615f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wallbool advanceClientTargetSupport( 1616f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall Hwc2TestClientTargetSupport* testClientTargetSupport) 1617f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall{ 1618f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall return testClientTargetSupport->advance(); 1619f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall} 16204d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 16214d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wallstatic const std::array<hwc2_function_descriptor_t, 42> requiredFunctions = {{ 16224d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_ACCEPT_DISPLAY_CHANGES, 16234d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_CREATE_LAYER, 16244d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_CREATE_VIRTUAL_DISPLAY, 16254d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_DESTROY_LAYER, 16264d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_DESTROY_VIRTUAL_DISPLAY, 16274d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_DUMP, 16284d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_ACTIVE_CONFIG, 16294d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_CHANGED_COMPOSITION_TYPES, 16304d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_CLIENT_TARGET_SUPPORT, 16314d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_COLOR_MODES, 16324d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_DISPLAY_ATTRIBUTE, 16334d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_DISPLAY_CONFIGS, 16344d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_DISPLAY_NAME, 16354d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_DISPLAY_REQUESTS, 16364d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_DISPLAY_TYPE, 16374d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_DOZE_SUPPORT, 16384d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_HDR_CAPABILITIES, 16394d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_MAX_VIRTUAL_DISPLAY_COUNT, 16404d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_RELEASE_FENCES, 16414d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_PRESENT_DISPLAY, 16424d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_REGISTER_CALLBACK, 16434d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_ACTIVE_CONFIG, 16444d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_CLIENT_TARGET, 16454d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_COLOR_MODE, 16464d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_COLOR_TRANSFORM, 16474d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_CURSOR_POSITION, 16484d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_BLEND_MODE, 16494d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_BUFFER, 16504d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_COLOR, 16514d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_COMPOSITION_TYPE, 16524d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_DATASPACE, 16534d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_DISPLAY_FRAME, 16544d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_PLANE_ALPHA, 16554d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_SOURCE_CROP, 16564d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_SURFACE_DAMAGE, 16574d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_TRANSFORM, 16584d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_VISIBLE_REGION, 16594d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_Z_ORDER, 16604d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_OUTPUT_BUFFER, 16614d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_POWER_MODE, 16624d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_VSYNC_ENABLED, 16634d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_VALIDATE_DISPLAY, 16644d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall}}; 16654d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 16664d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall/* TESTCASE: Tests that the HWC2 supports all required functions. */ 16674d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa WallTEST_F(Hwc2Test, GET_FUNCTION) 16684d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall{ 16694d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall for (hwc2_function_descriptor_t descriptor : requiredFunctions) { 16704d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall hwc2_function_pointer_t pfn = getFunction(descriptor); 16714d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall EXPECT_TRUE(pfn) << "failed to get function " 16724d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall << getFunctionDescriptorName(descriptor); 16734d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall } 16744d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall} 16754d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 16764d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall/* TESTCASE: Tests that the HWC2 fails to retrieve and invalid function. */ 16774d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa WallTEST_F(Hwc2Test, GET_FUNCTION_invalid_function) 16784d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall{ 16794d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall hwc2_function_pointer_t pfn = getFunction(HWC2_FUNCTION_INVALID); 16804d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall EXPECT_FALSE(pfn) << "failed to get invalid function"; 16814d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall} 16824d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 16834d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall/* TESTCASE: Tests that the HWC2 does not return an invalid capability. */ 16844d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa WallTEST_F(Hwc2Test, GET_CAPABILITIES) 16854d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall{ 16864d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall std::vector<hwc2_capability_t> capabilities; 16874d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 16884d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall getCapabilities(&capabilities); 16894d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 16904d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall EXPECT_EQ(std::count(capabilities.begin(), capabilities.end(), 16914d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_CAPABILITY_INVALID), 0); 16924d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall} 1693a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 1694a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wallstatic const std::array<hwc2_callback_descriptor_t, 3> callbackDescriptors = {{ 1695a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall HWC2_CALLBACK_HOTPLUG, 1696a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall HWC2_CALLBACK_REFRESH, 1697a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall HWC2_CALLBACK_VSYNC, 1698a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall}}; 1699a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 1700a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall/* TESTCASE: Tests that the HWC2 can successfully register all required 1701a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall * callback functions. */ 1702a4b01488e852c0c16df89d04914e6f060dd862e3Marissa WallTEST_F(Hwc2Test, REGISTER_CALLBACK) 1703a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall{ 1704a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall hwc2_callback_data_t data = reinterpret_cast<hwc2_callback_data_t>( 1705a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall const_cast<char*>("data")); 1706a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 1707a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall for (auto descriptor : callbackDescriptors) { 1708a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(descriptor, data, 1709a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall []() { return; })); 1710a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall } 1711a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall} 1712a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 1713a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall/* TESTCASE: Test that the HWC2 fails to register invalid callbacks. */ 1714a4b01488e852c0c16df89d04914e6f060dd862e3Marissa WallTEST_F(Hwc2Test, REGISTER_CALLBACK_bad_parameter) 1715a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall{ 1716a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall hwc2_callback_data_t data = reinterpret_cast<hwc2_callback_data_t>( 1717a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall const_cast<char*>("data")); 1718a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 1719a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 1720a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_INVALID, data, 1721a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall []() { return; }, &err)); 1722a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_PARAMETER) << "returned wrong error code"; 1723a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall} 1724a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 1725a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall/* TESTCASE: Tests that the HWC2 can register a callback with null data. */ 1726a4b01488e852c0c16df89d04914e6f060dd862e3Marissa WallTEST_F(Hwc2Test, REGISTER_CALLBACK_null_data) 1727a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall{ 1728a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall hwc2_callback_data_t data = nullptr; 1729a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 1730a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall for (auto descriptor : callbackDescriptors) { 1731a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(descriptor, data, 1732a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall []() { return; })); 1733a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall } 1734a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall} 1735cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1736cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall/* TESTCASE: Tests that the HWC2 returns the correct display type for each 1737cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall * physical display. */ 1738cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa WallTEST_F(Hwc2Test, GET_DISPLAY_TYPE) 1739cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall{ 1740cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall for (auto display : mDisplays) { 1741cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2_display_type_t type; 1742cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1743cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayType(display, &type)); 1744cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall EXPECT_EQ(type, HWC2_DISPLAY_TYPE_PHYSICAL) << "failed to return" 1745cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall " correct display type"; 1746cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 1747cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall} 1748cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1749cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall/* TESTCASE: Tests that the HWC2 returns an error when the display type of a bad 1750cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall * display is requested. */ 1751cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa WallTEST_F(Hwc2Test, GET_DISPLAY_TYPE_bad_display) 1752cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall{ 1753cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2_display_t display; 1754cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2_display_type_t type; 1755cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 1756cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1757cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 1758cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1759cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayType(display, &type, &err)); 1760cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 1761cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall} 17621db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 17631db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall/* TESTCASE: Tests that the HWC2 can create and destroy layers. */ 17641db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa WallTEST_F(Hwc2Test, CREATE_DESTROY_LAYER) 17651db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall{ 17661db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (auto display : mDisplays) { 17671db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_layer_t layer; 17681db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 17691db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 17701db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 17711db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 17721db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 17731db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall} 17741db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 17751db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall/* TESTCASE: Tests that the HWC2 cannot create a layer for a bad display */ 17761db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa WallTEST_F(Hwc2Test, CREATE_LAYER_bad_display) 17771db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall{ 17781db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_display_t display; 17791db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_layer_t layer; 17801db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 17811db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 17821db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 17831db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 17841db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer, &err)); 17851db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 17861db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall} 17871db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 17881db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall/* TESTCASE: Tests that the HWC2 will either support a large number of resources 17891db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall * or will return no resources. */ 17901db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa WallTEST_F(Hwc2Test, CREATE_LAYER_no_resources) 17911db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall{ 17921db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall const size_t layerCnt = 1000; 17931db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 17941db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (auto display : mDisplays) { 17951db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall std::vector<hwc2_layer_t> layers; 17961db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 17971db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(createLayers(display, &layers, layerCnt)); 17981db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 17991db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayers(display, std::move(layers))); 18001db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 18011db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall} 18021db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 18031db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall/* TESTCASE: Tests that the HWC2 cannot destroy a layer for a bad display */ 18041db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa WallTEST_F(Hwc2Test, DESTROY_LAYER_bad_display) 18051db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall{ 18061db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_display_t badDisplay; 18071db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 18081db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&badDisplay)); 18091db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 18101db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (auto display : mDisplays) { 18111db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_layer_t layer = 0; 18121db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 18131db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 18141db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(badDisplay, layer, &err)); 18151db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 18161db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 18171db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 18181db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 18191db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(badDisplay, layer, &err)); 18201db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 18211db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 18221db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 18231db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 18241db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall} 18251db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 18261db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall/* TESTCASE: Tests that the HWC2 cannot destory a bad layer */ 18271db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa WallTEST_F(Hwc2Test, DESTROY_LAYER_bad_layer) 18281db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall{ 18291db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (auto display : mDisplays) { 18301db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_layer_t layer; 18311db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 18321db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 18331db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, UINT64_MAX / 2, &err)); 18341db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 18351db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 18361db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, 0, &err)); 18371db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 18381db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 18391db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, UINT64_MAX - 1, &err)); 18401db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 18411db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 18421db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, 1, &err)); 18431db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 18441db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 18451db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, UINT64_MAX, &err)); 18461db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 18471db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 18481db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 18491db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 18501db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer + 1, &err)); 18511db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 18521db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 18531db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 18541db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 18551db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer, &err)); 18561db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 18571db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 18581db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall} 1859cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1860cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wallstatic const std::array<hwc2_attribute_t, 2> requiredAttributes = {{ 1861cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall HWC2_ATTRIBUTE_WIDTH, 1862cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall HWC2_ATTRIBUTE_HEIGHT, 1863cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall}}; 1864cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1865cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wallstatic const std::array<hwc2_attribute_t, 3> optionalAttributes = {{ 1866cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall HWC2_ATTRIBUTE_VSYNC_PERIOD, 1867cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall HWC2_ATTRIBUTE_DPI_X, 1868cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall HWC2_ATTRIBUTE_DPI_Y, 1869cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall}}; 1870cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1871cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 can return display attributes for a valid 1872cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall * config. */ 1873cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_ATTRIBUTE) 1874cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 1875cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto display : mDisplays) { 1876cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs; 1877cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1878cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 1879cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1880cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto config : configs) { 1881cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall int32_t value; 1882cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1883cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto attribute : requiredAttributes) { 1884cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, 1885cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall attribute, &value)); 1886cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_GE(value, 0) << "missing required attribute " 1887cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall << getAttributeName(attribute) << " for config " 1888cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall << config; 1889cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1890cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto attribute : optionalAttributes) { 1891cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, 1892cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall attribute, &value)); 1893cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1894cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1895cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1896cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 1897cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1898cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 will return a value of -1 for an invalid 1899cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall * attribute */ 1900cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_ATTRIBUTE_invalid_attribute) 1901cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 1902cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall const hwc2_attribute_t attribute = HWC2_ATTRIBUTE_INVALID; 1903cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1904cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto display : mDisplays) { 1905cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs; 1906cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1907cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 1908cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1909cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto config : configs) { 1910cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall int32_t value; 1911cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 1912cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1913cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, 1914cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall attribute, &value, &err)); 1915cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(value, -1) << "failed to return -1 for an invalid" 1916cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall " attribute for config " << config; 1917cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1918cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1919cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 1920cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1921cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 will fail to get attributes for a bad display */ 1922cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_ATTRIBUTE_bad_display) 1923cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 1924cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_display_t display; 1925cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall const hwc2_config_t config = 0; 1926cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall int32_t value; 1927cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 1928cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1929cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 1930cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1931cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto attribute : requiredAttributes) { 1932cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, attribute, 1933cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall &value, &err)); 1934cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 1935cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1936cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1937cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto attribute : optionalAttributes) { 1938cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, attribute, 1939cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall &value, &err)); 1940cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 1941cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1942cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 1943cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1944cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 will fail to get attributes for a bad config */ 1945cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_ATTRIBUTE_bad_config) 1946cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 1947cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto display : mDisplays) { 1948cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_config_t config; 1949cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall int32_t value; 1950cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 1951cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1952cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getInvalidConfig(display, &config)); 1953cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1954cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto attribute : requiredAttributes) { 1955cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, 1956cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall attribute, &value, &err)); 1957cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_CONFIG) << "returned wrong error code"; 1958cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1959cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1960cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto attribute : optionalAttributes) { 1961cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, 1962cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall attribute, &value, &err)); 1963cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_CONFIG) << "returned wrong error code"; 1964cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1965cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1966cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 1967cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1968cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 will get display configs for active displays */ 1969cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_CONFIGS) 1970cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 1971cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto display : mDisplays) { 1972cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs; 1973cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1974cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 1975cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1976cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 1977cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1978cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 will not get display configs for bad displays */ 1979cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_CONFIGS_bad_display) 1980cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 1981cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_display_t display; 1982cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs; 1983cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 1984cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1985cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 1986cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1987cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs, &err)); 1988cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1989cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 1990cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_TRUE(configs.empty()) << "returned configs for bad display"; 1991cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 1992cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1993cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 will return the same config list multiple 1994cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall * times in a row. */ 1995cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_CONFIGS_same) 1996cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 1997cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto display : mDisplays) { 1998cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs1, configs2; 1999cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2000cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs1)); 2001cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs2)); 2002cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2003cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_TRUE(std::is_permutation(configs1.begin(), configs1.end(), 2004cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall configs2.begin())) << "returned two different config sets"; 2005cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 2006cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 2007cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2008cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 does not return duplicate display configs */ 2009cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_CONFIGS_duplicate) 2010cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 2011cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto display : mDisplays) { 2012cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs; 2013cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2014cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 2015cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 2016cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::unordered_set<hwc2_config_t> configsSet(configs.begin(), 2017cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall configs.end()); 2018cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(configs.size(), configsSet.size()) << "returned duplicate" 2019cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall " configs"; 2020cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 2021cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 202293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 202393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall/* TESTCASE: Tests that the HWC2 returns the active config for a display */ 202493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa WallTEST_F(Hwc2Test, GET_ACTIVE_CONFIG) 202593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall{ 202693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall for (auto display : mDisplays) { 202793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall std::vector<hwc2_config_t> configs; 202893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 202993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 203093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 203193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall for (auto config : configs) { 203293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_config_t activeConfig; 203393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 203493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 203593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveConfig(display, &activeConfig)); 203693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 203793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_EQ(activeConfig, config) << "failed to get active config"; 203893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 203993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 204093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall} 204193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 204293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall/* TESTCASE: Tests that the HWC2 does not return an active config for a bad 204393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall * display. */ 204493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa WallTEST_F(Hwc2Test, GET_ACTIVE_CONFIG_bad_display) 204593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall{ 204693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_display_t display; 204793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_config_t activeConfig; 204893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 204993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 205093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 205193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 205293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveConfig(display, &activeConfig, &err)); 205393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 205493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 205593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall} 205693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 205793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall/* TESTCASE: Tests that the HWC2 either begins with a valid active config 205893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall * or returns an error when getActiveConfig is called. */ 205993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa WallTEST_F(Hwc2Test, GET_ACTIVE_CONFIG_bad_config) 206093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall{ 206193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall for (auto display : mDisplays) { 206293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall std::vector<hwc2_config_t> configs; 206393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_config_t activeConfig; 206493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 206593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 206693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 206793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 206893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall if (configs.empty()) 206993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall return; 207093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 207193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveConfig(display, &activeConfig, &err)); 207293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall if (err == HWC2_ERROR_NONE) { 207393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_NE(std::count(configs.begin(), configs.end(), 207493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall activeConfig), 0) << "active config is not found in " 207593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall " configs for display"; 207693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } else { 207793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_CONFIG) << "returned wrong error code"; 207893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 207993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 208093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall} 208193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 208293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall/* TESTCASE: Tests that the HWC2 can set every display config as an active 208393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall * config */ 208493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa WallTEST_F(Hwc2Test, SET_ACTIVE_CONFIG) 208593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall{ 208693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall for (auto display : mDisplays) { 208793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall std::vector<hwc2_config_t> configs; 208893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 208993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 209093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 209193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall for (auto config : configs) { 209293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 209393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 209493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 209593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall} 209693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 209793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set an active config for a bad display */ 209893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa WallTEST_F(Hwc2Test, SET_ACTIVE_CONFIG_bad_display) 209993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall{ 210093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_display_t display; 210193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall const hwc2_config_t config = 0; 210293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 210393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 210493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 210593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 210693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config, &err)); 210793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 210893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall} 210993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 211093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set an invalid active config */ 211193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa WallTEST_F(Hwc2Test, SET_ACTIVE_CONFIG_bad_config) 211293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall{ 211393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall for (auto display : mDisplays) { 211493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_config_t config; 211593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 211693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 211793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getInvalidConfig(display, &config)); 211893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 211993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config, &err)); 212093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_CONFIG) << "returned wrong error code"; 212193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 212293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall} 212303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 212403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 returns a valid value for getDozeSupport. */ 212503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, GET_DOZE_SUPPORT) 212603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 212703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall for (auto display : mDisplays) { 212803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall int32_t support = -1; 212903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 213003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getDozeSupport(display, &support)); 213103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 213203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_TRUE(support == 0 || support == 1) << "invalid doze support value"; 213303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 213403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 213503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 213603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 cannot get doze support for a bad display. */ 213703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, GET_DOZE_SUPPORT_bad_display) 213803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 213903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_display_t display; 214003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall int32_t support = -1; 214103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 214203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 214303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 214403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 214503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getDozeSupport(display, &support, &err)); 214603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 214703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 214803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 214903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 215003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 can set all supported power modes */ 215103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, SET_POWER_MODE) 215203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 215303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall for (auto display : mDisplays) { 215403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 215503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 215603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 215703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall int32_t support = -1; 215803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getDozeSupport(display, &support)); 215903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (support != 1) 216003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall return; 216103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 216203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_DOZE)); 216303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, 216403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall HWC2_POWER_MODE_DOZE_SUSPEND)); 216503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 216603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 216703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 216803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 216903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 217003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set a power mode for a bad display. */ 217103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, SET_POWER_MODE_bad_display) 217203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 217303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_display_t display; 217403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 217503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 217603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 217703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 217803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON, &err)); 217903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 218003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 218103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF, &err)); 218203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 218303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 218403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall int32_t support = -1; 218503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getDozeSupport(display, &support, &err)); 218603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (support != 1) 218703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall return; 218803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 218903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_DOZE, &err)); 219003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 219103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 219203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_DOZE_SUSPEND, 219303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall &err)); 219403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 219503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 219603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 219703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set an invalid power mode value. */ 219803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, SET_POWER_MODE_bad_parameter) 219903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 220003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall for (auto display : mDisplays) { 220103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_power_mode_t mode = static_cast<hwc2_power_mode_t>( 220203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall HWC2_POWER_MODE_DOZE_SUSPEND + 1); 220303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 220403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 220503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, mode, &err)); 220603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_PARAMETER) << "returned wrong error code " 220703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall << mode; 220803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 220903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 221003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 221103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 will return unsupported if it does not support 221203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall * an optional power mode. */ 221303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, SET_POWER_MODE_unsupported) 221403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 221503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall for (auto display : mDisplays) { 221603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall int32_t support = -1; 221703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 221803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 221903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getDozeSupport(display, &support, &err)); 222003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (support == 1) 222103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall return; 222203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 222303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_EQ(support, 0) << "invalid doze support value"; 222403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 222503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_DOZE, 222603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall &err)); 222703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_UNSUPPORTED) << "returned wrong error code"; 222803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 222903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, 223003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall HWC2_POWER_MODE_DOZE_SUSPEND, &err)); 223103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_UNSUPPORTED) << "returned wrong error code"; 223203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 223303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 223403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 223503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 can set the same power mode multiple times. */ 223603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, SET_POWER_MODE_stress) 223703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 223803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall for (auto display : mDisplays) { 223903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 224003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 224103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 224203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 224303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 224403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 224503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 224603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 224703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 224803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall int32_t support = -1; 224903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getDozeSupport(display, &support)); 225003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (support != 1) 225103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall return; 225203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 225303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_DOZE)); 225403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_DOZE)); 225503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 225603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, 225703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall HWC2_POWER_MODE_DOZE_SUSPEND)); 225803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, 225903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall HWC2_POWER_MODE_DOZE_SUSPEND)); 226003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 226103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 226203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 226303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 2264572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2265572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 can enable and disable vsync on active 2266572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall * displays */ 2267572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED) 2268572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 2269572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall for (auto display : mDisplays) { 2270572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_callback_data_t data = reinterpret_cast<hwc2_callback_data_t>( 2271572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall const_cast<char*>("data")); 2272572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2273572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 2274572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2275572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_VSYNC, data, 2276572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall []() { return; })); 2277572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2278572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE)); 2279572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2280572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 2281572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2282572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 2283572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 2284572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 2285572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2286572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 issues a valid vsync callback. */ 2287572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED_callback) 2288572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 2289572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall for (auto display : mDisplays) { 2290572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_display_t receivedDisplay; 2291572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall int64_t receivedTimestamp; 2292572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2293572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 2294572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2295572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(enableVsync(display)); 2296572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2297572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(waitForVsync(&receivedDisplay, 2298572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall &receivedTimestamp)); 2299572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2300572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall EXPECT_EQ(receivedDisplay, display) << "failed to get correct display"; 2301572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall EXPECT_GE(receivedTimestamp, 0) << "failed to get valid timestamp"; 2302572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2303572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(disableVsync(display)); 2304572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2305572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 2306572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 2307572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 2308572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2309572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 cannot enable a vsync for a bad display */ 2310572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED_bad_display) 2311572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 2312572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_display_t display; 2313572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_callback_data_t data = reinterpret_cast<hwc2_callback_data_t>( 2314572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall const_cast<char*>("data")); 2315572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 2316572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2317572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 2318572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2319572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_VSYNC, data, 2320572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall []() { return; })); 2321572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2322572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE, &err)); 2323572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 2324572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2325572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE, &err)); 2326572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 2327572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 2328572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2329572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 cannot enable an invalid vsync value */ 2330572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED_bad_parameter) 2331572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 2332572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall for (auto display : mDisplays) { 2333572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_callback_data_t data = reinterpret_cast<hwc2_callback_data_t>( 2334572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall const_cast<char*>("data")); 2335572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 2336572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2337572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 2338572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2339572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_VSYNC, data, 2340572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall []() { return; })); 2341572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2342572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_INVALID, 2343572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall &err)); 2344572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_PARAMETER) << "returned wrong error code"; 2345572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2346572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 2347572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 2348572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 2349572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2350572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 can enable and disable a vsync value multiple 2351572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall * times. */ 2352572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED_stress) 2353572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 2354572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall for (auto display : mDisplays) { 2355572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_callback_data_t data = reinterpret_cast<hwc2_callback_data_t>( 2356572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall const_cast<char*>("data")); 2357572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2358572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 2359572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2360572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_VSYNC, data, 2361572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall []() { return; })); 2362572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2363572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 2364572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2365572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE)); 2366572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE)); 2367572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2368572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 2369572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 2370572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2371572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 2372572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 2373572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 2374572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2375572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 can set a vsync enable value when the display 2376572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall * is off and no callback is registered. */ 2377572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED_no_callback_no_power) 2378572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 2379572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall const uint secs = 1; 2380572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2381572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall for (auto display : mDisplays) { 2382572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE)); 2383572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2384572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall sleep(secs); 2385572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2386572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 2387572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 2388572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 2389572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2390572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 can set a vsync enable value when no callback 2391572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall * is registered. */ 2392572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED_no_callback) 2393572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 2394572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall const uint secs = 1; 2395572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2396572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall for (auto display : mDisplays) { 2397572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 2398572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2399572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE)); 2400572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2401572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall sleep(secs); 2402572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2403572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 2404572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 2405572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 2406572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 2407572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 2408dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 2409dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall/* TESTCASE: Tests that the HWC2 returns a display name for each display */ 2410dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa WallTEST_F(Hwc2Test, GET_DISPLAY_NAME) 2411dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall{ 2412dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall for (auto display : mDisplays) { 2413dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall std::string name; 2414dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 2415dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayName(display, &name)); 2416dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall } 2417dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall} 2418dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 2419dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall/* TESTCASE: Tests that the HWC2 does not return a display name for a bad 2420dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall * display */ 2421dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa WallTEST_F(Hwc2Test, GET_DISPLAY_NAME_bad_display) 2422dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall{ 2423dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall hwc2_display_t display; 2424dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall std::string name; 2425dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 2426dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 2427dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 2428dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 2429dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayName(display, &name, &err)); 2430dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 2431dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall} 24326bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 24336bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall/* TESTCASE: Tests that the HWC2 can set basic composition types. */ 24346bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa WallTEST_F(Hwc2Test, SET_LAYER_COMPOSITION_TYPE) 24356bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall{ 24366bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 24376bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall setComposition, advanceComposition)); 24386bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall} 24396bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 24406bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall/* TESTCASE: Tests that the HWC2 can update a basic composition type on a 24416bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * layer. */ 24426bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa WallTEST_F(Hwc2Test, SET_LAYER_COMPOSITION_TYPE_update) 24436bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall{ 24446bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 24456bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall setComposition, advanceComposition)); 24466bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall} 24476bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 24486bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set a composition type for a bad layer */ 24496bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa WallTEST_F(Hwc2Test, SET_LAYER_COMPOSITION_TYPE_bad_layer) 24506bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall{ 24516bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 24526bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall setComposition)); 24536bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall} 24546bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 24556bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set a bad composition type */ 24566bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa WallTEST_F(Hwc2Test, SET_LAYER_COMPOSITION_TYPE_bad_parameter) 24576bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall{ 24586bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadParameter( 24596bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 24606bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_error_t* outErr) { 24616bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 24626bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerCompositionType(display, 24636bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall layer, HWC2_COMPOSITION_INVALID, outErr)); 24646bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 24656bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall )); 24666bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall} 2467ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 24682a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall/* TESTCASE: Tests that the HWC2 can set the cursor position of a layer. */ 24692a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa WallTEST_F(Hwc2Test, SET_CURSOR_POSITION) 24702a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall{ 24712a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 24722a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ::setCursorPosition, advanceCursorPosition)); 24732a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall} 24742a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 24752a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall/* TESTCASE: Tests that the HWC2 can update the cursor position of a layer. */ 24762a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa WallTEST_F(Hwc2Test, SET_CURSOR_POSITION_update) 24772a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall{ 24782a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 24792a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ::setCursorPosition, advanceCursorPosition)); 24802a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall} 24812a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 24822a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall/* TESTCASE: Tests that the HWC2 can set the cursor position of a layer when the 24832a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall * composition type has not been set to HWC2_COMPOSITION_CURSOR. */ 24842a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa WallTEST_F(Hwc2Test, SET_CURSOR_POSITION_composition_type_unset) 24852a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall{ 24862a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 24872a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 24885a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) { 24892a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 24905a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall const hwc_rect_t cursorPosition = testLayer->getCursorPosition(); 24912a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setCursorPosition(display, layer, 24922a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall cursorPosition.left, cursorPosition.top, outErr)); 24932a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall }, 24942a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 24952a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall advanceCursorPosition)); 24962a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall} 24972a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 24982a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set the cursor position of a bad 24992a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall * display. */ 25002a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa WallTEST_F(Hwc2Test, SET_CURSOR_POSITION_bad_display) 25012a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall{ 25022a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall hwc2_display_t display; 25032a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall hwc2_layer_t layer = 0; 25042a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall int32_t x = 0, y = 0; 25052a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 25062a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 25072a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 25082a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 25092a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_NO_FATAL_FAILURE(setCursorPosition(display, layer, x, y, &err)); 25102a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 25112a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall} 25122a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 25132a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set the cursor position of a bad layer. */ 25142a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa WallTEST_F(Hwc2Test, SET_CURSOR_POSITION_bad_layer) 25152a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall{ 25162a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 25172a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t badLayer, 25185a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) { 25192a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 25205a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall const hwc_rect_t cursorPosition = testLayer->getCursorPosition(); 25212a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setCursorPosition(display, 25222a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall badLayer, cursorPosition.left, cursorPosition.top, 25232a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall outErr)); 25242a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall } 25252a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall )); 25262a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall} 25272a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 2528ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall/* TESTCASE: Tests that the HWC2 can set a blend mode value of a layer. */ 2529ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa WallTEST_F(Hwc2Test, SET_LAYER_BLEND_MODE) 2530ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall{ 2531ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 2532ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall setBlendMode, advanceBlendMode)); 2533ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall} 2534ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 2535ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall/* TESTCASE: Tests that the HWC2 can update a blend mode value of a layer. */ 2536ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa WallTEST_F(Hwc2Test, SET_LAYER_BLEND_MODE_update) 2537ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall{ 2538ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 2539ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall setBlendMode, advanceBlendMode)); 2540ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall} 2541ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 2542ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set a blend mode for a bad layer. */ 2543ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa WallTEST_F(Hwc2Test, SET_LAYER_BLEND_MODE_bad_layer) 2544ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall{ 2545ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 2546ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall setBlendMode)); 2547ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall} 2548ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 2549ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set an invalid blend mode. */ 2550ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa WallTEST_F(Hwc2Test, SET_LAYER_BLEND_MODE_bad_parameter) 2551ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall{ 2552ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadParameter( 2553ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 2554ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall hwc2_error_t* outErr) { 2555ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 2556ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerBlendMode(display, 2557ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall layer, HWC2_BLEND_MODE_INVALID, outErr)); 2558ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall } 2559ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall )); 2560ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall} 2561b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 25625a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall/* TESTCASE: Tests that the HWC2 can set the buffer of a layer. */ 25635a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa WallTEST_F(Hwc2Test, SET_LAYER_BUFFER) 25645a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall{ 25655a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 25665a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall setBuffer, advanceBuffer)); 25675a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall} 25685a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 25695a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall/* TESTCASE: Tests that the HWC2 can update the buffer of a layer. */ 25705a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa WallTEST_F(Hwc2Test, SET_LAYER_BUFFER_update) 25715a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall{ 25725a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 25735a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall setBuffer, advanceBuffer)); 25745a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall} 25755a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 25765a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set the buffer of a bad layer. */ 25775a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa WallTEST_F(Hwc2Test, SET_LAYER_BUFFER_bad_layer) 25785a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall{ 25795a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 25805a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t badLayer, 25815a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) { 25825a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 25835a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall buffer_handle_t handle = nullptr; 25845a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall android::base::unique_fd acquireFence; 25855a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 25865a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall /* If there is not available buffer for the given buffer 25875a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall * properties, it should not fail this test case */ 25885a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall if (testLayer->getBuffer(&handle, &acquireFence) == 0) { 25895a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall *outErr = HWC2_ERROR_BAD_LAYER; 25905a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall return; 25915a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall } 25925a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 25935a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerBuffer(display, badLayer, 25945a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall handle, acquireFence, outErr)); 25955a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall } 25965a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall )); 25975a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall} 25985a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 25995a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall/* TESTCASE: Tests that the HWC2 can set an invalid buffer for a layer. */ 26005a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa WallTEST_F(Hwc2Test, SET_LAYER_BUFFER_bad_parameter) 26015a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall{ 26025a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadParameter( 26035a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 26045a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall hwc2_error_t* outErr) { 26055a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 26065a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall buffer_handle_t handle = nullptr; 26075a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall int32_t acquireFence = -1; 26085a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 26095a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerBuffer(display, layer, 26105a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall handle, acquireFence, outErr)); 26115a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall } 26125a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall )); 26135a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall} 26145a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 2615ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall/* TESTCASE: Tests that the HWC2 can set the color of a layer. */ 2616ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa WallTEST_F(Hwc2Test, SET_LAYER_COLOR) 2617ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall{ 2618ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 2619ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall setColor, advanceColor)); 2620ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall} 2621ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 2622ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall/* TESTCASE: Tests that the HWC2 can update the color of a layer. */ 2623ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa WallTEST_F(Hwc2Test, SET_LAYER_COLOR_update) 2624ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall{ 2625ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 2626ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall setColor, advanceColor)); 2627ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall} 2628ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 2629ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall/* TESTCASE: Tests that the HWC2 can set the color of a layer when the 2630ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall * composition type has not been set to HWC2_COMPOSITION_SOLID_COLOR. */ 2631ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa WallTEST_F(Hwc2Test, SET_LAYER_COLOR_composition_type_unset) 2632ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall{ 2633ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Basic, 2634ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 26355a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) { 2636ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 2637ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerColor(display, layer, 26385a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getColor(), outErr)); 2639ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall }, 2640ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 2641ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall advanceColor)); 2642ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall} 2643ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 2644ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set the color of a bad layer. */ 2645ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa WallTEST_F(Hwc2Test, SET_LAYER_COLOR_bad_layer) 2646ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall{ 2647ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 2648ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t badLayer, 26495a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) { 2650ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 2651ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerColor(display, badLayer, 26525a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getColor(), outErr)); 2653ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall } 2654ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall )); 2655ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall} 2656ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 2657b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall/* TESTCASE: Tests that the HWC2 can set the dataspace of a layer. */ 2658b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa WallTEST_F(Hwc2Test, SET_LAYER_DATASPACE) 2659b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall{ 2660b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 2661b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall setDataspace, advanceDataspace)); 2662b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall} 2663b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 2664b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall/* TESTCASE: Tests that the HWC2 can update the dataspace of a layer. */ 2665b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa WallTEST_F(Hwc2Test, SET_LAYER_DATASPACE_update) 2666b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall{ 2667b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 2668b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall setDataspace, advanceDataspace)); 2669b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall} 2670b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 2671b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set a dataspace for a bad layer. */ 2672b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa WallTEST_F(Hwc2Test, SET_LAYER_DATASPACE_bad_layer) 2673b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall{ 2674b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 2675b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall setDataspace)); 2676b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall} 26772b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 2678600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall/* TESTCASE: Tests that the HWC2 can set the display frame of a layer. */ 2679600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa WallTEST_F(Hwc2Test, SET_LAYER_DISPLAY_FRAME) 2680600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall{ 2681600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 2682600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall setDisplayFrame, advanceDisplayFrame)); 2683600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall} 2684600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 2685600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall/* TESTCASE: Tests that the HWC2 can update the display frame of a layer. */ 2686600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa WallTEST_F(Hwc2Test, SET_LAYER_DISPLAY_FRAME_update) 2687600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall{ 2688600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 2689600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall setDisplayFrame, advanceDisplayFrame)); 2690600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall} 2691600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 2692600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set the display frame of a bad layer. */ 2693600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa WallTEST_F(Hwc2Test, SET_LAYER_DISPLAY_FRAME_bad_layer) 2694600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall{ 2695600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 2696600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall setDisplayFrame)); 2697600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall} 2698600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 26992b1f53060ea8587a428f826cf7890354ff124722Marissa Wall/* TESTCASE: Tests that the HWC2 can set the plane alpha of a layer. */ 27002b1f53060ea8587a428f826cf7890354ff124722Marissa WallTEST_F(Hwc2Test, SET_LAYER_PLANE_ALPHA) 27012b1f53060ea8587a428f826cf7890354ff124722Marissa Wall{ 27022b1f53060ea8587a428f826cf7890354ff124722Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 27032b1f53060ea8587a428f826cf7890354ff124722Marissa Wall setPlaneAlpha, advancePlaneAlpha)); 27042b1f53060ea8587a428f826cf7890354ff124722Marissa Wall} 27052b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 27062b1f53060ea8587a428f826cf7890354ff124722Marissa Wall/* TESTCASE: Tests that the HWC2 can update the plane alpha of a layer. */ 27072b1f53060ea8587a428f826cf7890354ff124722Marissa WallTEST_F(Hwc2Test, SET_LAYER_PLANE_ALPHA_update) 27082b1f53060ea8587a428f826cf7890354ff124722Marissa Wall{ 27092b1f53060ea8587a428f826cf7890354ff124722Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 27102b1f53060ea8587a428f826cf7890354ff124722Marissa Wall setPlaneAlpha, advancePlaneAlpha)); 27112b1f53060ea8587a428f826cf7890354ff124722Marissa Wall} 27122b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 27132b1f53060ea8587a428f826cf7890354ff124722Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set a plane alpha for a bad layer. */ 27142b1f53060ea8587a428f826cf7890354ff124722Marissa WallTEST_F(Hwc2Test, SET_LAYER_PLANE_ALPHA_bad_layer) 27152b1f53060ea8587a428f826cf7890354ff124722Marissa Wall{ 27162b1f53060ea8587a428f826cf7890354ff124722Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 27172b1f53060ea8587a428f826cf7890354ff124722Marissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t badLayer, 27185a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t *outErr) { 27192b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 27202b1f53060ea8587a428f826cf7890354ff124722Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerPlaneAlpha(display, 27215a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall badLayer, testLayer->getPlaneAlpha(), outErr)); 27222b1f53060ea8587a428f826cf7890354ff124722Marissa Wall } 27232b1f53060ea8587a428f826cf7890354ff124722Marissa Wall )); 27242b1f53060ea8587a428f826cf7890354ff124722Marissa Wall} 2725ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 2726c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall/* TESTCASE: Tests that the HWC2 can set the source crop of a layer. */ 2727c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa WallTEST_F(Hwc2Test, SET_LAYER_SOURCE_CROP) 2728c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall{ 2729c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 2730c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall setSourceCrop, advanceSourceCrop)); 2731c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall} 2732c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 2733c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall/* TESTCASE: Tests that the HWC2 can update the source crop of a layer. */ 2734c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa WallTEST_F(Hwc2Test, SET_LAYER_SOURCE_CROP_update) 2735c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall{ 2736c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 2737c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall setSourceCrop, advanceSourceCrop)); 2738c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall} 2739c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 2740c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set the source crop of a bad layer. */ 2741c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa WallTEST_F(Hwc2Test, SET_LAYER_SOURCE_CROP_bad_layer) 2742c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall{ 2743c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 2744c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall setSourceCrop)); 2745c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall} 2746c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 2747ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall/* TESTCASE: Tests that the HWC2 can set the surface damage of a layer. */ 2748ad761818a4426b4e6a0696ba90e05056aa35553cMarissa WallTEST_F(Hwc2Test, SET_LAYER_SURFACE_DAMAGE) 2749ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall{ 2750ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 2751ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall setSurfaceDamage, advanceSurfaceDamage)); 2752ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall} 2753ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 2754ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall/* TESTCASE: Tests that the HWC2 can update the surface damage of a layer. */ 2755ad761818a4426b4e6a0696ba90e05056aa35553cMarissa WallTEST_F(Hwc2Test, SET_LAYER_SURFACE_DAMAGE_update) 2756ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall{ 2757ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 2758ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall setSurfaceDamage, advanceSurfaceDamage)); 2759ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall} 2760ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 2761ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set the surface damage of a bad layer. */ 2762ad761818a4426b4e6a0696ba90e05056aa35553cMarissa WallTEST_F(Hwc2Test, SET_LAYER_SURFACE_DAMAGE_bad_layer) 2763ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall{ 2764ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 2765ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall setSurfaceDamage)); 2766ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall} 2767ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 2768ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall/* TESTCASE: Tests that the HWC2 can set the transform value of a layer. */ 2769ac10819373b1ed4901f26c822484a789a7ca4be0Marissa WallTEST_F(Hwc2Test, SET_LAYER_TRANSFORM) 2770ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall{ 2771ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 2772ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall setTransform, advanceTransform)); 2773ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall} 2774ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 2775ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall/* TESTCASE: Tests that the HWC2 can update the transform value of a layer. */ 2776ac10819373b1ed4901f26c822484a789a7ca4be0Marissa WallTEST_F(Hwc2Test, SET_LAYER_TRANSFORM_update) 2777ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall{ 2778ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 2779ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall setTransform, advanceTransform)); 2780ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall} 2781ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 2782ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set the transform for a bad layer. */ 2783ac10819373b1ed4901f26c822484a789a7ca4be0Marissa WallTEST_F(Hwc2Test, SET_LAYER_TRANSFORM_bad_layer) 2784ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall{ 2785ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 2786ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall setTransform)); 2787ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall} 2788273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 2789f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall/* TESTCASE: Tests that the HWC2 can set the visible region of a layer. */ 2790f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa WallTEST_F(Hwc2Test, SET_LAYER_VISIBLE_REGION) 2791f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall{ 2792f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperties(Hwc2TestCoverage::Basic, 5, 2793f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 2794f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall Hwc2TestLayers* testLayers) { 2795f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 2796f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerVisibleRegion(display, 2797f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall layer, testLayers->getVisibleRegion(layer))); 2798f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall }, 2799f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 2800f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall advanceVisibleRegions)); 2801f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall} 2802f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 2803f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set the visible region of a bad layer. */ 2804f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa WallTEST_F(Hwc2Test, SET_LAYER_VISIBLE_REGION_bad_layer) 2805f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall{ 2806f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 2807f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall setVisibleRegion)); 2808f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall} 2809f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 2810273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall/* TESTCASE: Tests that the HWC2 can set the z order of a layer. */ 2811273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa WallTEST_F(Hwc2Test, SET_LAYER_Z_ORDER) 2812273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall{ 2813273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperties(Hwc2TestCoverage::Complete, 10, 2814273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 28155a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayers* testLayers) { 2816273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 2817273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerZOrder(display, layer, 28185a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayers->getZOrder(layer))); 2819f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall }, 2820f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 2821f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall /* TestLayer z orders are set during the construction of TestLayers 2822f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall * and cannot be updated. There is no need (or ability) to cycle 2823f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall * through additional z order configurations. */ 2824f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall [] (Hwc2TestLayers* /*testLayers*/) { 2825f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall return false; 2826273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 2827273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall )); 2828273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall} 2829273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 2830273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall/* TESTCASE: Tests that the HWC2 can update the z order of a layer. */ 2831273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa WallTEST_F(Hwc2Test, SET_LAYER_Z_ORDER_update) 2832273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall{ 2833273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall const std::vector<uint32_t> zOrders = { static_cast<uint32_t>(0), 2834273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall static_cast<uint32_t>(1), static_cast<uint32_t>(UINT32_MAX / 4), 2835273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall static_cast<uint32_t>(UINT32_MAX / 2), 2836273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall static_cast<uint32_t>(UINT32_MAX) }; 2837273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 2838273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall for (auto display : mDisplays) { 2839273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall std::vector<hwc2_config_t> configs; 2840273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 2841273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 2842273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 2843273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall for (auto config : configs) { 2844273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall hwc2_layer_t layer; 2845273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 2846273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 2847273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 2848273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 2849273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 2850273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall for (uint32_t zOrder : zOrders) { 2851273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall EXPECT_NO_FATAL_FAILURE(setLayerZOrder(display, layer, zOrder)); 2852273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 2853273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 2854273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 2855273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 2856273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 2857273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall} 2858273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 2859273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set the z order of a bad layer. */ 2860273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa WallTEST_F(Hwc2Test, SET_LAYER_Z_ORDER_bad_layer) 2861273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall{ 2862273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 2863273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall setZOrder)); 2864273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall} 28651cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 28661cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall/* TESTCASE: Tests that the HWC2 can display a layer with basic property 28671cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall * coverage */ 28681cd789cd2b300427467586f4ec721a8123f118b7Marissa WallTEST_F(Hwc2Test, VALIDATE_DISPLAY_basic) 28691cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall{ 28701cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_NO_FATAL_FAILURE(displayLayers(Hwc2TestCoverage::Basic, 1, 28711cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall [] (Hwc2Test* test, hwc2_display_t display, 2872706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall const std::vector<hwc2_layer_t>& layers, 2873706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall const Hwc2TestLayers& /*testLayers*/) { 28741cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 28751cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall uint32_t numTypes, numRequests; 28761cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall bool hasChanges = false; 28771cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 28781cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(test->validateDisplay(display, &numTypes, 28791cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall &numRequests, &hasChanges)); 28801cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall if (hasChanges) 28811cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_LE(numTypes, static_cast<uint32_t>(layers.size())) 28821cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall << "wrong number of requests"; 28831cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } 28841cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall )); 28851cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall} 28861cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 28871cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall/* TESTCASE: Tests that the HWC2 can display 5 layers with default coverage. */ 28881cd789cd2b300427467586f4ec721a8123f118b7Marissa WallTEST_F(Hwc2Test, VALIDATE_DISPLAY_default_5) 28891cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall{ 28901cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_NO_FATAL_FAILURE(displayLayers(Hwc2TestCoverage::Default, 5, 28911cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall [] (Hwc2Test* test, hwc2_display_t display, 2892706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall const std::vector<hwc2_layer_t>& layers, 2893706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall const Hwc2TestLayers& /*testLayers*/) { 28941cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 28951cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall uint32_t numTypes, numRequests; 28961cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall bool hasChanges = false; 28971cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 28981cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_NO_FATAL_FAILURE(test->validateDisplay(display, &numTypes, 28991cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall &numRequests, &hasChanges)); 29001cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall if (hasChanges) 29011cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_LE(numTypes, static_cast<uint32_t>(layers.size())) 29021cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall << "wrong number of requests"; 29031cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall } 29041cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall )); 29051cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall} 29061cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 29071cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall/* TESTCASE: Tests that the HWC2 cannot validate a bad display */ 29081cd789cd2b300427467586f4ec721a8123f118b7Marissa WallTEST_F(Hwc2Test, VALIDATE_DISPLAY_bad_display) 29091cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall{ 29101cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall hwc2_display_t display; 29111cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall uint32_t numTypes, numRequests; 29121cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 29131cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 29141cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 29151cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 29161cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall ASSERT_NO_FATAL_FAILURE(validateDisplay(display, &numTypes, &numRequests, 29171cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall &err)); 29181cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 29191cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall} 2920706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 2921706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall/* TESTCASE: Tests that the HWC2 can get display requests after validating a 2922706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall * basic layer. */ 2923706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa WallTEST_F(Hwc2Test, GET_DISPLAY_REQUESTS_basic) 2924706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall{ 2925706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(displayLayers(Hwc2TestCoverage::Basic, 1, 2926706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, 2927706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall const std::vector<hwc2_layer_t>& layers, 2928706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall const Hwc2TestLayers& /*testLayers*/) { 2929706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 2930706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall uint32_t numTypes, numRequests; 2931706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall bool hasChanges = false; 2932706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 2933706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(test->validateDisplay(display, &numTypes, 2934706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall &numRequests, &hasChanges)); 2935706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall if (hasChanges) 2936706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_LE(numTypes, layers.size()) 2937706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << "wrong number of requests"; 2938706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 2939706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_NO_FATAL_FAILURE(test->handleRequests(display, layers, 2940706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall numRequests)); 2941706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 2942706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall )); 2943706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall} 2944706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 2945706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall/* TESTCASE: Tests that the HWC2 cannot get display requests from a bad display */ 2946706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa WallTEST_F(Hwc2Test, GET_DISPLAY_REQUESTS_bad_display) 2947706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall{ 2948706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_display_t display; 2949706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_display_request_t displayRequests; 2950706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_layer_t> layers; 2951706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_layer_request_t> layerRequests; 2952706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 2953706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 2954706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 2955706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 2956706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_NO_FATAL_FAILURE(getDisplayRequests(display, &displayRequests, 2957706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall &layers, &layerRequests, &err)); 2958706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 2959706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall} 2960706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 2961706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall/* TESTCASE: Tests that the HWC2 cannot get display requests from an non 2962706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall * validated display. */ 2963706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa WallTEST_F(Hwc2Test, GET_DISPLAY_REQUESTS_not_validated) 2964706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall{ 2965706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(displayNonValidatedLayers(5, 2966706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, 2967706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_layer_t>* layers) { 2968706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 2969706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_display_request_t displayRequests; 2970706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_layer_request_t> layerRequests; 2971706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 2972706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 2973706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(test->getDisplayRequests(display, 2974706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall &displayRequests, layers, &layerRequests, &err)); 2975706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_EQ(err, HWC2_ERROR_NOT_VALIDATED) 2976706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << "returned wrong error code"; 2977706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 2978706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall )); 2979706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall} 2980706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 2981706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall/* TESTCASE: Tests that the HWC2 can get changed composition types after 2982706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall * validating a basic layer. */ 2983706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa WallTEST_F(Hwc2Test, GET_CHANGED_COMPOSITION_TYPES_basic) 2984706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall{ 2985706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(displayLayers(Hwc2TestCoverage::Basic, 1, 2986706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, 2987706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall const std::vector<hwc2_layer_t>& layers, 2988706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall const Hwc2TestLayers& testLayers) { 2989706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 2990706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall uint32_t numTypes, numRequests; 2991706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall bool hasChanges = false; 2992706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 2993706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(test->validateDisplay(display, &numTypes, 2994706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall &numRequests, &hasChanges)); 2995706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall if (hasChanges) 2996706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_LE(numTypes, layers.size()) 2997706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << "wrong number of requests"; 2998706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 2999706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_NO_FATAL_FAILURE(test->handleCompositionChanges(display, 3000706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall testLayers, layers, numTypes)); 3001706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 3002706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall )); 3003706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall} 3004706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3005706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall/* TESTCASE: Tests that the HWC2 cannot get changed composition types from a bad 3006706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall * display */ 3007706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa WallTEST_F(Hwc2Test, GET_CHANGED_COMPOSITION_TYPES_bad_display) 3008706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall{ 3009706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_display_t display; 3010706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_layer_t> layers; 3011706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_composition_t> types; 3012706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 3013706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3014706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 3015706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3016706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_NO_FATAL_FAILURE(getChangedCompositionTypes(display, &layers, 3017706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall &types, &err)); 3018706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 3019706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall} 3020706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3021706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall/* TESTCASE: Tests that the HWC2 cannot get changed composition types from an non 3022706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall * validated display. */ 3023706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa WallTEST_F(Hwc2Test, GET_CHANGED_COMPOSITION_TYPES_not_validated) 3024706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall{ 3025706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(displayNonValidatedLayers(5, 3026706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, 3027706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_layer_t>* layers) { 3028706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3029706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_composition_t> types; 3030706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 3031706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3032706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(test->getChangedCompositionTypes( 3033706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall display, layers, &types, &err)); 3034706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_EQ(err, HWC2_ERROR_NOT_VALIDATED) 3035706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << "returned wrong error code"; 3036706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 3037706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall )); 3038706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall} 3039706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3040706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall/* TESTCASE: Tests that the HWC2 can accept display changes after validating a 3041706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall * basic layer. */ 3042706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa WallTEST_F(Hwc2Test, ACCEPT_DISPLAY_CHANGES_basic) 3043706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall{ 3044706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(displayLayers(Hwc2TestCoverage::Basic, 1, 3045706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, 3046706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall const std::vector<hwc2_layer_t>& layers, 3047706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall const Hwc2TestLayers& testLayers) { 3048706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3049706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall uint32_t numTypes, numRequests; 3050706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall bool hasChanges = false; 3051706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3052706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(test->validateDisplay(display, &numTypes, 3053706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall &numRequests, &hasChanges)); 3054706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall if (hasChanges) 3055706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_LE(numTypes, layers.size()) 3056706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << "wrong number of requests"; 3057706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3058706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(test->handleCompositionChanges(display, 3059706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall testLayers, layers, numTypes)); 3060706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3061706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_NO_FATAL_FAILURE(test->acceptDisplayChanges(display)); 3062706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 3063706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall )); 3064706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall} 3065706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3066706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall/* TESTCASE: Tests that the HWC2 cannot accept display changes from a bad 3067706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall * display */ 3068706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa WallTEST_F(Hwc2Test, ACCEPT_DISPLAY_CHANGES_bad_display) 3069706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall{ 3070706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_display_t display; 3071706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 3072706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3073706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 3074706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3075706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_NO_FATAL_FAILURE(acceptDisplayChanges(display, &err)); 3076706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 3077706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall} 3078706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3079706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall/* TESTCASE: Tests that the HWC2 cannot accept display changes from an non 3080706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall * validated display. */ 3081706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa WallTEST_F(Hwc2Test, ACCEPT_DISPLAY_CHANGES_not_validated) 3082706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall{ 3083706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(displayNonValidatedLayers(5, 3084706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, 3085706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall std::vector<hwc2_layer_t>* /*layers*/) { 3086706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3087706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 3088706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall 3089706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall ASSERT_NO_FATAL_FAILURE(test->acceptDisplayChanges(display, &err)); 3090706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall EXPECT_EQ(err, HWC2_ERROR_NOT_VALIDATED) 3091706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall << "returned wrong error code"; 3092706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall } 3093706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall )); 3094706178db2a89e2bf44e95bfad74dc4451a277b3dMarissa Wall} 3095f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3096f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall/* TESTCASE: Tests that the HWC2 supports client target with required values */ 3097f18cfb0a780c69f12439457ccc3f5272db767fddMarissa WallTEST_F(Hwc2Test, GET_CLIENT_TARGET_SUPPORT) 3098f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall{ 3099f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(setClientTargetSupport(Hwc2TestCoverage::Default, 3100f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, 3101f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const Hwc2TestClientTargetSupport& testClientTargetSupport) { 3102f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3103f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const Area bufferArea = testClientTargetSupport.getBufferArea(); 3104f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const android_pixel_format_t format = HAL_PIXEL_FORMAT_RGBA_8888; 3105f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3106f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(test->getClientTargetSupport(display, 3107f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall bufferArea.width, bufferArea.height, format, 3108f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall testClientTargetSupport.getDataspace())); 3109f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall }, 3110f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3111f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall advanceClientTargetSupport)); 3112f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall} 3113f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3114f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall/* TESTCASE: Tests that the HWC2 cannot get client target support for a bad 3115f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall * display. */ 3116f18cfb0a780c69f12439457ccc3f5272db767fddMarissa WallTEST_F(Hwc2Test, GET_CLIENT_TARGET_SUPPORT_bad_display) 3117f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall{ 3118f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(setClientTargetSupport(Hwc2TestCoverage::Default, 3119f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall [] (Hwc2Test* test, hwc2_display_t /*display*/, 3120f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const Hwc2TestClientTargetSupport& testClientTargetSupport) { 3121f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3122f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const Area bufferArea = testClientTargetSupport.getBufferArea(); 3123f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const android_pixel_format_t format = HAL_PIXEL_FORMAT_RGBA_8888; 3124f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall hwc2_display_t badDisplay; 3125f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 3126f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3127f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(test->getBadDisplay(&badDisplay)); 3128f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3129f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(test->getClientTargetSupport(badDisplay, 3130f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall bufferArea.width, bufferArea.height, format, 3131f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall testClientTargetSupport.getDataspace(), &err)); 3132f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 3133f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall }, 3134f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3135f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall advanceClientTargetSupport)); 3136f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall} 3137f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3138f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall/* TESTCASE: Tests that the HWC2 either supports or returns error unsupported 3139f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall * for a variety of client target values. */ 3140f18cfb0a780c69f12439457ccc3f5272db767fddMarissa WallTEST_F(Hwc2Test, GET_CLIENT_TARGET_SUPPORT_unsupported) 3141f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall{ 3142f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(setClientTargetSupport(Hwc2TestCoverage::Complete, 3143f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, 3144f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const Hwc2TestClientTargetSupport& testClientTargetSupport) { 3145f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3146f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const Area bufferArea = testClientTargetSupport.getBufferArea(); 3147f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const android_pixel_format_t format = HAL_PIXEL_FORMAT_RGBA_8888; 3148f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 3149f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3150f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(test->getClientTargetSupport(display, 3151f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall bufferArea.width, bufferArea.height, format, 3152f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall testClientTargetSupport.getDataspace(), &err)); 3153f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall EXPECT_TRUE(err == HWC2_ERROR_NONE 3154f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall || err == HWC2_ERROR_UNSUPPORTED) 3155f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall << "returned wrong error code"; 3156f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall }, 3157f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3158f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall advanceClientTargetSupport)); 3159f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall} 3160f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3161f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall/* TESTCASE: Tests that the HWC2 can set a client target buffer for a basic 3162f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall * layer. */ 3163f18cfb0a780c69f12439457ccc3f5272db767fddMarissa WallTEST_F(Hwc2Test, SET_CLIENT_TARGET_basic) 3164f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall{ 3165f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const android_dataspace_t dataspace = HAL_DATASPACE_UNKNOWN; 3166f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const hwc_region_t damage = { }; 3167f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const size_t layerCnt = 1; 3168f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3169f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall for (auto display : mDisplays) { 3170f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall std::vector<hwc2_config_t> configs; 3171f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3172f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 3173f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3174f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 3175f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3176f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall for (auto config : configs) { 3177f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall Area displayArea; 3178f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall std::vector<hwc2_layer_t> layers; 3179f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3180f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 3181f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(getActiveDisplayArea(display, &displayArea)); 3182f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3183f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayers(display, &layers, layerCnt)); 3184f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall Hwc2TestLayers testLayers(layers, Hwc2TestCoverage::Basic, 3185f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall displayArea); 3186f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3187f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall if (!testLayers.optimizeLayouts()) 3188f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall continue; 3189f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3190f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall Hwc2TestClientTarget testClientTarget; 3191f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3192f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall do { 3193f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall std::set<hwc2_layer_t> clientLayers; 3194f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall std::set<hwc2_layer_t> clearLayers; 3195f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall uint32_t numTypes, numRequests; 3196f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall bool hasChanges, skip; 3197f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall bool flipClientTarget; 3198f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall buffer_handle_t handle; 3199f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall int32_t acquireFence; 3200f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3201f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperties(display, layers, 3202f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall &testLayers, &skip)); 3203f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall if (skip) 3204f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall continue; 3205f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3206f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(validateDisplay(display, &numTypes, 3207f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall &numRequests, &hasChanges)); 3208f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall if (hasChanges) 3209f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall EXPECT_LE(numTypes, layers.size()) 3210f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall << "wrong number of requests"; 3211f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3212f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(handleCompositionChanges(display, 3213f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall testLayers, layers, numTypes, &clientLayers)); 3214f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(handleRequests(display, layers, 3215f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall numRequests, &clearLayers, &flipClientTarget)); 3216f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_EQ(testClientTarget.getBuffer(testLayers, clientLayers, 3217f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall clearLayers, flipClientTarget, displayArea, &handle, 3218f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall &acquireFence), 0); 3219f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall EXPECT_NO_FATAL_FAILURE(setClientTarget(display, handle, 3220f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall acquireFence, dataspace, damage)); 3221f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3222f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall if (acquireFence >= 0) 3223f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall close(acquireFence); 3224f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3225f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } while (testLayers.advance()); 3226f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3227f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayers(display, std::move(layers))); 3228f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } 3229f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3230f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 3231f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } 3232f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall} 3233f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3234f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set a client target for a bad display. */ 3235f18cfb0a780c69f12439457ccc3f5272db767fddMarissa WallTEST_F(Hwc2Test, SET_CLIENT_TARGET_bad_display) 3236f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall{ 3237f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall hwc2_display_t display; 3238f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall std::vector<hwc2_layer_t> layers; 3239f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const Area displayArea = {0, 0}; 3240f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall Hwc2TestLayers testLayers(layers, Hwc2TestCoverage::Default, displayArea); 3241f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall std::set<hwc2_layer_t> clientLayers; 3242f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall std::set<hwc2_layer_t> flipClientTargetLayers; 3243f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall bool flipClientTarget = true; 3244f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const android_dataspace_t dataspace = HAL_DATASPACE_UNKNOWN; 3245f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const hwc_region_t damage = { }; 3246f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall buffer_handle_t handle; 3247f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall int32_t acquireFence; 3248f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 3249f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3250f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 3251f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3252f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall Hwc2TestClientTarget testClientTarget; 3253f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3254f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall ASSERT_EQ(testClientTarget.getBuffer(testLayers, clientLayers, 3255f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall flipClientTargetLayers, flipClientTarget, displayArea, &handle, 3256f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall &acquireFence), 0); 3257f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3258f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall EXPECT_NO_FATAL_FAILURE(setClientTarget(display, handle, acquireFence, 3259f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall dataspace, damage, &err)); 3260f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3261f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall if (acquireFence >= 0) 3262f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall close(acquireFence); 3263f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 3264f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 3265f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall} 3266