summaryrefslogtreecommitdiffstats
path: root/gfx/ipc/PCanvasManager.ipdl
blob: 1ba6a88a422d3daac007c8c59bcea743d999f27f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*-
 * vim: sw=2 ts=8 et :
 */
/* 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/. */

include "mozilla/layers/LayersMessageUtils.h";
include protocol PCanvas;
include protocol PWebGL;
include protocol PWebGPU;

using mozilla::layers::RemoteTextureOwnerId from "mozilla/layers/LayersTypes.h";
using mozilla::webgl::FrontBufferSnapshotIpc from "mozilla/dom/WebGLIpdl.h";

namespace mozilla {
namespace gfx {

/**
 * The PCanvasManager protocol is the top-level protocol between the main and
 * worker threads in the content process, and the renderer thread in the
 * compositor process. This protocol should be used to create accelerated
 * canvas instances.
 */
[NeedsOtherPid, ParentProc=compositor, ChildProc=anydom]
sync protocol PCanvasManager
{
  manages PCanvas;
  manages PWebGL;
  manages PWebGPU;

parent:
  async PCanvas();

  // Actor that represents one WebGL context.
  async PWebGL();

  // Actor that represents one WebGPU context.
  async PWebGPU();

  // Set the local manager ID for the canvas manager.
  async Initialize(uint32_t aManagerId);

  // Get the front buffer pixels for the given manager/protocol. This is
  // intended to be used by the main thread in the content process to block
  // reading without having to block on the worker thread that owns the context
  // instance.
  sync GetSnapshot(uint32_t aManagerId, int32_t aProtocolId, RemoteTextureOwnerId? ownerId) returns (FrontBufferSnapshotIpc ret);
};

} // gfx
} // mozilla