xref: /aosp_15_r20/external/perfetto/src/trace_processor/importers/ftrace/ftrace_module_impl.h (revision 6dbdd20afdafa5e3ca9b8809fa73465d530080dc)
1 /*
2  * Copyright (C) 2019 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 
17 #ifndef SRC_TRACE_PROCESSOR_IMPORTERS_FTRACE_FTRACE_MODULE_IMPL_H_
18 #define SRC_TRACE_PROCESSOR_IMPORTERS_FTRACE_FTRACE_MODULE_IMPL_H_
19 
20 #include "protos/perfetto/trace/trace_packet.pbzero.h"
21 #include "src/trace_processor/importers/common/parser_types.h"
22 #include "src/trace_processor/importers/ftrace/ftrace_module.h"
23 #include "src/trace_processor/importers/ftrace/ftrace_parser.h"
24 #include "src/trace_processor/importers/ftrace/ftrace_tokenizer.h"
25 #include "src/trace_processor/importers/proto/packet_sequence_state_generation.h"
26 #include "src/trace_processor/importers/proto/proto_importer_module.h"
27 
28 namespace perfetto {
29 namespace trace_processor {
30 
31 class TraceBlobView;
32 
33 class FtraceModuleImpl : public FtraceModule {
34  public:
35   explicit FtraceModuleImpl(TraceProcessorContext* context);
36 
37   ModuleResult TokenizePacket(
38       const protos::pbzero::TracePacket::Decoder& decoder,
39       TraceBlobView* packet,
40       int64_t packet_timestamp,
41       RefPtr<PacketSequenceStateGeneration> state,
42       uint32_t field_id) override;
43 
ParseFtraceEventData(uint32_t cpu,int64_t ts,const TracePacketData & data)44   void ParseFtraceEventData(uint32_t cpu,
45                             int64_t ts,
46                             const TracePacketData& data) override {
47     util::Status res = parser_.ParseFtraceEvent(cpu, ts, data);
48     if (!res.ok()) {
49       PERFETTO_ELOG("%s", res.message().c_str());
50     }
51   }
52 
ParseInlineSchedSwitch(uint32_t cpu,int64_t ts,const InlineSchedSwitch & data)53   void ParseInlineSchedSwitch(uint32_t cpu,
54                               int64_t ts,
55                               const InlineSchedSwitch& data) override {
56     util::Status res = parser_.ParseInlineSchedSwitch(cpu, ts, data);
57     if (!res.ok()) {
58       PERFETTO_ELOG("%s", res.message().c_str());
59     }
60   }
61 
ParseInlineSchedWaking(uint32_t cpu,int64_t ts,const InlineSchedWaking & data)62   void ParseInlineSchedWaking(uint32_t cpu,
63                               int64_t ts,
64                               const InlineSchedWaking& data) override {
65     util::Status res = parser_.ParseInlineSchedWaking(cpu, ts, data);
66     if (!res.ok()) {
67       PERFETTO_ELOG("%s", res.message().c_str());
68     }
69   }
70 
71  private:
72   FtraceTokenizer tokenizer_;
73   FtraceParser parser_;
74 };
75 
76 }  // namespace trace_processor
77 }  // namespace perfetto
78 
79 #endif  // SRC_TRACE_PROCESSOR_IMPORTERS_FTRACE_FTRACE_MODULE_IMPL_H_
80