mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-13 21:35:39 +00:00
Bug 946958 part 4. Tidy up interaction with widgets. r=kats
This commit is contained in:
parent
9c90cbe26e
commit
93ca5b4477
@ -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
|
||||
|
@ -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
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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() {}
|
||||
|
||||
|
@ -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;
|
||||
|
@ -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;
|
||||
|
||||
|
@ -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);
|
||||
|
||||
|
@ -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) {
|
||||
|
@ -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.
|
||||
|
@ -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() { };
|
||||
|
Loading…
Reference in New Issue
Block a user