author | Nicolas Silva <nsilva@mozilla.com> |
Fri, 27 Mar 2015 11:16:22 +0100 | |
changeset 264948 | f1dfed74dc9a6cba35b71a9c163966c617de34c6 |
parent 264947 | f39fd4c98562e02f71a7e1797f9763bbdf869575 |
child 264949 | 48a6591e10a2a607f70aa74f364d394cff02e852 |
push id | 4718 |
push user | raliiev@mozilla.com |
push date | Mon, 11 May 2015 18:39:53 +0000 |
treeherder | mozilla-beta@c20c4ef55f08 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | sotaro |
bugs | 1147894 |
milestone | 39.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
--- a/gfx/layers/client/CanvasClient.cpp +++ b/gfx/layers/client/CanvasClient.cpp @@ -105,17 +105,16 @@ CanvasClient2D::Update(gfx::IntSize aSiz mBuffer->Unlock(); if (bufferCreated && !AddTextureClient(mBuffer)) { mBuffer = nullptr; return; } if (updated) { - GetForwarder()->UpdatedTexture(this, mBuffer, nullptr); GetForwarder()->UseTexture(this, mBuffer); mBuffer->SyncWithObject(GetForwarder()->GetSyncObject()); } } TemporaryRef<TextureClient> CanvasClient2D::CreateTextureClientForCanvas(gfx::SurfaceFormat aFormat, gfx::IntSize aSize, @@ -397,17 +396,16 @@ CanvasClientSharedSurface::Update(gfx::I GetForwarder()->RemoveTextureFromCompositableAsync(tracker, this, mFrontTex); mFrontTex = nullptr; } // Use the new TexClient. mFrontTex = newTex; - forwarder->UpdatedTexture(this, mFrontTex, nullptr); forwarder->UseTexture(this, mFrontTex); } void CanvasClientSharedSurface::ClearSurfaces() { mFrontTex = nullptr; // It is important to destroy the SharedSurface *after* the TextureClient.
--- a/gfx/layers/client/ImageClient.cpp +++ b/gfx/layers/client/ImageClient.cpp @@ -241,17 +241,16 @@ ImageClientSingle::UpdateImage(ImageCont texture->Unlock(); } } if (!texture || !AddTextureClient(texture)) { return false; } mFrontBuffer = texture; - GetForwarder()->UpdatedTexture(this, texture, nullptr); GetForwarder()->UseTexture(this, texture); UpdatePictureRect(image->GetPictureRect()); mLastPaintedImageSerial = image->GetSerial(); aContainer->NotifyPaintedImage(image); texture->SyncWithObject(GetForwarder()->GetSyncObject());
--- a/gfx/layers/composite/ImageHost.cpp +++ b/gfx/layers/composite/ImageHost.cpp @@ -38,16 +38,17 @@ ImageHost::~ImageHost() } void ImageHost::UseTextureHost(TextureHost* aTexture) { CompositableHost::UseTextureHost(aTexture); mFrontBuffer = aTexture; if (mFrontBuffer) { + mFrontBuffer->Updated(); mFrontBuffer->PrepareTextureSource(mTextureSource); } } void ImageHost::RemoveTextureHost(TextureHost* aTexture) { CompositableHost::RemoveTextureHost(aTexture);
--- a/gfx/layers/ipc/CompositableForwarder.h +++ b/gfx/layers/ipc/CompositableForwarder.h @@ -151,25 +151,16 @@ public: * the next composition. */ virtual void UseTexture(CompositableClient* aCompositable, TextureClient* aClient) = 0; virtual void UseComponentAlphaTextures(CompositableClient* aCompositable, TextureClient* aClientOnBlack, TextureClient* aClientOnWhite) = 0; - /** - * Tell the compositor side that the shared data has been modified so that - * it can react accordingly (upload textures, etc.). - */ - virtual void UpdatedTexture(CompositableClient* aCompositable, - TextureClient* aTexture, - nsIntRegion* aRegion) = 0; - - virtual void SendFenceHandle(AsyncTransactionTracker* aTracker, PTextureChild* aTexture, const FenceHandle& aFence) = 0; virtual void SendPendingAsyncMessges() = 0; void IdentifyTextureHost(const TextureFactoryIdentifier& aIdentifier);
--- a/gfx/layers/ipc/CompositableTransactionParent.cpp +++ b/gfx/layers/ipc/CompositableTransactionParent.cpp @@ -203,27 +203,16 @@ CompositableParentManager::ReceiveCompos case CompositableOperation::TOpUseOverlaySource: { const OpUseOverlaySource& op = aEdit.get_OpUseOverlaySource(); CompositableHost* compositable = AsCompositable(op); MOZ_ASSERT(compositable->GetType() == CompositableType::IMAGE_OVERLAY, "Invalid operation!"); compositable->UseOverlaySource(op.overlay()); break; } #endif - case CompositableOperation::TOpUpdateTexture: { - const OpUpdateTexture& op = aEdit.get_OpUpdateTexture(); - RefPtr<TextureHost> texture = TextureHost::AsTextureHost(op.textureParent()); - MOZ_ASSERT(texture); - - texture->Updated(op.region().type() == MaybeRegion::TnsIntRegion - ? &op.region().get_nsIntRegion() - : nullptr); // no region means invalidate the entire surface - break; - } - default: { MOZ_ASSERT(false, "bad type"); } } return true; }
--- a/gfx/layers/ipc/ImageBridgeChild.cpp +++ b/gfx/layers/ipc/ImageBridgeChild.cpp @@ -148,32 +148,16 @@ ImageBridgeChild::UseOverlaySource(Compo const OverlaySource& aOverlay) { MOZ_ASSERT(aCompositable); mTxn->AddEdit(OpUseOverlaySource(nullptr, aCompositable->GetIPDLActor(), aOverlay)); } #endif void -ImageBridgeChild::UpdatedTexture(CompositableClient* aCompositable, - TextureClient* aTexture, - nsIntRegion* aRegion) -{ - MOZ_ASSERT(aCompositable); - MOZ_ASSERT(aTexture); - MOZ_ASSERT(aCompositable->GetIPDLActor()); - MOZ_ASSERT(aTexture->GetIPDLActor()); - MaybeRegion region = aRegion ? MaybeRegion(*aRegion) - : MaybeRegion(null_t()); - mTxn->AddNoSwapEdit(OpUpdateTexture(nullptr, aCompositable->GetIPDLActor(), - nullptr, aTexture->GetIPDLActor(), - region)); -} - -void ImageBridgeChild::SendFenceHandle(AsyncTransactionTracker* aTracker, PTextureChild* aTexture, const FenceHandle& aFence) { HoldUntilComplete(aTracker); InfallibleTArray<AsyncChildMessageData> messages; messages.AppendElement(OpDeliverFenceFromChild(aTracker->GetId(), nullptr, aTexture,
--- a/gfx/layers/ipc/ImageBridgeChild.h +++ b/gfx/layers/ipc/ImageBridgeChild.h @@ -202,23 +202,16 @@ public: * Flush all Images sent to CompositableHost. */ static void FlushAllImages(ImageClient* aClient, ImageContainer* aContainer, bool aExceptFront); // CompositableForwarder virtual void Connect(CompositableClient* aCompositable) override; - /** - * See CompositableForwarder::UpdatedTexture - */ - virtual void UpdatedTexture(CompositableClient* aCompositable, - TextureClient* aTexture, - nsIntRegion* aRegion) override; - virtual bool IsImageBridgeChild() const override { return true; } /** * See CompositableForwarder::UseTexture */ virtual void UseTexture(CompositableClient* aCompositable, TextureClient* aClient) override; virtual void UseComponentAlphaTextures(CompositableClient* aCompositable,
--- a/gfx/layers/ipc/LayersMessages.ipdlh +++ b/gfx/layers/ipc/LayersMessages.ipdlh @@ -386,22 +386,16 @@ struct OpUseComponentAlphaTextures { PTexture textureOnWhite; }; union MaybeRegion { nsIntRegion; null_t; }; -struct OpUpdateTexture { - PCompositable compositable; - PTexture texture; - MaybeRegion region; -}; - struct OpDeliverFence { uint64_t transactionId; PTexture texture; FenceHandle fence; }; struct OpDeliverFenceToTracker { uint64_t transactionId; @@ -425,17 +419,16 @@ union CompositableOperation { OpPaintTextureRegion; OpUseTiledLayerBuffer; OpRemoveTexture; OpRemoveTextureAsync; - OpUpdateTexture; OpUseTexture; OpUseComponentAlphaTextures; OpUseOverlaySource; }; // A unit of a changeset; a set of these comprise a changeset union Edit { OpCreatePaintedLayer;
--- a/gfx/layers/ipc/ShadowLayers.cpp +++ b/gfx/layers/ipc/ShadowLayers.cpp @@ -357,54 +357,39 @@ ShadowLayerForwarder::UpdatePictureRect( const nsIntRect& aRect) { MOZ_ASSERT(aCompositable); MOZ_ASSERT(aCompositable->GetIPDLActor()); mTxn->AddNoSwapPaint(OpUpdatePictureRect(nullptr, aCompositable->GetIPDLActor(), aRect)); } void -ShadowLayerForwarder::UpdatedTexture(CompositableClient* aCompositable, - TextureClient* aTexture, - nsIntRegion* aRegion) -{ - MOZ_ASSERT(aCompositable); - MOZ_ASSERT(aTexture); - MOZ_ASSERT(aCompositable->GetIPDLActor()); - MOZ_ASSERT(aTexture->GetIPDLActor()); - MaybeRegion region = aRegion ? MaybeRegion(*aRegion) - : MaybeRegion(null_t()); - if (aTexture->GetFlags() & TextureFlags::IMMEDIATE_UPLOAD) { - mTxn->AddPaint(OpUpdateTexture(nullptr, aCompositable->GetIPDLActor(), - nullptr, aTexture->GetIPDLActor(), - region)); - } else { - mTxn->AddNoSwapPaint(OpUpdateTexture(nullptr, aCompositable->GetIPDLActor(), - nullptr, aTexture->GetIPDLActor(), - region)); - } -} - -void ShadowLayerForwarder::UseTexture(CompositableClient* aCompositable, TextureClient* aTexture) { MOZ_ASSERT(aCompositable); MOZ_ASSERT(aTexture); MOZ_ASSERT(aCompositable->GetIPDLActor()); MOZ_ASSERT(aTexture->GetIPDLActor()); #if defined(MOZ_WIDGET_GONK) && ANDROID_VERSION >= 17 FenceHandle handle = aTexture->GetAcquireFenceHandle(); if (handle.IsValid()) { RefPtr<FenceDeliveryTracker> tracker = new FenceDeliveryTracker(handle); SendFenceHandle(tracker, aTexture->GetIPDLActor(), handle); } #endif mTxn->AddEdit(OpUseTexture(nullptr, aCompositable->GetIPDLActor(), nullptr, aTexture->GetIPDLActor())); + if (aTexture->GetFlags() & TextureFlags::IMMEDIATE_UPLOAD + && aTexture->HasInternalBuffer()) { + // We use IMMEDIATE_UPLOAD when we want to be sure that the upload cannot + // race with updates on the main thread. In this case we want the transaction + // to be synchronous. + mTxn->MarkSyncTransaction(); + } } void ShadowLayerForwarder::UseComponentAlphaTextures(CompositableClient* aCompositable, TextureClient* aTextureOnBlack, TextureClient* aTextureOnWhite) { MOZ_ASSERT(aCompositable);
--- a/gfx/layers/ipc/ShadowLayers.h +++ b/gfx/layers/ipc/ShadowLayers.h @@ -256,23 +256,16 @@ public: /** * Communicate the picture rect of an image to the compositor */ void UpdatePictureRect(CompositableClient* aCompositable, const nsIntRect& aRect) override; /** - * See CompositableForwarder::UpdatedTexture - */ - virtual void UpdatedTexture(CompositableClient* aCompositable, - TextureClient* aTexture, - nsIntRegion* aRegion) override; - - /** * See CompositableForwarder::UseTexture */ virtual void UseTexture(CompositableClient* aCompositable, TextureClient* aClient) override; virtual void UseComponentAlphaTextures(CompositableClient* aCompositable, TextureClient* aClientOnBlack, TextureClient* aClientOnWhite) override; #ifdef MOZ_WIDGET_GONK