hwc_utils.h revision 4012258b6b344adccf19973602c4d092e2403053
129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed/* 229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * Copyright (C) 2010 The Android Open Source Project 36c43ebed229c5d1e00c6d41638cd2f8e3cb979b7Arun Kumar K.R * Copyright (C) 2012-2013, The Linux Foundation. All rights reserved. 46c43ebed229c5d1e00c6d41638cd2f8e3cb979b7Arun Kumar K.R * 56c43ebed229c5d1e00c6d41638cd2f8e3cb979b7Arun Kumar K.R * Not a Contribution, Apache license notifications and license are retained 66c43ebed229c5d1e00c6d41638cd2f8e3cb979b7Arun Kumar K.R * for attribution purposes only. 729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * 829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * Licensed under the Apache License, Version 2.0 (the "License"); 929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * you may not use this file except in compliance with the License. 1029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * You may obtain a copy of the License at 1129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * 1229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * http://www.apache.org/licenses/LICENSE-2.0 1329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * 1429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * Unless required by applicable law or agreed to in writing, software 1529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * distributed under the License is distributed on an "AS IS" BASIS, 1629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * See the License for the specific language governing permissions and 1829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed * limitations under the License. 1929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed */ 2029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 2129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#ifndef HWC_UTILS_H 2229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#define HWC_UTILS_H 2372cf9762f84aab07faab86e35fe830b63ec54d72Naseer Ahmed 245b6708ac87dc9681b3dd142b82702a8b995c6e22Naseer Ahmed#define HWC_REMOVE_DEPRECATED_VERSIONS 1 253e858ebde3f2b4e762af8f7f2808d45ba59b890dSaurabh Shah#include <fcntl.h> 2629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#include <hardware/hwcomposer.h> 2732ff225e6d77baeb38925faba4b6b8457fab6b7bNaseer Ahmed#include <gr.h> 2872cf9762f84aab07faab86e35fe830b63ec54d72Naseer Ahmed#include <gralloc_priv.h> 293b21dd5bc0f86209d9ea134523a494cfe9da601cNaseer Ahmed#include <utils/String8.h> 3029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 3131da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed#define ALIGN_TO(x, align) (((x) + ((align)-1)) & ~((align)-1)) 3229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#define LIKELY( exp ) (__builtin_expect( (exp) != 0, true )) 3329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#define UNLIKELY( exp ) (__builtin_expect( (exp) != 0, false )) 3431da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed#define FINAL_TRANSFORM_MASK 0x000F 355b6708ac87dc9681b3dd142b82702a8b995c6e22Naseer Ahmed#define MAX_NUM_DISPLAYS 4 //Yes, this is ambitious 3689f9d5d65dc4f3ef2bea3d3b091069cb6af0fc38Naseer Ahmed#define MAX_NUM_LAYERS 32 376457316fc7ae8ea29d763edce3fc1ffc78dd7387Saurabh Shah#define MAX_DISPLAY_DIM 2048 3829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 3972cf9762f84aab07faab86e35fe830b63ec54d72Naseer Ahmed//Fwrd decls 4029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedstruct hwc_context_t; 4172cf9762f84aab07faab86e35fe830b63ec54d72Naseer Ahmedstruct framebuffer_device_t; 4272cf9762f84aab07faab86e35fe830b63ec54d72Naseer Ahmed 4356f610dd235b577725198e9341caae92379fdf23Saurabh Shahnamespace qService { 4456f610dd235b577725198e9341caae92379fdf23Saurabh Shahclass QService; 4556f610dd235b577725198e9341caae92379fdf23Saurabh Shah} 4656f610dd235b577725198e9341caae92379fdf23Saurabh Shah 4772cf9762f84aab07faab86e35fe830b63ec54d72Naseer Ahmednamespace overlay { 4872cf9762f84aab07faab86e35fe830b63ec54d72Naseer Ahmedclass Overlay; 4972cf9762f84aab07faab86e35fe830b63ec54d72Naseer Ahmed} 5072cf9762f84aab07faab86e35fe830b63ec54d72Naseer Ahmed 5129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmednamespace qhwc { 5272cf9762f84aab07faab86e35fe830b63ec54d72Naseer Ahmed//fwrd decl 5372cf9762f84aab07faab86e35fe830b63ec54d72Naseer Ahmedclass QueuedBufferStore; 5496c4c95d48dc075196c601b30a8798a262df9720Naseer Ahmedclass ExternalDisplay; 556457316fc7ae8ea29d763edce3fc1ffc78dd7387Saurabh Shahclass IFBUpdate; 56bfa005e8c51529d99b9c360a444d351ebe0885f7Saurabh Shahclass MDPComp; 576c43ebed229c5d1e00c6d41638cd2f8e3cb979b7Arun Kumar K.Rclass CopyBit; 5896c4c95d48dc075196c601b30a8798a262df9720Naseer Ahmed 5996c4c95d48dc075196c601b30a8798a262df9720Naseer Ahmedstruct MDPInfo { 6096c4c95d48dc075196c601b30a8798a262df9720Naseer Ahmed int version; 6196c4c95d48dc075196c601b30a8798a262df9720Naseer Ahmed char panel; 6296c4c95d48dc075196c601b30a8798a262df9720Naseer Ahmed bool hasOverlay; 6396c4c95d48dc075196c601b30a8798a262df9720Naseer Ahmed}; 6429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 653e858ebde3f2b4e762af8f7f2808d45ba59b890dSaurabh Shahstruct DisplayAttributes { 663e858ebde3f2b4e762af8f7f2808d45ba59b890dSaurabh Shah uint32_t vsync_period; //nanos 673e858ebde3f2b4e762af8f7f2808d45ba59b890dSaurabh Shah uint32_t xres; 683e858ebde3f2b4e762af8f7f2808d45ba59b890dSaurabh Shah uint32_t yres; 6965bb464dab7f1b35ffd4dda11a3d16885bbadf2dNaseer Ahmed uint32_t stride; 707b80d9c8cb345f7020093e0afb691bf3a72deec6Naseer Ahmed float xdpi; 717b80d9c8cb345f7020093e0afb691bf3a72deec6Naseer Ahmed float ydpi; 723e858ebde3f2b4e762af8f7f2808d45ba59b890dSaurabh Shah int fd; 73c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah bool connected; //Applies only to pluggable disp. 74c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah //Connected does not mean it ready to use. 75c4d034f4b8d12953632907d30c0b78856d829579Saurabh Shah //It should be active also. (UNBLANKED) 763e858ebde3f2b4e762af8f7f2808d45ba59b890dSaurabh Shah bool isActive; 7731da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed}; 783e858ebde3f2b4e762af8f7f2808d45ba59b890dSaurabh Shah 793e858ebde3f2b4e762af8f7f2808d45ba59b890dSaurabh Shahstruct ListStats { 803e858ebde3f2b4e762af8f7f2808d45ba59b890dSaurabh Shah int numAppLayers; //Total - 1, excluding FB layer. 813e858ebde3f2b4e762af8f7f2808d45ba59b890dSaurabh Shah int skipCount; 823e858ebde3f2b4e762af8f7f2808d45ba59b890dSaurabh Shah int fbLayerIndex; //Always last for now. = numAppLayers 833e858ebde3f2b4e762af8f7f2808d45ba59b890dSaurabh Shah //Video specific 843e858ebde3f2b4e762af8f7f2808d45ba59b890dSaurabh Shah int yuvCount; 8543d839785a39d93219bad17693c96698ffe10065Jeykumar Sankaran int yuvIndices[MAX_NUM_LAYERS]; 8653bdba54f2eb33c5e8133d75d149f5ede92baa33Naseer Ahmed bool needsAlphaScale; 8731da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed}; 8831da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed 8965bb464dab7f1b35ffd4dda11a3d16885bbadf2dNaseer Ahmedstruct LayerProp { 9065bb464dab7f1b35ffd4dda11a3d16885bbadf2dNaseer Ahmed uint32_t mFlags; //qcom specific layer flags 9165bb464dab7f1b35ffd4dda11a3d16885bbadf2dNaseer Ahmed LayerProp():mFlags(0) {}; 9265bb464dab7f1b35ffd4dda11a3d16885bbadf2dNaseer Ahmed}; 9365bb464dab7f1b35ffd4dda11a3d16885bbadf2dNaseer Ahmed 9465bb464dab7f1b35ffd4dda11a3d16885bbadf2dNaseer Ahmed// LayerProp::flag values 957c958d445fe88a82eedbd1b887cd1e474a7526b1Naseer Ahmedenum { 9665bb464dab7f1b35ffd4dda11a3d16885bbadf2dNaseer Ahmed HWC_MDPCOMP = 0x00000001, 977c958d445fe88a82eedbd1b887cd1e474a7526b1Naseer Ahmed}; 987c958d445fe88a82eedbd1b887cd1e474a7526b1Naseer Ahmed 9989f9d5d65dc4f3ef2bea3d3b091069cb6af0fc38Naseer Ahmedclass LayerCache { 10089f9d5d65dc4f3ef2bea3d3b091069cb6af0fc38Naseer Ahmed public: 10189f9d5d65dc4f3ef2bea3d3b091069cb6af0fc38Naseer Ahmed LayerCache() { 10289f9d5d65dc4f3ef2bea3d3b091069cb6af0fc38Naseer Ahmed canUseLayerCache = false; 10389f9d5d65dc4f3ef2bea3d3b091069cb6af0fc38Naseer Ahmed numHwLayers = 0; 10489f9d5d65dc4f3ef2bea3d3b091069cb6af0fc38Naseer Ahmed for(uint32_t i = 0; i < MAX_NUM_LAYERS; i++) { 10589f9d5d65dc4f3ef2bea3d3b091069cb6af0fc38Naseer Ahmed hnd[i] = NULL; 10689f9d5d65dc4f3ef2bea3d3b091069cb6af0fc38Naseer Ahmed } 10789f9d5d65dc4f3ef2bea3d3b091069cb6af0fc38Naseer Ahmed } 10889f9d5d65dc4f3ef2bea3d3b091069cb6af0fc38Naseer Ahmed //LayerCache optimization 10989f9d5d65dc4f3ef2bea3d3b091069cb6af0fc38Naseer Ahmed void updateLayerCache(hwc_display_contents_1_t* list); 11089f9d5d65dc4f3ef2bea3d3b091069cb6af0fc38Naseer Ahmed void resetLayerCache(int num); 11189f9d5d65dc4f3ef2bea3d3b091069cb6af0fc38Naseer Ahmed void markCachedLayersAsOverlay(hwc_display_contents_1_t* list); 11289f9d5d65dc4f3ef2bea3d3b091069cb6af0fc38Naseer Ahmed private: 11389f9d5d65dc4f3ef2bea3d3b091069cb6af0fc38Naseer Ahmed uint32_t numHwLayers; 11489f9d5d65dc4f3ef2bea3d3b091069cb6af0fc38Naseer Ahmed bool canUseLayerCache; 11589f9d5d65dc4f3ef2bea3d3b091069cb6af0fc38Naseer Ahmed buffer_handle_t hnd[MAX_NUM_LAYERS]; 11689f9d5d65dc4f3ef2bea3d3b091069cb6af0fc38Naseer Ahmed 11789f9d5d65dc4f3ef2bea3d3b091069cb6af0fc38Naseer Ahmed}; 11889f9d5d65dc4f3ef2bea3d3b091069cb6af0fc38Naseer Ahmed 11931da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed 12065bb464dab7f1b35ffd4dda11a3d16885bbadf2dNaseer Ahmed 12165bb464dab7f1b35ffd4dda11a3d16885bbadf2dNaseer Ahmed 12229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed// ----------------------------------------------------------------------------- 12329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed// Utility functions - implemented in hwc_utils.cpp 1245b6708ac87dc9681b3dd142b82702a8b995c6e22Naseer Ahmedvoid dumpLayer(hwc_layer_1_t const* l); 1253e858ebde3f2b4e762af8f7f2808d45ba59b890dSaurabh Shahvoid setListStats(hwc_context_t *ctx, const hwc_display_contents_1_t *list, 1263e858ebde3f2b4e762af8f7f2808d45ba59b890dSaurabh Shah int dpy); 12729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedvoid initContext(hwc_context_t *ctx); 12829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedvoid closeContext(hwc_context_t *ctx); 129f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed//Crops source buffer against destination and FB boundaries 130f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmedvoid calculate_crop_rects(hwc_rect_t& crop, hwc_rect_t& dst, 13127c1d65113aaac5c577523132b5b990552284ba9Saurabh Shah const int fbWidth, const int fbHeight, int orient); 13265bb464dab7f1b35ffd4dda11a3d16885bbadf2dNaseer Ahmedbool isSecuring(hwc_context_t* ctx); 13308cced40871ca190d231b39b63bd2d8cd85a32a8Sushil Chauhanbool isSecureModePolicy(int mdpVersion); 1343e858ebde3f2b4e762af8f7f2808d45ba59b890dSaurabh Shahbool isExternalActive(hwc_context_t* ctx); 135fc2acbe75484dea7197b75d0ef9889f78398b06bSaurabh Shah 1363b21dd5bc0f86209d9ea134523a494cfe9da601cNaseer Ahmed//Helper function to dump logs 1373b21dd5bc0f86209d9ea134523a494cfe9da601cNaseer Ahmedvoid dumpsys_log(android::String8& buf, const char* fmt, ...); 1383b21dd5bc0f86209d9ea134523a494cfe9da601cNaseer Ahmed 1394012258b6b344adccf19973602c4d092e2403053Arun Kumar K.R/* Calculates the destination position based on the action safe rectangle */ 1404012258b6b344adccf19973602c4d092e2403053Arun Kumar K.Rvoid getActionSafePosition(hwc_context_t *ctx, int dpy, uint32_t& x, 1414012258b6b344adccf19973602c4d092e2403053Arun Kumar K.R uint32_t& y, uint32_t& w, uint32_t& h); 1424012258b6b344adccf19973602c4d092e2403053Arun Kumar K.R 1432dd04a873bc3d4b3ca50121347a8c702d097a2dfKinjal Bhavsar//Sync point impl. 1446c43ebed229c5d1e00c6d41638cd2f8e3cb979b7Arun Kumar K.Rint hwc_sync(hwc_context_t *ctx, hwc_display_contents_1_t* list, int dpy, 1456c43ebed229c5d1e00c6d41638cd2f8e3cb979b7Arun Kumar K.R int fd); 1462dd04a873bc3d4b3ca50121347a8c702d097a2dfKinjal Bhavsar 14729a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed// Inline utility functions 1485b6708ac87dc9681b3dd142b82702a8b995c6e22Naseer Ahmedstatic inline bool isSkipLayer(const hwc_layer_1_t* l) { 14929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return (UNLIKELY(l && (l->flags & HWC_SKIP_LAYER))); 15029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 15129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 15229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed// Returns true if the buffer is yuv 15329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedstatic inline bool isYuvBuffer(const private_handle_t* hnd) { 15429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return (hnd && (hnd->bufferType == BUFFER_TYPE_VIDEO)); 15529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 15629a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 157f395d09031d07ea4836f4c6e0e597aee1830bac6Saurabh Shah// Returns true if the buffer is secure 158f395d09031d07ea4836f4c6e0e597aee1830bac6Saurabh Shahstatic inline bool isSecureBuffer(const private_handle_t* hnd) { 159f395d09031d07ea4836f4c6e0e597aee1830bac6Saurabh Shah return (hnd && (private_handle_t::PRIV_FLAGS_SECURE_BUFFER & hnd->flags)); 160f395d09031d07ea4836f4c6e0e597aee1830bac6Saurabh Shah} 16129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed//Return true if buffer is marked locked 16229a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedstatic inline bool isBufferLocked(const private_handle_t* hnd) { 16329a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed return (hnd && (private_handle_t::PRIV_FLAGS_HWC_LOCK & hnd->flags)); 16429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed} 16531da0b1f44d5ff8f95be2b440df3cdd8c5c396d4Naseer Ahmed 1664c588a200c537224d4eb5f63fb0a88f791511ff2Naseer Ahmed//Return true if buffer is for external display only 1674c588a200c537224d4eb5f63fb0a88f791511ff2Naseer Ahmedstatic inline bool isExtOnly(const private_handle_t* hnd) { 1684c588a200c537224d4eb5f63fb0a88f791511ff2Naseer Ahmed return (hnd && (hnd->flags & private_handle_t::PRIV_FLAGS_EXTERNAL_ONLY)); 1694c588a200c537224d4eb5f63fb0a88f791511ff2Naseer Ahmed} 1704c588a200c537224d4eb5f63fb0a88f791511ff2Naseer Ahmed 1714c588a200c537224d4eb5f63fb0a88f791511ff2Naseer Ahmed//Return true if buffer is for external display only with a BLOCK flag. 1724c588a200c537224d4eb5f63fb0a88f791511ff2Naseer Ahmedstatic inline bool isExtBlock(const private_handle_t* hnd) { 1734c588a200c537224d4eb5f63fb0a88f791511ff2Naseer Ahmed return (hnd && (hnd->flags & private_handle_t::PRIV_FLAGS_EXTERNAL_BLOCK)); 1744c588a200c537224d4eb5f63fb0a88f791511ff2Naseer Ahmed} 1754c588a200c537224d4eb5f63fb0a88f791511ff2Naseer Ahmed 1764c588a200c537224d4eb5f63fb0a88f791511ff2Naseer Ahmed//Return true if buffer is for external display only with a Close Caption flag. 1774c588a200c537224d4eb5f63fb0a88f791511ff2Naseer Ahmedstatic inline bool isExtCC(const private_handle_t* hnd) { 1784c588a200c537224d4eb5f63fb0a88f791511ff2Naseer Ahmed return (hnd && (hnd->flags & private_handle_t::PRIV_FLAGS_EXTERNAL_CC)); 1794c588a200c537224d4eb5f63fb0a88f791511ff2Naseer Ahmed} 1804c588a200c537224d4eb5f63fb0a88f791511ff2Naseer Ahmed 18172cf9762f84aab07faab86e35fe830b63ec54d72Naseer Ahmed// Initialize uevent thread 18272cf9762f84aab07faab86e35fe830b63ec54d72Naseer Ahmedvoid init_uevent_thread(hwc_context_t* ctx); 183ff4f0254be575a264504687c407e0db2fd5573d7Naseer Ahmed// Initialize vsync thread 184ff4f0254be575a264504687c407e0db2fd5573d7Naseer Ahmedvoid init_vsync_thread(hwc_context_t* ctx); 18529a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 1865b6708ac87dc9681b3dd142b82702a8b995c6e22Naseer Ahmedinline void getLayerResolution(const hwc_layer_1_t* layer, 187ff4f0254be575a264504687c407e0db2fd5573d7Naseer Ahmed int& width, int& height) 1887c958d445fe88a82eedbd1b887cd1e474a7526b1Naseer Ahmed{ 1897c958d445fe88a82eedbd1b887cd1e474a7526b1Naseer Ahmed hwc_rect_t displayFrame = layer->displayFrame; 1907c958d445fe88a82eedbd1b887cd1e474a7526b1Naseer Ahmed width = displayFrame.right - displayFrame.left; 1917c958d445fe88a82eedbd1b887cd1e474a7526b1Naseer Ahmed height = displayFrame.bottom - displayFrame.top; 1927c958d445fe88a82eedbd1b887cd1e474a7526b1Naseer Ahmed} 1933e858ebde3f2b4e762af8f7f2808d45ba59b890dSaurabh Shah 1943e858ebde3f2b4e762af8f7f2808d45ba59b890dSaurabh Shahstatic inline int openFb(int dpy) { 1953e858ebde3f2b4e762af8f7f2808d45ba59b890dSaurabh Shah int fd = -1; 1963e858ebde3f2b4e762af8f7f2808d45ba59b890dSaurabh Shah const char *devtmpl = "/dev/graphics/fb%u"; 1973e858ebde3f2b4e762af8f7f2808d45ba59b890dSaurabh Shah char name[64] = {0}; 1983e858ebde3f2b4e762af8f7f2808d45ba59b890dSaurabh Shah snprintf(name, 64, devtmpl, dpy); 1993e858ebde3f2b4e762af8f7f2808d45ba59b890dSaurabh Shah fd = open(name, O_RDWR); 2003e858ebde3f2b4e762af8f7f2808d45ba59b890dSaurabh Shah return fd; 2013e858ebde3f2b4e762af8f7f2808d45ba59b890dSaurabh Shah} 2023e858ebde3f2b4e762af8f7f2808d45ba59b890dSaurabh Shah 20327c1d65113aaac5c577523132b5b990552284ba9Saurabh Shahtemplate <class T> 20427c1d65113aaac5c577523132b5b990552284ba9Saurabh Shahinline void swap(T& a, T& b) { 20527c1d65113aaac5c577523132b5b990552284ba9Saurabh Shah T tmp = a; 20627c1d65113aaac5c577523132b5b990552284ba9Saurabh Shah a = b; 20727c1d65113aaac5c577523132b5b990552284ba9Saurabh Shah b = tmp; 20827c1d65113aaac5c577523132b5b990552284ba9Saurabh Shah} 20927c1d65113aaac5c577523132b5b990552284ba9Saurabh Shah 210f48aef64b218d42bd2ede62dcb03a3d7831ebbf9Naseer Ahmed}; //qhwc namespace 21129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 212ff4f0254be575a264504687c407e0db2fd5573d7Naseer Ahmedstruct vsync_state { 213ff4f0254be575a264504687c407e0db2fd5573d7Naseer Ahmed pthread_mutex_t lock; 214ff4f0254be575a264504687c407e0db2fd5573d7Naseer Ahmed pthread_cond_t cond; 215ff4f0254be575a264504687c407e0db2fd5573d7Naseer Ahmed bool enable; 216ff4f0254be575a264504687c407e0db2fd5573d7Naseer Ahmed}; 217ff4f0254be575a264504687c407e0db2fd5573d7Naseer Ahmed 21829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed// ----------------------------------------------------------------------------- 21929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed// HWC context 22029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed// This structure contains overall state 22129a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmedstruct hwc_context_t { 2225b6708ac87dc9681b3dd142b82702a8b995c6e22Naseer Ahmed hwc_composer_device_1_t device; 2233be78d9816da84e48a40232165189f9deb16808fJesse Hall const hwc_procs_t* proc; 22429a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed //Framebuffer device 22572cf9762f84aab07faab86e35fe830b63ec54d72Naseer Ahmed framebuffer_device_t *mFbDev; 2266c43ebed229c5d1e00c6d41638cd2f8e3cb979b7Arun Kumar K.R 2276c43ebed229c5d1e00c6d41638cd2f8e3cb979b7Arun Kumar K.R //CopyBit objects 2286c43ebed229c5d1e00c6d41638cd2f8e3cb979b7Arun Kumar K.R qhwc::CopyBit *mCopyBit[HWC_NUM_DISPLAY_TYPES]; 2296c43ebed229c5d1e00c6d41638cd2f8e3cb979b7Arun Kumar K.R 23029a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed //Overlay object - NULL for non overlay devices 231d551ebe2cb65d9da47d3e25f6004b8870afec8b4Naseer Ahmed overlay::Overlay *mOverlay; 23256f610dd235b577725198e9341caae92379fdf23Saurabh Shah //QService object 23356f610dd235b577725198e9341caae92379fdf23Saurabh Shah qService::QService *mQService; 2346457316fc7ae8ea29d763edce3fc1ffc78dd7387Saurabh Shah 2356457316fc7ae8ea29d763edce3fc1ffc78dd7387Saurabh Shah //Primary and external FB updater 2366457316fc7ae8ea29d763edce3fc1ffc78dd7387Saurabh Shah qhwc::IFBUpdate *mFBUpdate[HWC_NUM_DISPLAY_TYPES]; 2370c8b7b5c841a7fad5df11b7e02d7cd792cfcc734Naseer Ahmed // External display related information 23872cf9762f84aab07faab86e35fe830b63ec54d72Naseer Ahmed qhwc::ExternalDisplay *mExtDisplay; 23996c4c95d48dc075196c601b30a8798a262df9720Naseer Ahmed qhwc::MDPInfo mMDP; 2403e858ebde3f2b4e762af8f7f2808d45ba59b890dSaurabh Shah qhwc::DisplayAttributes dpyAttr[HWC_NUM_DISPLAY_TYPES]; 2413e858ebde3f2b4e762af8f7f2808d45ba59b890dSaurabh Shah qhwc::ListStats listStats[HWC_NUM_DISPLAY_TYPES]; 24233ecf33ed4881d0b76ceffb8a6f34dc8fa775ed2Naseer Ahmed qhwc::LayerCache *mLayerCache[HWC_NUM_DISPLAY_TYPES]; 24365bb464dab7f1b35ffd4dda11a3d16885bbadf2dNaseer Ahmed qhwc::LayerProp *layerProp[HWC_NUM_DISPLAY_TYPES]; 244bfa005e8c51529d99b9c360a444d351ebe0885f7Saurabh Shah qhwc::MDPComp *mMDPComp; 24589f9d5d65dc4f3ef2bea3d3b091069cb6af0fc38Naseer Ahmed 24656f610dd235b577725198e9341caae92379fdf23Saurabh Shah //Securing in progress indicator 24756f610dd235b577725198e9341caae92379fdf23Saurabh Shah bool mSecuring; 248f3db354f47d3d6b7f42374ea7b4e3b8e06df8592Amara Venkata Mastan Manoj Kumar //External Display configuring progress indicator 249f3db354f47d3d6b7f42374ea7b4e3b8e06df8592Amara Venkata Mastan Manoj Kumar bool mExtDispConfiguring; 25056f610dd235b577725198e9341caae92379fdf23Saurabh Shah //Display in secure mode indicator 25156f610dd235b577725198e9341caae92379fdf23Saurabh Shah bool mSecureMode; 25232ff225e6d77baeb38925faba4b6b8457fab6b7bNaseer Ahmed //Lock to prevent set from being called while blanking 25332ff225e6d77baeb38925faba4b6b8457fab6b7bNaseer Ahmed mutable Locker mBlankLock; 254f83d4480f2c7e37374c4516750aae79c6b12eb79Kinjal Bhavsar //Lock to protect set when detaching external disp 255f83d4480f2c7e37374c4516750aae79c6b12eb79Kinjal Bhavsar mutable Locker mExtSetLock; 256ff4f0254be575a264504687c407e0db2fd5573d7Naseer Ahmed //Vsync 257ff4f0254be575a264504687c407e0db2fd5573d7Naseer Ahmed struct vsync_state vstate; 25829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed}; 25929a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed 260bfa005e8c51529d99b9c360a444d351ebe0885f7Saurabh Shahstatic inline bool isSkipPresent (hwc_context_t *ctx, int dpy) { 261bfa005e8c51529d99b9c360a444d351ebe0885f7Saurabh Shah return ctx->listStats[dpy].skipCount; 262bfa005e8c51529d99b9c360a444d351ebe0885f7Saurabh Shah} 263bfa005e8c51529d99b9c360a444d351ebe0885f7Saurabh Shah 264bfa005e8c51529d99b9c360a444d351ebe0885f7Saurabh Shahstatic inline bool isYuvPresent (hwc_context_t *ctx, int dpy) { 265bfa005e8c51529d99b9c360a444d351ebe0885f7Saurabh Shah return ctx->listStats[dpy].yuvCount; 266bfa005e8c51529d99b9c360a444d351ebe0885f7Saurabh Shah} 267bfa005e8c51529d99b9c360a444d351ebe0885f7Saurabh Shah 26829a26818d7294055539167b2fbfdaa168bcf725cNaseer Ahmed#endif //HWC_UTILS_H 269