| # Copyright (C) 2022 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. | |
| from typing import List, Union | |
| from typing import Optional | |
| from python.generators.trace_processor_table.public import Alias | |
| from python.generators.trace_processor_table.public import ColumnFlag | |
| from python.generators.trace_processor_table.util import ParsedTable | |
| from python.generators.trace_processor_table.util import ParsedColumn | |
| from python.generators.trace_processor_table.util import data_layer_type | |
| from python.generators.trace_processor_table.util import parse_type | |
| from python.generators.trace_processor_table.util import typed_column_type | |
| from python.generators.trace_processor_table.serialize_new import TableSerializer as NewTableSerializer | |
| def serialize_header(ifdef_guard: str, tables: List[ParsedTable], | |
| include_paths: List[str]) -> str: | |
| """Serializes a table header file containing the given set of tables.""" | |
| # Replace the backslash with forward slash when building on Windows. | |
| # Caused b/327985369 without the replace. | |
| include_paths_str = '\n'.join([f'#include "{i}"' for i in include_paths | |
| ]).replace("\\", "/") | |
| serializers: List[NewTableSerializer] = [] | |
| for t in tables: | |
| serializers.append(NewTableSerializer(t)) | |
| tables_str = '\n\n'.join([t.serialize() for t in serializers]) | |
| return f''' | |
| #ifndef {ifdef_guard} | |
| #define {ifdef_guard} | |
| #include <array> | |
| #include <cstddef> | |
| #include <cstdint> | |
| #include <memory> | |
| #include <optional> | |
| #include <tuple> | |
| #include <type_traits> | |
| #include <utility> | |
| #include <variant> | |
| #include <vector> | |
| #include "perfetto/base/compiler.h" | |
| #include "perfetto/base/logging.h" | |
| #include "perfetto/public/compiler.h" | |
| #include "perfetto/trace_processor/basic_types.h" | |
| #include "perfetto/trace_processor/ref_counted.h" | |
| #include "src/trace_processor/dataframe/dataframe.h" | |
| #include "src/trace_processor/dataframe/specs.h" | |
| #include "src/trace_processor/dataframe/typed_cursor.h" | |
| #include "src/trace_processor/tables/macros_internal.h" | |
| {include_paths_str} | |
| namespace perfetto::trace_processor::tables {{ | |
| {tables_str.strip()} | |
| }} // namespace perfetto | |
| #endif // {ifdef_guard} | |
| '''.strip() | |
| def to_cpp_flags(raw_flag: ColumnFlag) -> str: | |
| """Converts a ColumnFlag to the C++ flags which it represents | |
| It is not valid to call this function with ColumnFlag.NONE as in this case | |
| defaults for that column should be implicitly used.""" | |
| assert raw_flag != ColumnFlag.NONE | |
| flags = [] | |
| if ColumnFlag.SORTED in raw_flag: | |
| flags.append('ColumnLegacy::Flag::kSorted') | |
| if ColumnFlag.HIDDEN in raw_flag: | |
| flags.append('ColumnLegacy::Flag::kHidden') | |
| if ColumnFlag.DENSE in raw_flag: | |
| flags.append('ColumnLegacy::Flag::kDense') | |
| if ColumnFlag.SET_ID in raw_flag: | |
| flags.append('ColumnLegacy::Flag::kSetId') | |
| return ' | '.join(flags) |