From 81c57b314972b8f15e450b71fbafa1c826e914a2 Mon Sep 17 00:00:00 2001 From: "Arun Kumar K.R" Date: Wed, 7 Oct 2015 18:27:03 -0700 Subject: [PATCH 1/3] SurfaceFlinger: Disable rotation animation on Secondary displays - Add support to set animating layer for HWCLayers - After hwc_prepare, dont override the compType of a layer to HWC_FRAMEBUFFER if its for non-primary displays Change-Id: Iac462778ce5fb9016290846146e62f80dcfafd5c CRs-fixed: 922304 --- .../DisplayHardware/HWComposer.cpp | 21 ++++++++++++++++--- .../DisplayHardware/HWComposer.h | 1 + 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/services/surfaceflinger/DisplayHardware/HWComposer.cpp b/services/surfaceflinger/DisplayHardware/HWComposer.cpp index 5bdcd7f79..33a09f804 100644 --- a/services/surfaceflinger/DisplayHardware/HWComposer.cpp +++ b/services/surfaceflinger/DisplayHardware/HWComposer.cpp @@ -36,6 +36,9 @@ #include #include +#ifdef QTI_BSP +#include +#endif #include @@ -692,13 +695,14 @@ status_t HWComposer::prepare() { disp.hasFbComp = false; disp.hasOvComp = false; if (disp.list) { - for (size_t i=0 ; inumHwLayers ; i++) { - hwc_layer_1_t& l = disp.list->hwLayers[i]; + for (size_t j=0 ; jnumHwLayers ; j++) { + hwc_layer_1_t& l = disp.list->hwLayers[j]; //ALOGD("prepare: %d, type=%d, handle=%p", // i, l.compositionType, l.handle); - if (l.flags & HWC_SKIP_LAYER) { + if ((i == DisplayDevice::DISPLAY_PRIMARY) && + l.flags & HWC_SKIP_LAYER) { l.compositionType = HWC_FRAMEBUFFER; } if (l.compositionType == HWC_FRAMEBUFFER) { @@ -987,6 +991,17 @@ public: } } } + virtual void setAnimating(bool animating) { + if (animating) { +#ifdef QTI_BSP + getLayer()->flags |= HWC_SCREENSHOT_ANIMATOR_LAYER; +#endif + } else { +#ifdef QTI_BSP + getLayer()->flags &= ~HWC_SCREENSHOT_ANIMATOR_LAYER; +#endif + } + } virtual void setDefaultState() { hwc_layer_1_t* const l = getLayer(); l->compositionType = HWC_FRAMEBUFFER; diff --git a/services/surfaceflinger/DisplayHardware/HWComposer.h b/services/surfaceflinger/DisplayHardware/HWComposer.h index ea9a208b5..89ed4e93c 100644 --- a/services/surfaceflinger/DisplayHardware/HWComposer.h +++ b/services/surfaceflinger/DisplayHardware/HWComposer.h @@ -181,6 +181,7 @@ public: virtual void setAcquireFenceFd(int fenceFd) = 0; virtual void setPlaneAlpha(uint8_t alpha) = 0; virtual void onDisplayed() = 0; + virtual void setAnimating(bool animating)= 0; }; /* From f8ea9b579653756d5adb1f0f09cec41857923ae8 Mon Sep 17 00:00:00 2001 From: Manoj Kumar AVM Date: Fri, 2 Oct 2015 14:53:50 -0700 Subject: [PATCH 2/3] sf: vds: Avoid HWC for certain scenarios Reserve HWC for VDS for WFD use case. During WFD usecase, sink usage will contain GRALLOC_USAGE_PRIVATE_WFD flag. When HWC is avoided, all virtual displays are composed using GLES. This means that GLES composes directly into the sink buffer and signals the consumer. Furthermore, it is expected that any color conversion will be handled on the consumer side. CRs-Fixed: 908380 Change-Id: I93ff54c79ece788b6caf3f4172835d8ac1362f62 --- services/surfaceflinger/DisplayUtils.cpp | 15 +++++++++++++++ services/surfaceflinger/DisplayUtils.h | 1 + services/surfaceflinger/SurfaceFlinger.cpp | 15 ++++++++++++--- 3 files changed, 28 insertions(+), 3 deletions(-) diff --git a/services/surfaceflinger/DisplayUtils.cpp b/services/surfaceflinger/DisplayUtils.cpp index e4e2183d7..83d84aa54 100644 --- a/services/surfaceflinger/DisplayUtils.cpp +++ b/services/surfaceflinger/DisplayUtils.cpp @@ -44,6 +44,9 @@ #include #include #include +#if QTI_BSP +#include +#endif namespace android { @@ -157,5 +160,17 @@ bool DisplayUtils::createV4L2BasedVirtualDisplay(HWComposer* hwc, int32_t &hwcDi return false; } +bool DisplayUtils::canAllocateHwcDisplayIdForVDS(int usage) { + // on AOSP builds with QTI_BSP disabled, we should allocate hwc display id for virtual display + int flag_mask = 0xffffffff; + +#if QTI_BSP + // Reserve hardware acceleration for WFD use-case + flag_mask = GRALLOC_USAGE_PRIVATE_WFD; +#endif + + return (usage & flag_mask); +} + }; // namespace android diff --git a/services/surfaceflinger/DisplayUtils.h b/services/surfaceflinger/DisplayUtils.h index cdf2b67fd..bb3d16bfc 100644 --- a/services/surfaceflinger/DisplayUtils.h +++ b/services/surfaceflinger/DisplayUtils.h @@ -61,6 +61,7 @@ class DisplayUtils { sp &producer, sp bqProducer, sp bqConsumer, String8 currentStateDisplayName, bool currentStateIsSecure, int currentStateType); + bool canAllocateHwcDisplayIdForVDS(int usage); DisplayUtils(); private: static DisplayUtils* sDisplayUtils; diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index 21c8aa5bd..5f37b0bd9 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -1430,6 +1430,7 @@ void SurfaceFlinger::handleTransactionLocked(uint32_t transactionFlags) if (state.surface != NULL) { int width = 0; + DisplayUtils* displayUtils = DisplayUtils::getInstance(); int status = state.surface->query( NATIVE_WINDOW_WIDTH, &width); ALOGE_IF(status != NO_ERROR, @@ -1442,11 +1443,19 @@ void SurfaceFlinger::handleTransactionLocked(uint32_t transactionFlags) if (MAX_VIRTUAL_DISPLAY_DIMENSION == 0 || (width <= MAX_VIRTUAL_DISPLAY_DIMENSION && height <= MAX_VIRTUAL_DISPLAY_DIMENSION)) { - hwcDisplayId = allocateHwcDisplayId(state.type); + int usage = 0; + status = state.surface->query( + NATIVE_WINDOW_CONSUMER_USAGE_BITS, &usage); + ALOGW_IF(status != NO_ERROR, + "Unable to query usage (%d)", status); + if ( (status == NO_ERROR) && + displayUtils->canAllocateHwcDisplayIdForVDS(usage)) { + hwcDisplayId = allocateHwcDisplayId(state.type); + } } - DisplayUtils::getInstance()->initVDSInstance(mHwc, hwcDisplayId, - state.surface, dispSurface, producer, bqProducer, bqConsumer, + displayUtils->initVDSInstance(mHwc, hwcDisplayId, state.surface, + dispSurface, producer, bqProducer, bqConsumer, state.displayName, state.isSecure, state.type); } From 84f1b431b2ee1d71f5c4dd19a163b8d0002238d9 Mon Sep 17 00:00:00 2001 From: Satya Durga Srinivasu Prabhala Date: Tue, 2 Dec 2014 18:32:46 -0800 Subject: [PATCH 3/3] native: add ambient temperature & relative humidity sensor features Adding ambient temperature & relative humidity hardware sensor features as they are missing and causing CTS failures. Change-Id: I4f07db8e77cb77c5b2c1bb7ed80a26f68c91c23e --- ...id.hardware.sensor.ambient_temperature.xml | 36 +++++++++++++++++++ ...roid.hardware.sensor.relative_humidity.xml | 36 +++++++++++++++++++ 2 files changed, 72 insertions(+) create mode 100644 data/etc/android.hardware.sensor.ambient_temperature.xml create mode 100644 data/etc/android.hardware.sensor.relative_humidity.xml diff --git a/data/etc/android.hardware.sensor.ambient_temperature.xml b/data/etc/android.hardware.sensor.ambient_temperature.xml new file mode 100644 index 000000000..ffb105da9 --- /dev/null +++ b/data/etc/android.hardware.sensor.ambient_temperature.xml @@ -0,0 +1,36 @@ + + + + + + + diff --git a/data/etc/android.hardware.sensor.relative_humidity.xml b/data/etc/android.hardware.sensor.relative_humidity.xml new file mode 100644 index 000000000..071007972 --- /dev/null +++ b/data/etc/android.hardware.sensor.relative_humidity.xml @@ -0,0 +1,36 @@ + + + + + + +