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