Hwc2TestClientTarget.cpp revision f18cfb0a780c69f12439457ccc3f5272db767fdd
1f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall/* 2f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall * Copyright (C) 2016 The Android Open Source Project 3f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall * 4f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall * Licensed under the Apache License, Version 2.0 (the "License"); 5f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall * you may not use this file except in compliance with the License. 6f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall * You may obtain a copy of the License at 7f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall * 8f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall * http://www.apache.org/licenses/LICENSE-2.0 9f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall * 10f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall * Unless required by applicable law or agreed to in writing, software 11f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall * distributed under the License is distributed on an "AS IS" BASIS, 12f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall * See the License for the specific language governing permissions and 14f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall * limitations under the License. 15f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall */ 16f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 17f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall#include <sstream> 18f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 19f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall#include <ui/Rect.h> 20f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 21f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall#include "Hwc2TestClientTarget.h" 22f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 23f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wallint Hwc2TestClientTarget::getBuffer(const Hwc2TestLayers& testLayers, 24f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const std::set<hwc2_layer_t>& clientLayers, 25f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const std::set<hwc2_layer_t>& clearLayers, bool flipClientTarget, 26f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall const Area& displayArea, buffer_handle_t* outHandle, 27f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall int32_t* outAcquireFence) 28f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall{ 29f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall if (!flipClientTarget) { 30f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall bool needsClientTarget = false; 31f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 32f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall for (auto clientLayer : clientLayers) { 33f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall if (testLayers.getVisibleRegion(clientLayer).numRects > 0) { 34f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall needsClientTarget = true; 35f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall break; 36f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } 37f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } 38f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 39f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall if (!needsClientTarget) { 40f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall *outHandle = nullptr; 41f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall *outAcquireFence = -1; 42f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall return 0; 43f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } 44f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } 45f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 46f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall return mBuffer.get(outHandle, outAcquireFence, displayArea, 47f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall &testLayers, &clientLayers, &clearLayers); 48f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall} 49f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 50f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 51f18cfb0a780c69f12439457ccc3f5272db767fddMarissa WallHwc2TestClientTargetSupport::Hwc2TestClientTargetSupport( 52f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall Hwc2TestCoverage coverage, const Area& displayArea) 53f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall : mBufferArea(coverage, displayArea), 54f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall mDataspace(coverage), 55f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall mSurfaceDamage(coverage) 56f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall{ 57f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall mBufferArea.setDependent(&mSurfaceDamage); 58f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall} 59f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 60f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wallstd::string Hwc2TestClientTargetSupport::dump() const 61f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall{ 62f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall std::stringstream dmp; 63f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 64f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall dmp << "client target: \n"; 65f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 66f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall for (auto property : properties) { 67f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall dmp << property->dump(); 68f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } 69f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 70f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall return dmp.str(); 71f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall} 72f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 73f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wallvoid Hwc2TestClientTargetSupport::reset() 74f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall{ 75f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall for (auto property : properties) { 76f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall property->reset(); 77f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } 78f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall} 79f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 80f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wallbool Hwc2TestClientTargetSupport::advance() 81f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall{ 82f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall for (auto property : properties) { 83f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall if (property->advance()) 84f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall return true; 85f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall } 86f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall return false; 87f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall} 88f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 89f18cfb0a780c69f12439457ccc3f5272db767fddMarissa WallArea Hwc2TestClientTargetSupport::getBufferArea() const 90f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall{ 91f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall return mBufferArea.get(); 92f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall} 93f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 94f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wallandroid_dataspace_t Hwc2TestClientTargetSupport::getDataspace() const 95f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall{ 96f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall return mDataspace.get(); 97f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall} 98f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall 99f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wallconst hwc_region_t Hwc2TestClientTargetSupport::getSurfaceDamage() const 100f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall{ 101f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall return mSurfaceDamage.get(); 102f18cfb0a780c69f12439457ccc3f5272db767fddMarissa Wall} 103