16bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall/* 26bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * Copyright (C) 2016 The Android Open Source Project 36bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * 46bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * Licensed under the Apache License, Version 2.0 (the "License"); 56bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * you may not use this file except in compliance with the License. 66bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * You may obtain a copy of the License at 76bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * 86bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * http://www.apache.org/licenses/LICENSE-2.0 96bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * 106bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * Unless required by applicable law or agreed to in writing, software 116bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * distributed under the License is distributed on an "AS IS" BASIS, 126bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 136bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * See the License for the specific language governing permissions and 146bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall * limitations under the License. 156bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall */ 166bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 176bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall#include <sstream> 18ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall#include <cutils/log.h> 19f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall#include <ui/Rect.h> 206bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 215a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall#define HWC2_INCLUDE_STRINGIFICATION 225a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall#define HWC2_USE_CPP11 235a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall#include <hardware/hwcomposer2.h> 245a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall#undef HWC2_INCLUDE_STRINGIFICATION 255a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall#undef HWC2_USE_CPP11 265a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 275a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall#include "Hwc2TestBuffer.h" 286bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall#include "Hwc2TestProperties.h" 296bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 30c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa WallHwc2TestBufferArea::Hwc2TestBufferArea(Hwc2TestCoverage coverage, 31c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall const Area& displayArea) 321cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall : Hwc2TestProperty(mBufferAreas, mCompositionSupport), 33c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall mScalars((coverage == Hwc2TestCoverage::Complete)? mCompleteScalars: 34c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall (coverage == Hwc2TestCoverage::Basic)? mBasicScalars: 35c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall mDefaultScalars), 36c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall mDisplayArea(displayArea) 37c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall{ 38c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall update(); 39c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall} 40c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 41c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wallstd::string Hwc2TestBufferArea::dump() const 42c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall{ 43c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall std::stringstream dmp; 44c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall const Area& curr = get(); 45c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall dmp << "\tbuffer area: width " << curr.width << ", height " << curr.height 46c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall << "\n"; 47c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall return dmp.str(); 48c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall} 49c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 505a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wallvoid Hwc2TestBufferArea::setDependent(Hwc2TestBuffer* buffer) 515a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall{ 525a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall mBuffer = buffer; 535a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall if (buffer) { 545a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall buffer->updateBufferArea(get()); 555a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall } 565a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall} 575a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall 58c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wallvoid Hwc2TestBufferArea::setDependent(Hwc2TestSourceCrop* sourceCrop) 59c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall{ 60c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall mSourceCrop = sourceCrop; 61ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall if (mSourceCrop) { 62ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall mSourceCrop->updateBufferArea(get()); 63ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall } 64ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall} 65ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 66ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wallvoid Hwc2TestBufferArea::setDependent(Hwc2TestSurfaceDamage* surfaceDamage) 67ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall{ 68ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall mSurfaceDamage = surfaceDamage; 69ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall if (mSurfaceDamage) { 70ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall mSurfaceDamage->updateBufferArea(get()); 71ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall } 72c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall} 73c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 74c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wallvoid Hwc2TestBufferArea::update() 75c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall{ 76c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall mBufferAreas.clear(); 77c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 78c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall if (mDisplayArea.width == 0 && mDisplayArea.height == 0) { 79c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall mBufferAreas.push_back({0, 0}); 80c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall return; 81c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall } 82c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 83c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall for (auto scalar : mScalars) { 84c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall mBufferAreas.push_back({static_cast<int32_t>(scalar * mDisplayArea.width), 85c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall static_cast<int32_t>(scalar * mDisplayArea.height)}); 86c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall } 87c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 88c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall updateDependents(); 89c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall} 90c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 91c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wallvoid Hwc2TestBufferArea::updateDependents() 92c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall{ 93c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall const Area& curr = get(); 94c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 955a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall if (mBuffer) 965a240aaf0e3a1dd52be6a8d0811ec727369a210dMarissa Wall mBuffer->updateBufferArea(curr); 97c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall if (mSourceCrop) 98c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall mSourceCrop->updateBufferArea(curr); 99ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall if (mSurfaceDamage) 100ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall mSurfaceDamage->updateBufferArea(curr); 101c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall} 102c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 103c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wallconst std::vector<float> Hwc2TestBufferArea::mDefaultScalars = { 104c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 1.0f, 105c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall}; 106c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 107c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wallconst std::vector<float> Hwc2TestBufferArea::mBasicScalars = { 108c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 1.0f, 0.5f, 109c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall}; 110c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 111c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wallconst std::vector<float> Hwc2TestBufferArea::mCompleteScalars = { 112c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 1.0f, 0.75f, 0.5f 113c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall}; 114c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 115c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 116ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa WallHwc2TestBlendMode::Hwc2TestBlendMode(Hwc2TestCoverage coverage) 117ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall : Hwc2TestProperty(coverage, mCompleteBlendModes, mBasicBlendModes, 1181cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall mDefaultBlendModes, mCompositionSupport) { } 119ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 120ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wallstd::string Hwc2TestBlendMode::dump() const 121ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall{ 122ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall std::stringstream dmp; 123ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall dmp << "\tblend mode: " << getBlendModeName(get()) << "\n"; 124ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall return dmp.str(); 125ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall} 126ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 127ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wallvoid Hwc2TestBlendMode::setDependent(Hwc2TestColor* color) 128ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall{ 129ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall mColor = color; 130ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall updateDependents(); 131ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall} 132ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 133ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wallvoid Hwc2TestBlendMode::updateDependents() 134ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall{ 135ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall if (mColor) 136ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall mColor->updateBlendMode(get()); 137ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall} 138ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 139ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wallconst std::vector<hwc2_blend_mode_t> Hwc2TestBlendMode::mDefaultBlendModes = { 140ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall HWC2_BLEND_MODE_NONE, 141ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall}; 142ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 143ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wallconst std::vector<hwc2_blend_mode_t> Hwc2TestBlendMode::mBasicBlendModes = { 144ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall HWC2_BLEND_MODE_NONE, 145ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall HWC2_BLEND_MODE_PREMULTIPLIED, 146ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall}; 147ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 148ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wallconst std::vector<hwc2_blend_mode_t> Hwc2TestBlendMode::mCompleteBlendModes = { 149ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall HWC2_BLEND_MODE_NONE, 150ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall HWC2_BLEND_MODE_PREMULTIPLIED, 151ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall HWC2_BLEND_MODE_COVERAGE, 152ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall}; 153ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 154ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall 155ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa WallHwc2TestColor::Hwc2TestColor(Hwc2TestCoverage coverage, 156ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall hwc2_blend_mode_t blendMode) 1571cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall : Hwc2TestProperty(mColors, mCompositionSupport), 158ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall mBaseColors((coverage == Hwc2TestCoverage::Complete)? mCompleteBaseColors: 159ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall (coverage == Hwc2TestCoverage::Basic)? mBasicBaseColors: 160ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall mDefaultBaseColors), 161ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall mBlendMode(blendMode) 162ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall{ 163ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall update(); 164ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall} 165ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 166ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wallstd::string Hwc2TestColor::dump() const 167ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall{ 168ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall std::stringstream dmp; 169ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall const hwc_color_t& color = get(); 170ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall dmp << "\tcolor: r " << std::to_string(color.r) << ", g " 171ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall << std::to_string(color.g) << ", b " << std::to_string(color.b) 172ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall << ", a " << std::to_string(color.a) << "\n"; 173ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall return dmp.str(); 174ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall} 175ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 176ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wallvoid Hwc2TestColor::updateBlendMode(hwc2_blend_mode_t blendMode) 177ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall{ 178ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall mBlendMode = blendMode; 179ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall update(); 180ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall} 181ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 182ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wallvoid Hwc2TestColor::update() 183ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall{ 184ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall if (mBlendMode != HWC2_BLEND_MODE_PREMULTIPLIED) { 185ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall mColors = mBaseColors; 186ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall return; 187ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall } 188ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 189ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall mColors.clear(); 190ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 191ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall for (const hwc_color_t& baseColor : mBaseColors) { 192ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall if (baseColor.a >= baseColor.r && baseColor.a >= baseColor.g 193ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall && baseColor.a >= baseColor.b) { 194ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall mColors.push_back(baseColor); 195ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall } 196ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall } 197ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 198ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall} 199ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 200ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wallconst std::vector<hwc_color_t> Hwc2TestColor::mDefaultBaseColors = { 201ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall {UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX}, 202ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall}; 203ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 204ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wallconst std::vector<hwc_color_t> Hwc2TestColor::mBasicBaseColors = { 205ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall {UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX}, 206ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall { 0, 0, 0, 0}, 207ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall}; 208ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 209ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wallconst std::vector<hwc_color_t> Hwc2TestColor::mCompleteBaseColors = { 210ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall {UINT8_MAX, UINT8_MAX, UINT8_MAX, UINT8_MAX}, 211ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall {UINT8_MAX, UINT8_MAX, UINT8_MAX, 0}, 212ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall {UINT8_MAX, UINT8_MAX, 0, UINT8_MAX}, 213ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall {UINT8_MAX, UINT8_MAX, 0, 0}, 214ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall {UINT8_MAX, 0, UINT8_MAX, UINT8_MAX}, 215ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall {UINT8_MAX, 0, UINT8_MAX, 0}, 216ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall {UINT8_MAX, 0, 0, UINT8_MAX}, 217ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall {UINT8_MAX, 0, 0, 0}, 218ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall { 0, UINT8_MAX, UINT8_MAX, UINT8_MAX}, 219ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall { 0, UINT8_MAX, UINT8_MAX, 0}, 220ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall { 0, UINT8_MAX, 0, UINT8_MAX}, 221ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall { 0, UINT8_MAX, 0, 0}, 222ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall { 0, 0, UINT8_MAX, UINT8_MAX}, 223ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall { 0, 0, UINT8_MAX, 0}, 224ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall { 0, 0, 0, UINT8_MAX}, 225ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall { 0, 0, 0, 0}, 226ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall}; 227ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 228ee24278db26505369c0e917d2a83e7e9fda36e4cMarissa Wall 2296bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa WallHwc2TestComposition::Hwc2TestComposition(Hwc2TestCoverage coverage) 230ffc67daf8b834ff2206d221ce15809cd5f21be55Marissa Wall : Hwc2TestProperty(coverage, mCompleteCompositions, mBasicCompositions, 2311cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall mDefaultCompositions, mCompositionSupport) { } 2326bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 2336bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wallstd::string Hwc2TestComposition::dump() const 2346bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall{ 2356bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall std::stringstream dmp; 2366bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall dmp << "\tcomposition: " << getCompositionName(get()) << "\n"; 2376bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall return dmp.str(); 2386bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall} 2396bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 2406bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wallconst std::vector<hwc2_composition_t> Hwc2TestComposition::mDefaultCompositions = { 2416bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall HWC2_COMPOSITION_DEVICE, 2426bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall}; 2436bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 2446bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wallconst std::vector<hwc2_composition_t> Hwc2TestComposition::mBasicCompositions = { 2456bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall HWC2_COMPOSITION_CLIENT, 2466bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall HWC2_COMPOSITION_DEVICE, 2476bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall}; 2486bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall 2496bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wallconst std::vector<hwc2_composition_t> Hwc2TestComposition::mCompleteCompositions = { 2506bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall HWC2_COMPOSITION_CLIENT, 2516bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall HWC2_COMPOSITION_DEVICE, 2526bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall HWC2_COMPOSITION_SOLID_COLOR, 2536bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall HWC2_COMPOSITION_CURSOR, 2546bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall HWC2_COMPOSITION_SIDEBAND, 2556bd8bfde4a965b743d3d4ebff5fdaa3db03a4bbcMarissa Wall}; 256b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 257b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 258b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa WallHwc2TestDataspace::Hwc2TestDataspace(Hwc2TestCoverage coverage) 259b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall : Hwc2TestProperty(coverage, completeDataspaces, basicDataspaces, 2601cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall defaultDataspaces, mCompositionSupport) { } 261b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 262b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wallstd::string Hwc2TestDataspace::dump() const 263b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall{ 264b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall std::stringstream dmp; 26534beb7a0ff0494b0c5ad81104171f8a49e599163Peiyong Lin dmp << "\tdataspace: " << static_cast<int32_t>(get()) << "\n"; 266b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall return dmp.str(); 267b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall} 268b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 26934beb7a0ff0494b0c5ad81104171f8a49e599163Peiyong Linconst std::vector<android::ui::Dataspace> Hwc2TestDataspace::defaultDataspaces = { 27034beb7a0ff0494b0c5ad81104171f8a49e599163Peiyong Lin android::ui::Dataspace::UNKNOWN, 271b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall}; 272b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 27334beb7a0ff0494b0c5ad81104171f8a49e599163Peiyong Linconst std::vector<android::ui::Dataspace> Hwc2TestDataspace::basicDataspaces = { 27434beb7a0ff0494b0c5ad81104171f8a49e599163Peiyong Lin android::ui::Dataspace::UNKNOWN, 27534beb7a0ff0494b0c5ad81104171f8a49e599163Peiyong Lin android::ui::Dataspace::V0_SRGB, 276b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall}; 277b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall 27834beb7a0ff0494b0c5ad81104171f8a49e599163Peiyong Linconst std::vector<android::ui::Dataspace> Hwc2TestDataspace::completeDataspaces = { 27934beb7a0ff0494b0c5ad81104171f8a49e599163Peiyong Lin android::ui::Dataspace::UNKNOWN, 28034beb7a0ff0494b0c5ad81104171f8a49e599163Peiyong Lin android::ui::Dataspace::ARBITRARY, 28134beb7a0ff0494b0c5ad81104171f8a49e599163Peiyong Lin android::ui::Dataspace::STANDARD_SHIFT, 28234beb7a0ff0494b0c5ad81104171f8a49e599163Peiyong Lin android::ui::Dataspace::STANDARD_MASK, 28334beb7a0ff0494b0c5ad81104171f8a49e599163Peiyong Lin android::ui::Dataspace::STANDARD_UNSPECIFIED, 28434beb7a0ff0494b0c5ad81104171f8a49e599163Peiyong Lin android::ui::Dataspace::STANDARD_BT709, 28534beb7a0ff0494b0c5ad81104171f8a49e599163Peiyong Lin android::ui::Dataspace::STANDARD_BT601_625, 28634beb7a0ff0494b0c5ad81104171f8a49e599163Peiyong Lin android::ui::Dataspace::STANDARD_BT601_625_UNADJUSTED, 28734beb7a0ff0494b0c5ad81104171f8a49e599163Peiyong Lin android::ui::Dataspace::STANDARD_BT601_525, 28834beb7a0ff0494b0c5ad81104171f8a49e599163Peiyong Lin android::ui::Dataspace::STANDARD_BT601_525_UNADJUSTED, 28934beb7a0ff0494b0c5ad81104171f8a49e599163Peiyong Lin android::ui::Dataspace::STANDARD_BT2020, 29034beb7a0ff0494b0c5ad81104171f8a49e599163Peiyong Lin android::ui::Dataspace::STANDARD_BT2020_CONSTANT_LUMINANCE, 29134beb7a0ff0494b0c5ad81104171f8a49e599163Peiyong Lin android::ui::Dataspace::STANDARD_BT470M, 29234beb7a0ff0494b0c5ad81104171f8a49e599163Peiyong Lin android::ui::Dataspace::STANDARD_FILM, 29334beb7a0ff0494b0c5ad81104171f8a49e599163Peiyong Lin android::ui::Dataspace::TRANSFER_SHIFT, 29434beb7a0ff0494b0c5ad81104171f8a49e599163Peiyong Lin android::ui::Dataspace::TRANSFER_MASK, 29534beb7a0ff0494b0c5ad81104171f8a49e599163Peiyong Lin android::ui::Dataspace::TRANSFER_UNSPECIFIED, 29634beb7a0ff0494b0c5ad81104171f8a49e599163Peiyong Lin android::ui::Dataspace::TRANSFER_LINEAR, 29734beb7a0ff0494b0c5ad81104171f8a49e599163Peiyong Lin android::ui::Dataspace::TRANSFER_SRGB, 29834beb7a0ff0494b0c5ad81104171f8a49e599163Peiyong Lin android::ui::Dataspace::TRANSFER_SMPTE_170M, 29934beb7a0ff0494b0c5ad81104171f8a49e599163Peiyong Lin android::ui::Dataspace::TRANSFER_GAMMA2_2, 30034beb7a0ff0494b0c5ad81104171f8a49e599163Peiyong Lin android::ui::Dataspace::TRANSFER_GAMMA2_8, 30134beb7a0ff0494b0c5ad81104171f8a49e599163Peiyong Lin android::ui::Dataspace::TRANSFER_ST2084, 30234beb7a0ff0494b0c5ad81104171f8a49e599163Peiyong Lin android::ui::Dataspace::TRANSFER_HLG, 30334beb7a0ff0494b0c5ad81104171f8a49e599163Peiyong Lin android::ui::Dataspace::RANGE_SHIFT, 30434beb7a0ff0494b0c5ad81104171f8a49e599163Peiyong Lin android::ui::Dataspace::RANGE_MASK, 30534beb7a0ff0494b0c5ad81104171f8a49e599163Peiyong Lin android::ui::Dataspace::RANGE_UNSPECIFIED, 30634beb7a0ff0494b0c5ad81104171f8a49e599163Peiyong Lin android::ui::Dataspace::RANGE_FULL, 30734beb7a0ff0494b0c5ad81104171f8a49e599163Peiyong Lin android::ui::Dataspace::RANGE_LIMITED, 30834beb7a0ff0494b0c5ad81104171f8a49e599163Peiyong Lin android::ui::Dataspace::SRGB_LINEAR, 30934beb7a0ff0494b0c5ad81104171f8a49e599163Peiyong Lin android::ui::Dataspace::V0_SRGB_LINEAR, 31034beb7a0ff0494b0c5ad81104171f8a49e599163Peiyong Lin android::ui::Dataspace::SRGB, 31134beb7a0ff0494b0c5ad81104171f8a49e599163Peiyong Lin android::ui::Dataspace::V0_SRGB, 31234beb7a0ff0494b0c5ad81104171f8a49e599163Peiyong Lin android::ui::Dataspace::JFIF, 31334beb7a0ff0494b0c5ad81104171f8a49e599163Peiyong Lin android::ui::Dataspace::V0_JFIF, 31434beb7a0ff0494b0c5ad81104171f8a49e599163Peiyong Lin android::ui::Dataspace::BT601_625, 31534beb7a0ff0494b0c5ad81104171f8a49e599163Peiyong Lin android::ui::Dataspace::V0_BT601_625, 31634beb7a0ff0494b0c5ad81104171f8a49e599163Peiyong Lin android::ui::Dataspace::BT601_525, 31734beb7a0ff0494b0c5ad81104171f8a49e599163Peiyong Lin android::ui::Dataspace::V0_BT601_525, 31834beb7a0ff0494b0c5ad81104171f8a49e599163Peiyong Lin android::ui::Dataspace::BT709, 31934beb7a0ff0494b0c5ad81104171f8a49e599163Peiyong Lin android::ui::Dataspace::V0_BT709, 32034beb7a0ff0494b0c5ad81104171f8a49e599163Peiyong Lin android::ui::Dataspace::DEPTH, 321b72b5c9ef4a6235c5bc2c4a3cceb23baf963815bMarissa Wall}; 3222b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 3232b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 324bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa WallHwc2TestDisplayDimension::Hwc2TestDisplayDimension(Hwc2TestCoverage coverage) 325bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall : Hwc2TestProperty( 326bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall (coverage == Hwc2TestCoverage::Complete)? mCompleteDisplayDimensions: 327bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall (coverage == Hwc2TestCoverage::Basic)? mBasicDisplayDimensions: 328bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall mDefaultDisplayDimensions, mCompositionSupport) { } 329bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 330bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wallstd::string Hwc2TestDisplayDimension::dump() const 331bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall{ 332bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall std::stringstream dmp; 333bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall const UnsignedArea& curr = get(); 334bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall dmp << "\tdisplay dimension: " << curr.width<< " x " << curr.height<< "\n"; 335bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall return dmp.str(); 336bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall} 337bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 3383f05602a8c33a4b66a47dc077eaba95f9f1e3977David Hanna Jrvoid Hwc2TestDisplayDimension::setDependent(Hwc2TestVirtualBuffer* buffer) 339bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall{ 3403f05602a8c33a4b66a47dc077eaba95f9f1e3977David Hanna Jr mBuffers.insert(buffer); 341bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall updateDependents(); 342bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall} 343bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 344bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wallvoid Hwc2TestDisplayDimension::updateDependents() 345bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall{ 346bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall const UnsignedArea& curr = get(); 347bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 3483f05602a8c33a4b66a47dc077eaba95f9f1e3977David Hanna Jr for (Hwc2TestVirtualBuffer* buffer : mBuffers) 3493f05602a8c33a4b66a47dc077eaba95f9f1e3977David Hanna Jr buffer->updateBufferArea({static_cast<int32_t>(curr.width), 350bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall static_cast<int32_t>(curr.height)}); 351bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall} 352bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 353bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wallconst std::vector<UnsignedArea> 354bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall Hwc2TestDisplayDimension::mDefaultDisplayDimensions = { 355bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall {1920, 1080}, 356bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall}; 357bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 358bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wallconst std::vector<UnsignedArea> 359bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall Hwc2TestDisplayDimension::mBasicDisplayDimensions = { 360bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall {640, 480}, 361bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall {1280, 720}, 362bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall {1920, 1080}, 363bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall {1920, 1200}, 364bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall}; 365bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 366bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wallconst std::vector<UnsignedArea> 367bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall Hwc2TestDisplayDimension::mCompleteDisplayDimensions = { 368bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall {320, 240}, 369bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall {480, 320}, 370bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall {640, 480}, 371bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall {1280, 720}, 372bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall {1920, 1080}, 373bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall {1920, 1200}, 374bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall {2560, 1440}, 375bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall {2560, 1600}, 376bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall {3840, 2160}, 377bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall {4096, 2160}, 378bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall}; 379bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 380bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 381600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa WallHwc2TestDisplayFrame::Hwc2TestDisplayFrame(Hwc2TestCoverage coverage, 382600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall const Area& displayArea) 3831cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall : Hwc2TestProperty(mDisplayFrames, mCompositionSupport), 384600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall mFrectScalars((coverage == Hwc2TestCoverage::Complete)? mCompleteFrectScalars: 385600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall (coverage == Hwc2TestCoverage::Basic)? mBasicFrectScalars: 386600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall mDefaultFrectScalars), 387600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall mDisplayArea(displayArea) 388600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall{ 389600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall update(); 390600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall} 391600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 392600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wallstd::string Hwc2TestDisplayFrame::dump() const 393600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall{ 394600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall std::stringstream dmp; 395600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall const hwc_rect_t& displayFrame = get(); 396600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall dmp << "\tdisplay frame: left " << displayFrame.left << ", top " 397600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall << displayFrame.top << ", right " << displayFrame.right 398600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall << ", bottom " << displayFrame.bottom << "\n"; 399600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall return dmp.str(); 400600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall} 401600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 402600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wallvoid Hwc2TestDisplayFrame::update() 403600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall{ 404600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall mDisplayFrames.clear(); 405600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 406600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall if (mDisplayArea.width == 0 && mDisplayArea.height == 0) { 407600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall mDisplayFrames.push_back({0, 0, 0, 0}); 408600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall return; 409600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall } 410600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 411600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall for (const auto& frectScalar : mFrectScalars) { 412600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall mDisplayFrames.push_back({ 413600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall static_cast<int>(frectScalar.left * mDisplayArea.width), 414600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall static_cast<int>(frectScalar.top * mDisplayArea.height), 415600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall static_cast<int>(frectScalar.right * mDisplayArea.width), 416600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall static_cast<int>(frectScalar.bottom * mDisplayArea.height)}); 417600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall } 418600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall} 419600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 420600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wallconst std::vector<hwc_frect_t> Hwc2TestDisplayFrame::mDefaultFrectScalars = { 421600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall {0.0, 0.0, 1.0, 1.0}, 422600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall}; 423600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 424600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wallconst std::vector<hwc_frect_t> Hwc2TestDisplayFrame::mBasicFrectScalars = { 425600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall {0.0, 0.0, 1.0, 1.0}, 426600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall {0.0, 0.0, 1.0, 0.05}, 427600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall {0.0, 0.95, 1.0, 1.0}, 428600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall}; 429600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 430600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wallconst std::vector<hwc_frect_t> Hwc2TestDisplayFrame::mCompleteFrectScalars = { 431600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall {0.0, 0.0, 1.0, 1.0}, 432600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall {0.0, 0.05, 1.0, 0.95}, 433600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall {0.0, 0.05, 1.0, 1.0}, 434600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall {0.0, 0.0, 1.0, 0.05}, 435600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall {0.0, 0.95, 1.0, 1.0}, 436600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall {0.25, 0.0, 0.75, 0.35}, 437600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall {0.25, 0.25, 0.75, 0.75}, 438600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall}; 439600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 440600a73b6110d6fdcebe072a9d8e2dbbe6de1c6b7Marissa Wall 4412b1f53060ea8587a428f826cf7890354ff124722Marissa WallHwc2TestPlaneAlpha::Hwc2TestPlaneAlpha(Hwc2TestCoverage coverage) 4422b1f53060ea8587a428f826cf7890354ff124722Marissa Wall : Hwc2TestProperty(coverage, mCompletePlaneAlphas, mBasicPlaneAlphas, 4431cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall mDefaultPlaneAlphas, mCompositionSupport) { } 4442b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 4452b1f53060ea8587a428f826cf7890354ff124722Marissa Wallstd::string Hwc2TestPlaneAlpha::dump() const 4462b1f53060ea8587a428f826cf7890354ff124722Marissa Wall{ 4472b1f53060ea8587a428f826cf7890354ff124722Marissa Wall std::stringstream dmp; 4482b1f53060ea8587a428f826cf7890354ff124722Marissa Wall dmp << "\tplane alpha: " << get() << "\n"; 4492b1f53060ea8587a428f826cf7890354ff124722Marissa Wall return dmp.str(); 4502b1f53060ea8587a428f826cf7890354ff124722Marissa Wall} 4512b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 4522b1f53060ea8587a428f826cf7890354ff124722Marissa Wallconst std::vector<float> Hwc2TestPlaneAlpha::mDefaultPlaneAlphas = { 4532b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 1.0f, 4542b1f53060ea8587a428f826cf7890354ff124722Marissa Wall}; 4552b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 4562b1f53060ea8587a428f826cf7890354ff124722Marissa Wallconst std::vector<float> Hwc2TestPlaneAlpha::mBasicPlaneAlphas = { 4572b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 1.0f, 0.0f, 4582b1f53060ea8587a428f826cf7890354ff124722Marissa Wall}; 4592b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 4602b1f53060ea8587a428f826cf7890354ff124722Marissa Wallconst std::vector<float> Hwc2TestPlaneAlpha::mCompletePlaneAlphas = { 4612b1f53060ea8587a428f826cf7890354ff124722Marissa Wall 1.0f, 0.75f, 0.5f, 0.25f, 0.0f, 4622b1f53060ea8587a428f826cf7890354ff124722Marissa Wall}; 463ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 464ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 465c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa WallHwc2TestSourceCrop::Hwc2TestSourceCrop(Hwc2TestCoverage coverage, 466c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall const Area& bufferArea) 4671cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall : Hwc2TestProperty(mSourceCrops, mCompositionSupport), 468c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall mFrectScalars((coverage == Hwc2TestCoverage::Complete)? mCompleteFrectScalars: 469c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall (coverage == Hwc2TestCoverage::Basic)? mBasicFrectScalars: 470c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall mDefaultFrectScalars), 471c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall mBufferArea(bufferArea) 472c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall{ 473c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall update(); 474c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall} 475c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 476c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wallstd::string Hwc2TestSourceCrop::dump() const 477c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall{ 478c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall std::stringstream dmp; 479c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall const hwc_frect_t& sourceCrop = get(); 480c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall dmp << "\tsource crop: left " << sourceCrop.left << ", top " 481c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall << sourceCrop.top << ", right " << sourceCrop.right << ", bottom " 482c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall << sourceCrop.bottom << "\n"; 483c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall return dmp.str(); 484c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall} 485c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 486c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wallvoid Hwc2TestSourceCrop::updateBufferArea(const Area& bufferArea) 487c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall{ 488c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall mBufferArea = bufferArea; 489c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall update(); 490c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall} 491c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 492c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wallvoid Hwc2TestSourceCrop::update() 493c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall{ 494c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall mSourceCrops.clear(); 495c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 496c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall if (mBufferArea.width == 0 && mBufferArea.height == 0) { 497c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall mSourceCrops.push_back({0, 0, 0, 0}); 498c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall return; 499c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall } 500c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 501c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall for (const auto& frectScalar : mFrectScalars) { 502c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall mSourceCrops.push_back({ 503c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall frectScalar.left * mBufferArea.width, 504c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall frectScalar.top * mBufferArea.height, 505c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall frectScalar.right * mBufferArea.width, 506c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall frectScalar.bottom * mBufferArea.height}); 507c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall } 508c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall} 509c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 510c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wallconst std::vector<hwc_frect_t> Hwc2TestSourceCrop::mDefaultFrectScalars = { 511c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall {0.0, 0.0, 1.0, 1.0}, 512c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall}; 513c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 514c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wallconst std::vector<hwc_frect_t> Hwc2TestSourceCrop::mBasicFrectScalars = { 515c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall {0.0, 0.0, 1.0, 1.0}, 516c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall {0.0, 0.0, 0.5, 0.5}, 517c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall {0.5, 0.5, 1.0, 1.0}, 518c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall}; 519c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 520c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wallconst std::vector<hwc_frect_t> Hwc2TestSourceCrop::mCompleteFrectScalars = { 521c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall {0.0, 0.0, 1.0, 1.0}, 522c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall {0.0, 0.0, 0.5, 0.5}, 523c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall {0.5, 0.5, 1.0, 1.0}, 524c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall {0.0, 0.0, 0.25, 0.25}, 525c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall {0.25, 0.25, 0.75, 0.75}, 526c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall}; 527c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 528c57468f1f6dfc870bea10e814a686793e64f6cf3Marissa Wall 529ad761818a4426b4e6a0696ba90e05056aa35553cMarissa WallHwc2TestSurfaceDamage::Hwc2TestSurfaceDamage(Hwc2TestCoverage coverage) 5301cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall : Hwc2TestProperty(mSurfaceDamages, mCompositionSupport), 531ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall mRegionScalars((coverage == Hwc2TestCoverage::Complete)? mCompleteRegionScalars: 532ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall (coverage == Hwc2TestCoverage::Basic)? mBasicRegionScalars: 533ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall mDefaultRegionScalars) 534ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall{ 535ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall update(); 536ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall} 537ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 538ad761818a4426b4e6a0696ba90e05056aa35553cMarissa WallHwc2TestSurfaceDamage::~Hwc2TestSurfaceDamage() 539ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall{ 540ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall freeSurfaceDamages(); 541ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall} 542ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 543ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wallstd::string Hwc2TestSurfaceDamage::dump() const 544ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall{ 545ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall std::stringstream dmp; 546ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 547ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall const hwc_region_t& curr = get(); 548ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall dmp << "\tsurface damage: region count " << curr.numRects << "\n"; 549ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall for (size_t i = 0; i < curr.numRects; i++) { 550ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall const hwc_rect_t& rect = curr.rects[i]; 551ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall dmp << "\t\trect: left " << rect.left << ", top " << rect.top 552ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall << ", right " << rect.right << ", bottom " << rect.bottom << "\n"; 553ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall } 554ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 555ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall return dmp.str(); 556ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall} 557ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 558ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wallvoid Hwc2TestSurfaceDamage::updateBufferArea(const Area& bufferArea) 559ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall{ 560ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall mBufferArea = bufferArea; 561ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall update(); 562ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall} 563ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 564ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wallvoid Hwc2TestSurfaceDamage::update() 565ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall{ 566ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall freeSurfaceDamages(); 567ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 568ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall if (mBufferArea.width == 0 && mBufferArea.height == 0) { 569ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall mSurfaceDamages.push_back({0, nullptr}); 570ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall return; 571ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall } 572ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 573ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall hwc_region_t damage; 574ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 575ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall for (const auto& regionScalar : mRegionScalars) { 576ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall damage.numRects = regionScalar.size(); 577ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 578ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall if (damage.numRects > 0) { 579ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall hwc_rect_t* rects = new hwc_rect_t[damage.numRects]; 580ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall if (!rects) { 581ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall ALOGW("failed to allocate new hwc_rect_t array"); 582ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall continue; 583ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall } 584ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 585ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall for (size_t i = 0; i < damage.numRects; i++) { 586ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall rects[i].left = regionScalar[i].left * mBufferArea.width; 587ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall rects[i].top = regionScalar[i].top * mBufferArea.height; 588ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall rects[i].right = regionScalar[i].right * mBufferArea.width; 589ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall rects[i].bottom = regionScalar[i].bottom * mBufferArea.height; 590ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall } 591ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 592ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall damage.rects = static_cast<hwc_rect_t const*>(rects); 593ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall } else { 594ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall damage.rects = nullptr; 595ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall } 596ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 597ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall mSurfaceDamages.push_back(damage); 598ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall } 599ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall} 600ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 601ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wallvoid Hwc2TestSurfaceDamage::freeSurfaceDamages() 602ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall{ 603ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall for (const auto& surfaceDamage : mSurfaceDamages) { 604ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall if (surfaceDamage.numRects > 0 && surfaceDamage.rects) 605ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall delete[] surfaceDamage.rects; 606ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall } 607ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall mSurfaceDamages.clear(); 608ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall} 609ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 610ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wallconst std::vector<std::vector<hwc_frect_t>> Hwc2TestSurfaceDamage::mDefaultRegionScalars = { 611ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall {{}}, 612ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall}; 613ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 614ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wallconst std::vector<std::vector<hwc_frect_t>> Hwc2TestSurfaceDamage::mBasicRegionScalars = { 615ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall {{}}, 616ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall {{0.0, 0.0, 1.0, 1.0}}, 617ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall}; 618ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 619ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wallconst std::vector<std::vector<hwc_frect_t>> Hwc2TestSurfaceDamage::mCompleteRegionScalars = { 620ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall {{}}, 621ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall {{0.0, 0.0, 1.0, 1.0}}, 622ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall {{0.0, 0.0, 0.5, 0.5}, {0.5, 0.5, 1.0, 1.0}}, 623ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall}; 624ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 625ad761818a4426b4e6a0696ba90e05056aa35553cMarissa Wall 626ac10819373b1ed4901f26c822484a789a7ca4be0Marissa WallHwc2TestTransform::Hwc2TestTransform(Hwc2TestCoverage coverage) 627ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall : Hwc2TestProperty(coverage, mCompleteTransforms, mBasicTransforms, 6281cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall mDefaultTransforms, mCompositionSupport) { } 629ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 630ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wallstd::string Hwc2TestTransform::dump() const 631ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall{ 632ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall std::stringstream dmp; 633ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall dmp << "\ttransform: " << getTransformName(get()) << "\n"; 634ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall return dmp.str(); 635ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall} 636ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 637ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wallconst std::vector<hwc_transform_t> Hwc2TestTransform::mDefaultTransforms = { 638ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall static_cast<hwc_transform_t>(0), 639ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall}; 640ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 641ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wallconst std::vector<hwc_transform_t> Hwc2TestTransform::mBasicTransforms = { 642ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall static_cast<hwc_transform_t>(0), 643ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall HWC_TRANSFORM_FLIP_H, 644ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall HWC_TRANSFORM_FLIP_V, 645ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall HWC_TRANSFORM_ROT_90, 646ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall}; 647ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall 648ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wallconst std::vector<hwc_transform_t> Hwc2TestTransform::mCompleteTransforms = { 649ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall static_cast<hwc_transform_t>(0), 650ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall HWC_TRANSFORM_FLIP_H, 651ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall HWC_TRANSFORM_FLIP_V, 652ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall HWC_TRANSFORM_ROT_90, 653ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall HWC_TRANSFORM_ROT_180, 654ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall HWC_TRANSFORM_ROT_270, 655ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall HWC_TRANSFORM_FLIP_H_ROT_90, 656ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall HWC_TRANSFORM_FLIP_V_ROT_90, 657ac10819373b1ed4901f26c822484a789a7ca4be0Marissa Wall}; 658f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 659f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 660f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa WallHwc2TestVisibleRegion::~Hwc2TestVisibleRegion() 661f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall{ 662f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall release(); 663f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall} 664f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 665f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wallstd::string Hwc2TestVisibleRegion::dump() const 666f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall{ 667f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall std::stringstream dmp; 668f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 669f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall const hwc_region_t& curr = get(); 670f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall dmp << "\tvisible region: region count " << curr.numRects << "\n"; 671f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall for (size_t i = 0; i < curr.numRects; i++) { 672f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall const hwc_rect_t& rect = curr.rects[i]; 673f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall dmp << "\t\trect: left " << rect.left << ", top " << rect.top 674f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall << ", right " << rect.right << ", bottom " << rect.bottom << "\n"; 675f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall } 676f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 677f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall return dmp.str(); 678f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall} 679f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 680f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wallvoid Hwc2TestVisibleRegion::set(const android::Region& visibleRegion) 681f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall{ 682f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall release(); 683f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 684f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall size_t size = 0; 685f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall const android::Rect* rects = visibleRegion.getArray(&size); 686f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 687f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall mVisibleRegion.numRects = size; 688f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall mVisibleRegion.rects = nullptr; 689f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 690f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall if (size > 0) { 691f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall hwc_rect_t* hwcRects = new hwc_rect_t[size]; 692f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall for (size_t i = 0; i < size; i++) { 693f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall hwcRects[i].left = rects[i].left; 694f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall hwcRects[i].top = rects[i].top; 695f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall hwcRects[i].right = rects[i].right; 696f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall hwcRects[i].bottom = rects[i].bottom; 697f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall } 698f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall mVisibleRegion.rects = hwcRects; 699f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall } 700f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall} 701f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 702f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wallhwc_region_t Hwc2TestVisibleRegion::get() const 703f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall{ 704f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall return mVisibleRegion; 705f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall} 706f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall 707f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wallvoid Hwc2TestVisibleRegion::release() 708f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall{ 709f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall if (mVisibleRegion.numRects > 0 && mVisibleRegion.rects) 710f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall delete[] mVisibleRegion.rects; 711f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall mVisibleRegion.rects = nullptr; 712f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall mVisibleRegion.numRects = 0; 713f7618ed1b4d806e06c872c0fccce57163cf93b6aMarissa Wall} 7141cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 7151cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall/* Identifies which layer properties are supported by each composition type. 7161cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall * hwc2_composition_t values range from: 7171cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall * HWC2_COMPOSITION_INVALID = 0, 7181cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall * HWC2_COMPOSITION_CLIENT = 1, 7191cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall * HWC2_COMPOSITION_DEVICE = 2, 7201cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall * HWC2_COMPOSITION_SOLID_COLOR = 3, 7211cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall * HWC2_COMPOSITION_CURSOR = 4, 7221cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall * HWC2_COMPOSITION_SIDEBAND = 5, 7231cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall * 7241cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall * Each property array can be indexed by a hwc2_composition_t value. 7251cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall * By using an array instead of a more complex data structure, runtimes for 7261cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall * some test cases showed a noticeable improvement. 7271cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall */ 7281cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 7291cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall/* INVALID CLIENT DEVICE COLOR CURSOR SIDEBAND */ 7301cd789cd2b300427467586f4ec721a8123f118b7Marissa Wallconst std::array<bool, 6> Hwc2TestBufferArea::mCompositionSupport = {{ 7311cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall false, true, true, false, true, true, 7321cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall}}; 7331cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 7341cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall/* INVALID CLIENT DEVICE COLOR CURSOR SIDEBAND */ 7351cd789cd2b300427467586f4ec721a8123f118b7Marissa Wallconst std::array<bool, 6> Hwc2TestBlendMode::mCompositionSupport = {{ 7361cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall false, true, true, false, true, true, 7371cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall}}; 7381cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 7391cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall/* INVALID CLIENT DEVICE COLOR CURSOR SIDEBAND */ 7401cd789cd2b300427467586f4ec721a8123f118b7Marissa Wallconst std::array<bool, 6> Hwc2TestColor::mCompositionSupport = {{ 7411cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall false, false, false, true, false, false, 7421cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall}}; 7431cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 7441cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall/* INVALID CLIENT DEVICE COLOR CURSOR SIDEBAND */ 7451cd789cd2b300427467586f4ec721a8123f118b7Marissa Wallconst std::array<bool, 6> Hwc2TestComposition::mCompositionSupport = {{ 7461cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall false, true, true, true, true, true, 7471cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall}}; 7481cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 7491cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall/* INVALID CLIENT DEVICE COLOR CURSOR SIDEBAND */ 7501cd789cd2b300427467586f4ec721a8123f118b7Marissa Wallconst std::array<bool, 6> Hwc2TestDataspace::mCompositionSupport = {{ 7511cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall false, true, true, true, true, false, 7521cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall}}; 7531cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 7541cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall/* INVALID CLIENT DEVICE COLOR CURSOR SIDEBAND */ 755bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wallconst std::array<bool, 6> Hwc2TestDisplayDimension::mCompositionSupport = {{ 756bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall false, true, true, true, true, true, 757bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall}}; 758bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall 759bad1bc78ef50648fadbe725a1fe1c28d62097351Marissa Wall/* INVALID CLIENT DEVICE COLOR CURSOR SIDEBAND */ 7601cd789cd2b300427467586f4ec721a8123f118b7Marissa Wallconst std::array<bool, 6> Hwc2TestDisplayFrame::mCompositionSupport = {{ 7611cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall false, true, true, true, false, true, 7621cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall}}; 7631cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 7641cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall/* INVALID CLIENT DEVICE COLOR CURSOR SIDEBAND */ 7651cd789cd2b300427467586f4ec721a8123f118b7Marissa Wallconst std::array<bool, 6> Hwc2TestPlaneAlpha::mCompositionSupport = {{ 7661cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall false, true, true, true, true, true, 7671cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall}}; 7681cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 7691cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall/* INVALID CLIENT DEVICE COLOR CURSOR SIDEBAND */ 7701cd789cd2b300427467586f4ec721a8123f118b7Marissa Wallconst std::array<bool, 6> Hwc2TestSourceCrop::mCompositionSupport = {{ 7711cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall false, true, true, false, true, false, 7721cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall}}; 7731cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 7741cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall/* INVALID CLIENT DEVICE COLOR CURSOR SIDEBAND */ 7751cd789cd2b300427467586f4ec721a8123f118b7Marissa Wallconst std::array<bool, 6> Hwc2TestSurfaceDamage::mCompositionSupport = {{ 7761cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall false, false, true, false, true, false, 7771cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall}}; 7781cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall 7791cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall/* INVALID CLIENT DEVICE COLOR CURSOR SIDEBAND */ 7801cd789cd2b300427467586f4ec721a8123f118b7Marissa Wallconst std::array<bool, 6> Hwc2TestTransform::mCompositionSupport = {{ 7811cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall false, true, true, false, true, true, 7821cd789cd2b300427467586f4ec721a8123f118b7Marissa Wall}}; 783