blob: 7e6a1a9a05e5ace644ed51c2b3e12d01972691d9 [file] [log] [blame]
/*
* Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
syntax = "proto2";
package perfetto.protos;
message CommitDataRequest {
// When |chunks_to_move| is present, the producer is requesting the service to
// move the given chunks form the share memory buffer into the central
// trace buffer(s).
message ChunksToMove {
// The 0-based index of the page in the Shared Memory Buffer.
optional uint32 page = 1;
// The 0-based chunk index [0..13] within the page.
optional uint32 chunk = 2;
// The target buffer it should be moved onto. The service will check that
// the producer is allowed to write into that buffer before the move.
optional uint32 target_buffer = 3;
}
repeated ChunksToMove chunks_to_move = 1;
// Used to patch chunks that have already been sent to the service. The chunk
// might not be in the shared memory buffer anymore as it could have been
// moved by the service in response to a prior CommitDataRequest.
// It is perfectly valid to patch a chunk that is being notified in the same
// message (a chunk can show up both in the |changed_pages| and |patches|
// field within the same CommitDataRequest message).
// In other words, |chunks_to_patch| is always processed after
// |chunks_to_move|.
message ChunkToPatch {
message Patch {
// Offset in bytes from the start of the chunk payload. e.g., offset == 0
// corresponds to the first byte of the first packet (or fragment) in the
// chunk.
optional uint32 offset = 1;
// Bytes to patch at the given offset.
optional bytes data = 2;
}
optional uint32 target_buffer = 1;
// {WriterID, ChunkID} uniquely identify a chunk for the current producer.
optional uint32 writer_id = 2;
optional uint32 chunk_id = 3;
// List of patches to apply to the given chunk.
repeated Patch patches = 4;
// When true more patches will follow in future requests and the chunk
// should be still considered as patch-pending. When false the chunk becomes
// eligible for reading.
optional bool has_more_patches = 5;
}
repeated ChunkToPatch chunks_to_patch = 2;
// Optional. If this commit is made in response to a Flush(id) request coming
// from the service, copy back the id of the request so the service can tell
// when the flush happened.
optional uint64 flush_request_id = 3;
}