diff -r 000000000000 -r 6474c204b198 gfx/layers/ipc/ImageBridgeParent.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gfx/layers/ipc/ImageBridgeParent.h Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,123 @@ +/* -*- 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 gfx_layers_ipc_ImageBridgeParent_h_ +#define gfx_layers_ipc_ImageBridgeParent_h_ + +#include // for size_t +#include // for uint32_t, uint64_t +#include "CompositableTransactionParent.h" +#include "mozilla/Assertions.h" // for MOZ_ASSERT_HELPER2 +#include "mozilla/Attributes.h" // for MOZ_OVERRIDE +#include "mozilla/ipc/ProtocolUtils.h" +#include "mozilla/ipc/SharedMemory.h" // for SharedMemory, etc +#include "mozilla/layers/PImageBridgeParent.h" +#include "nsAutoPtr.h" // for nsRefPtr +#include "nsISupportsImpl.h" +#include "nsTArrayForwardDeclare.h" // for InfallibleTArray + +class MessageLoop; + +namespace mozilla { +namespace ipc { +class Shmem; +} + +namespace layers { + +/** + * ImageBridgeParent is the manager Protocol of ImageContainerParent. + * It's purpose is mainly to setup the IPDL connection. Most of the + * interesting stuff is in ImageContainerParent. + */ +class ImageBridgeParent : public PImageBridgeParent, + public CompositableParentManager +{ +public: + typedef InfallibleTArray EditArray; + typedef InfallibleTArray EditReplyArray; + + ImageBridgeParent(MessageLoop* aLoop, Transport* aTransport); + ~ImageBridgeParent(); + + virtual LayersBackend GetCompositorBackendType() const MOZ_OVERRIDE; + + virtual void ActorDestroy(ActorDestroyReason aWhy) MOZ_OVERRIDE; + + static PImageBridgeParent* + Create(Transport* aTransport, ProcessId aOtherProcess); + + virtual PGrallocBufferParent* + AllocPGrallocBufferParent(const IntSize&, const uint32_t&, const uint32_t&, + MaybeMagicGrallocBufferHandle*) MOZ_OVERRIDE; + + virtual bool + DeallocPGrallocBufferParent(PGrallocBufferParent* actor) MOZ_OVERRIDE; + + // PImageBridge + virtual bool RecvUpdate(const EditArray& aEdits, EditReplyArray* aReply) MOZ_OVERRIDE; + virtual bool RecvUpdateNoSwap(const EditArray& aEdits) MOZ_OVERRIDE; + + virtual bool IsAsync() const MOZ_OVERRIDE { return true; } + + PCompositableParent* AllocPCompositableParent(const TextureInfo& aInfo, + uint64_t*) MOZ_OVERRIDE; + bool DeallocPCompositableParent(PCompositableParent* aActor) MOZ_OVERRIDE; + + virtual PTextureParent* AllocPTextureParent(const SurfaceDescriptor& aSharedData, + const TextureFlags& aFlags) MOZ_OVERRIDE; + virtual bool DeallocPTextureParent(PTextureParent* actor) MOZ_OVERRIDE; + + // Shutdown step 1 + virtual bool RecvWillStop() MOZ_OVERRIDE; + // Shutdown step 2 + virtual bool RecvStop() MOZ_OVERRIDE; + + MessageLoop * GetMessageLoop(); + + + // ISurfaceAllocator + + bool AllocShmem(size_t aSize, + ipc::SharedMemory::SharedMemoryType aType, + ipc::Shmem* aShmem) MOZ_OVERRIDE + { + return AllocShmem(aSize, aType, aShmem); + } + + bool AllocUnsafeShmem(size_t aSize, + ipc::SharedMemory::SharedMemoryType aType, + ipc::Shmem* aShmem) MOZ_OVERRIDE + { + return AllocUnsafeShmem(aSize, aType, aShmem); + } + + void DeallocShmem(ipc::Shmem& aShmem) MOZ_OVERRIDE + { + PImageBridgeParent::DeallocShmem(aShmem); + } + + virtual bool IsSameProcess() const MOZ_OVERRIDE; + + // Overriden from IToplevelProtocol + IToplevelProtocol* + CloneToplevel(const InfallibleTArray& aFds, + base::ProcessHandle aPeerProcess, + mozilla::ipc::ProtocolCloneContext* aCtx) MOZ_OVERRIDE; + +private: + void DeferredDestroy(); + + MessageLoop* mMessageLoop; + Transport* mTransport; + // This keeps us alive until ActorDestroy(), at which point we do a + // deferred destruction of ourselves. + nsRefPtr mSelfRef; +}; + +} // layers +} // mozilla + +#endif // gfx_layers_ipc_ImageBridgeParent_h_