Home | History | Annotate | Download | only in base
      1 /*
      2 // Copyright(c)2014 IntelCorporation
      3 //
      4 // LicensedundertheApacheLicense,Version2.0(the"License");
      5 // youmaynotusethisfileexceptincompliancewiththeLicense.
      6 // YoumayobtainacopyoftheLicenseat
      7 //
      8 // http://www.apache.org/licenses/LICENSE-2.0
      9 //
     10 // Unlessrequiredbyapplicablelaworagreedtoinwriting,software
     11 // distributedundertheLicenseisdistributedonan"ASIS"BASIS,
     12 // WITHOUTWARRANTIESORCONDITIONSOFANYKIND,eitherexpressorimplied.
     13 // SeetheLicenseforthespecificlanguagegoverningpermissionsand
     14 // limitationsundertheLicense.
     15 */
     16 #ifndef HWC_LAYER_H
     17 #define HWC_LAYER_H
     18 
     19 #include <hardware/hwcomposer.h>
     20 #include <DisplayPlane.h>
     21 #include <utils/Vector.h>
     22 
     23 //#define HWC_TRACE_FPS
     24 
     25 namespace android {
     26 namespace intel {
     27 
     28 enum {
     29     LAYER_STATIC_THRESHOLD = 10,
     30 };
     31 
     32 class HwcLayer {
     33 public:
     34     enum {
     35         // LAYER_FB layers are marked as HWC_FRAMEBUFFER.
     36         // And a LAYER_FB can become HWC_OVERLAY layers during
     37         // revisiting layer list.
     38         LAYER_FB = 0,
     39         // LAYER_FORCE_FB layers are marked as HWC_FRAMEBUFFER.
     40         // And a LAYER_FORCE_FB can never become HWC_OVERLAY layers during
     41         // revisiting layer list.
     42         LAYER_FORCE_FB,
     43         // LAYER_OVERLAY layers are marked as HWC_OVERLAY
     44         LAYER_OVERLAY,
     45         // LAYER_SKIPPED layers are marked as HWC_OVERLAY with no plane attached
     46         LAYER_SKIPPED,
     47         // LAYER_FRAMEBUFFER_TARGET layers are marked as HWC_FRAMEBUFFER_TARGET
     48         LAYER_FRAMEBUFFER_TARGET,
     49         // LAYER_SIDEBAND layers have alternate path bypassing HWC after setup
     50         LAYER_SIDEBAND,
     51         // LAYER_CURSOR_OVERLAY layers support hardware cursor planes
     52         LAYER_CURSOR_OVERLAY,
     53     };
     54 
     55     enum {
     56         LAYER_PRIORITY_OVERLAY = 0x60000000UL,
     57         LAYER_PRIORITY_PROTECTED = 0x70000000UL,
     58         LAYER_PRIORITY_SIZE_OFFSET = 4,
     59     };
     60 public:
     61     HwcLayer(int index, hwc_layer_1_t *layer);
     62     virtual ~HwcLayer();
     63 
     64     // plane operations
     65     bool attachPlane(DisplayPlane *plane, int device);
     66     DisplayPlane* detachPlane();
     67 
     68     void setType(uint32_t type);
     69     uint32_t getType() const;
     70     int32_t getCompositionType() const;
     71     void setCompositionType(int32_t type);
     72 
     73     int getIndex() const;
     74     int getZOrder() const;
     75     uint32_t getFormat() const;
     76     uint32_t getBufferWidth() const;
     77     uint32_t getBufferHeight() const;
     78     const stride_t& getBufferStride() const;
     79     uint32_t getUsage() const;
     80     buffer_handle_t getHandle() const;
     81     uint32_t getTransform() const;
     82     bool isProtected() const;
     83     hwc_layer_1_t* getLayer() const;
     84     DisplayPlane* getPlane() const;
     85 
     86     void setPriority(uint32_t priority);
     87     uint32_t getPriority() const;
     88 
     89     bool update(hwc_layer_1_t *layer);
     90     void postFlip();
     91     bool isUpdated();
     92     uint32_t getStaticCount();
     93 
     94 public:
     95     // temporary solution for plane assignment
     96     bool mPlaneCandidate;
     97 
     98 private:
     99     void setupAttributes();
    100 
    101 private:
    102     const int mIndex;
    103     int mZOrder;
    104     int mDevice;
    105     hwc_layer_1_t *mLayer;
    106     DisplayPlane *mPlane;
    107     uint32_t mFormat;
    108     uint32_t mWidth;
    109     uint32_t mHeight;
    110     stride_t mStride;
    111     uint32_t mUsage;
    112     buffer_handle_t mHandle;
    113     bool mIsProtected;
    114     uint32_t mType;
    115     uint32_t mPriority;
    116     uint32_t mTransform;
    117 
    118     // for smart composition
    119     hwc_frect_t mSourceCropf;
    120     hwc_rect_t mDisplayFrame;
    121     uint32_t mStaticCount;
    122     bool mUpdated;
    123 
    124 #ifdef HWC_TRACE_FPS
    125     // for frame per second trace
    126     bool mTraceFps;
    127     buffer_handle_t mLastHandle;
    128     Vector<uint64_t>  mFrames;
    129 #endif
    130 };
    131 
    132 
    133 } // namespace intel
    134 } // namespace android
    135 
    136 
    137 #endif /* HWC_LAYER_H */
    138