summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoralk3pInjection <webmaster@raspii.tech>2023-05-05 00:21:48 +0800
committeralk3pInjection <webmaster@raspii.tech>2023-05-05 00:21:48 +0800
commit8afc6de94e5d911ed5f88c45f2c4bfdcb379a650 (patch)
tree34c819537958f520d578f136950c2cb6de8d73d1
parentfb34b76e3f7a1b2bb8cafba9a485b4a5f57c4a2c (diff)
parentd55c299fa9a84b243642c1308b93309b325f39c8 (diff)
Merge tag 'LA.QSSI.13.0.r1-09900-qssi.0' into tachibana
"LA.QSSI.13.0.r1-09900-qssi.0" Change-Id: I9dc95bbb40fc0ba1ede27966f74ac2cb33ef00e2
-rw-r--r--services/surfaceflinger/SurfaceFlinger.cpp76
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) {