SurfaceFlinger: Add dim layer information into HWC layer.
- Set dim layer flag = 0x80000000 to send dim layer hint to HWC. - Clear HWC_SKIP_LAYER flag when dim layer flag is set. Change-Id: I56904c65fb487e6e89d4c057015443730d727299
This commit is contained in:
parent
a1288c979d
commit
24e0fdd93b
@ -190,6 +190,11 @@ HWComposer::HWComposer(
|
||||
// we don't have VSYNC support, we need to fake it
|
||||
mVSyncThread = new VSyncThread(*this);
|
||||
}
|
||||
|
||||
mDimComp = 0;
|
||||
if (mHwc) {
|
||||
mHwc->query(mHwc, HWC_BACKGROUND_LAYER_SUPPORTED, &mDimComp);
|
||||
}
|
||||
}
|
||||
|
||||
HWComposer::~HWComposer() {
|
||||
@ -1000,6 +1005,10 @@ public:
|
||||
getLayer()->flags &= ~HWC_SKIP_LAYER;
|
||||
}
|
||||
}
|
||||
virtual void setDim() {
|
||||
setSkip(false);
|
||||
getLayer()->flags |= 0x80000000;
|
||||
}
|
||||
virtual void setIsCursorLayerHint(bool isCursor) {
|
||||
if (hwcHasApiVersion(mHwc, HWC_DEVICE_API_VERSION_1_4)) {
|
||||
if (isCursor) {
|
||||
|
@ -120,6 +120,9 @@ public:
|
||||
// does this display have layers handled by GLES
|
||||
bool hasGlesComposition(int32_t id) const;
|
||||
|
||||
// does this display support dim layer composition
|
||||
bool hasDimComposition() const { return (mDimComp == 1); }
|
||||
|
||||
// get the releaseFence file descriptor for a display's framebuffer layer.
|
||||
// the release fence is only valid after commit()
|
||||
sp<Fence> getAndResetReleaseFence(int32_t id);
|
||||
@ -165,6 +168,7 @@ public:
|
||||
virtual sp<Fence> getAndResetReleaseFence() = 0;
|
||||
virtual void setDefaultState() = 0;
|
||||
virtual void setSkip(bool skip) = 0;
|
||||
virtual void setDim() = 0;
|
||||
virtual void setIsCursorLayerHint(bool isCursor = true) = 0;
|
||||
virtual void setBlending(uint32_t blending) = 0;
|
||||
virtual void setTransform(uint32_t transform) = 0;
|
||||
@ -379,6 +383,8 @@ private:
|
||||
|
||||
// thread-safe
|
||||
mutable Mutex mEventControlLock;
|
||||
|
||||
int mDimComp;
|
||||
};
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
@ -205,7 +205,7 @@ public:
|
||||
|
||||
void setGeometry(const sp<const DisplayDevice>& hw,
|
||||
HWComposer::HWCLayerInterface& layer);
|
||||
void setPerFrameData(const sp<const DisplayDevice>& hw,
|
||||
virtual void setPerFrameData(const sp<const DisplayDevice>& hw,
|
||||
HWComposer::HWCLayerInterface& layer);
|
||||
void setAcquireFence(const sp<const DisplayDevice>& hw,
|
||||
HWComposer::HWCLayerInterface& layer);
|
||||
|
@ -58,6 +58,15 @@ bool LayerDim::isVisible() const {
|
||||
return !(s.flags & layer_state_t::eLayerHidden) && s.alpha;
|
||||
}
|
||||
|
||||
void LayerDim::setPerFrameData(const sp<const DisplayDevice>& hw,
|
||||
HWComposer::HWCLayerInterface& layer) {
|
||||
HWComposer& hwc = mFlinger->getHwComposer();
|
||||
|
||||
Layer::setPerFrameData(hw, layer);
|
||||
if (hwc.hasDimComposition()) {
|
||||
layer.setDim();
|
||||
}
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
|
@ -40,6 +40,8 @@ public:
|
||||
virtual bool isSecure() const { return false; }
|
||||
virtual bool isFixedSize() const { return true; }
|
||||
virtual bool isVisible() const;
|
||||
virtual void setPerFrameData(const sp<const DisplayDevice>& hw,
|
||||
HWComposer::HWCLayerInterface& layer);
|
||||
};
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
@ -140,6 +140,7 @@ private:
|
||||
friend class Client;
|
||||
friend class DisplayEventConnection;
|
||||
friend class Layer;
|
||||
friend class LayerDim;
|
||||
friend class MonitoredProducer;
|
||||
|
||||
// This value is specified in number of frames. Log frame stats at most
|
||||
|
Loading…
Reference in New Issue
Block a user