Loading libs/gui/SurfaceComposerClient.cpp +0 −3 Original line number Diff line number Diff line Loading @@ -240,9 +240,6 @@ SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setSize( s->w = w; s->h = h; // Resizing a surface makes the transaction synchronous. mForceSynchronous = true; return *this; } Loading services/surfaceflinger/BufferLayer.cpp +10 −67 Original line number Diff line number Diff line Loading @@ -138,8 +138,6 @@ void BufferLayer::onDraw(const RenderArea& renderArea, const Region& clip, bool useIdentityTransform) { ATRACE_CALL(); CompositionInfo& compositionInfo = getBE().compositionInfo; if (CC_UNLIKELY(mActiveBuffer == 0)) { // the texture has not been created yet, this Layer has // in fact never been drawn into. This happens frequently with Loading Loading @@ -221,7 +219,6 @@ void BufferLayer::onDraw(const RenderArea& renderArea, const Region& clip, mTexture.setDimensions(mActiveBuffer->getWidth(), mActiveBuffer->getHeight()); mTexture.setFiltering(useFiltering); mTexture.setMatrix(textureMatrix); compositionInfo.re.texture = mTexture; engine.setupLayerTexturing(mTexture); } else { Loading @@ -231,23 +228,6 @@ void BufferLayer::onDraw(const RenderArea& renderArea, const Region& clip, engine.disableTexturing(); } void BufferLayer::drawNow(const RenderArea& renderArea, bool useIdentityTransform) { CompositionInfo& compositionInfo = getBE().compositionInfo; auto& engine(mFlinger->getRenderEngine()); draw(renderArea, useIdentityTransform); engine.setupLayerTexturing(compositionInfo.re.texture); engine.setupLayerBlending(compositionInfo.re.preMultipliedAlpha, compositionInfo.re.opaque, false, compositionInfo.re.color); engine.setSourceDataSpace(compositionInfo.hwc.dataspace); engine.setSourceY410BT2020(compositionInfo.re.Y410BT2020); engine.drawMesh(getBE().getMesh()); engine.disableBlending(); engine.disableTexturing(); engine.setSourceY410BT2020(false); } bool BufferLayer::isHdrY410() const { // pixel format is HDR Y410 masquerading as RGBA_1010102 return (mCurrentDataSpace == ui::Dataspace::BT2020_ITU_PQ && Loading @@ -262,43 +242,17 @@ void BufferLayer::setPerFrameData(const sp<const DisplayDevice>& display) { const auto& viewport = display->getViewport(); Region visible = tr.transform(visibleRegion.intersect(viewport)); const auto displayId = display->getId(); if (!hasHwcLayer(displayId)) { ALOGE("[%s] failed to setPerFrameData: no HWC layer found (%d)", mName.string(), displayId); return; } auto& hwcInfo = getBE().mHwcLayers[displayId]; auto& hwcLayer = hwcInfo.layer; auto error = hwcLayer->setVisibleRegion(visible); if (error != HWC2::Error::None) { ALOGE("[%s] Failed to set visible region: %s (%d)", mName.string(), to_string(error).c_str(), static_cast<int32_t>(error)); visible.dump(LOG_TAG); } getBE().compositionInfo.hwc.visibleRegion = visible; error = hwcLayer->setSurfaceDamage(surfaceDamageRegion); if (error != HWC2::Error::None) { ALOGE("[%s] Failed to set surface damage: %s (%d)", mName.string(), to_string(error).c_str(), static_cast<int32_t>(error)); surfaceDamageRegion.dump(LOG_TAG); } getBE().compositionInfo.hwc.surfaceDamage = surfaceDamageRegion; // Sideband layers if (getBE().compositionInfo.hwc.sidebandStream.get()) { setCompositionType(displayId, HWC2::Composition::Sideband); ALOGV("[%s] Requesting Sideband composition", mName.string()); error = hwcLayer->setSidebandStream(getBE().compositionInfo.hwc.sidebandStream->handle()); if (error != HWC2::Error::None) { ALOGE("[%s] Failed to set sideband stream %p: %s (%d)", mName.string(), getBE().compositionInfo.hwc.sidebandStream->handle(), to_string(error).c_str(), static_cast<int32_t>(error)); } getBE().compositionInfo.compositionType = HWC2::Composition::Sideband; return; } if (getBE().compositionInfo.hwc.skipGeometry) { // Device or Cursor layers if (mPotentialCursor) { ALOGV("[%s] Requesting Cursor composition", mName.string()); Loading @@ -307,20 +261,8 @@ void BufferLayer::setPerFrameData(const sp<const DisplayDevice>& display) { ALOGV("[%s] Requesting Device composition", mName.string()); setCompositionType(displayId, HWC2::Composition::Device); } ALOGV("setPerFrameData: dataspace = %d", mCurrentDataSpace); error = hwcLayer->setDataspace(mCurrentDataSpace); if (error != HWC2::Error::None) { ALOGE("[%s] Failed to set dataspace %d: %s (%d)", mName.string(), mCurrentDataSpace, to_string(error).c_str(), static_cast<int32_t>(error)); } const HdrMetadata& metadata = getDrawingHdrMetadata(); error = hwcLayer->setPerFrameMetadata(display->getSupportedPerFrameMetadata(), metadata); if (error != HWC2::Error::None && error != HWC2::Error::Unsupported) { ALOGE("[%s] Failed to set hdrMetadata: %s (%d)", mName.string(), to_string(error).c_str(), static_cast<int32_t>(error)); } getBE().compositionInfo.hwc.dataspace = mCurrentDataSpace; getBE().compositionInfo.hwc.hdrMetadata = getDrawingHdrMetadata(); getBE().compositionInfo.hwc.supportedPerFrameMetadata = display->getSupportedPerFrameMetadata(); Loading @@ -340,6 +282,7 @@ bool BufferLayer::onPreComposition(nsecs_t refreshStartTime) { bool BufferLayer::onPostComposition(const std::shared_ptr<FenceTime>& glDoneFence, const std::shared_ptr<FenceTime>& presentFence, const CompositorTiming& compositorTiming) { // mFrameLatencyNeeded is true when a new frame was latched for the // composition. if (!mFrameLatencyNeeded) return false; Loading services/surfaceflinger/BufferLayer.h +0 −1 Original line number Diff line number Diff line Loading @@ -77,7 +77,6 @@ public: // onDraw - draws the surface. void onDraw(const RenderArea& renderArea, const Region& clip, bool useIdentityTransform) override; void drawNow(const RenderArea& renderArea, bool useIdentityTransform); bool isHdrY410() const override; Loading services/surfaceflinger/BufferQueueLayer.cpp +1 −15 Original line number Diff line number Diff line Loading @@ -337,22 +337,8 @@ status_t BufferQueueLayer::updateFrameNumber(nsecs_t latchTime) { return NO_ERROR; } void BufferQueueLayer::setHwcLayerBuffer(const sp<const DisplayDevice>& display) { const auto displayId = display->getId(); auto& hwcInfo = getBE().mHwcLayers[displayId]; auto& hwcLayer = hwcInfo.layer; uint32_t hwcSlot = 0; sp<GraphicBuffer> hwcBuffer; hwcInfo.bufferCache.getHwcBuffer(mActiveBufferSlot, mActiveBuffer, &hwcSlot, &hwcBuffer); void BufferQueueLayer::setHwcLayerBuffer(const sp<const DisplayDevice>&) { auto acquireFence = mConsumer->getCurrentFence(); auto error = hwcLayer->setBuffer(hwcSlot, hwcBuffer, acquireFence); if (error != HWC2::Error::None) { ALOGE("[%s] Failed to set buffer %p: %s (%d)", mName.string(), getBE().compositionInfo.mBuffer->handle, to_string(error).c_str(), static_cast<int32_t>(error)); } getBE().compositionInfo.mBufferSlot = mActiveBufferSlot; getBE().compositionInfo.mBuffer = mActiveBuffer; getBE().compositionInfo.hwc.fence = acquireFence; Loading services/surfaceflinger/ColorLayer.cpp +9 −49 Original line number Diff line number Diff line Loading @@ -45,26 +45,16 @@ void ColorLayer::onDraw(const RenderArea& renderArea, const Region& /* clip */, bool useIdentityTransform) { half4 color = getColor(); if (color.a > 0) { computeGeometry(renderArea, getBE().mMesh, useIdentityTransform); getBE().compositionInfo.re.preMultipliedAlpha = getPremultipledAlpha(); getBE().compositionInfo.re.opaque = false; getBE().compositionInfo.re.disableTexture = true; getBE().compositionInfo.re.color = color; } } void ColorLayer::drawNow(const RenderArea& renderArea, bool useIdentityTransform) { CompositionInfo& compositionInfo = getBE().compositionInfo; Mesh mesh(Mesh::TRIANGLE_FAN, 4, 2); computeGeometry(renderArea, mesh, useIdentityTransform); auto& engine(mFlinger->getRenderEngine()); draw(renderArea, useIdentityTransform); engine.setupLayerBlending(compositionInfo.re.preMultipliedAlpha, compositionInfo.re.opaque, compositionInfo.re.disableTexture, compositionInfo.re.color); engine.setSourceDataSpace(compositionInfo.hwc.dataspace); engine.drawMesh(getBE().getMesh()); engine.setupLayerBlending(getPremultipledAlpha(), false /* opaque */, true /* disableTexture */, color); engine.setSourceDataSpace(mCurrentDataSpace); engine.drawMesh(mesh); engine.disableBlending(); } } bool ColorLayer::isVisible() const { return !isHiddenByPolicy() && getAlpha() > 0.0f; Loading @@ -75,48 +65,18 @@ void ColorLayer::setPerFrameData(const sp<const DisplayDevice>& display) { const auto& viewport = display->getViewport(); Region visible = tr.transform(visibleRegion.intersect(viewport)); const auto displayId = display->getId(); if (!hasHwcLayer(displayId)) { ALOGE("[%s] failed to setPerFrameData: no HWC layer found (%d)", mName.string(), displayId); return; } auto& hwcInfo = getBE().mHwcLayers[displayId]; auto& hwcLayer = hwcInfo.layer; auto error = hwcLayer->setVisibleRegion(visible); if (error != HWC2::Error::None) { ALOGE("[%s] Failed to set visible region: %s (%d)", mName.string(), to_string(error).c_str(), static_cast<int32_t>(error)); visible.dump(LOG_TAG); } getBE().compositionInfo.hwc.visibleRegion = visible; getBE().compositionInfo.hwc.dataspace = mCurrentDataSpace; setCompositionType(displayId, HWC2::Composition::SolidColor); error = hwcLayer->setDataspace(mCurrentDataSpace); if (error != HWC2::Error::None) { ALOGE("[%s] Failed to set dataspace %d: %s (%d)", mName.string(), mCurrentDataSpace, to_string(error).c_str(), static_cast<int32_t>(error)); } getBE().compositionInfo.hwc.dataspace = mCurrentDataSpace; half4 color = getColor(); error = hwcLayer->setColor({static_cast<uint8_t>(std::round(255.0f * color.r)), static_cast<uint8_t>(std::round(255.0f * color.g)), static_cast<uint8_t>(std::round(255.0f * color.b)), 255}); if (error != HWC2::Error::None) { ALOGE("[%s] Failed to set color: %s (%d)", mName.string(), to_string(error).c_str(), static_cast<int32_t>(error)); } getBE().compositionInfo.hwc.color = { static_cast<uint8_t>(std::round(255.0f * color.r)), static_cast<uint8_t>(std::round(255.0f * color.g)), static_cast<uint8_t>(std::round(255.0f * color.b)), 255 }; // Clear out the transform, because it doesn't make sense absent a source buffer error = hwcLayer->setTransform(HWC2::Transform::None); if (error != HWC2::Error::None) { ALOGE("[%s] Failed to clear transform: %s (%d)", mName.string(), to_string(error).c_str(), static_cast<int32_t>(error)); } getBE().compositionInfo.hwc.transform = HWC2::Transform::None; } Loading Loading
libs/gui/SurfaceComposerClient.cpp +0 −3 Original line number Diff line number Diff line Loading @@ -240,9 +240,6 @@ SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setSize( s->w = w; s->h = h; // Resizing a surface makes the transaction synchronous. mForceSynchronous = true; return *this; } Loading
services/surfaceflinger/BufferLayer.cpp +10 −67 Original line number Diff line number Diff line Loading @@ -138,8 +138,6 @@ void BufferLayer::onDraw(const RenderArea& renderArea, const Region& clip, bool useIdentityTransform) { ATRACE_CALL(); CompositionInfo& compositionInfo = getBE().compositionInfo; if (CC_UNLIKELY(mActiveBuffer == 0)) { // the texture has not been created yet, this Layer has // in fact never been drawn into. This happens frequently with Loading Loading @@ -221,7 +219,6 @@ void BufferLayer::onDraw(const RenderArea& renderArea, const Region& clip, mTexture.setDimensions(mActiveBuffer->getWidth(), mActiveBuffer->getHeight()); mTexture.setFiltering(useFiltering); mTexture.setMatrix(textureMatrix); compositionInfo.re.texture = mTexture; engine.setupLayerTexturing(mTexture); } else { Loading @@ -231,23 +228,6 @@ void BufferLayer::onDraw(const RenderArea& renderArea, const Region& clip, engine.disableTexturing(); } void BufferLayer::drawNow(const RenderArea& renderArea, bool useIdentityTransform) { CompositionInfo& compositionInfo = getBE().compositionInfo; auto& engine(mFlinger->getRenderEngine()); draw(renderArea, useIdentityTransform); engine.setupLayerTexturing(compositionInfo.re.texture); engine.setupLayerBlending(compositionInfo.re.preMultipliedAlpha, compositionInfo.re.opaque, false, compositionInfo.re.color); engine.setSourceDataSpace(compositionInfo.hwc.dataspace); engine.setSourceY410BT2020(compositionInfo.re.Y410BT2020); engine.drawMesh(getBE().getMesh()); engine.disableBlending(); engine.disableTexturing(); engine.setSourceY410BT2020(false); } bool BufferLayer::isHdrY410() const { // pixel format is HDR Y410 masquerading as RGBA_1010102 return (mCurrentDataSpace == ui::Dataspace::BT2020_ITU_PQ && Loading @@ -262,43 +242,17 @@ void BufferLayer::setPerFrameData(const sp<const DisplayDevice>& display) { const auto& viewport = display->getViewport(); Region visible = tr.transform(visibleRegion.intersect(viewport)); const auto displayId = display->getId(); if (!hasHwcLayer(displayId)) { ALOGE("[%s] failed to setPerFrameData: no HWC layer found (%d)", mName.string(), displayId); return; } auto& hwcInfo = getBE().mHwcLayers[displayId]; auto& hwcLayer = hwcInfo.layer; auto error = hwcLayer->setVisibleRegion(visible); if (error != HWC2::Error::None) { ALOGE("[%s] Failed to set visible region: %s (%d)", mName.string(), to_string(error).c_str(), static_cast<int32_t>(error)); visible.dump(LOG_TAG); } getBE().compositionInfo.hwc.visibleRegion = visible; error = hwcLayer->setSurfaceDamage(surfaceDamageRegion); if (error != HWC2::Error::None) { ALOGE("[%s] Failed to set surface damage: %s (%d)", mName.string(), to_string(error).c_str(), static_cast<int32_t>(error)); surfaceDamageRegion.dump(LOG_TAG); } getBE().compositionInfo.hwc.surfaceDamage = surfaceDamageRegion; // Sideband layers if (getBE().compositionInfo.hwc.sidebandStream.get()) { setCompositionType(displayId, HWC2::Composition::Sideband); ALOGV("[%s] Requesting Sideband composition", mName.string()); error = hwcLayer->setSidebandStream(getBE().compositionInfo.hwc.sidebandStream->handle()); if (error != HWC2::Error::None) { ALOGE("[%s] Failed to set sideband stream %p: %s (%d)", mName.string(), getBE().compositionInfo.hwc.sidebandStream->handle(), to_string(error).c_str(), static_cast<int32_t>(error)); } getBE().compositionInfo.compositionType = HWC2::Composition::Sideband; return; } if (getBE().compositionInfo.hwc.skipGeometry) { // Device or Cursor layers if (mPotentialCursor) { ALOGV("[%s] Requesting Cursor composition", mName.string()); Loading @@ -307,20 +261,8 @@ void BufferLayer::setPerFrameData(const sp<const DisplayDevice>& display) { ALOGV("[%s] Requesting Device composition", mName.string()); setCompositionType(displayId, HWC2::Composition::Device); } ALOGV("setPerFrameData: dataspace = %d", mCurrentDataSpace); error = hwcLayer->setDataspace(mCurrentDataSpace); if (error != HWC2::Error::None) { ALOGE("[%s] Failed to set dataspace %d: %s (%d)", mName.string(), mCurrentDataSpace, to_string(error).c_str(), static_cast<int32_t>(error)); } const HdrMetadata& metadata = getDrawingHdrMetadata(); error = hwcLayer->setPerFrameMetadata(display->getSupportedPerFrameMetadata(), metadata); if (error != HWC2::Error::None && error != HWC2::Error::Unsupported) { ALOGE("[%s] Failed to set hdrMetadata: %s (%d)", mName.string(), to_string(error).c_str(), static_cast<int32_t>(error)); } getBE().compositionInfo.hwc.dataspace = mCurrentDataSpace; getBE().compositionInfo.hwc.hdrMetadata = getDrawingHdrMetadata(); getBE().compositionInfo.hwc.supportedPerFrameMetadata = display->getSupportedPerFrameMetadata(); Loading @@ -340,6 +282,7 @@ bool BufferLayer::onPreComposition(nsecs_t refreshStartTime) { bool BufferLayer::onPostComposition(const std::shared_ptr<FenceTime>& glDoneFence, const std::shared_ptr<FenceTime>& presentFence, const CompositorTiming& compositorTiming) { // mFrameLatencyNeeded is true when a new frame was latched for the // composition. if (!mFrameLatencyNeeded) return false; Loading
services/surfaceflinger/BufferLayer.h +0 −1 Original line number Diff line number Diff line Loading @@ -77,7 +77,6 @@ public: // onDraw - draws the surface. void onDraw(const RenderArea& renderArea, const Region& clip, bool useIdentityTransform) override; void drawNow(const RenderArea& renderArea, bool useIdentityTransform); bool isHdrY410() const override; Loading
services/surfaceflinger/BufferQueueLayer.cpp +1 −15 Original line number Diff line number Diff line Loading @@ -337,22 +337,8 @@ status_t BufferQueueLayer::updateFrameNumber(nsecs_t latchTime) { return NO_ERROR; } void BufferQueueLayer::setHwcLayerBuffer(const sp<const DisplayDevice>& display) { const auto displayId = display->getId(); auto& hwcInfo = getBE().mHwcLayers[displayId]; auto& hwcLayer = hwcInfo.layer; uint32_t hwcSlot = 0; sp<GraphicBuffer> hwcBuffer; hwcInfo.bufferCache.getHwcBuffer(mActiveBufferSlot, mActiveBuffer, &hwcSlot, &hwcBuffer); void BufferQueueLayer::setHwcLayerBuffer(const sp<const DisplayDevice>&) { auto acquireFence = mConsumer->getCurrentFence(); auto error = hwcLayer->setBuffer(hwcSlot, hwcBuffer, acquireFence); if (error != HWC2::Error::None) { ALOGE("[%s] Failed to set buffer %p: %s (%d)", mName.string(), getBE().compositionInfo.mBuffer->handle, to_string(error).c_str(), static_cast<int32_t>(error)); } getBE().compositionInfo.mBufferSlot = mActiveBufferSlot; getBE().compositionInfo.mBuffer = mActiveBuffer; getBE().compositionInfo.hwc.fence = acquireFence; Loading
services/surfaceflinger/ColorLayer.cpp +9 −49 Original line number Diff line number Diff line Loading @@ -45,26 +45,16 @@ void ColorLayer::onDraw(const RenderArea& renderArea, const Region& /* clip */, bool useIdentityTransform) { half4 color = getColor(); if (color.a > 0) { computeGeometry(renderArea, getBE().mMesh, useIdentityTransform); getBE().compositionInfo.re.preMultipliedAlpha = getPremultipledAlpha(); getBE().compositionInfo.re.opaque = false; getBE().compositionInfo.re.disableTexture = true; getBE().compositionInfo.re.color = color; } } void ColorLayer::drawNow(const RenderArea& renderArea, bool useIdentityTransform) { CompositionInfo& compositionInfo = getBE().compositionInfo; Mesh mesh(Mesh::TRIANGLE_FAN, 4, 2); computeGeometry(renderArea, mesh, useIdentityTransform); auto& engine(mFlinger->getRenderEngine()); draw(renderArea, useIdentityTransform); engine.setupLayerBlending(compositionInfo.re.preMultipliedAlpha, compositionInfo.re.opaque, compositionInfo.re.disableTexture, compositionInfo.re.color); engine.setSourceDataSpace(compositionInfo.hwc.dataspace); engine.drawMesh(getBE().getMesh()); engine.setupLayerBlending(getPremultipledAlpha(), false /* opaque */, true /* disableTexture */, color); engine.setSourceDataSpace(mCurrentDataSpace); engine.drawMesh(mesh); engine.disableBlending(); } } bool ColorLayer::isVisible() const { return !isHiddenByPolicy() && getAlpha() > 0.0f; Loading @@ -75,48 +65,18 @@ void ColorLayer::setPerFrameData(const sp<const DisplayDevice>& display) { const auto& viewport = display->getViewport(); Region visible = tr.transform(visibleRegion.intersect(viewport)); const auto displayId = display->getId(); if (!hasHwcLayer(displayId)) { ALOGE("[%s] failed to setPerFrameData: no HWC layer found (%d)", mName.string(), displayId); return; } auto& hwcInfo = getBE().mHwcLayers[displayId]; auto& hwcLayer = hwcInfo.layer; auto error = hwcLayer->setVisibleRegion(visible); if (error != HWC2::Error::None) { ALOGE("[%s] Failed to set visible region: %s (%d)", mName.string(), to_string(error).c_str(), static_cast<int32_t>(error)); visible.dump(LOG_TAG); } getBE().compositionInfo.hwc.visibleRegion = visible; getBE().compositionInfo.hwc.dataspace = mCurrentDataSpace; setCompositionType(displayId, HWC2::Composition::SolidColor); error = hwcLayer->setDataspace(mCurrentDataSpace); if (error != HWC2::Error::None) { ALOGE("[%s] Failed to set dataspace %d: %s (%d)", mName.string(), mCurrentDataSpace, to_string(error).c_str(), static_cast<int32_t>(error)); } getBE().compositionInfo.hwc.dataspace = mCurrentDataSpace; half4 color = getColor(); error = hwcLayer->setColor({static_cast<uint8_t>(std::round(255.0f * color.r)), static_cast<uint8_t>(std::round(255.0f * color.g)), static_cast<uint8_t>(std::round(255.0f * color.b)), 255}); if (error != HWC2::Error::None) { ALOGE("[%s] Failed to set color: %s (%d)", mName.string(), to_string(error).c_str(), static_cast<int32_t>(error)); } getBE().compositionInfo.hwc.color = { static_cast<uint8_t>(std::round(255.0f * color.r)), static_cast<uint8_t>(std::round(255.0f * color.g)), static_cast<uint8_t>(std::round(255.0f * color.b)), 255 }; // Clear out the transform, because it doesn't make sense absent a source buffer error = hwcLayer->setTransform(HWC2::Transform::None); if (error != HWC2::Error::None) { ALOGE("[%s] Failed to clear transform: %s (%d)", mName.string(), to_string(error).c_str(), static_cast<int32_t>(error)); } getBE().compositionInfo.hwc.transform = HWC2::Transform::None; } Loading