| // 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. |
| |
| syntax = "proto2"; |
| |
| option optimize_for = LITE_RUNTIME; |
| |
| import "commit_earlyout_reason.proto"; |
| import "layer_tree_host.proto"; |
| import "layer_tree_settings.proto"; |
| import "rect.proto"; |
| |
| package cc.proto; |
| |
| // Control messages sent to the impl side of the compositor (client) from the |
| // main side of the compositor (server). |
| // Note: Unless specified in a comment, all fields in a message are required, |
| // even if listed as optional. |
| |
| // Commit Flow: The commit flow defines the protocol for data exchange between |
| // the client and the server. The commit flow is characterized by |
| // the following messages. |
| // |
| // 1) The commit will always be started by the client. The server |
| // may request a commit from the client by sending a |
| // CompositorMessageToImpl of type SET_NEEDS_COMMIT. Note that |
| // if the server needs to push any updates to the client, this |
| // message will only be sent once, and the client must respond |
| // with CompositorMessageToMain of type BEGIN_MAIN_FRAME to |
| // start the commit. |
| // The client can spontaneously initiate a commit when it needs |
| // to request new data from the server by sending the |
| // BEGIN_MAIN_FRAME message. |
| // |
| // 2) On receiving BEGIN_MAIN_FRAME message, the server can respond |
| // with either CompositorMessageToImpl of type START_COMMIT, if |
| // it needs to push an update to the client, or of type |
| // BEGIN_MAIN_FRAME_ABORTED if the commit was aborted. |
| |
| message CompositorMessageToImpl { |
| enum Type { |
| // The enum values which are unknown get mapped to the default value, which |
| // is zero. This can happen with when the protocol version skewing is |
| // different on the client and server. |
| // Ignore the messages with type UNKNOWN. |
| // see crbug/559338. |
| UNKNOWN = 0; |
| |
| // Client Initialization: When the remote server starts up it sends a |
| // CompositorMessageToImpl of type INITIALIZE_IMPL to the client. This |
| // message should be processed by the embedder of the client compositor to |
| // create the Remote Client LayerTreeHost. The compositor protocol |
| // guarantees that this will be the first message sent to the client. No |
| // messages can be sent from the client before the server is started. |
| INITIALIZE_IMPL = 1; |
| |
| // Client Shutdown: When the remote server is shutting down it sends a |
| // CompositorMessageToImpl of type CLOSE_IMPL to the client. The message |
| // should be processed by the embedder of the client compositor to destroy |
| // the Remote Client LayerTreeHost. This is guaranteed to be the last |
| // message sent to the client. No messages can be sent from the client after |
| // the server has been shutdown. |
| CLOSE_IMPL = 2; |
| |
| // Informs the client that a fling animation on the server has stopped. |
| MAIN_THREAD_HAS_STOPPED_FLINGING_ON_IMPL = 3; |
| |
| // Sent to the client to request a commit. The client will respond with |
| // CompositorMessageToMain of type BEGIN_MAIN_FRAME. |
| SET_NEEDS_COMMIT = 4; |
| |
| // Informs the client to start/stop commit requests. The message can be sent |
| // any time to the client. |
| SET_DEFER_COMMITS = 5; |
| |
| // Sent in response to a CompositorMessageToMain of type BEGIN_MAIN_FRAME |
| // from the client, with the updated state of the LayerTreeHost. |
| START_COMMIT = 6; |
| |
| // Sent in response to a CompositorMessageToMain of type BEGIN_MAIN_FRAME |
| // from the client, if the commit was aborted. |
| BEGIN_MAIN_FRAME_ABORTED = 7; |
| |
| // Sent when a redraw is requested for the given damaged rect. |
| SET_NEEDS_REDRAW = 8; |
| } |
| |
| optional Type message_type = 1; |
| |
| // Only one of the following fields will be set per CompositorMessageToImpl. |
| |
| // Set for message Type::INITIALIZE_IMPL. |
| optional InitializeImpl initialize_impl_message = 2; |
| |
| // Set for message Type::SET_DEFER_COMMITS. |
| optional SetDeferCommits defer_commits_message = 3; |
| |
| // Set for message Type::START_COMMIT. |
| optional StartCommit start_commit_message = 4; |
| |
| // Set for message Type::BEGIN_MAIN_FRAME_ABORTED. |
| optional BeginMainFrameAborted begin_main_frame_aborted_message = 5; |
| |
| // Set for message Type::SET_NEEDS_REDRAW. |
| optional SetNeedsRedraw set_needs_redraw_message = 6; |
| } |
| |
| // The embedder of the remote client compositor should process the |
| // InitializeImpl message to retrieve the LayerTreeSettings sent from the |
| // server. The settings sent from the server may be modified by the embedder. |
| message InitializeImpl { |
| optional LayerTreeSettings layer_tree_settings = 1; |
| } |
| |
| message SetDeferCommits { |
| // If set to true, the client will defer sending any BEGIN_MAIN_FRAME messages |
| // to start a commit. The server must send a message with defer_commits set to |
| // false to allow the client to start commits. |
| // Note: If a pending commit request from the server was throttled if the |
| // client was defering commits, it will be honoured after the server informs |
| // the client to start commits. |
| optional bool defer_commits = 1; |
| } |
| |
| message StartCommit { |
| optional LayerTreeHost layer_tree_host = 1; |
| } |
| |
| message BeginMainFrameAborted { |
| optional CommitEarlyOutReason reason = 1; |
| } |
| |
| message SetNeedsRedraw { |
| optional Rect damaged_rect = 1; |
| } |