diff options
| author | 2021-04-09 07:34:03 +0000 | |
|---|---|---|
| committer | 2021-04-09 07:34:03 +0000 | |
| commit | a9a65fc0cda53e903f68a3c9404801e67e3fd74c (patch) | |
| tree | ebaaa4db856b52d1367c97162ddbf115de85526b | |
| parent | 3149c46550e78358fd8fd2c4089d84921263e2ab (diff) | |
| parent | 1014c4bf14f5c250b78d7e917fb59aaa9b0d9b0a (diff) | |
Merge "Revert "Remove setFrame from BufferStateLayer"" into sc-dev
23 files changed, 295 insertions, 353 deletions
diff --git a/libs/gui/BLASTBufferQueue.cpp b/libs/gui/BLASTBufferQueue.cpp index e5afd408a9..bcdd06b6c8 100644 --- a/libs/gui/BLASTBufferQueue.cpp +++ b/libs/gui/BLASTBufferQueue.cpp @@ -204,16 +204,13 @@ void BLASTBufferQueue::update(const sp<SurfaceControl>& surface, uint32_t width,      if (mRequestedSize != newSize) {          mRequestedSize.set(newSize);          mBufferItemConsumer->setDefaultBufferSize(mRequestedSize.width, mRequestedSize.height); -        if (mLastBufferInfo.scalingMode != NATIVE_WINDOW_SCALING_MODE_FREEZE) { +        if (mLastBufferScalingMode != NATIVE_WINDOW_SCALING_MODE_FREEZE) {              // If the buffer supports scaling, update the frame immediately since the client may              // want to scale the existing buffer to the new size.              mSize = mRequestedSize; -            // We only need to update the scale if we've received at least one buffer. The reason -            // for this is the scale is calculated based on the requested size and buffer size. -            // If there's no buffer, the scale will always be 1. -            if (mLastBufferInfo.hasBuffer) { -                setMatrix(&t, mLastBufferInfo); -            } +            t.setFrame(mSurfaceControl, +                       {0, 0, static_cast<int32_t>(mSize.width), +                        static_cast<int32_t>(mSize.height)});              applyTransaction = true;          }      } @@ -377,10 +374,8 @@ void BLASTBufferQueue::processNextBufferLocked(bool useNextTransaction) {      // Ensure BLASTBufferQueue stays alive until we receive the transaction complete callback.      incStrong((void*)transactionCallbackThunk); +    mLastBufferScalingMode = bufferItem.mScalingMode;      mLastAcquiredFrameNumber = bufferItem.mFrameNumber; -    mLastBufferInfo.update(true /* hasBuffer */, bufferItem.mGraphicBuffer->getWidth(), -                           bufferItem.mGraphicBuffer->getHeight(), bufferItem.mTransform, -                           bufferItem.mScalingMode);      auto releaseBufferCallback =              std::bind(releaseBufferCallbackThunk, wp<BLASTBufferQueue>(this) /* callbackContext */, @@ -393,7 +388,8 @@ void BLASTBufferQueue::processNextBufferLocked(bool useNextTransaction) {                         bufferItem.mFence ? new Fence(bufferItem.mFence->dup()) : Fence::NO_FENCE);      t->addTransactionCompletedCallback(transactionCallbackThunk, static_cast<void*>(this)); -    setMatrix(t, mLastBufferInfo); +    t->setFrame(mSurfaceControl, +                {0, 0, static_cast<int32_t>(mSize.width), static_cast<int32_t>(mSize.height)});      t->setCrop(mSurfaceControl, computeCrop(bufferItem));      t->setTransform(mSurfaceControl, bufferItem.mTransform);      t->setTransformToDisplayInverse(mSurfaceControl, bufferItem.mTransformToDisplayInverse); @@ -519,17 +515,6 @@ bool BLASTBufferQueue::rejectBuffer(const BufferItem& item) {      return mSize != bufferSize;  } -void BLASTBufferQueue::setMatrix(SurfaceComposerClient::Transaction* t, -                                 const BufferInfo& bufferInfo) { -    uint32_t bufWidth = bufferInfo.width; -    uint32_t bufHeight = bufferInfo.height; - -    float dsdx = mSize.width / static_cast<float>(bufWidth); -    float dsdy = mSize.height / static_cast<float>(bufHeight); - -    t->setMatrix(mSurfaceControl, dsdx, 0, 0, dsdy); -} -  void BLASTBufferQueue::setTransactionCompleteCallback(          uint64_t frameNumber, std::function<void(int64_t)>&& transactionCompleteCallback) {      std::lock_guard _lock{mMutex}; diff --git a/libs/gui/LayerState.cpp b/libs/gui/LayerState.cpp index 0ca497795b..2a9a97ed13 100644 --- a/libs/gui/LayerState.cpp +++ b/libs/gui/LayerState.cpp @@ -459,6 +459,10 @@ void layer_state_t::merge(const layer_state_t& other) {          what |= eCropChanged;          crop = other.crop;      } +    if (other.what & eFrameChanged) { +        what |= eFrameChanged; +        orientedDisplaySpaceRect = other.orientedDisplaySpaceRect; +    }      if (other.what & eBufferChanged) {          what |= eBufferChanged;          buffer = other.buffer; diff --git a/libs/gui/SurfaceComposerClient.cpp b/libs/gui/SurfaceComposerClient.cpp index c888312184..879955b7d7 100644 --- a/libs/gui/SurfaceComposerClient.cpp +++ b/libs/gui/SurfaceComposerClient.cpp @@ -1246,6 +1246,20 @@ SurfaceComposerClient::Transaction::setTransformToDisplayInverse(const sp<Surfac      return *this;  } +SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setFrame( +        const sp<SurfaceControl>& sc, const Rect& frame) { +    layer_state_t* s = getLayerState(sc); +    if (!s) { +        mStatus = BAD_INDEX; +        return *this; +    } +    s->what |= layer_state_t::eFrameChanged; +    s->orientedDisplaySpaceRect = frame; + +    registerSurfaceControlForCallback(sc); +    return *this; +} +  SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::setBuffer(          const sp<SurfaceControl>& sc, const sp<GraphicBuffer>& buffer,          ReleaseBufferCallback callback) { diff --git a/libs/gui/include/gui/BLASTBufferQueue.h b/libs/gui/include/gui/BLASTBufferQueue.h index a48f95ae73..fbd16f4ea2 100644 --- a/libs/gui/include/gui/BLASTBufferQueue.h +++ b/libs/gui/include/gui/BLASTBufferQueue.h @@ -142,33 +142,6 @@ private:      ui::Size mRequestedSize GUARDED_BY(mMutex);      int32_t mFormat GUARDED_BY(mMutex); -    struct BufferInfo { -        bool hasBuffer = false; -        uint32_t width; -        uint32_t height; -        uint32_t transform; -        // This is used to check if we should update the blast layer size immediately or wait until -        // we get the next buffer. This will support scenarios where the layer can change sizes -        // and the buffer will scale to fit the new size. -        uint32_t scalingMode = NATIVE_WINDOW_SCALING_MODE_SCALE_TO_WINDOW; - -        void update(bool hasBuffer, uint32_t width, uint32_t height, uint32_t transform, -                    uint32_t scalingMode) { -            this->hasBuffer = hasBuffer; -            this->width = width; -            this->height = height; -            this->transform = transform; -            this->scalingMode = scalingMode; -        } -    }; - -    // Last acquired buffer's info. This is used to calculate the correct scale when size change is -    // requested. We need to use the old buffer's info to determine what scale we need to apply to -    // ensure the correct size. -    BufferInfo mLastBufferInfo GUARDED_BY(mMutex); -    void setMatrix(SurfaceComposerClient::Transaction* t, const BufferInfo& bufferInfo) -            REQUIRES(mMutex); -      uint32_t mTransformHint GUARDED_BY(mMutex);      sp<IGraphicBufferConsumer> mConsumer; @@ -186,6 +159,11 @@ private:      std::queue<FrameTimelineInfo> mNextFrameTimelineInfoQueue GUARDED_BY(mMutex); +    // Last acquired buffer's scaling mode. This is used to check if we should update the blast +    // layer size immediately or wait until we get the next buffer. This will support scenarios +    // where the layer can change sizes and the buffer will scale to fit the new size. +    uint32_t mLastBufferScalingMode = NATIVE_WINDOW_SCALING_MODE_SCALE_TO_WINDOW; +      // Tracks the last acquired frame number      uint64_t mLastAcquiredFrameNumber GUARDED_BY(mMutex) = 0; diff --git a/libs/gui/include/gui/LayerState.h b/libs/gui/include/gui/LayerState.h index 706a09c3c7..6c265c898a 100644 --- a/libs/gui/include/gui/LayerState.h +++ b/libs/gui/include/gui/LayerState.h @@ -106,7 +106,7 @@ struct layer_state_t {          eHasListenerCallbacksChanged = 0x20000000,          eInputInfoChanged = 0x40000000,          eCornerRadiusChanged = 0x80000000, -        /* was eFrameChanged, now available 0x1'00000000, */ +        eFrameChanged = 0x1'00000000,          eCachedBufferChanged = 0x2'00000000,          eBackgroundColorChanged = 0x4'00000000,          eMetadataChanged = 0x8'00000000, diff --git a/libs/gui/include/gui/SurfaceComposerClient.h b/libs/gui/include/gui/SurfaceComposerClient.h index 731af58e85..7ec5d8df83 100644 --- a/libs/gui/include/gui/SurfaceComposerClient.h +++ b/libs/gui/include/gui/SurfaceComposerClient.h @@ -479,6 +479,7 @@ public:          Transaction& setTransform(const sp<SurfaceControl>& sc, uint32_t transform);          Transaction& setTransformToDisplayInverse(const sp<SurfaceControl>& sc,                                                    bool transformToDisplayInverse); +        Transaction& setFrame(const sp<SurfaceControl>& sc, const Rect& frame);          Transaction& setBuffer(const sp<SurfaceControl>& sc, const sp<GraphicBuffer>& buffer,                                 ReleaseBufferCallback callback = nullptr);          Transaction& setCachedBuffer(const sp<SurfaceControl>& sc, int32_t bufferId); diff --git a/libs/gui/tests/BLASTBufferQueue_test.cpp b/libs/gui/tests/BLASTBufferQueue_test.cpp index 9b1f0db83b..fe48d88376 100644 --- a/libs/gui/tests/BLASTBufferQueue_test.cpp +++ b/libs/gui/tests/BLASTBufferQueue_test.cpp @@ -140,6 +140,7 @@ protected:                                                   /*parent*/ nullptr);          t.setLayerStack(mSurfaceControl, 0)                  .setLayer(mSurfaceControl, std::numeric_limits<int32_t>::max()) +                .setFrame(mSurfaceControl, Rect(resolution))                  .show(mSurfaceControl)                  .setDataspace(mSurfaceControl, ui::Dataspace::V0_SRGB)                  .apply(); @@ -217,13 +218,13 @@ protected:                              col >= region.left - border && col < region.right + border;                  }                  if (!outsideRegion && inRegion) { -                    ASSERT_GE(epsilon, abs(r - *(pixel))); -                    ASSERT_GE(epsilon, abs(g - *(pixel + 1))); -                    ASSERT_GE(epsilon, abs(b - *(pixel + 2))); +                    EXPECT_GE(epsilon, abs(r - *(pixel))); +                    EXPECT_GE(epsilon, abs(g - *(pixel + 1))); +                    EXPECT_GE(epsilon, abs(b - *(pixel + 2)));                  } else if (outsideRegion && !inRegion) { -                    ASSERT_GE(epsilon, abs(r - *(pixel))); -                    ASSERT_GE(epsilon, abs(g - *(pixel + 1))); -                    ASSERT_GE(epsilon, abs(b - *(pixel + 2))); +                    EXPECT_GE(epsilon, abs(r - *(pixel))); +                    EXPECT_GE(epsilon, abs(g - *(pixel + 1))); +                    EXPECT_GE(epsilon, abs(b - *(pixel + 2)));                  }                  ASSERT_EQ(false, ::testing::Test::HasFailure());              } @@ -465,8 +466,7 @@ TEST_F(BLASTBufferQueueTest, SetCrop_Item) {      ASSERT_EQ(NO_ERROR, captureDisplay(mCaptureArgs, mCaptureResults));      ASSERT_NO_FATAL_FAILURE( -            checkScreenCapture(r, g, b, -                               {0, 0, (int32_t)mDisplayWidth, (int32_t)mDisplayHeight / 2})); +            checkScreenCapture(r, g, b, {0, 0, (int32_t)mDisplayWidth, (int32_t)mDisplayHeight}));  }  TEST_F(BLASTBufferQueueTest, SetCrop_ScalingModeScaleCrop) { @@ -523,15 +523,13 @@ TEST_F(BLASTBufferQueueTest, SetCrop_ScalingModeScaleCrop) {      // capture screen and verify that it is red      ASSERT_EQ(NO_ERROR, captureDisplay(mCaptureArgs, mCaptureResults)); -    Rect bounds; -    bounds.left = finalCropSideLength / 2; -    bounds.top = 0; -    bounds.right = bounds.left + finalCropSideLength; -    bounds.bottom = finalCropSideLength; - -    ASSERT_NO_FATAL_FAILURE(checkScreenCapture(r, g, b, bounds));      ASSERT_NO_FATAL_FAILURE( -            checkScreenCapture(0, 0, 0, bounds, /*border*/ 0, /*outsideRegion*/ true)); +            checkScreenCapture(r, g, b, +                               {0, 0, (int32_t)bufferSideLength, (int32_t)bufferSideLength})); +    ASSERT_NO_FATAL_FAILURE( +            checkScreenCapture(0, 0, 0, +                               {0, 0, (int32_t)bufferSideLength, (int32_t)bufferSideLength}, +                               /*border*/ 0, /*outsideRegion*/ true));  }  class TestProducerListener : public BnProducerListener { @@ -598,6 +596,7 @@ TEST_F(BLASTBufferQueueTest, OutOfOrderTransactionTest) {      t.setLayerStack(bgSurface, 0)              .show(bgSurface)              .setDataspace(bgSurface, ui::Dataspace::V0_SRGB) +            .setFrame(bgSurface, Rect(0, 0, mDisplayWidth, mDisplayHeight))              .setLayer(bgSurface, std::numeric_limits<int32_t>::max() - 1)              .apply(); @@ -620,8 +619,7 @@ TEST_F(BLASTBufferQueueTest, OutOfOrderTransactionTest) {      ASSERT_EQ(NO_ERROR, captureDisplay(mCaptureArgs, mCaptureResults));      ASSERT_NO_FATAL_FAILURE( -            checkScreenCapture(r, g, b, -                               {0, 0, (int32_t)mDisplayWidth, (int32_t)mDisplayHeight / 2})); +            checkScreenCapture(r, g, b, {0, 0, (int32_t)mDisplayWidth, (int32_t)mDisplayHeight}));  }  class BLASTBufferQueueTransformTest : public BLASTBufferQueueTest { diff --git a/services/surfaceflinger/BufferStateLayer.cpp b/services/surfaceflinger/BufferStateLayer.cpp index ed826a0100..48a0be2c45 100644 --- a/services/surfaceflinger/BufferStateLayer.cpp +++ b/services/surfaceflinger/BufferStateLayer.cpp @@ -278,8 +278,9 @@ bool BufferStateLayer::applyPendingStates(Layer::State* stateToCommit) {      return stateUpdateAvailable;  } -Rect BufferStateLayer::getCrop(const Layer::State& s) const { -    return s.crop; +// Crop that applies to the window +Rect BufferStateLayer::getCrop(const Layer::State& /*s*/) const { +    return Rect::INVALID_RECT;  }  bool BufferStateLayer::setTransform(uint32_t transform) { @@ -300,53 +301,57 @@ bool BufferStateLayer::setTransformToDisplayInverse(bool transformToDisplayInver  }  bool BufferStateLayer::setCrop(const Rect& crop) { -    if (mCurrentState.crop == crop) return false; -    mCurrentState.sequence++; -    mCurrentState.crop = crop; +    Rect c = crop; +    if (c.left < 0) { +        c.left = 0; +    } +    if (c.top < 0) { +        c.top = 0; +    } +    // If the width and/or height are < 0, make it [0, 0, -1, -1] so the equality comparision below +    // treats all invalid rectangles the same. +    if (!c.isValid()) { +        c.makeInvalid(); +    } +    if (mCurrentState.crop == c) return false; +    mCurrentState.crop = c;      mCurrentState.modified = true;      setTransactionFlags(eTransactionNeeded);      return true;  } -bool BufferStateLayer::setMatrix(const layer_state_t::matrix22_t& matrix, -                                 bool allowNonRectPreservingTransforms) { -    if (mCurrentState.transform.dsdx() == matrix.dsdx && -        mCurrentState.transform.dtdy() == matrix.dtdy && -        mCurrentState.transform.dtdx() == matrix.dtdx && -        mCurrentState.transform.dsdy() == matrix.dsdy) { -        return false; -    } +bool BufferStateLayer::setFrame(const Rect& frame) { +    int x = frame.left; +    int y = frame.top; +    int w = frame.getWidth(); +    int h = frame.getHeight(); -    ui::Transform t; -    t.set(matrix.dsdx, matrix.dtdy, matrix.dtdx, matrix.dsdy); - -    if (!allowNonRectPreservingTransforms && !t.preserveRects()) { -        ALOGW("Attempt to set rotation matrix without permission ACCESS_SURFACE_FLINGER nor " -              "ROTATE_SURFACE_FLINGER ignored"); -        return false; +    if (x < 0) { +        x = 0; +        w = frame.right;      } -    mCurrentState.transform.set(matrix.dsdx, matrix.dtdy, matrix.dtdx, matrix.dsdy); - -    mCurrentState.sequence++; -    mCurrentState.modified = true; -    setTransactionFlags(eTransactionNeeded); - -    return true; -} +    if (y < 0) { +        y = 0; +        h = frame.bottom; +    } -bool BufferStateLayer::setPosition(float x, float y) { -    if (mCurrentState.transform.tx() == x && mCurrentState.transform.ty() == y) { +    if (mCurrentState.transform.tx() == x && mCurrentState.transform.ty() == y && +        mCurrentState.width == w && mCurrentState.height == h) {          return false;      } +    if (!frame.isValid()) { +        x = y = w = h = 0; +    }      mCurrentState.transform.set(x, y); +    mCurrentState.width = w; +    mCurrentState.height = h;      mCurrentState.sequence++;      mCurrentState.modified = true;      setTransactionFlags(eTransactionNeeded); -      return true;  } @@ -423,10 +428,6 @@ bool BufferStateLayer::setBuffer(const sp<GraphicBuffer>& buffer, const sp<Fence          mFlinger->mFrameTracer->traceTimestamp(layerId, bufferId, frameNumber, postTime,                                                 FrameTracer::FrameEvent::QUEUE);      } - -    mCurrentState.width = mCurrentState.buffer->width; -    mCurrentState.height = mCurrentState.buffer->height; -      return true;  } @@ -857,6 +858,33 @@ sp<Layer> BufferStateLayer::createClone() {      return layer;  } +Layer::RoundedCornerState BufferStateLayer::getRoundedCornerState() const { +    const auto& p = mDrawingParent.promote(); +    if (p != nullptr) { +        RoundedCornerState parentState = p->getRoundedCornerState(); +        if (parentState.radius > 0) { +            ui::Transform t = getActiveTransform(getDrawingState()); +            t = t.inverse(); +            parentState.cropRect = t.transform(parentState.cropRect); +            // The rounded corners shader only accepts 1 corner radius for performance reasons, +            // but a transform matrix can define horizontal and vertical scales. +            // Let's take the average between both of them and pass into the shader, practically we +            // never do this type of transformation on windows anyway. +            parentState.radius *= (t[0][0] + t[1][1]) / 2.0f; +            return parentState; +        } +    } +    const float radius = getDrawingState().cornerRadius; +    const State& s(getDrawingState()); +    if (radius <= 0 || (getActiveWidth(s) == UINT32_MAX && getActiveHeight(s) == UINT32_MAX)) +        return RoundedCornerState(); +    return RoundedCornerState(FloatRect(static_cast<float>(s.transform.tx()), +                                        static_cast<float>(s.transform.ty()), +                                        static_cast<float>(s.transform.tx() + s.width), +                                        static_cast<float>(s.transform.ty() + s.height)), +                              radius); +} +  bool BufferStateLayer::bufferNeedsFiltering() const {      const State& s(getDrawingState());      if (!s.buffer) { diff --git a/services/surfaceflinger/BufferStateLayer.h b/services/surfaceflinger/BufferStateLayer.h index 8ce3e1f55b..3878f50776 100644 --- a/services/surfaceflinger/BufferStateLayer.h +++ b/services/surfaceflinger/BufferStateLayer.h @@ -66,6 +66,7 @@ public:      bool setTransform(uint32_t transform) override;      bool setTransformToDisplayInverse(bool transformToDisplayInverse) override;      bool setCrop(const Rect& crop) override; +    bool setFrame(const Rect& frame) override;      bool setBuffer(const sp<GraphicBuffer>& buffer, const sp<Fence>& acquireFence, nsecs_t postTime,                     nsecs_t desiredPresentTime, bool isAutoTimestamp,                     const client_cache_t& clientCacheId, uint64_t frameNumber, @@ -80,13 +81,15 @@ public:      bool setTransactionCompletedListeners(const std::vector<sp<CallbackHandle>>& handles) override;      bool addFrameEvent(const sp<Fence>& acquireFence, nsecs_t postedTime,                         nsecs_t requestedPresentTime) override; -    bool setPosition(float /*x*/, float /*y*/) override; -    bool setMatrix(const layer_state_t::matrix22_t& /*matrix*/, -                   bool /*allowNonRectPreservingTransforms*/);      // Override to ignore legacy layer state properties that are not used by BufferStateLayer      bool setSize(uint32_t /*w*/, uint32_t /*h*/) override { return false; } +    bool setPosition(float /*x*/, float /*y*/) override { return false; }      bool setTransparentRegionHint(const Region& transparent) override; +    bool setMatrix(const layer_state_t::matrix22_t& /*matrix*/, +                   bool /*allowNonRectPreservingTransforms*/) override { +        return false; +    }      void deferTransactionUntil_legacy(const sp<IBinder>& /*barrierHandle*/,                                        uint64_t /*frameNumber*/) override {}      void deferTransactionUntil_legacy(const sp<Layer>& /*barrierLayer*/, @@ -94,6 +97,7 @@ public:      Rect getBufferSize(const State& s) const override;      FloatRect computeSourceBounds(const FloatRect& parentBounds) const override; +    Layer::RoundedCornerState getRoundedCornerState() const override;      void setAutoRefresh(bool autoRefresh) override;      // ----------------------------------------------------------------------- diff --git a/services/surfaceflinger/Layer.cpp b/services/surfaceflinger/Layer.cpp index 80d2ea849f..77ee6a1875 100644 --- a/services/surfaceflinger/Layer.cpp +++ b/services/surfaceflinger/Layer.cpp @@ -2313,8 +2313,8 @@ Layer::RoundedCornerState Layer::getRoundedCornerState() const {          }      }      const float radius = getDrawingState().cornerRadius; -    return radius > 0 && getCroppedBufferSize(getDrawingState()).isValid() -            ? RoundedCornerState(getCroppedBufferSize(getDrawingState()).toFloatRect(), radius) +    return radius > 0 && getCrop(getDrawingState()).isValid() +            ? RoundedCornerState(getCrop(getDrawingState()).toFloatRect(), radius)              : RoundedCornerState();  } diff --git a/services/surfaceflinger/Layer.h b/services/surfaceflinger/Layer.h index f900968b3e..78debf2bae 100644 --- a/services/surfaceflinger/Layer.h +++ b/services/surfaceflinger/Layer.h @@ -412,6 +412,7 @@ public:      // Used only to set BufferStateLayer state      virtual bool setTransform(uint32_t /*transform*/) { return false; };      virtual bool setTransformToDisplayInverse(bool /*transformToDisplayInverse*/) { return false; }; +    virtual bool setFrame(const Rect& /*frame*/) { return false; };      virtual bool setBuffer(const sp<GraphicBuffer>& /*buffer*/, const sp<Fence>& /*acquireFence*/,                             nsecs_t /*postTime*/, nsecs_t /*desiredPresentTime*/,                             bool /*isAutoTimestamp*/, const client_cache_t& /*clientCacheId*/, diff --git a/services/surfaceflinger/RefreshRateOverlay.cpp b/services/surfaceflinger/RefreshRateOverlay.cpp index 7a3e433660..1d00cc38f2 100644 --- a/services/surfaceflinger/RefreshRateOverlay.cpp +++ b/services/surfaceflinger/RefreshRateOverlay.cpp @@ -231,14 +231,8 @@ const std::vector<sp<GraphicBuffer>>& RefreshRateOverlay::getOrCreateBuffers(uin  void RefreshRateOverlay::setViewport(ui::Size viewport) {      Rect frame((3 * viewport.width) >> 4, viewport.height >> 5);      frame.offsetBy(viewport.width >> 5, viewport.height >> 4); +    mLayer->setFrame(frame); -    layer_state_t::matrix22_t matrix; -    matrix.dsdx = frame.getWidth() / static_cast<float>(SevenSegmentDrawer::getWidth()); -    matrix.dtdx = 0; -    matrix.dtdy = 0; -    matrix.dsdy = frame.getHeight() / static_cast<float>(SevenSegmentDrawer::getHeight()); -    mLayer->setMatrix(matrix, true); -    mLayer->setPosition(frame.left, frame.top);      mFlinger.mTransactionFlags.fetch_or(eTransactionMask);  } diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index b33eca94d5..e72fad07dc 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -4038,6 +4038,9 @@ uint32_t SurfaceFlinger::setClientStateLocked(      if (what & layer_state_t::eCropChanged) {          if (layer->setCrop(s.crop)) flags |= eTraversalNeeded;      } +    if (what & layer_state_t::eFrameChanged) { +        if (layer->setFrame(s.orientedDisplaySpaceRect)) flags |= eTraversalNeeded; +    }      if (what & layer_state_t::eAcquireFenceChanged) {          if (layer->setAcquireFence(s.acquireFence)) flags |= eTraversalNeeded;      } diff --git a/services/surfaceflinger/tests/BufferGenerator.cpp b/services/surfaceflinger/tests/BufferGenerator.cpp index 47a150dd35..03f8e1afba 100644 --- a/services/surfaceflinger/tests/BufferGenerator.cpp +++ b/services/surfaceflinger/tests/BufferGenerator.cpp @@ -296,12 +296,12 @@ private:  BufferGenerator::BufferGenerator()        : mSurfaceManager(new SurfaceManager), mEglManager(new EglManager), mProgram(new Program) { -    mBufferSize.set(1000.0, 1000.0); +    const float width = 1000.0; +    const float height = 1000.0;      auto setBufferWithContext =              std::bind(setBuffer, std::placeholders::_1, std::placeholders::_2, this); -    mSurfaceManager->initialize(mBufferSize.width, mBufferSize.height, HAL_PIXEL_FORMAT_RGBA_8888, -                                setBufferWithContext); +    mSurfaceManager->initialize(width, height, HAL_PIXEL_FORMAT_RGBA_8888, setBufferWithContext);      if (!mEglManager->initialize(mSurfaceManager->getSurface())) return; @@ -309,9 +309,7 @@ BufferGenerator::BufferGenerator()      if (!mProgram->initialize(VERTEX_SHADER, FRAGMENT_SHADER)) return;      mProgram->use(); -    mProgram->bindVec4(0, -                       vec4{mBufferSize.width, mBufferSize.height, 1.0f / mBufferSize.width, -                            1.0f / mBufferSize.height}); +    mProgram->bindVec4(0, vec4{width, height, 1.0f / width, 1.0f / height});      mProgram->bindVec3(2, &SPHERICAL_HARMONICS[0], 4);      glEnableVertexAttribArray(0); @@ -374,10 +372,6 @@ status_t BufferGenerator::get(sp<GraphicBuffer>* outBuffer, sp<Fence>* outFence)      return NO_ERROR;  } -ui::Size BufferGenerator::getSize() { -    return mBufferSize; -} -  // static  void BufferGenerator::setBuffer(const sp<GraphicBuffer>& buffer, int32_t fence,                                  void* bufferGenerator) { diff --git a/services/surfaceflinger/tests/BufferGenerator.h b/services/surfaceflinger/tests/BufferGenerator.h index f7d548b6bf..a3ffe86572 100644 --- a/services/surfaceflinger/tests/BufferGenerator.h +++ b/services/surfaceflinger/tests/BufferGenerator.h @@ -37,7 +37,6 @@ public:      /* Static callback that sets the fence on a particular instance */      static void setBuffer(const sp<GraphicBuffer>& buffer, int32_t fence, void* fenceGenerator); -    ui::Size getSize();  private:      bool mInitialized = false; @@ -54,7 +53,6 @@ private:      using Epoch = std::chrono::time_point<std::chrono::steady_clock>;      Epoch mEpoch = std::chrono::steady_clock::now(); -    ui::Size mBufferSize;  };  } // namespace android diff --git a/services/surfaceflinger/tests/EffectLayer_test.cpp b/services/surfaceflinger/tests/EffectLayer_test.cpp index af00ec7fc9..f470eda7d3 100644 --- a/services/surfaceflinger/tests/EffectLayer_test.cpp +++ b/services/surfaceflinger/tests/EffectLayer_test.cpp @@ -149,6 +149,7 @@ TEST_F(EffectLayerTest, BlurEffectLayerIsVisible) {          t.reparent(blurLayer, mParentLayer);          t.setBackgroundBlurRadius(blurLayer, blurRadius);          t.setCrop(blurLayer, blurRect); +        t.setFrame(blurLayer, blurRect);          t.setAlpha(blurLayer, 0.0f);          t.show(blurLayer);      }); diff --git a/services/surfaceflinger/tests/IPC_test.cpp b/services/surfaceflinger/tests/IPC_test.cpp index 9fa3d4c417..a8647c3e50 100644 --- a/services/surfaceflinger/tests/IPC_test.cpp +++ b/services/surfaceflinger/tests/IPC_test.cpp @@ -161,6 +161,7 @@ public:                                                   Color::RED);          transaction->setLayerStack(mSurfaceControl, 0)                  .setLayer(mSurfaceControl, std::numeric_limits<int32_t>::max()) +                .setFrame(mSurfaceControl, Rect(0, 0, width, height))                  .setBuffer(mSurfaceControl, gb)                  .setAcquireFence(mSurfaceControl, fence)                  .show(mSurfaceControl) diff --git a/services/surfaceflinger/tests/LayerCallback_test.cpp b/services/surfaceflinger/tests/LayerCallback_test.cpp index 011ff70409..158801a705 100644 --- a/services/surfaceflinger/tests/LayerCallback_test.cpp +++ b/services/surfaceflinger/tests/LayerCallback_test.cpp @@ -164,10 +164,7 @@ TEST_F(LayerCallbackTest, NoBufferNoColor) {          return;      } -    ui::Size bufferSize = getBufferSize(); -    TransactionUtils::setFrame(transaction, layer, Rect(0, 0, bufferSize.width, bufferSize.height), -                               Rect(0, 0, 32, 32)); -    transaction.apply(); +    transaction.setFrame(layer, Rect(0, 0, 32, 32)).apply();      ExpectedResult expected;      expected.addSurface(ExpectedResult::Transaction::NOT_PRESENTED, layer, @@ -187,10 +184,7 @@ TEST_F(LayerCallbackTest, BufferNoColor) {          return;      } -    ui::Size bufferSize = getBufferSize(); -    TransactionUtils::setFrame(transaction, layer, Rect(0, 0, bufferSize.width, bufferSize.height), -                               Rect(0, 0, 32, 32)); -    transaction.apply(); +    transaction.setFrame(layer, Rect(0, 0, 32, 32)).apply();      ExpectedResult expected;      expected.addSurface(ExpectedResult::Transaction::PRESENTED, layer); @@ -209,10 +203,7 @@ TEST_F(LayerCallbackTest, NoBufferColor) {          return;      } -    ui::Size bufferSize = getBufferSize(); -    TransactionUtils::setFrame(transaction, layer, Rect(0, 0, bufferSize.width, bufferSize.height), -                               Rect(0, 0, 32, 32)); -    transaction.apply(); +    transaction.setFrame(layer, Rect(0, 0, 32, 32)).apply();      ExpectedResult expected;      expected.addSurface(ExpectedResult::Transaction::PRESENTED, layer, @@ -247,10 +238,7 @@ TEST_F(LayerCallbackTest, OffScreen) {          return;      } -    ui::Size bufferSize = getBufferSize(); -    TransactionUtils::setFrame(transaction, layer, Rect(0, 0, bufferSize.width, bufferSize.height), -                               Rect(-100, -100, 100, 100)); -    transaction.apply(); +    transaction.setFrame(layer, Rect(-100, -100, 100, 100)).apply();      ExpectedResult expected;      expected.addSurface(ExpectedResult::Transaction::PRESENTED, layer); @@ -275,15 +263,8 @@ TEST_F(LayerCallbackTest, MergeBufferNoColor) {          return;      } -    ui::Size bufferSize = getBufferSize(); - -    TransactionUtils::setFrame(transaction1, layer1, -                               Rect(0, 0, bufferSize.width, bufferSize.height), Rect(0, 0, 32, 32)); -    TransactionUtils::setFrame(transaction2, layer2, -                               Rect(0, 0, bufferSize.width, bufferSize.height), -                               Rect(32, 32, 64, 64)); - -    transaction2.merge(std::move(transaction1)).apply(); +    transaction1.setFrame(layer1, Rect(0, 0, 32, 32)); +    transaction2.setFrame(layer2, Rect(32, 32, 64, 64)).merge(std::move(transaction1)).apply();      ExpectedResult expected;      expected.addSurfaces(ExpectedResult::Transaction::PRESENTED, {layer1, layer2}); @@ -309,15 +290,8 @@ TEST_F(LayerCallbackTest, MergeNoBufferColor) {          return;      } -    ui::Size bufferSize = getBufferSize(); - -    TransactionUtils::setFrame(transaction1, layer1, -                               Rect(0, 0, bufferSize.width, bufferSize.height), Rect(0, 0, 32, 32)); -    TransactionUtils::setFrame(transaction2, layer2, -                               Rect(0, 0, bufferSize.width, bufferSize.height), -                               Rect(32, 32, 64, 64)); - -    transaction2.merge(std::move(transaction1)).apply(); +    transaction1.setFrame(layer1, Rect(0, 0, 32, 32)); +    transaction2.setFrame(layer2, Rect(32, 32, 64, 64)).merge(std::move(transaction1)).apply();      ExpectedResult expected;      expected.addSurfaces(ExpectedResult::Transaction::PRESENTED, {layer1, layer2}, @@ -344,15 +318,8 @@ TEST_F(LayerCallbackTest, MergeOneBufferOneColor) {          return;      } -    ui::Size bufferSize = getBufferSize(); - -    TransactionUtils::setFrame(transaction1, layer1, -                               Rect(0, 0, bufferSize.width, bufferSize.height), Rect(0, 0, 32, 32)); -    TransactionUtils::setFrame(transaction2, layer2, -                               Rect(0, 0, bufferSize.width, bufferSize.height), -                               Rect(32, 32, 64, 64)); - -    transaction2.merge(std::move(transaction1)).apply(); +    transaction1.setFrame(layer1, Rect(0, 0, 32, 32)); +    transaction2.setFrame(layer2, Rect(32, 32, 64, 64)).merge(std::move(transaction1)).apply();      ExpectedResult expected;      expected.addSurface(ExpectedResult::Transaction::PRESENTED, layer1); @@ -438,15 +405,8 @@ TEST_F(LayerCallbackTest, Merge_DifferentClients) {          return;      } -    ui::Size bufferSize = getBufferSize(); - -    TransactionUtils::setFrame(transaction1, layer1, -                               Rect(0, 0, bufferSize.width, bufferSize.height), Rect(0, 0, 32, 32)); -    TransactionUtils::setFrame(transaction2, layer2, -                               Rect(0, 0, bufferSize.width, bufferSize.height), -                               Rect(32, 32, 64, 64)); - -    transaction2.merge(std::move(transaction1)).apply(); +    transaction1.setFrame(layer1, Rect(0, 0, 32, 32)); +    transaction2.setFrame(layer2, Rect(32, 32, 64, 64)).merge(std::move(transaction1)).apply();      ExpectedResult expected;      expected.addSurfaces(ExpectedResult::Transaction::PRESENTED, {layer1, layer2}); @@ -531,11 +491,7 @@ TEST_F(LayerCallbackTest, MultipleTransactions_SameStateChange) {              }          } -        ui::Size bufferSize = getBufferSize(); -        TransactionUtils::setFrame(transaction, layer, -                                   Rect(0, 0, bufferSize.width, bufferSize.height), -                                   Rect(0, 0, 32, 32)); -        transaction.apply(); +        transaction.setFrame(layer, Rect(0, 0, 32, 32)).apply();          ExpectedResult expected;          expected.addSurface((i == 0) ? ExpectedResult::Transaction::PRESENTED @@ -567,16 +523,8 @@ TEST_F(LayerCallbackTest, MultipleTransactions_Merge) {              return;          } -        ui::Size bufferSize = getBufferSize(); - -        TransactionUtils::setFrame(transaction1, layer1, -                                   Rect(0, 0, bufferSize.width, bufferSize.height), -                                   Rect(0, 0, 32, 32)); -        TransactionUtils::setFrame(transaction2, layer2, -                                   Rect(0, 0, bufferSize.width, bufferSize.height), -                                   Rect(32, 32, 64, 64)); - -        transaction2.merge(std::move(transaction1)).apply(); +        transaction1.setFrame(layer1, Rect(0, 0, 32, 32)); +        transaction2.setFrame(layer2, Rect(32, 32, 64, 64)).merge(std::move(transaction1)).apply();          ExpectedResult expected;          expected.addSurfaces(ExpectedResult::Transaction::PRESENTED, {layer1, layer2}, @@ -616,16 +564,8 @@ TEST_F(LayerCallbackTest, MultipleTransactions_Merge_DifferentClients) {              return;          } -        ui::Size bufferSize = getBufferSize(); - -        TransactionUtils::setFrame(transaction1, layer1, -                                   Rect(0, 0, bufferSize.width, bufferSize.height), -                                   Rect(0, 0, 32, 32)); -        TransactionUtils::setFrame(transaction2, layer2, -                                   Rect(0, 0, bufferSize.width, bufferSize.height), -                                   Rect(32, 32, 64, 64)); - -        transaction2.merge(std::move(transaction1)).apply(); +        transaction1.setFrame(layer1, Rect(0, 0, 32, 32)); +        transaction2.setFrame(layer2, Rect(32, 32, 64, 64)).merge(std::move(transaction1)).apply();          ExpectedResult expected;          expected.addSurfaces(ExpectedResult::Transaction::PRESENTED, {layer1, layer2}, @@ -666,15 +606,8 @@ TEST_F(LayerCallbackTest, MultipleTransactions_Merge_DifferentClients_NoStateCha          return;      } -    ui::Size bufferSize = getBufferSize(); - -    TransactionUtils::setFrame(transaction1, layer1, -                               Rect(0, 0, bufferSize.width, bufferSize.height), Rect(0, 0, 32, 32)); -    TransactionUtils::setFrame(transaction2, layer2, -                               Rect(0, 0, bufferSize.width, bufferSize.height), -                               Rect(32, 32, 64, 64)); - -    transaction2.merge(std::move(transaction1)).apply(); +    transaction1.setFrame(layer1, Rect(0, 0, 32, 32)); +    transaction2.setFrame(layer2, Rect(32, 32, 64, 64)).merge(std::move(transaction1)).apply();      ExpectedResult expected;      expected.addSurfaces(ExpectedResult::Transaction::PRESENTED, {layer1, layer2}); @@ -728,15 +661,8 @@ TEST_F(LayerCallbackTest, MultipleTransactions_Merge_DifferentClients_SameStateC          return;      } -    ui::Size bufferSize = getBufferSize(); - -    TransactionUtils::setFrame(transaction1, layer1, -                               Rect(0, 0, bufferSize.width, bufferSize.height), Rect(0, 0, 32, 32)); -    TransactionUtils::setFrame(transaction2, layer2, -                               Rect(0, 0, bufferSize.width, bufferSize.height), -                               Rect(32, 32, 64, 64)); - -    transaction2.merge(std::move(transaction1)).apply(); +    transaction1.setFrame(layer1, Rect(0, 0, 32, 32)); +    transaction2.setFrame(layer2, Rect(32, 32, 64, 64)).merge(std::move(transaction1)).apply();      ExpectedResult expected;      expected.addSurfaces(ExpectedResult::Transaction::PRESENTED, {layer1, layer2}); @@ -756,10 +682,7 @@ TEST_F(LayerCallbackTest, MultipleTransactions_Merge_DifferentClients_SameStateC          return;      } -    TransactionUtils::setFrame(transaction2, layer2, -                               Rect(0, 0, bufferSize.width, bufferSize.height), -                               Rect(32, 32, 64, 64)); -    transaction2.merge(std::move(transaction1)).apply(); +    transaction2.setFrame(layer2, Rect(32, 32, 64, 64)).merge(std::move(transaction1)).apply();      expected.addSurface(ExpectedResult::Transaction::NOT_PRESENTED, layer2,                          ExpectedResult::Buffer::NOT_ACQUIRED); @@ -839,10 +762,7 @@ TEST_F(LayerCallbackTest, MultipleTransactions_SingleFrame_SameStateChange) {          return;      } -    ui::Size bufferSize = getBufferSize(); -    TransactionUtils::setFrame(transaction, layer, Rect(0, 0, bufferSize.width, bufferSize.height), -                               Rect(0, 0, 32, 32)); -    transaction.apply(); +    transaction.setFrame(layer, Rect(0, 0, 32, 32)).apply();      ExpectedResult expectedResult;      expectedResult.addSurface(ExpectedResult::Transaction::PRESENTED, layer); @@ -861,10 +781,7 @@ TEST_F(LayerCallbackTest, MultipleTransactions_SingleFrame_SameStateChange) {              return;          } -        TransactionUtils::setFrame(transaction, layer, -                                   Rect(0, 0, bufferSize.width, bufferSize.height), -                                   Rect(0, 0, 32, 32)); -        transaction.apply(); +        transaction.setFrame(layer, Rect(0, 0, 32, 32)).apply();      }      EXPECT_NO_FATAL_FAILURE(waitForCallbacks(callback, expectedResults, true));  } diff --git a/services/surfaceflinger/tests/LayerRenderTypeTransaction_test.cpp b/services/surfaceflinger/tests/LayerRenderTypeTransaction_test.cpp index 53d230abe7..7505e6ea9b 100644 --- a/services/surfaceflinger/tests/LayerRenderTypeTransaction_test.cpp +++ b/services/surfaceflinger/tests/LayerRenderTypeTransaction_test.cpp @@ -204,7 +204,11 @@ void LayerRenderTypeTransactionTest::setRelativeZBasicHelper(uint32_t layerType)              Transaction().setPosition(layerG, 16, 16).setRelativeLayer(layerG, layerR, 1).apply();              break;          case ISurfaceComposerClient::eFXSurfaceBufferState: -            Transaction().setPosition(layerG, 16, 16).setRelativeLayer(layerG, layerR, 1).apply(); +            Transaction() +                    .setFrame(layerR, Rect(0, 0, 32, 32)) +                    .setFrame(layerG, Rect(16, 16, 48, 48)) +                    .setRelativeLayer(layerG, layerR, 1) +                    .apply();              break;          default:              ASSERT_FALSE(true) << "Unsupported layer type"; @@ -256,9 +260,10 @@ void LayerRenderTypeTransactionTest::setRelativeZGroupHelper(uint32_t layerType)              break;          case ISurfaceComposerClient::eFXSurfaceBufferState:              Transaction() -                    .setPosition(layerG, 8, 8) +                    .setFrame(layerR, Rect(0, 0, 32, 32)) +                    .setFrame(layerG, Rect(8, 8, 40, 40))                      .setRelativeLayer(layerG, layerR, 3) -                    .setPosition(layerB, 16, 16) +                    .setFrame(layerB, Rect(16, 16, 48, 48))                      .setLayer(layerB, mLayerZBase + 2)                      .apply();              break; @@ -383,6 +388,7 @@ TEST_P(LayerRenderTypeTransactionTest, SetTransparentRegionHintBasic_BufferState      Transaction()              .setTransparentRegionHint(layer, Region(top))              .setBuffer(layer, buffer) +            .setFrame(layer, Rect(0, 0, 32, 32))              .apply();      {          SCOPED_TRACE("top transparent"); @@ -441,7 +447,7 @@ TEST_P(LayerRenderTypeTransactionTest, SetTransparentRegionHintOutOfBounds_Buffe      // check that transparent region hint is bound by the layer size      Transaction()              .setTransparentRegionHint(layerTransparent, Region(mDisplayRect)) -            .setPosition(layerR, 16, 16) +            .setFrame(layerR, Rect(16, 16, 48, 48))              .setLayer(layerR, mLayerZBase + 1)              .apply();      ASSERT_NO_FATAL_FAILURE( @@ -471,7 +477,8 @@ void LayerRenderTypeTransactionTest::setAlphaBasicHelper(uint32_t layerType) {              Transaction()                      .setAlpha(layer1, 0.25f)                      .setAlpha(layer2, 0.75f) -                    .setPosition(layer2, 16, 0) +                    .setFrame(layer1, Rect(0, 0, 32, 32)) +                    .setFrame(layer2, Rect(16, 0, 48, 32))                      .setLayer(layer2, mLayerZBase + 1)                      .apply();              break; @@ -566,7 +573,7 @@ void LayerRenderTypeTransactionTest::setBackgroundColorHelper(uint32_t layerType                  ASSERT_NO_FATAL_FAILURE(fillBufferStateLayerColor(layer, fillColor, width, height));                  expectedColor = fillColor;              } -            Transaction().setCrop(layer, Rect(0, 0, width, height)).apply(); +            Transaction().setFrame(layer, Rect(0, 0, width, height)).apply();              break;          default:              GTEST_FAIL() << "Unknown layer type in setBackgroundColorHelper"; @@ -842,39 +849,42 @@ TEST_P(LayerRenderTypeTransactionTest, SetMatrixBasic_BufferState) {      ASSERT_NO_FATAL_FAILURE(fillBufferStateLayerQuadrant(layer, 32, 32, Color::RED, Color::GREEN,                                                           Color::BLUE, Color::WHITE)); -    Transaction().setPosition(layer, 32, 32).setMatrix(layer, 1.0f, 0.0f, 0.0f, 1.0f).apply(); +    Transaction() +            .setMatrix(layer, 1.0f, 0.0f, 0.0f, 1.0f) +            .setFrame(layer, Rect(0, 0, 32, 32)) +            .apply();      {          SCOPED_TRACE("IDENTITY"); -        getScreenCapture()->expectQuadrant(Rect(32, 32, 64, 64), Color::RED, Color::GREEN, +        getScreenCapture()->expectQuadrant(Rect(0, 0, 32, 32), Color::RED, Color::GREEN,                                             Color::BLUE, Color::WHITE);      }      Transaction().setMatrix(layer, -1.0f, 0.0f, 0.0f, 1.0f).apply();      {          SCOPED_TRACE("FLIP_H"); -        getScreenCapture()->expectQuadrant(Rect(0, 32, 32, 64), Color::GREEN, Color::RED, -                                           Color::WHITE, Color::BLUE); +        getScreenCapture()->expectQuadrant(Rect(0, 0, 32, 32), Color::RED, Color::GREEN, +                                           Color::BLUE, Color::WHITE);      }      Transaction().setMatrix(layer, 1.0f, 0.0f, 0.0f, -1.0f).apply();      {          SCOPED_TRACE("FLIP_V"); -        getScreenCapture()->expectQuadrant(Rect(32, 0, 64, 32), Color::BLUE, Color::WHITE, -                                           Color::RED, Color::GREEN); +        getScreenCapture()->expectQuadrant(Rect(0, 0, 32, 32), Color::RED, Color::GREEN, +                                           Color::BLUE, Color::WHITE);      }      Transaction().setMatrix(layer, 0.0f, 1.0f, -1.0f, 0.0f).apply();      {          SCOPED_TRACE("ROT_90"); -        getScreenCapture()->expectQuadrant(Rect(0, 32, 32, 64), Color::BLUE, Color::RED, -                                           Color::WHITE, Color::GREEN); +        getScreenCapture()->expectQuadrant(Rect(0, 0, 32, 32), Color::RED, Color::GREEN, +                                           Color::BLUE, Color::WHITE);      }      Transaction().setMatrix(layer, 2.0f, 0.0f, 0.0f, 2.0f).apply();      {          SCOPED_TRACE("SCALE"); -        getScreenCapture()->expectQuadrant(Rect(32, 32, 96, 96), Color::RED, Color::GREEN, -                                           Color::BLUE, Color::WHITE, 1 /* tolerance */); +        getScreenCapture()->expectQuadrant(Rect(0, 0, 32, 32), Color::RED, Color::GREEN, +                                           Color::BLUE, Color::WHITE);      }  } @@ -945,8 +955,8 @@ TEST_P(LayerRenderTypeTransactionTest, SetCropBasic_BufferState) {      Transaction().setCrop(layer, crop).apply();      auto shot = getScreenCapture(); -    shot->expectColor(crop, Color::RED); -    shot->expectBorder(crop, Color::BLACK); +    shot->expectColor(Rect(0, 0, mDisplayWidth, mDisplayHeight), Color::RED); +    shot->expectBorder(Rect(0, 0, mDisplayWidth, mDisplayHeight), Color::BLACK);  }  TEST_P(LayerRenderTypeTransactionTest, SetCropEmpty_BufferQueue) { @@ -976,13 +986,13 @@ TEST_P(LayerRenderTypeTransactionTest, SetCropEmpty_BufferState) {      {          SCOPED_TRACE("empty rect");          Transaction().setCrop(layer, Rect(8, 8, 8, 8)).apply(); -        getScreenCapture()->expectColor(Rect(0, 0, 32, 32), Color::RED); +        getScreenCapture()->expectColor(Rect(0, 0, mDisplayWidth, mDisplayHeight), Color::RED);      }      {          SCOPED_TRACE("negative rect");          Transaction().setCrop(layer, Rect(8, 8, 0, 0)).apply(); -        getScreenCapture()->expectColor(Rect(0, 0, 32, 32), Color::RED); +        getScreenCapture()->expectColor(Rect(0, 0, mDisplayWidth, mDisplayHeight), Color::RED);      }  } @@ -1006,6 +1016,8 @@ TEST_P(LayerRenderTypeTransactionTest, SetCropOutOfBounds_BufferState) {      TransactionUtils::fillGraphicBufferColor(buffer, Rect(0, 0, 32, 16), Color::BLUE);      TransactionUtils::fillGraphicBufferColor(buffer, Rect(0, 16, 32, 64), Color::RED); +    Transaction().setFrame(layer, Rect(0, 0, 64, 64)).apply(); +      Transaction().setBuffer(layer, buffer).apply();      // Partially out of bounds in the negative (upper left) direction @@ -1013,8 +1025,8 @@ TEST_P(LayerRenderTypeTransactionTest, SetCropOutOfBounds_BufferState) {      {          SCOPED_TRACE("out of bounds, negative (upper left) direction");          auto shot = getScreenCapture(); -        shot->expectColor(Rect(0, 0, 32, 16), Color::BLUE); -        shot->expectBorder(Rect(0, 0, 32, 16), Color::BLACK); +        shot->expectColor(Rect(0, 0, 64, 64), Color::BLUE); +        shot->expectBorder(Rect(0, 0, 64, 64), Color::BLACK);      }      // Partially out of bounds in the positive (lower right) direction @@ -1022,8 +1034,8 @@ TEST_P(LayerRenderTypeTransactionTest, SetCropOutOfBounds_BufferState) {      {          SCOPED_TRACE("out of bounds, positive (lower right) direction");          auto shot = getScreenCapture(); -        shot->expectColor(Rect(0, 16, 32, 64), Color::RED); -        shot->expectBorder(Rect(0, 16, 32, 64), Color::BLACK); +        shot->expectColor(Rect(0, 0, 64, 64), Color::RED); +        shot->expectBorder(Rect(0, 0, 64, 64), Color::BLACK);      }      // Fully out of buffer space bounds @@ -1031,7 +1043,9 @@ TEST_P(LayerRenderTypeTransactionTest, SetCropOutOfBounds_BufferState) {      {          SCOPED_TRACE("Fully out of bounds");          auto shot = getScreenCapture(); -        shot->expectColor(Rect(0, 0, 64, 64), Color::BLACK); +        shot->expectColor(Rect(0, 0, 64, 16), Color::BLUE); +        shot->expectColor(Rect(0, 16, 64, 64), Color::RED); +        shot->expectBorder(Rect(0, 0, 64, 64), Color::BLACK);      }  } @@ -1054,11 +1068,12 @@ TEST_P(LayerRenderTypeTransactionTest, SetCropWithTranslation_BufferState) {              layer = createLayer("test", 32, 32, ISurfaceComposerClient::eFXSurfaceBufferState));      ASSERT_NO_FATAL_FAILURE(fillBufferStateLayerColor(layer, Color::RED, 32, 32)); +    const Rect frame(32, 32, 64, 64);      const Rect crop(8, 8, 24, 24); -    Transaction().setPosition(layer, 32, 32).setCrop(layer, crop).apply(); +    Transaction().setFrame(layer, frame).setCrop(layer, crop).apply();      auto shot = getScreenCapture(); -    shot->expectColor(Rect(40, 40, 56, 56), Color::RED); -    shot->expectBorder(Rect(40, 40, 56, 56), Color::BLACK); +    shot->expectColor(frame, Color::RED); +    shot->expectBorder(frame, Color::BLACK);  }  TEST_P(LayerRenderTypeTransactionTest, SetCropWithScale_BufferQueue) { @@ -1106,10 +1121,7 @@ TEST_P(LayerRenderTypeTransactionTest, SetFrameBasic_BufferState) {      ASSERT_NO_FATAL_FAILURE(fillBufferStateLayerColor(layer, Color::RED, 32, 32));      const Rect frame(8, 8, 24, 24); -    Transaction t; -    TransactionUtils::setFrame(t, layer, Rect(0, 0, 32, 32), frame); -    t.apply(); - +    Transaction().setFrame(layer, frame).apply();      auto shot = getScreenCapture();      shot->expectColor(frame, Color::RED);      shot->expectBorder(frame, Color::BLACK); @@ -1121,23 +1133,16 @@ TEST_P(LayerRenderTypeTransactionTest, SetFrameEmpty_BufferState) {              layer = createLayer("test", 32, 32, ISurfaceComposerClient::eFXSurfaceBufferState));      ASSERT_NO_FATAL_FAILURE(fillBufferStateLayerColor(layer, Color::RED, 32, 32)); -    Transaction t;      {          SCOPED_TRACE("empty rect"); -        TransactionUtils::setFrame(t, layer, Rect(0, 0, 32, 32), Rect(8, 8, 8, 8)); -        t.apply(); - +        Transaction().setFrame(layer, Rect(8, 8, 8, 8)).apply();          getScreenCapture()->expectColor(Rect(0, 0, 32, 32), Color::BLACK);      }      {          SCOPED_TRACE("negative rect"); -        TransactionUtils::setFrame(t, layer, Rect(0, 0, 32, 32), Rect(8, 8, 0, 0)); -        t.apply(); - -        auto shot = getScreenCapture(); -        shot->expectColor(Rect(0, 0, 8, 8), Color::RED); -        shot->expectBorder(Rect(0, 0, 8, 8), Color::BLACK); +        Transaction().setFrame(layer, Rect(8, 8, 0, 0)).apply(); +        getScreenCapture()->expectColor(Rect(0, 0, 32, 32), Color::BLACK);      }  } @@ -1147,10 +1152,10 @@ TEST_P(LayerRenderTypeTransactionTest, SetFrameDefaultParentless_BufferState) {              layer = createLayer("test", 32, 32, ISurfaceComposerClient::eFXSurfaceBufferState));      ASSERT_NO_FATAL_FAILURE(fillBufferStateLayerColor(layer, Color::RED, 10, 10)); -    // A layer with a buffer will have a computed size that matches the buffer size. +    // A parentless layer will default to a frame with the same size as the buffer      auto shot = getScreenCapture(); -    shot->expectColor(Rect(0, 0, 10, 10), Color::RED); -    shot->expectBorder(Rect(0, 0, 10, 10), Color::BLACK); +    shot->expectColor(Rect(0, 0, mDisplayWidth, mDisplayHeight), Color::RED); +    shot->expectBorder(Rect(0, 0, mDisplayWidth, mDisplayHeight), Color::BLACK);  }  TEST_P(LayerRenderTypeTransactionTest, SetFrameDefaultBSParent_BufferState) { @@ -1158,16 +1163,17 @@ TEST_P(LayerRenderTypeTransactionTest, SetFrameDefaultBSParent_BufferState) {      ASSERT_NO_FATAL_FAILURE(              parent = createLayer("test", 32, 32, ISurfaceComposerClient::eFXSurfaceBufferState));      ASSERT_NO_FATAL_FAILURE(fillBufferStateLayerColor(parent, Color::RED, 32, 32)); +    Transaction().setFrame(parent, Rect(0, 0, 32, 32)).apply();      ASSERT_NO_FATAL_FAILURE( -            child = createLayer("test", 10, 10, ISurfaceComposerClient::eFXSurfaceBufferState)); +            child = createLayer("test", 32, 32, ISurfaceComposerClient::eFXSurfaceBufferState));      ASSERT_NO_FATAL_FAILURE(fillBufferStateLayerColor(child, Color::BLUE, 10, 10));      Transaction().reparent(child, parent).apply(); -    // A layer with a buffer will have a computed size that matches the buffer size. +    // A layer will default to the frame of its parent      auto shot = getScreenCapture(); -    shot->expectColor(Rect(0, 0, 10, 10), Color::BLUE); +    shot->expectColor(Rect(0, 0, 32, 32), Color::BLUE);      shot->expectBorder(Rect(0, 0, 32, 32), Color::BLACK);  } @@ -1177,14 +1183,14 @@ TEST_P(LayerRenderTypeTransactionTest, SetFrameDefaultBQParent_BufferState) {      ASSERT_NO_FATAL_FAILURE(fillBufferQueueLayerColor(parent, Color::RED, 32, 32));      ASSERT_NO_FATAL_FAILURE( -            child = createLayer("test", 10, 10, ISurfaceComposerClient::eFXSurfaceBufferState)); +            child = createLayer("test", 32, 32, ISurfaceComposerClient::eFXSurfaceBufferState));      ASSERT_NO_FATAL_FAILURE(fillBufferStateLayerColor(child, Color::BLUE, 10, 10));      Transaction().reparent(child, parent).apply(); -    // A layer with a buffer will have a computed size that matches the buffer size. +    // A layer will default to the frame of its parent      auto shot = getScreenCapture(); -    shot->expectColor(Rect(0, 0, 10, 10), Color::BLUE); +    shot->expectColor(Rect(0, 0, 32, 32), Color::BLUE);      shot->expectBorder(Rect(0, 0, 32, 32), Color::BLACK);  } @@ -1193,10 +1199,11 @@ TEST_P(LayerRenderTypeTransactionTest, SetFrameUpdate_BufferState) {      ASSERT_NO_FATAL_FAILURE(              layer = createLayer("test", 32, 32, ISurfaceComposerClient::eFXSurfaceBufferState));      ASSERT_NO_FATAL_FAILURE(fillBufferStateLayerColor(layer, Color::RED, 32, 32)); +    Transaction().setFrame(layer, Rect(0, 0, 32, 32)).apply();      std::this_thread::sleep_for(500ms); -    Transaction().setPosition(layer, 16, 16).apply(); +    Transaction().setFrame(layer, Rect(16, 16, 48, 48)).apply();      auto shot = getScreenCapture();      shot->expectColor(Rect(16, 16, 48, 48), Color::RED); @@ -1208,20 +1215,18 @@ TEST_P(LayerRenderTypeTransactionTest, SetFrameOutsideBounds_BufferState) {      ASSERT_NO_FATAL_FAILURE(              parent = createLayer("test", 32, 32, ISurfaceComposerClient::eFXSurfaceBufferState));      ASSERT_NO_FATAL_FAILURE( -            child = createLayer("test", 10, 10, ISurfaceComposerClient::eFXSurfaceBufferState)); +            child = createLayer("test", 32, 32, ISurfaceComposerClient::eFXSurfaceBufferState));      Transaction().reparent(child, parent).apply();      ASSERT_NO_FATAL_FAILURE(fillBufferStateLayerColor(parent, Color::RED, 32, 32)); +    Transaction().setFrame(parent, Rect(0, 0, 32, 32)).apply();      ASSERT_NO_FATAL_FAILURE(fillBufferStateLayerColor(child, Color::BLUE, 10, 10)); -    Rect childDst(0, 16, 32, 32); -    Transaction t; -    TransactionUtils::setFrame(t, child, Rect(0, 0, 10, 10), childDst); -    t.apply(); +    Transaction().setFrame(child, Rect(0, 16, 32, 32)).apply();      auto shot = getScreenCapture();      shot->expectColor(Rect(0, 0, 32, 16), Color::RED); -    shot->expectColor(childDst, Color::BLUE); +    shot->expectColor(Rect(0, 16, 32, 32), Color::BLUE);      shot->expectBorder(Rect(0, 0, 32, 32), Color::BLACK);  } @@ -1233,8 +1238,8 @@ TEST_P(LayerRenderTypeTransactionTest, SetBufferBasic_BufferState) {      ASSERT_NO_FATAL_FAILURE(fillBufferStateLayerColor(layer, Color::RED, 32, 32));      auto shot = getScreenCapture(); -    shot->expectColor(Rect(0, 0, 32, 32), Color::RED); -    shot->expectBorder(Rect(0, 0, 32, 32), Color::BLACK); +    shot->expectColor(Rect(0, 0, mDisplayWidth, mDisplayHeight), Color::RED); +    shot->expectBorder(Rect(0, 0, mDisplayWidth, mDisplayHeight), Color::BLACK);  }  TEST_P(LayerRenderTypeTransactionTest, SetBufferMultipleBuffers_BufferState) { @@ -1247,8 +1252,8 @@ TEST_P(LayerRenderTypeTransactionTest, SetBufferMultipleBuffers_BufferState) {      {          SCOPED_TRACE("set buffer 1");          auto shot = getScreenCapture(); -        shot->expectColor(Rect(0, 0, 32, 32), Color::RED); -        shot->expectBorder(Rect(0, 0, 32, 32), Color::BLACK); +        shot->expectColor(Rect(0, 0, mDisplayWidth, mDisplayHeight), Color::RED); +        shot->expectBorder(Rect(0, 0, mDisplayWidth, mDisplayHeight), Color::BLACK);      }      ASSERT_NO_FATAL_FAILURE(fillBufferStateLayerColor(layer, Color::BLUE, 32, 32)); @@ -1256,8 +1261,8 @@ TEST_P(LayerRenderTypeTransactionTest, SetBufferMultipleBuffers_BufferState) {      {          SCOPED_TRACE("set buffer 2");          auto shot = getScreenCapture(); -        shot->expectColor(Rect(0, 0, 32, 32), Color::BLUE); -        shot->expectBorder(Rect(0, 0, 32, 32), Color::BLACK); +        shot->expectColor(Rect(0, 0, mDisplayWidth, mDisplayHeight), Color::BLUE); +        shot->expectBorder(Rect(0, 0, mDisplayWidth, mDisplayHeight), Color::BLACK);      }      ASSERT_NO_FATAL_FAILURE(fillBufferStateLayerColor(layer, Color::RED, 32, 32)); @@ -1265,8 +1270,8 @@ TEST_P(LayerRenderTypeTransactionTest, SetBufferMultipleBuffers_BufferState) {      {          SCOPED_TRACE("set buffer 3");          auto shot = getScreenCapture(); -        shot->expectColor(Rect(0, 0, 32, 32), Color::RED); -        shot->expectBorder(Rect(0, 0, 32, 32), Color::BLACK); +        shot->expectColor(Rect(0, 0, mDisplayWidth, mDisplayHeight), Color::RED); +        shot->expectBorder(Rect(0, 0, mDisplayWidth, mDisplayHeight), Color::BLACK);      }  } @@ -1281,6 +1286,7 @@ TEST_P(LayerRenderTypeTransactionTest, SetBufferMultipleLayers_BufferState) {      ASSERT_NO_FATAL_FAILURE(fillBufferStateLayerColor(layer1, Color::RED, 64, 64)); +    Transaction().setFrame(layer1, Rect(0, 0, 64, 64)).apply();      {          SCOPED_TRACE("set layer 1 buffer red");          auto shot = getScreenCapture(); @@ -1289,6 +1295,7 @@ TEST_P(LayerRenderTypeTransactionTest, SetBufferMultipleLayers_BufferState) {      ASSERT_NO_FATAL_FAILURE(fillBufferStateLayerColor(layer2, Color::BLUE, 32, 32)); +    Transaction().setFrame(layer2, Rect(0, 0, 32, 32)).apply();      {          SCOPED_TRACE("set layer 2 buffer blue");          auto shot = getScreenCapture(); @@ -1343,8 +1350,8 @@ TEST_P(LayerRenderTypeTransactionTest, SetBufferCaching_BufferState) {              Color color = colors[idx % colors.size()];              auto shot = screenshot(); -            shot->expectColor(Rect(0, 0, 32, 32), color); -            shot->expectBorder(Rect(0, 0, 32, 32), Color::BLACK); +            shot->expectColor(Rect(0, 0, mDisplayWidth, mDisplayHeight), color); +            shot->expectBorder(Rect(0, 0, mDisplayWidth, mDisplayHeight), Color::BLACK);          }          idx++;      } @@ -1376,8 +1383,8 @@ TEST_P(LayerRenderTypeTransactionTest, SetBufferCaching_LeastRecentlyUsed_Buffer              Color color = colors[idx % colors.size()];              auto shot = screenshot(); -            shot->expectColor(Rect(0, 0, 32, 32), color); -            shot->expectBorder(Rect(0, 0, 32, 32), Color::BLACK); +            shot->expectColor(Rect(0, 0, mDisplayWidth, mDisplayHeight), color); +            shot->expectBorder(Rect(0, 0, mDisplayWidth, mDisplayHeight), Color::BLACK);          }          idx++;      } @@ -1409,8 +1416,8 @@ TEST_P(LayerRenderTypeTransactionTest, SetBufferCaching_DestroyedBuffer_BufferSt              Color color = colors[idx % colors.size()];              auto shot = screenshot(); -            shot->expectColor(Rect(0, 0, 32, 32), color); -            shot->expectBorder(Rect(0, 0, 32, 32), Color::BLACK); +            shot->expectColor(Rect(0, 0, mDisplayWidth, mDisplayHeight), color); +            shot->expectBorder(Rect(0, 0, mDisplayWidth, mDisplayHeight), Color::BLACK);          }          if (idx == 0) {              buffers[0].clear(); @@ -1428,6 +1435,7 @@ TEST_P(LayerRenderTypeTransactionTest, SetTransformRotate90_BufferState) {                                                           Color::BLUE, Color::WHITE));      Transaction() +            .setFrame(layer, Rect(0, 0, 32, 32))              .setTransform(layer, NATIVE_WINDOW_TRANSFORM_ROT_90)              .apply(); @@ -1444,6 +1452,7 @@ TEST_P(LayerRenderTypeTransactionTest, SetTransformFlipH_BufferState) {                                                           Color::BLUE, Color::WHITE));      Transaction() +            .setFrame(layer, Rect(0, 0, 32, 32))              .setTransform(layer, NATIVE_WINDOW_TRANSFORM_FLIP_H)              .apply(); @@ -1460,6 +1469,7 @@ TEST_P(LayerRenderTypeTransactionTest, SetTransformFlipV_BufferState) {                                                           Color::BLUE, Color::WHITE));      Transaction() +            .setFrame(layer, Rect(0, 0, 32, 32))              .setTransform(layer, NATIVE_WINDOW_TRANSFORM_FLIP_V)              .apply(); @@ -1508,8 +1518,8 @@ TEST_P(LayerRenderTypeTransactionTest, SetFenceNull_BufferState) {      Transaction().setBuffer(layer, buffer).setAcquireFence(layer, fence).apply();      auto shot = getScreenCapture(); -    shot->expectColor(Rect(0, 0, 32, 32), Color::RED); -    shot->expectBorder(Rect(0, 0, 32, 32), Color::BLACK); +    shot->expectColor(Rect(0, 0, mDisplayWidth, mDisplayHeight), Color::RED); +    shot->expectBorder(Rect(0, 0, mDisplayWidth, mDisplayHeight), Color::BLACK);  }  TEST_P(LayerRenderTypeTransactionTest, SetDataspaceBasic_BufferState) { @@ -1524,8 +1534,8 @@ TEST_P(LayerRenderTypeTransactionTest, SetDataspaceBasic_BufferState) {      Transaction().setBuffer(layer, buffer).setDataspace(layer, ui::Dataspace::UNKNOWN).apply();      auto shot = getScreenCapture(); -    shot->expectColor(Rect(0, 0, 32, 32), Color::RED); -    shot->expectBorder(Rect(0, 0, 32, 32), Color::BLACK); +    shot->expectColor(Rect(0, 0, mDisplayWidth, mDisplayHeight), Color::RED); +    shot->expectBorder(Rect(0, 0, mDisplayWidth, mDisplayHeight), Color::BLACK);  }  TEST_P(LayerRenderTypeTransactionTest, SetHdrMetadataBasic_BufferState) { @@ -1542,8 +1552,8 @@ TEST_P(LayerRenderTypeTransactionTest, SetHdrMetadataBasic_BufferState) {      Transaction().setBuffer(layer, buffer).setHdrMetadata(layer, hdrMetadata).apply();      auto shot = getScreenCapture(); -    shot->expectColor(Rect(0, 0, 32, 32), Color::RED); -    shot->expectBorder(Rect(0, 0, 32, 32), Color::BLACK); +    shot->expectColor(Rect(0, 0, mDisplayWidth, mDisplayHeight), Color::RED); +    shot->expectBorder(Rect(0, 0, mDisplayWidth, mDisplayHeight), Color::BLACK);  }  TEST_P(LayerRenderTypeTransactionTest, SetSurfaceDamageRegionBasic_BufferState) { @@ -1560,8 +1570,8 @@ TEST_P(LayerRenderTypeTransactionTest, SetSurfaceDamageRegionBasic_BufferState)      Transaction().setBuffer(layer, buffer).setSurfaceDamageRegion(layer, region).apply();      auto shot = getScreenCapture(); -    shot->expectColor(Rect(0, 0, 32, 32), Color::RED); -    shot->expectBorder(Rect(0, 0, 32, 32), Color::BLACK); +    shot->expectColor(Rect(0, 0, mDisplayWidth, mDisplayHeight), Color::RED); +    shot->expectBorder(Rect(0, 0, mDisplayWidth, mDisplayHeight), Color::BLACK);  }  TEST_P(LayerRenderTypeTransactionTest, SetApiBasic_BufferState) { @@ -1576,8 +1586,8 @@ TEST_P(LayerRenderTypeTransactionTest, SetApiBasic_BufferState) {      Transaction().setBuffer(layer, buffer).setApi(layer, NATIVE_WINDOW_API_CPU).apply();      auto shot = getScreenCapture(); -    shot->expectColor(Rect(0, 0, 32, 32), Color::RED); -    shot->expectBorder(Rect(0, 0, 32, 32), Color::BLACK); +    shot->expectColor(Rect(0, 0, mDisplayWidth, mDisplayHeight), Color::RED); +    shot->expectBorder(Rect(0, 0, mDisplayWidth, mDisplayHeight), Color::BLACK);  }  TEST_P(LayerRenderTypeTransactionTest, SetColorTransformBasic) { diff --git a/services/surfaceflinger/tests/LayerTransactionTest.h b/services/surfaceflinger/tests/LayerTransactionTest.h index 0bc8fe7aa0..87c7b7d829 100644 --- a/services/surfaceflinger/tests/LayerTransactionTest.h +++ b/services/surfaceflinger/tests/LayerTransactionTest.h @@ -244,11 +244,6 @@ protected:          return bufferGenerator.get(outBuffer, outFence);      } -    static ui::Size getBufferSize() { -        static BufferGenerator bufferGenerator; -        return bufferGenerator.getSize(); -    } -      sp<SurfaceComposerClient> mClient;      bool deviceSupportsBlurs() { diff --git a/services/surfaceflinger/tests/LayerTypeAndRenderTypeTransaction_test.cpp b/services/surfaceflinger/tests/LayerTypeAndRenderTypeTransaction_test.cpp index edf55ea6ef..ac5e297e43 100644 --- a/services/surfaceflinger/tests/LayerTypeAndRenderTypeTransaction_test.cpp +++ b/services/surfaceflinger/tests/LayerTypeAndRenderTypeTransaction_test.cpp @@ -196,7 +196,17 @@ TEST_P(LayerTypeAndRenderTypeTransactionTest, SetCornerRadius) {      ASSERT_NO_FATAL_FAILURE(layer = createLayer("test", size, size));      ASSERT_NO_FATAL_FAILURE(fillLayerColor(layer, Color::RED, size, size)); -    Transaction().setCornerRadius(layer, cornerRadius).apply(); +    if (mLayerType == ISurfaceComposerClient::eFXSurfaceBufferQueue) { +        Transaction() +                .setCornerRadius(layer, cornerRadius) +                .setCrop(layer, Rect(0, 0, size, size)) +                .apply(); +    } else { +        Transaction() +                .setCornerRadius(layer, cornerRadius) +                .setFrame(layer, Rect(0, 0, size, size)) +                .apply(); +    }      {          const uint8_t bottom = size - 1;          const uint8_t right = size - 1; @@ -224,13 +234,19 @@ TEST_P(LayerTypeAndRenderTypeTransactionTest, SetCornerRadiusRotated) {      ASSERT_NO_FATAL_FAILURE(child = createLayer("child", size, size));      ASSERT_NO_FATAL_FAILURE(fillLayerColor(child, Color::GREEN, size, size)); -    Transaction() -            .setCornerRadius(parent, cornerRadius) -            .reparent(child, parent) -            .setPosition(child, 0, size) -            // Rotate by half PI -            .setMatrix(child, 0.0f, -1.0f, 1.0f, 0.0f) -            .apply(); +    auto transaction = Transaction() +                               .setCornerRadius(parent, cornerRadius) +                               .setCrop(parent, Rect(0, 0, size, size)) +                               .reparent(child, parent) +                               .setPosition(child, 0, size) +                               // Rotate by half PI +                               .setMatrix(child, 0.0f, -1.0f, 1.0f, 0.0f); +    if (mLayerType == ISurfaceComposerClient::eFXSurfaceBufferQueue) { +        transaction.setCrop(parent, Rect(0, 0, size, size)); +    } else { +        transaction.setFrame(parent, Rect(0, 0, size, size)); +    } +    transaction.apply();      {          const uint8_t bottom = size - 1; @@ -259,12 +275,21 @@ TEST_P(LayerTypeAndRenderTypeTransactionTest, SetCornerRadiusChildCrop) {      ASSERT_NO_FATAL_FAILURE(child = createLayer("child", size, size / 2));      ASSERT_NO_FATAL_FAILURE(fillLayerColor(child, Color::GREEN, size, size / 2)); -    Transaction() -            .setCornerRadius(parent, cornerRadius) -            .reparent(child, parent) -            .setPosition(child, 0, size / 2) -            .apply(); - +    if (mLayerType == ISurfaceComposerClient::eFXSurfaceBufferQueue) { +        Transaction() +                .setCornerRadius(parent, cornerRadius) +                .setCrop(parent, Rect(0, 0, size, size)) +                .reparent(child, parent) +                .setPosition(child, 0, size / 2) +                .apply(); +    } else { +        Transaction() +                .setCornerRadius(parent, cornerRadius) +                .setFrame(parent, Rect(0, 0, size, size)) +                .reparent(child, parent) +                .setFrame(child, Rect(0, size / 2, size, size)) +                .apply(); +    }      {          const uint8_t bottom = size - 1;          const uint8_t right = size - 1; @@ -306,9 +331,12 @@ TEST_P(LayerTypeAndRenderTypeTransactionTest, SetBackgroundBlurRadiusSimple) {      Transaction()              .setLayer(greenLayer, mLayerZBase) +            .setFrame(leftLayer, {0, 0, canvasSize * 2, canvasSize * 2})              .setLayer(leftLayer, mLayerZBase + 1) +            .setFrame(leftLayer, leftRect)              .setLayer(rightLayer, mLayerZBase + 2)              .setPosition(rightLayer, rightRect.left, rightRect.top) +            .setFrame(rightLayer, rightRect)              .apply();      { @@ -324,6 +352,7 @@ TEST_P(LayerTypeAndRenderTypeTransactionTest, SetBackgroundBlurRadiusSimple) {              .setLayer(blurLayer, mLayerZBase + 3)              .setBackgroundBlurRadius(blurLayer, blurRadius)              .setCrop(blurLayer, blurRect) +            .setFrame(blurLayer, blurRect)              .setSize(blurLayer, blurRect.getWidth(), blurRect.getHeight())              .setAlpha(blurLayer, 0.0f)              .apply(); @@ -406,8 +435,10 @@ TEST_P(LayerTypeAndRenderTypeTransactionTest, SetBackgroundBlurAffectedByParentA      Transaction()              .setLayer(left, mLayerZBase + 1) +            .setFrame(left, {0, 0, size, size})              .setLayer(right, mLayerZBase + 2)              .setPosition(right, size, 0) +            .setFrame(right, {size, 0, size * 2, size})              .apply();      { @@ -426,6 +457,7 @@ TEST_P(LayerTypeAndRenderTypeTransactionTest, SetBackgroundBlurAffectedByParentA              .setAlpha(blurParent, 0.5)              .setLayer(blur, mLayerZBase + 4)              .setBackgroundBlurRadius(blur, size) // set the blur radius to the size of one rect +            .setFrame(blur, {0, 0, size * 2, size})              .reparent(blur, blurParent)              .apply(); diff --git a/services/surfaceflinger/tests/MirrorLayer_test.cpp b/services/surfaceflinger/tests/MirrorLayer_test.cpp index ccf434d63a..613b21ef04 100644 --- a/services/surfaceflinger/tests/MirrorLayer_test.cpp +++ b/services/surfaceflinger/tests/MirrorLayer_test.cpp @@ -195,7 +195,7 @@ TEST_F(MirrorLayerTest, MirrorBufferLayer) {              createLayer("BufferStateLayer", 200, 200, ISurfaceComposerClient::eFXSurfaceBufferState,                          mChildLayer.get());      fillBufferStateLayerColor(bufferStateLayer, Color::BLUE, 200, 200); -    Transaction().show(bufferStateLayer).apply(); +    Transaction().setFrame(bufferStateLayer, Rect(0, 0, 200, 200)).show(bufferStateLayer).apply();      {          SCOPED_TRACE("Initial Mirror BufferStateLayer"); diff --git a/services/surfaceflinger/tests/utils/TransactionUtils.h b/services/surfaceflinger/tests/utils/TransactionUtils.h index 8c448e2f96..3cbfed98f5 100644 --- a/services/surfaceflinger/tests/utils/TransactionUtils.h +++ b/services/surfaceflinger/tests/utils/TransactionUtils.h @@ -126,7 +126,7 @@ public:              const uint8_t* src = pixels + (outBuffer->getStride() * (y + j) + x) * 4;              for (int32_t i = 0; i < width; i++) {                  const uint8_t expected[4] = {color.r, color.g, color.b, color.a}; -                ASSERT_TRUE(std::equal(src, src + 4, expected, colorCompare)) +                EXPECT_TRUE(std::equal(src, src + 4, expected, colorCompare))                          << "pixel @ (" << x + i << ", " << y + j << "): "                          << "expected (" << color << "), "                          << "got (" << Color{src[0], src[1], src[2], src[3]} << ")"; @@ -161,22 +161,6 @@ public:              ASSERT_EQ(NO_ERROR, s->unlockAndPost());          }      } - -    static void setFrame(Transaction& t, const sp<SurfaceControl>& sc, Rect source, Rect dest, -                         int32_t transform = 0) { -        uint32_t sourceWidth = source.getWidth(); -        uint32_t sourceHeight = source.getHeight(); - -        if (transform & ui::Transform::ROT_90) { -            std::swap(sourceWidth, sourceHeight); -        } - -        float dsdx = dest.getWidth() / static_cast<float>(sourceWidth); -        float dsdy = dest.getHeight() / static_cast<float>(sourceHeight); - -        t.setMatrix(sc, dsdx, 0, 0, dsdy); -        t.setPosition(sc, dest.left, dest.top); -    }  };  enum class RenderPath { SCREENSHOT, VIRTUAL_DISPLAY };  |