1 /* 2 // Copyright (c) 2014 Intel Corporation 3 // 4 // Licensed under the Apache License, Version 2.0 (the "License"); 5 // you may not use this file except in compliance with the License. 6 // You may obtain a copy of the License at 7 // 8 // http://www.apache.org/licenses/LICENSE-2.0 9 // 10 // Unless required by applicable law or agreed to in writing, software 11 // distributed under the License is distributed on an "AS IS" BASIS, 12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 // See the License for the specific language governing permissions and 14 // limitations under the License. 15 */ 16 #ifndef DISPLAYPLANEMANAGER_H_ 17 #define DISPLAYPLANEMANAGER_H_ 18 19 #include <common/utils/Dump.h> 20 #include <DisplayPlane.h> 21 #include <common/base/HwcLayer.h> 22 #include <utils/Vector.h> 23 24 namespace android { 25 namespace intel { 26 27 struct ZOrderLayer 28 { ZOrderLayerZOrderLayer29 ZOrderLayer() { 30 memset(this, 0, sizeof(ZOrderLayer)); 31 } 32 33 inline bool operator<(const ZOrderLayer& rhs) const { 34 return zorder < rhs.zorder; 35 } 36 37 int planeType; 38 int zorder; 39 DisplayPlane *plane; 40 HwcLayer *hwcLayer; 41 }; 42 43 class ZOrderConfig : public SortedVector<ZOrderLayer*> { 44 public: ZOrderConfig()45 ZOrderConfig() {} 46 do_compare(const void * lhs,const void * rhs)47 int do_compare(const void* lhs, const void* rhs) const { 48 const ZOrderLayer *l = *(ZOrderLayer**)lhs; 49 const ZOrderLayer *r = *(ZOrderLayer**)rhs; 50 51 // sorted from z order 0 to n 52 return l->zorder - r->zorder; 53 } 54 }; 55 56 57 class DisplayPlaneManager { 58 public: 59 DisplayPlaneManager(); 60 virtual ~DisplayPlaneManager(); 61 62 public: 63 virtual bool initialize(); 64 virtual void deinitialize(); 65 66 virtual bool isValidZOrder(int dsp, ZOrderConfig& config) = 0; 67 virtual bool assignPlanes(int dsp, ZOrderConfig& config) = 0; 68 // TODO: remove this API 69 virtual void* getZOrderConfig() const = 0; 70 virtual int getFreePlanes(int dsp, int type); 71 virtual void reclaimPlane(int dsp, DisplayPlane& plane); 72 virtual void disableReclaimedPlanes(); 73 virtual bool isOverlayPlanesDisabled(); 74 // dump interface 75 virtual void dump(Dump& d); 76 77 protected: 78 // plane allocation & free 79 int getPlane(uint32_t& mask); 80 int getPlane(uint32_t& mask, int index); 81 DisplayPlane* getPlane(int type, int index); 82 DisplayPlane* getAnyPlane(int type); 83 void putPlane(int index, uint32_t& mask); 84 void putPlane(int dsp, DisplayPlane& plane); 85 bool isFreePlane(int type, int index); 86 virtual DisplayPlane* allocPlane(int index, int type) = 0; 87 88 protected: 89 int mPlaneCount[DisplayPlane::PLANE_MAX]; 90 int mTotalPlaneCount; 91 int mPrimaryPlaneCount; 92 int mSpritePlaneCount; 93 int mOverlayPlaneCount; 94 int mCursorPlaneCount; 95 96 Vector<DisplayPlane*> mPlanes[DisplayPlane::PLANE_MAX]; 97 98 // Bitmap of free planes. Bit0 - plane A, bit 1 - plane B, etc. 99 uint32_t mFreePlanes[DisplayPlane::PLANE_MAX]; 100 uint32_t mReclaimedPlanes[DisplayPlane::PLANE_MAX]; 101 102 bool mInitialized; 103 104 enum { 105 DEFAULT_PRIMARY_PLANE_COUNT = 3 106 }; 107 }; 108 109 } // namespace intel 110 } // namespace android 111 112 #endif /* DISPLAYPLANEMANAGER_H_ */ 113