SF: Support to determine if the non-virtual displays are secure
- Non virtual displays can be secure/non-secure
- Add a hook to query this info from the HWC.
- This info will be used by the clients/apps which want to present
content only to physical displays that are secure
- HDMI is considered secure if it supports HDCP
Change-Id: I632e2fa2c8d9a75258a92043c1680fa4e05a354c
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp
index 5e58899..4a26326 100644
--- a/services/surfaceflinger/SurfaceFlinger.cpp
+++ b/services/surfaceflinger/SurfaceFlinger.cpp
@@ -278,13 +278,13 @@
setTransactionFlags(eDisplayTransactionNeeded);
}
-void SurfaceFlinger::createBuiltinDisplayLocked(DisplayDevice::DisplayType type) {
+void SurfaceFlinger::createBuiltinDisplayLocked(DisplayDevice::DisplayType type,
+ bool secure) {
ALOGW_IF(mBuiltinDisplays[type],
"Overwriting display token for display type %d", type);
mBuiltinDisplays[type] = new BBinder();
DisplayDeviceState info(type);
- // All non-virtual displays are currently considered secure.
- info.isSecure = true;
+ info.isSecure = secure;
mCurrentState.displays.add(mBuiltinDisplays[type], info);
}
@@ -438,9 +438,9 @@
DisplayDevice::DisplayType type((DisplayDevice::DisplayType)i);
// set-up the displays that are already connected
if (mHwc->isConnected(i) || type==DisplayDevice::DISPLAY_PRIMARY) {
- // All non-virtual displays are currently considered secure.
- bool isSecure = true;
- createBuiltinDisplayLocked(type);
+ // query from hwc if the non-virtual display is secure.
+ bool isSecure = mHwc->isSecure(i);;
+ createBuiltinDisplayLocked(type, isSecure);
wp<IBinder> token = mBuiltinDisplays[i];
sp<IGraphicBufferProducer> producer;
@@ -620,8 +620,8 @@
info.presentationDeadline =
hwConfig.refresh - SF_VSYNC_EVENT_PHASE_OFFSET_NS + 1000000;
- // All non-virtual displays are currently considered secure.
- info.secure = true;
+ // set secure info based on the hwcConfig
+ info.secure = hwConfig.secure;
configs->push_back(info);
}
@@ -834,7 +834,9 @@
if (uint32_t(type) < DisplayDevice::NUM_BUILTIN_DISPLAY_TYPES) {
Mutex::Autolock _l(mStateLock);
if (connected) {
- createBuiltinDisplayLocked((DisplayDevice::DisplayType)type);
+ // query from hwc if the connected display is secure
+ bool secure = mHwc->isSecure(type);;
+ createBuiltinDisplayLocked((DisplayDevice::DisplayType)type, secure);
} else {
mCurrentState.displays.removeItem(mBuiltinDisplays[type]);
mBuiltinDisplays[type].clear();