summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteve Kondik <steve@cyngn.com>2015-10-21 16:56:23 -0700
committerSteve Kondik <steve@cyngn.com>2015-10-21 16:56:23 -0700
commit8f0e75211fe3c0391d2f8c3e2f087a1689a8b9ff (patch)
tree91b2ccf7824a45cce72e74f8c7817da926706559
parentbfcd44395079a34ff496ae960bdde6982064140b (diff)
parentdfab0ee25433bca9d9158a65cf2861c28a3fd75c (diff)
downloadframeworks_native-8f0e75211fe3c0391d2f8c3e2f087a1689a8b9ff.zip
frameworks_native-8f0e75211fe3c0391d2f8c3e2f087a1689a8b9ff.tar.gz
frameworks_native-8f0e75211fe3c0391d2f8c3e2f087a1689a8b9ff.tar.bz2
Merge branch 'm' of git://codeaurora.org/platform/frameworks/native into cm-13.0
Change-Id: I7830f596b2e7da809a759491d8115ff158c43734
-rw-r--r--services/surfaceflinger/Android.mk3
-rw-r--r--services/surfaceflinger/DisplayHardware/HWComposer.cpp7
-rw-r--r--services/surfaceflinger/DisplayHardware/HWComposer.h3
-rw-r--r--services/surfaceflinger/Layer.cpp3
-rw-r--r--services/surfaceflinger/Layer.h4
-rw-r--r--services/surfaceflinger/SurfaceFlinger.cpp9
-rw-r--r--services/surfaceflinger/SurfaceFlinger.h5
7 files changed, 29 insertions, 5 deletions
diff --git a/services/surfaceflinger/Android.mk b/services/surfaceflinger/Android.mk
index b1fc73f..276a242 100644
--- a/services/surfaceflinger/Android.mk
+++ b/services/surfaceflinger/Android.mk
@@ -109,7 +109,8 @@ LOCAL_SHARED_LIBRARIES := \
ifeq ($(TARGET_USES_QCOM_BSP), true)
LOCAL_WHOLE_STATIC_LIBRARIES += libexsurfaceflinger
- LOCAL_C_INCLUDES += $(ANDROID_BUILD_TOP)/vendor/qcom/opensource/display-frameworks/native/services/surfaceflinger/
+ LOCAL_C_INCLUDES += vendor/qcom/opensource/display-frameworks/native/services/surfaceflinger
+ LOCAL_C_INCLUDES += vendor/qcom/opensource/display-frameworks/include
LOCAL_C_INCLUDES += $(call project-path-for,qcom-display)/libgralloc
LOCAL_C_INCLUDES += $(call project-path-for,qcom-display)/libqdutils
LOCAL_SHARED_LIBRARIES += libqdutils
diff --git a/services/surfaceflinger/DisplayHardware/HWComposer.cpp b/services/surfaceflinger/DisplayHardware/HWComposer.cpp
index 8331828..5bdcd7f 100644
--- a/services/surfaceflinger/DisplayHardware/HWComposer.cpp
+++ b/services/surfaceflinger/DisplayHardware/HWComposer.cpp
@@ -707,6 +707,9 @@ status_t HWComposer::prepare() {
if (l.compositionType == HWC_OVERLAY) {
disp.hasOvComp = true;
}
+ if (isCompositionTypeBlit(l.compositionType)) {
+ disp.hasFbComp = true;
+ }
if (l.compositionType == HWC_CURSOR_OVERLAY) {
disp.hasOvComp = true;
}
@@ -1242,7 +1245,7 @@ void HWComposer::dump(String8& result) const {
if (hwcHasApiVersion(mHwc, HWC_DEVICE_API_VERSION_1_3)) {
result.appendFormat(
" %9s | %08" PRIxPTR " | %04x | %04x | %02x | %04x | %-11s |%7.1f,%7.1f,%7.1f,%7.1f |%5d,%5d,%5d,%5d | %s\n",
- compositionTypeName[type],
+ (isCompositionTypeBlit(l.compositionType)) ? "HWC_BLIT" : compositionTypeName[type],
intptr_t(l.handle), l.hints, l.flags, l.transform, l.blending, formatStr.string(),
l.sourceCropf.left, l.sourceCropf.top, l.sourceCropf.right, l.sourceCropf.bottom,
l.displayFrame.left, l.displayFrame.top, l.displayFrame.right, l.displayFrame.bottom,
@@ -1250,7 +1253,7 @@ void HWComposer::dump(String8& result) const {
} else {
result.appendFormat(
" %9s | %08" PRIxPTR " | %04x | %04x | %02x | %04x | %-11s |%7d,%7d,%7d,%7d |%5d,%5d,%5d,%5d | %s\n",
- compositionTypeName[type],
+ (isCompositionTypeBlit(l.compositionType)) ? "HWC_BLIT" : compositionTypeName[type],
intptr_t(l.handle), l.hints, l.flags, l.transform, l.blending, formatStr.string(),
l.sourceCrop.left, l.sourceCrop.top, l.sourceCrop.right, l.sourceCrop.bottom,
l.displayFrame.left, l.displayFrame.top, l.displayFrame.right, l.displayFrame.bottom,
diff --git a/services/surfaceflinger/DisplayHardware/HWComposer.h b/services/surfaceflinger/DisplayHardware/HWComposer.h
index 952635f..ea9a208 100644
--- a/services/surfaceflinger/DisplayHardware/HWComposer.h
+++ b/services/surfaceflinger/DisplayHardware/HWComposer.h
@@ -312,6 +312,9 @@ public:
* Extensions
*/
virtual inline bool isVDSEnabled() const { return true; };
+ virtual inline bool isCompositionTypeBlit(const int32_t /*compType*/) const {
+ return false;
+ };
private:
void loadHwcModule();
diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp
index bfd83e4..bcd5915 100644
--- a/services/surfaceflinger/Layer.cpp
+++ b/services/surfaceflinger/Layer.cpp
@@ -579,6 +579,7 @@ void Layer::setAcquireFence(const sp<const DisplayDevice>& /* hw */,
}
}
}
+ setAcquiredFenceIfBlit(fenceFd, layer);
layer.setAcquireFenceFd(fenceFd);
}
@@ -665,7 +666,7 @@ void Layer::onDraw(const sp<const DisplayDevice>& hw, const Region& clip,
RenderEngine& engine(mFlinger->getRenderEngine());
- if (!blackOutLayer) {
+ if (!blackOutLayer || canAllowGPUForProtected()) {
// TODO: we could be more subtle with isFixedSize()
const bool useFiltering = getFiltering() || needsFiltering(hw) || isFixedSize();
diff --git a/services/surfaceflinger/Layer.h b/services/surfaceflinger/Layer.h
index 8115ad0..c0c8bf5 100644
--- a/services/surfaceflinger/Layer.h
+++ b/services/surfaceflinger/Layer.h
@@ -298,6 +298,10 @@ public:
virtual void setPosition(const sp<const DisplayDevice>& /*hw*/,
HWComposer::HWCLayerInterface& /*layer*/,
const State& /*state*/) { }
+ virtual void setAcquiredFenceIfBlit(int& /*fenceFd */,
+ HWComposer::HWCLayerInterface& /*layer */) { }
+ virtual bool canAllowGPUForProtected() const { return false; }
+
/*
* returns the rectangle that crops the content of the layer and scales it
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index 165c1b7..e1d9020 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -1965,7 +1965,7 @@ bool SurfaceFlinger::doComposeSurfaces(const sp<const DisplayDevice>& hw, const
// screen is already cleared here
if (!region.isEmpty()) {
// can happen with SurfaceView
- drawWormhole(hw, region);
+ drawWormHoleIfRequired(cur, end, hw, region);
}
}
@@ -3563,6 +3563,13 @@ bool SurfaceFlinger::canDrawLayerinScreenShot(
return layer->isVisible();
}
+void SurfaceFlinger::drawWormHoleIfRequired(HWComposer::LayerListIterator& /*cur*/,
+ const HWComposer::LayerListIterator& /*end*/,
+ const sp<const DisplayDevice>& hw,
+ const Region& region) {
+ drawWormhole(hw, region);
+}
+
// ---------------------------------------------------------------------------
SurfaceFlinger::LayerVector::LayerVector() {
diff --git a/services/surfaceflinger/SurfaceFlinger.h b/services/surfaceflinger/SurfaceFlinger.h
index b559f0e..9da0bd8 100644
--- a/services/surfaceflinger/SurfaceFlinger.h
+++ b/services/surfaceflinger/SurfaceFlinger.h
@@ -272,6 +272,11 @@ private:
const int32_t& /*id*/) { }
virtual void updateVisibleRegionsDirty() { }
+
+ virtual void drawWormHoleIfRequired(HWComposer::LayerListIterator &cur,
+ const HWComposer::LayerListIterator &end,
+ const sp<const DisplayDevice>& hw,
+ const Region& region);
/* ------------------------------------------------------------------------
* Message handling
*/