DisplayAnalyzer.cpp revision e2ad4c047651d4442f6a0e002290016d45e9201a
165efc253a628175c7afa95c431b746ea20052794Andy Qiu/* 265efc253a628175c7afa95c431b746ea20052794Andy Qiu * Copyright © 2012 Intel Corporation 365efc253a628175c7afa95c431b746ea20052794Andy Qiu * All rights reserved. 465efc253a628175c7afa95c431b746ea20052794Andy Qiu * 565efc253a628175c7afa95c431b746ea20052794Andy Qiu * Permission is hereby granted, free of charge, to any person obtaining a 665efc253a628175c7afa95c431b746ea20052794Andy Qiu * copy of this software and associated documentation files (the "Software"), 765efc253a628175c7afa95c431b746ea20052794Andy Qiu * to deal in the Software without restriction, including without limitation 865efc253a628175c7afa95c431b746ea20052794Andy Qiu * the rights to use, copy, modify, merge, publish, distribute, sublicense, 965efc253a628175c7afa95c431b746ea20052794Andy Qiu * and/or sell copies of the Software, and to permit persons to whom the 1065efc253a628175c7afa95c431b746ea20052794Andy Qiu * Software is furnished to do so, subject to the following conditions: 1165efc253a628175c7afa95c431b746ea20052794Andy Qiu * 1265efc253a628175c7afa95c431b746ea20052794Andy Qiu * The above copyright notice and this permission notice (including the next 1365efc253a628175c7afa95c431b746ea20052794Andy Qiu * paragraph) shall be included in all copies or substantial portions of the 1465efc253a628175c7afa95c431b746ea20052794Andy Qiu * Software. 1565efc253a628175c7afa95c431b746ea20052794Andy Qiu * 1665efc253a628175c7afa95c431b746ea20052794Andy Qiu * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 1765efc253a628175c7afa95c431b746ea20052794Andy Qiu * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 1865efc253a628175c7afa95c431b746ea20052794Andy Qiu * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL 1965efc253a628175c7afa95c431b746ea20052794Andy Qiu * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 2065efc253a628175c7afa95c431b746ea20052794Andy Qiu * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING 2165efc253a628175c7afa95c431b746ea20052794Andy Qiu * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS 2265efc253a628175c7afa95c431b746ea20052794Andy Qiu * IN THE SOFTWARE. 2365efc253a628175c7afa95c431b746ea20052794Andy Qiu * 2465efc253a628175c7afa95c431b746ea20052794Andy Qiu * Authors: 2565efc253a628175c7afa95c431b746ea20052794Andy Qiu * Jackie Li <yaodong.li@intel.com> 2665efc253a628175c7afa95c431b746ea20052794Andy Qiu * 2765efc253a628175c7afa95c431b746ea20052794Andy Qiu */ 2865efc253a628175c7afa95c431b746ea20052794Andy Qiu 2965efc253a628175c7afa95c431b746ea20052794Andy Qiu#include <HwcTrace.h> 3065efc253a628175c7afa95c431b746ea20052794Andy Qiu#include <IDisplayDevice.h> 3165efc253a628175c7afa95c431b746ea20052794Andy Qiu#include <DisplayQuery.h> 3265efc253a628175c7afa95c431b746ea20052794Andy Qiu#include <BufferManager.h> 3365efc253a628175c7afa95c431b746ea20052794Andy Qiu#include <DisplayPlaneManager.h> 3465efc253a628175c7afa95c431b746ea20052794Andy Qiu#include <Hwcomposer.h> 3565efc253a628175c7afa95c431b746ea20052794Andy Qiu#include <DisplayAnalyzer.h> 3665efc253a628175c7afa95c431b746ea20052794Andy Qiu 3765efc253a628175c7afa95c431b746ea20052794Andy Qiu 3865efc253a628175c7afa95c431b746ea20052794Andy Qiunamespace android { 3965efc253a628175c7afa95c431b746ea20052794Andy Qiunamespace intel { 4065efc253a628175c7afa95c431b746ea20052794Andy Qiu 4165efc253a628175c7afa95c431b746ea20052794Andy QiuDisplayAnalyzer::DisplayAnalyzer() 4265efc253a628175c7afa95c431b746ea20052794Andy Qiu : mInitialized(false), 43770346b3b6f55e10c54c8a47d4db8f8907035173Lin Xie mVideoExtendedMode(false), 44d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu mForceCloneMode(false), 45d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu mBlankDevice(false), 46d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu mBlankPending(false), 47d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu mBlankMutex() 4865efc253a628175c7afa95c431b746ea20052794Andy Qiu{ 4965efc253a628175c7afa95c431b746ea20052794Andy Qiu} 5065efc253a628175c7afa95c431b746ea20052794Andy Qiu 5165efc253a628175c7afa95c431b746ea20052794Andy QiuDisplayAnalyzer::~DisplayAnalyzer() 5265efc253a628175c7afa95c431b746ea20052794Andy Qiu{ 5365efc253a628175c7afa95c431b746ea20052794Andy Qiu} 5465efc253a628175c7afa95c431b746ea20052794Andy Qiu 5565efc253a628175c7afa95c431b746ea20052794Andy Qiubool DisplayAnalyzer::initialize() 5665efc253a628175c7afa95c431b746ea20052794Andy Qiu{ 57d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu mVideoExtendedMode = false; 58d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu mForceCloneMode = false; 59d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu mBlankPending = false; 60d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu mBlankDevice = false; 6165efc253a628175c7afa95c431b746ea20052794Andy Qiu mInitialized = true; 6265efc253a628175c7afa95c431b746ea20052794Andy Qiu return true; 6365efc253a628175c7afa95c431b746ea20052794Andy Qiu} 6465efc253a628175c7afa95c431b746ea20052794Andy Qiu 65e2ad4c047651d4442f6a0e002290016d45e9201afu jinvoid DisplayAnalyzer::deinitialize() 6665efc253a628175c7afa95c431b746ea20052794Andy Qiu{ 6765efc253a628175c7afa95c431b746ea20052794Andy Qiu mInitialized = false; 6865efc253a628175c7afa95c431b746ea20052794Andy Qiu} 6965efc253a628175c7afa95c431b746ea20052794Andy Qiu 70770346b3b6f55e10c54c8a47d4db8f8907035173Lin Xievoid DisplayAnalyzer::analyzeContents( 71770346b3b6f55e10c54c8a47d4db8f8907035173Lin Xie size_t numDisplays, hwc_display_contents_1_t** displays) 72770346b3b6f55e10c54c8a47d4db8f8907035173Lin Xie{ 73d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu blankSecondaryDevice(numDisplays, displays); 74770346b3b6f55e10c54c8a47d4db8f8907035173Lin Xie detectVideoExtendedMode(numDisplays, displays); 75770346b3b6f55e10c54c8a47d4db8f8907035173Lin Xie if (mVideoExtendedMode) { 76770346b3b6f55e10c54c8a47d4db8f8907035173Lin Xie detectTrickMode(displays[IDisplayDevice::DEVICE_PRIMARY]); 77770346b3b6f55e10c54c8a47d4db8f8907035173Lin Xie } 78770346b3b6f55e10c54c8a47d4db8f8907035173Lin Xie} 79770346b3b6f55e10c54c8a47d4db8f8907035173Lin Xie 80770346b3b6f55e10c54c8a47d4db8f8907035173Lin Xievoid DisplayAnalyzer::detectTrickMode(hwc_display_contents_1_t *list) 81770346b3b6f55e10c54c8a47d4db8f8907035173Lin Xie{ 82770346b3b6f55e10c54c8a47d4db8f8907035173Lin Xie if (list == NULL) 83770346b3b6f55e10c54c8a47d4db8f8907035173Lin Xie return; 84770346b3b6f55e10c54c8a47d4db8f8907035173Lin Xie 85770346b3b6f55e10c54c8a47d4db8f8907035173Lin Xie bool detected = false; 86770346b3b6f55e10c54c8a47d4db8f8907035173Lin Xie for (size_t i = 0; i < list->numHwLayers; i++) { 87770346b3b6f55e10c54c8a47d4db8f8907035173Lin Xie hwc_layer_1_t *layer = &list->hwLayers[i]; 88770346b3b6f55e10c54c8a47d4db8f8907035173Lin Xie if (layer && (layer->flags & HWC_TRICK_MODE)) { 89770346b3b6f55e10c54c8a47d4db8f8907035173Lin Xie detected = true; 90770346b3b6f55e10c54c8a47d4db8f8907035173Lin Xie break; 91770346b3b6f55e10c54c8a47d4db8f8907035173Lin Xie } 92770346b3b6f55e10c54c8a47d4db8f8907035173Lin Xie } 93770346b3b6f55e10c54c8a47d4db8f8907035173Lin Xie 94770346b3b6f55e10c54c8a47d4db8f8907035173Lin Xie if (detected != mForceCloneMode) { 95770346b3b6f55e10c54c8a47d4db8f8907035173Lin Xie list->flags |= HWC_GEOMETRY_CHANGED; 96770346b3b6f55e10c54c8a47d4db8f8907035173Lin Xie mForceCloneMode = detected; 97770346b3b6f55e10c54c8a47d4db8f8907035173Lin Xie } 98770346b3b6f55e10c54c8a47d4db8f8907035173Lin Xie} 99770346b3b6f55e10c54c8a47d4db8f8907035173Lin Xie 100770346b3b6f55e10c54c8a47d4db8f8907035173Lin Xievoid DisplayAnalyzer::detectVideoExtendedMode( 101770346b3b6f55e10c54c8a47d4db8f8907035173Lin Xie size_t numDisplays, hwc_display_contents_1_t** displays) 10265efc253a628175c7afa95c431b746ea20052794Andy Qiu{ 10365efc253a628175c7afa95c431b746ea20052794Andy Qiu bool geometryChanged = false; 10465efc253a628175c7afa95c431b746ea20052794Andy Qiu int activeDisplays = 0; 105d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu 10665efc253a628175c7afa95c431b746ea20052794Andy Qiu hwc_display_contents_1_t *content = NULL; 10765efc253a628175c7afa95c431b746ea20052794Andy Qiu for (int i = 0; i < (int)numDisplays; i++) { 10865efc253a628175c7afa95c431b746ea20052794Andy Qiu content = displays[i]; 10965efc253a628175c7afa95c431b746ea20052794Andy Qiu if (content == NULL) { 11065efc253a628175c7afa95c431b746ea20052794Andy Qiu continue; 11165efc253a628175c7afa95c431b746ea20052794Andy Qiu } 11265efc253a628175c7afa95c431b746ea20052794Andy Qiu activeDisplays++; 11365efc253a628175c7afa95c431b746ea20052794Andy Qiu if (content->flags & HWC_GEOMETRY_CHANGED) { 11465efc253a628175c7afa95c431b746ea20052794Andy Qiu geometryChanged = true; 11565efc253a628175c7afa95c431b746ea20052794Andy Qiu } 11665efc253a628175c7afa95c431b746ea20052794Andy Qiu } 11765efc253a628175c7afa95c431b746ea20052794Andy Qiu 11865efc253a628175c7afa95c431b746ea20052794Andy Qiu if (activeDisplays <= 1) { 11965efc253a628175c7afa95c431b746ea20052794Andy Qiu mVideoExtendedMode = false; 12065efc253a628175c7afa95c431b746ea20052794Andy Qiu return; 12165efc253a628175c7afa95c431b746ea20052794Andy Qiu } 12265efc253a628175c7afa95c431b746ea20052794Andy Qiu 12365efc253a628175c7afa95c431b746ea20052794Andy Qiu if (geometryChanged == false) { 12465efc253a628175c7afa95c431b746ea20052794Andy Qiu // use previous analysis result 12565efc253a628175c7afa95c431b746ea20052794Andy Qiu return; 12665efc253a628175c7afa95c431b746ea20052794Andy Qiu } 12765efc253a628175c7afa95c431b746ea20052794Andy Qiu 12865efc253a628175c7afa95c431b746ea20052794Andy Qiu // reset status of video extended mode 12965efc253a628175c7afa95c431b746ea20052794Andy Qiu mVideoExtendedMode = false; 13065efc253a628175c7afa95c431b746ea20052794Andy Qiu 13165efc253a628175c7afa95c431b746ea20052794Andy Qiu // check if there is video layer in the primary device 13265efc253a628175c7afa95c431b746ea20052794Andy Qiu content = displays[0]; 13365efc253a628175c7afa95c431b746ea20052794Andy Qiu if (content == NULL) { 13465efc253a628175c7afa95c431b746ea20052794Andy Qiu return; 13565efc253a628175c7afa95c431b746ea20052794Andy Qiu } 13665efc253a628175c7afa95c431b746ea20052794Andy Qiu 137d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu uint32_t videoHandle = 0; 13865efc253a628175c7afa95c431b746ea20052794Andy Qiu bool videoLayerExist = false; 13965efc253a628175c7afa95c431b746ea20052794Andy Qiu // exclude the frame buffer target layer 14065efc253a628175c7afa95c431b746ea20052794Andy Qiu for (int j = 0; j < (int)content->numHwLayers - 1; j++) { 14165efc253a628175c7afa95c431b746ea20052794Andy Qiu videoLayerExist = isVideoLayer(content->hwLayers[j]); 14265efc253a628175c7afa95c431b746ea20052794Andy Qiu if (videoLayerExist == true) { 14365efc253a628175c7afa95c431b746ea20052794Andy Qiu videoHandle = (uint32_t)content->hwLayers[j].handle; 14465efc253a628175c7afa95c431b746ea20052794Andy Qiu break; 14565efc253a628175c7afa95c431b746ea20052794Andy Qiu } 14665efc253a628175c7afa95c431b746ea20052794Andy Qiu } 14765efc253a628175c7afa95c431b746ea20052794Andy Qiu 14865efc253a628175c7afa95c431b746ea20052794Andy Qiu if (videoLayerExist == false) { 14965efc253a628175c7afa95c431b746ea20052794Andy Qiu // no video layer is found in the primary layer 15065efc253a628175c7afa95c431b746ea20052794Andy Qiu return; 15165efc253a628175c7afa95c431b746ea20052794Andy Qiu } 15265efc253a628175c7afa95c431b746ea20052794Andy Qiu 15365efc253a628175c7afa95c431b746ea20052794Andy Qiu // check whether video layer exists in external device or virtual device 15465efc253a628175c7afa95c431b746ea20052794Andy Qiu // TODO: video may exist in virtual device but no in external device or vice versa 15565efc253a628175c7afa95c431b746ea20052794Andy Qiu // TODO: multiple video layers are not addressed here 15665efc253a628175c7afa95c431b746ea20052794Andy Qiu for (int i = 1; i < (int)numDisplays; i++) { 15765efc253a628175c7afa95c431b746ea20052794Andy Qiu content = displays[i]; 15865efc253a628175c7afa95c431b746ea20052794Andy Qiu if (content == NULL) { 15965efc253a628175c7afa95c431b746ea20052794Andy Qiu continue; 16065efc253a628175c7afa95c431b746ea20052794Andy Qiu } 16165efc253a628175c7afa95c431b746ea20052794Andy Qiu 16265efc253a628175c7afa95c431b746ea20052794Andy Qiu // exclude the frame buffer target layer 16365efc253a628175c7afa95c431b746ea20052794Andy Qiu for (int j = 0; j < (int)content->numHwLayers - 1; j++) { 16465efc253a628175c7afa95c431b746ea20052794Andy Qiu if ((uint32_t)content->hwLayers[j].handle == videoHandle) { 16565efc253a628175c7afa95c431b746ea20052794Andy Qiu ITRACE("video layer exists in device %d", i); 16665efc253a628175c7afa95c431b746ea20052794Andy Qiu mVideoExtendedMode = true; 16765efc253a628175c7afa95c431b746ea20052794Andy Qiu return; 16865efc253a628175c7afa95c431b746ea20052794Andy Qiu } 16965efc253a628175c7afa95c431b746ea20052794Andy Qiu } 17065efc253a628175c7afa95c431b746ea20052794Andy Qiu } 17165efc253a628175c7afa95c431b746ea20052794Andy Qiu} 17265efc253a628175c7afa95c431b746ea20052794Andy Qiu 17365efc253a628175c7afa95c431b746ea20052794Andy Qiubool DisplayAnalyzer::checkVideoExtendedMode() 17465efc253a628175c7afa95c431b746ea20052794Andy Qiu{ 175770346b3b6f55e10c54c8a47d4db8f8907035173Lin Xie return mVideoExtendedMode && !mForceCloneMode; 17665efc253a628175c7afa95c431b746ea20052794Andy Qiu} 17765efc253a628175c7afa95c431b746ea20052794Andy Qiu 17865efc253a628175c7afa95c431b746ea20052794Andy Qiubool DisplayAnalyzer::isVideoLayer(hwc_layer_1_t &layer) 17965efc253a628175c7afa95c431b746ea20052794Andy Qiu{ 18065efc253a628175c7afa95c431b746ea20052794Andy Qiu bool ret = false; 18165efc253a628175c7afa95c431b746ea20052794Andy Qiu BufferManager *bm = Hwcomposer::getInstance().getBufferManager(); 18265efc253a628175c7afa95c431b746ea20052794Andy Qiu DataBuffer *buffer = bm->get((uint32_t)layer.handle); 18365efc253a628175c7afa95c431b746ea20052794Andy Qiu if (!buffer) { 18465efc253a628175c7afa95c431b746ea20052794Andy Qiu ETRACE("failed to get buffer"); 18565efc253a628175c7afa95c431b746ea20052794Andy Qiu } else { 18665efc253a628175c7afa95c431b746ea20052794Andy Qiu ret = DisplayQuery::isVideoFormat(buffer->getFormat()); 18765efc253a628175c7afa95c431b746ea20052794Andy Qiu bm->put(*buffer); 18865efc253a628175c7afa95c431b746ea20052794Andy Qiu } 18965efc253a628175c7afa95c431b746ea20052794Andy Qiu return ret; 19065efc253a628175c7afa95c431b746ea20052794Andy Qiu} 19165efc253a628175c7afa95c431b746ea20052794Andy Qiu 192d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiubool DisplayAnalyzer::blankSecondaryDevice(bool blank) 193d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu{ 194d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu ITRACE("Blanking secondary device: %d", blank); 195d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu Mutex::Autolock lock(mBlankMutex); 196d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu mBlankDevice = blank; 197d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu mBlankPending = true; 198d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu Hwcomposer::getInstance().invalidate(); 199d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu return true; 200d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu} 201d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu 202d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiubool DisplayAnalyzer::blankSecondaryDevice( 203d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu size_t numDisplays, 204d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu hwc_display_contents_1_t** displays) 205d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu{ 206d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu Mutex::Autolock lock(mBlankMutex); 207d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu if (!mBlankPending && !mBlankDevice) { 208d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu // if device needs to be blanked all layers should be marked as HWC_OVERLAY and skipped. 209d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu // otherwise nothing to do 210d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu return false; 211d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu } 212d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu 213d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu hwc_display_contents_1_t *content = NULL; 214d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu hwc_layer_1 *layer = NULL; 215d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu for (int i = 0; i < (int)numDisplays; i++) { 216d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu if (i == IDisplayDevice::DEVICE_PRIMARY) { 217d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu continue; 218d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu } 219d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu content = displays[i]; 220d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu if (content == NULL) { 221d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu continue; 222d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu } 223d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu 224d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu if (mBlankPending){ 225d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu content->flags = HWC_GEOMETRY_CHANGED; 226d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu mBlankPending = false; 227d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu } 228d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu 229d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu for (int j = 0; j < (int)content->numHwLayers - 1; j++) { 230d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu layer = &content->hwLayers[j]; 231d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu if (!layer) { 232d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu continue; 233d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu } 234d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu if (mBlankDevice) { 235d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu layer->hints |= HWC_HINT_CLEAR_FB; 236d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu layer->flags &= ~HWC_SKIP_LAYER; 237d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu layer->compositionType = HWC_OVERLAY; 238d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu } else { 239d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu layer->hints &= ~HWC_HINT_CLEAR_FB; 240d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu layer->compositionType = HWC_FRAMEBUFFER; 241d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu } 242d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu } 243d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu } 244d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu return true; 245d4e9a8ac464ef6fde755c1a8c0902dc02a1270ecAndy Qiu} 24665efc253a628175c7afa95c431b746ea20052794Andy Qiu 24765efc253a628175c7afa95c431b746ea20052794Andy Qiu} // namespace intel 24865efc253a628175c7afa95c431b746ea20052794Andy Qiu} // namespace android 24965efc253a628175c7afa95c431b746ea20052794Andy Qiu 250