summaryrefslogtreecommitdiffstats
path: root/gfx/layers/ipc/LayersMessages.ipdlh
diff options
context:
space:
mode:
Diffstat (limited to 'gfx/layers/ipc/LayersMessages.ipdlh')
-rw-r--r--gfx/layers/ipc/LayersMessages.ipdlh499
1 files changed, 499 insertions, 0 deletions
diff --git a/gfx/layers/ipc/LayersMessages.ipdlh b/gfx/layers/ipc/LayersMessages.ipdlh
new file mode 100644
index 000000000..dbbb3649a
--- /dev/null
+++ b/gfx/layers/ipc/LayersMessages.ipdlh
@@ -0,0 +1,499 @@
+/* -*- 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 protocol PCompositable;
+include protocol PCompositorBridge;
+include protocol PLayer;
+include protocol PImageContainer;
+include protocol PRenderFrame;
+include protocol PTexture;
+
+include "gfxipc/ShadowLayerUtils.h";
+include "mozilla/GfxMessageUtils.h";
+include "ImageLayers.h";
+
+using mozilla::gfx::SamplingFilter from "mozilla/gfx/2D.h";
+using struct mozilla::gfx::Color from "mozilla/gfx/2D.h";
+using struct mozilla::gfx::Point3D from "mozilla/gfx/Point.h";
+using mozilla::gfx::IntPoint from "mozilla/gfx/Point.h";
+using class mozilla::gfx::Matrix4x4 from "mozilla/gfx/Matrix.h";
+using nscoord from "nsCoord.h";
+using struct nsRect from "nsRect.h";
+using struct nsPoint from "nsPoint.h";
+using class mozilla::TimeDuration from "mozilla/TimeStamp.h";
+using class mozilla::TimeStamp from "mozilla/TimeStamp.h";
+using mozilla::ScreenRotation from "mozilla/WidgetUtils.h";
+using nsCSSPropertyID from "nsCSSPropertyID.h";
+using mozilla::dom::ScreenOrientationInternal from "mozilla/dom/ScreenOrientation.h";
+using struct mozilla::layers::TextureInfo from "mozilla/layers/CompositorTypes.h";
+using mozilla::LayerMargin from "Units.h";
+using mozilla::LayerPoint from "Units.h";
+using mozilla::LayerRect from "Units.h";
+using mozilla::LayerIntRegion from "Units.h";
+using mozilla::ParentLayerIntRect from "Units.h";
+using mozilla::LayoutDeviceIntRect from "Units.h";
+using mozilla::layers::ScaleMode from "mozilla/layers/LayersTypes.h";
+using mozilla::layers::EventRegions from "mozilla/layers/LayersTypes.h";
+using mozilla::layers::EventRegionsOverride from "mozilla/layers/LayersTypes.h";
+using mozilla::layers::DiagnosticTypes from "mozilla/layers/CompositorTypes.h";
+using struct mozilla::layers::ScrollMetadata from "FrameMetrics.h";
+using mozilla::layers::FrameMetrics::ViewID from "FrameMetrics.h";
+using mozilla::layers::LayersBackend from "mozilla/layers/LayersTypes.h";
+using mozilla::layers::MaybeLayerClip from "FrameMetrics.h";
+
+namespace mozilla {
+namespace layers {
+
+struct TargetConfig {
+ IntRect naturalBounds;
+ ScreenRotation rotation;
+ ScreenOrientationInternal orientation;
+ nsIntRegion clearRegion;
+};
+
+// Create a shadow layer for |layer|
+struct OpCreatePaintedLayer { PLayer layer; };
+struct OpCreateContainerLayer { PLayer layer; };
+struct OpCreateImageLayer { PLayer layer; };
+struct OpCreateColorLayer { PLayer layer; };
+struct OpCreateCanvasLayer { PLayer layer; };
+struct OpCreateRefLayer { PLayer layer; };
+
+struct OpAttachCompositable {
+ PLayer layer;
+ PCompositable compositable;
+};
+
+struct OpAttachAsyncCompositable {
+ PLayer layer;
+ uint64_t containerID;
+};
+
+struct ThebesBufferData {
+ IntRect rect;
+ IntPoint rotation;
+};
+
+struct CubicBezierFunction {
+ float x1;
+ float y1;
+ float x2;
+ float y2;
+};
+
+struct StepFunction {
+ int steps;
+ // 1 = nsTimingFunction::StepStart, 2 = nsTimingFunction::StepEnd
+ int type;
+};
+
+union TimingFunction {
+ null_t;
+ CubicBezierFunction;
+ StepFunction;
+};
+
+// Send the angle with units rather than sending all angles in radians
+// to avoid having floating point error introduced by unit switching.
+struct CSSAngle {
+ float value;
+ int unit; // an nsCSSUnit that is valid for angles
+};
+
+struct LayerColor { Color value; };
+struct Perspective { float value; };
+struct RotationX { CSSAngle angle; };
+struct RotationY { CSSAngle angle; };
+struct RotationZ { CSSAngle angle; };
+struct Rotation { CSSAngle angle; };
+struct Rotation3D {
+ float x;
+ float y;
+ float z;
+ CSSAngle angle;
+};
+struct Scale {
+ float x;
+ float y;
+ float z;
+};
+struct Skew { CSSAngle x; CSSAngle y; };
+struct SkewX { CSSAngle x; };
+struct SkewY { CSSAngle y; };
+struct TransformMatrix { Matrix4x4 value; };
+struct Translation {
+ float x;
+ float y;
+ float z;
+};
+
+union TransformFunction {
+ Perspective;
+ RotationX;
+ RotationY;
+ RotationZ;
+ Rotation;
+ Rotation3D;
+ Scale;
+ Skew;
+ SkewX;
+ SkewY;
+ Translation;
+ TransformMatrix;
+};
+
+union Animatable {
+ float;
+ TransformFunction[];
+};
+
+struct AnimationSegment {
+ Animatable startState;
+ Animatable endState;
+ float startPortion;
+ float endPortion;
+ TimingFunction sampleFn;
+};
+
+// Transforms need extra information to correctly convert the list of transform
+// functions to a Matrix4x4 that can be applied directly to the layer.
+struct TransformData {
+ // the origin of the frame being transformed in app units
+ nsPoint origin;
+ // the transform-origin property for the transform in device pixels
+ Point3D transformOrigin;
+ nsRect bounds;
+ int32_t appUnitsPerDevPixel;
+};
+
+union AnimationData {
+ null_t;
+ TransformData;
+};
+
+struct Animation {
+ TimeStamp startTime;
+ TimeDuration delay;
+ // The value of the animation's current time at the moment it was created.
+ // For animations that are waiting to start, their startTime will be null.
+ // Once the animation is ready to start, we calculate an appropriate value
+ // of startTime such that we begin playback from initialCurrentTime.
+ TimeDuration initialCurrentTime;
+ TimeDuration duration;
+ // For each frame, the interpolation point is computed based on the
+ // startTime, the direction, the duration, and the current time.
+ // The segments must uniquely cover the portion from 0.0 to 1.0
+ AnimationSegment[] segments;
+ // Number of times to repeat the animation, including positive infinity.
+ // Values <= 0 mean the animation will not play (although events are still
+ // dispatched on the main thread).
+ float iterations;
+ float iterationStart;
+ // This uses the NS_STYLE_ANIMATION_DIRECTION_* constants.
+ uint8_t direction;
+ // This uses dom::FillMode.
+ uint8_t fillMode;
+ nsCSSPropertyID property;
+ AnimationData data;
+ float playbackRate;
+ // This is used in the transformed progress calculation.
+ TimingFunction easingFunction;
+ uint8_t iterationComposite;
+};
+
+// Change a layer's attributes
+struct CommonLayerAttributes {
+ IntRect layerBounds;
+ LayerIntRegion visibleRegion;
+ EventRegions eventRegions;
+ TransformMatrix transform;
+ bool transformIsPerspective;
+ float postXScale;
+ float postYScale;
+ uint32_t contentFlags;
+ float opacity;
+ bool useClipRect;
+ ParentLayerIntRect clipRect;
+ MaybeLayerClip scrolledClip;
+ bool isFixedPosition;
+ uint64_t fixedPositionScrollContainerId;
+ LayerPoint fixedPositionAnchor;
+ int32_t fixedPositionSides;
+ bool isStickyPosition;
+ uint64_t stickyScrollContainerId;
+ LayerRect stickyScrollRangeOuter;
+ LayerRect stickyScrollRangeInner;
+ uint64_t scrollbarTargetContainerId;
+ uint32_t scrollbarDirection;
+ float scrollbarThumbRatio;
+ bool isScrollbarContainer;
+ int8_t mixBlendMode;
+ bool forceIsolatedGroup;
+ nullable PLayer maskLayer;
+ PLayer[] ancestorMaskLayers;
+ // Animated colors will only honored for ColorLayers.
+ Animation[] animations;
+ nsIntRegion invalidRegion;
+ ScrollMetadata[] scrollMetadata;
+ nsCString displayListLog;
+};
+
+struct PaintedLayerAttributes {
+ nsIntRegion validRegion;
+};
+struct ContainerLayerAttributes {
+ float preXScale;
+ float preYScale;
+ float inheritedXScale;
+ float inheritedYScale;
+ float presShellResolution;
+ bool scaleToResolution;
+ EventRegionsOverride eventRegionsOverride;
+};
+struct ColorLayerAttributes { LayerColor color; IntRect bounds; };
+struct CanvasLayerAttributes { SamplingFilter samplingFilter; IntRect bounds; };
+struct RefLayerAttributes {
+ int64_t id;
+ // TODO: Once bug 1132895 is fixed we shouldn't need to propagate the override
+ // explicitly here.
+ EventRegionsOverride eventRegionsOverride;
+};
+struct ImageLayerAttributes { SamplingFilter samplingFilter; IntSize scaleToSize; ScaleMode scaleMode; };
+
+union SpecificLayerAttributes {
+ null_t;
+ PaintedLayerAttributes;
+ ContainerLayerAttributes;
+ ColorLayerAttributes;
+ CanvasLayerAttributes;
+ RefLayerAttributes;
+ ImageLayerAttributes;
+};
+
+struct LayerAttributes {
+ CommonLayerAttributes common;
+ SpecificLayerAttributes specific;
+};
+
+// See nsIWidget Configurations
+struct PluginWindowData {
+ uintptr_t windowId;
+ LayoutDeviceIntRect[] clip;
+ LayoutDeviceIntRect bounds;
+ bool visible;
+};
+
+struct OpSetLayerAttributes {
+ PLayer layer;
+ LayerAttributes attrs;
+};
+
+// Monkey with the tree structure
+struct OpSetRoot { PLayer root; };
+struct OpInsertAfter { PLayer container; PLayer childLayer; PLayer after; };
+struct OpPrependChild { PLayer container; PLayer childLayer; };
+struct OpRemoveChild { PLayer container; PLayer childLayer; };
+struct OpRepositionChild { PLayer container; PLayer childLayer; PLayer after; };
+struct OpRaiseToTopChild { PLayer container; PLayer childLayer; };
+
+struct OpSetDiagnosticTypes { DiagnosticTypes diagnostics; };
+struct OpWindowOverlayChanged { };
+
+struct ShmemSection {
+ Shmem shmem;
+ uint32_t offset;
+ size_t size;
+};
+
+union ReadLockDescriptor {
+ ShmemSection;
+ uintptr_t;
+ null_t;
+};
+
+union MaybeTexture {
+ PTexture;
+ null_t;
+};
+
+struct TexturedTileDescriptor {
+ PTexture texture;
+ MaybeTexture textureOnWhite;
+ IntRect updateRect;
+ ReadLockDescriptor sharedLock;
+ ReadLockDescriptor sharedLockOnWhite;
+ bool wasPlaceholder;
+};
+
+struct PlaceholderTileDescriptor {
+};
+
+union TileDescriptor {
+ TexturedTileDescriptor;
+ PlaceholderTileDescriptor;
+};
+
+struct SurfaceDescriptorTiles {
+ nsIntRegion validRegion;
+ TileDescriptor[] tiles;
+ IntPoint tileOrigin;
+ IntSize tileSize;
+ int firstTileX;
+ int firstTileY;
+ int retainedWidth;
+ int retainedHeight;
+ float resolution;
+ float frameXResolution;
+ float frameYResolution;
+ bool isProgressive;
+};
+
+struct OpUseTiledLayerBuffer {
+ SurfaceDescriptorTiles tileLayerDescriptor;
+};
+
+struct OpUseOverlaySource {
+ OverlaySource overlay;
+ IntRect picture;
+};
+
+struct OpPaintTextureRegion {
+ ThebesBufferData bufferData;
+ nsIntRegion updatedRegion;
+};
+
+/**
+ * Tells the CompositableHost to remove the corresponding TextureHost
+ */
+struct OpRemoveTexture {
+ PTexture texture;
+};
+
+struct TimedTexture {
+ PTexture texture;
+ ReadLockDescriptor sharedLock;
+ TimeStamp timeStamp;
+ IntRect picture;
+ uint32_t frameID;
+ uint32_t producerID;
+};
+
+/**
+ * Tells the compositor-side which textures to use (for example, as front buffer
+ * if there are several textures for double buffering).
+ * This provides a list of textures with timestamps, ordered by timestamp.
+ * The newest texture whose timestamp is <= the current time is rendered
+ * (where null is considered less than every other timestamp). If there is no
+ * such texture, the first texture is rendered.
+ * The first timestamp value can be null, but the others must not be.
+ * The list must not be empty.
+ */
+struct OpUseTexture {
+ TimedTexture[] textures;
+};
+
+struct OpUseComponentAlphaTextures {
+ PTexture textureOnBlack;
+ PTexture textureOnWhite;
+ ReadLockDescriptor sharedLockBlack;
+ ReadLockDescriptor sharedLockWhite;
+};
+
+union MaybeRegion {
+ nsIntRegion;
+ null_t;
+};
+
+struct OpNotifyNotUsed {
+ uint64_t TextureId;
+ uint64_t fwdTransactionId;
+};
+
+union CompositableOperationDetail {
+ OpPaintTextureRegion;
+
+ OpUseTiledLayerBuffer;
+
+ OpRemoveTexture;
+
+ OpUseTexture;
+ OpUseComponentAlphaTextures;
+ OpUseOverlaySource;
+};
+
+struct CompositableOperation {
+ PCompositable compositable;
+ CompositableOperationDetail detail;
+};
+
+// A unit of a changeset; a set of these comprise a changeset
+// If adding a new edit type that requires the hit testing tree to be updated,
+// set the updateHitTestingTree flag to true in RecvUpdate()
+union Edit {
+ OpCreatePaintedLayer;
+ OpCreateContainerLayer;
+ OpCreateImageLayer;
+ OpCreateColorLayer;
+ OpCreateCanvasLayer;
+ OpCreateRefLayer;
+
+ OpSetLayerAttributes;
+ OpSetDiagnosticTypes;
+ OpWindowOverlayChanged;
+
+ OpSetRoot;
+ OpInsertAfter;
+ OpPrependChild;
+ OpRemoveChild;
+ OpRepositionChild;
+ OpRaiseToTopChild;
+
+ OpAttachCompositable;
+ OpAttachAsyncCompositable;
+
+ CompositableOperation;
+};
+
+// Operations related to destroying resources, always handled after the other
+// operations for safety.
+union OpDestroy {
+ PTexture;
+ PCompositable;
+};
+
+// Replies to operations
+
+struct OpContentBufferSwap {
+ PCompositable compositable;
+ nsIntRegion frontUpdatedRegion;
+};
+
+/**
+ * An ImageCompositeNotification is sent the first time a particular
+ * image is composited by an ImageHost.
+ */
+struct ImageCompositeNotification {
+ PImageContainer imageContainer;
+ TimeStamp imageTimeStamp;
+ TimeStamp firstCompositeTimeStamp;
+ uint32_t frameID;
+ uint32_t producerID;
+};
+
+// Unit of a "changeset reply". This is a weird abstraction, probably
+// only to be used for buffer swapping.
+union EditReply {
+ OpContentBufferSwap;
+};
+
+union AsyncParentMessageData {
+ OpNotifyNotUsed;
+};
+
+} // namespace
+} // namespace