Reduce setInputWindows call (2/2)
Assign the parent layer when creating a new surface and reparent it if only if it changed to another display. Test: enable setInputWindow log, connect a mouse device and move. Bug: 133780957 Change-Id: Ia244b0af483b48a9c667e18566440076ce29c223
This commit is contained in:
@@ -131,8 +131,9 @@ void SpriteController::doUpdateSprites() {
|
||||
update.state.surfaceHeight = update.state.icon.height();
|
||||
update.state.surfaceDrawn = false;
|
||||
update.state.surfaceVisible = false;
|
||||
update.state.surfaceControl = obtainSurface(
|
||||
update.state.surfaceWidth, update.state.surfaceHeight);
|
||||
update.state.surfaceControl =
|
||||
obtainSurface(update.state.surfaceWidth, update.state.surfaceHeight,
|
||||
update.state.displayId);
|
||||
if (update.state.surfaceControl != NULL) {
|
||||
update.surfaceChanged = surfaceChanged = true;
|
||||
}
|
||||
@@ -168,8 +169,8 @@ void SpriteController::doUpdateSprites() {
|
||||
}
|
||||
}
|
||||
|
||||
// If surface is a new one, we have to set right layer stack.
|
||||
if (update.surfaceChanged || update.state.dirty & DIRTY_DISPLAY_ID) {
|
||||
// If surface has changed to a new display, we have to reparent it.
|
||||
if (update.state.dirty & DIRTY_DISPLAY_ID) {
|
||||
t.reparent(update.state.surfaceControl, mParentSurfaceProvider(update.state.displayId));
|
||||
needApplyTransaction = true;
|
||||
}
|
||||
@@ -330,21 +331,28 @@ void SpriteController::ensureSurfaceComposerClient() {
|
||||
}
|
||||
}
|
||||
|
||||
sp<SurfaceControl> SpriteController::obtainSurface(int32_t width, int32_t height) {
|
||||
sp<SurfaceControl> SpriteController::obtainSurface(int32_t width, int32_t height,
|
||||
int32_t displayId) {
|
||||
ensureSurfaceComposerClient();
|
||||
|
||||
sp<SurfaceControl> surfaceControl = mSurfaceComposerClient->createSurface(
|
||||
String8("Sprite"), width, height, PIXEL_FORMAT_RGBA_8888,
|
||||
ISurfaceComposerClient::eHidden |
|
||||
ISurfaceComposerClient::eCursorWindow);
|
||||
if (surfaceControl == NULL || !surfaceControl->isValid()) {
|
||||
const sp<SurfaceControl> parent = mParentSurfaceProvider(displayId);
|
||||
if (parent == nullptr) {
|
||||
ALOGE("Failed to get the parent surface for pointers on display %d", displayId);
|
||||
}
|
||||
|
||||
const sp<SurfaceControl> surfaceControl =
|
||||
mSurfaceComposerClient->createSurface(String8("Sprite"), width, height,
|
||||
PIXEL_FORMAT_RGBA_8888,
|
||||
ISurfaceComposerClient::eHidden |
|
||||
ISurfaceComposerClient::eCursorWindow,
|
||||
parent ? parent->getHandle() : nullptr);
|
||||
if (surfaceControl == nullptr || !surfaceControl->isValid()) {
|
||||
ALOGE("Error creating sprite surface.");
|
||||
return NULL;
|
||||
return nullptr;
|
||||
}
|
||||
return surfaceControl;
|
||||
}
|
||||
|
||||
|
||||
// --- SpriteController::SpriteImpl ---
|
||||
|
||||
SpriteController::SpriteImpl::SpriteImpl(const sp<SpriteController> controller) :
|
||||
|
||||
@@ -265,7 +265,7 @@ private:
|
||||
void doDisposeSurfaces();
|
||||
|
||||
void ensureSurfaceComposerClient();
|
||||
sp<SurfaceControl> obtainSurface(int32_t width, int32_t height);
|
||||
sp<SurfaceControl> obtainSurface(int32_t width, int32_t height, int32_t displayId);
|
||||
};
|
||||
|
||||
} // namespace android
|
||||
|
||||
Reference in New Issue
Block a user