Merge changes I99404218,Ic07b3851
* changes:
SF: Clean up DisplayDeviceState
SF: Use std::string for display name
diff --git a/libs/input/VelocityTracker.cpp b/libs/input/VelocityTracker.cpp
index c07a812..496158b 100644
--- a/libs/input/VelocityTracker.cpp
+++ b/libs/input/VelocityTracker.cpp
@@ -115,7 +115,7 @@
// Allow the default strategy to be overridden using a system property for debugging.
if (!strategy) {
- int length = property_get("debug.velocitytracker.strategy", value, NULL);
+ int length = property_get("persist.input.velocitytracker.strategy", value, NULL);
if (length > 0) {
strategy = value;
} else {
diff --git a/services/surfaceflinger/Android.bp b/services/surfaceflinger/Android.bp
index cba94d2..1f0562d 100644
--- a/services/surfaceflinger/Android.bp
+++ b/services/surfaceflinger/Android.bp
@@ -141,7 +141,7 @@
],
logtags: ["EventLog/EventLogTags.logtags"],
include_dirs: [
- "external/vulkan-validation-layers/libs/vkjson",
+ "frameworks/native/vulkan/vkjson",
"frameworks/native/vulkan/include",
],
cppflags: [
diff --git a/services/surfaceflinger/Client.cpp b/services/surfaceflinger/Client.cpp
index c90024b..077469b 100644
--- a/services/surfaceflinger/Client.cpp
+++ b/services/surfaceflinger/Client.cpp
@@ -65,9 +65,14 @@
}
}
-void Client::setParentLayer(const sp<Layer>& parentLayer) {
+void Client::updateParent(const sp<Layer>& parentLayer) {
Mutex::Autolock _l(mLock);
- mParentLayer = parentLayer;
+
+ // If we didn't ever have a parent, then we must instead be
+ // relying on permissions and we never need a parent.
+ if (mParentLayer != nullptr) {
+ mParentLayer = parentLayer;
+ }
}
sp<Layer> Client::getParentLayer(bool* outParentDied) const {
diff --git a/services/surfaceflinger/Client.h b/services/surfaceflinger/Client.h
index c7df9f7..49437ed 100644
--- a/services/surfaceflinger/Client.h
+++ b/services/surfaceflinger/Client.h
@@ -51,7 +51,7 @@
sp<Layer> getLayerUser(const sp<IBinder>& handle) const;
- void setParentLayer(const sp<Layer>& parentLayer);
+ void updateParent(const sp<Layer>& parentLayer);
private:
// ISurfaceComposerClient interface
diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp
index ee9482b..fc9f16b 100644
--- a/services/surfaceflinger/Layer.cpp
+++ b/services/surfaceflinger/Layer.cpp
@@ -1585,7 +1585,7 @@
sp<Client> client(child->mClientRef.promote());
if (client != nullptr) {
- client->setParentLayer(newParent);
+ client->updateParent(newParent);
}
}
mCurrentChildren.clear();
@@ -1621,7 +1621,7 @@
sp<Client> newParentClient(newParent->mClientRef.promote());
if (client != newParentClient) {
- client->setParentLayer(newParent);
+ client->updateParent(newParent);
}
return true;
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index 40a7460..e3df569 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -1125,12 +1125,16 @@
int status = getBE().mHwc->getHdrCapabilities(
displayDevice->getHwcDisplayId(), &capabilities);
if (status == NO_ERROR) {
- if (displayDevice->hasWideColorGamut() &&
- !displayDevice->hasHDR10Support()) {
- // insert HDR10 as we will force client composition for HDR10
- // layers
+ if (displayDevice->hasWideColorGamut()) {
std::vector<Hdr> types = capabilities.getSupportedHdrTypes();
- types.push_back(Hdr::HDR10);
+ // insert HDR10/HLG as we will force client composition for HDR10/HLG
+ // layers
+ if (!displayDevice->hasHDR10Support()) {
+ types.push_back(Hdr::HDR10);
+ }
+ if (!displayDevice->hasHLGSupport()) {
+ types.push_back(Hdr::HLG);
+ }
*outCapabilities = HdrCapabilities(types,
capabilities.getDesiredMaxLuminance(),
@@ -1906,17 +1910,23 @@
case Dataspace::V0_SCRGB_LINEAR:
// return immediately
return Dataspace::V0_SCRGB_LINEAR;
+ case Dataspace::DISPLAY_P3:
+ bestDataspace = Dataspace::DISPLAY_P3;
+ break;
+ // Historically, HDR dataspaces are ignored by SurfaceFlinger. But
+ // since SurfaceFlinger simulates HDR support now, it should honor
+ // them unless there is also native support.
case Dataspace::BT2020_PQ:
case Dataspace::BT2020_ITU_PQ:
- // Historically, HDR dataspaces are ignored by SurfaceFlinger. But
- // since SurfaceFlinger simulates HDR support now, it should honor
- // them unless there is also native support.
if (!displayDevice->hasHDR10Support()) {
return Dataspace::V0_SCRGB_LINEAR;
}
break;
- case Dataspace::DISPLAY_P3:
- bestDataspace = Dataspace::DISPLAY_P3;
+ case Dataspace::BT2020_HLG:
+ case Dataspace::BT2020_ITU_HLG:
+ if (!displayDevice->hasHLGSupport()) {
+ return Dataspace::V0_SCRGB_LINEAR;
+ }
break;
default:
break;
@@ -2032,6 +2042,11 @@
!displayDevice->hasHDR10Support()) {
layer->forceClientComposition(hwcId);
}
+ if ((layer->getDataSpace() == Dataspace::BT2020_HLG ||
+ layer->getDataSpace() == Dataspace::BT2020_ITU_HLG) &&
+ !displayDevice->hasHLGSupport()) {
+ layer->forceClientComposition(hwcId);
+ }
if (layer->getForceClientComposition(hwcId)) {
ALOGV("[%s] Requesting Client composition", layer->getName().string());