tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

CanvasManagerChild.h (2576B)


      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_CanvasManagerChild_h__
      7 #define _include_gfx_ipc_CanvasManagerChild_h__
      8 
      9 #include "mozilla/Atomics.h"
     10 #include "mozilla/gfx/PCanvasManagerChild.h"
     11 #include "mozilla/gfx/Types.h"
     12 #include "mozilla/ThreadLocal.h"
     13 
     14 namespace mozilla {
     15 namespace dom {
     16 class CanvasRenderingContext2D;
     17 class ThreadSafeWorkerRef;
     18 class WorkerPrivate;
     19 }  // namespace dom
     20 
     21 namespace layers {
     22 class CanvasChild;
     23 class ActiveResourceTracker;
     24 }  // namespace layers
     25 
     26 namespace webgpu {
     27 class WebGPUChild;
     28 }  // namespace webgpu
     29 
     30 namespace gfx {
     31 class DataSourceSurface;
     32 
     33 class CanvasManagerChild final : public PCanvasManagerChild {
     34 public:
     35  NS_INLINE_DECL_THREADSAFE_REFCOUNTING(CanvasManagerChild, override);
     36 
     37  explicit CanvasManagerChild(dom::ThreadSafeWorkerRef* aWorkerRef,
     38                              uint32_t aId);
     39  uint32_t Id() const { return mId; }
     40  already_AddRefed<DataSourceSurface> GetSnapshot(
     41      uint32_t aManagerId, ActorId aProtocolId,
     42      const Maybe<RemoteTextureOwnerId>& aOwnerId,
     43      const Maybe<RawId>& aCommandEncoderId,
     44      const Maybe<RawId>& aCommandBufferId, SurfaceFormat aFormat,
     45      bool aPremultiply, bool aYFlip);
     46  void ActorDestroy(ActorDestroyReason aReason) override;
     47 
     48  static CanvasManagerChild* Get();
     49  static CanvasManagerChild* MaybeGet();
     50  static void Shutdown();
     51  static bool CreateParent(
     52      mozilla::ipc::Endpoint<PCanvasManagerParent>&& aEndpoint);
     53 
     54  bool IsCanvasActive() { return mActive; }
     55  void EndCanvasTransaction();
     56  void ClearCachedResources();
     57  void DeactivateCanvas();
     58  void BlockCanvas();
     59 
     60  RefPtr<layers::CanvasChild> GetCanvasChild();
     61 
     62  RefPtr<webgpu::WebGPUChild> GetWebGPUChild();
     63 
     64  layers::ActiveResourceTracker* GetActiveResourceTracker();
     65 
     66 private:
     67  ~CanvasManagerChild();
     68  void DestroyInternal();
     69  void Destroy();
     70 
     71  RefPtr<mozilla::dom::ThreadSafeWorkerRef> mWorkerRef;
     72  RefPtr<layers::CanvasChild> mCanvasChild;
     73  UniquePtr<layers::ActiveResourceTracker> mActiveResourceTracker;
     74  const uint32_t mId;
     75  bool mActive = true;
     76  bool mBlocked = false;
     77 
     78  static MOZ_THREAD_LOCAL(CanvasManagerChild*) sLocalManager;
     79  static Atomic<uint32_t> sNextId;
     80 };
     81 
     82 }  // namespace gfx
     83 }  // namespace mozilla
     84 
     85 #endif  // _include_gfx_ipc_CanvasManagerChild_h__