From 2d34ce94581ffb91dc4a74c1675798ef1a7b5911 Mon Sep 17 00:00:00 2001 From: Sebastian Hengst Date: Fri, 16 Sep 2016 18:55:44 +0200 Subject: [PATCH] Backed out changeset e0d755ab4cbd (bug 1302380) for timeouts reftest with e10s invariable-declaration-XX.html on Linux 32 bit. r=backout a=merge --HG-- extra : source : 8e2af231e0c321f010ebdf1a83eb028589225d27 --- dom/canvas/CanvasRenderingContext2D.cpp | 29 ++++++++++--- gfx/layers/Layers.cpp | 9 ++-- gfx/layers/Layers.h | 3 +- gfx/layers/PersistentBufferProvider.cpp | 52 +++--------------------- gfx/layers/PersistentBufferProvider.h | 16 ++------ gfx/layers/client/ClientLayerManager.cpp | 7 ++-- gfx/layers/client/ClientLayerManager.h | 3 +- 7 files changed, 42 insertions(+), 77 deletions(-) diff --git a/dom/canvas/CanvasRenderingContext2D.cpp b/dom/canvas/CanvasRenderingContext2D.cpp index dc05a1cfad01..87de631d36de 100644 --- a/dom/canvas/CanvasRenderingContext2D.cpp +++ b/dom/canvas/CanvasRenderingContext2D.cpp @@ -1159,6 +1159,12 @@ CanvasRenderingContext2D::Reset() mCanvasElement->InvalidateCanvas(); } + // only do this for non-docshell created contexts, + // since those are the ones that we created a surface for + if (mTarget && IsTargetValid() && !mDocShell) { + gCanvasAzureMemoryUsed -= mWidth * mHeight * 4; + } + bool forceReset = true; ReturnTarget(forceReset); mTarget = nullptr; @@ -1621,6 +1627,8 @@ CanvasRenderingContext2D::EnsureTarget(const gfx::Rect* aCoveredRect, mTarget = newTarget.forget(); mBufferProvider = newProvider.forget(); + RegisterAllocation(); + // Skia expects the unused X channel to contains 0 even for opaque operations // so we can't skip clearing in that case, even if we are going to cover the // entire canvas in the next drawing operation. @@ -1664,6 +1672,10 @@ CanvasRenderingContext2D::SetErrorState() { EnsureErrorTarget(); + if (mTarget && mTarget != sErrorTarget) { + gCanvasAzureMemoryUsed -= mWidth * mHeight * 4; + } + mTarget = sErrorTarget; mBufferProvider = nullptr; @@ -1672,13 +1684,22 @@ CanvasRenderingContext2D::SetErrorState() } void -EnsureCanvasMemoryReporter() +CanvasRenderingContext2D::RegisterAllocation() { + // XXX - It would make more sense to track the allocation in + // PeristentBufferProvider, rather than here. static bool registered = false; - if (!registered) { + // FIXME: Disable the reporter for now, see bug 1241865 + if (!registered && false) { registered = true; RegisterStrongMemoryReporter(new Canvas2dPixelsReporter()); } + + gCanvasAzureMemoryUsed += mWidth * mHeight * 4; + JSContext* context = nsContentUtils::GetCurrentJSContext(); + if (context) { + JS_updateMallocCounter(context, mWidth * mHeight * 4); + } } static already_AddRefed @@ -1762,9 +1783,7 @@ CanvasRenderingContext2D::TrySharedTarget(RefPtr& aOutDT, return false; } - EnsureCanvasMemoryReporter(); - aOutProvider = layerManager->CreatePersistentBufferProvider(GetSize(), GetSurfaceFormat(), - &gCanvasAzureMemoryUsed); + aOutProvider = layerManager->CreatePersistentBufferProvider(GetSize(), GetSurfaceFormat()); if (!aOutProvider) { return false; diff --git a/gfx/layers/Layers.cpp b/gfx/layers/Layers.cpp index b9e5fcb173f7..6dfcbd524918 100644 --- a/gfx/layers/Layers.cpp +++ b/gfx/layers/Layers.cpp @@ -202,18 +202,15 @@ LayerManager::CreateDrawTarget(const IntSize &aSize, already_AddRefed LayerManager::CreatePersistentBufferProvider(const mozilla::gfx::IntSize &aSize, - mozilla::gfx::SurfaceFormat aFormat, - int64_t* aMemoryCounter) + mozilla::gfx::SurfaceFormat aFormat) { RefPtr bufferProvider = PersistentBufferProviderBasic::Create(aSize, aFormat, - gfxPlatform::GetPlatform()->GetPreferredCanvasBackend(), - aMemoryCounter - ); + gfxPlatform::GetPlatform()->GetPreferredCanvasBackend()); if (!bufferProvider) { bufferProvider = PersistentBufferProviderBasic::Create(aSize, aFormat, - gfxPlatform::GetPlatform()->GetFallbackCanvasBackend(), aMemoryCounter); + gfxPlatform::GetPlatform()->GetFallbackCanvasBackend()); } return bufferProvider.forget(); diff --git a/gfx/layers/Layers.h b/gfx/layers/Layers.h index a4bf65586f42..32578a9949c3 100644 --- a/gfx/layers/Layers.h +++ b/gfx/layers/Layers.h @@ -485,8 +485,7 @@ public: */ virtual already_AddRefed CreatePersistentBufferProvider(const mozilla::gfx::IntSize &aSize, - mozilla::gfx::SurfaceFormat aFormat, - int64_t* aMemoryCounter); + mozilla::gfx::SurfaceFormat aFormat); virtual bool CanUseCanvasLayerForSize(const gfx::IntSize &aSize) { return true; } diff --git a/gfx/layers/PersistentBufferProvider.cpp b/gfx/layers/PersistentBufferProvider.cpp index 0571cf2d1f6a..bf5c8933c62d 100644 --- a/gfx/layers/PersistentBufferProvider.cpp +++ b/gfx/layers/PersistentBufferProvider.cpp @@ -16,23 +16,14 @@ using namespace gfx; namespace layers { -PersistentBufferProviderBasic::PersistentBufferProviderBasic(DrawTarget* aDt, int64_t* aMemoryCounter) +PersistentBufferProviderBasic::PersistentBufferProviderBasic(DrawTarget* aDt) : mDrawTarget(aDt) -, mMemoryCounter(aMemoryCounter) { - if (mMemoryCounter) { - IntSize size = mDrawTarget->GetSize(); - *mMemoryCounter += size.width * size.height * gfx::BytesPerPixel(mDrawTarget->GetFormat()); - } MOZ_COUNT_CTOR(PersistentBufferProviderBasic); } PersistentBufferProviderBasic::~PersistentBufferProviderBasic() { - if (mMemoryCounter) { - IntSize size = mDrawTarget->GetSize(); - *mMemoryCounter -= size.width * size.height * gfx::BytesPerPixel(mDrawTarget->GetFormat()); - } MOZ_COUNT_DTOR(PersistentBufferProviderBasic); } @@ -76,7 +67,7 @@ PersistentBufferProviderBasic::ReturnSnapshot(already_AddRefed PersistentBufferProviderBasic::Create(gfx::IntSize aSize, gfx::SurfaceFormat aFormat, - gfx::BackendType aBackend, int64_t* aMemoryCounter) + gfx::BackendType aBackend) { RefPtr dt = gfxPlatform::GetPlatform()->CreateDrawTargetForBackend(aBackend, aSize, aFormat); @@ -85,7 +76,7 @@ PersistentBufferProviderBasic::Create(gfx::IntSize aSize, gfx::SurfaceFormat aFo } RefPtr provider = - new PersistentBufferProviderBasic(dt, aMemoryCounter); + new PersistentBufferProviderBasic(dt); return provider.forget(); } @@ -95,8 +86,7 @@ PersistentBufferProviderBasic::Create(gfx::IntSize aSize, gfx::SurfaceFormat aFo already_AddRefed PersistentBufferProviderShared::Create(gfx::IntSize aSize, gfx::SurfaceFormat aFormat, - CompositableForwarder* aFwd, - int64_t* aMemoryCounter) + CompositableForwarder* aFwd) { if (!aFwd || !aFwd->IPCOpen()) { return nullptr; @@ -114,27 +104,23 @@ PersistentBufferProviderShared::Create(gfx::IntSize aSize, } RefPtr provider = - new PersistentBufferProviderShared(aSize, aFormat, aFwd, texture, aMemoryCounter); - + new PersistentBufferProviderShared(aSize, aFormat, aFwd, texture); return provider.forget(); } PersistentBufferProviderShared::PersistentBufferProviderShared(gfx::IntSize aSize, gfx::SurfaceFormat aFormat, CompositableForwarder* aFwd, - RefPtr& aTexture, - int64_t* aMemoryCounter) + RefPtr& aTexture) : mSize(aSize) , mFormat(aFormat) , mFwd(aFwd) , mFront(Nothing()) -, mMemoryCounter(aMemoryCounter) { if (mTextures.append(aTexture)) { mBack = Some(0); } - OnAllocation(); MOZ_COUNT_CTOR(PersistentBufferProviderShared); } @@ -307,7 +293,6 @@ PersistentBufferProviderShared::BorrowDrawTarget(const gfx::IntRect& aPersistedR MOZ_ASSERT(newTexture); if (newTexture) { - OnAllocation(); if (mTextures.append(newTexture)) { tex = newTexture; mBack = Some(mTextures.length() - 1); @@ -420,17 +405,12 @@ PersistentBufferProviderShared::NotifyInactive() RefPtr front = GetTexture(mFront); RefPtr back = GetTexture(mBack); - for (unsigned i = 0; i < mTextures.length(); ++i) { - OnDeallocation(); - } - // Clear all textures (except the front and back ones that we just kept). mTextures.clear(); if (back) { if (mTextures.append(back)) { mBack = Some(0); - OnAllocation(); } if (front == back) { mFront = mBack; @@ -440,7 +420,6 @@ PersistentBufferProviderShared::NotifyInactive() if (front && front != back) { if (mTextures.append(front)) { mFront = Some(mTextures.length() - 1); - OnAllocation(); } } } @@ -457,29 +436,10 @@ PersistentBufferProviderShared::Destroy() MOZ_ASSERT(false); texture->Unlock(); } - if (texture) { - OnDeallocation(); - } } mTextures.clear(); } -void -PersistentBufferProviderShared::OnAllocation() -{ - if (mMemoryCounter) { - *mMemoryCounter += mSize.width * mSize.height * gfx::BytesPerPixel(mFormat); - } -} - -void -PersistentBufferProviderShared::OnDeallocation() -{ - if (mMemoryCounter) { - *mMemoryCounter -= mSize.width * mSize.height * gfx::BytesPerPixel(mFormat); - } -} - } // namespace layers } // namespace mozilla \ No newline at end of file diff --git a/gfx/layers/PersistentBufferProvider.h b/gfx/layers/PersistentBufferProvider.h index 23aeaa922c64..86831e1531fc 100644 --- a/gfx/layers/PersistentBufferProvider.h +++ b/gfx/layers/PersistentBufferProvider.h @@ -82,10 +82,9 @@ public: MOZ_DECLARE_REFCOUNTED_VIRTUAL_TYPENAME(PersistentBufferProviderBasic, override) static already_AddRefed - Create(gfx::IntSize aSize, gfx::SurfaceFormat aFormat, gfx::BackendType aBackend, - int64_t* aMemoryCounter); + Create(gfx::IntSize aSize, gfx::SurfaceFormat aFormat, gfx::BackendType aBackend); - explicit PersistentBufferProviderBasic(gfx::DrawTarget* aTarget, int64_t* aMemoryCounter = nullptr); + explicit PersistentBufferProviderBasic(gfx::DrawTarget* aTarget); virtual LayersBackend GetType() override { return LayersBackend::LAYERS_BASIC; } @@ -103,7 +102,6 @@ private: RefPtr mDrawTarget; RefPtr mSnapshot; - int64_t* mMemoryCounter; }; @@ -119,8 +117,7 @@ public: static already_AddRefed Create(gfx::IntSize aSize, gfx::SurfaceFormat aFormat, - CompositableForwarder* aFwd, - int64_t* aMemoryCounter); + CompositableForwarder* aFwd); virtual LayersBackend GetType() override { return LayersBackend::LAYERS_CLIENT; } @@ -144,14 +141,10 @@ public: protected: PersistentBufferProviderShared(gfx::IntSize aSize, gfx::SurfaceFormat aFormat, CompositableForwarder* aFwd, - RefPtr& aTexture, - int64_t* aMemoryCounter); + RefPtr& aTexture); ~PersistentBufferProviderShared(); - void OnAllocation(); - void OnDeallocation(); - TextureClient* GetTexture(Maybe aIndex); bool CheckIndex(uint32_t aIndex) { return aIndex < mTextures.length(); } @@ -168,7 +161,6 @@ protected: RefPtr mDrawTarget; RefPtr mSnapshot; - int64_t* mMemoryCounter; }; struct AutoReturnSnapshot diff --git a/gfx/layers/client/ClientLayerManager.cpp b/gfx/layers/client/ClientLayerManager.cpp index 4156a27dc2e1..16443b18caf2 100644 --- a/gfx/layers/client/ClientLayerManager.cpp +++ b/gfx/layers/client/ClientLayerManager.cpp @@ -840,8 +840,7 @@ ClientLayerManager::DependsOnStaleDevice() const already_AddRefed ClientLayerManager::CreatePersistentBufferProvider(const gfx::IntSize& aSize, - gfx::SurfaceFormat aFormat, - int64_t* aMemoryCounter) + gfx::SurfaceFormat aFormat) { // Don't use a shared buffer provider if compositing is considered "not cheap" // because the canvas will most likely be flattened into a thebes layer instead @@ -850,13 +849,13 @@ ClientLayerManager::CreatePersistentBufferProvider(const gfx::IntSize& aSize, if (IsCompositingCheap() && gfxPrefs::PersistentBufferProviderSharedEnabled()) { RefPtr provider - = PersistentBufferProviderShared::Create(aSize, aFormat, AsShadowForwarder(), aMemoryCounter); + = PersistentBufferProviderShared::Create(aSize, aFormat, AsShadowForwarder()); if (provider) { return provider.forget(); } } - return LayerManager::CreatePersistentBufferProvider(aSize, aFormat, aMemoryCounter); + return LayerManager::CreatePersistentBufferProvider(aSize, aFormat); } diff --git a/gfx/layers/client/ClientLayerManager.h b/gfx/layers/client/ClientLayerManager.h index 0095d7ae4ed9..ad9f9ea71ea0 100644 --- a/gfx/layers/client/ClientLayerManager.h +++ b/gfx/layers/client/ClientLayerManager.h @@ -231,8 +231,7 @@ public: void RemoveDidCompositeObserver(DidCompositeObserver* aObserver); virtual already_AddRefed - CreatePersistentBufferProvider(const gfx::IntSize& aSize, gfx::SurfaceFormat aFormat, - int64_t* aMemoryCounter) override; + CreatePersistentBufferProvider(const gfx::IntSize& aSize, gfx::SurfaceFormat aFormat) override; protected: enum TransactionPhase {