Factor compositor initialization out of LayerManagerComposite. (bug 1245765 part 6, r=mattwoodrow)

This commit is contained in:
David Anderson 2016-02-29 01:53:14 -05:00
Родитель dd2df9d99a
Коммит d4db86d05e
5 изменённых файлов: 22 добавлений и 31 удалений

Просмотреть файл

@ -133,13 +133,6 @@ LayerManagerComposite::~LayerManagerComposite()
}
bool
LayerManagerComposite::Initialize()
{
bool result = mCompositor->Initialize();
return result;
}
void
LayerManagerComposite::Destroy()
{

Просмотреть файл

@ -76,11 +76,6 @@ public:
virtual void Destroy() override;
/**
* return True if initialization was succesful, false when it was not.
*/
bool Initialize();
/**
* Sets the clipping region for this layer manager. This is important on
* windows because using OGL we no longer have GDI's native clipping. Therefor

Просмотреть файл

@ -1566,6 +1566,20 @@ CompositorParent::InitializeLayerManager(const nsTArray<LayersBackend>& aBackend
NS_ASSERTION(!mLayerManager, "Already initialised mLayerManager");
NS_ASSERTION(!mCompositor, "Already initialised mCompositor");
mCompositor = NewCompositor(aBackendHints);
if (!mCompositor) {
return;
}
mLayerManager = new LayerManagerComposite(mCompositor);
MonitorAutoLock lock(*sIndirectLayerTreesLock);
sIndirectLayerTrees[mRootLayerTreeID].mLayerManager = mLayerManager;
}
RefPtr<Compositor>
CompositorParent::NewCompositor(const nsTArray<LayersBackend>& aBackendHints)
{
for (size_t i = 0; i < aBackendHints.Length(); ++i) {
RefPtr<Compositor> compositor;
if (aBackendHints[i] == LayersBackend::LAYERS_OPENGL) {
@ -1590,24 +1604,13 @@ CompositorParent::InitializeLayerManager(const nsTArray<LayersBackend>& aBackend
#endif
}
if (!compositor) {
// We passed a backend hint for which we can't create a compositor.
// For example, we sometime pass LayersBackend::LAYERS_NONE as filler in aBackendHints.
continue;
}
compositor->SetCompositorID(mCompositorID);
RefPtr<LayerManagerComposite> layerManager = new LayerManagerComposite(compositor);
if (layerManager->Initialize()) {
mLayerManager = layerManager;
MOZ_ASSERT(compositor);
mCompositor = compositor;
MonitorAutoLock lock(*sIndirectLayerTreesLock);
sIndirectLayerTrees[mRootLayerTreeID].mLayerManager = layerManager;
return;
if (compositor && compositor->Initialize()) {
compositor->SetCompositorID(mCompositorID);
return compositor;
}
}
return nullptr;
}
PLayerTransactionParent*

Просмотреть файл

@ -501,6 +501,8 @@ protected:
void CancelCurrentCompositeTask();
void Invalidate();
RefPtr<Compositor> NewCompositor(const nsTArray<LayersBackend>& aBackendHints);
/**
* Add a compositor to the global compositor map.
*/

Просмотреть файл

@ -128,7 +128,7 @@ static already_AddRefed<Compositor> CreateTestCompositor(LayersBackend backend,
#endif
}
if (!compositor) {
if (!compositor || !compositor->Initialize()) {
printf_stderr("Failed to construct layer manager for the requested backend\n");
abort();
}
@ -151,8 +151,6 @@ static std::vector<LayerManagerData> GetLayerManagers(std::vector<LayersBackend>
RefPtr<LayerManagerComposite> layerManager = new LayerManagerComposite(compositor);
layerManager->Initialize();
managers.push_back(LayerManagerData(compositor, widget, layerManager));
}