diff options
| author | 2021-04-20 00:42:31 +0000 | |
|---|---|---|
| committer | 2021-04-20 00:42:31 +0000 | |
| commit | 7d54b9ca2da6b284c53df8f08a22bd1dc1af37d8 (patch) | |
| tree | a112535ad876ff2218515c073a22bca70a5f6cf1 | |
| parent | f7891609c94da133f23706cdb262c32fa895eaa9 (diff) | |
| parent | 5b3b9146e0e038411fb72e411853d7d79d853ae5 (diff) | |
Merge "SurfaceFlinger: Prepare to remove BufferQueueLayer" into sc-dev
| -rw-r--r-- | libs/gui/BLASTBufferQueue.cpp | 6 | ||||
| -rw-r--r-- | libs/gui/SurfaceComposerClient.cpp | 9 | ||||
| -rw-r--r-- | libs/gui/SurfaceControl.cpp | 83 | ||||
| -rw-r--r-- | libs/gui/include/gui/SurfaceControl.h | 22 | ||||
| -rw-r--r-- | libs/gui/tests/BLASTBufferQueue_test.cpp | 118 | ||||
| -rw-r--r-- | services/surfaceflinger/SurfaceFlinger.cpp | 4 | ||||
| -rw-r--r-- | services/surfaceflinger/tests/Credentials_test.cpp | 19 | ||||
| -rw-r--r-- | services/surfaceflinger/tests/LayerRenderTypeTransaction_test.cpp | 131 | ||||
| -rw-r--r-- | services/surfaceflinger/tests/LayerTypeAndRenderTypeTransaction_test.cpp | 6 | ||||
| -rw-r--r-- | services/surfaceflinger/tests/LayerUpdate_test.cpp | 193 | ||||
| -rw-r--r-- | services/surfaceflinger/tests/ScreenCapture_test.cpp | 41 | ||||
| -rw-r--r-- | services/surfaceflinger/tests/SurfaceInterceptor_test.cpp | 25 | ||||
| -rw-r--r-- | services/surfaceflinger/tests/fakehwc/SFFakeHwc_test.cpp | 152 |
13 files changed, 117 insertions, 692 deletions
diff --git a/libs/gui/BLASTBufferQueue.cpp b/libs/gui/BLASTBufferQueue.cpp index 476617db48..e3b59b2584 100644 --- a/libs/gui/BLASTBufferQueue.cpp +++ b/libs/gui/BLASTBufferQueue.cpp @@ -161,9 +161,9 @@ BLASTBufferQueue::BLASTBufferQueue(const std::string& name, const sp<SurfaceCont mTransformHint = mSurfaceControl->getTransformHint(); mBufferItemConsumer->setTransformHint(mTransformHint); SurfaceComposerClient::Transaction() - .setFlags(surface, layer_state_t::eEnableBackpressure, - layer_state_t::eEnableBackpressure) - .apply(); + .setFlags(surface, layer_state_t::eEnableBackpressure, + layer_state_t::eEnableBackpressure) + .apply(); mNumAcquired = 0; mNumFrameAvailable = 0; diff --git a/libs/gui/SurfaceComposerClient.cpp b/libs/gui/SurfaceComposerClient.cpp index e6baba6e1d..6d198a105f 100644 --- a/libs/gui/SurfaceComposerClient.cpp +++ b/libs/gui/SurfaceComposerClient.cpp @@ -896,7 +896,7 @@ void SurfaceComposerClient::Transaction::setEarlyWakeupEnd() { } layer_state_t* SurfaceComposerClient::Transaction::getLayerState(const sp<SurfaceControl>& sc) { - auto handle = sc->getHandle(); + auto handle = sc->getLayerStateHandle(); if (mComposerStates.count(handle) == 0) { // we don't have it, add an initialized layer_state to our list @@ -1147,8 +1147,11 @@ SurfaceComposerClient::Transaction& SurfaceComposerClient::Transaction::reparent mStatus = BAD_INDEX; return *this; } + if (SurfaceControl::isSameSurface(sc, newParent)) { + return *this; + } s->what |= layer_state_t::eReparent; - s->parentSurfaceControlForChild = newParent; + s->parentSurfaceControlForChild = newParent ? newParent->getParentingLayer() : nullptr; registerSurfaceControlForCallback(sc); return *this; @@ -1793,7 +1796,7 @@ status_t SurfaceComposerClient::createSurfaceChecked(const String8& name, uint32 } ALOGE_IF(err, "SurfaceComposerClient::createSurface error %s", strerror(-err)); if (err == NO_ERROR) { - *outSurface = new SurfaceControl(this, handle, gbp, id, transformHint); + *outSurface = new SurfaceControl(this, handle, gbp, id, w, h, format, transformHint); } } return err; diff --git a/libs/gui/SurfaceControl.cpp b/libs/gui/SurfaceControl.cpp index 7e2f8f9d36..37750faa8f 100644 --- a/libs/gui/SurfaceControl.cpp +++ b/libs/gui/SurfaceControl.cpp @@ -35,6 +35,7 @@ #include <ui/StaticDisplayInfo.h> #include <gui/BufferQueueCore.h> +#include <gui/BLASTBufferQueue.h> #include <gui/ISurfaceComposer.h> #include <gui/Surface.h> #include <gui/SurfaceComposerClient.h> @@ -49,12 +50,17 @@ namespace android { SurfaceControl::SurfaceControl(const sp<SurfaceComposerClient>& client, const sp<IBinder>& handle, const sp<IGraphicBufferProducer>& gbp, int32_t layerId, - uint32_t transform) + uint32_t w, uint32_t h, PixelFormat format, uint32_t transform, + uint32_t flags) : mClient(client), mHandle(handle), mGraphicBufferProducer(gbp), mLayerId(layerId), - mTransformHint(transform) {} + mTransformHint(transform), + mWidth(w), + mHeight(h), + mFormat(format), + mCreateFlags(flags) {} SurfaceControl::SurfaceControl(const sp<SurfaceControl>& other) { mClient = other->mClient; @@ -62,6 +68,9 @@ SurfaceControl::SurfaceControl(const sp<SurfaceControl>& other) { mGraphicBufferProducer = other->mGraphicBufferProducer; mTransformHint = other->mTransformHint; mLayerId = other->mLayerId; + mWidth = other->mWidth; + mHeight = other->mHeight; + mCreateFlags = other->mCreateFlags; } SurfaceControl::~SurfaceControl() @@ -70,13 +79,13 @@ SurfaceControl::~SurfaceControl() // happen without delay, since these resources are quite heavy. mClient.clear(); mHandle.clear(); - mGraphicBufferProducer.clear(); + mBbq.clear(); IPCThreadState::self()->flushCommands(); } void SurfaceControl::disconnect() { - if (mGraphicBufferProducer != nullptr) { - mGraphicBufferProducer->disconnect( + if (getIGraphicBufferProducer() != nullptr) { + getIGraphicBufferProducer()->disconnect( BufferQueueCore::CURRENTLY_CONNECTED_API); } } @@ -118,21 +127,28 @@ status_t SurfaceControl::writeSurfaceToParcel( { sp<IGraphicBufferProducer> bp; if (control != nullptr) { - bp = control->mGraphicBufferProducer; + bp = control->getIGraphicBufferProducer(); } return parcel->writeStrongBinder(IInterface::asBinder(bp)); } -sp<Surface> SurfaceControl::generateSurfaceLocked() const +sp<Surface> SurfaceControl::generateSurfaceLocked() { + uint32_t ignore; + auto flags = mCreateFlags & (ISurfaceComposerClient::eCursorWindow | + ISurfaceComposerClient::eOpaque); + mBbqChild = mClient->createSurface(String8("bbq-wrapper"), 0, 0, mFormat, + flags, mHandle, {}, &ignore); + mBbq = new BLASTBufferQueue("bbq-adapter", mBbqChild, mWidth, mHeight, mFormat); + // This surface is always consumed by SurfaceFlinger, so the // producerControlledByApp value doesn't matter; using false. - mSurfaceData = new Surface(mGraphicBufferProducer, false); + mSurfaceData = mBbq->getSurface(true); return mSurfaceData; } -sp<Surface> SurfaceControl::getSurface() const +sp<Surface> SurfaceControl::getSurface() { Mutex::Autolock _l(mLock); if (mSurfaceData == nullptr) { @@ -141,25 +157,42 @@ sp<Surface> SurfaceControl::getSurface() const return mSurfaceData; } -sp<Surface> SurfaceControl::createSurface() const +sp<Surface> SurfaceControl::createSurface() { + return getSurface(); +} + +void SurfaceControl::updateDefaultBufferSize(uint32_t width, uint32_t height) { Mutex::Autolock _l(mLock); - return generateSurfaceLocked(); + mWidth = width; mHeight = height; + if (mBbq) { + mBbq->update(this, width, height, mFormat); + } + } -sp<IBinder> SurfaceControl::getHandle() const +sp<IBinder> SurfaceControl::getLayerStateHandle() const { return mHandle; } +sp<IBinder> SurfaceControl::getHandle() const { + if (mBbqChild != nullptr) { + return mBbqChild->getHandle(); + } + return getLayerStateHandle(); +} + int32_t SurfaceControl::getLayerId() const { return mLayerId; } -sp<IGraphicBufferProducer> SurfaceControl::getIGraphicBufferProducer() const +sp<IGraphicBufferProducer> SurfaceControl::getIGraphicBufferProducer() { + getSurface(); Mutex::Autolock _l(mLock); - return mGraphicBufferProducer; + + return mBbq->getIGraphicBufferProducer(); } sp<SurfaceComposerClient> SurfaceControl::getClient() const @@ -180,9 +213,11 @@ void SurfaceControl::setTransformHint(uint32_t hint) { status_t SurfaceControl::writeToParcel(Parcel& parcel) { SAFE_PARCEL(parcel.writeStrongBinder, ISurfaceComposerClient::asBinder(mClient->getClient())); SAFE_PARCEL(parcel.writeStrongBinder, mHandle); - SAFE_PARCEL(parcel.writeStrongBinder, IGraphicBufferProducer::asBinder(mGraphicBufferProducer)); SAFE_PARCEL(parcel.writeInt32, mLayerId); SAFE_PARCEL(parcel.writeUint32, mTransformHint); + SAFE_PARCEL(parcel.writeUint32, mWidth); + SAFE_PARCEL(parcel.writeUint32, mHeight); + SAFE_PARCEL(parcel.writeUint32, mFormat); return NO_ERROR; } @@ -191,21 +226,26 @@ status_t SurfaceControl::readFromParcel(const Parcel& parcel, sp<SurfaceControl>* outSurfaceControl) { sp<IBinder> client; sp<IBinder> handle; - sp<IBinder> gbp; int32_t layerId; uint32_t transformHint; + uint32_t width; + uint32_t height; + uint32_t format; SAFE_PARCEL(parcel.readStrongBinder, &client); SAFE_PARCEL(parcel.readStrongBinder, &handle); - SAFE_PARCEL(parcel.readNullableStrongBinder, &gbp); SAFE_PARCEL(parcel.readInt32, &layerId); SAFE_PARCEL(parcel.readUint32, &transformHint); + SAFE_PARCEL(parcel.readUint32, &width); + SAFE_PARCEL(parcel.readUint32, &height); + SAFE_PARCEL(parcel.readUint32, &format); // We aren't the original owner of the surface. *outSurfaceControl = new SurfaceControl(new SurfaceComposerClient( interface_cast<ISurfaceComposerClient>(client)), - handle.get(), interface_cast<IGraphicBufferProducer>(gbp), layerId, + handle.get(), nullptr, layerId, + width, height, format, transformHint); return NO_ERROR; @@ -233,5 +273,12 @@ status_t SurfaceControl::writeNullableToParcel(Parcel& parcel, return NO_ERROR; } +sp<SurfaceControl> SurfaceControl::getParentingLayer() { + if (mBbqChild != nullptr) { + return mBbqChild; + } + return this; +} + // ---------------------------------------------------------------------------- }; // namespace android diff --git a/libs/gui/include/gui/SurfaceControl.h b/libs/gui/include/gui/SurfaceControl.h index 35bdfc155d..9ee4636ae1 100644 --- a/libs/gui/include/gui/SurfaceControl.h +++ b/libs/gui/include/gui/SurfaceControl.h @@ -37,6 +37,7 @@ namespace android { class IGraphicBufferProducer; class Surface; class SurfaceComposerClient; +class BLASTBufferQueue; // --------------------------------------------------------------------------- @@ -70,12 +71,13 @@ public: static status_t writeSurfaceToParcel( const sp<SurfaceControl>& control, Parcel* parcel); - sp<Surface> getSurface() const; - sp<Surface> createSurface() const; + sp<Surface> getSurface(); + sp<Surface> createSurface(); sp<IBinder> getHandle() const; + sp<IBinder> getLayerStateHandle() const; int32_t getLayerId() const; - sp<IGraphicBufferProducer> getIGraphicBufferProducer() const; + sp<IGraphicBufferProducer> getIGraphicBufferProducer(); status_t clearLayerFrameStats() const; status_t getLayerFrameStats(FrameStats* outStats) const; @@ -85,12 +87,16 @@ public: uint32_t getTransformHint() const; void setTransformHint(uint32_t hint); + void updateDefaultBufferSize(uint32_t width, uint32_t height); explicit SurfaceControl(const sp<SurfaceControl>& other); SurfaceControl(const sp<SurfaceComposerClient>& client, const sp<IBinder>& handle, const sp<IGraphicBufferProducer>& gbp, int32_t layerId, - uint32_t transformHint = 0); + uint32_t width = 0, uint32_t height = 0, PixelFormat format = 0, + uint32_t transformHint = 0, uint32_t flags = 0); + + sp<SurfaceControl> getParentingLayer(); private: // can't be copied @@ -102,7 +108,7 @@ private: ~SurfaceControl(); - sp<Surface> generateSurfaceLocked() const; + sp<Surface> generateSurfaceLocked(); status_t validate() const; sp<SurfaceComposerClient> mClient; @@ -110,8 +116,14 @@ private: sp<IGraphicBufferProducer> mGraphicBufferProducer; mutable Mutex mLock; mutable sp<Surface> mSurfaceData; + mutable sp<BLASTBufferQueue> mBbq; + mutable sp<SurfaceControl> mBbqChild; int32_t mLayerId; uint32_t mTransformHint; + uint32_t mWidth; + uint32_t mHeight; + PixelFormat mFormat; + uint32_t mCreateFlags; }; }; // namespace android diff --git a/libs/gui/tests/BLASTBufferQueue_test.cpp b/libs/gui/tests/BLASTBufferQueue_test.cpp index 9b1f0db83b..a44f44fbe6 100644 --- a/libs/gui/tests/BLASTBufferQueue_test.cpp +++ b/libs/gui/tests/BLASTBufferQueue_test.cpp @@ -836,26 +836,6 @@ public: if (postedTime) *postedTime = systemTime(); igbProducer->queueBuffer(slot, input, qbOutput); } - - void createBufferQueueProducer(sp<IGraphicBufferProducer>* bqIgbp) { - mBufferQueueSurfaceControl = - mClient->createSurface(String8("BqSurface"), 0, 0, PIXEL_FORMAT_RGBA_8888, - ISurfaceComposerClient::eFXSurfaceBufferQueue); - ASSERT_NE(nullptr, mBufferQueueSurfaceControl.get()); - Transaction() - .setLayerStack(mBufferQueueSurfaceControl, 0) - .show(mBufferQueueSurfaceControl) - .setDataspace(mBufferQueueSurfaceControl, ui::Dataspace::V0_SRGB) - .setSize(mBufferQueueSurfaceControl, mDisplayWidth, mDisplayHeight) - .setLayer(mBufferQueueSurfaceControl, std::numeric_limits<int32_t>::max()) - .apply(); - - sp<Surface> bqSurface = mBufferQueueSurfaceControl->getSurface(); - ASSERT_NE(nullptr, bqSurface.get()); - - *bqIgbp = bqSurface->getIGraphicBufferProducer(); - setUpProducer(*bqIgbp); - } sp<SurfaceControl> mBufferQueueSurfaceControl; }; @@ -911,55 +891,6 @@ TEST_F(BLASTFrameEventHistoryTest, FrameEventHistory_Basic) { adapter.waitForCallbacks(); } -// Runs the same Frame Event History test -TEST_F(BLASTFrameEventHistoryTest, FrameEventHistory_Basic_BufferQueue) { - sp<IGraphicBufferProducer> bqIgbp; - createBufferQueueProducer(&bqIgbp); - - ProducerFrameEventHistory history; - IGraphicBufferProducer::QueueBufferOutput qbOutput; - nsecs_t requestedPresentTimeA = 0; - nsecs_t postedTimeA = 0; - setUpAndQueueBuffer(bqIgbp, &requestedPresentTimeA, &postedTimeA, &qbOutput, true); - history.applyDelta(qbOutput.frameTimestamps); - - FrameEvents* events = nullptr; - events = history.getFrame(1); - ASSERT_NE(nullptr, events); - ASSERT_EQ(1, events->frameNumber); - ASSERT_EQ(requestedPresentTimeA, events->requestedPresentTime); - ASSERT_GE(events->postedTime, postedTimeA); - - // wait for buffer to be presented - std::this_thread::sleep_for(200ms); - - nsecs_t requestedPresentTimeB = 0; - nsecs_t postedTimeB = 0; - setUpAndQueueBuffer(bqIgbp, &requestedPresentTimeB, &postedTimeB, &qbOutput, true); - history.applyDelta(qbOutput.frameTimestamps); - events = history.getFrame(1); - ASSERT_NE(nullptr, events); - - // frame number, requestedPresentTime, and postTime should not have changed - ASSERT_EQ(1, events->frameNumber); - ASSERT_EQ(requestedPresentTimeA, events->requestedPresentTime); - ASSERT_GE(events->postedTime, postedTimeA); - - ASSERT_GE(events->latchTime, postedTimeA); - ASSERT_FALSE(events->hasDequeueReadyInfo()); - - ASSERT_NE(nullptr, events->gpuCompositionDoneFence); - ASSERT_NE(nullptr, events->displayPresentFence); - ASSERT_NE(nullptr, events->releaseFence); - - // we should also have gotten the initial values for the next frame - events = history.getFrame(2); - ASSERT_NE(nullptr, events); - ASSERT_EQ(2, events->frameNumber); - ASSERT_EQ(requestedPresentTimeB, events->requestedPresentTime); - ASSERT_GE(events->postedTime, postedTimeB); -} - TEST_F(BLASTFrameEventHistoryTest, FrameEventHistory_DroppedFrame) { BLASTBufferQueueHelper adapter(mSurfaceControl, mDisplayWidth, mDisplayHeight); sp<IGraphicBufferProducer> igbProducer; @@ -1010,53 +941,4 @@ TEST_F(BLASTFrameEventHistoryTest, FrameEventHistory_DroppedFrame) { ASSERT_GE(events->postedTime, postedTimeB); } -TEST_F(BLASTFrameEventHistoryTest, FrameEventHistory_DroppedFrame_BufferQueue) { - sp<IGraphicBufferProducer> bqIgbp; - createBufferQueueProducer(&bqIgbp); - - ProducerFrameEventHistory history; - IGraphicBufferProducer::QueueBufferOutput qbOutput; - nsecs_t requestedPresentTimeA = 0; - nsecs_t postedTimeA = 0; - nsecs_t presentTimeDelay = std::chrono::nanoseconds(500ms).count(); - setUpAndQueueBuffer(bqIgbp, &requestedPresentTimeA, &postedTimeA, &qbOutput, true, - presentTimeDelay); - history.applyDelta(qbOutput.frameTimestamps); - - FrameEvents* events = nullptr; - events = history.getFrame(1); - ASSERT_NE(nullptr, events); - ASSERT_EQ(1, events->frameNumber); - ASSERT_EQ(requestedPresentTimeA, events->requestedPresentTime); - ASSERT_GE(events->postedTime, postedTimeA); - - // queue another buffer so the first can be dropped - nsecs_t requestedPresentTimeB = 0; - nsecs_t postedTimeB = 0; - setUpAndQueueBuffer(bqIgbp, &requestedPresentTimeB, &postedTimeB, &qbOutput, true); - history.applyDelta(qbOutput.frameTimestamps); - events = history.getFrame(1); - ASSERT_NE(nullptr, events); - - // frame number, requestedPresentTime, and postTime should not have changed - ASSERT_EQ(1, events->frameNumber); - ASSERT_EQ(requestedPresentTimeA, events->requestedPresentTime); - ASSERT_GE(events->postedTime, postedTimeA); - - // a valid latchtime should not be set - ASSERT_FALSE(events->hasLatchInfo()); - ASSERT_FALSE(events->hasDequeueReadyInfo()); - - ASSERT_NE(nullptr, events->gpuCompositionDoneFence); - ASSERT_NE(nullptr, events->displayPresentFence); - ASSERT_NE(nullptr, events->releaseFence); - - // we should also have gotten the initial values for the next frame - events = history.getFrame(2); - ASSERT_NE(nullptr, events); - ASSERT_EQ(2, events->frameNumber); - ASSERT_EQ(requestedPresentTimeB, events->requestedPresentTime); - ASSERT_GE(events->postedTime, postedTimeB); -} - } // namespace android diff --git a/services/surfaceflinger/SurfaceFlinger.cpp b/services/surfaceflinger/SurfaceFlinger.cpp index a4803df9f0..2f8685bb8c 100644 --- a/services/surfaceflinger/SurfaceFlinger.cpp +++ b/services/surfaceflinger/SurfaceFlinger.cpp @@ -4155,10 +4155,6 @@ status_t SurfaceFlinger::createLayer(const String8& name, const sp<Client>& clie switch (flags & ISurfaceComposerClient::eFXSurfaceMask) { case ISurfaceComposerClient::eFXSurfaceBufferQueue: - result = createBufferQueueLayer(client, std::move(uniqueName), w, h, flags, - std::move(metadata), format, handle, gbp, &layer); - - break; case ISurfaceComposerClient::eFXSurfaceBufferState: { result = createBufferStateLayer(client, std::move(uniqueName), w, h, flags, std::move(metadata), handle, &layer); diff --git a/services/surfaceflinger/tests/Credentials_test.cpp b/services/surfaceflinger/tests/Credentials_test.cpp index 6246321fab..fa3f0e7239 100644 --- a/services/surfaceflinger/tests/Credentials_test.cpp +++ b/services/surfaceflinger/tests/Credentials_test.cpp @@ -305,25 +305,6 @@ TEST_F(CredentialsTest, CaptureLayersTest) { /** * The following tests are for methods accessible directly through SurfaceFlinger. */ - -/** - * An app can pass a buffer queue to the media server and ask the media server to decode a DRM video - * to that buffer queue. The media server is the buffer producer in this case. Because the app may create - * its own buffer queue and act as the buffer consumer, the media server wants to be careful to avoid - * sending decoded video frames to the app. This is where authenticateSurfaceTexture call comes in, to check - * the consumer of a buffer queue is SurfaceFlinger. - */ -TEST_F(CredentialsTest, AuthenticateSurfaceTextureTest) { - setupBackgroundSurface(); - sp<IGraphicBufferProducer> producer = - mBGSurfaceControl->getSurface()->getIGraphicBufferProducer(); - sp<ISurfaceComposer> sf(ComposerService::getComposerService()); - - std::function<bool()> condition = [=]() { return sf->authenticateSurfaceTexture(producer); }; - // Anyone should be able to check if the consumer of the buffer queue is SF. - ASSERT_NO_FATAL_FAILURE(checkWithPrivileges(condition, true, true)); -} - TEST_F(CredentialsTest, GetLayerDebugInfo) { setupBackgroundSurface(); sp<ISurfaceComposer> sf(ComposerService::getComposerService()); diff --git a/services/surfaceflinger/tests/LayerRenderTypeTransaction_test.cpp b/services/surfaceflinger/tests/LayerRenderTypeTransaction_test.cpp index 53d230abe7..7581cd3af4 100644 --- a/services/surfaceflinger/tests/LayerRenderTypeTransaction_test.cpp +++ b/services/surfaceflinger/tests/LayerRenderTypeTransaction_test.cpp @@ -135,53 +135,6 @@ TEST_P(LayerRenderTypeTransactionTest, SetPositionPartiallyOutOfBounds_BufferQue } } -TEST_P(LayerRenderTypeTransactionTest, SetPositionWithResize_BufferQueue) { - sp<SurfaceControl> layer; - ASSERT_NO_FATAL_FAILURE(layer = createLayer("test", 32, 32)); - ASSERT_NO_FATAL_FAILURE(fillBufferQueueLayerColor(layer, Color::RED, 32, 32)); - - // setPosition is applied immediately by default, with or without resize - // pending - Transaction().setPosition(layer, 5, 10).setSize(layer, 64, 64).apply(); - { - SCOPED_TRACE("resize pending"); - auto shot = getScreenCapture(); - const Rect rect(5, 10, 37, 42); - shot->expectColor(rect, Color::RED); - shot->expectBorder(rect, Color::BLACK); - } - - ASSERT_NO_FATAL_FAILURE(fillBufferQueueLayerColor(layer, Color::RED, 64, 64)); - { - SCOPED_TRACE("resize applied"); - getScreenCapture()->expectColor(Rect(5, 10, 69, 74), Color::RED); - } -} - -TEST_P(LayerRenderTypeTransactionTest, SetSizeBasic_BufferQueue) { - sp<SurfaceControl> layer; - ASSERT_NO_FATAL_FAILURE(layer = createLayer("test", 32, 32)); - ASSERT_NO_FATAL_FAILURE(fillBufferQueueLayerColor(layer, Color::RED, 32, 32)); - - Transaction().setSize(layer, 64, 64).apply(); - { - SCOPED_TRACE("resize pending"); - auto shot = getScreenCapture(); - const Rect rect(0, 0, 32, 32); - shot->expectColor(rect, Color::RED); - shot->expectBorder(rect, Color::BLACK); - } - - ASSERT_NO_FATAL_FAILURE(fillBufferQueueLayerColor(layer, Color::RED, 64, 64)); - { - SCOPED_TRACE("resize applied"); - auto shot = getScreenCapture(); - const Rect rect(0, 0, 64, 64); - shot->expectColor(rect, Color::RED); - shot->expectBorder(rect, Color::BLACK); - } -} - TEST_P(LayerRenderTypeTransactionTest, CreateLayer_BufferState) { uint32_t transformHint = ui::Transform::ROT_INVALID; sp<SurfaceControl> layer; @@ -607,44 +560,6 @@ TEST_P(LayerRenderTypeTransactionTest, SetBackgroundColor_Color_NoEffect) { } TEST_P(LayerRenderTypeTransactionTest, - SetBackgroundColor_BufferQueue_BufferFill_NoPriorColor_Basic) { - bool priorColor = false; - bool bufferFill = true; - float alpha = 1.0f; - Color finalColor = Color::RED; - ASSERT_NO_FATAL_FAILURE(setBackgroundColorHelper(ISurfaceComposerClient::eFXSurfaceBufferQueue, - priorColor, bufferFill, alpha, finalColor)); -} - -TEST_P(LayerRenderTypeTransactionTest, - SetBackgroundColor_BufferQueue_NoBufferFill_NoPriorColor_Basic) { - bool priorColor = false; - bool bufferFill = false; - float alpha = 1.0f; - Color finalColor = Color::GREEN; - ASSERT_NO_FATAL_FAILURE(setBackgroundColorHelper(ISurfaceComposerClient::eFXSurfaceBufferQueue, - priorColor, bufferFill, alpha, finalColor)); -} - -TEST_P(LayerRenderTypeTransactionTest, SetBackgroundColor_BufferQueue_BufferFill_PriorColor_Basic) { - bool priorColor = true; - bool bufferFill = true; - float alpha = 1.0f; - Color finalColor = Color::RED; - ASSERT_NO_FATAL_FAILURE(setBackgroundColorHelper(ISurfaceComposerClient::eFXSurfaceBufferQueue, - priorColor, bufferFill, alpha, finalColor)); -} - -TEST_P(LayerRenderTypeTransactionTest, - SetBackgroundColor_BufferQueue_NoBufferFill_PriorColor_Basic) { - bool priorColor = true; - bool bufferFill = false; - float alpha = 1.0f; - Color finalColor = Color::GREEN; - ASSERT_NO_FATAL_FAILURE(setBackgroundColorHelper(ISurfaceComposerClient::eFXSurfaceBufferQueue, - priorColor, bufferFill, alpha, finalColor)); -} -TEST_P(LayerRenderTypeTransactionTest, SetBackgroundColor_BufferQueue_NoPriorColor_ZeroAlpha_NoEffect) { bool priorColor = false; bool bufferFill = false; @@ -901,29 +816,6 @@ TEST_P(LayerRenderTypeTransactionTest, SetMatrixRot45_BufferQueue) { shot->expectColor(get8x8Rect(2 * unit, 3 * unit), Color::WHITE); } -TEST_P(LayerRenderTypeTransactionTest, SetMatrixWithResize_BufferQueue) { - sp<SurfaceControl> layer; - ASSERT_NO_FATAL_FAILURE(layer = createLayer("test", 32, 32)); - ASSERT_NO_FATAL_FAILURE(fillBufferQueueLayerColor(layer, Color::RED, 32, 32)); - - // setMatrix is applied after any pending resize, unlike setPosition - Transaction().setMatrix(layer, 2.0f, 0.0f, 0.0f, 2.0f).setSize(layer, 64, 64).apply(); - { - SCOPED_TRACE("resize pending"); - auto shot = getScreenCapture(); - const Rect rect(0, 0, 32, 32); - shot->expectColor(rect, Color::RED); - shot->expectBorder(rect, Color::BLACK); - } - - ASSERT_NO_FATAL_FAILURE(fillBufferQueueLayerColor(layer, Color::RED, 64, 64)); - { - SCOPED_TRACE("resize applied"); - const Rect rect(0, 0, 128, 128); - getScreenCapture()->expectColor(rect, Color::RED); - } -} - TEST_P(LayerRenderTypeTransactionTest, SetCropBasic_BufferQueue) { sp<SurfaceControl> layer; ASSERT_NO_FATAL_FAILURE(layer = createLayer("test", 32, 32)); @@ -1076,29 +968,6 @@ TEST_P(LayerRenderTypeTransactionTest, SetCropWithScale_BufferQueue) { shot->expectBorder(Rect(16, 16, 48, 48), Color::BLACK); } -TEST_P(LayerRenderTypeTransactionTest, SetCropWithResize_BufferQueue) { - sp<SurfaceControl> layer; - ASSERT_NO_FATAL_FAILURE(layer = createLayer("test", 32, 32)); - ASSERT_NO_FATAL_FAILURE(fillBufferQueueLayerColor(layer, Color::RED, 32, 32)); - - // setCrop is applied immediately by default, with or without resize pending - Transaction().setCrop(layer, Rect(8, 8, 24, 24)).setSize(layer, 16, 16).apply(); - { - SCOPED_TRACE("resize pending"); - auto shot = getScreenCapture(); - shot->expectColor(Rect(8, 8, 24, 24), Color::RED); - shot->expectBorder(Rect(8, 8, 24, 24), Color::BLACK); - } - - ASSERT_NO_FATAL_FAILURE(fillBufferQueueLayerColor(layer, Color::RED, 16, 16)); - { - SCOPED_TRACE("resize applied"); - auto shot = getScreenCapture(); - shot->expectColor(Rect(8, 8, 16, 16), Color::RED); - shot->expectBorder(Rect(8, 8, 16, 16), Color::BLACK); - } -} - TEST_P(LayerRenderTypeTransactionTest, SetFrameBasic_BufferState) { sp<SurfaceControl> layer; ASSERT_NO_FATAL_FAILURE( diff --git a/services/surfaceflinger/tests/LayerTypeAndRenderTypeTransaction_test.cpp b/services/surfaceflinger/tests/LayerTypeAndRenderTypeTransaction_test.cpp index edf55ea6ef..2828d61a76 100644 --- a/services/surfaceflinger/tests/LayerTypeAndRenderTypeTransaction_test.cpp +++ b/services/surfaceflinger/tests/LayerTypeAndRenderTypeTransaction_test.cpp @@ -51,14 +51,9 @@ INSTANTIATE_TEST_CASE_P( LayerTypeAndRenderTypeTransactionTests, LayerTypeAndRenderTypeTransactionTest, ::testing::Combine( ::testing::Values( - static_cast<uint32_t>(ISurfaceComposerClient::eFXSurfaceBufferQueue), static_cast<uint32_t>(ISurfaceComposerClient::eFXSurfaceBufferState)), ::testing::Values(RenderPath::VIRTUAL_DISPLAY, RenderPath::SCREENSHOT))); -TEST_P(LayerTypeAndRenderTypeTransactionTest, SetSizeInvalid) { - // cannot test robustness against invalid sizes (zero or really huge) -} - TEST_P(LayerTypeAndRenderTypeTransactionTest, SetZBasic) { sp<SurfaceControl> layerR; sp<SurfaceControl> layerG; @@ -324,7 +319,6 @@ TEST_P(LayerTypeAndRenderTypeTransactionTest, SetBackgroundBlurRadiusSimple) { .setLayer(blurLayer, mLayerZBase + 3) .setBackgroundBlurRadius(blurLayer, blurRadius) .setCrop(blurLayer, blurRect) - .setSize(blurLayer, blurRect.getWidth(), blurRect.getHeight()) .setAlpha(blurLayer, 0.0f) .apply(); diff --git a/services/surfaceflinger/tests/LayerUpdate_test.cpp b/services/surfaceflinger/tests/LayerUpdate_test.cpp index adb5d58e8c..ee4d367f3d 100644 --- a/services/surfaceflinger/tests/LayerUpdate_test.cpp +++ b/services/surfaceflinger/tests/LayerUpdate_test.cpp @@ -127,15 +127,7 @@ protected: TransactionUtils::fillSurfaceRGBA8(mFGSurfaceControl, 195, 63, 63); waitForPostedBuffers(); } - void restoreInitialState() { - asTransaction([&](Transaction& t) { - t.setSize(mFGSurfaceControl, 64, 64); - t.setPosition(mFGSurfaceControl, 64, 64); - t.setCrop(mFGSurfaceControl, Rect(0, 0, 64, 64)); - }); - EXPECT_INITIAL_STATE("After restoring initial state"); - } std::unique_ptr<ScreenCapture> sc; }; @@ -462,191 +454,6 @@ TEST_F(ChildLayerTest, ChildrenRelativeZSurvivesParentDestruction) { } } -TEST_F(ChildLayerTest, ChildrenInheritNonTransformScalingFromParent) { - asTransaction([&](Transaction& t) { - t.show(mChild); - t.setPosition(mChild, 0, 0); - t.setPosition(mFGSurfaceControl, 0, 0); - }); - - { - mCapture = screenshot(); - // We've positioned the child in the top left. - mCapture->expectChildColor(0, 0); - // But it's only 10x15. - mCapture->expectFGColor(10, 15); - } - - asTransaction([&](Transaction& t) { - mFGSurfaceControl->getSurface()->setScalingMode( - NATIVE_WINDOW_SCALING_MODE_SCALE_TO_WINDOW); - // Resubmit buffer with new scaling mode - TransactionUtils::fillSurfaceRGBA8(mFGSurfaceControl, 195, 63, 63); - // We cause scaling by 2. - t.setSize(mFGSurfaceControl, 128, 128); - }); - - { - mCapture = screenshot(); - // We've positioned the child in the top left. - mCapture->expectChildColor(0, 0); - mCapture->expectChildColor(10, 10); - mCapture->expectChildColor(19, 29); - // And now it should be scaled all the way to 20x30 - mCapture->expectFGColor(20, 30); - } -} - -// Regression test for b/37673612 -TEST_F(ChildLayerTest, ChildrenWithParentBufferTransform) { - asTransaction([&](Transaction& t) { - t.show(mChild); - t.setPosition(mChild, 0, 0); - t.setPosition(mFGSurfaceControl, 0, 0); - }); - - { - mCapture = screenshot(); - // We've positioned the child in the top left. - mCapture->expectChildColor(0, 0); - mCapture->expectChildColor(9, 14); - // But it's only 10x15. - mCapture->expectFGColor(10, 15); - } - // We set things up as in b/37673612 so that there is a mismatch between the buffer size and - // the WM specified state size. - asTransaction([&](Transaction& t) { t.setSize(mFGSurfaceControl, 128, 64); }); - sp<Surface> s = mFGSurfaceControl->getSurface(); - auto anw = static_cast<ANativeWindow*>(s.get()); - native_window_set_buffers_transform(anw, NATIVE_WINDOW_TRANSFORM_ROT_90); - native_window_set_buffers_dimensions(anw, 64, 128); - TransactionUtils::fillSurfaceRGBA8(mFGSurfaceControl, 195, 63, 63); - waitForPostedBuffers(); - - { - // The child should still be in the same place and not have any strange scaling as in - // b/37673612. - mCapture = screenshot(); - mCapture->expectChildColor(0, 0); - mCapture->expectFGColor(10, 10); - } -} - -// A child with a buffer transform from its parents should be cropped by its parent bounds. -TEST_F(ChildLayerTest, ChildCroppedByParentWithBufferTransform) { - asTransaction([&](Transaction& t) { - t.show(mChild); - t.setPosition(mChild, 0, 0); - t.setPosition(mFGSurfaceControl, 0, 0); - t.setSize(mChild, 100, 100); - }); - TransactionUtils::fillSurfaceRGBA8(mChild, 200, 200, 200); - - { - mCapture = screenshot(); - - mCapture->expectChildColor(0, 0); - mCapture->expectChildColor(63, 63); - mCapture->expectBGColor(64, 64); - } - - asTransaction([&](Transaction& t) { t.setSize(mFGSurfaceControl, 128, 64); }); - sp<Surface> s = mFGSurfaceControl->getSurface(); - auto anw = static_cast<ANativeWindow*>(s.get()); - // Apply a 90 transform on the buffer. - native_window_set_buffers_transform(anw, NATIVE_WINDOW_TRANSFORM_ROT_90); - native_window_set_buffers_dimensions(anw, 64, 128); - TransactionUtils::fillSurfaceRGBA8(mFGSurfaceControl, 195, 63, 63); - waitForPostedBuffers(); - - // The child should be cropped by the new parent bounds. - { - mCapture = screenshot(); - mCapture->expectChildColor(0, 0); - mCapture->expectChildColor(99, 63); - mCapture->expectFGColor(100, 63); - mCapture->expectBGColor(128, 64); - } -} - -// A child with a scale transform from its parents should be cropped by its parent bounds. -TEST_F(ChildLayerTest, ChildCroppedByParentWithBufferScale) { - asTransaction([&](Transaction& t) { - t.show(mChild); - t.setPosition(mChild, 0, 0); - t.setPosition(mFGSurfaceControl, 0, 0); - t.setSize(mChild, 200, 200); - }); - TransactionUtils::fillSurfaceRGBA8(mChild, 200, 200, 200); - - { - mCapture = screenshot(); - - mCapture->expectChildColor(0, 0); - mCapture->expectChildColor(63, 63); - mCapture->expectBGColor(64, 64); - } - - asTransaction([&](Transaction& t) { - mFGSurfaceControl->getSurface()->setScalingMode( - NATIVE_WINDOW_SCALING_MODE_SCALE_TO_WINDOW); - // Resubmit buffer with new scaling mode - TransactionUtils::fillSurfaceRGBA8(mFGSurfaceControl, 195, 63, 63); - // Set a scaling by 2. - t.setSize(mFGSurfaceControl, 128, 128); - }); - - // Child should inherit its parents scale but should be cropped by its parent bounds. - { - mCapture = screenshot(); - mCapture->expectChildColor(0, 0); - mCapture->expectChildColor(127, 127); - mCapture->expectBGColor(128, 128); - } -} - -// Regression test for b/127368943 -// Child should ignore the buffer transform but apply parent scale transform. -TEST_F(ChildLayerTest, ChildrenWithParentBufferTransformAndScale) { - asTransaction([&](Transaction& t) { - t.show(mChild); - t.setPosition(mChild, 0, 0); - t.setPosition(mFGSurfaceControl, 0, 0); - }); - - { - mCapture = screenshot(); - mCapture->expectChildColor(0, 0); - mCapture->expectChildColor(9, 14); - mCapture->expectFGColor(10, 15); - } - - // Change the size of the foreground to 128 * 64 so we can test rotation as well. - asTransaction([&](Transaction& t) { - mFGSurfaceControl->getSurface()->setScalingMode( - NATIVE_WINDOW_SCALING_MODE_SCALE_TO_WINDOW); - // Resubmit buffer with new scaling mode - TransactionUtils::fillSurfaceRGBA8(mFGSurfaceControl, 195, 63, 63); - t.setSize(mFGSurfaceControl, 128, 64); - }); - sp<Surface> s = mFGSurfaceControl->getSurface(); - auto anw = static_cast<ANativeWindow*>(s.get()); - // Apply a 90 transform on the buffer and submit a buffer half the expected size so that we - // have an effective scale of 2.0 applied to the buffer along with a rotation transform. - native_window_set_buffers_transform(anw, NATIVE_WINDOW_TRANSFORM_ROT_90); - native_window_set_buffers_dimensions(anw, 32, 64); - TransactionUtils::fillSurfaceRGBA8(mFGSurfaceControl, 195, 63, 63); - waitForPostedBuffers(); - - // The child should ignore the buffer transform but apply the 2.0 scale from parent. - { - mCapture = screenshot(); - mCapture->expectChildColor(0, 0); - mCapture->expectChildColor(19, 29); - mCapture->expectFGColor(20, 30); - } -} - TEST_F(ChildLayerTest, Reparent) { asTransaction([&](Transaction& t) { t.show(mChild); diff --git a/services/surfaceflinger/tests/ScreenCapture_test.cpp b/services/surfaceflinger/tests/ScreenCapture_test.cpp index b0753c842e..2e9c10ce5c 100644 --- a/services/surfaceflinger/tests/ScreenCapture_test.cpp +++ b/services/surfaceflinger/tests/ScreenCapture_test.cpp @@ -350,7 +350,10 @@ TEST_F(ScreenCaptureTest, CaptureBoundlessLayerWithoutSourceCropFails) { TEST_F(ScreenCaptureTest, CaptureBufferLayerWithoutBufferFails) { sp<SurfaceControl> child = createSurface(mClient, "Child surface", 10, 10, - PIXEL_FORMAT_RGBA_8888, 0, mFGSurfaceControl.get()); + PIXEL_FORMAT_RGBA_8888, + ISurfaceComposerClient::eFXSurfaceBufferState, + mFGSurfaceControl.get()); + SurfaceComposerClient::Transaction().show(child).apply(true); sp<GraphicBuffer> outBuffer; @@ -361,7 +364,7 @@ TEST_F(ScreenCaptureTest, CaptureBufferLayerWithoutBufferFails) { ScreenCaptureResults captureResults; ASSERT_EQ(BAD_VALUE, ScreenCapture::captureLayers(args, captureResults)); - TransactionUtils::fillSurfaceRGBA8(child, Color::RED); + ASSERT_NO_FATAL_FAILURE(fillBufferStateLayerColor(child, Color::RED, 32, 32)); SurfaceComposerClient::Transaction().apply(true); ASSERT_EQ(NO_ERROR, ScreenCapture::captureLayers(args, captureResults)); ScreenCapture sc(captureResults.buffer); @@ -432,12 +435,15 @@ TEST_F(ScreenCaptureTest, CaptureGrandchildOnly) { } TEST_F(ScreenCaptureTest, CaptureCrop) { - sp<SurfaceControl> redLayer = createLayer(String8("Red surface"), 60, 60, 0); + sp<SurfaceControl> redLayer = createLayer(String8("Red surface"), 60, 60, + ISurfaceComposerClient::eFXSurfaceBufferState); sp<SurfaceControl> blueLayer = createSurface(mClient, "Blue surface", 30, 30, - PIXEL_FORMAT_RGBA_8888, 0, redLayer.get()); + PIXEL_FORMAT_RGBA_8888, + ISurfaceComposerClient::eFXSurfaceBufferState, + redLayer.get()); - ASSERT_NO_FATAL_FAILURE(fillBufferQueueLayerColor(redLayer, Color::RED, 60, 60)); - ASSERT_NO_FATAL_FAILURE(fillBufferQueueLayerColor(blueLayer, Color::BLUE, 30, 30)); + ASSERT_NO_FATAL_FAILURE(fillBufferStateLayerColor(redLayer, Color::RED, 60, 60)); + ASSERT_NO_FATAL_FAILURE(fillBufferStateLayerColor(blueLayer, Color::BLUE, 30, 30)); SurfaceComposerClient::Transaction() .setLayer(redLayer, INT32_MAX - 1) @@ -464,12 +470,15 @@ TEST_F(ScreenCaptureTest, CaptureCrop) { } TEST_F(ScreenCaptureTest, CaptureSize) { - sp<SurfaceControl> redLayer = createLayer(String8("Red surface"), 60, 60, 0); + sp<SurfaceControl> redLayer = + createLayer(String8("Red surface"), 60, 60, ISurfaceComposerClient::eFXSurfaceBufferState); sp<SurfaceControl> blueLayer = createSurface(mClient, "Blue surface", 30, 30, - PIXEL_FORMAT_RGBA_8888, 0, redLayer.get()); + PIXEL_FORMAT_RGBA_8888, + ISurfaceComposerClient::eFXSurfaceBufferState, + redLayer.get()); - ASSERT_NO_FATAL_FAILURE(fillBufferQueueLayerColor(redLayer, Color::RED, 60, 60)); - ASSERT_NO_FATAL_FAILURE(fillBufferQueueLayerColor(blueLayer, Color::BLUE, 30, 30)); + ASSERT_NO_FATAL_FAILURE(fillBufferStateLayerColor(redLayer, Color::RED, 60, 60)); + ASSERT_NO_FATAL_FAILURE(fillBufferStateLayerColor(blueLayer, Color::BLUE, 30, 30)); SurfaceComposerClient::Transaction() .setLayer(redLayer, INT32_MAX - 1) @@ -489,6 +498,7 @@ TEST_F(ScreenCaptureTest, CaptureSize) { captureArgs.frameScaleX = 0.5f; captureArgs.frameScaleY = 0.5f; + sleep(1); ScreenCapture::captureLayers(&mCapture, captureArgs); // Capturing the downsized area (30x30) should leave both red and blue but in a smaller area. @@ -519,14 +529,15 @@ TEST_F(ScreenCaptureTest, CaptureInvalidLayer) { } TEST_F(ScreenCaptureTest, CaputureSecureLayer) { - sp<SurfaceControl> redLayer = createLayer(String8("Red surface"), 60, 60, 0); + sp<SurfaceControl> redLayer = createLayer(String8("Red surface"), 60, 60, + ISurfaceComposerClient::eFXSurfaceBufferState); sp<SurfaceControl> secureLayer = createLayer(String8("Secure surface"), 30, 30, ISurfaceComposerClient::eSecure | - ISurfaceComposerClient::eFXSurfaceBufferQueue, + ISurfaceComposerClient::eFXSurfaceBufferState, redLayer.get()); - ASSERT_NO_FATAL_FAILURE(fillBufferQueueLayerColor(redLayer, Color::RED, 60, 60)); - ASSERT_NO_FATAL_FAILURE(fillBufferQueueLayerColor(secureLayer, Color::BLUE, 30, 30)); + ASSERT_NO_FATAL_FAILURE(fillBufferStateLayerColor(redLayer, Color::RED, 60, 60)); + ASSERT_NO_FATAL_FAILURE(fillBufferStateLayerColor(secureLayer, Color::BLUE, 30, 30)); auto redLayerHandle = redLayer->getHandle(); Transaction() @@ -874,4 +885,4 @@ TEST_F(ScreenCaptureChildOnlyTest, CaptureLayerIgnoresTransform) { } // namespace android // TODO(b/129481165): remove the #pragma below and fix conversion issues -#pragma clang diagnostic pop // ignored "-Wconversion"
\ No newline at end of file +#pragma clang diagnostic pop // ignored "-Wconversion" diff --git a/services/surfaceflinger/tests/SurfaceInterceptor_test.cpp b/services/surfaceflinger/tests/SurfaceInterceptor_test.cpp index af23e2a9cc..ee4e863474 100644 --- a/services/surfaceflinger/tests/SurfaceInterceptor_test.cpp +++ b/services/surfaceflinger/tests/SurfaceInterceptor_test.cpp @@ -921,11 +921,6 @@ TEST_F(SurfaceInterceptorTest, InterceptDisplayDeletionWorks) { ASSERT_TRUE(singleIncrementFound(capturedTrace, Increment::IncrementCase::kDisplayDeletion)); } -TEST_F(SurfaceInterceptorTest, InterceptBufferUpdateWorks) { - captureTest(&SurfaceInterceptorTest::nBufferUpdates, - &SurfaceInterceptorTest::bufferUpdatesFound); -} - // If the interceptor is enabled while buffer updates are being pushed, the interceptor should // first create a snapshot of the existing displays and surfaces and then start capturing // the buffer updates @@ -941,26 +936,6 @@ TEST_F(SurfaceInterceptorTest, InterceptWhileBufferUpdatesWorks) { const auto& firstIncrement = capturedTrace.mutable_increment(0); ASSERT_EQ(firstIncrement->increment_case(), Increment::IncrementCase::kDisplayCreation); } - -TEST_F(SurfaceInterceptorTest, InterceptSimultaneousUpdatesWorks) { - enableInterceptor(); - setupBackgroundSurface(); - std::thread bufferUpdates(&SurfaceInterceptorTest::nBufferUpdates, this); - std::thread surfaceUpdates(&SurfaceInterceptorTest::runAllUpdates, this); - runInTransaction(&SurfaceInterceptorTest::surfaceCreation); - bufferUpdates.join(); - surfaceUpdates.join(); - disableInterceptor(); - - Trace capturedTrace; - ASSERT_EQ(NO_ERROR, readProtoFile(&capturedTrace)); - preProcessTrace(capturedTrace); - - assertAllUpdatesFound(capturedTrace); - ASSERT_TRUE(bufferUpdatesFound(capturedTrace)); - ASSERT_TRUE(singleIncrementFound(capturedTrace, Increment::IncrementCase::kSurfaceCreation)); -} } - // TODO(b/129481165): remove the #pragma below and fix conversion issues #pragma clang diagnostic pop // ignored "-Wconversion -Wextra" diff --git a/services/surfaceflinger/tests/fakehwc/SFFakeHwc_test.cpp b/services/surfaceflinger/tests/fakehwc/SFFakeHwc_test.cpp index eb31e2eca1..162711d6f5 100644 --- a/services/surfaceflinger/tests/fakehwc/SFFakeHwc_test.cpp +++ b/services/surfaceflinger/tests/fakehwc/SFFakeHwc_test.cpp @@ -1293,31 +1293,6 @@ protected: EXPECT_TRUE(framesAreSame(frame2Ref, sFakeComposer->getFrameRects(2))); } - void Test_LayerResize() { - ALOGD("TransactionTest::LayerResize"); - { - TransactionScope ts(*sFakeComposer); - ts.setSize(mFGSurfaceControl, 128, 128); - } - - fillSurfaceRGBA8(mFGSurfaceControl, GREEN); - sFakeComposer->runVSyncAndWait(); - - ASSERT_EQ(3, sFakeComposer->getFrameCount()); // Make sure the waits didn't time out and - // there's no extra frames. - - auto frame1Ref = mBaseFrame; - // NOTE: The resize should not be visible for frame 1 as there's no buffer with new size - // posted. - EXPECT_TRUE(framesAreSame(frame1Ref, sFakeComposer->getFrameRects(1))); - - auto frame2Ref = frame1Ref; - frame2Ref[FG_LAYER].mSwapCount++; - frame2Ref[FG_LAYER].mDisplayFrame = hwc_rect_t{64, 64, 64 + 128, 64 + 128}; - frame2Ref[FG_LAYER].mSourceCrop = hwc_frect_t{0.f, 0.f, 128.f, 128.f}; - EXPECT_TRUE(framesAreSame(frame2Ref, sFakeComposer->getFrameRects(2))); - } - void Test_LayerCrop() { // TODO: Add scaling to confirm that crop happens in buffer space? { @@ -1517,10 +1492,6 @@ TEST_F(TransactionTest_2_1, DISABLED_LayerMove) { Test_LayerMove(); } -TEST_F(TransactionTest_2_1, DISABLED_LayerResize) { - Test_LayerResize(); -} - TEST_F(TransactionTest_2_1, DISABLED_LayerCrop) { Test_LayerCrop(); } @@ -1690,39 +1661,6 @@ protected: EXPECT_TRUE(framesAreSame(referenceFrame2, Base::sFakeComposer->getLatestFrame())); } - // Regression test for b/37673612 - void Test_ChildrenWithParentBufferTransform() { - { - TransactionScope ts(*Base::sFakeComposer); - ts.show(mChild); - ts.setPosition(mChild, 0, 0); - ts.setPosition(Base::mFGSurfaceControl, 0, 0); - } - - // We set things up as in b/37673612 so that there is a mismatch between the buffer size and - // the WM specified state size. - { - TransactionScope ts(*Base::sFakeComposer); - ts.setSize(Base::mFGSurfaceControl, 128, 64); - } - - sp<Surface> s = Base::mFGSurfaceControl->getSurface(); - auto anw = static_cast<ANativeWindow*>(s.get()); - native_window_set_buffers_transform(anw, NATIVE_WINDOW_TRANSFORM_ROT_90); - native_window_set_buffers_dimensions(anw, 64, 128); - fillSurfaceRGBA8(Base::mFGSurfaceControl, RED); - Base::sFakeComposer->runVSyncAndWait(); - - // The child should still be in the same place and not have any strange scaling as in - // b/37673612. - auto referenceFrame = Base::mBaseFrame; - referenceFrame[Base::FG_LAYER].mDisplayFrame = hwc_rect_t{0, 0, 128, 64}; - referenceFrame[Base::FG_LAYER].mSourceCrop = hwc_frect_t{0.f, 0.f, 64.f, 128.f}; - referenceFrame[Base::FG_LAYER].mSwapCount++; - referenceFrame[CHILD_LAYER].mDisplayFrame = hwc_rect_t{0, 0, 10, 10}; - EXPECT_TRUE(framesAreSame(referenceFrame, Base::sFakeComposer->getLatestFrame())); - } - sp<SurfaceControl> mChild; }; @@ -1748,11 +1686,6 @@ TEST_F(ChildLayerTest_2_1, DISABLED_LayerAlpha) { Test_LayerAlpha(); } -// Regression test for b/37673612 -TEST_F(ChildLayerTest_2_1, DISABLED_ChildrenWithParentBufferTransform) { - Test_ChildrenWithParentBufferTransform(); -} - template <typename FakeComposerService> class ChildColorLayerTest : public ChildLayerTest<FakeComposerService> { using Base = ChildLayerTest<FakeComposerService>; @@ -1842,91 +1775,6 @@ TEST_F(ChildColorLayerTest_2_1, DISABLED_LayerAlpha) { TEST_F(ChildColorLayerTest_2_1, DISABLED_LayerZeroAlpha) { Test_LayerZeroAlpha(); } - -template <typename FakeComposerService> -class LatchingTest : public TransactionTest<FakeComposerService> { - using Base = TransactionTest<FakeComposerService>; - -protected: - void lockAndFillFGBuffer() { fillSurfaceRGBA8(Base::mFGSurfaceControl, RED, false); } - - void unlockFGBuffer() { - sp<Surface> s = Base::mFGSurfaceControl->getSurface(); - ASSERT_EQ(NO_ERROR, s->unlockAndPost()); - Base::sFakeComposer->runVSyncAndWait(); - } - - void completeFGResize() { - fillSurfaceRGBA8(Base::mFGSurfaceControl, RED); - Base::sFakeComposer->runVSyncAndWait(); - } - void restoreInitialState() { - TransactionScope ts(*Base::sFakeComposer); - ts.setSize(Base::mFGSurfaceControl, 64, 64); - ts.setPosition(Base::mFGSurfaceControl, 64, 64); - ts.setCrop(Base::mFGSurfaceControl, Rect(0, 0, 64, 64)); - } - - void Test_SurfacePositionLatching() { - // By default position can be updated even while - // a resize is pending. - { - TransactionScope ts(*Base::sFakeComposer); - ts.setSize(Base::mFGSurfaceControl, 32, 32); - ts.setPosition(Base::mFGSurfaceControl, 100, 100); - } - - // The size should not have updated as we have not provided a new buffer. - auto referenceFrame1 = Base::mBaseFrame; - referenceFrame1[Base::FG_LAYER].mDisplayFrame = hwc_rect_t{100, 100, 100 + 64, 100 + 64}; - EXPECT_TRUE(framesAreSame(referenceFrame1, Base::sFakeComposer->getLatestFrame())); - - restoreInitialState(); - - completeFGResize(); - - auto referenceFrame2 = Base::mBaseFrame; - referenceFrame2[Base::FG_LAYER].mDisplayFrame = hwc_rect_t{100, 100, 100 + 32, 100 + 32}; - referenceFrame2[Base::FG_LAYER].mSourceCrop = hwc_frect_t{0.f, 0.f, 32.f, 32.f}; - referenceFrame2[Base::FG_LAYER].mSwapCount++; - EXPECT_TRUE(framesAreSame(referenceFrame2, Base::sFakeComposer->getLatestFrame())); - } - - void Test_CropLatching() { - // Normally the crop applies immediately even while a resize is pending. - { - TransactionScope ts(*Base::sFakeComposer); - ts.setSize(Base::mFGSurfaceControl, 128, 128); - ts.setCrop(Base::mFGSurfaceControl, Rect(0, 0, 63, 63)); - } - - auto referenceFrame1 = Base::mBaseFrame; - referenceFrame1[Base::FG_LAYER].mDisplayFrame = hwc_rect_t{64, 64, 64 + 63, 64 + 63}; - referenceFrame1[Base::FG_LAYER].mSourceCrop = hwc_frect_t{0.f, 0.f, 63.f, 63.f}; - EXPECT_TRUE(framesAreSame(referenceFrame1, Base::sFakeComposer->getLatestFrame())); - - restoreInitialState(); - - completeFGResize(); - - auto referenceFrame2 = Base::mBaseFrame; - referenceFrame2[Base::FG_LAYER].mDisplayFrame = hwc_rect_t{64, 64, 64 + 63, 64 + 63}; - referenceFrame2[Base::FG_LAYER].mSourceCrop = hwc_frect_t{0.f, 0.f, 63.f, 63.f}; - referenceFrame2[Base::FG_LAYER].mSwapCount++; - EXPECT_TRUE(framesAreSame(referenceFrame2, Base::sFakeComposer->getLatestFrame())); - } -}; - -using LatchingTest_2_1 = LatchingTest<FakeComposerService_2_1>; - -TEST_F(LatchingTest_2_1, DISABLED_SurfacePositionLatching) { - Test_SurfacePositionLatching(); -} - -TEST_F(LatchingTest_2_1, DISABLED_CropLatching) { - Test_CropLatching(); -} - } // namespace int main(int argc, char** argv) { |