summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTreehugger Robot <treehugger-gerrit@google.com>2021-09-23 05:51:14 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2021-09-23 05:51:14 +0000
commite68948d99436d9efd60799ba05e28097764b485e (patch)
tree8858f6fcd2c34aca45ed658ec28ae7da3b395859
parentcece376ccc15bf20184787b8ce2b00c7f90b5c63 (diff)
parent63ba8dce49250f4055b72c794631ef71d21bb123 (diff)
downloadnative-e68948d99436d9efd60799ba05e28097764b485e.tar.gz
Merge "DO NOT MERGE Disable filtering for BufferLayers which are not scaled" into android11-gsi
-rw-r--r--services/surfaceflinger/BufferLayer.cpp28
-rw-r--r--services/surfaceflinger/BufferLayer.h2
-rw-r--r--services/surfaceflinger/BufferStateLayer.cpp24
-rw-r--r--services/surfaceflinger/BufferStateLayer.h2
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;