Loading services/surfaceflinger/BufferLayer.cpp +12 −22 Original line number Diff line number Diff line Loading @@ -319,7 +319,7 @@ bool BufferLayer::onPreComposition(nsecs_t refreshStartTime) { return hasReadyFrame(); } bool BufferLayer::onPostComposition(sp<const DisplayDevice> displayDevice, bool BufferLayer::onPostComposition(const DisplayDevice* display, const std::shared_ptr<FenceTime>& glDoneFence, const std::shared_ptr<FenceTime>& presentFence, const CompositorTiming& compositorTiming) { Loading @@ -342,7 +342,7 @@ bool BufferLayer::onPostComposition(sp<const DisplayDevice> 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, Loading @@ -359,13 +359,15 @@ bool BufferLayer::onPostComposition(sp<const DisplayDevice> 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<FenceTime>(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); Loading Loading @@ -600,14 +602,8 @@ bool BufferLayer::getOpacityForFormat(uint32_t format) { return true; } bool BufferLayer::needsFiltering(const sp<const DisplayDevice>& 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; } Loading @@ -621,15 +617,9 @@ bool BufferLayer::needsFiltering(const sp<const DisplayDevice>& displayDevice) c sourceCrop.getWidth() != displayFrame.getWidth(); } bool BufferLayer::needsFilteringForScreenshots(const sp<const DisplayDevice>& 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; } Loading @@ -637,7 +627,7 @@ bool BufferLayer::needsFilteringForScreenshots(const sp<const DisplayDevice>& 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. Loading Loading @@ -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; Loading services/surfaceflinger/BufferLayer.h +7 −10 Original line number Diff line number Diff line Loading @@ -79,10 +79,9 @@ public: bool isHdrY410() const override; bool onPostComposition(sp<const DisplayDevice> displayDevice, const std::shared_ptr<FenceTime>& glDoneFence, bool onPostComposition(const DisplayDevice*, const std::shared_ptr<FenceTime>& glDoneFence, const std::shared_ptr<FenceTime>& presentFence, const CompositorTiming& compositorTiming) override; const CompositorTiming&) override; // latchBuffer - called each time the screen is redrawn and returns whether // the visible regions need to be recomputed (this is a fairly heavy Loading Loading @@ -119,10 +118,6 @@ public: ui::Transform::RotationFlags getTransformHint() const override { return mTransformHint; } void setTransformHint(ui::Transform::RotationFlags displayTransformHint) const override; // ----------------------------------------------------------------------- // ----------------------------------------------------------------------- // Functions that must be implemented by derived classes // ----------------------------------------------------------------------- Loading Loading @@ -209,14 +204,16 @@ protected: virtual uint64_t getHeadFrameNumber(nsecs_t expectedPresentTime) const; void setTransformHint(ui::Transform::RotationFlags displayTransformHint) override; // Transform hint provided to the producer. This must be accessed holding /// the mStateLock. mutable ui::Transform::RotationFlags mTransformHint = ui::Transform::ROT_0; ui::Transform::RotationFlags mTransformHint = ui::Transform::ROT_0; private: // Returns true if this layer requires filtering bool needsFiltering(const sp<const DisplayDevice>& displayDevice) const override; bool needsFilteringForScreenshots(const sp<const DisplayDevice>& displayDevice, bool needsFiltering(const DisplayDevice*) const override; bool needsFilteringForScreenshots(const DisplayDevice*, const ui::Transform& inverseParentTransform) const override; // BufferStateLayers can return Rect::INVALID_RECT if the layer does not have a display frame Loading services/surfaceflinger/BufferQueueLayer.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -58,7 +58,7 @@ void BufferQueueLayer::onLayerDisplayed(const sp<Fence>& releaseFence) { } } void BufferQueueLayer::setTransformHint(ui::Transform::RotationFlags displayTransformHint) const { void BufferQueueLayer::setTransformHint(ui::Transform::RotationFlags displayTransformHint) { BufferLayer::setTransformHint(displayTransformHint); mConsumer->setTransformHint(mTransformHint); } Loading services/surfaceflinger/BufferQueueLayer.h +1 −2 Original line number Diff line number Diff line Loading @@ -43,8 +43,6 @@ public: void onLayerDisplayed(const sp<Fence>& releaseFence) override; void setTransformHint(ui::Transform::RotationFlags displayTransformHint) const override; std::vector<OccupancyTracker::Segment> getOccupancyHistory(bool forceFlush) override; // If a buffer was replaced this frame, release the former buffer Loading Loading @@ -72,6 +70,7 @@ private: bool getSidebandStreamChanged() const override; bool latchSidebandStream(bool& recomputeVisibleRegions) override; void setTransformHint(ui::Transform::RotationFlags displayTransformHint) override; bool hasFrameUpdate() const override; Loading services/surfaceflinger/DisplayDevice.h +4 −0 Original line number Diff line number Diff line Loading @@ -93,6 +93,10 @@ public: static ui::Transform::RotationFlags getPrimaryDisplayRotationFlags(); ui::Transform::RotationFlags getTransformHint() const { return static_cast<ui::Transform::RotationFlags>(getTransform().getOrientation()); } const ui::Transform& getTransform() const; const Rect& getViewport() const; const Rect& getFrame() const; Loading Loading
services/surfaceflinger/BufferLayer.cpp +12 −22 Original line number Diff line number Diff line Loading @@ -319,7 +319,7 @@ bool BufferLayer::onPreComposition(nsecs_t refreshStartTime) { return hasReadyFrame(); } bool BufferLayer::onPostComposition(sp<const DisplayDevice> displayDevice, bool BufferLayer::onPostComposition(const DisplayDevice* display, const std::shared_ptr<FenceTime>& glDoneFence, const std::shared_ptr<FenceTime>& presentFence, const CompositorTiming& compositorTiming) { Loading @@ -342,7 +342,7 @@ bool BufferLayer::onPostComposition(sp<const DisplayDevice> 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, Loading @@ -359,13 +359,15 @@ bool BufferLayer::onPostComposition(sp<const DisplayDevice> 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<FenceTime>(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); Loading Loading @@ -600,14 +602,8 @@ bool BufferLayer::getOpacityForFormat(uint32_t format) { return true; } bool BufferLayer::needsFiltering(const sp<const DisplayDevice>& 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; } Loading @@ -621,15 +617,9 @@ bool BufferLayer::needsFiltering(const sp<const DisplayDevice>& displayDevice) c sourceCrop.getWidth() != displayFrame.getWidth(); } bool BufferLayer::needsFilteringForScreenshots(const sp<const DisplayDevice>& 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; } Loading @@ -637,7 +627,7 @@ bool BufferLayer::needsFilteringForScreenshots(const sp<const DisplayDevice>& 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. Loading Loading @@ -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; Loading
services/surfaceflinger/BufferLayer.h +7 −10 Original line number Diff line number Diff line Loading @@ -79,10 +79,9 @@ public: bool isHdrY410() const override; bool onPostComposition(sp<const DisplayDevice> displayDevice, const std::shared_ptr<FenceTime>& glDoneFence, bool onPostComposition(const DisplayDevice*, const std::shared_ptr<FenceTime>& glDoneFence, const std::shared_ptr<FenceTime>& presentFence, const CompositorTiming& compositorTiming) override; const CompositorTiming&) override; // latchBuffer - called each time the screen is redrawn and returns whether // the visible regions need to be recomputed (this is a fairly heavy Loading Loading @@ -119,10 +118,6 @@ public: ui::Transform::RotationFlags getTransformHint() const override { return mTransformHint; } void setTransformHint(ui::Transform::RotationFlags displayTransformHint) const override; // ----------------------------------------------------------------------- // ----------------------------------------------------------------------- // Functions that must be implemented by derived classes // ----------------------------------------------------------------------- Loading Loading @@ -209,14 +204,16 @@ protected: virtual uint64_t getHeadFrameNumber(nsecs_t expectedPresentTime) const; void setTransformHint(ui::Transform::RotationFlags displayTransformHint) override; // Transform hint provided to the producer. This must be accessed holding /// the mStateLock. mutable ui::Transform::RotationFlags mTransformHint = ui::Transform::ROT_0; ui::Transform::RotationFlags mTransformHint = ui::Transform::ROT_0; private: // Returns true if this layer requires filtering bool needsFiltering(const sp<const DisplayDevice>& displayDevice) const override; bool needsFilteringForScreenshots(const sp<const DisplayDevice>& displayDevice, bool needsFiltering(const DisplayDevice*) const override; bool needsFilteringForScreenshots(const DisplayDevice*, const ui::Transform& inverseParentTransform) const override; // BufferStateLayers can return Rect::INVALID_RECT if the layer does not have a display frame Loading
services/surfaceflinger/BufferQueueLayer.cpp +1 −1 Original line number Diff line number Diff line Loading @@ -58,7 +58,7 @@ void BufferQueueLayer::onLayerDisplayed(const sp<Fence>& releaseFence) { } } void BufferQueueLayer::setTransformHint(ui::Transform::RotationFlags displayTransformHint) const { void BufferQueueLayer::setTransformHint(ui::Transform::RotationFlags displayTransformHint) { BufferLayer::setTransformHint(displayTransformHint); mConsumer->setTransformHint(mTransformHint); } Loading
services/surfaceflinger/BufferQueueLayer.h +1 −2 Original line number Diff line number Diff line Loading @@ -43,8 +43,6 @@ public: void onLayerDisplayed(const sp<Fence>& releaseFence) override; void setTransformHint(ui::Transform::RotationFlags displayTransformHint) const override; std::vector<OccupancyTracker::Segment> getOccupancyHistory(bool forceFlush) override; // If a buffer was replaced this frame, release the former buffer Loading Loading @@ -72,6 +70,7 @@ private: bool getSidebandStreamChanged() const override; bool latchSidebandStream(bool& recomputeVisibleRegions) override; void setTransformHint(ui::Transform::RotationFlags displayTransformHint) override; bool hasFrameUpdate() const override; Loading
services/surfaceflinger/DisplayDevice.h +4 −0 Original line number Diff line number Diff line Loading @@ -93,6 +93,10 @@ public: static ui::Transform::RotationFlags getPrimaryDisplayRotationFlags(); ui::Transform::RotationFlags getTransformHint() const { return static_cast<ui::Transform::RotationFlags>(getTransform().getOrientation()); } const ui::Transform& getTransform() const; const Rect& getViewport() const; const Rect& getFrame() const; Loading