diff options
author | Treehugger Robot <treehugger-gerrit@google.com> | 2021-09-23 05:51:14 +0000 |
---|---|---|
committer | Gerrit Code Review <noreply-gerritcodereview@google.com> | 2021-09-23 05:51:14 +0000 |
commit | e68948d99436d9efd60799ba05e28097764b485e (patch) | |
tree | 8858f6fcd2c34aca45ed658ec28ae7da3b395859 | |
parent | cece376ccc15bf20184787b8ce2b00c7f90b5c63 (diff) | |
parent | 63ba8dce49250f4055b72c794631ef71d21bb123 (diff) | |
download | native-e68948d99436d9efd60799ba05e28097764b485e.tar.gz |
Merge "DO NOT MERGE Disable filtering for BufferLayers which are not scaled" into android11-gsi
-rw-r--r-- | services/surfaceflinger/BufferLayer.cpp | 28 | ||||
-rw-r--r-- | services/surfaceflinger/BufferLayer.h | 2 | ||||
-rw-r--r-- | services/surfaceflinger/BufferStateLayer.cpp | 24 | ||||
-rw-r--r-- | services/surfaceflinger/BufferStateLayer.h | 2 |
4 files changed, 28 insertions, 28 deletions
diff --git a/services/surfaceflinger/BufferLayer.cpp b/services/surfaceflinger/BufferLayer.cpp index c8cb7b9cd3..53b1f43972 100644 --- a/services/surfaceflinger/BufferLayer.cpp +++ b/services/surfaceflinger/BufferLayer.cpp @@ -841,7 +841,33 @@ void BufferLayer::setTransformHint(ui::Transform::RotationFlags displayTransform } bool BufferLayer::bufferNeedsFiltering() const { - return isFixedSize(); + // Layers that don't resize along with their buffer, don't need filtering. + if (!isFixedSize()) { + return false; + } + + if (!mBufferInfo.mBuffer) { + return false; + } + + uint32_t bufferWidth = mBufferInfo.mBuffer->width; + uint32_t bufferHeight = mBufferInfo.mBuffer->height; + + // Undo any transformations on the buffer and return the result. + const State& s(getDrawingState()); + if (s.transform & ui::Transform::ROT_90) { + std::swap(bufferWidth, bufferHeight); + } + + if (s.transformToDisplayInverse) { + uint32_t invTransform = DisplayDevice::getPrimaryDisplayRotationFlags(); + if (invTransform & ui::Transform::ROT_90) { + std::swap(bufferWidth, bufferHeight); + } + } + + const Rect layerSize{getBounds()}; + return layerSize.width() != bufferWidth || layerSize.height() != bufferHeight; } } // namespace android diff --git a/services/surfaceflinger/BufferLayer.h b/services/surfaceflinger/BufferLayer.h index a3d8b685b2..c7e8ad7372 100644 --- a/services/surfaceflinger/BufferLayer.h +++ b/services/surfaceflinger/BufferLayer.h @@ -120,7 +120,7 @@ public: // Returns true if the transformed buffer size does not match the layer size and we need // to apply filtering. - virtual bool bufferNeedsFiltering() const; + bool bufferNeedsFiltering() const; // ----------------------------------------------------------------------- // Functions that must be implemented by derived classes diff --git a/services/surfaceflinger/BufferStateLayer.cpp b/services/surfaceflinger/BufferStateLayer.cpp index ad2620cd91..41dd7bfaa4 100644 --- a/services/surfaceflinger/BufferStateLayer.cpp +++ b/services/surfaceflinger/BufferStateLayer.cpp @@ -761,30 +761,6 @@ Layer::RoundedCornerState BufferStateLayer::getRoundedCornerState() const { radius); } -bool BufferStateLayer::bufferNeedsFiltering() const { - const State& s(getDrawingState()); - if (!s.buffer) { - return false; - } - - uint32_t bufferWidth = s.buffer->width; - uint32_t bufferHeight = s.buffer->height; - - // Undo any transformations on the buffer and return the result. - if (s.transform & ui::Transform::ROT_90) { - std::swap(bufferWidth, bufferHeight); - } - - if (s.transformToDisplayInverse) { - uint32_t invTransform = DisplayDevice::getPrimaryDisplayRotationFlags(); - if (invTransform & ui::Transform::ROT_90) { - std::swap(bufferWidth, bufferHeight); - } - } - - const Rect layerSize{getBounds()}; - return layerSize.width() != bufferWidth || layerSize.height() != bufferHeight; -} } // namespace android // TODO(b/129481165): remove the #pragma below and fix conversion issues diff --git a/services/surfaceflinger/BufferStateLayer.h b/services/surfaceflinger/BufferStateLayer.h index b408113108..00fa7f7a2d 100644 --- a/services/surfaceflinger/BufferStateLayer.h +++ b/services/surfaceflinger/BufferStateLayer.h @@ -145,8 +145,6 @@ private: friend class SlotGenerationTest; bool willPresentCurrentTransaction() const; - bool bufferNeedsFiltering() const override; - static const std::array<float, 16> IDENTITY_MATRIX; std::unique_ptr<renderengine::Image> mTextureImage; |