Hwc2Test.cpp revision f7618ed1b4d806e06c872c0fccce57163cf93b6a
14d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall/* 24d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * Copyright (C) 2016 The Android Open Source Project 34d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * 44d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * Licensed under the Apache License, Version 2.0 (the "License"); 54d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * you may not use this file except in compliance with the License. 64d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * You may obtain a copy of the License at 74d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * 84d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * http://www.apache.org/licenses/LICENSE-2.0 94d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * 104d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * Unless required by applicable law or agreed to in writing, software 114d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * distributed under the License is distributed on an "AS IS" BASIS, 124d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * See the License for the specific language governing permissions and 144d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * limitations under the License. 154d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall */ 164d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 174d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall#include <array> 18cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall#include <unordered_set> 194d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall#include <gtest/gtest.h> 204d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall#include <dlfcn.h> 215a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall#include <android-base/unique_fd.h> 224d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall#include <hardware/hardware.h> 234d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 244d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall#define HWC2_INCLUDE_STRINGIFICATION 254d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall#define HWC2_USE_CPP11 264d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall#include <hardware/hwcomposer2.h> 274d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall#undef HWC2_INCLUDE_STRINGIFICATION 284d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall#undef HWC2_USE_CPP11 294d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 306bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall#include "Hwc2TestLayer.h" 31273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall#include "Hwc2TestLayers.h" 326bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 33cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wallvoid hwc2TestHotplugCallback(hwc2_callback_data_t callbackData, 34cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2_display_t display, int32_t connected); 35572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wallvoid hwc2TestVsyncCallback(hwc2_callback_data_t callbackData, 36572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_display_t display, int64_t timestamp); 37cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 384d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wallclass Hwc2Test : public testing::Test { 394d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wallpublic: 404d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 414d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall virtual void SetUp() 424d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall { 434d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall hw_module_t const* hwc2Module; 444d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 454d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall int err = hw_get_module(HWC_HARDWARE_MODULE_ID, &hwc2Module); 464d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall ASSERT_GE(err, 0) << "failed to get hwc hardware module: " 474d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall << strerror(-err); 484d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 494d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall /* The following method will fail if you have not run 504d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall * "adb shell stop" */ 514d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall err = hwc2_open(hwc2Module, &mHwc2Device); 524d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall ASSERT_GE(err, 0) << "failed to open hwc hardware module: " 534d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall << strerror(-err); 54cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 55cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall populateDisplays(); 564d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall } 574d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 584d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall virtual void TearDown() 594d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall { 601db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 611db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (auto itr = mLayers.begin(); itr != mLayers.end();) { 621db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_display_t display = itr->first; 631db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_layer_t layer = itr->second; 641db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall itr++; 651db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall /* Destroys and removes the layer from mLayers */ 661db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall destroyLayer(display, layer); 671db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 681db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 6903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall for (auto itr = mActiveDisplays.begin(); itr != mActiveDisplays.end();) { 7003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_display_t display = *itr; 7103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall itr++; 7203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall /* Sets power mode to off and removes the display from 7303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall * mActiveDisplays */ 7403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall setPowerMode(display, HWC2_POWER_MODE_OFF); 7503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 7603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 774d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall if (mHwc2Device) 784d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall hwc2_close(mHwc2Device); 794d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall } 804d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 81a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall void registerCallback(hwc2_callback_descriptor_t descriptor, 82a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall hwc2_callback_data_t callbackData, hwc2_function_pointer_t pointer, 83a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall hwc2_error_t* outErr = nullptr) 84a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall { 85a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_REGISTER_CALLBACK>( 86a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall getFunction(HWC2_FUNCTION_REGISTER_CALLBACK)); 87a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 88a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 89a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, descriptor, 90a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall callbackData, pointer)); 91a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall if (outErr) { 92a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall *outErr = err; 93a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall } else { 94a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to register callback"; 95a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall } 96a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall } 97a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 98cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall void getDisplayType(hwc2_display_t display, hwc2_display_type_t* outType, 99cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2_error_t* outErr = nullptr) 100cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall { 101cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_GET_DISPLAY_TYPE>( 102cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall getFunction(HWC2_FUNCTION_GET_DISPLAY_TYPE)); 103cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 104cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 105cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 106cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall reinterpret_cast<int32_t*>(outType))); 107cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall if (outErr) { 108cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall *outErr = err; 109cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } else { 110cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to get display type"; 111cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 112cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 113cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 114cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall /* If the populateDisplays function is still receiving displays and the 115cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall * display is connected, the display handle is stored in mDisplays. */ 116cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall void hotplugCallback(hwc2_display_t display, int32_t connected) 117cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall { 118cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::lock_guard<std::mutex> lock(mHotplugMutex); 119cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 120cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall if (mHotplugStatus != Hwc2TestHotplugStatus::Receiving) 121cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall return; 122cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 123cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall if (connected == HWC2_CONNECTION_CONNECTED) 124cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall mDisplays.insert(display); 125cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 126cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall mHotplugCv.notify_all(); 127cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 128cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1291db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall void createLayer(hwc2_display_t display, hwc2_layer_t* outLayer, 1301db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_error_t* outErr = nullptr) 1311db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall { 1321db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_CREATE_LAYER>( 1331db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall getFunction(HWC2_FUNCTION_CREATE_LAYER)); 1341db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 1351db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 1361db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 1371db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall outLayer)); 1381db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 1391db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall if (err == HWC2_ERROR_NONE) 1401db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall mLayers.insert(std::make_pair(display, *outLayer)); 1411db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 1421db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall if (outErr) { 1431db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall *outErr = err; 1441db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } else { 1451db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to create layer"; 1461db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 1471db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 1481db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 1491db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall void destroyLayer(hwc2_display_t display, hwc2_layer_t layer, 1501db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_error_t* outErr = nullptr) 1511db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall { 1521db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_DESTROY_LAYER>( 1531db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall getFunction(HWC2_FUNCTION_DESTROY_LAYER)); 1541db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 1551db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 1561db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer)); 1571db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 1581db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall if (err == HWC2_ERROR_NONE) 1591db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall mLayers.erase(std::make_pair(display, layer)); 1601db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 1611db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall if (outErr) { 1621db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall *outErr = err; 1631db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } else { 1641db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to destroy layer " 1651db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall << layer; 1661db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 1671db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 1681db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 169cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall void getDisplayAttribute(hwc2_display_t display, hwc2_config_t config, 170cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_attribute_t attribute, int32_t* outValue, 171cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_error_t* outErr = nullptr) 172cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall { 173cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_GET_DISPLAY_ATTRIBUTE>( 174cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall getFunction(HWC2_FUNCTION_GET_DISPLAY_ATTRIBUTE)); 175cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 176cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 177cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, config, 178cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall attribute, outValue)); 179cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 180cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall if (outErr) { 181cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall *outErr = err; 182cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } else { 183cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to get display attribute " 184cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall << getAttributeName(attribute) << " for config " << config; 185cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 186cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 187cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 188cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall void getDisplayConfigs(hwc2_display_t display, 189cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t>* outConfigs, 190cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_error_t* outErr = nullptr) 191cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall { 192cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_GET_DISPLAY_CONFIGS>( 193cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall getFunction(HWC2_FUNCTION_GET_DISPLAY_CONFIGS)); 194cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 195cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 196cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall uint32_t numConfigs = 0; 197cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 198cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 199cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall &numConfigs, nullptr)); 200cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 201cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall if (err == HWC2_ERROR_NONE) { 202cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall outConfigs->resize(numConfigs); 203cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 204cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 205cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall &numConfigs, outConfigs->data())); 206cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 207cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 208cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall if (outErr) { 209cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall *outErr = err; 210cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } else { 211cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to get configs for" 212cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall " display " << display; 213cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 214cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 215cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 21693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall void getActiveConfig(hwc2_display_t display, hwc2_config_t* outConfig, 21793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_error_t* outErr = nullptr) 21893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall { 21993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_GET_ACTIVE_CONFIG>( 22093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall getFunction(HWC2_FUNCTION_GET_ACTIVE_CONFIG)); 22193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 22293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 22393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 22493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall outConfig)); 22593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall if (outErr) { 22693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall *outErr = err; 22793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } else { 22893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to get active config on" 22993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall " display " << display; 23093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 23193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 23293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 23393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall void setActiveConfig(hwc2_display_t display, hwc2_config_t config, 23493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_error_t* outErr = nullptr) 23593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall { 23693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_ACTIVE_CONFIG>( 23793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall getFunction(HWC2_FUNCTION_SET_ACTIVE_CONFIG)); 23893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 23993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 24093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, config)); 24193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall if (outErr) { 24293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall *outErr = err; 24393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } else { 24493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set active config " 24593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall << config; 24693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 24793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 24893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 24903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall void getDozeSupport(hwc2_display_t display, int32_t* outSupport, 25003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_error_t* outErr = nullptr) 25103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall { 25203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_GET_DOZE_SUPPORT>( 25303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall getFunction(HWC2_FUNCTION_GET_DOZE_SUPPORT)); 25403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 25503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 25603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 25703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall outSupport)); 25803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (outErr) { 25903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall *outErr = err; 26003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } else { 26103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to get doze support on" 26203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall " display " << display; 26303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 26403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 26503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 26603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall void setPowerMode(hwc2_display_t display, hwc2_power_mode_t mode, 26703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_error_t* outErr = nullptr) 26803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall { 26903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_POWER_MODE>( 27003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall getFunction(HWC2_FUNCTION_SET_POWER_MODE)); 27103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 27203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 27303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 27403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall mode)); 27503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (outErr) { 27603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall *outErr = err; 27703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (err != HWC2_ERROR_NONE) 27803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall return; 27903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } else { 28003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set power mode " 28103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall << getPowerModeName(mode) << " on display " << display; 28203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 28303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 28403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (mode == HWC2_POWER_MODE_OFF) { 28503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall mActiveDisplays.erase(display); 28603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } else { 28703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall mActiveDisplays.insert(display); 28803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 28903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 29003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 291572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall void setVsyncEnabled(hwc2_display_t display, hwc2_vsync_t enabled, 292572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_error_t* outErr = nullptr) 293572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall { 294572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_VSYNC_ENABLED>( 295572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall getFunction(HWC2_FUNCTION_SET_VSYNC_ENABLED)); 296572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 297572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 298572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 299572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall enabled)); 300572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall if (outErr) { 301572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall *outErr = err; 302572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } else { 303572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set vsync enabled " 304572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall << getVsyncName(enabled); 305572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 306572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 307572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 308572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall void vsyncCallback(hwc2_display_t display, int64_t timestamp) 309572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall { 310572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall std::lock_guard<std::mutex> lock(mVsyncMutex); 311572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall mVsyncDisplay = display; 312572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall mVsyncTimestamp = timestamp; 313572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall mVsyncCv.notify_all(); 314572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 315572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 316dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall void getDisplayName(hwc2_display_t display, std::string* outName, 317dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall hwc2_error_t* outErr = nullptr) 318dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall { 319dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_GET_DISPLAY_NAME>( 320dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall getFunction(HWC2_FUNCTION_GET_DISPLAY_NAME)); 321dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 322dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 323dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall uint32_t size = 0; 324dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 325dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, &size, 326dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall nullptr)); 327dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 328dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall if (err == HWC2_ERROR_NONE) { 329dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall std::vector<char> name(size); 330dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 331dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, &size, 332dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall name.data())); 333dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 334dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall outName->assign(name.data()); 335dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall } 336dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 337dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall if (outErr) { 338dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall *outErr = err; 339dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall } else { 340dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to get display name for " 341dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall << display; 342dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall } 343dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall } 344dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 3456bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall void setLayerCompositionType(hwc2_display_t display, hwc2_layer_t layer, 3466bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_composition_t composition, hwc2_error_t* outErr = nullptr) 3476bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall { 3486bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_COMPOSITION_TYPE>( 3496bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_COMPOSITION_TYPE)); 3506bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 3516bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 3526bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 3536bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall composition)); 3546bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall if (outErr) { 3556bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall *outErr = err; 3566bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } else { 3576bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer composition" 3586bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall " type " << getCompositionName(composition); 3596bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 3606bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 3616bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 3622a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall void setCursorPosition(hwc2_display_t display, hwc2_layer_t layer, 3632a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall int32_t x, int32_t y, hwc2_error_t* outErr = nullptr) 3642a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall { 3652a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_CURSOR_POSITION>( 3662a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall getFunction(HWC2_FUNCTION_SET_CURSOR_POSITION)); 3672a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 3682a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 3692a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, x, 3702a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall y)); 3712a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall if (outErr) { 3722a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall *outErr = err; 3732a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall } else { 3742a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set cursor position"; 3752a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall } 3762a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall } 3772a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 378ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall void setLayerBlendMode(hwc2_display_t display, hwc2_layer_t layer, 379ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall hwc2_blend_mode_t mode, hwc2_error_t* outErr = nullptr) 380ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall { 381ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_BLEND_MODE>( 382ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_BLEND_MODE)); 383ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 384ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 385ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 386ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall mode)); 387ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall if (outErr) { 388ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall *outErr = err; 389ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall } else { 390ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer blend mode " 391ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall << getBlendModeName(mode); 392ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall } 393ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall } 394ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 3955a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall void setLayerBuffer(hwc2_display_t display, hwc2_layer_t layer, 3965a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall buffer_handle_t buffer, int32_t acquireFence, 3975a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall hwc2_error_t* outErr = nullptr) 3985a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall { 3995a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_BUFFER>( 4005a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_BUFFER)); 4015a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 4025a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 4035a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 4045a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall buffer, acquireFence)); 4055a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall if (outErr) { 4065a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall *outErr = err; 4075a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall } else { 4085a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer buffer"; 4095a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall } 4105a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall } 4115a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 412ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall void setLayerColor(hwc2_display_t display, hwc2_layer_t layer, 413ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall hwc_color_t color, hwc2_error_t* outErr = nullptr) 414ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall { 415ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_COLOR>( 416ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_COLOR)); 417ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 418ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 419ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 420ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall color)); 421ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall if (outErr) { 422ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall *outErr = err; 423ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall } else { 424ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer color"; 425ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall } 426ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall } 427ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 428b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall void setLayerDataspace(hwc2_display_t display, hwc2_layer_t layer, 429b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall android_dataspace_t dataspace, hwc2_error_t* outErr = nullptr) 430b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall { 431b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_DATASPACE>( 432b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_DATASPACE)); 433b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 434b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 435b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, 436b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall layer, dataspace)); 437b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall if (outErr) { 438b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall *outErr = err; 439b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall } else { 440b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer dataspace"; 441b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall } 442b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall } 443b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 444600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall void setLayerDisplayFrame(hwc2_display_t display, hwc2_layer_t layer, 445600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall const hwc_rect_t& displayFrame, hwc2_error_t* outErr = nullptr) 446600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall { 447600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_DISPLAY_FRAME>( 448600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_DISPLAY_FRAME)); 449600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 450600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 451600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 452600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall displayFrame)); 453600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall if (outErr) { 454600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall *outErr = err; 455600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall } else { 456600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer display" 457600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall " frame"; 458600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall } 459600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall } 460600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 4612b1f53060ea8587a428f826cf7890354ff124722Marissa Wall void setLayerPlaneAlpha(hwc2_display_t display, hwc2_layer_t layer, 4622b1f53060ea8587a428f826cf7890354ff124722Marissa Wall float alpha, hwc2_error_t* outErr = nullptr) 4632b1f53060ea8587a428f826cf7890354ff124722Marissa Wall { 4642b1f53060ea8587a428f826cf7890354ff124722Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_PLANE_ALPHA>( 4652b1f53060ea8587a428f826cf7890354ff124722Marissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_PLANE_ALPHA)); 4662b1f53060ea8587a428f826cf7890354ff124722Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 4672b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 4682b1f53060ea8587a428f826cf7890354ff124722Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 4692b1f53060ea8587a428f826cf7890354ff124722Marissa Wall alpha)); 4702b1f53060ea8587a428f826cf7890354ff124722Marissa Wall if (outErr) { 4712b1f53060ea8587a428f826cf7890354ff124722Marissa Wall *outErr = err; 4722b1f53060ea8587a428f826cf7890354ff124722Marissa Wall } else { 4732b1f53060ea8587a428f826cf7890354ff124722Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer plane alpha " 4742b1f53060ea8587a428f826cf7890354ff124722Marissa Wall << alpha; 4752b1f53060ea8587a428f826cf7890354ff124722Marissa Wall } 4762b1f53060ea8587a428f826cf7890354ff124722Marissa Wall } 4772b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 478c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall void setLayerSourceCrop(hwc2_display_t display, hwc2_layer_t layer, 479c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall const hwc_frect_t& sourceCrop, hwc2_error_t* outErr = nullptr) 480c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall { 481c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_SOURCE_CROP>( 482c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_SOURCE_CROP)); 483c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 484c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 485c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 486c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall sourceCrop)); 487c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall if (outErr) { 488c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall *outErr = err; 489c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall } else { 490c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer source crop"; 491c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall } 492c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall } 493c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 494ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall void setLayerSurfaceDamage(hwc2_display_t display, hwc2_layer_t layer, 495ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall const hwc_region_t& surfaceDamage, hwc2_error_t* outErr = nullptr) 496ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall { 497ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_SURFACE_DAMAGE>( 498ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_SURFACE_DAMAGE)); 499ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 500ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 501ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 502ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall surfaceDamage)); 503ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall if (outErr) { 504ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall *outErr = err; 505ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall } else { 506ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer surface" 507ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall " damage"; 508ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall } 509ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall } 510ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 511ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall void setLayerTransform(hwc2_display_t display, hwc2_layer_t layer, 512ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall hwc_transform_t transform, hwc2_error_t* outErr = nullptr) 513ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall { 514ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_TRANSFORM>( 515ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_TRANSFORM)); 516ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 517ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 518ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 519ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall transform)); 520ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall if (outErr) { 521ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall *outErr = err; 522ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall } else { 523ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer transform " 524ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall << getTransformName(transform); 525ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall } 526ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall } 527ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 528f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall void setLayerVisibleRegion(hwc2_display_t display, hwc2_layer_t layer, 529f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall const hwc_region_t& visibleRegion, hwc2_error_t* outErr = nullptr) 530f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall { 531f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_VISIBLE_REGION>( 532f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_VISIBLE_REGION)); 533f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 534f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 535f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 536f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall visibleRegion)); 537f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall if (outErr) { 538f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall *outErr = err; 539f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall } else { 540f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer visible" 541f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall " region"; 542f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall } 543f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall } 544f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 545273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall void setLayerZOrder(hwc2_display_t display, hwc2_layer_t layer, 546273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall uint32_t zOrder, hwc2_error_t* outErr = nullptr) 547273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall { 548273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall auto pfn = reinterpret_cast<HWC2_PFN_SET_LAYER_Z_ORDER>( 549273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall getFunction(HWC2_FUNCTION_SET_LAYER_Z_ORDER)); 550273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_TRUE(pfn) << "failed to get function"; 551273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 552273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall auto err = static_cast<hwc2_error_t>(pfn(mHwc2Device, display, layer, 553273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall zOrder)); 554273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall if (outErr) { 555273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall *outErr = err; 556273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } else { 557273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to set layer z order " 558273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall << zOrder; 559273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 560273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 561273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 5624d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wallprotected: 5634d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall hwc2_function_pointer_t getFunction(hwc2_function_descriptor_t descriptor) 5644d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall { 5654d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall return mHwc2Device->getFunction(mHwc2Device, descriptor); 5664d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall } 5674d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 5684d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall void getCapabilities(std::vector<hwc2_capability_t>* outCapabilities) 5694d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall { 5704d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall uint32_t num = 0; 5714d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 5724d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall mHwc2Device->getCapabilities(mHwc2Device, &num, nullptr); 5734d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 5744d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall outCapabilities->resize(num); 5754d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 5764d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall mHwc2Device->getCapabilities(mHwc2Device, &num, 5774d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall reinterpret_cast<int32_t*>(outCapabilities->data())); 5784d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall } 5794d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 580cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall /* Registers a hotplug callback and waits for hotplug callbacks. This 581cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall * function will have no effect if called more than once. */ 582cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall void populateDisplays() 583cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall { 584cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall /* Sets the hotplug status to receiving */ 585cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall { 586cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::lock_guard<std::mutex> lock(mHotplugMutex); 587cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 588cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall if (mHotplugStatus != Hwc2TestHotplugStatus::Init) 589cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall return; 590cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall mHotplugStatus = Hwc2TestHotplugStatus::Receiving; 591cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 592cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 593cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall /* Registers the callback. This function call cannot be locked because 594cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall * a callback could happen on the same thread */ 595cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_HOTPLUG, this, 596cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall reinterpret_cast<hwc2_function_pointer_t>( 597cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2TestHotplugCallback))); 598cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 599cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall /* Waits for hotplug events. If a hotplug event has not come within 1 600cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall * second, stop waiting. */ 601cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::unique_lock<std::mutex> lock(mHotplugMutex); 602cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 603cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall while (mHotplugCv.wait_for(lock, std::chrono::seconds(1)) != 604cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::cv_status::timeout) { } 605cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 606cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall /* Sets the hotplug status to done. Future calls will have no effect */ 607cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall mHotplugStatus = Hwc2TestHotplugStatus::Done; 608cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 609cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 610cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall void getBadDisplay(hwc2_display_t* outDisplay) 611cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall { 612cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall for (hwc2_display_t display = 0; display < UINT64_MAX; display++) { 613cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall if (mDisplays.count(display) == 0) { 614cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall *outDisplay = display; 615cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall return; 616cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 617cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 618cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall ASSERT_TRUE(false) << "Unable to find bad display. UINT64_MAX displays" 619cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall " are registered. This should never happen."; 620cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 621cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 6221db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall /* NOTE: will create min(newlayerCnt, max supported layers) layers */ 6231db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall void createLayers(hwc2_display_t display, 6241db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall std::vector<hwc2_layer_t>* outLayers, size_t newLayerCnt) 6251db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall { 6261db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall std::vector<hwc2_layer_t> newLayers; 6271db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_layer_t layer; 6281db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 6291db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 6301db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (size_t i = 0; i < newLayerCnt; i++) { 6311db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 6321db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_NO_FATAL_FAILURE(createLayer(display, &layer, &err)); 6331db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall if (err == HWC2_ERROR_NO_RESOURCES) 6341db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall break; 6351db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall if (err != HWC2_ERROR_NONE) { 6361db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall newLayers.clear(); 6371db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_EQ(err, HWC2_ERROR_NONE) << "failed to create layer"; 6381db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 6391db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall newLayers.push_back(layer); 6401db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 6411db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 6421db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall *outLayers = std::move(newLayers); 6431db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 6441db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 6451db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall void destroyLayers(hwc2_display_t display, 6461db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall std::vector<hwc2_layer_t>&& layers) 6471db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall { 6481db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (hwc2_layer_t layer : layers) { 6491db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 6501db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 6511db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 6521db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 653cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall void getInvalidConfig(hwc2_display_t display, hwc2_config_t* outConfig) 654cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall { 655cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs; 656cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 657cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 658cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 659cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_config_t CONFIG_MAX = UINT32_MAX; 660cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 661cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_LE(configs.size() - 1, CONFIG_MAX) << "every config value" 662cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall " (2^32 values) has been taken which shouldn't happen"; 663cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 664cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_config_t config; 665cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (config = 0; config < CONFIG_MAX; config++) { 666cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall if (std::count(configs.begin(), configs.end(), config) == 0) 667cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall break; 668cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 669cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 670cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall *outConfig = config; 671cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 672cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 673572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall void enableVsync(hwc2_display_t display) 674572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall { 675572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_VSYNC, this, 676572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall reinterpret_cast<hwc2_function_pointer_t>( 677572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2TestVsyncCallback))); 678572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE)); 679572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 680572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 681572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall void disableVsync(hwc2_display_t display) 682572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall { 683572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 684572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 685572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 686572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall void waitForVsync(hwc2_display_t* outDisplay = nullptr, 687572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall int64_t* outTimestamp = nullptr) 688572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall { 689572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall std::unique_lock<std::mutex> lock(mVsyncMutex); 690572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_EQ(mVsyncCv.wait_for(lock, std::chrono::seconds(3)), 691572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall std::cv_status::no_timeout) << "timed out attempting to get" 692572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall " vsync callback"; 693572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall if (outDisplay) 694572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall *outDisplay = mVsyncDisplay; 695572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall if (outTimestamp) 696572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall *outTimestamp = mVsyncTimestamp; 697572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 698572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 6996bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* Calls a set property function from Hwc2Test to set a property value from 7006bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * Hwc2TestLayer to hwc2_layer_t on hwc2_display_t */ 7016bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall using TestLayerPropertyFunction = void (*)(Hwc2Test* test, 7026bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_display_t display, hwc2_layer_t layer, 7035a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr); 7046bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 705273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall /* Calls a set property function from Hwc2Test to set property values from 706273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall * Hwc2TestLayers to hwc2_layer_t on hwc2_display_t */ 707273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall using TestLayerPropertiesFunction = void (*)(Hwc2Test* test, 708273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall hwc2_display_t display, hwc2_layer_t layer, 7095a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayers* testLayers); 710273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 7116bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* Calls a set property function from Hwc2Test to set a bad property value 7126bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * on hwc2_layer_t on hwc2_display_t */ 7136bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall using TestLayerPropertyBadLayerFunction = void (*)(Hwc2Test* test, 7146bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_display_t display, hwc2_layer_t layer, 7155a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr); 7166bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7176bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* Calls a set property function from Hwc2Test to set a bad property value 7186bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * on hwc2_layer_t on hwc2_display_t */ 7196bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall using TestLayerPropertyBadParameterFunction = void (*)(Hwc2Test* test, 7206bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_display_t display, hwc2_layer_t layer, hwc2_error_t* outErr); 7216bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7226bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* Advances a property of Hwc2TestLayer */ 7236bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall using AdvanceProperty = bool (*)(Hwc2TestLayer* testLayer); 7246bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 725f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall /* Advances properties of Hwc2TestLayers */ 726f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall using AdvanceProperties = bool (*)(Hwc2TestLayers* testLayer); 727f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 7286bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* For each active display it cycles through each display config and tests 7296bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * each property value. It creates a layer, sets the property and then 7306bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * destroys the layer */ 7316bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall void setLayerProperty(Hwc2TestCoverage coverage, 7326bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall TestLayerPropertyFunction function, AdvanceProperty advance) 7336bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall { 7346bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto display : mDisplays) { 7356bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall std::vector<hwc2_config_t> configs; 7366bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7376bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 7386bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7396bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto config : configs) { 7406bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_layer_t layer; 741600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Area displayArea; 7426bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7436bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 744600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveDisplayArea(display, 745600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall &displayArea)); 746600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Hwc2TestLayer testLayer(coverage, displayArea); 7476bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7486bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall do { 7496bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 7506bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7516bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(function(this, display, layer, 7525a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall &testLayer, nullptr)); 7536bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7546bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 7556bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } while (advance(&testLayer)); 7566bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 7576bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 7586bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 7596bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7606bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* For each active display it cycles through each display config and tests 7616bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * each property value. It creates a layer, cycles through each property 7626bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * value and updates the layer property value and then destroys the layer */ 7636bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall void setLayerPropertyUpdate(Hwc2TestCoverage coverage, 7646bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall TestLayerPropertyFunction function, AdvanceProperty advance) 7656bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall { 7666bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto display : mDisplays) { 7676bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall std::vector<hwc2_config_t> configs; 7686bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7696bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 7706bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7716bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto config : configs) { 7726bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_layer_t layer; 773600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Area displayArea; 7746bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7756bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 776600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveDisplayArea(display, 777600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall &displayArea)); 778600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Hwc2TestLayer testLayer(coverage, displayArea); 7796bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7806bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 7816bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7826bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall do { 7836bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(function(this, display, layer, 7845a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall &testLayer, nullptr)); 7856bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } while (advance(&testLayer)); 7866bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 7876bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 7886bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 7896bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 7906bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 7916bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 792273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall /* For each active display it cycles through each display config and tests 793273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall * each property value. It creates multiple layers, calls the 794273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall * TestLayerPropertiesFunction to set property values and then 795273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall * destroys the layers */ 796273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall void setLayerProperties(Hwc2TestCoverage coverage, size_t layerCnt, 797f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall TestLayerPropertiesFunction function, AdvanceProperties advance) 798273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall { 799273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall for (auto display : mDisplays) { 800273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall std::vector<hwc2_config_t> configs; 801273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 802273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 803273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 804273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall for (auto config : configs) { 805273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall std::vector<hwc2_layer_t> layers; 806600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Area displayArea; 807273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 808273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 809600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveDisplayArea(display, 810600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall &displayArea)); 811273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 812273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayers(display, &layers, layerCnt)); 813600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Hwc2TestLayers testLayers(layers, coverage, displayArea); 814273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 815f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall do { 816f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall for (auto layer : layers) { 817f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall EXPECT_NO_FATAL_FAILURE(function(this, display, layer, 818f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall &testLayers)); 819f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall } 820f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall } while (advance(&testLayers)); 821273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 822273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayers(display, std::move(layers))); 823273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 824273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 825273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 826273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 8276bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* For each active display it cycles through each display config. 8286bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * 1) It attempts to set a valid property value to bad layer handle. 8296bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * 2) It creates a layer x and attempts to set a valid property value to 8306bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * layer x + 1 8316bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * 3) It destroys the layer x and attempts to set a valid property value to 8326bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * the destroyed layer x. 8336bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall */ 8346bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall void setLayerPropertyBadLayer(Hwc2TestCoverage coverage, 8356bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall TestLayerPropertyBadLayerFunction function) 8366bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall { 8376bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto display : mDisplays) { 8386bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall std::vector<hwc2_config_t> configs; 8396bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 8406bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 8416bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 8426bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto config : configs) { 8436bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_layer_t layer = 0; 844600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Area displayArea; 8456bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 8466bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 8476bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 848600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveDisplayArea(display, 849600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall &displayArea)); 850600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall Hwc2TestLayer testLayer(coverage, displayArea); 8516bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 8526bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(function(this, display, layer, 8535a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall &testLayer, &err)); 8546bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 8556bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 8566bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 8576bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 8586bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(function(this, display, layer + 1, 8595a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall &testLayer, &err)); 8606bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 8616bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 8626bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 8636bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 8646bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(function(this, display, layer, 8655a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall &testLayer, &err)); 8666bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 8676bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 8686bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 8696bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 8706bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 8716bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall /* For each active display it cycles through each display config and tests 8726bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * each property value. It creates a layer, sets a bad property value and 8736bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * then destroys the layer */ 8746bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall void setLayerPropertyBadParameter(TestLayerPropertyBadParameterFunction function) 8756bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall { 8766bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto display : mDisplays) { 8776bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall std::vector<hwc2_config_t> configs; 8786bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 8796bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 8806bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 8816bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall for (auto config : configs) { 8826bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_layer_t layer; 8836bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 8846bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 8856bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 8866bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 8876bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 8886bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 8896bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(function(this, display, layer, &err)); 8906bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_PARAMETER) << "returned wrong" 8916bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall " error code"; 8926bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 8936bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 8946bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 8956bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 8966bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 8976bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 898600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall void getActiveConfigAttribute(hwc2_display_t display, 899600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall hwc2_attribute_t attribute, int32_t* outValue) 900600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall { 901600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall hwc2_config_t config; 902600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveConfig(display, &config)); 903600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, 904600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall attribute, outValue)); 905600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_GE(*outValue, 0) << "failed to get valid " 906600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall << getAttributeName(attribute); 907600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall } 908600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 909600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall void getActiveDisplayArea(hwc2_display_t display, Area* displayArea) 910600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall { 911600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveConfigAttribute(display, 912600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall HWC2_ATTRIBUTE_WIDTH, &displayArea->width)); 913600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveConfigAttribute(display, 914600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall HWC2_ATTRIBUTE_HEIGHT, &displayArea->height)); 915600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall } 916600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 9174d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall hwc2_device_t* mHwc2Device = nullptr; 918cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 919cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall enum class Hwc2TestHotplugStatus { 920cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall Init = 1, 921cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall Receiving, 922cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall Done, 923cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall }; 924cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 925cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::mutex mHotplugMutex; 926cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::condition_variable mHotplugCv; 927cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall Hwc2TestHotplugStatus mHotplugStatus = Hwc2TestHotplugStatus::Init; 928cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall std::unordered_set<hwc2_display_t> mDisplays; 9291db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 9301db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall /* Store all created layers that have not been destroyed. If an ASSERT_* 9311db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall * fails, then destroy the layers on exit */ 9321db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall std::set<std::pair<hwc2_display_t, hwc2_layer_t>> mLayers; 93303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 93403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall /* Store the power mode state. If it is not HWC2_POWER_MODE_OFF when 93503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall * tearing down the test cases, change it to HWC2_POWER_MODE_OFF */ 93603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall std::set<hwc2_display_t> mActiveDisplays; 937572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 938572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall std::mutex mVsyncMutex; 939572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall std::condition_variable mVsyncCv; 940572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_display_t mVsyncDisplay; 941572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall int64_t mVsyncTimestamp = -1; 9424d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall}; 9434d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 944cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wallvoid hwc2TestHotplugCallback(hwc2_callback_data_t callbackData, 945cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2_display_t display, int32_t connection) 946cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall{ 947cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall if (callbackData) 948cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall static_cast<Hwc2Test*>(callbackData)->hotplugCallback(display, 949cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall connection); 950cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall} 951cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 952572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wallvoid hwc2TestVsyncCallback(hwc2_callback_data_t callbackData, 953572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_display_t display, int64_t timestamp) 954572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 955572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall if (callbackData) 956572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall static_cast<Hwc2Test*>(callbackData)->vsyncCallback(display, 957572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall timestamp); 958572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 959572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 960ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wallvoid setBlendMode(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 9615a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 962ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall{ 963ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerBlendMode(display, layer, 9645a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getBlendMode(), outErr)); 9655a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall} 9665a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 9675a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wallvoid setBuffer(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 9685a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 9695a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall{ 9705a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall buffer_handle_t handle; 9715a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall android::base::unique_fd acquireFence; 9725a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall hwc2_composition_t composition = testLayer->getComposition(); 9735a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 9745a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall if (composition == HWC2_COMPOSITION_CLIENT 9755a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall || composition == HWC2_COMPOSITION_SOLID_COLOR 9765a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall || composition == HWC2_COMPOSITION_SIDEBAND) 9775a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall return; 9785a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 9795a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall if (testLayer->getBuffer(&handle, &acquireFence) < 0) 9805a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall return; 9815a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 9825a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerCompositionType(display, layer, 9835a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall composition)); 9845a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerBuffer(display, layer, 9855a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall handle, acquireFence, outErr)); 986ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall} 987ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 988ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wallvoid setColor(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 9895a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 990ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall{ 991ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerCompositionType(display, 992ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall layer, HWC2_COMPOSITION_SOLID_COLOR)); 993ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerPlaneAlpha(display, 9945a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall layer, testLayer->getPlaneAlpha())); 995ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerBlendMode(display, 9965a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall layer, testLayer->getBlendMode())); 997ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerColor(display, layer, 9985a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getColor(), outErr)); 999ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall} 1000ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 10016bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wallvoid setComposition(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 10025a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 10036bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall{ 10045a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall hwc2_composition_t composition = testLayer->getComposition(); 10056bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 10066bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 10076bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerCompositionType(display, layer, 10086bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall composition, &err)); 10096bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall if (outErr) { 10106bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall *outErr = err; 10116bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall return; 10126bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 10136bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 10146bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall if (composition != HWC2_COMPOSITION_SIDEBAND) { 10156bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall EXPECT_EQ(err, HWC2_ERROR_NONE) << "returned wrong error code"; 10166bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } else { 10176bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall EXPECT_TRUE(err == HWC2_ERROR_NONE || err == HWC2_ERROR_UNSUPPORTED) 10186bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall << "returned wrong error code"; 10196bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 10206bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall} 10216bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 10222a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wallvoid setCursorPosition(Hwc2Test* test, hwc2_display_t display, 10235a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall hwc2_layer_t layer, Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 10242a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall{ 10252a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerCompositionType(display, 10262a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall layer, HWC2_COMPOSITION_CURSOR)); 10272a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 10285a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall const hwc_rect_t cursorPosition = testLayer->getCursorPosition(); 10292a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setCursorPosition(display, layer, 10302a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall cursorPosition.left, cursorPosition.top, outErr)); 10312a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall} 10322a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 1033b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wallvoid setDataspace(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 10345a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 1035b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall{ 1036b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerDataspace(display, layer, 10375a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getDataspace(), outErr)); 1038b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall} 1039b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 1040600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wallvoid setDisplayFrame(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 10415a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 1042600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall{ 1043600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerDisplayFrame(display, layer, 10445a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getDisplayFrame(), outErr)); 1045600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall} 1046600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 10472b1f53060ea8587a428f826cf7890354ff124722Marissa Wallvoid setPlaneAlpha(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 10485a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t *outErr) 10492b1f53060ea8587a428f826cf7890354ff124722Marissa Wall{ 10502b1f53060ea8587a428f826cf7890354ff124722Marissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerBlendMode(display, layer, 10515a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getBlendMode())); 10522b1f53060ea8587a428f826cf7890354ff124722Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerPlaneAlpha(display, layer, 10535a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getPlaneAlpha(), outErr)); 10542b1f53060ea8587a428f826cf7890354ff124722Marissa Wall} 10552b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 1056c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wallvoid setSourceCrop(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 10575a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 1058c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall{ 1059c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerSourceCrop(display, layer, 10605a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getSourceCrop(), outErr)); 1061c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall} 1062c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 1063ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wallvoid setSurfaceDamage(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 10645a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 1065ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall{ 1066ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerSurfaceDamage(display, layer, 10675a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getSurfaceDamage(), outErr)); 1068ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall} 1069ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 1070ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wallvoid setTransform(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 10715a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 1072ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall{ 1073ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerTransform(display, layer, 10745a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getTransform(), outErr)); 1075ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall} 1076ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 1077f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wallvoid setVisibleRegion(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 1078f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 1079f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall{ 1080f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerVisibleRegion(display, layer, 1081f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall testLayer->getVisibleRegion(), outErr)); 1082f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall} 1083f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 1084273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wallvoid setZOrder(Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 10855a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) 1086273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall{ 1087273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerZOrder(display, layer, 10885a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getZOrder(), outErr)); 1089273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall} 1090273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 1091ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wallbool advanceBlendMode(Hwc2TestLayer* testLayer) 1092ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall{ 1093ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall return testLayer->advanceBlendMode(); 1094ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall} 1095ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 10965a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wallbool advanceBuffer(Hwc2TestLayer* testLayer) 10975a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall{ 10985a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall if (testLayer->advanceComposition()) 10995a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall return true; 11005a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall return testLayer->advanceBufferArea(); 11015a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall} 11025a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 1103ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wallbool advanceColor(Hwc2TestLayer* testLayer) 1104ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall{ 1105ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall /* Color depends on blend mode so advance blend mode last so color is not 1106ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall * force to update as often */ 1107ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall if (testLayer->advancePlaneAlpha()) 1108ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall return true; 1109ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall if (testLayer->advanceColor()) 1110ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall return true; 1111ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall return testLayer->advanceBlendMode(); 1112ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall} 1113ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 11146bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wallbool advanceComposition(Hwc2TestLayer* testLayer) 11156bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall{ 11166bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall return testLayer->advanceComposition(); 11176bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall} 11186bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 11192a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wallbool advanceCursorPosition(Hwc2TestLayer* testLayer) 11202a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall{ 11212a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall return testLayer->advanceCursorPosition(); 11222a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall} 11232a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 1124b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wallbool advanceDataspace(Hwc2TestLayer* testLayer) 1125b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall{ 1126b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall return testLayer->advanceDataspace(); 1127b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall} 1128b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 1129600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wallbool advanceDisplayFrame(Hwc2TestLayer* testLayer) 1130600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall{ 1131600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall return testLayer->advanceDisplayFrame(); 1132600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall} 1133600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 11342b1f53060ea8587a428f826cf7890354ff124722Marissa Wallbool advancePlaneAlpha(Hwc2TestLayer* testLayer) 11352b1f53060ea8587a428f826cf7890354ff124722Marissa Wall{ 11362b1f53060ea8587a428f826cf7890354ff124722Marissa Wall return testLayer->advancePlaneAlpha(); 11372b1f53060ea8587a428f826cf7890354ff124722Marissa Wall} 11382b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 1139c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wallbool advanceSourceCrop(Hwc2TestLayer* testLayer) 1140c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall{ 1141c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall if (testLayer->advanceSourceCrop()) 1142c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall return true; 1143c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall return testLayer->advanceBufferArea(); 1144c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall} 1145c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 1146ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wallbool advanceSurfaceDamage(Hwc2TestLayer* testLayer) 1147ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall{ 1148ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall if (testLayer->advanceSurfaceDamage()) 1149ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall return true; 1150ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall return testLayer->advanceBufferArea(); 1151ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall} 1152ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 1153ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wallbool advanceTransform(Hwc2TestLayer* testLayer) 1154ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall{ 1155ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall return testLayer->advanceTransform(); 1156ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall} 1157ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 1158f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wallbool advanceVisibleRegions(Hwc2TestLayers* testLayers) 1159f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall{ 1160f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall return testLayers->advanceVisibleRegions(); 1161f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall} 1162f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 11634d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 11644d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wallstatic const std::array<hwc2_function_descriptor_t, 42> requiredFunctions = {{ 11654d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_ACCEPT_DISPLAY_CHANGES, 11664d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_CREATE_LAYER, 11674d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_CREATE_VIRTUAL_DISPLAY, 11684d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_DESTROY_LAYER, 11694d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_DESTROY_VIRTUAL_DISPLAY, 11704d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_DUMP, 11714d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_ACTIVE_CONFIG, 11724d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_CHANGED_COMPOSITION_TYPES, 11734d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_CLIENT_TARGET_SUPPORT, 11744d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_COLOR_MODES, 11754d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_DISPLAY_ATTRIBUTE, 11764d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_DISPLAY_CONFIGS, 11774d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_DISPLAY_NAME, 11784d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_DISPLAY_REQUESTS, 11794d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_DISPLAY_TYPE, 11804d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_DOZE_SUPPORT, 11814d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_HDR_CAPABILITIES, 11824d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_MAX_VIRTUAL_DISPLAY_COUNT, 11834d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_GET_RELEASE_FENCES, 11844d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_PRESENT_DISPLAY, 11854d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_REGISTER_CALLBACK, 11864d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_ACTIVE_CONFIG, 11874d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_CLIENT_TARGET, 11884d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_COLOR_MODE, 11894d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_COLOR_TRANSFORM, 11904d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_CURSOR_POSITION, 11914d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_BLEND_MODE, 11924d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_BUFFER, 11934d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_COLOR, 11944d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_COMPOSITION_TYPE, 11954d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_DATASPACE, 11964d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_DISPLAY_FRAME, 11974d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_PLANE_ALPHA, 11984d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_SOURCE_CROP, 11994d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_SURFACE_DAMAGE, 12004d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_TRANSFORM, 12014d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_VISIBLE_REGION, 12024d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_LAYER_Z_ORDER, 12034d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_OUTPUT_BUFFER, 12044d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_POWER_MODE, 12054d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_SET_VSYNC_ENABLED, 12064d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_FUNCTION_VALIDATE_DISPLAY, 12074d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall}}; 12084d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 12094d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall/* TESTCASE: Tests that the HWC2 supports all required functions. */ 12104d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa WallTEST_F(Hwc2Test, GET_FUNCTION) 12114d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall{ 12124d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall for (hwc2_function_descriptor_t descriptor : requiredFunctions) { 12134d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall hwc2_function_pointer_t pfn = getFunction(descriptor); 12144d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall EXPECT_TRUE(pfn) << "failed to get function " 12154d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall << getFunctionDescriptorName(descriptor); 12164d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall } 12174d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall} 12184d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 12194d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall/* TESTCASE: Tests that the HWC2 fails to retrieve and invalid function. */ 12204d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa WallTEST_F(Hwc2Test, GET_FUNCTION_invalid_function) 12214d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall{ 12224d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall hwc2_function_pointer_t pfn = getFunction(HWC2_FUNCTION_INVALID); 12234d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall EXPECT_FALSE(pfn) << "failed to get invalid function"; 12244d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall} 12254d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 12264d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall/* TESTCASE: Tests that the HWC2 does not return an invalid capability. */ 12274d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa WallTEST_F(Hwc2Test, GET_CAPABILITIES) 12284d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall{ 12294d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall std::vector<hwc2_capability_t> capabilities; 12304d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 12314d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall getCapabilities(&capabilities); 12324d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall 12334d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall EXPECT_EQ(std::count(capabilities.begin(), capabilities.end(), 12344d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall HWC2_CAPABILITY_INVALID), 0); 12354d600057db0c977e75c5d6e2d5f01fa69d30b364Marissa Wall} 1236a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 1237a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wallstatic const std::array<hwc2_callback_descriptor_t, 3> callbackDescriptors = {{ 1238a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall HWC2_CALLBACK_HOTPLUG, 1239a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall HWC2_CALLBACK_REFRESH, 1240a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall HWC2_CALLBACK_VSYNC, 1241a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall}}; 1242a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 1243a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall/* TESTCASE: Tests that the HWC2 can successfully register all required 1244a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall * callback functions. */ 1245a4b01488e852c0c16df89d04914e6f060dd862e3Marissa WallTEST_F(Hwc2Test, REGISTER_CALLBACK) 1246a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall{ 1247a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall hwc2_callback_data_t data = reinterpret_cast<hwc2_callback_data_t>( 1248a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall const_cast<char*>("data")); 1249a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 1250a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall for (auto descriptor : callbackDescriptors) { 1251a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(descriptor, data, 1252a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall []() { return; })); 1253a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall } 1254a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall} 1255a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 1256a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall/* TESTCASE: Test that the HWC2 fails to register invalid callbacks. */ 1257a4b01488e852c0c16df89d04914e6f060dd862e3Marissa WallTEST_F(Hwc2Test, REGISTER_CALLBACK_bad_parameter) 1258a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall{ 1259a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall hwc2_callback_data_t data = reinterpret_cast<hwc2_callback_data_t>( 1260a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall const_cast<char*>("data")); 1261a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 1262a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 1263a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_INVALID, data, 1264a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall []() { return; }, &err)); 1265a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_PARAMETER) << "returned wrong error code"; 1266a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall} 1267a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 1268a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall/* TESTCASE: Tests that the HWC2 can register a callback with null data. */ 1269a4b01488e852c0c16df89d04914e6f060dd862e3Marissa WallTEST_F(Hwc2Test, REGISTER_CALLBACK_null_data) 1270a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall{ 1271a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall hwc2_callback_data_t data = nullptr; 1272a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall 1273a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall for (auto descriptor : callbackDescriptors) { 1274a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(descriptor, data, 1275a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall []() { return; })); 1276a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall } 1277a4b01488e852c0c16df89d04914e6f060dd862e3Marissa Wall} 1278cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1279cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall/* TESTCASE: Tests that the HWC2 returns the correct display type for each 1280cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall * physical display. */ 1281cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa WallTEST_F(Hwc2Test, GET_DISPLAY_TYPE) 1282cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall{ 1283cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall for (auto display : mDisplays) { 1284cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2_display_type_t type; 1285cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1286cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayType(display, &type)); 1287cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall EXPECT_EQ(type, HWC2_DISPLAY_TYPE_PHYSICAL) << "failed to return" 1288cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall " correct display type"; 1289cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall } 1290cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall} 1291cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1292cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall/* TESTCASE: Tests that the HWC2 returns an error when the display type of a bad 1293cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall * display is requested. */ 1294cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa WallTEST_F(Hwc2Test, GET_DISPLAY_TYPE_bad_display) 1295cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall{ 1296cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2_display_t display; 1297cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2_display_type_t type; 1298cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 1299cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1300cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 1301cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall 1302cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayType(display, &type, &err)); 1303cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 1304cfb9a07ff9bcc36afc08cef5874344aec03f18faMarissa Wall} 13051db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 13061db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall/* TESTCASE: Tests that the HWC2 can create and destroy layers. */ 13071db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa WallTEST_F(Hwc2Test, CREATE_DESTROY_LAYER) 13081db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall{ 13091db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (auto display : mDisplays) { 13101db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_layer_t layer; 13111db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 13121db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 13131db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 13141db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 13151db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 13161db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall} 13171db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 13181db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall/* TESTCASE: Tests that the HWC2 cannot create a layer for a bad display */ 13191db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa WallTEST_F(Hwc2Test, CREATE_LAYER_bad_display) 13201db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall{ 13211db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_display_t display; 13221db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_layer_t layer; 13231db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 13241db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 13251db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 13261db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 13271db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer, &err)); 13281db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 13291db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall} 13301db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 13311db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall/* TESTCASE: Tests that the HWC2 will either support a large number of resources 13321db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall * or will return no resources. */ 13331db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa WallTEST_F(Hwc2Test, CREATE_LAYER_no_resources) 13341db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall{ 13351db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall const size_t layerCnt = 1000; 13361db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 13371db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (auto display : mDisplays) { 13381db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall std::vector<hwc2_layer_t> layers; 13391db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 13401db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(createLayers(display, &layers, layerCnt)); 13411db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 13421db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayers(display, std::move(layers))); 13431db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 13441db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall} 13451db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 13461db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall/* TESTCASE: Tests that the HWC2 cannot destroy a layer for a bad display */ 13471db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa WallTEST_F(Hwc2Test, DESTROY_LAYER_bad_display) 13481db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall{ 13491db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_display_t badDisplay; 13501db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 13511db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&badDisplay)); 13521db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 13531db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (auto display : mDisplays) { 13541db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_layer_t layer = 0; 13551db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 13561db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 13571db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(badDisplay, layer, &err)); 13581db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 13591db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 13601db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 13611db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 13621db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(badDisplay, layer, &err)); 13631db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 13641db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 13651db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 13661db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 13671db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall} 13681db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 13691db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall/* TESTCASE: Tests that the HWC2 cannot destory a bad layer */ 13701db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa WallTEST_F(Hwc2Test, DESTROY_LAYER_bad_layer) 13711db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall{ 13721db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall for (auto display : mDisplays) { 13731db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_layer_t layer; 13741db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 13751db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 13761db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, UINT64_MAX / 2, &err)); 13771db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 13781db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 13791db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, 0, &err)); 13801db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 13811db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 13821db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, UINT64_MAX - 1, &err)); 13831db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 13841db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 13851db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, 1, &err)); 13861db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 13871db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 13881db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, UINT64_MAX, &err)); 13891db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 13901db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 13911db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 13921db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 13931db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer + 1, &err)); 13941db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 13951db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 13961db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 13971db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall 13981db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer, &err)); 13991db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_LAYER) << "returned wrong error code"; 14001db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall } 14011db2e37295cd89946ec5280c1db2dc11bba45ee2Marissa Wall} 1402cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1403cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wallstatic const std::array<hwc2_attribute_t, 2> requiredAttributes = {{ 1404cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall HWC2_ATTRIBUTE_WIDTH, 1405cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall HWC2_ATTRIBUTE_HEIGHT, 1406cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall}}; 1407cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1408cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wallstatic const std::array<hwc2_attribute_t, 3> optionalAttributes = {{ 1409cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall HWC2_ATTRIBUTE_VSYNC_PERIOD, 1410cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall HWC2_ATTRIBUTE_DPI_X, 1411cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall HWC2_ATTRIBUTE_DPI_Y, 1412cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall}}; 1413cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1414cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 can return display attributes for a valid 1415cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall * config. */ 1416cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_ATTRIBUTE) 1417cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 1418cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto display : mDisplays) { 1419cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs; 1420cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1421cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 1422cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1423cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto config : configs) { 1424cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall int32_t value; 1425cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1426cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto attribute : requiredAttributes) { 1427cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, 1428cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall attribute, &value)); 1429cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_GE(value, 0) << "missing required attribute " 1430cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall << getAttributeName(attribute) << " for config " 1431cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall << config; 1432cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1433cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto attribute : optionalAttributes) { 1434cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, 1435cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall attribute, &value)); 1436cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1437cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1438cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1439cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 1440cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1441cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 will return a value of -1 for an invalid 1442cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall * attribute */ 1443cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_ATTRIBUTE_invalid_attribute) 1444cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 1445cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall const hwc2_attribute_t attribute = HWC2_ATTRIBUTE_INVALID; 1446cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1447cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto display : mDisplays) { 1448cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs; 1449cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1450cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 1451cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1452cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto config : configs) { 1453cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall int32_t value; 1454cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 1455cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1456cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, 1457cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall attribute, &value, &err)); 1458cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(value, -1) << "failed to return -1 for an invalid" 1459cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall " attribute for config " << config; 1460cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1461cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1462cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 1463cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1464cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 will fail to get attributes for a bad display */ 1465cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_ATTRIBUTE_bad_display) 1466cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 1467cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_display_t display; 1468cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall const hwc2_config_t config = 0; 1469cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall int32_t value; 1470cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 1471cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1472cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 1473cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1474cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto attribute : requiredAttributes) { 1475cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, attribute, 1476cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall &value, &err)); 1477cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 1478cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1479cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1480cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto attribute : optionalAttributes) { 1481cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, attribute, 1482cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall &value, &err)); 1483cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 1484cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1485cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 1486cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1487cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 will fail to get attributes for a bad config */ 1488cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_ATTRIBUTE_bad_config) 1489cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 1490cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto display : mDisplays) { 1491cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_config_t config; 1492cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall int32_t value; 1493cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 1494cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1495cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getInvalidConfig(display, &config)); 1496cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1497cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto attribute : requiredAttributes) { 1498cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, 1499cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall attribute, &value, &err)); 1500cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_CONFIG) << "returned wrong error code"; 1501cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1502cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1503cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto attribute : optionalAttributes) { 1504cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayAttribute(display, config, 1505cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall attribute, &value, &err)); 1506cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_CONFIG) << "returned wrong error code"; 1507cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1508cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1509cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 1510cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1511cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 will get display configs for active displays */ 1512cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_CONFIGS) 1513cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 1514cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto display : mDisplays) { 1515cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs; 1516cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1517cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 1518cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1519cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 1520cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1521cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 will not get display configs for bad displays */ 1522cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_CONFIGS_bad_display) 1523cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 1524cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_display_t display; 1525cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs; 1526cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 1527cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1528cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 1529cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1530cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs, &err)); 1531cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1532cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 1533cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_TRUE(configs.empty()) << "returned configs for bad display"; 1534cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 1535cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1536cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 will return the same config list multiple 1537cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall * times in a row. */ 1538cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_CONFIGS_same) 1539cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 1540cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto display : mDisplays) { 1541cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs1, configs2; 1542cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1543cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs1)); 1544cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs2)); 1545cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1546cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_TRUE(std::is_permutation(configs1.begin(), configs1.end(), 1547cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall configs2.begin())) << "returned two different config sets"; 1548cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1549cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 1550cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1551cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall/* TESTCASE: Tests that the HWC2 does not return duplicate display configs */ 1552cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa WallTEST_F(Hwc2Test, GET_DISPLAY_CONFIGS_duplicate) 1553cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall{ 1554cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall for (auto display : mDisplays) { 1555cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::vector<hwc2_config_t> configs; 1556cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1557cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 1558cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall 1559cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall std::unordered_set<hwc2_config_t> configsSet(configs.begin(), 1560cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall configs.end()); 1561cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall EXPECT_EQ(configs.size(), configsSet.size()) << "returned duplicate" 1562cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall " configs"; 1563cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall } 1564cf935cbfa66ec65a71485e91e63a5929dc2922a1Marissa Wall} 156593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 156693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall/* TESTCASE: Tests that the HWC2 returns the active config for a display */ 156793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa WallTEST_F(Hwc2Test, GET_ACTIVE_CONFIG) 156893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall{ 156993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall for (auto display : mDisplays) { 157093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall std::vector<hwc2_config_t> configs; 157193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 157293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 157393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 157493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall for (auto config : configs) { 157593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_config_t activeConfig; 157693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 157793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 157893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveConfig(display, &activeConfig)); 157993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 158093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_EQ(activeConfig, config) << "failed to get active config"; 158193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 158293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 158393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall} 158493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 158593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall/* TESTCASE: Tests that the HWC2 does not return an active config for a bad 158693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall * display. */ 158793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa WallTEST_F(Hwc2Test, GET_ACTIVE_CONFIG_bad_display) 158893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall{ 158993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_display_t display; 159093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_config_t activeConfig; 159193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 159293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 159393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 159493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 159593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveConfig(display, &activeConfig, &err)); 159693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 159793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 159893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall} 159993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 160093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall/* TESTCASE: Tests that the HWC2 either begins with a valid active config 160193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall * or returns an error when getActiveConfig is called. */ 160293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa WallTEST_F(Hwc2Test, GET_ACTIVE_CONFIG_bad_config) 160393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall{ 160493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall for (auto display : mDisplays) { 160593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall std::vector<hwc2_config_t> configs; 160693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_config_t activeConfig; 160793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 160893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 160993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 161093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 161193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall if (configs.empty()) 161293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall return; 161393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 161493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getActiveConfig(display, &activeConfig, &err)); 161593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall if (err == HWC2_ERROR_NONE) { 161693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_NE(std::count(configs.begin(), configs.end(), 161793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall activeConfig), 0) << "active config is not found in " 161893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall " configs for display"; 161993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } else { 162093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_CONFIG) << "returned wrong error code"; 162193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 162293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 162393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall} 162493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 162593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall/* TESTCASE: Tests that the HWC2 can set every display config as an active 162693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall * config */ 162793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa WallTEST_F(Hwc2Test, SET_ACTIVE_CONFIG) 162893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall{ 162993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall for (auto display : mDisplays) { 163093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall std::vector<hwc2_config_t> configs; 163193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 163293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 163393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 163493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall for (auto config : configs) { 163593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 163693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 163793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 163893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall} 163993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 164093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set an active config for a bad display */ 164193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa WallTEST_F(Hwc2Test, SET_ACTIVE_CONFIG_bad_display) 164293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall{ 164393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_display_t display; 164493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall const hwc2_config_t config = 0; 164593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 164693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 164793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 164893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 164993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config, &err)); 165093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 165193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall} 165293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 165393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set an invalid active config */ 165493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa WallTEST_F(Hwc2Test, SET_ACTIVE_CONFIG_bad_config) 165593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall{ 165693dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall for (auto display : mDisplays) { 165793dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_config_t config; 165893dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 165993dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 166093dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(getInvalidConfig(display, &config)); 166193dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall 166293dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config, &err)); 166393dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_CONFIG) << "returned wrong error code"; 166493dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall } 166593dc04fda8de625d780bcd9b3cef15ad7a4932a8Marissa Wall} 166603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 166703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 returns a valid value for getDozeSupport. */ 166803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, GET_DOZE_SUPPORT) 166903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 167003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall for (auto display : mDisplays) { 167103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall int32_t support = -1; 167203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 167303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getDozeSupport(display, &support)); 167403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 167503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_TRUE(support == 0 || support == 1) << "invalid doze support value"; 167603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 167703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 167803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 167903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 cannot get doze support for a bad display. */ 168003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, GET_DOZE_SUPPORT_bad_display) 168103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 168203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_display_t display; 168303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall int32_t support = -1; 168403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 168503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 168603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 168703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 168803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getDozeSupport(display, &support, &err)); 168903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 169003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 169103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 169203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 169303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 can set all supported power modes */ 169403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, SET_POWER_MODE) 169503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 169603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall for (auto display : mDisplays) { 169703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 169803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 169903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 170003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall int32_t support = -1; 170103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getDozeSupport(display, &support)); 170203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (support != 1) 170303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall return; 170403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 170503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_DOZE)); 170603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, 170703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall HWC2_POWER_MODE_DOZE_SUSPEND)); 170803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 170903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 171003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 171103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 171203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 171303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set a power mode for a bad display. */ 171403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, SET_POWER_MODE_bad_display) 171503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 171603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_display_t display; 171703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 171803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 171903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 172003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 172103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON, &err)); 172203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 172303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 172403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF, &err)); 172503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 172603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 172703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall int32_t support = -1; 172803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getDozeSupport(display, &support, &err)); 172903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (support != 1) 173003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall return; 173103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 173203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_DOZE, &err)); 173303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 173403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 173503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_DOZE_SUSPEND, 173603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall &err)); 173703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 173803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 173903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 174003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set an invalid power mode value. */ 174103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, SET_POWER_MODE_bad_parameter) 174203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 174303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall for (auto display : mDisplays) { 174403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_power_mode_t mode = static_cast<hwc2_power_mode_t>( 174503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall HWC2_POWER_MODE_DOZE_SUSPEND + 1); 174603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 174703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 174803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, mode, &err)); 174903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_PARAMETER) << "returned wrong error code " 175003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall << mode; 175103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 175203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 175303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 175403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 will return unsupported if it does not support 175503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall * an optional power mode. */ 175603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, SET_POWER_MODE_unsupported) 175703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 175803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall for (auto display : mDisplays) { 175903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall int32_t support = -1; 176003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 176103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 176203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getDozeSupport(display, &support, &err)); 176303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (support == 1) 176403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall return; 176503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 176603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_EQ(support, 0) << "invalid doze support value"; 176703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 176803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_DOZE, 176903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall &err)); 177003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_UNSUPPORTED) << "returned wrong error code"; 177103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 177203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, 177303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall HWC2_POWER_MODE_DOZE_SUSPEND, &err)); 177403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall EXPECT_EQ(err, HWC2_ERROR_UNSUPPORTED) << "returned wrong error code"; 177503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 177603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 177703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 177803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall/* TESTCASE: Tests that the HWC2 can set the same power mode multiple times. */ 177903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa WallTEST_F(Hwc2Test, SET_POWER_MODE_stress) 178003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall{ 178103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall for (auto display : mDisplays) { 178203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 178303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 178403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 178503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 178603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 178703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 178803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 178903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 179003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 179103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall int32_t support = -1; 179203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(getDozeSupport(display, &support)); 179303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall if (support != 1) 179403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall return; 179503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 179603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_DOZE)); 179703c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_DOZE)); 179803c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 179903c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, 180003c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall HWC2_POWER_MODE_DOZE_SUSPEND)); 180103c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, 180203c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall HWC2_POWER_MODE_DOZE_SUSPEND)); 180303c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall 180403c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 180503c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall } 180603c917316507dd1c12cdb15a84f5e41576ab4bdeMarissa Wall} 1807572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1808572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 can enable and disable vsync on active 1809572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall * displays */ 1810572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED) 1811572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 1812572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall for (auto display : mDisplays) { 1813572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_callback_data_t data = reinterpret_cast<hwc2_callback_data_t>( 1814572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall const_cast<char*>("data")); 1815572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1816572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 1817572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1818572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_VSYNC, data, 1819572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall []() { return; })); 1820572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1821572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE)); 1822572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1823572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 1824572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1825572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 1826572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 1827572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 1828572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1829572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 issues a valid vsync callback. */ 1830572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED_callback) 1831572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 1832572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall for (auto display : mDisplays) { 1833572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_display_t receivedDisplay; 1834572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall int64_t receivedTimestamp; 1835572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1836572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 1837572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1838572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(enableVsync(display)); 1839572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1840572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(waitForVsync(&receivedDisplay, 1841572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall &receivedTimestamp)); 1842572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1843572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall EXPECT_EQ(receivedDisplay, display) << "failed to get correct display"; 1844572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall EXPECT_GE(receivedTimestamp, 0) << "failed to get valid timestamp"; 1845572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1846572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(disableVsync(display)); 1847572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1848572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 1849572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 1850572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 1851572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1852572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 cannot enable a vsync for a bad display */ 1853572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED_bad_display) 1854572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 1855572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_display_t display; 1856572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_callback_data_t data = reinterpret_cast<hwc2_callback_data_t>( 1857572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall const_cast<char*>("data")); 1858572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 1859572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1860572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 1861572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1862572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_VSYNC, data, 1863572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall []() { return; })); 1864572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1865572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE, &err)); 1866572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 1867572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1868572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE, &err)); 1869572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 1870572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 1871572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1872572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 cannot enable an invalid vsync value */ 1873572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED_bad_parameter) 1874572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 1875572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall for (auto display : mDisplays) { 1876572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_callback_data_t data = reinterpret_cast<hwc2_callback_data_t>( 1877572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall const_cast<char*>("data")); 1878572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 1879572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1880572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 1881572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1882572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_VSYNC, data, 1883572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall []() { return; })); 1884572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1885572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_INVALID, 1886572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall &err)); 1887572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_PARAMETER) << "returned wrong error code"; 1888572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1889572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 1890572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 1891572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 1892572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1893572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 can enable and disable a vsync value multiple 1894572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall * times. */ 1895572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED_stress) 1896572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 1897572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall for (auto display : mDisplays) { 1898572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall hwc2_callback_data_t data = reinterpret_cast<hwc2_callback_data_t>( 1899572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall const_cast<char*>("data")); 1900572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1901572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 1902572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1903572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(registerCallback(HWC2_CALLBACK_VSYNC, data, 1904572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall []() { return; })); 1905572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1906572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 1907572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1908572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE)); 1909572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE)); 1910572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1911572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 1912572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 1913572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1914572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 1915572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 1916572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 1917572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1918572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 can set a vsync enable value when the display 1919572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall * is off and no callback is registered. */ 1920572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED_no_callback_no_power) 1921572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 1922572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall const uint secs = 1; 1923572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1924572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall for (auto display : mDisplays) { 1925572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE)); 1926572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1927572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall sleep(secs); 1928572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1929572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 1930572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 1931572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 1932572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1933572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall/* TESTCASE: Tests that the HWC2 can set a vsync enable value when no callback 1934572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall * is registered. */ 1935572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa WallTEST_F(Hwc2Test, SET_VSYNC_ENABLED_no_callback) 1936572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall{ 1937572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall const uint secs = 1; 1938572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1939572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall for (auto display : mDisplays) { 1940572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_ON)); 1941572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1942572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_ENABLE)); 1943572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1944572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall sleep(secs); 1945572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1946572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setVsyncEnabled(display, HWC2_VSYNC_DISABLE)); 1947572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall 1948572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall ASSERT_NO_FATAL_FAILURE(setPowerMode(display, HWC2_POWER_MODE_OFF)); 1949572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall } 1950572a1eedae1d15a8544c95f0284e5b1216a187d2Marissa Wall} 1951dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 1952dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall/* TESTCASE: Tests that the HWC2 returns a display name for each display */ 1953dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa WallTEST_F(Hwc2Test, GET_DISPLAY_NAME) 1954dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall{ 1955dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall for (auto display : mDisplays) { 1956dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall std::string name; 1957dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 1958dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayName(display, &name)); 1959dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall } 1960dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall} 1961dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 1962dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall/* TESTCASE: Tests that the HWC2 does not return a display name for a bad 1963dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall * display */ 1964dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa WallTEST_F(Hwc2Test, GET_DISPLAY_NAME_bad_display) 1965dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall{ 1966dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall hwc2_display_t display; 1967dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall std::string name; 1968dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 1969dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 1970dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 1971dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall 1972dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayName(display, &name, &err)); 1973dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 1974dd4087f4eab87607662b7ee87e9e7b1298f7a3fcMarissa Wall} 19756bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 19766bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall/* TESTCASE: Tests that the HWC2 can set basic composition types. */ 19776bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa WallTEST_F(Hwc2Test, SET_LAYER_COMPOSITION_TYPE) 19786bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall{ 19796bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 19806bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall setComposition, advanceComposition)); 19816bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall} 19826bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 19836bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall/* TESTCASE: Tests that the HWC2 can update a basic composition type on a 19846bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * layer. */ 19856bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa WallTEST_F(Hwc2Test, SET_LAYER_COMPOSITION_TYPE_update) 19866bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall{ 19876bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 19886bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall setComposition, advanceComposition)); 19896bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall} 19906bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 19916bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set a composition type for a bad layer */ 19926bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa WallTEST_F(Hwc2Test, SET_LAYER_COMPOSITION_TYPE_bad_layer) 19936bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall{ 19946bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 19956bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall setComposition)); 19966bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall} 19976bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 19986bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set a bad composition type */ 19996bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa WallTEST_F(Hwc2Test, SET_LAYER_COMPOSITION_TYPE_bad_parameter) 20006bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall{ 20016bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadParameter( 20026bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 20036bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall hwc2_error_t* outErr) { 20046bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 20056bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerCompositionType(display, 20066bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall layer, HWC2_COMPOSITION_INVALID, outErr)); 20076bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall } 20086bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall )); 20096bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall} 2010ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 20112a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall/* TESTCASE: Tests that the HWC2 can set the cursor position of a layer. */ 20122a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa WallTEST_F(Hwc2Test, SET_CURSOR_POSITION) 20132a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall{ 20142a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 20152a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ::setCursorPosition, advanceCursorPosition)); 20162a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall} 20172a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 20182a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall/* TESTCASE: Tests that the HWC2 can update the cursor position of a layer. */ 20192a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa WallTEST_F(Hwc2Test, SET_CURSOR_POSITION_update) 20202a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall{ 20212a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 20222a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ::setCursorPosition, advanceCursorPosition)); 20232a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall} 20242a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 20252a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall/* TESTCASE: Tests that the HWC2 can set the cursor position of a layer when the 20262a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall * composition type has not been set to HWC2_COMPOSITION_CURSOR. */ 20272a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa WallTEST_F(Hwc2Test, SET_CURSOR_POSITION_composition_type_unset) 20282a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall{ 20292a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 20302a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 20315a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) { 20322a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 20335a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall const hwc_rect_t cursorPosition = testLayer->getCursorPosition(); 20342a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setCursorPosition(display, layer, 20352a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall cursorPosition.left, cursorPosition.top, outErr)); 20362a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall }, 20372a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 20382a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall advanceCursorPosition)); 20392a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall} 20402a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 20412a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set the cursor position of a bad 20422a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall * display. */ 20432a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa WallTEST_F(Hwc2Test, SET_CURSOR_POSITION_bad_display) 20442a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall{ 20452a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall hwc2_display_t display; 20462a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall hwc2_layer_t layer = 0; 20472a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall int32_t x = 0, y = 0; 20482a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall hwc2_error_t err = HWC2_ERROR_NONE; 20492a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 20502a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_NO_FATAL_FAILURE(getBadDisplay(&display)); 20512a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 20522a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_NO_FATAL_FAILURE(setCursorPosition(display, layer, x, y, &err)); 20532a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall EXPECT_EQ(err, HWC2_ERROR_BAD_DISPLAY) << "returned wrong error code"; 20542a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall} 20552a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 20562a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set the cursor position of a bad layer. */ 20572a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa WallTEST_F(Hwc2Test, SET_CURSOR_POSITION_bad_layer) 20582a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall{ 20592a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 20602a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t badLayer, 20615a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) { 20622a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 20635a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall const hwc_rect_t cursorPosition = testLayer->getCursorPosition(); 20642a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setCursorPosition(display, 20652a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall badLayer, cursorPosition.left, cursorPosition.top, 20662a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall outErr)); 20672a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall } 20682a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall )); 20692a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall} 20702a0aaf9f5a3daeb0525249eda40242bb63f56468Marissa Wall 2071ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall/* TESTCASE: Tests that the HWC2 can set a blend mode value of a layer. */ 2072ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa WallTEST_F(Hwc2Test, SET_LAYER_BLEND_MODE) 2073ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall{ 2074ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 2075ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall setBlendMode, advanceBlendMode)); 2076ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall} 2077ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 2078ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall/* TESTCASE: Tests that the HWC2 can update a blend mode value of a layer. */ 2079ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa WallTEST_F(Hwc2Test, SET_LAYER_BLEND_MODE_update) 2080ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall{ 2081ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 2082ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall setBlendMode, advanceBlendMode)); 2083ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall} 2084ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 2085ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set a blend mode for a bad layer. */ 2086ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa WallTEST_F(Hwc2Test, SET_LAYER_BLEND_MODE_bad_layer) 2087ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall{ 2088ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 2089ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall setBlendMode)); 2090ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall} 2091ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 2092ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set an invalid blend mode. */ 2093ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa WallTEST_F(Hwc2Test, SET_LAYER_BLEND_MODE_bad_parameter) 2094ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall{ 2095ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadParameter( 2096ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 2097ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall hwc2_error_t* outErr) { 2098ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 2099ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerBlendMode(display, 2100ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall layer, HWC2_BLEND_MODE_INVALID, outErr)); 2101ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall } 2102ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall )); 2103ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall} 2104b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 21055a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall/* TESTCASE: Tests that the HWC2 can set the buffer of a layer. */ 21065a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa WallTEST_F(Hwc2Test, SET_LAYER_BUFFER) 21075a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall{ 21085a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 21095a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall setBuffer, advanceBuffer)); 21105a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall} 21115a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 21125a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall/* TESTCASE: Tests that the HWC2 can update the buffer of a layer. */ 21135a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa WallTEST_F(Hwc2Test, SET_LAYER_BUFFER_update) 21145a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall{ 21155a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 21165a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall setBuffer, advanceBuffer)); 21175a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall} 21185a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 21195a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set the buffer of a bad layer. */ 21205a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa WallTEST_F(Hwc2Test, SET_LAYER_BUFFER_bad_layer) 21215a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall{ 21225a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 21235a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t badLayer, 21245a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) { 21255a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 21265a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall buffer_handle_t handle = nullptr; 21275a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall android::base::unique_fd acquireFence; 21285a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 21295a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall /* If there is not available buffer for the given buffer 21305a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall * properties, it should not fail this test case */ 21315a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall if (testLayer->getBuffer(&handle, &acquireFence) == 0) { 21325a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall *outErr = HWC2_ERROR_BAD_LAYER; 21335a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall return; 21345a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall } 21355a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 21365a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerBuffer(display, badLayer, 21375a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall handle, acquireFence, outErr)); 21385a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall } 21395a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall )); 21405a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall} 21415a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 21425a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall/* TESTCASE: Tests that the HWC2 can set an invalid buffer for a layer. */ 21435a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa WallTEST_F(Hwc2Test, SET_LAYER_BUFFER_bad_parameter) 21445a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall{ 21455a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadParameter( 21465a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 21475a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall hwc2_error_t* outErr) { 21485a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 21495a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall buffer_handle_t handle = nullptr; 21505a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall int32_t acquireFence = -1; 21515a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 21525a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall ASSERT_NO_FATAL_FAILURE(test->setLayerBuffer(display, layer, 21535a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall handle, acquireFence, outErr)); 21545a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall } 21555a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall )); 21565a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall} 21575a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 2158ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall/* TESTCASE: Tests that the HWC2 can set the color of a layer. */ 2159ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa WallTEST_F(Hwc2Test, SET_LAYER_COLOR) 2160ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall{ 2161ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 2162ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall setColor, advanceColor)); 2163ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall} 2164ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 2165ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall/* TESTCASE: Tests that the HWC2 can update the color of a layer. */ 2166ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa WallTEST_F(Hwc2Test, SET_LAYER_COLOR_update) 2167ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall{ 2168ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 2169ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall setColor, advanceColor)); 2170ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall} 2171ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 2172ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall/* TESTCASE: Tests that the HWC2 can set the color of a layer when the 2173ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall * composition type has not been set to HWC2_COMPOSITION_SOLID_COLOR. */ 2174ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa WallTEST_F(Hwc2Test, SET_LAYER_COLOR_composition_type_unset) 2175ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall{ 2176ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Basic, 2177ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 21785a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) { 2179ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 2180ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerColor(display, layer, 21815a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getColor(), outErr)); 2182ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall }, 2183ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 2184ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall advanceColor)); 2185ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall} 2186ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 2187ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set the color of a bad layer. */ 2188ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa WallTEST_F(Hwc2Test, SET_LAYER_COLOR_bad_layer) 2189ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall{ 2190ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 2191ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t badLayer, 21925a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t* outErr) { 2193ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 2194ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerColor(display, badLayer, 21955a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayer->getColor(), outErr)); 2196ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall } 2197ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall )); 2198ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall} 2199ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 2200b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall/* TESTCASE: Tests that the HWC2 can set the dataspace of a layer. */ 2201b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa WallTEST_F(Hwc2Test, SET_LAYER_DATASPACE) 2202b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall{ 2203b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 2204b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall setDataspace, advanceDataspace)); 2205b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall} 2206b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 2207b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall/* TESTCASE: Tests that the HWC2 can update the dataspace of a layer. */ 2208b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa WallTEST_F(Hwc2Test, SET_LAYER_DATASPACE_update) 2209b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall{ 2210b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 2211b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall setDataspace, advanceDataspace)); 2212b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall} 2213b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 2214b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set a dataspace for a bad layer. */ 2215b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa WallTEST_F(Hwc2Test, SET_LAYER_DATASPACE_bad_layer) 2216b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall{ 2217b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 2218b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall setDataspace)); 2219b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall} 22202b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 2221600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall/* TESTCASE: Tests that the HWC2 can set the display frame of a layer. */ 2222600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa WallTEST_F(Hwc2Test, SET_LAYER_DISPLAY_FRAME) 2223600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall{ 2224600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 2225600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall setDisplayFrame, advanceDisplayFrame)); 2226600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall} 2227600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 2228600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall/* TESTCASE: Tests that the HWC2 can update the display frame of a layer. */ 2229600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa WallTEST_F(Hwc2Test, SET_LAYER_DISPLAY_FRAME_update) 2230600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall{ 2231600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 2232600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall setDisplayFrame, advanceDisplayFrame)); 2233600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall} 2234600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 2235600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set the display frame of a bad layer. */ 2236600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa WallTEST_F(Hwc2Test, SET_LAYER_DISPLAY_FRAME_bad_layer) 2237600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall{ 2238600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 2239600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall setDisplayFrame)); 2240600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall} 2241600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 22422b1f53060ea8587a428f826cf7890354ff124722Marissa Wall/* TESTCASE: Tests that the HWC2 can set the plane alpha of a layer. */ 22432b1f53060ea8587a428f826cf7890354ff124722Marissa WallTEST_F(Hwc2Test, SET_LAYER_PLANE_ALPHA) 22442b1f53060ea8587a428f826cf7890354ff124722Marissa Wall{ 22452b1f53060ea8587a428f826cf7890354ff124722Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 22462b1f53060ea8587a428f826cf7890354ff124722Marissa Wall setPlaneAlpha, advancePlaneAlpha)); 22472b1f53060ea8587a428f826cf7890354ff124722Marissa Wall} 22482b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 22492b1f53060ea8587a428f826cf7890354ff124722Marissa Wall/* TESTCASE: Tests that the HWC2 can update the plane alpha of a layer. */ 22502b1f53060ea8587a428f826cf7890354ff124722Marissa WallTEST_F(Hwc2Test, SET_LAYER_PLANE_ALPHA_update) 22512b1f53060ea8587a428f826cf7890354ff124722Marissa Wall{ 22522b1f53060ea8587a428f826cf7890354ff124722Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 22532b1f53060ea8587a428f826cf7890354ff124722Marissa Wall setPlaneAlpha, advancePlaneAlpha)); 22542b1f53060ea8587a428f826cf7890354ff124722Marissa Wall} 22552b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 22562b1f53060ea8587a428f826cf7890354ff124722Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set a plane alpha for a bad layer. */ 22572b1f53060ea8587a428f826cf7890354ff124722Marissa WallTEST_F(Hwc2Test, SET_LAYER_PLANE_ALPHA_bad_layer) 22582b1f53060ea8587a428f826cf7890354ff124722Marissa Wall{ 22592b1f53060ea8587a428f826cf7890354ff124722Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 22602b1f53060ea8587a428f826cf7890354ff124722Marissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t badLayer, 22615a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayer* testLayer, hwc2_error_t *outErr) { 22622b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 22632b1f53060ea8587a428f826cf7890354ff124722Marissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerPlaneAlpha(display, 22645a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall badLayer, testLayer->getPlaneAlpha(), outErr)); 22652b1f53060ea8587a428f826cf7890354ff124722Marissa Wall } 22662b1f53060ea8587a428f826cf7890354ff124722Marissa Wall )); 22672b1f53060ea8587a428f826cf7890354ff124722Marissa Wall} 2268ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 2269c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall/* TESTCASE: Tests that the HWC2 can set the source crop of a layer. */ 2270c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa WallTEST_F(Hwc2Test, SET_LAYER_SOURCE_CROP) 2271c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall{ 2272c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 2273c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall setSourceCrop, advanceSourceCrop)); 2274c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall} 2275c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 2276c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall/* TESTCASE: Tests that the HWC2 can update the source crop of a layer. */ 2277c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa WallTEST_F(Hwc2Test, SET_LAYER_SOURCE_CROP_update) 2278c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall{ 2279c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 2280c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall setSourceCrop, advanceSourceCrop)); 2281c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall} 2282c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 2283c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set the source crop of a bad layer. */ 2284c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa WallTEST_F(Hwc2Test, SET_LAYER_SOURCE_CROP_bad_layer) 2285c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall{ 2286c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 2287c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall setSourceCrop)); 2288c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall} 2289c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 2290ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall/* TESTCASE: Tests that the HWC2 can set the surface damage of a layer. */ 2291ad761818a4426b4e6a0696ba90e05056aa35553cMarissa WallTEST_F(Hwc2Test, SET_LAYER_SURFACE_DAMAGE) 2292ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall{ 2293ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 2294ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall setSurfaceDamage, advanceSurfaceDamage)); 2295ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall} 2296ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 2297ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall/* TESTCASE: Tests that the HWC2 can update the surface damage of a layer. */ 2298ad761818a4426b4e6a0696ba90e05056aa35553cMarissa WallTEST_F(Hwc2Test, SET_LAYER_SURFACE_DAMAGE_update) 2299ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall{ 2300ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 2301ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall setSurfaceDamage, advanceSurfaceDamage)); 2302ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall} 2303ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 2304ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set the surface damage of a bad layer. */ 2305ad761818a4426b4e6a0696ba90e05056aa35553cMarissa WallTEST_F(Hwc2Test, SET_LAYER_SURFACE_DAMAGE_bad_layer) 2306ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall{ 2307ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 2308ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall setSurfaceDamage)); 2309ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall} 2310ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 2311ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall/* TESTCASE: Tests that the HWC2 can set the transform value of a layer. */ 2312ac10819373b1ed4901f26c822484a789a7ca4be0Marissa WallTEST_F(Hwc2Test, SET_LAYER_TRANSFORM) 2313ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall{ 2314ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperty(Hwc2TestCoverage::Complete, 2315ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall setTransform, advanceTransform)); 2316ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall} 2317ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 2318ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall/* TESTCASE: Tests that the HWC2 can update the transform value of a layer. */ 2319ac10819373b1ed4901f26c822484a789a7ca4be0Marissa WallTEST_F(Hwc2Test, SET_LAYER_TRANSFORM_update) 2320ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall{ 2321ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyUpdate(Hwc2TestCoverage::Complete, 2322ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall setTransform, advanceTransform)); 2323ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall} 2324ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 2325ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall/* TESTCASE: Tests that the HWC2 cannot set the transform for a bad layer. */ 2326ac10819373b1ed4901f26c822484a789a7ca4be0Marissa WallTEST_F(Hwc2Test, SET_LAYER_TRANSFORM_bad_layer) 2327ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall{ 2328ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 2329ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall setTransform)); 2330ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall} 2331273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 2332f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall/* TESTCASE: Tests that the HWC2 can set the visible region of a layer. */ 2333f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa WallTEST_F(Hwc2Test, SET_LAYER_VISIBLE_REGION) 2334f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall{ 2335f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperties(Hwc2TestCoverage::Basic, 5, 2336f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 2337f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall Hwc2TestLayers* testLayers) { 2338f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 2339f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerVisibleRegion(display, 2340f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall layer, testLayers->getVisibleRegion(layer))); 2341f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall }, 2342f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 2343f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall advanceVisibleRegions)); 2344f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall} 2345f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 2346f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set the visible region of a bad layer. */ 2347f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa WallTEST_F(Hwc2Test, SET_LAYER_VISIBLE_REGION_bad_layer) 2348f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall{ 2349f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 2350f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall setVisibleRegion)); 2351f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall} 2352f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 2353273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall/* TESTCASE: Tests that the HWC2 can set the z order of a layer. */ 2354273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa WallTEST_F(Hwc2Test, SET_LAYER_Z_ORDER) 2355273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall{ 2356273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerProperties(Hwc2TestCoverage::Complete, 10, 2357273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall [] (Hwc2Test* test, hwc2_display_t display, hwc2_layer_t layer, 23585a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall Hwc2TestLayers* testLayers) { 2359273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 2360273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall EXPECT_NO_FATAL_FAILURE(test->setLayerZOrder(display, layer, 23615a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall testLayers->getZOrder(layer))); 2362f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall }, 2363f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 2364f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall /* TestLayer z orders are set during the construction of TestLayers 2365f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall * and cannot be updated. There is no need (or ability) to cycle 2366f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall * through additional z order configurations. */ 2367f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall [] (Hwc2TestLayers* /*testLayers*/) { 2368f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall return false; 2369273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 2370273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall )); 2371273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall} 2372273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 2373273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall/* TESTCASE: Tests that the HWC2 can update the z order of a layer. */ 2374273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa WallTEST_F(Hwc2Test, SET_LAYER_Z_ORDER_update) 2375273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall{ 2376273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall const std::vector<uint32_t> zOrders = { static_cast<uint32_t>(0), 2377273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall static_cast<uint32_t>(1), static_cast<uint32_t>(UINT32_MAX / 4), 2378273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall static_cast<uint32_t>(UINT32_MAX / 2), 2379273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall static_cast<uint32_t>(UINT32_MAX) }; 2380273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 2381273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall for (auto display : mDisplays) { 2382273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall std::vector<hwc2_config_t> configs; 2383273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 2384273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(getDisplayConfigs(display, &configs)); 2385273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 2386273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall for (auto config : configs) { 2387273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall hwc2_layer_t layer; 2388273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 2389273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(setActiveConfig(display, config)); 2390273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 2391273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(createLayer(display, &layer)); 2392273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 2393273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall for (uint32_t zOrder : zOrders) { 2394273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall EXPECT_NO_FATAL_FAILURE(setLayerZOrder(display, layer, zOrder)); 2395273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 2396273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 2397273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(destroyLayer(display, layer)); 2398273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 2399273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall } 2400273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall} 2401273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall 2402273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall/* TESTCASE: Tests that the HWC2 cannot set the z order of a bad layer. */ 2403273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa WallTEST_F(Hwc2Test, SET_LAYER_Z_ORDER_bad_layer) 2404273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall{ 2405273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall ASSERT_NO_FATAL_FAILURE(setLayerPropertyBadLayer(Hwc2TestCoverage::Default, 2406273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall setZOrder)); 2407273b1dfa05287a0016ae1fc230cd3a5b1b7433faMarissa Wall} 2408