зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1200595 - MacIOSurface TextureData implementation. r=mattwoodrow
This commit is contained in:
Родитель
51dd6c34c2
Коммит
4499d574c1
|
@ -18,9 +18,11 @@ TextureClient*
|
||||||
MacIOSurfaceImage::GetTextureClient(CompositableClient* aClient)
|
MacIOSurfaceImage::GetTextureClient(CompositableClient* aClient)
|
||||||
{
|
{
|
||||||
if (!mTextureClient) {
|
if (!mTextureClient) {
|
||||||
mTextureClient = MacIOSurfaceTextureClientOGL::Create(aClient->GetForwarder(),
|
mTextureClient = TextureClient::CreateWithData(
|
||||||
TextureFlags::DEFAULT,
|
MacIOSurfaceTextureData::Create(mSurface),
|
||||||
mSurface);
|
TextureFlags::DEFAULT,
|
||||||
|
aClient->GetForwarder()
|
||||||
|
);
|
||||||
}
|
}
|
||||||
return mTextureClient;
|
return mTextureClient;
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,71 +4,42 @@
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||||
|
|
||||||
#include "MacIOSurfaceTextureClientOGL.h"
|
#include "MacIOSurfaceTextureClientOGL.h"
|
||||||
#include "mozilla/gfx/MacIOSurface.h"
|
#include "mozilla/gfx/MacIOSurface.h"
|
||||||
|
|
||||||
namespace mozilla {
|
namespace mozilla {
|
||||||
namespace layers {
|
namespace layers {
|
||||||
|
|
||||||
MacIOSurfaceTextureClientOGL::MacIOSurfaceTextureClientOGL(ISurfaceAllocator* aAllcator,
|
MacIOSurfaceTextureData::MacIOSurfaceTextureData(MacIOSurface* aSurface)
|
||||||
TextureFlags aFlags)
|
: mSurface(aSurface)
|
||||||
: TextureClient(aAllcator, aFlags)
|
|
||||||
, mIsLocked(false)
|
|
||||||
{}
|
|
||||||
|
|
||||||
MacIOSurfaceTextureClientOGL::~MacIOSurfaceTextureClientOGL()
|
|
||||||
{
|
{
|
||||||
|
MOZ_ASSERT(mSurface);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
MacIOSurfaceTextureData::~MacIOSurfaceTextureData()
|
||||||
|
{}
|
||||||
|
|
||||||
void
|
void
|
||||||
MacIOSurfaceTextureClientOGL::FinalizeOnIPDLThread()
|
MacIOSurfaceTextureData::FinalizeOnIPDLThread(TextureClient* aWrapper)
|
||||||
{
|
{
|
||||||
if (mActor && mSurface) {
|
if (mSurface) {
|
||||||
KeepUntilFullDeallocation(MakeUnique<TKeepAlive<MacIOSurface>>(mSurface));
|
aWrapper->KeepUntilFullDeallocation(MakeUnique<TKeepAlive<MacIOSurface>>(mSurface));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// static
|
// static
|
||||||
already_AddRefed<MacIOSurfaceTextureClientOGL>
|
MacIOSurfaceTextureData*
|
||||||
MacIOSurfaceTextureClientOGL::Create(ISurfaceAllocator* aAllocator,
|
MacIOSurfaceTextureData::Create(MacIOSurface* aSurface)
|
||||||
TextureFlags aFlags,
|
|
||||||
MacIOSurface* aSurface)
|
|
||||||
{
|
{
|
||||||
RefPtr<MacIOSurfaceTextureClientOGL> texture =
|
MOZ_ASSERT(aSurface);
|
||||||
new MacIOSurfaceTextureClientOGL(aAllocator, aFlags);
|
if (!aSurface) {
|
||||||
MOZ_ASSERT(texture->IsValid());
|
return nullptr;
|
||||||
MOZ_ASSERT(!texture->IsAllocated());
|
|
||||||
texture->mSurface = aSurface;
|
|
||||||
return texture.forget();
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
|
||||||
MacIOSurfaceTextureClientOGL::Lock(OpenMode aMode)
|
|
||||||
{
|
|
||||||
MOZ_ASSERT(!mIsLocked);
|
|
||||||
mIsLocked = true;
|
|
||||||
return IsValid() && IsAllocated();
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
MacIOSurfaceTextureClientOGL::Unlock()
|
|
||||||
{
|
|
||||||
MOZ_ASSERT(mIsLocked);
|
|
||||||
mIsLocked = false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
|
||||||
MacIOSurfaceTextureClientOGL::IsLocked() const
|
|
||||||
{
|
|
||||||
return mIsLocked;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool
|
|
||||||
MacIOSurfaceTextureClientOGL::ToSurfaceDescriptor(SurfaceDescriptor& aOutDescriptor)
|
|
||||||
{
|
|
||||||
MOZ_ASSERT(IsValid());
|
|
||||||
if (!IsAllocated()) {
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
return new MacIOSurfaceTextureData(aSurface);
|
||||||
|
}
|
||||||
|
|
||||||
|
bool
|
||||||
|
MacIOSurfaceTextureData::Serialize(SurfaceDescriptor& aOutDescriptor)
|
||||||
|
{
|
||||||
aOutDescriptor = SurfaceDescriptorMacIOSurface(mSurface->GetIOSurfaceID(),
|
aOutDescriptor = SurfaceDescriptorMacIOSurface(mSurface->GetIOSurfaceID(),
|
||||||
mSurface->GetContentsScaleFactor(),
|
mSurface->GetContentsScaleFactor(),
|
||||||
!mSurface->HasAlpha());
|
!mSurface->HasAlpha());
|
||||||
|
@ -76,13 +47,19 @@ MacIOSurfaceTextureClientOGL::ToSurfaceDescriptor(SurfaceDescriptor& aOutDescrip
|
||||||
}
|
}
|
||||||
|
|
||||||
gfx::IntSize
|
gfx::IntSize
|
||||||
MacIOSurfaceTextureClientOGL::GetSize() const
|
MacIOSurfaceTextureData::GetSize() const
|
||||||
{
|
{
|
||||||
return gfx::IntSize(mSurface->GetDevicePixelWidth(), mSurface->GetDevicePixelHeight());
|
return gfx::IntSize(mSurface->GetDevicePixelWidth(), mSurface->GetDevicePixelHeight());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
gfx::SurfaceFormat
|
||||||
|
MacIOSurfaceTextureData::GetFormat() const
|
||||||
|
{
|
||||||
|
return mSurface->GetFormat();
|
||||||
|
}
|
||||||
|
|
||||||
already_AddRefed<gfx::DataSourceSurface>
|
already_AddRefed<gfx::DataSourceSurface>
|
||||||
MacIOSurfaceTextureClientOGL::GetAsSurface()
|
MacIOSurfaceTextureData::GetAsSurface()
|
||||||
{
|
{
|
||||||
RefPtr<gfx::SourceSurface> surf = mSurface->GetAsSurface();
|
RefPtr<gfx::SourceSurface> surf = mSurface->GetAsSurface();
|
||||||
return surf->GetDataSurface();
|
return surf->GetDataSurface();
|
||||||
|
|
|
@ -13,47 +13,38 @@ class MacIOSurface;
|
||||||
namespace mozilla {
|
namespace mozilla {
|
||||||
namespace layers {
|
namespace layers {
|
||||||
|
|
||||||
class MacIOSurfaceTextureClientOGL : public TextureClient
|
class MacIOSurfaceTextureData : public TextureData
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
explicit MacIOSurfaceTextureClientOGL(ISurfaceAllocator* aAllcator,
|
static MacIOSurfaceTextureData* Create(MacIOSurface* aSurface);
|
||||||
TextureFlags aFlags);
|
|
||||||
|
|
||||||
virtual ~MacIOSurfaceTextureClientOGL();
|
~MacIOSurfaceTextureData();
|
||||||
|
|
||||||
// Creates a TextureClient and init width.
|
|
||||||
static already_AddRefed<MacIOSurfaceTextureClientOGL>
|
|
||||||
Create(ISurfaceAllocator* aAllocator,
|
|
||||||
TextureFlags aFlags,
|
|
||||||
MacIOSurface* aSurface);
|
|
||||||
|
|
||||||
virtual bool Lock(OpenMode aMode) override;
|
|
||||||
|
|
||||||
virtual void Unlock() override;
|
|
||||||
|
|
||||||
virtual bool IsLocked() const override;
|
|
||||||
|
|
||||||
virtual bool IsAllocated() const override { return !!mSurface; }
|
|
||||||
|
|
||||||
virtual bool ToSurfaceDescriptor(SurfaceDescriptor& aOutDescriptor) override;
|
|
||||||
|
|
||||||
virtual gfx::IntSize GetSize() const override;
|
virtual gfx::IntSize GetSize() const override;
|
||||||
|
|
||||||
|
virtual gfx::SurfaceFormat GetFormat() const override;
|
||||||
|
|
||||||
|
virtual bool Lock(OpenMode, FenceHandle*) override { return true; }
|
||||||
|
|
||||||
|
virtual void Unlock() override {}
|
||||||
|
|
||||||
|
virtual bool Serialize(SurfaceDescriptor& aOutDescriptor) override;
|
||||||
|
|
||||||
virtual bool HasInternalBuffer() const override { return false; }
|
virtual bool HasInternalBuffer() const override { return false; }
|
||||||
|
|
||||||
virtual already_AddRefed<gfx::DataSourceSurface> GetAsSurface() override;
|
virtual void Deallocate(ISurfaceAllocator* aAllocator) override { mSurface = nullptr; }
|
||||||
|
|
||||||
// This TextureClient should not be used in a context where we use CreateSimilar
|
virtual void Forget(ISurfaceAllocator* aAllocator) override { mSurface = nullptr; }
|
||||||
// (ex. component alpha) because the underlying texture data is always created by
|
|
||||||
// an external producer.
|
// For debugging purposes only.
|
||||||
virtual already_AddRefed<TextureClient>
|
already_AddRefed<gfx::DataSourceSurface> GetAsSurface();
|
||||||
CreateSimilar(TextureFlags, TextureAllocationFlags) const override { return nullptr; }
|
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual void FinalizeOnIPDLThread() override;
|
explicit MacIOSurfaceTextureData(MacIOSurface* aSurface);
|
||||||
|
|
||||||
|
virtual void FinalizeOnIPDLThread(TextureClient* aWrapper) override;
|
||||||
|
|
||||||
RefPtr<MacIOSurface> mSurface;
|
RefPtr<MacIOSurface> mSurface;
|
||||||
bool mIsLocked;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace layers
|
} // namespace layers
|
||||||
|
|
Загрузка…
Ссылка в новой задаче