☠☠ backed out by 45193a6d7994 ☠ ☠ | |
author | Nicholas Cameron <ncameron@mozilla.com> |
Mon, 09 Dec 2013 14:40:58 +1300 | |
changeset 159453 | 9d1a4d83eccfd6e7c19b943564e0531cbe65c33e |
parent 159452 | 41839e4026bc9b6c34dc07c678104069cb955c34 |
child 159454 | 4639c5abea80c31958a6f199dac92719e57e1f62 |
push id | 37312 |
push user | ncameron@mozilla.com |
push date | Mon, 09 Dec 2013 01:41:58 +0000 |
treeherder | mozilla-inbound@6dd0a6cb9ab3 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | mattwoodrow |
bugs | 865033 |
milestone | 28.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
|
gfx/layers/ipc/CompositorParent.cpp | file | annotate | diff | comparison | revisions | |
gfx/layers/ipc/CompositorParent.h | file | annotate | diff | comparison | revisions |
--- a/gfx/layers/ipc/CompositorParent.cpp +++ b/gfx/layers/ipc/CompositorParent.cpp @@ -233,16 +233,17 @@ CompositorParent::~CompositorParent() void CompositorParent::Destroy() { NS_ABORT_IF_FALSE(ManagedPLayerTransactionParent().Length() == 0, "CompositorParent destroyed before managed PLayerTransactionParent"); // Ensure that the layer manager is destructed on the compositor thread. mLayerManager = nullptr; + mCompositor = nullptr; mCompositionManager = nullptr; mApzcTreeManager->ClearTree(); mApzcTreeManager = nullptr; sIndirectLayerTrees.erase(mRootLayerTreeID); } void CompositorParent::ForceIsFirstPaint() @@ -264,16 +265,17 @@ CompositorParent::RecvWillStop() LayerTreeState* lts = &it->second; if (lts->mParent == this) { mLayerManager->ClearCachedResources(lts->mRoot); lts->mLayerManager = nullptr; } } mLayerManager->Destroy(); mLayerManager = nullptr; + mCompositor = nullptr; mCompositionManager = nullptr; } return true; } bool CompositorParent::RecvStop() @@ -370,16 +372,17 @@ CompositorParent::ActorDestroy(ActorDest mPaused = true; RemoveCompositor(mCompositorID); if (mLayerManager) { mLayerManager->Destroy(); mLayerManager = nullptr; sIndirectLayerTrees[mRootLayerTreeID].mLayerManager = nullptr; mCompositionManager = nullptr; + mCompositor = nullptr; } } void CompositorParent::ScheduleRenderOnCompositorThread() { CancelableTask *renderTask = NewRunnableMethod(this, &CompositorParent::ScheduleComposition); @@ -392,32 +395,32 @@ CompositorParent::PauseComposition() NS_ABORT_IF_FALSE(CompositorThreadID() == PlatformThread::CurrentId(), "PauseComposition() can only be called on the compositor thread"); MonitorAutoLock lock(mPauseCompositionMonitor); if (!mPaused) { mPaused = true; - mLayerManager->GetCompositor()->Pause(); + mCompositor->Pause(); } // if anyone's waiting to make sure that composition really got paused, tell them lock.NotifyAll(); } void CompositorParent::ResumeComposition() { NS_ABORT_IF_FALSE(CompositorThreadID() == PlatformThread::CurrentId(), "ResumeComposition() can only be called on the compositor thread"); MonitorAutoLock lock(mResumeCompositionMonitor); - if (!mLayerManager->GetCompositor()->Resume()) { + if (!mCompositor->Resume()) { #ifdef MOZ_WIDGET_ANDROID // We can't get a surface. This could be because the activity changed between // the time resume was scheduled and now. __android_log_print(ANDROID_LOG_INFO, "CompositorParent", "Unable to renew compositor surface; remaining in paused state"); #endif lock.NotifyAll(); return; } @@ -438,18 +441,18 @@ CompositorParent::ForceComposition() ScheduleRenderOnCompositorThread(); } void CompositorParent::SetEGLSurfaceSize(int width, int height) { NS_ASSERTION(mUseExternalSurfaceSize, "Compositor created without UseExternalSurfaceSize provided"); mEGLSurfaceSize.SizeTo(width, height); - if (mLayerManager) { - mLayerManager->GetCompositor()->SetDestinationSurfaceSize(gfx::IntSize(mEGLSurfaceSize.width, mEGLSurfaceSize.height)); + if (mCompositor) { + mCompositor->SetDestinationSurfaceSize(gfx::IntSize(mEGLSurfaceSize.width, mEGLSurfaceSize.height)); } } void CompositorParent::ResumeCompositionAndResize(int width, int height) { SetEGLSurfaceSize(width, height); ResumeComposition(); @@ -704,44 +707,41 @@ CompositorParent::ShadowLayersUpdated(La } void CompositorParent::InitializeLayerManager(const nsTArray<LayersBackend>& aBackendHints) { NS_ASSERTION(!mLayerManager, "Already initialised mLayerManager"); for (size_t i = 0; i < aBackendHints.Length(); ++i) { - RefPtr<LayerManagerComposite> layerManager; + RefPtr<Compositor> compositor; if (aBackendHints[i] == LAYERS_OPENGL) { - layerManager = - new LayerManagerComposite(new CompositorOGL(mWidget, - mEGLSurfaceSize.width, - mEGLSurfaceSize.height, - mUseExternalSurfaceSize)); + compositor = new CompositorOGL(mWidget, + mEGLSurfaceSize.width, + mEGLSurfaceSize.height, + mUseExternalSurfaceSize); } else if (aBackendHints[i] == LAYERS_BASIC) { - layerManager = - new LayerManagerComposite(new BasicCompositor(mWidget)); + compositor = new BasicCompositor(mWidget); #ifdef XP_WIN } else if (aBackendHints[i] == LAYERS_D3D11) { - layerManager = - new LayerManagerComposite(new CompositorD3D11(mWidget)); + compositor = new CompositorD3D11(mWidget); } else if (aBackendHints[i] == LAYERS_D3D9) { - layerManager = - new LayerManagerComposite(new CompositorD3D9(this, mWidget)); + compositor = new CompositorD3D9(this, mWidget); #endif } - if (!layerManager) { - continue; - } + MOZ_ASSERT(compositor, "Passed invalid backend hint"); + RefPtr<LayerManagerComposite> layerManager = new LayerManagerComposite(compositor); layerManager->SetCompositorID(mCompositorID); if (layerManager->Initialize()) { mLayerManager = layerManager; + MOZ_ASSERT(compositor); + mCompositor = compositor; sIndirectLayerTrees[mRootLayerTreeID].mLayerManager = layerManager; return; } } } PLayerTransactionParent* CompositorParent::AllocPLayerTransactionParent(const nsTArray<LayersBackend>& aBackendHints,
--- a/gfx/layers/ipc/CompositorParent.h +++ b/gfx/layers/ipc/CompositorParent.h @@ -42,16 +42,17 @@ namespace mozilla { namespace gfx { class DrawTarget; } namespace layers { class APZCTreeManager; class AsyncCompositionManager; +class Compositor; class LayerManagerComposite; class LayerTransactionParent; struct ScopedLayerTreeRegistration { ScopedLayerTreeRegistration(uint64_t aLayersId, Layer* aRoot, GeckoContentController* aController); @@ -289,16 +290,17 @@ private: /** * Return true if current state allows compositing, that is * finishing a layers transaction. */ bool CanComposite(); nsRefPtr<LayerManagerComposite> mLayerManager; + nsRefPtr<Compositor> mCompositor; RefPtr<AsyncCompositionManager> mCompositionManager; nsIWidget* mWidget; CancelableTask *mCurrentCompositeTask; TimeStamp mLastCompose; TimeStamp mTestTime; bool mIsTesting; #ifdef COMPOSITOR_PERFORMANCE_WARNING TimeStamp mExpectedComposeTime;