/* -*- 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 PGrallocBuffer; include protocol PLayerTransaction; include "mozilla/layers/CompositorTypes.h"; include "mozilla/GfxMessageUtils.h"; using mozilla::null_t; using mozilla::layers::TextureFactoryIdentifier; using mozilla::layers::LayersBackend; namespace mozilla { namespace layers { /** * The PCompositor protocol is used to manage communication between * the main thread and the compositor thread context. It's primary * purpose is to manage the PLayerTransaction sub protocol. */ // This should really be 'sync', but we're using 'rpc' as a workaround // for Bug 716631. rpc protocol PCompositor { // A Compositor manages a single Layer Manager (PLayerTransaction) manages PLayerTransaction; parent: // The child is about to be destroyed, so perform any necessary cleanup. sync WillStop(); // Clean up in preparation for own destruction. sync Stop(); // Pause/resume the compositor. These are intended to be used on mobile, when // the compositor needs to pause/resume in lockstep with the application. sync Pause(); sync Resume(); async NotifyChildCreated(uint64_t id); // Make a snapshot of the content that would have been drawn to our // render target at the time this message is received. If the size // or format of |inSnapshot| doesn't match our render target, // results are undefined. // // NB: this message will result in animations, transforms, effects, // and so forth being interpolated. That's what we want to happen. sync MakeSnapshot(SurfaceDescriptor inSnapshot) returns (SurfaceDescriptor outSnapshot); // Make sure any pending composites are started immediately and // block until they are completed. sync FlushRendering(); // layersBackendHints is an ordered list of preffered backends where // layersBackendHints[0] is the best backend. If any hints are LAYERS_NONE // that hint is ignored. sync PLayerTransaction(LayersBackend[] layersBackendHints, uint64_t id) returns (TextureFactoryIdentifier textureFactoryIdentifier, bool success); }; } // layers } // mozilla