Bug 946958 part 4. Tidy up interaction with widgets. r=kats

This commit is contained in:
Nicholas Cameron 2013-12-09 14:40:59 +13:00
parent 9c90cbe26e
commit 93ca5b4477
10 changed files with 48 additions and 48 deletions

View File

@ -925,6 +925,17 @@ CompositorParent::GetAPZCTreeManager(uint64_t aLayersId)
return nullptr;
}
float
CompositorParent::ComputeRenderIntegrity()
{
if (mLayerManager) {
return mLayerManager->ComputeRenderIntegrity();
}
return 1.0f;
}
/**
* This class handles layer updates pushed directly from child
* processes to the compositor thread. It's associated with a

View File

@ -213,6 +213,8 @@ public:
*/
static const LayerTreeState* GetIndirectShadowTree(uint64_t aId);
float ComputeRenderIntegrity();
/**
* Tell all CompositorParents to update their last refresh to aTime and sample
* animations at this time stamp. If aIsTesting is true, the

View File

@ -6,7 +6,6 @@
#include "GLManager.h"
#include "CompositorOGL.h" // for CompositorOGL
#include "GLContext.h" // for GLContext
#include "Layers.h" // for LayerManager
#include "mozilla/Assertions.h" // for MOZ_CRASH
#include "mozilla/Attributes.h" // for MOZ_OVERRIDE
#include "mozilla/RefPtr.h" // for RefPtr
@ -15,7 +14,6 @@
#include "mozilla/layers/LayersTypes.h"
#include "mozilla/mozalloc.h" // for operator new, etc
#include "nsAutoPtr.h" // for nsRefPtr
#include "nsISupportsImpl.h" // for LayerManager::AddRef, etc
using namespace mozilla::gl;
@ -49,21 +47,14 @@ private:
};
/* static */ GLManager*
GLManager::CreateGLManager(LayerManager* aManager)
GLManager::CreateGLManager(LayerManagerComposite* aManager)
{
if (!aManager) {
return nullptr;
if (aManager &&
Compositor::GetBackend() == LAYERS_OPENGL) {
return new GLManagerCompositor(static_cast<CompositorOGL*>(
aManager->GetCompositor()));
}
if (aManager->GetBackendType() == LAYERS_NONE) {
if (Compositor::GetBackend() == LAYERS_OPENGL) {
return new GLManagerCompositor(static_cast<CompositorOGL*>(
static_cast<LayerManagerComposite*>(aManager)->GetCompositor()));
} else {
return nullptr;
}
}
MOZ_CRASH("Cannot create GLManager for non-GL layer manager");
return nullptr;
}
}

View File

@ -16,7 +16,7 @@ class GLContext;
namespace layers {
class LayerManager;
class LayerManagerComposite;
/**
* Minimal interface to allow widgets to draw using OpenGL. Abstracts
@ -26,7 +26,7 @@ class LayerManager;
class GLManager
{
public:
static GLManager* CreateGLManager(LayerManager* aManager);
static GLManager* CreateGLManager(LayerManagerComposite* aManager);
virtual ~GLManager() {}

View File

@ -2328,7 +2328,7 @@ nsWindow::GetIMEUpdatePreference()
}
void
nsWindow::DrawWindowUnderlay(LayerManager* aManager, nsIntRect aRect)
nsWindow::DrawWindowUnderlay(LayerManagerComposite* aManager, nsIntRect aRect)
{
JNIEnv *env = GetJNIForThread();
NS_ABORT_IF_FALSE(env, "No JNI environment at DrawWindowUnderlay()!");
@ -2362,7 +2362,7 @@ nsWindow::DrawWindowUnderlay(LayerManager* aManager, nsIntRect aRect)
}
void
nsWindow::DrawWindowOverlay(LayerManager* aManager, nsIntRect aRect)
nsWindow::DrawWindowOverlay(LayerManagerComposite* aManager, nsIntRect aRect)
{
PROFILER_LABEL("nsWindow", "DrawWindowOverlay");
JNIEnv *env = GetJNIForThread();
@ -2430,11 +2430,7 @@ float
nsWindow::ComputeRenderIntegrity()
{
if (sCompositorParent) {
mozilla::layers::LayerManagerComposite* manager =
static_cast<mozilla::layers::LayerManagerComposite*>(sCompositorParent->GetLayerManager());
if (manager) {
return manager->ComputeRenderIntegrity();
}
return sCompositorParent->ComputeRenderIntegrity();
}
return 1.f;

View File

@ -153,8 +153,8 @@ public:
NS_IMETHOD ReparentNativeWidget(nsIWidget* aNewParent);
virtual bool NeedsPaint();
virtual void DrawWindowUnderlay(LayerManager* aManager, nsIntRect aRect);
virtual void DrawWindowOverlay(LayerManager* aManager, nsIntRect aRect);
virtual void DrawWindowUnderlay(LayerManagerComposite* aManager, nsIntRect aRect);
virtual void DrawWindowOverlay(LayerManagerComposite* aManager, nsIntRect aRect);
virtual mozilla::layers::CompositorParent* NewCompositorParent(int aSurfaceWidth, int aSurfaceHeight) MOZ_OVERRIDE;

View File

@ -549,9 +549,9 @@ public:
virtual gfxASurface* GetThebesSurface();
virtual void PrepareWindowEffects() MOZ_OVERRIDE;
virtual void CleanupWindowEffects() MOZ_OVERRIDE;
virtual bool PreRender(LayerManager* aManager) MOZ_OVERRIDE;
virtual void PostRender(LayerManager* aManager) MOZ_OVERRIDE;
virtual void DrawWindowOverlay(LayerManager* aManager, nsIntRect aRect) MOZ_OVERRIDE;
virtual bool PreRender(LayerManagerComposite* aManager) MOZ_OVERRIDE;
virtual void PostRender(LayerManagerComposite* aManager) MOZ_OVERRIDE;
virtual void DrawWindowOverlay(LayerManagerComposite* aManager, nsIntRect aRect) MOZ_OVERRIDE;
virtual void UpdateThemeGeometries(const nsTArray<ThemeGeometry>& aThemeGeometries);

View File

@ -2046,7 +2046,7 @@ nsChildView::CleanupWindowEffects()
}
bool
nsChildView::PreRender(LayerManager* aManager)
nsChildView::PreRender(LayerManagerComposite* aManager)
{
nsAutoPtr<GLManager> manager(GLManager::CreateGLManager(aManager));
if (!manager) {
@ -2068,7 +2068,7 @@ nsChildView::PreRender(LayerManager* aManager)
}
void
nsChildView::PostRender(LayerManager* aManager)
nsChildView::PostRender(LayerManagerComposite* aManager)
{
nsAutoPtr<GLManager> manager(GLManager::CreateGLManager(aManager));
if (!manager) {
@ -2080,7 +2080,7 @@ nsChildView::PostRender(LayerManager* aManager)
}
void
nsChildView::DrawWindowOverlay(LayerManager* aManager, nsIntRect aRect)
nsChildView::DrawWindowOverlay(LayerManagerComposite* aManager, nsIntRect aRect)
{
nsAutoPtr<GLManager> manager(GLManager::CreateGLManager(aManager));
if (manager) {

View File

@ -41,6 +41,7 @@ namespace layers {
class Composer2D;
class CompositorChild;
class LayerManager;
class LayerManagerComposite;
class PLayerTransactionChild;
}
namespace gfx {
@ -96,8 +97,8 @@ typedef void* nsNativeWidget;
#endif
#define NS_IWIDGET_IID \
{ 0xa1f684e6, 0x2ae1, 0x4513, \
{ 0xb6, 0x89, 0xf4, 0xd4, 0xfe, 0x9d, 0x2c, 0xdb } }
{ 0x746cb189, 0x9793, 0x4e53, \
{ 0x89, 0x47, 0x78, 0x56, 0xb6, 0xcd, 0x9f, 0x71 } }
/*
* Window shadow styles
@ -464,6 +465,7 @@ class nsIWidget : public nsISupports {
typedef mozilla::layers::Composer2D Composer2D;
typedef mozilla::layers::CompositorChild CompositorChild;
typedef mozilla::layers::LayerManager LayerManager;
typedef mozilla::layers::LayerManagerComposite LayerManagerComposite;
typedef mozilla::layers::LayersBackend LayersBackend;
typedef mozilla::layers::PLayerTransactionChild PLayerTransactionChild;
typedef mozilla::widget::NotificationToIME NotificationToIME;
@ -1216,38 +1218,36 @@ class nsIWidget : public nsISupports {
virtual void CleanupWindowEffects() = 0;
/**
* Called before rendering using OpenGL. Returns false when the widget is
* Called before rendering using OMTC. Returns false when the widget is
* not ready to be rendered (for example while the window is closed).
*
* Always called from the compositing thread, which may be the main-thread if
* OMTC is not enabled.
*/
virtual bool PreRender(LayerManager* aManager) = 0;
virtual bool PreRender(LayerManagerComposite* aManager) = 0;
/**
* Called after rendering using OpenGL. Not called when rendering was
* Called after rendering using OMTC. Not called when rendering was
* cancelled by a negative return value from PreRender.
*
* Always called from the compositing thread, which may be the main-thread if
* OMTC is not enabled.
*/
virtual void PostRender(LayerManager* aManager) = 0;
virtual void PostRender(LayerManagerComposite* aManager) = 0;
/**
* Called before the LayerManager draws the layer tree.
*
* Always called from the compositing thread, which may be the main-thread if
* OMTC is not enabled.
* Always called from the compositing thread.
*/
virtual void DrawWindowUnderlay(LayerManager* aManager, nsIntRect aRect) = 0;
virtual void DrawWindowUnderlay(LayerManagerComposite* aManager, nsIntRect aRect) = 0;
/**
* Called after the LayerManager draws the layer tree
*
* Always called from the compositing thread, which may be the main-thread if
* OMTC is not enabled.
* Always called from the compositing thread.
*/
virtual void DrawWindowOverlay(LayerManager* aManager, nsIntRect aRect) = 0;
virtual void DrawWindowOverlay(LayerManagerComposite* aManager, nsIntRect aRect) = 0;
/**
* Return a DrawTarget for the window which can be composited into.

View File

@ -136,10 +136,10 @@ public:
virtual void CreateCompositor(int aWidth, int aHeight);
virtual void PrepareWindowEffects() {}
virtual void CleanupWindowEffects() {}
virtual bool PreRender(LayerManager* aManager) { return true; }
virtual void PostRender(LayerManager* aManager) {}
virtual void DrawWindowUnderlay(LayerManager* aManager, nsIntRect aRect) {}
virtual void DrawWindowOverlay(LayerManager* aManager, nsIntRect aRect) {}
virtual bool PreRender(LayerManagerComposite* aManager) { return true; }
virtual void PostRender(LayerManagerComposite* aManager) {}
virtual void DrawWindowUnderlay(LayerManagerComposite* aManager, nsIntRect aRect) {}
virtual void DrawWindowOverlay(LayerManagerComposite* aManager, nsIntRect aRect) {}
virtual mozilla::TemporaryRef<mozilla::gfx::DrawTarget> StartRemoteDrawing();
virtual void EndRemoteDrawing() { };
virtual void CleanupRemoteDrawing() { };