Primiano Tucci | 0d72a31 | 2018-08-07 14:42:45 +0100 | [diff] [blame] | 1 | /* |
| 2 | * Copyright (C) 2018 The Android Open Source Project |
| 3 | * |
| 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
| 5 | * you may not use this file except in compliance with the License. |
| 6 | * You may obtain a copy of the License at |
| 7 | * |
| 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
| 9 | * |
| 10 | * Unless required by applicable law or agreed to in writing, software |
| 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
| 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 13 | * See the License for the specific language governing permissions and |
| 14 | * limitations under the License. |
| 15 | */ |
| 16 | |
Eric Seckler | 137a467 | 2019-10-24 08:51:14 +0100 | [diff] [blame] | 17 | #ifndef SRC_TRACE_PROCESSOR_IMPORTERS_PROTO_PROTO_TRACE_PARSER_H_ |
| 18 | #define SRC_TRACE_PROCESSOR_IMPORTERS_PROTO_PROTO_TRACE_PARSER_H_ |
Primiano Tucci | 0d72a31 | 2018-08-07 14:42:45 +0100 | [diff] [blame] | 19 | |
| 20 | #include <stdint.h> |
Primiano Tucci | c9d4a8b | 2018-10-30 20:19:01 -0700 | [diff] [blame] | 21 | |
| 22 | #include <array> |
Primiano Tucci | 7e33029 | 2018-08-24 19:10:52 +0200 | [diff] [blame] | 23 | #include <memory> |
Primiano Tucci | 7e33029 | 2018-08-24 19:10:52 +0200 | [diff] [blame] | 24 | |
Eric Seckler | b32cacf | 2019-09-27 16:51:19 +0100 | [diff] [blame] | 25 | #include "perfetto/ext/base/optional.h" |
Primiano Tucci | 2c5488f | 2019-06-01 03:27:28 +0100 | [diff] [blame] | 26 | #include "perfetto/ext/base/string_view.h" |
Primiano Tucci | e5f1168 | 2019-03-22 07:21:49 +0000 | [diff] [blame] | 27 | #include "perfetto/protozero/field.h" |
Lalit Maganti | d1a7b03 | 2021-04-23 14:46:57 +0100 | [diff] [blame] | 28 | #include "src/trace_processor/importers/common/trace_parser.h" |
Lalit Maganti | 7010b33 | 2020-02-07 10:51:15 +0000 | [diff] [blame] | 29 | #include "src/trace_processor/storage/trace_storage.h" |
Eric Seckler | 1a2ea13 | 2019-10-16 11:35:31 +0100 | [diff] [blame] | 30 | #include "src/trace_processor/timestamped_trace_piece.h" |
Alexander Timin | 97d8785 | 2021-05-17 18:01:33 +0000 | [diff] [blame^] | 31 | #include "src/trace_processor/util/trace_blob_view.h" |
Primiano Tucci | 0d72a31 | 2018-08-07 14:42:45 +0100 | [diff] [blame] | 32 | |
| 33 | namespace perfetto { |
Eric Seckler | d2af989 | 2019-11-01 10:10:53 +0000 | [diff] [blame] | 34 | |
| 35 | namespace protos { |
| 36 | namespace pbzero { |
| 37 | class TracePacket_Decoder; |
| 38 | } // namespace pbzero |
| 39 | } // namespace protos |
| 40 | |
Primiano Tucci | 0d72a31 | 2018-08-07 14:42:45 +0100 | [diff] [blame] | 41 | namespace trace_processor { |
| 42 | |
Eric Seckler | c93823e | 2019-06-03 16:49:19 +0100 | [diff] [blame] | 43 | class ArgsTracker; |
Eric Seckler | 771960c | 2019-10-22 15:37:12 +0100 | [diff] [blame] | 44 | class PacketSequenceState; |
Primiano Tucci | 0d72a31 | 2018-08-07 14:42:45 +0100 | [diff] [blame] | 45 | class TraceProcessorContext; |
| 46 | |
Deepanjan Roy | 01994ca | 2019-04-02 11:05:34 -0700 | [diff] [blame] | 47 | class ProtoTraceParser : public TraceParser { |
Primiano Tucci | 0d72a31 | 2018-08-07 14:42:45 +0100 | [diff] [blame] | 48 | public: |
Primiano Tucci | e5f1168 | 2019-03-22 07:21:49 +0000 | [diff] [blame] | 49 | using ConstBytes = protozero::ConstBytes; |
Primiano Tucci | 7e33029 | 2018-08-24 19:10:52 +0200 | [diff] [blame] | 50 | explicit ProtoTraceParser(TraceProcessorContext*); |
Eric Seckler | 684a4f7 | 2019-04-26 14:34:07 +0100 | [diff] [blame] | 51 | ~ProtoTraceParser() override; |
Primiano Tucci | 0d72a31 | 2018-08-07 14:42:45 +0100 | [diff] [blame] | 52 | |
Deepanjan Roy | 01994ca | 2019-04-02 11:05:34 -0700 | [diff] [blame] | 53 | // TraceParser implementation. |
Eric Seckler | 1a2ea13 | 2019-10-16 11:35:31 +0100 | [diff] [blame] | 54 | void ParseTracePacket(int64_t timestamp, TimestampedTracePiece) override; |
Eric Seckler | 684a4f7 | 2019-04-26 14:34:07 +0100 | [diff] [blame] | 55 | void ParseFtracePacket(uint32_t cpu, |
| 56 | int64_t timestamp, |
Eric Seckler | 1a2ea13 | 2019-10-16 11:35:31 +0100 | [diff] [blame] | 57 | TimestampedTracePiece) override; |
Eric Seckler | 684a4f7 | 2019-04-26 14:34:07 +0100 | [diff] [blame] | 58 | |
Eric Seckler | de58995 | 2019-10-17 12:46:07 +0100 | [diff] [blame] | 59 | void ParseTracePacketImpl(int64_t ts, |
Lalit Maganti | 9a84311 | 2020-11-10 13:39:05 +0000 | [diff] [blame] | 60 | const TimestampedTracePiece&, |
| 61 | PacketSequenceStateGeneration*, |
Eric Seckler | d2af989 | 2019-11-01 10:10:53 +0000 | [diff] [blame] | 62 | const protos::pbzero::TracePacket_Decoder&); |
Eric Seckler | 87ede88 | 2019-10-18 10:48:36 +0100 | [diff] [blame] | 63 | |
Primiano Tucci | e5f1168 | 2019-03-22 07:21:49 +0000 | [diff] [blame] | 64 | void ParseTraceStats(ConstBytes); |
Florian Mayer | 5716fc1 | 2019-06-24 11:50:51 -0700 | [diff] [blame] | 65 | void ParseProfilePacket(int64_t ts, |
Eric Seckler | 7e9dc31 | 2020-01-02 15:17:28 +0000 | [diff] [blame] | 66 | PacketSequenceStateGeneration*, |
Florian Mayer | f270188 | 2019-12-11 17:32:48 +0000 | [diff] [blame] | 67 | uint32_t seq_id, |
Florian Mayer | 5716fc1 | 2019-06-24 11:50:51 -0700 | [diff] [blame] | 68 | ConstBytes); |
Florian Mayer | 64c1d8f | 2020-08-14 14:08:57 +0100 | [diff] [blame] | 69 | void ParseDeobfuscationMapping(int64_t ts, |
| 70 | PacketSequenceStateGeneration*, |
| 71 | uint32_t seq_id, |
| 72 | ConstBytes); |
Eric Seckler | 0441e97 | 2019-09-14 02:27:55 +0100 | [diff] [blame] | 73 | void ParseChromeEvents(int64_t ts, ConstBytes); |
Primiano Tucci | b02d8dc | 2019-06-04 11:46:43 +0100 | [diff] [blame] | 74 | void ParseMetatraceEvent(int64_t ts, ConstBytes); |
Ioannis Ilkos | f4389a6 | 2019-10-07 10:00:52 +0100 | [diff] [blame] | 75 | void ParseTraceConfig(ConstBytes); |
Florian Mayer | a480cd6 | 2019-09-24 10:36:56 +0100 | [diff] [blame] | 76 | void ParseModuleSymbols(ConstBytes); |
Florian Mayer | 5a992d9 | 2020-04-09 13:53:24 +0200 | [diff] [blame] | 77 | void ParseSmapsPacket(int64_t ts, ConstBytes); |
Primiano Tucci | 0d72a31 | 2018-08-07 14:42:45 +0100 | [diff] [blame] | 78 | |
| 79 | private: |
Primiano Tucci | 0d72a31 | 2018-08-07 14:42:45 +0100 | [diff] [blame] | 80 | TraceProcessorContext* context_; |
Mikael Pessa | 7160ccc | 2019-07-25 11:19:26 -0700 | [diff] [blame] | 81 | |
Primiano Tucci | b02d8dc | 2019-06-04 11:46:43 +0100 | [diff] [blame] | 82 | const StringId metatrace_id_; |
Mikhail Khokhlov | fd74655 | 2019-08-15 14:54:29 +0100 | [diff] [blame] | 83 | const StringId data_name_id_; |
Mikhail Khokhlov | ca34df2 | 2019-08-07 16:50:01 +0100 | [diff] [blame] | 84 | const StringId raw_chrome_metadata_event_id_; |
Mikhail Khokhlov | fd74655 | 2019-08-15 14:54:29 +0100 | [diff] [blame] | 85 | const StringId raw_chrome_legacy_system_trace_event_id_; |
| 86 | const StringId raw_chrome_legacy_user_trace_event_id_; |
Primiano Tucci | 0d72a31 | 2018-08-07 14:42:45 +0100 | [diff] [blame] | 87 | }; |
| 88 | |
| 89 | } // namespace trace_processor |
| 90 | } // namespace perfetto |
| 91 | |
Eric Seckler | 137a467 | 2019-10-24 08:51:14 +0100 | [diff] [blame] | 92 | #endif // SRC_TRACE_PROCESSOR_IMPORTERS_PROTO_PROTO_TRACE_PARSER_H_ |