diff -r 000000000000 -r 6474c204b198 gfx/thebes/gfxReusableSharedImageSurfaceWrapper.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gfx/thebes/gfxReusableSharedImageSurfaceWrapper.h Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,61 @@ +/* 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 GFXSHMCOWSURFACEWRAPPER +#define GFXSHMCOWSURFACEWRAPPER + +#include "gfxReusableSurfaceWrapper.h" +#include "mozilla/RefPtr.h" + +class gfxSharedImageSurface; + +namespace mozilla { +namespace ipc { +class Shmem; +} +namespace layers { +class ISurfaceAllocator; +} +} + +/** + * A cross-process capable implementation of gfxReusableSurfaceWrapper based + * on gfxSharedImageSurface. + */ +class gfxReusableSharedImageSurfaceWrapper : public gfxReusableSurfaceWrapper { +public: + gfxReusableSharedImageSurfaceWrapper(mozilla::layers::ISurfaceAllocator* aAllocator, + gfxSharedImageSurface* aSurface); + ~gfxReusableSharedImageSurfaceWrapper(); + + const unsigned char* GetReadOnlyData() const MOZ_OVERRIDE; + gfxImageFormat Format() MOZ_OVERRIDE; + gfxReusableSurfaceWrapper* GetWritable(gfxImageSurface** aSurface) MOZ_OVERRIDE; + void ReadLock() MOZ_OVERRIDE; + void ReadUnlock() MOZ_OVERRIDE; + + Type GetType() + { + return TYPE_SHARED_IMAGE; + } + + /** + * Returns the shared memory segment that backs the shared image surface. + */ + mozilla::ipc::Shmem& GetShmem(); + + /** + * Create a gfxReusableSurfaceWrapper from the shared memory segment of a + * gfxSharedImageSurface. A ReadLock must be held, which will be adopted by + * the returned gfxReusableSurfaceWrapper. + */ + static already_AddRefed + Open(mozilla::layers::ISurfaceAllocator* aAllocator, const mozilla::ipc::Shmem& aShmem); + +private: + mozilla::RefPtr mAllocator; + nsRefPtr mSurface; +}; + +#endif // GFXSHMCOWSURFACEWRAPPER