Bug 564991. Part 8: Hoist GetLayerType out of individual layer manager types and make it available for all layers. r=jrmuizel,sr=vlad

This commit is contained in:
Matt Woodrow
2010-07-01 20:01:09 -05:00
parent 5c97e52a5d
commit a349797ef9
24 changed files with 33 additions and 102 deletions

View File

@@ -198,6 +198,8 @@ public:
ImageContainer* GetContainer() { return mContainer; } ImageContainer* GetContainer() { return mContainer; }
gfxPattern::GraphicsFilter GetFilter() { return mFilter; } gfxPattern::GraphicsFilter GetFilter() { return mFilter; }
NS_LAYER_DECL_NAME("ImageLayer", TYPE_IMAGE)
protected: protected:
ImageLayer(LayerManager* aManager, void* aImplData) ImageLayer(LayerManager* aManager, void* aImplData)
: Layer(aManager, aImplData), mFilter(gfxPattern::FILTER_GOOD) {} : Layer(aManager, aImplData), mFilter(gfxPattern::FILTER_GOOD) {}

View File

@@ -67,6 +67,15 @@ class ColorLayer;
class ImageContainer; class ImageContainer;
class CanvasLayer; class CanvasLayer;
#if defined(DEBUG) || defined(PR_LOGGING)
#define NS_LAYER_DECL_NAME(n, e) \
virtual const char* Name() { return n; } \
virtual LayerType GetType() { return e; }
#else
#define NS_LAYER_DECL_NAME(n, e) \
virtual LayerType GetType() { return e; }
#endif
/* /*
* Motivation: For truly smooth animation and video playback, we need to * Motivation: For truly smooth animation and video playback, we need to
* be able to compose frames and render them on a dedicated thread (i.e. * be able to compose frames and render them on a dedicated thread (i.e.
@@ -237,6 +246,14 @@ class THEBES_API Layer {
NS_INLINE_DECL_REFCOUNTING(Layer) NS_INLINE_DECL_REFCOUNTING(Layer)
public: public:
enum LayerType {
TYPE_THEBES,
TYPE_CONTAINER,
TYPE_IMAGE,
TYPE_COLOR,
TYPE_CANVAS
};
virtual ~Layer() {} virtual ~Layer() {}
/** /**
@@ -336,7 +353,12 @@ public:
* a ThebesLayer. * a ThebesLayer.
*/ */
virtual ThebesLayer* AsThebesLayer() { return nsnull; } virtual ThebesLayer* AsThebesLayer() { return nsnull; }
#ifdef DEBUG
virtual const char* Name() = 0;
#endif
virtual LayerType GetType() = 0;
/** /**
* Only the implementation should call this. This is per-implementation * Only the implementation should call this. This is per-implementation
* private data. Normally, all layers with a given layer manager * private data. Normally, all layers with a given layer manager
@@ -406,6 +428,8 @@ public:
virtual ThebesLayer* AsThebesLayer() { return this; } virtual ThebesLayer* AsThebesLayer() { return this; }
NS_LAYER_DECL_NAME("ThebesLayer", TYPE_THEBES)
protected: protected:
ThebesLayer(LayerManager* aManager, void* aImplData) ThebesLayer(LayerManager* aManager, void* aImplData)
: Layer(aManager, aImplData) {} : Layer(aManager, aImplData) {}
@@ -437,6 +461,8 @@ public:
// This getter can be used anytime. // This getter can be used anytime.
virtual Layer* GetFirstChild() { return mFirstChild; } virtual Layer* GetFirstChild() { return mFirstChild; }
NS_LAYER_DECL_NAME("ContainerLayer", TYPE_CONTAINER)
protected: protected:
ContainerLayer(LayerManager* aManager, void* aImplData) ContainerLayer(LayerManager* aManager, void* aImplData)
: Layer(aManager, aImplData), : Layer(aManager, aImplData),
@@ -465,6 +491,8 @@ public:
// This getter can be used anytime. // This getter can be used anytime.
virtual const gfxRGBA& GetColor() { return mColor; } virtual const gfxRGBA& GetColor() { return mColor; }
NS_LAYER_DECL_NAME("ColorLayer", TYPE_COLOR)
protected: protected:
ColorLayer(LayerManager* aManager, void* aImplData) ColorLayer(LayerManager* aManager, void* aImplData)
: Layer(aManager, aImplData), : Layer(aManager, aImplData),
@@ -531,6 +559,8 @@ public:
void SetFilter(gfxPattern::GraphicsFilter aFilter) { mFilter = aFilter; } void SetFilter(gfxPattern::GraphicsFilter aFilter) { mFilter = aFilter; }
gfxPattern::GraphicsFilter GetFilter() const { return mFilter; } gfxPattern::GraphicsFilter GetFilter() const { return mFilter; }
NS_LAYER_DECL_NAME("CanvasLayer", TYPE_CANVAS)
protected: protected:
CanvasLayer(LayerManager* aManager, void* aImplData) CanvasLayer(LayerManager* aManager, void* aImplData)
: Layer(aManager, aImplData), mFilter(gfxPattern::FILTER_GOOD) {} : Layer(aManager, aImplData), mFilter(gfxPattern::FILTER_GOOD) {}

View File

@@ -166,12 +166,6 @@ CanvasLayerD3D9::Updated(const nsIntRect& aRect)
} }
} }
LayerD3D9::LayerType
CanvasLayerD3D9::GetType()
{
return TYPE_CANVAS;
}
Layer* Layer*
CanvasLayerD3D9::GetLayer() CanvasLayerD3D9::GetLayer()
{ {

View File

@@ -68,7 +68,6 @@ public:
virtual void Updated(const nsIntRect& aRect); virtual void Updated(const nsIntRect& aRect);
// LayerD3D9 implementation // LayerD3D9 implementation
virtual LayerType GetType();
virtual Layer* GetLayer(); virtual Layer* GetLayer();
virtual void RenderLayer(); virtual void RenderLayer();

View File

@@ -41,12 +41,6 @@
namespace mozilla { namespace mozilla {
namespace layers { namespace layers {
LayerD3D9::LayerType
ColorLayerD3D9::GetType()
{
return TYPE_COLOR;
}
Layer* Layer*
ColorLayerD3D9::GetLayer() ColorLayerD3D9::GetLayer()
{ {

View File

@@ -56,8 +56,6 @@ public:
} }
// LayerD3D9 Implementation // LayerD3D9 Implementation
virtual LayerType GetType();
virtual Layer* GetLayer(); virtual Layer* GetLayer();
virtual void RenderLayer(); virtual void RenderLayer();

View File

@@ -119,12 +119,6 @@ ContainerLayerD3D9::RemoveChild(Layer *aChild)
} }
} }
LayerD3D9::LayerType
ContainerLayerD3D9::GetType()
{
return TYPE_CONTAINER;
}
Layer* Layer*
ContainerLayerD3D9::GetLayer() ContainerLayerD3D9::GetLayer()
{ {

View File

@@ -59,8 +59,6 @@ public:
virtual void RemoveChild(Layer* aChild); virtual void RemoveChild(Layer* aChild);
/* LayerD3D9 implementation */ /* LayerD3D9 implementation */
LayerType GetType();
Layer* GetLayer(); Layer* GetLayer();
LayerD3D9* GetFirstChildD3D9(); LayerD3D9* GetFirstChildD3D9();

View File

@@ -130,12 +130,6 @@ ImageContainerD3D9::GetCurrentSize()
return gfxIntSize(0,0); return gfxIntSize(0,0);
} }
LayerD3D9::LayerType
ImageLayerD3D9::GetType()
{
return TYPE_IMAGE;
}
Layer* Layer*
ImageLayerD3D9::GetLayer() ImageLayerD3D9::GetLayer()
{ {

View File

@@ -82,8 +82,6 @@ public:
} }
// LayerD3D9 Implementation // LayerD3D9 Implementation
virtual LayerType GetType();
virtual Layer* GetLayer(); virtual Layer* GetLayer();
virtual void RenderLayer(); virtual void RenderLayer();

View File

@@ -212,11 +212,6 @@ class LayerD3D9
public: public:
LayerD3D9(LayerManagerD3D9 *aManager); LayerD3D9(LayerManagerD3D9 *aManager);
enum LayerType { TYPE_THEBES, TYPE_CONTAINER, TYPE_IMAGE, TYPE_COLOR,
TYPE_CANVAS };
virtual LayerType GetType() = 0;
virtual LayerD3D9 *GetFirstChildD3D9() { return nsnull; } virtual LayerD3D9 *GetFirstChildD3D9() { return nsnull; }
void SetFirstChild(LayerD3D9 *aParent); void SetFirstChild(LayerD3D9 *aParent);

View File

@@ -79,12 +79,6 @@ ThebesLayerD3D9::InvalidateRegion(const nsIntRegion &aRegion)
mInvalidatedRect = invalidatedRegion.GetBounds(); mInvalidatedRect = invalidatedRegion.GetBounds();
} }
LayerD3D9::LayerType
ThebesLayerD3D9::GetType()
{
return TYPE_THEBES;
}
void void
ThebesLayerD3D9::RenderLayer() ThebesLayerD3D9::RenderLayer()
{ {

View File

@@ -60,7 +60,6 @@ public:
void InvalidateRegion(const nsIntRegion& aRegion); void InvalidateRegion(const nsIntRegion& aRegion);
/* LayerD3D9 implementation */ /* LayerD3D9 implementation */
LayerType GetType();
Layer* GetLayer(); Layer* GetLayer();
virtual PRBool IsEmpty(); virtual PRBool IsEmpty();
virtual void RenderLayer(); virtual void RenderLayer();

View File

@@ -64,7 +64,6 @@ public:
virtual void Updated(const nsIntRect& aRect); virtual void Updated(const nsIntRect& aRect);
// LayerOGL implementation // LayerOGL implementation
virtual LayerType GetType() { return TYPE_CANVAS; }
virtual Layer* GetLayer() { return this; } virtual Layer* GetLayer() { return this; }
virtual void RenderLayer(int aPreviousFrameBuffer, virtual void RenderLayer(int aPreviousFrameBuffer,
const nsIntPoint& aOffset); const nsIntPoint& aOffset);

View File

@@ -41,12 +41,6 @@
namespace mozilla { namespace mozilla {
namespace layers { namespace layers {
LayerOGL::LayerType
ColorLayerOGL::GetType()
{
return TYPE_COLOR;
}
Layer* Layer*
ColorLayerOGL::GetLayer() ColorLayerOGL::GetLayer()
{ {

View File

@@ -55,8 +55,6 @@ public:
} }
// LayerOGL Implementation // LayerOGL Implementation
virtual LayerType GetType();
virtual Layer* GetLayer(); virtual Layer* GetLayer();
virtual void RenderLayer(int aPreviousFrameBuffer, virtual void RenderLayer(int aPreviousFrameBuffer,

View File

@@ -119,12 +119,6 @@ ContainerLayerOGL::RemoveChild(Layer *aChild)
} }
} }
LayerOGL::LayerType
ContainerLayerOGL::GetType()
{
return TYPE_CONTAINER;
}
Layer* Layer*
ContainerLayerOGL::GetLayer() ContainerLayerOGL::GetLayer()
{ {

View File

@@ -58,8 +58,6 @@ public:
void RemoveChild(Layer* aChild); void RemoveChild(Layer* aChild);
/** LayerOGL implementation */ /** LayerOGL implementation */
LayerType GetType();
Layer* GetLayer(); Layer* GetLayer();
LayerOGL* GetFirstChildOGL(); LayerOGL* GetFirstChildOGL();

View File

@@ -255,12 +255,6 @@ ImageContainerOGL::GetCurrentSize()
return gfxIntSize(0,0); return gfxIntSize(0,0);
} }
LayerOGL::LayerType
ImageLayerOGL::GetType()
{
return TYPE_IMAGE;
}
Layer* Layer*
ImageLayerOGL::GetLayer() ImageLayerOGL::GetLayer()
{ {

View File

@@ -171,8 +171,6 @@ public:
} }
// LayerOGL Implementation // LayerOGL Implementation
virtual LayerType GetType();
virtual Layer* GetLayer(); virtual Layer* GetLayer();
virtual void RenderLayer(int aPreviousFrameBuffer, virtual void RenderLayer(int aPreviousFrameBuffer,

View File

@@ -62,22 +62,6 @@ using namespace mozilla::gl;
int LayerManagerOGLProgram::sCurrentProgramKey = 0; int LayerManagerOGLProgram::sCurrentProgramKey = 0;
static void
DumpLayerAndChildren(LayerOGL *l, int advance = 0)
{
for (int i = 0; i < advance; i++)
fprintf(stderr, " ");
fprintf(stderr, "%p: Layer type %d\n", l, l->GetType());
l = l->GetFirstChildOGL();
while (l) {
DumpLayerAndChildren(l, advance+1);
Layer *genl = l->GetLayer()->GetNextSibling();
l = genl ? static_cast<LayerOGL*>(genl->ImplData()) : nsnull;
}
}
/** /**
* LayerManagerOGL * LayerManagerOGL
*/ */

View File

@@ -358,16 +358,6 @@ public:
: mOGLManager(aManager) : mOGLManager(aManager)
{ } { }
enum LayerType {
TYPE_THEBES,
TYPE_CONTAINER,
TYPE_IMAGE,
TYPE_COLOR,
TYPE_CANVAS
};
virtual LayerType GetType() = 0;
virtual LayerOGL *GetFirstChildOGL() { virtual LayerOGL *GetFirstChildOGL() {
return nsnull; return nsnull;
} }

View File

@@ -129,12 +129,6 @@ ThebesLayerOGL::InvalidateRegion(const nsIntRegion &aRegion)
mValidRegion.Sub(mValidRegion, aRegion); mValidRegion.Sub(mValidRegion, aRegion);
} }
LayerOGL::LayerType
ThebesLayerOGL::GetType()
{
return TYPE_THEBES;
}
void void
ThebesLayerOGL::RenderLayer(int aPreviousFrameBuffer, ThebesLayerOGL::RenderLayer(int aPreviousFrameBuffer,
const nsIntPoint& aOffset) const nsIntPoint& aOffset)

View File

@@ -64,7 +64,6 @@ public:
void InvalidateRegion(const nsIntRegion& aRegion); void InvalidateRegion(const nsIntRegion& aRegion);
/** LayerOGL implementation */ /** LayerOGL implementation */
LayerType GetType();
Layer* GetLayer(); Layer* GetLayer();
virtual PRBool IsEmpty(); virtual PRBool IsEmpty();
virtual void RenderLayer(int aPreviousFrameBuffer, virtual void RenderLayer(int aPreviousFrameBuffer,