diff options
| author | 2020-04-20 18:42:31 -0700 | |
|---|---|---|
| committer | 2020-04-23 11:18:02 -0700 | |
| commit | f11eba5d705efac846e96acf5f748102da45a044 (patch) | |
| tree | 4471f70bb913c495a4e80585365e946ff5b64c61 /services/surfaceflinger/SurfaceFlinger.cpp | |
| parent | 85c2ee61552053499e1ec0ad00862cade90e2904 (diff) | |
Do not blur when doing region sampling
The luma approximation will already be pretty good without the blurs.
Test: RegionSamplingTest
Test: libsurfacelfinger_test
Fixes: 154556259
Change-Id: I4010ac54aee2e23bd8cf155f591584eeec425702
Merged-In: I4010ac54aee2e23bd8cf155f591584eeec425702
Diffstat (limited to 'services/surfaceflinger/SurfaceFlinger.cpp')
| -rw-r--r-- | services/surfaceflinger/SurfaceFlinger.cpp | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index 2ed23de282..d0e2668edd 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -5665,13 +5665,13 @@ status_t SurfaceFlinger::captureScreenCommon(RenderArea& renderArea, usage, "screenshot"); return captureScreenCommon(renderArea, traverseLayers, *outBuffer, useIdentityTransform, - outCapturedSecureLayers); + false /* regionSampling */, outCapturedSecureLayers); } status_t SurfaceFlinger::captureScreenCommon(RenderArea& renderArea, TraverseLayersFunction traverseLayers, const sp<GraphicBuffer>& buffer, - bool useIdentityTransform, + bool useIdentityTransform, bool regionSampling, bool& outCapturedSecureLayers) { // This mutex protects syncFd and captureResult for communication of the return values from the // main thread back to this Binder thread @@ -5702,7 +5702,7 @@ status_t SurfaceFlinger::captureScreenCommon(RenderArea& renderArea, renderArea.render([&] { result = captureScreenImplLocked(renderArea, traverseLayers, buffer.get(), useIdentityTransform, forSystem, &fd, - outCapturedSecureLayers); + regionSampling, outCapturedSecureLayers); }); } @@ -5739,7 +5739,7 @@ status_t SurfaceFlinger::captureScreenCommon(RenderArea& renderArea, void SurfaceFlinger::renderScreenImplLocked(const RenderArea& renderArea, TraverseLayersFunction traverseLayers, ANativeWindowBuffer* buffer, bool useIdentityTransform, - int* outSyncFd) { + bool regionSampling, int* outSyncFd) { ATRACE_CALL(); const auto reqWidth = renderArea.getReqWidth(); @@ -5795,6 +5795,12 @@ void SurfaceFlinger::renderScreenImplLocked(const RenderArea& renderArea, for (auto& settings : results) { settings.geometry.positionTransform = transform.asMatrix4() * settings.geometry.positionTransform; + // There's no need to process blurs when we're executing region sampling, + // we're just trying to understand what we're drawing, and doing so without + // blurs is already a pretty good approximation. + if (regionSampling) { + settings.backgroundBlurRadius = 0; + } } clientCompositionLayers.insert(clientCompositionLayers.end(), std::make_move_iterator(results.begin()), @@ -5832,7 +5838,8 @@ status_t SurfaceFlinger::captureScreenImplLocked(const RenderArea& renderArea, TraverseLayersFunction traverseLayers, ANativeWindowBuffer* buffer, bool useIdentityTransform, bool forSystem, - int* outSyncFd, bool& outCapturedSecureLayers) { + int* outSyncFd, bool regionSampling, + bool& outCapturedSecureLayers) { ATRACE_CALL(); traverseLayers([&](Layer* layer) { @@ -5847,7 +5854,8 @@ status_t SurfaceFlinger::captureScreenImplLocked(const RenderArea& renderArea, ALOGW("FB is protected: PERMISSION_DENIED"); return PERMISSION_DENIED; } - renderScreenImplLocked(renderArea, traverseLayers, buffer, useIdentityTransform, outSyncFd); + renderScreenImplLocked(renderArea, traverseLayers, buffer, useIdentityTransform, regionSampling, + outSyncFd); return NO_ERROR; } |