/* * Copyright (C) 2019 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. */ #ifndef SRC_TRACE_PROCESSOR_RPC_RPC_H_ #define SRC_TRACE_PROCESSOR_RPC_RPC_H_ #include <cstddef> #include <cstdint> #include <functional> #include <memory> #include <string> #include <utility> #include <vector> #include "perfetto/base/status.h" #include "perfetto/ext/protozero/proto_ring_buffer.h" #include "perfetto/protozero/field.h" #include "perfetto/trace_processor/basic_types.h" namespace perfetto { namespace protos::pbzero { class ComputeMetricResult; class DisableAndReadMetatraceResult; } // namespace protos::pbzero namespace trace_processor { class Iterator; class TraceProcessor; // This class handles the binary {,un}marshalling for the Trace Processor RPC // API (see protos/perfetto/trace_processor/trace_processor.proto). // This is to deal with cases where the client of the trace processor is not // some in-process C++ code but a remote process: // There are two use cases of this: // 1. The JS<>WASM interop for the web-based UI. // 2. The HTTP RPC mode of trace_processor_shell that allows the UI to talk // to a native trace processor instead of the bundled WASM one. // This class has (a subset of) the same methods of the public TraceProcessor // interface, but the methods just take and return proto-encoded binary buffers. // This class does NOT define how the transport works (e.g. HTTP vs WASM interop // calls), it just deals with {,un}marshalling. // This class internally creates and owns a TraceProcessor instance, which // lifetime is tied to the lifetime of the Rpc instance. class Rpc { … }; } // namespace trace_processor } // namespace perfetto #endif // SRC_TRACE_PROCESSOR_RPC_RPC_H_