/* * 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_FUCHSIA_TRACE_TOKENIZER_H_ #define SRC_TRACE_PROCESSOR_FUCHSIA_TRACE_TOKENIZER_H_ #include "src/trace_processor/chunked_trace_reader.h" #include "src/trace_processor/fuchsia_trace_utils.h" #include "src/trace_processor/trace_blob_view.h" #include "src/trace_processor/trace_storage.h" namespace perfetto { namespace trace_processor { class TraceProcessorContext; // The Fuchsia trace format is documented at // https://fuchsia.googlesource.com/fuchsia/+/HEAD/docs/development/tracing/trace-format/README.md class FuchsiaTraceTokenizer : public ChunkedTraceReader { public: explicit FuchsiaTraceTokenizer(TraceProcessorContext*); ~FuchsiaTraceTokenizer() override; // ChunkedTraceReader implementation bool Parse(std::unique_ptr, size_t) override; private: struct ProviderInfo { std::string name; std::unordered_map string_table; std::unordered_map thread_table; uint64_t ticks_per_second = 1000000000; }; struct RunningThread { fuchsia_trace_utils::ThreadInfo info; int64_t start_ts; }; void ParseRecord(TraceBlobView); void RegisterProvider(uint32_t, std::string); TraceProcessorContext* const context_; std::vector leftover_bytes_; // Map from tid to pid. Used because in some places we do not get pid info. // Fuchsia tids are never reused. std::unordered_map pid_table_; std::unordered_map> providers_; ProviderInfo* current_provider_; std::unordered_map cpu_threads_; }; } // namespace trace_processor } // namespace perfetto #endif // SRC_TRACE_PROCESSOR_FUCHSIA_TRACE_TOKENIZER_H_