hwc_utils.h revision 47377987cc4eef72ee3b0cdced8c3a15038b39eb
1befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed/*
2befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * Copyright (C) 2010 The Android Open Source Project
3bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah * Copyright (C) 2012, The Linux Foundation. All rights reserved.
4befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed *
5befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * Licensed under the Apache License, Version 2.0 (the "License");
6befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * you may not use this file except in compliance with the License.
7befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * You may obtain a copy of the License at
8befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed *
9befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed *      http://www.apache.org/licenses/LICENSE-2.0
10befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed *
11befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * Unless required by applicable law or agreed to in writing, software
12befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * distributed under the License is distributed on an "AS IS" BASIS,
13befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * See the License for the specific language governing permissions and
15befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed * limitations under the License.
16befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed */
17befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
18befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#ifndef HWC_UTILS_H
19befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#define HWC_UTILS_H
201589dee5c27293d278d3e549af8a4bda27e080f8Naseer Ahmed
21660267c43bb3370ab49f4e95562c027171d8fb83Naseer Ahmed#define HWC_REMOVE_DEPRECATED_VERSIONS 1
222e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah#include <fcntl.h>
23befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#include <hardware/hwcomposer.h>
2477d8f24cb4fece120f062f2f997f018372338b66Naseer Ahmed#include <gr.h>
251589dee5c27293d278d3e549af8a4bda27e080f8Naseer Ahmed#include <gralloc_priv.h>
26befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
27bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed#define ALIGN_TO(x, align)     (((x) + ((align)-1)) & ~((align)-1))
28befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#define LIKELY( exp )       (__builtin_expect( (exp) != 0, true  ))
29befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#define UNLIKELY( exp )     (__builtin_expect( (exp) != 0, false ))
30bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed#define FINAL_TRANSFORM_MASK 0x000F
31660267c43bb3370ab49f4e95562c027171d8fb83Naseer Ahmed#define MAX_NUM_DISPLAYS 4 //Yes, this is ambitious
329f0b36a26d1c37ad0d31e59136b1e5d6f4d7efdeNaseer Ahmed#define MAX_NUM_LAYERS 32
33befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
341589dee5c27293d278d3e549af8a4bda27e080f8Naseer Ahmed//Fwrd decls
35befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedstruct hwc_context_t;
361589dee5c27293d278d3e549af8a4bda27e080f8Naseer Ahmedstruct framebuffer_device_t;
371589dee5c27293d278d3e549af8a4bda27e080f8Naseer Ahmed
38bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shahnamespace qService {
39bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shahclass QService;
40bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah}
41bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah
421589dee5c27293d278d3e549af8a4bda27e080f8Naseer Ahmednamespace overlay {
431589dee5c27293d278d3e549af8a4bda27e080f8Naseer Ahmedclass Overlay;
441589dee5c27293d278d3e549af8a4bda27e080f8Naseer Ahmed}
451589dee5c27293d278d3e549af8a4bda27e080f8Naseer Ahmed
46befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmednamespace qhwc {
471589dee5c27293d278d3e549af8a4bda27e080f8Naseer Ahmed//fwrd decl
481589dee5c27293d278d3e549af8a4bda27e080f8Naseer Ahmedclass QueuedBufferStore;
49b3c6e058ce1dbc689f27e7d7acbf1529d37307d8Naseer Ahmedclass ExternalDisplay;
50b3c6e058ce1dbc689f27e7d7acbf1529d37307d8Naseer Ahmed
51b3c6e058ce1dbc689f27e7d7acbf1529d37307d8Naseer Ahmedstruct MDPInfo {
52b3c6e058ce1dbc689f27e7d7acbf1529d37307d8Naseer Ahmed    int version;
53b3c6e058ce1dbc689f27e7d7acbf1529d37307d8Naseer Ahmed    char panel;
54b3c6e058ce1dbc689f27e7d7acbf1529d37307d8Naseer Ahmed    bool hasOverlay;
55b3c6e058ce1dbc689f27e7d7acbf1529d37307d8Naseer Ahmed};
56befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
572e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shahstruct DisplayAttributes {
582e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah    uint32_t vsync_period; //nanos
592e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah    uint32_t xres;
602e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah    uint32_t yres;
6179e14117f5e66a080b9f2a783ce3b215c72c8653Naseer Ahmed    float xdpi;
6279e14117f5e66a080b9f2a783ce3b215c72c8653Naseer Ahmed    float ydpi;
632e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah    int fd;
6476443245d153635b512539fbc68fdf7a904fdf6fSaurabh Shah    bool connected; //Applies only to pluggable disp.
6576443245d153635b512539fbc68fdf7a904fdf6fSaurabh Shah    //Connected does not mean it ready to use.
6676443245d153635b512539fbc68fdf7a904fdf6fSaurabh Shah    //It should be active also. (UNBLANKED)
672e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah    bool isActive;
68bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed};
692e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah
702e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shahstruct ListStats {
712e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah    int numAppLayers; //Total - 1, excluding FB layer.
722e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah    int skipCount;
732e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah    int fbLayerIndex; //Always last for now. = numAppLayers
742e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah    //Video specific
752e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah    int yuvCount;
762e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah    int yuvIndex;
77bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed};
78bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed
79c85d6b7428ded41c74a9455f580f3ee8b451bbdeNaseer Ahmedenum {
80c85d6b7428ded41c74a9455f580f3ee8b451bbdeNaseer Ahmed    HWC_MDPCOMP = 0x00000002,
81c85d6b7428ded41c74a9455f580f3ee8b451bbdeNaseer Ahmed    HWC_LAYER_RESERVED_0 = 0x00000004,
82c85d6b7428ded41c74a9455f580f3ee8b451bbdeNaseer Ahmed    HWC_LAYER_RESERVED_1 = 0x00000008
83c85d6b7428ded41c74a9455f580f3ee8b451bbdeNaseer Ahmed};
84c85d6b7428ded41c74a9455f580f3ee8b451bbdeNaseer Ahmed
859f0b36a26d1c37ad0d31e59136b1e5d6f4d7efdeNaseer Ahmedclass LayerCache {
869f0b36a26d1c37ad0d31e59136b1e5d6f4d7efdeNaseer Ahmed    public:
879f0b36a26d1c37ad0d31e59136b1e5d6f4d7efdeNaseer Ahmed    LayerCache() {
889f0b36a26d1c37ad0d31e59136b1e5d6f4d7efdeNaseer Ahmed        canUseLayerCache = false;
899f0b36a26d1c37ad0d31e59136b1e5d6f4d7efdeNaseer Ahmed        numHwLayers = 0;
909f0b36a26d1c37ad0d31e59136b1e5d6f4d7efdeNaseer Ahmed        for(uint32_t i = 0; i < MAX_NUM_LAYERS; i++) {
919f0b36a26d1c37ad0d31e59136b1e5d6f4d7efdeNaseer Ahmed            hnd[i] = NULL;
929f0b36a26d1c37ad0d31e59136b1e5d6f4d7efdeNaseer Ahmed        }
939f0b36a26d1c37ad0d31e59136b1e5d6f4d7efdeNaseer Ahmed    }
949f0b36a26d1c37ad0d31e59136b1e5d6f4d7efdeNaseer Ahmed    //LayerCache optimization
959f0b36a26d1c37ad0d31e59136b1e5d6f4d7efdeNaseer Ahmed    void updateLayerCache(hwc_display_contents_1_t* list);
969f0b36a26d1c37ad0d31e59136b1e5d6f4d7efdeNaseer Ahmed    void resetLayerCache(int num);
979f0b36a26d1c37ad0d31e59136b1e5d6f4d7efdeNaseer Ahmed    void markCachedLayersAsOverlay(hwc_display_contents_1_t* list);
989f0b36a26d1c37ad0d31e59136b1e5d6f4d7efdeNaseer Ahmed    private:
999f0b36a26d1c37ad0d31e59136b1e5d6f4d7efdeNaseer Ahmed    uint32_t numHwLayers;
1009f0b36a26d1c37ad0d31e59136b1e5d6f4d7efdeNaseer Ahmed    bool canUseLayerCache;
1019f0b36a26d1c37ad0d31e59136b1e5d6f4d7efdeNaseer Ahmed    buffer_handle_t hnd[MAX_NUM_LAYERS];
1029f0b36a26d1c37ad0d31e59136b1e5d6f4d7efdeNaseer Ahmed
1039f0b36a26d1c37ad0d31e59136b1e5d6f4d7efdeNaseer Ahmed};
1049f0b36a26d1c37ad0d31e59136b1e5d6f4d7efdeNaseer Ahmed
105bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed
106befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed// -----------------------------------------------------------------------------
107befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed// Utility functions - implemented in hwc_utils.cpp
108660267c43bb3370ab49f4e95562c027171d8fb83Naseer Ahmedvoid dumpLayer(hwc_layer_1_t const* l);
1092e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shahvoid setListStats(hwc_context_t *ctx, const hwc_display_contents_1_t *list,
1102e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah        int dpy);
111befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedvoid initContext(hwc_context_t *ctx);
112befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedvoid closeContext(hwc_context_t *ctx);
113ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed//Crops source buffer against destination and FB boundaries
114ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmedvoid calculate_crop_rects(hwc_rect_t& crop, hwc_rect_t& dst,
1159a678455a788dc76a43ad93459ae6a792f0fd114Saurabh Shah        const int fbWidth, const int fbHeight, int orient);
116befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
1172e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shahbool isExternalActive(hwc_context_t* ctx);
118a71a7ecd0323a16fe7728271474f8b7056c679d8Saurabh Shah
11933147743328e88e7859db6c935072f11ca038448Kinjal Bhavsar//Sync point impl.
1202e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shahint hwc_sync(hwc_context_t *ctx, hwc_display_contents_1_t* list, int dpy);
12133147743328e88e7859db6c935072f11ca038448Kinjal Bhavsar
122befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed// Inline utility functions
123660267c43bb3370ab49f4e95562c027171d8fb83Naseer Ahmedstatic inline bool isSkipLayer(const hwc_layer_1_t* l) {
124befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    return (UNLIKELY(l && (l->flags & HWC_SKIP_LAYER)));
125befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}
126befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
127befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed// Returns true if the buffer is yuv
128befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedstatic inline bool isYuvBuffer(const private_handle_t* hnd) {
129befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    return (hnd && (hnd->bufferType == BUFFER_TYPE_VIDEO));
130befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}
131befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
132ed68f0b13f56426735e7897519aa1c43072ceb90Saurabh Shah// Returns true if the buffer is secure
133ed68f0b13f56426735e7897519aa1c43072ceb90Saurabh Shahstatic inline bool isSecureBuffer(const private_handle_t* hnd) {
134ed68f0b13f56426735e7897519aa1c43072ceb90Saurabh Shah    return (hnd && (private_handle_t::PRIV_FLAGS_SECURE_BUFFER & hnd->flags));
135ed68f0b13f56426735e7897519aa1c43072ceb90Saurabh Shah}
136befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed//Return true if buffer is marked locked
137befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedstatic inline bool isBufferLocked(const private_handle_t* hnd) {
138befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    return (hnd && (private_handle_t::PRIV_FLAGS_HWC_LOCK & hnd->flags));
139befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed}
140bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed
1415d0935531842ab9cf01775a77e92f204e6d40971Naseer Ahmed//Return true if buffer is for external display only
1425d0935531842ab9cf01775a77e92f204e6d40971Naseer Ahmedstatic inline bool isExtOnly(const private_handle_t* hnd) {
1435d0935531842ab9cf01775a77e92f204e6d40971Naseer Ahmed    return (hnd && (hnd->flags & private_handle_t::PRIV_FLAGS_EXTERNAL_ONLY));
1445d0935531842ab9cf01775a77e92f204e6d40971Naseer Ahmed}
1455d0935531842ab9cf01775a77e92f204e6d40971Naseer Ahmed
1465d0935531842ab9cf01775a77e92f204e6d40971Naseer Ahmed//Return true if buffer is for external display only with a BLOCK flag.
1475d0935531842ab9cf01775a77e92f204e6d40971Naseer Ahmedstatic inline bool isExtBlock(const private_handle_t* hnd) {
1485d0935531842ab9cf01775a77e92f204e6d40971Naseer Ahmed    return (hnd && (hnd->flags & private_handle_t::PRIV_FLAGS_EXTERNAL_BLOCK));
1495d0935531842ab9cf01775a77e92f204e6d40971Naseer Ahmed}
1505d0935531842ab9cf01775a77e92f204e6d40971Naseer Ahmed
1515d0935531842ab9cf01775a77e92f204e6d40971Naseer Ahmed//Return true if buffer is for external display only with a Close Caption flag.
1525d0935531842ab9cf01775a77e92f204e6d40971Naseer Ahmedstatic inline bool isExtCC(const private_handle_t* hnd) {
1535d0935531842ab9cf01775a77e92f204e6d40971Naseer Ahmed    return (hnd && (hnd->flags & private_handle_t::PRIV_FLAGS_EXTERNAL_CC));
1545d0935531842ab9cf01775a77e92f204e6d40971Naseer Ahmed}
1555d0935531842ab9cf01775a77e92f204e6d40971Naseer Ahmed
1561589dee5c27293d278d3e549af8a4bda27e080f8Naseer Ahmed// Initialize uevent thread
1571589dee5c27293d278d3e549af8a4bda27e080f8Naseer Ahmedvoid init_uevent_thread(hwc_context_t* ctx);
158aff82051a79fbaf752d3769667d34828cee2841dNaseer Ahmed// Initialize vsync thread
159aff82051a79fbaf752d3769667d34828cee2841dNaseer Ahmedvoid init_vsync_thread(hwc_context_t* ctx);
160befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
161660267c43bb3370ab49f4e95562c027171d8fb83Naseer Ahmedinline void getLayerResolution(const hwc_layer_1_t* layer,
162aff82051a79fbaf752d3769667d34828cee2841dNaseer Ahmed                               int& width, int& height)
163c85d6b7428ded41c74a9455f580f3ee8b451bbdeNaseer Ahmed{
164c85d6b7428ded41c74a9455f580f3ee8b451bbdeNaseer Ahmed    hwc_rect_t displayFrame  = layer->displayFrame;
165c85d6b7428ded41c74a9455f580f3ee8b451bbdeNaseer Ahmed    width = displayFrame.right - displayFrame.left;
166c85d6b7428ded41c74a9455f580f3ee8b451bbdeNaseer Ahmed    height = displayFrame.bottom - displayFrame.top;
167c85d6b7428ded41c74a9455f580f3ee8b451bbdeNaseer Ahmed}
1682e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah
1692e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shahstatic inline int openFb(int dpy) {
1702e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah    int fd = -1;
1712e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah    const char *devtmpl = "/dev/graphics/fb%u";
1722e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah    char name[64] = {0};
1732e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah    snprintf(name, 64, devtmpl, dpy);
1742e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah    fd = open(name, O_RDWR);
1752e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah    return fd;
1762e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah}
1772e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah
1789a678455a788dc76a43ad93459ae6a792f0fd114Saurabh Shahtemplate <class T>
1799a678455a788dc76a43ad93459ae6a792f0fd114Saurabh Shahinline void swap(T& a, T& b) {
1809a678455a788dc76a43ad93459ae6a792f0fd114Saurabh Shah    T tmp = a;
1819a678455a788dc76a43ad93459ae6a792f0fd114Saurabh Shah    a = b;
1829a678455a788dc76a43ad93459ae6a792f0fd114Saurabh Shah    b = tmp;
1839a678455a788dc76a43ad93459ae6a792f0fd114Saurabh Shah}
1849a678455a788dc76a43ad93459ae6a792f0fd114Saurabh Shah
185ee7fc0347e52276d43413e91f31d72d6db99dcfbNaseer Ahmed}; //qhwc namespace
186befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
187aff82051a79fbaf752d3769667d34828cee2841dNaseer Ahmedstruct vsync_state {
188aff82051a79fbaf752d3769667d34828cee2841dNaseer Ahmed    pthread_mutex_t lock;
189aff82051a79fbaf752d3769667d34828cee2841dNaseer Ahmed    pthread_cond_t  cond;
190aff82051a79fbaf752d3769667d34828cee2841dNaseer Ahmed    bool enable;
191aff82051a79fbaf752d3769667d34828cee2841dNaseer Ahmed};
192aff82051a79fbaf752d3769667d34828cee2841dNaseer Ahmed
193befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed// -----------------------------------------------------------------------------
194befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed// HWC context
195befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed// This structure contains overall state
196befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmedstruct hwc_context_t {
197660267c43bb3370ab49f4e95562c027171d8fb83Naseer Ahmed    hwc_composer_device_1_t device;
198359c544e1ca5ad76be326d9ee809e7bee51f94b4Jesse Hall    const hwc_procs_t* proc;
199ee0d135b8a226b5844fd569fb166a90aa55bbba0Saurabh Shah
200befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    //Framebuffer device
2011589dee5c27293d278d3e549af8a4bda27e080f8Naseer Ahmed    framebuffer_device_t *mFbDev;
202bd4704d4b447bd4aa59e4894d68a7162ce4f99fdNaseer Ahmed
203befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed    //Overlay object - NULL for non overlay devices
20447377987cc4eef72ee3b0cdced8c3a15038b39ebNaseer Ahmed    overlay::Overlay *mOverlay;
205befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
206bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah    //QService object
207bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah    qService::QService *mQService;
208bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah
209ccf943e44f9e9d615a6019459625148830039f8dNaseer Ahmed    // External display related information
2101589dee5c27293d278d3e549af8a4bda27e080f8Naseer Ahmed    qhwc::ExternalDisplay *mExtDisplay;
2111589dee5c27293d278d3e549af8a4bda27e080f8Naseer Ahmed
212b3c6e058ce1dbc689f27e7d7acbf1529d37307d8Naseer Ahmed    qhwc::MDPInfo mMDP;
213b3c6e058ce1dbc689f27e7d7acbf1529d37307d8Naseer Ahmed
2142e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah    qhwc::DisplayAttributes dpyAttr[HWC_NUM_DISPLAY_TYPES];
2152e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah
2162e449280f98f003bb5831c274fc07ab722ac1a94Saurabh Shah    qhwc::ListStats listStats[HWC_NUM_DISPLAY_TYPES];
217bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah
2189f0b36a26d1c37ad0d31e59136b1e5d6f4d7efdeNaseer Ahmed    qhwc::LayerCache *mLayerCache;
2199f0b36a26d1c37ad0d31e59136b1e5d6f4d7efdeNaseer Ahmed
220bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah    //Securing in progress indicator
221bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah    bool mSecuring;
222bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah
223bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah    //Display in secure mode indicator
224bbee5b1c3475b630caa5061fbf535f87f21743f7Saurabh Shah    bool mSecureMode;
22577d8f24cb4fece120f062f2f997f018372338b66Naseer Ahmed
22677d8f24cb4fece120f062f2f997f018372338b66Naseer Ahmed    //Lock to prevent set from being called while blanking
22777d8f24cb4fece120f062f2f997f018372338b66Naseer Ahmed    mutable Locker mBlankLock;
228f6205c18f4bbd23e7f39672f781498c34e6b7494Kinjal Bhavsar    //Lock to protect set when detaching external disp
229f6205c18f4bbd23e7f39672f781498c34e6b7494Kinjal Bhavsar    mutable Locker mExtSetLock;
230aff82051a79fbaf752d3769667d34828cee2841dNaseer Ahmed    //Vsync
231aff82051a79fbaf752d3769667d34828cee2841dNaseer Ahmed    struct vsync_state vstate;
232befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed};
233befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed
234befc466069680cb8a65b1f22ad44723d949128c8Naseer Ahmed#endif //HWC_UTILS_H
235