naiveproxy/services/viz/privileged/interfaces/compositing/frame_sink_manager.mojom
2018-08-14 22:19:20 +00:00

160 lines
7.9 KiB
Plaintext

// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
module viz.mojom;
import "gpu/ipc/common/surface_handle.mojom";
import "mojo/public/mojom/base/time.mojom";
import "services/viz/privileged/interfaces/compositing/display_private.mojom";
import "services/viz/privileged/interfaces/compositing/external_begin_frame_controller.mojom";
import "services/viz/privileged/interfaces/compositing/frame_sink_video_capture.mojom";
import "services/viz/privileged/interfaces/compositing/renderer_settings.mojom";
import "services/viz/public/interfaces/compositing/compositor_frame_sink.mojom";
import "services/viz/public/interfaces/compositing/copy_output_request.mojom";
import "services/viz/public/interfaces/compositing/frame_sink_id.mojom";
import "services/viz/public/interfaces/compositing/local_surface_id.mojom";
import "services/viz/public/interfaces/compositing/surface_id.mojom";
import "services/viz/public/interfaces/compositing/surface_info.mojom";
import "services/viz/public/interfaces/hit_test/aggregated_hit_test_region.mojom";
import "ui/gfx/geometry/mojo/geometry.mojom";
import "services/viz/public/interfaces/compositing/video_detector_observer.mojom";
// Initialization parameters for a RootCompositorFrameSink.
struct RootCompositorFrameSinkParams {
FrameSinkId frame_sink_id;
gpu.mojom.SurfaceHandle widget;
bool gpu_compositing = true;
RendererSettings renderer_settings;
bool send_swap_size_notifications = false;
associated CompositorFrameSink& compositor_frame_sink;
CompositorFrameSinkClient compositor_frame_sink_client;
associated DisplayPrivate& display_private;
DisplayClient display_client;
associated ExternalBeginFrameController&? external_begin_frame_controller;
ExternalBeginFrameControllerClient? external_begin_frame_controller_client;
};
// The FrameSinkManager interface is a privileged interface that allows the
// frame sink manager host (browser or window server) to create
// CompositorFrameSinks. Clients acquire a CompositorFrameSink connection
// through the frame sink manager host. Clients request a CompositorFrameSink
// interface, and implement a CompositorFrameSinkClient interface. The frame
// sink manager host holds one or more display CompositorFrameSinks that are
// tied to a valid |surface_handle| and Display. All other
// CompositorFrameSinks must be parented by another CompositorFrameSink.
// FrameSinkIds are fixed for a given client and are determined ahead of time.
// Thus, a client will typically simply request a CompositorFrameSink from the
// frame sink manager host which will forward the request to the frame sink
// manager.
interface FrameSinkManager {
// Starts the scope of temporary references tied to this |frame_sink_id|.
// Temporary references tied to this |frame_sink_id| will be dropped on
// InvalidateFrameSinkId.This must be called before Create(Root)
// CompositorFrameSink() is called.
RegisterFrameSinkId(FrameSinkId frame_sink_id);
// Invalidates |frame_sink_id| which cleans up any unsatisified surface
// sequences or dangling temporary references assigned to it. If there is a
// CompositorFrameSink for |frame_sink_id| then it will be destroyed and the
// message pipe to the client will be closed.
InvalidateFrameSinkId(FrameSinkId frame_sink_id);
// Tells FrameSinkManger to report when a synchronization event completes via
// tracing and UMA and the duration of that event. A synchronization event
// occurs when a CompositorFrame submitted to the CompositorFrameSink
// specified by |frame_sink_id| activates after having been blocked by
// unresolved dependencies.
EnableSynchronizationReporting(FrameSinkId frame_sink_id,
string reporting_label);
// |debug_label| is used when printing out the surface hierarchy so we know
// which clients are contributing which surfaces.
SetFrameSinkDebugLabel(FrameSinkId frame_sink_id, string debug_label);
// Create a CompositorFrameSink for a privileged client (e.g. WindowServer).
// This is only used by privileged clients. The client can call methods that
// talks to the Display (e.g. ResizeDisplay(), SetDisplayVisible(), etc).
// If |force_software_compositing| is true, then the resulting display
// compositor will not use Gpu acceleration even if it would by default.
// If |external_begin_frames_controller| and
// |external_begin_frames_controller_client| are set, the resulting display
// will be driven by a BeginFrameSource controlled by the client via the
// ExternalBeginFrameController.
CreateRootCompositorFrameSink(RootCompositorFrameSinkParams params);
// CreateCompositorFrameSink is used by unprivileged clients. This
// CompositorFrameSink is not a root, and has to be parented by another
// CompositorFrameSink in order to appear on screen.
CreateCompositorFrameSink(
FrameSinkId frame_sink_id,
CompositorFrameSink& compositor_frame_sink,
CompositorFrameSinkClient compositor_frame_sink_client);
// Destroys CompositorFrameSink created by Create[Root]CompositorFrameSink().
// This function should only be used synchronously for destroying root
// CompositorFrameSinks to ensure the GL context/surface is destroyed before
// the platform window.
[Sync]
DestroyCompositorFrameSink(FrameSinkId frame_sink_id) => ();
// Set up a BeginFrame relationship between two FrameSinkIds. In this case,
// the child inherits the viz::BeginFrameSource from the parent if it doesn't
// already have a viz::BeginFrameSource.
RegisterFrameSinkHierarchy(FrameSinkId parent_frame_sink_id,
FrameSinkId child_frame_sink_id);
// Removes a BeginFrame relationship between two FrameSinkIds.
UnregisterFrameSinkHierarchy(FrameSinkId parent_frame_sink_id,
FrameSinkId child_frame_sink_id);
// Assigns the temporary reference for |surface_id| to FrameSinkId |owner|.
// If |owner| is invalidated before it converts the temporary reference to a
// surface reference then the temporary reference will be dropped.
AssignTemporaryReference(SurfaceId surface_id,
FrameSinkId owner);
// Drops the temporary reference for |surface_id|. This will get called when
// the FrameSinkManagerClient doesn't think |surface_id| will be embedded.
DropTemporaryReference(SurfaceId surface_id);
// Requests viz to notify |observer| whenever video activity is detected in
// one of the clients. See viz::VideoDetector.
AddVideoDetectorObserver(VideoDetectorObserver observer);
// Creates a FrameSinkVideoCapturer instance.
CreateVideoCapturer(FrameSinkVideoCapturer& request);
// Marks the given SurfaceIds for destruction.
EvictSurfaces(array<SurfaceId> surface_ids);
// Takes a snapshot of |surface_id| or a newer surface with the same
// FrameSinkId. The request will be queued up until such surface exists and is
// reachable from the root surface.
RequestCopyOfOutput(SurfaceId surface_id, CopyOutputRequest request);
};
// The FrameSinkManagerClient interface is implemented by the Display
// Compositor Host, a stable, and privileged peer service to the display
// compositor. The frame sink manager host is either the browser process in
// Chrome or the window server process.
interface FrameSinkManagerClient {
// Called by the frame sink manager when a new Surface is created.
OnSurfaceCreated(SurfaceId surface_id);
// Called by the frame sink manager when a CompositorFrame with a new
// SurfaceId activates for the first time.
OnFirstSurfaceActivation(SurfaceInfo surface_info);
// Sends new |hit_test_data| to the client.
OnAggregatedHitTestRegionListUpdated(
FrameSinkId frame_sink_id, array<AggregatedHitTestRegion> hit_test_data);
// Sends |frame_sink_id| and |frame_token| to the client when a surface
// of the provided |frame_sink_id| activates.
OnFrameTokenChanged(FrameSinkId frame_sink_id, uint32 frame_token);
};