Don't run large virtual displays through HWC
This change watches for a MAX_VIRTUAL_DISPLAY_DIMENSION value, which will be set (if necessary) in BoardConfig.mk. If the value is set, any virtual displays that have a width or a height greater than that dimension will bypass the hardware composer HAL and be handled only by SurfaceFlinger. Bug: 17701816 Change-Id: Ia6ca44dfd6a7a9bc0f054493d3f13006bc32fa14
This commit is contained in:
parent
70ec294153
commit
1f3efb11ff
@ -83,6 +83,12 @@ else
|
|||||||
LOCAL_CFLAGS += -DPRESENT_TIME_OFFSET_FROM_VSYNC_NS=0
|
LOCAL_CFLAGS += -DPRESENT_TIME_OFFSET_FROM_VSYNC_NS=0
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifneq ($(MAX_VIRTUAL_DISPLAY_DIMENSION),)
|
||||||
|
LOCAL_CFLAGS += -DMAX_VIRTUAL_DISPLAY_DIMENSION=$(MAX_VIRTUAL_DISPLAY_DIMENSION)
|
||||||
|
else
|
||||||
|
LOCAL_CFLAGS += -DMAX_VIRTUAL_DISPLAY_DIMENSION=0
|
||||||
|
endif
|
||||||
|
|
||||||
LOCAL_CFLAGS += -fvisibility=hidden -Werror=format
|
LOCAL_CFLAGS += -fvisibility=hidden -Werror=format
|
||||||
LOCAL_CFLAGS += -std=c++11
|
LOCAL_CFLAGS += -std=c++11
|
||||||
|
|
||||||
|
@ -1328,7 +1328,22 @@ void SurfaceFlinger::handleTransactionLocked(uint32_t transactionFlags)
|
|||||||
// etc.) but no internal state (i.e. a DisplayDevice).
|
// etc.) but no internal state (i.e. a DisplayDevice).
|
||||||
if (state.surface != NULL) {
|
if (state.surface != NULL) {
|
||||||
|
|
||||||
hwcDisplayId = allocateHwcDisplayId(state.type);
|
int width = 0;
|
||||||
|
int status = state.surface->query(
|
||||||
|
NATIVE_WINDOW_WIDTH, &width);
|
||||||
|
ALOGE_IF(status != NO_ERROR,
|
||||||
|
"Unable to query width (%d)", status);
|
||||||
|
int height = 0;
|
||||||
|
status = state.surface->query(
|
||||||
|
NATIVE_WINDOW_HEIGHT, &height);
|
||||||
|
ALOGE_IF(status != NO_ERROR,
|
||||||
|
"Unable to query height (%d)", status);
|
||||||
|
if (MAX_VIRTUAL_DISPLAY_DIMENSION == 0 ||
|
||||||
|
(width <= MAX_VIRTUAL_DISPLAY_DIMENSION &&
|
||||||
|
height <= MAX_VIRTUAL_DISPLAY_DIMENSION)) {
|
||||||
|
hwcDisplayId = allocateHwcDisplayId(state.type);
|
||||||
|
}
|
||||||
|
|
||||||
sp<VirtualDisplaySurface> vds = new VirtualDisplaySurface(
|
sp<VirtualDisplaySurface> vds = new VirtualDisplaySurface(
|
||||||
*mHwc, hwcDisplayId, state.surface,
|
*mHwc, hwcDisplayId, state.surface,
|
||||||
bqProducer, bqConsumer, state.displayName);
|
bqProducer, bqConsumer, state.displayName);
|
||||||
|
Loading…
Reference in New Issue
Block a user