From b7251f427b567488e84bedc16e64e7d965c6485c Mon Sep 17 00:00:00 2001 From: Dominik Laskowski Date: Mon, 20 Apr 2020 17:42:59 -0700 Subject: SF: Remove display lookup in Layer classes 1. Remove DisplayDevice in LayerCreationArgs and updateTransformHint. 2. Pass DisplayDevice to dumping functions instead of calling back into SF. Bug: 123715322 Test: Print transform hint in ConsumerBase Change-Id: If41f3506de10f2799b52a73f7a54969b8ef1e960 --- services/surfaceflinger/BufferLayer.cpp | 34 ++++++++++++--------------------- 1 file changed, 12 insertions(+), 22 deletions(-) (limited to 'services/surfaceflinger/BufferLayer.cpp') diff --git a/services/surfaceflinger/BufferLayer.cpp b/services/surfaceflinger/BufferLayer.cpp index 8ecdd95cca..f0b0200bc5 100644 --- a/services/surfaceflinger/BufferLayer.cpp +++ b/services/surfaceflinger/BufferLayer.cpp @@ -319,7 +319,7 @@ bool BufferLayer::onPreComposition(nsecs_t refreshStartTime) { return hasReadyFrame(); } -bool BufferLayer::onPostComposition(sp displayDevice, +bool BufferLayer::onPostComposition(const DisplayDevice* display, const std::shared_ptr& glDoneFence, const std::shared_ptr& presentFence, const CompositorTiming& compositorTiming) { @@ -342,7 +342,7 @@ bool BufferLayer::onPostComposition(sp displayDevice, const int32_t layerId = getSequence(); mFlinger->mTimeStats->setDesiredTime(layerId, mCurrentFrameNumber, desiredPresentTime); - const auto outputLayer = findOutputLayerForDisplay(displayDevice); + const auto outputLayer = findOutputLayerForDisplay(display); if (outputLayer && outputLayer->requiresClientComposition()) { nsecs_t clientCompositionTimestamp = outputLayer->getState().clientCompositionTimestamp; mFlinger->mFrameTracer->traceTimestamp(layerId, getCurrentBufferId(), mCurrentFrameNumber, @@ -359,13 +359,15 @@ bool BufferLayer::onPostComposition(sp displayDevice, mFrameTracker.setFrameReadyTime(desiredPresentTime); } - const auto displayId = displayDevice->getId(); if (presentFence->isValid()) { mFlinger->mTimeStats->setPresentFence(layerId, mCurrentFrameNumber, presentFence); mFlinger->mFrameTracer->traceFence(layerId, getCurrentBufferId(), mCurrentFrameNumber, presentFence, FrameTracer::FrameEvent::PRESENT_FENCE); mFrameTracker.setActualPresentFence(std::shared_ptr(presentFence)); - } else if (displayId && mFlinger->getHwComposer().isConnected(*displayId)) { + } else if (!display) { + // Do nothing. + } else if (const auto displayId = display->getId(); + displayId && mFlinger->getHwComposer().isConnected(*displayId)) { // The HWC doesn't support present fences, so use the refresh // timestamp instead. const nsecs_t actualPresentTime = mFlinger->getHwComposer().getRefreshTimestamp(*displayId); @@ -600,14 +602,8 @@ bool BufferLayer::getOpacityForFormat(uint32_t format) { return true; } -bool BufferLayer::needsFiltering(const sp& displayDevice) const { - // If we are not capturing based on the state of a known display device, - // just return false. - if (displayDevice == nullptr) { - return false; - } - - const auto outputLayer = findOutputLayerForDisplay(displayDevice); +bool BufferLayer::needsFiltering(const DisplayDevice* display) const { + const auto outputLayer = findOutputLayerForDisplay(display); if (outputLayer == nullptr) { return false; } @@ -621,15 +617,9 @@ bool BufferLayer::needsFiltering(const sp& displayDevice) c sourceCrop.getWidth() != displayFrame.getWidth(); } -bool BufferLayer::needsFilteringForScreenshots(const sp& displayDevice, +bool BufferLayer::needsFilteringForScreenshots(const DisplayDevice* display, const ui::Transform& inverseParentTransform) const { - // If we are not capturing based on the state of a known display device, - // just return false. - if (displayDevice == nullptr) { - return false; - } - - const auto outputLayer = findOutputLayerForDisplay(displayDevice); + const auto outputLayer = findOutputLayerForDisplay(display); if (outputLayer == nullptr) { return false; } @@ -637,7 +627,7 @@ bool BufferLayer::needsFilteringForScreenshots(const sp& di // We need filtering if the sourceCrop rectangle size does not match the // viewport rectangle size (not a 1:1 render) const auto& compositionState = outputLayer->getState(); - const ui::Transform& displayTransform = displayDevice->getTransform(); + const ui::Transform& displayTransform = display->getTransform(); const ui::Transform inverseTransform = inverseParentTransform * displayTransform.inverse(); // Undo the transformation of the displayFrame so that we're back into // layer-stack space. @@ -843,7 +833,7 @@ void BufferLayer::updateCloneBufferInfo() { mDrawingState.inputInfo = tmpInputInfo; } -void BufferLayer::setTransformHint(ui::Transform::RotationFlags displayTransformHint) const { +void BufferLayer::setTransformHint(ui::Transform::RotationFlags displayTransformHint) { mTransformHint = getFixedTransformHint(); if (mTransformHint == ui::Transform::ROT_INVALID) { mTransformHint = displayTransformHint; -- cgit v1.2.3-59-g8ed1b