OSDN Git Service

HWC2: Kill logspam for non-HWC virtual displays
authorDan Stoza <stoza@google.com>
Thu, 21 Jul 2016 18:09:40 +0000 (11:09 -0700)
committerDan Stoza <stoza@google.com>
Thu, 21 Jul 2016 18:11:46 +0000 (11:11 -0700)
Removes some logspam and fixes some non-errors which were reported as
errors when running a virtual display that is not backed by hardware
composer.

Bug: 30022738
Change-Id: Ie966e37d95f53bcc050eef064d24bbe26748b7fd

services/surfaceflinger/DisplayHardware/HWComposer.cpp
services/surfaceflinger/Layer.cpp

index 4ac58c5..c87ba72 100644 (file)
@@ -467,6 +467,10 @@ status_t HWComposer::prepare(DisplayDevice& displayDevice) {
 
     Mutex::Autolock _l(mDisplayLock);
     auto displayId = displayDevice.getHwcDisplayId();
+    if (displayId == DisplayDevice::DISPLAY_ID_INVALID) {
+        ALOGV("Skipping HWComposer prepare for non-HWC display");
+        return NO_ERROR;
+    }
     if (!isValidDisplay(displayId)) {
         return BAD_INDEX;
     }
@@ -560,6 +564,11 @@ status_t HWComposer::prepare(DisplayDevice& displayDevice) {
 }
 
 bool HWComposer::hasDeviceComposition(int32_t displayId) const {
+    if (displayId == DisplayDevice::DISPLAY_ID_INVALID) {
+        // Displays without a corresponding HWC display are never composed by
+        // the device
+        return false;
+    }
     if (!isValidDisplay(displayId)) {
         ALOGE("hasDeviceComposition: Invalid display %d", displayId);
         return false;
@@ -568,6 +577,11 @@ bool HWComposer::hasDeviceComposition(int32_t displayId) const {
 }
 
 bool HWComposer::hasClientComposition(int32_t displayId) const {
+    if (displayId == DisplayDevice::DISPLAY_ID_INVALID) {
+        // Displays without a corresponding HWC display are always composed by
+        // the client
+        return true;
+    }
     if (!isValidDisplay(displayId)) {
         ALOGE("hasClientComposition: Invalid display %d", displayId);
         return true;
index 30a4d79..4d04072 100644 (file)
@@ -1058,8 +1058,13 @@ void Layer::setCompositionType(int32_t hwcId, HWC2::Composition type,
 }
 
 HWC2::Composition Layer::getCompositionType(int32_t hwcId) const {
+    if (hwcId == DisplayDevice::DISPLAY_ID_INVALID) {
+        // If we're querying the composition type for a display that does not
+        // have a HWC counterpart, then it will always be Client
+        return HWC2::Composition::Client;
+    }
     if (mHwcLayers.count(hwcId) == 0) {
-        ALOGE("getCompositionType called without a valid HWC layer");
+        ALOGE("getCompositionType called with an invalid HWC layer");
         return HWC2::Composition::Invalid;
     }
     return mHwcLayers.at(hwcId).compositionType;