|  | /* | 
|  | * Copyright (C) 2021 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_UTIL_DEBUG_ANNOTATION_PARSER_H_ | 
|  | #define SRC_TRACE_PROCESSOR_UTIL_DEBUG_ANNOTATION_PARSER_H_ | 
|  |  | 
|  | #include "protos/perfetto/trace/track_event/debug_annotation.pbzero.h" | 
|  | #include "src/trace_processor/util/proto_to_args_parser.h" | 
|  |  | 
|  | namespace perfetto { | 
|  | namespace trace_processor { | 
|  | namespace util { | 
|  |  | 
|  | // |DebugAnnotationParser| is responsible for parsing DebugAnnotation protos | 
|  | // and turning it into key-value arg pairs. | 
|  | // |DebugAnnotationParser| is a logical extension of |ProtoToArgsParser|: | 
|  | // it uses |ProtoToArgsParser::Delegate| for writing the results and uses | 
|  | // |ProtoToArgsParser| to parse arbitrary protos nested inside DebugAnnotation. | 
|  | class DebugAnnotationParser { | 
|  | public: | 
|  | explicit DebugAnnotationParser(ProtoToArgsParser& proto_to_args_parser); | 
|  |  | 
|  | base::Status Parse(protozero::ConstBytes data, | 
|  | ProtoToArgsParser::Delegate& delegate); | 
|  |  | 
|  | private: | 
|  | struct ParseResult { | 
|  | base::Status status; | 
|  | // True if parsing of the annotation added at least one entry to the | 
|  | // |delegate|. | 
|  | bool added_entry; | 
|  | }; | 
|  |  | 
|  | base::Status ParseDebugAnnotationName( | 
|  | protos::pbzero::DebugAnnotation::Decoder& annotation, | 
|  | ProtoToArgsParser::Delegate& delegate, | 
|  | std::string& result); | 
|  | ParseResult ParseDebugAnnotationValue( | 
|  | protos::pbzero::DebugAnnotation::Decoder& annotation, | 
|  | ProtoToArgsParser::Delegate& delegate, | 
|  | const ProtoToArgsParser::Key& context_name); | 
|  | ParseResult ParseNestedValueArgs(protozero::ConstBytes nested_value, | 
|  | const ProtoToArgsParser::Key& context_name, | 
|  | ProtoToArgsParser::Delegate& delegate); | 
|  |  | 
|  | ProtoToArgsParser& proto_to_args_parser_; | 
|  | }; | 
|  |  | 
|  | }  // namespace util | 
|  | }  // namespace trace_processor | 
|  | }  // namespace perfetto | 
|  |  | 
|  | #endif  // SRC_TRACE_PROCESSOR_UTIL_DEBUG_ANNOTATION_PARSER_H_ |