Revert "Revert "SF: Add support for screen captures""
This reverts commit 2156613b58e6a792e3ab504ed0b7a0b189ff041b.
Test: Manual and cts -m ViewTestCases
Change-Id: Ia1de956a2f41ecd3e019c8540a60d42c37bc343e
diff --git a/services/surfaceflinger/BufferLayer.cpp b/services/surfaceflinger/BufferLayer.cpp
index e128df7..37f4b0f 100644
--- a/services/surfaceflinger/BufferLayer.cpp
+++ b/services/surfaceflinger/BufferLayer.cpp
@@ -160,6 +160,8 @@
bool useIdentityTransform) const {
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
@@ -241,6 +243,7 @@
mTexture.setDimensions(mActiveBuffer->getWidth(), mActiveBuffer->getHeight());
mTexture.setFiltering(useFiltering);
mTexture.setMatrix(textureMatrix);
+ compositionInfo.re.texture = mTexture;
engine.setupLayerTexturing(mTexture);
} else {
@@ -250,6 +253,23 @@
engine.disableTexturing();
}
+void BufferLayer::drawNow(const RenderArea& renderArea, bool useIdentityTransform) const {
+ 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);
+}
+
void BufferLayer::onLayerDisplayed(const sp<Fence>& releaseFence) {
mConsumer->setReleaseFence(releaseFence);
}