CanvasManagerParent.h (2772B)
1 /* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 2 /* vim: set ts=8 sts=2 et sw=2 tw=80: */ 3 /* This Source Code Form is subject to the terms of the Mozilla Public 4 * License, v. 2.0. If a copy of the MPL was not distributed with this 5 * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 6 #ifndef _include_gfx_ipc_CanvasManagerParent_h__ 7 #define _include_gfx_ipc_CanvasManagerParent_h__ 8 9 #include "mozilla/gfx/PCanvasManagerParent.h" 10 #include "mozilla/dom/ipc/IdType.h" 11 #include "mozilla/StaticMonitor.h" 12 #include "nsHashtablesFwd.h" 13 #include "nsTArray.h" 14 15 namespace mozilla { 16 namespace layers { 17 class CanvasTranslator; 18 class HostIPCAllocator; 19 class SharedSurfacesHolder; 20 class SurfaceDescriptor; 21 } // namespace layers 22 23 namespace gfx { 24 25 class CanvasManagerParent final : public PCanvasManagerParent { 26 public: 27 NS_INLINE_DECL_THREADSAFE_REFCOUNTING(CanvasManagerParent, override); 28 29 static void Init(Endpoint<PCanvasManagerParent>&& aEndpoint, 30 layers::SharedSurfacesHolder* aSharedSurfacesHolder, 31 const dom::ContentParentId& aContentId); 32 33 static void Shutdown(); 34 35 static void DisableRemoteCanvas(); 36 37 CanvasManagerParent(layers::SharedSurfacesHolder* aSharedSurfacesHolder, 38 const dom::ContentParentId& aContentId); 39 40 void Bind(Endpoint<PCanvasManagerParent>&& aEndpoint); 41 void ActorDestroy(ActorDestroyReason aWhy) override; 42 43 already_AddRefed<dom::PWebGLParent> AllocPWebGLParent(); 44 already_AddRefed<webgpu::PWebGPUParent> AllocPWebGPUParent(); 45 already_AddRefed<layers::PCanvasParent> AllocPCanvasParent(); 46 47 mozilla::ipc::IPCResult RecvInitialize(const uint32_t& aId); 48 mozilla::ipc::IPCResult RecvGetSnapshot( 49 const uint32_t& aManagerId, const ActorId& aProtocolId, 50 const Maybe<RemoteTextureOwnerId>& aOwnerId, 51 const Maybe<RawId>& aCommandEncoderId, 52 const Maybe<RawId>& aCommandBufferId, 53 webgl::FrontBufferSnapshotIpc* aResult); 54 55 static mozilla::ipc::IProtocol* GetCanvasActor( 56 dom::ContentParentId aContentId, uint32_t aManagerId, ActorId aCanvasId); 57 58 static already_AddRefed<SourceSurface> GetCanvasSurface( 59 dom::ContentParentId aContentId, uint32_t aManagerId, ActorId aCanvasId, 60 uintptr_t aSurfaceId, Maybe<layers::SurfaceDescriptor>* aDesc = nullptr); 61 62 private: 63 static void ShutdownInternal(); 64 static void DisableRemoteCanvasInternal(); 65 66 ~CanvasManagerParent() override; 67 68 RefPtr<layers::SharedSurfacesHolder> mSharedSurfacesHolder; 69 const dom::ContentParentId mContentId; 70 uint32_t mId = 0; 71 72 using ManagerSet = nsTHashSet<RefPtr<CanvasManagerParent>>; 73 static ManagerSet sManagers; 74 }; 75 76 } // namespace gfx 77 } // namespace mozilla 78 79 #endif // _include_gfx_ipc_CanvasManagerParent_h__