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