/* -*- 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 LayerTransaction; include protocol PCompositable; include protocol PCompositor; include protocol PGrallocBuffer; include protocol PLayer; include protocol PRenderFrame; include "mozilla/WidgetUtils.h"; include "mozilla/TimeStamp.h"; include "mozilla/dom/ScreenOrientation.h"; include "nsCSSProperty.h"; include "gfxipc/ShadowLayerUtils.h"; using mozilla::layers::TextureInfo; /** * 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 { sync protocol PLayerTransaction { manager PRenderFrame or PCompositor; manages PLayer; manages PCompositable; manages PGrallocBuffer; parent: /** * Only the parent side has privileges to allocate the buffer. * Allocation may fail (pmem is a scarce resource), and if so null_t * is returned. */ sync PGrallocBuffer(gfxIntSize size, gfxContentType content) returns (MaybeMagicGrallocBufferHandle handle); async PLayer(); async PCompositable(TextureInfo aTextureInfo); // The isFirstPaint flag can be used to indicate that this is the first update // for a particular document. sync Update(Edit[] cset, TargetConfig targetConfig, bool isFirstPaint) returns (EditReply[] reply); // We don't need to send a sync transaction if // no transaction operate require a swap. async UpdateNoSwap(Edit[] cset, TargetConfig targetConfig, bool isFirstPaint); // Drop any front buffers that might be retained on the compositor // side. async ClearCachedResources(); async __delete__(); }; } // namespace layers } // namespace mozilla