gecko-dev/gfx/layers/basic/X11BasicCompositor.h
Frederic Plourde ebac609549 b=1015218 Buffer image content layers on server-side xlib surfaces with OMTC basic r=karlt
With image offscreen surfaces enabled for content layers on GTK3, our Basic
compositor needs a way to deal with image layers buffering and compositing in
a performant way.  This patch subclasses BasicCompositor into a new
X11BasicCompositor and makes use of a new TextureSource
(X11DataTextureSourceBasic) in order to buffer TextureHost's data into
gfxXlibSurface on compositor side so that we can use XRender when available to
composite layer contents directly to the Window.

When this buffering will occur, switch to ContentClientSingleBuffered.

--HG--
extra : rebase_source : adad6b1c05dcf516a1ea84c6a529df5f141c198f
2014-07-23 11:02:25 +12:00

58 lines
1.8 KiB
C++

/* -*- Mode: C++; tab-width: 20; indent-tabs-mode: nil; c-basic-offset: 2 -*-
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef MOZILLA_GFX_X11BASICCOMPOSITOR_H
#define MOZILLA_GFX_X11BASICCOMPOSITOR_H
#include "mozilla/layers/BasicCompositor.h"
#include "mozilla/layers/X11TextureSourceBasic.h"
#include "mozilla/layers/TextureHostBasic.h"
#include "gfxXlibSurface.h"
#include "mozilla/gfx/2D.h"
namespace mozilla {
namespace layers {
// TextureSource for Image-backed surfaces.
class X11DataTextureSourceBasic : public DataTextureSource
, public TextureSourceBasic
{
public:
X11DataTextureSourceBasic() {};
virtual bool Update(gfx::DataSourceSurface* aSurface,
nsIntRegion* aDestRegion = nullptr,
gfx::IntPoint* aSrcOffset = nullptr) MOZ_OVERRIDE;
virtual TextureSourceBasic* AsSourceBasic() MOZ_OVERRIDE;
virtual gfx::SourceSurface* GetSurface(gfx::DrawTarget* aTarget) MOZ_OVERRIDE;
virtual void DeallocateDeviceData() MOZ_OVERRIDE;
virtual gfx::IntSize GetSize() const MOZ_OVERRIDE;
virtual gfx::SurfaceFormat GetFormat() const MOZ_OVERRIDE;
private:
// We are going to buffer layer content on this xlib draw target
RefPtr<mozilla::gfx::DrawTarget> mBufferDrawTarget;
};
class X11BasicCompositor : public BasicCompositor
{
public:
X11BasicCompositor(nsIWidget *aWidget) : BasicCompositor(aWidget) {}
virtual TemporaryRef<DataTextureSource>
CreateDataTextureSource(TextureFlags aFlags = TextureFlags::NO_FLAGS) MOZ_OVERRIDE;
};
} // namespace layers
} // namespace mozilla
#endif /* MOZILLA_GFX_X11BASICCOMPOSITOR_H */