diff options
author | Linux Build Service Account <lnxbuild@localhost> | 2023-05-01 09:56:47 -0700 |
---|---|---|
committer | Linux Build Service Account <lnxbuild@localhost> | 2023-05-01 09:56:47 -0700 |
commit | d55c299fa9a84b243642c1308b93309b325f39c8 (patch) | |
tree | afc8b8edf28cacf15e49683e67bbef1eb4b3ad59 | |
parent | f0037e2123deb6b62847c9e2fec53a8b00cf2a31 (diff) | |
parent | 0aabf09942f7b6f3ef19e4a8e1e58c9012c79cfa (diff) |
Merge 0aabf09942f7b6f3ef19e4a8e1e58c9012c79cfa on remote branch
Change-Id: I364346b496e8cbc4f63f42aa0a889b02f5b8ba60
-rw-r--r-- | services/surfaceflinger/SurfaceFlinger.cpp | 76 |
1 files changed, 43 insertions, 33 deletions
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index ebb202f1b7..63a298b643 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -5558,46 +5558,56 @@ bool SurfaceFlinger::applyTransactionState(const FrameTimelineInfo& frameTimelin } void SurfaceFlinger::checkVirtualDisplayHint(const Vector<DisplayState>& displays) { - Mutex::Autolock lock(mStateLock); - for (const DisplayState& s : displays) { - const ssize_t index = mCurrentState.displays.indexOfKey(s.token); - if (index < 0) - continue; + bool createVirtualDisplay = false; + int width = 0, height = 0, format = 0; + { + Mutex::Autolock lock(mStateLock); + for (const DisplayState& s : displays) { + const ssize_t index = mCurrentState.displays.indexOfKey(s.token); + if (index < 0) + continue; - DisplayDeviceState& state = mCurrentState.displays.editValueAt(index); - const uint32_t what = s.what; - if (what & DisplayState::eSurfaceChanged) { - if (IInterface::asBinder(state.surface) != IInterface::asBinder(s.surface)) { - if (state.isVirtual() && s.surface != nullptr) { - int width = 0; - int status = s.surface->query(NATIVE_WINDOW_WIDTH, &width); - ALOGE_IF(status != NO_ERROR, "Unable to query width (%d)", status); - int height = 0; - status = s.surface->query(NATIVE_WINDOW_HEIGHT, &height); - ALOGE_IF(status != NO_ERROR, "Unable to query height (%d)", status); - int format = 0; - status = s.surface->query(NATIVE_WINDOW_FORMAT, &format); - ALOGE_IF(status != NO_ERROR, "Unable to query format (%d)", status); -#ifdef QTI_DISPLAY_CONFIG_ENABLED - size_t maxVirtualDisplaySize = - getHwComposer().getMaxVirtualDisplayDimension(); - if ((mDisplayConfigIntf) && (maxVirtualDisplaySize == 0 || - ((uint64_t)width <= maxVirtualDisplaySize && - (uint64_t)height <= maxVirtualDisplaySize))) { - uint64_t usage = 0; - // Replace with native_window_get_consumer_usage ? - status = s.surface->getConsumerUsage(&usage); - ALOGW_IF(status != NO_ERROR, "Unable to query usage (%d)", status); - if ((status == NO_ERROR) && canAllocateHwcDisplayIdForVDS(usage)) { - mDisplayConfigIntf->CreateVirtualDisplay(width, height, format); - return; + DisplayDeviceState& state = mCurrentState.displays.editValueAt(index); + const uint32_t what = s.what; + if (what & DisplayState::eSurfaceChanged) { + if (IInterface::asBinder(state.surface) != IInterface::asBinder(s.surface)) { + if (state.isVirtual() && s.surface != nullptr) { + width = 0; + int status = s.surface->query(NATIVE_WINDOW_WIDTH, &width); + ALOGE_IF(status != NO_ERROR, "Unable to query width (%d)", status); + height = 0; + status = s.surface->query(NATIVE_WINDOW_HEIGHT, &height); + ALOGE_IF(status != NO_ERROR, "Unable to query height (%d)", status); + format = 0; + status = s.surface->query(NATIVE_WINDOW_FORMAT, &format); + ALOGE_IF(status != NO_ERROR, "Unable to query format (%d)", status); + #ifdef QTI_DISPLAY_CONFIG_ENABLED + size_t maxVirtualDisplaySize = + getHwComposer().getMaxVirtualDisplayDimension(); + if ((mDisplayConfigIntf) && (maxVirtualDisplaySize == 0 || + ((uint64_t)width <= maxVirtualDisplaySize && + (uint64_t)height <= maxVirtualDisplaySize))) { + uint64_t usage = 0; + // Replace with native_window_get_consumer_usage ? + status = s.surface->getConsumerUsage(&usage); + ALOGW_IF(status != NO_ERROR, "Unable to query usage (%d)", status); + if ((status == NO_ERROR) && canAllocateHwcDisplayIdForVDS(usage)) { + createVirtualDisplay = true; + break; + } } + #endif } -#endif } } } } + + #ifdef QTI_DISPLAY_CONFIG_ENABLED + if (createVirtualDisplay) { + mDisplayConfigIntf->CreateVirtualDisplay(width, height, format); + } + #endif } uint32_t SurfaceFlinger::setDisplayStateLocked(const DisplayState& s) { |