summaryrefslogtreecommitdiffstats
path: root/gfx/layers/ipc/PLayerTransaction.ipdl
blob: ddc50216e5c381802760358a088a02abaadab9b7 (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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/* -*- 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 LayersSurfaces;
include LayersMessages;
include protocol PCompositorBridge;
include protocol PTexture;

include "mozilla/GfxMessageUtils.h";
include "mozilla/layers/LayersMessageUtils.h";

using struct mozilla::layers::TextureInfo from "mozilla/layers/CompositorTypes.h";
using struct mozilla::void_t from "mozilla/ipc/IPCCore.h";
using struct mozilla::null_t from "mozilla/ipc/IPCCore.h";
using class mozilla::layers::APZTestData from "mozilla/layers/APZTestData.h";
using mozilla::layers::FrameUniformityData from "mozilla/layers/FrameUniformityData.h";
using mozilla::layers::ScrollableLayerGuid from "mozilla/layers/ScrollableLayerGuid.h";
using mozilla::layers::ScrollableLayerGuid::ViewID from "mozilla/layers/ScrollableLayerGuid.h";
using struct mozilla::layers::TextureFactoryIdentifier from "mozilla/layers/CompositorTypes.h";
using mozilla::layers::LayersBackend from "mozilla/layers/LayersTypes.h";
using mozilla::layers::LayerHandle from "mozilla/layers/LayersTypes.h";
using mozilla::layers::CompositableHandle from "mozilla/layers/LayersTypes.h";
using mozilla::layers::LayersObserverEpoch from "mozilla/layers/LayersTypes.h";
using mozilla::layers::TransactionId from "mozilla/layers/LayersTypes.h";

/**
 * The layers protocol is spoken between thread contexts that manage
 * layer (sub)trees.  The protocol comprises atomically publishing
 * layer subtrees to a "shadow" thread context (which grafts the
 * subtree into its own tree), and atomically updating a published
 * subtree.  ("Atomic" in this sense is wrt painting.)
 */

namespace mozilla {
namespace layers {

/**
 * The PLayerTransaction protocol manages the layer tree for a single "browser".
 * The "browser" can be a top-level browser window, in which case the PLayer-
 * TransactionChild exists in the UI process. The "browser" can also be a content
 * tab, in which case the PLayerTransactionChild exists in the content process.
 * In either case, the PLayerTransactionParent exists in the GPU process (if
 * there is one) or the UI process otherwise.
 */
sync protocol PLayerTransaction {
  manager PCompositorBridge;

parent:
  // The isFirstPaint flag can be used to indicate that this is the first update
  // for a particular document.
  async Update(TransactionInfo txn);

  async PaintTime(TransactionId id, TimeDuration paintTime);

  async SetLayersObserverEpoch(LayersObserverEpoch aChildEpoch);

  // Create a new Compositable.
  async NewCompositable(CompositableHandle handle, TextureInfo info);

  // Release an object that is no longer in use.
  async ReleaseLayer(LayerHandle layer);
  async ReleaseCompositable(CompositableHandle compositable);

  // Tell the compositor to notify APZ that a layer has been confirmed for an
  // input event.
  async SetConfirmedTargetAPZC(uint64_t aInputBlockId, ScrollableLayerGuid[] aTargets);

  // Testing APIs

  // Enter test mode, set the sample time to sampleTime, and resample
  // animations. sampleTime must not be null.
  sync SetTestSampleTime(TimeStamp sampleTime);
  // Leave test mode and resume normal compositing
  sync LeaveTestMode();

  // Returns |OMTAValue| applied to the layer.
  sync GetAnimationValue(uint64_t aCompositorAnimationId) returns (OMTAValue value);

  // Returns the value of the transform applied to the layer by animation and
  // APZC.
  sync GetTransform(LayerHandle layer) returns (Matrix4x4? transform);

  // The next time the layer tree is composited, add this async scroll offset in
  // CSS pixels for the given ViewID.
  // Useful for testing rendering of async scrolling.
  sync SetAsyncScrollOffset(ViewID id, float x, float y);

  // The next time the layer tree is composited, include this async zoom in
  // for the given ViewID.
  // Useful for testing rendering of async zooming.
  sync SetAsyncZoom(ViewID id, float zoom);

  // Flush any pending APZ repaints to the main thread.
  async FlushApzRepaints();

  // Drop any front buffers that might be retained on the compositor
  // side.
  async ClearCachedResources();

  // Schedule a composite if one isn't already scheduled.
  async ScheduleComposite();

  // Get a copy of the compositor-side APZ test data instance for this
  // layers id.
  sync GetAPZTestData() returns (APZTestData data);

  // Child requests frame uniformity measurements
  sync GetFrameUniformity() returns (FrameUniformityData data);

  // Query a named property from the last frame
  sync RequestProperty(nsString property) returns (float value);

  // Return the TextureFactoryIdentifier for this compositor.
  sync GetTextureFactoryIdentifier() returns (TextureFactoryIdentifier aIdentifier);

  async RecordPaintTimes(PaintTiming timing);

  async Shutdown();
  sync ShutdownSync();

child:
  async __delete__();
};

} // namespace layers
} // namespace mozilla