traceconv: allow text mode from outside perfetto directory
This CL moves from using the trace_packet.proto file to using a
builtin descriptor to allow text mode to work from outside the Perfetto
tree.
Bug: 131425913
Change-Id: I63691836d5553f4db1b8cd6a2655525b9e217f9f
diff --git a/Android.bp b/Android.bp
index 4ebd425..9b00686 100644
--- a/Android.bp
+++ b/Android.bp
@@ -4030,6 +4030,165 @@
],
}
+// GN: //protos/perfetto/trace:descriptor
+genrule {
+ name: "perfetto_protos_perfetto_trace_descriptor",
+ srcs: [
+ "protos/perfetto/common/android_energy_consumer_descriptor.proto",
+ "protos/perfetto/common/android_log_constants.proto",
+ "protos/perfetto/common/builtin_clock.proto",
+ "protos/perfetto/common/commit_data_request.proto",
+ "protos/perfetto/common/data_source_descriptor.proto",
+ "protos/perfetto/common/descriptor.proto",
+ "protos/perfetto/common/gpu_counter_descriptor.proto",
+ "protos/perfetto/common/interceptor_descriptor.proto",
+ "protos/perfetto/common/observable_events.proto",
+ "protos/perfetto/common/perf_events.proto",
+ "protos/perfetto/common/sys_stats_counters.proto",
+ "protos/perfetto/common/trace_stats.proto",
+ "protos/perfetto/common/tracing_service_capabilities.proto",
+ "protos/perfetto/common/tracing_service_state.proto",
+ "protos/perfetto/common/track_event_descriptor.proto",
+ "protos/perfetto/config/android/android_log_config.proto",
+ "protos/perfetto/config/android/android_polled_state_config.proto",
+ "protos/perfetto/config/android/packages_list_config.proto",
+ "protos/perfetto/config/chrome/chrome_config.proto",
+ "protos/perfetto/config/data_source_config.proto",
+ "protos/perfetto/config/ftrace/ftrace_config.proto",
+ "protos/perfetto/config/gpu/gpu_counter_config.proto",
+ "protos/perfetto/config/gpu/vulkan_memory_config.proto",
+ "protos/perfetto/config/inode_file/inode_file_config.proto",
+ "protos/perfetto/config/interceptor_config.proto",
+ "protos/perfetto/config/interceptors/console_config.proto",
+ "protos/perfetto/config/power/android_power_config.proto",
+ "protos/perfetto/config/process_stats/process_stats_config.proto",
+ "protos/perfetto/config/profiling/heapprofd_config.proto",
+ "protos/perfetto/config/profiling/java_hprof_config.proto",
+ "protos/perfetto/config/profiling/perf_event_config.proto",
+ "protos/perfetto/config/stress_test_config.proto",
+ "protos/perfetto/config/sys_stats/sys_stats_config.proto",
+ "protos/perfetto/config/test_config.proto",
+ "protos/perfetto/config/trace_config.proto",
+ "protos/perfetto/config/track_event/track_event_config.proto",
+ "protos/perfetto/trace/android/android_log.proto",
+ "protos/perfetto/trace/android/frame_timeline_event.proto",
+ "protos/perfetto/trace/android/gpu_mem_event.proto",
+ "protos/perfetto/trace/android/graphics_frame_event.proto",
+ "protos/perfetto/trace/android/initial_display_state.proto",
+ "protos/perfetto/trace/android/packages_list.proto",
+ "protos/perfetto/trace/chrome/chrome_benchmark_metadata.proto",
+ "protos/perfetto/trace/chrome/chrome_metadata.proto",
+ "protos/perfetto/trace/chrome/chrome_trace_event.proto",
+ "protos/perfetto/trace/clock_snapshot.proto",
+ "protos/perfetto/trace/extension_descriptor.proto",
+ "protos/perfetto/trace/filesystem/inode_file_map.proto",
+ "protos/perfetto/trace/ftrace/binder.proto",
+ "protos/perfetto/trace/ftrace/block.proto",
+ "protos/perfetto/trace/ftrace/cgroup.proto",
+ "protos/perfetto/trace/ftrace/clk.proto",
+ "protos/perfetto/trace/ftrace/compaction.proto",
+ "protos/perfetto/trace/ftrace/cpuhp.proto",
+ "protos/perfetto/trace/ftrace/dmabuf_heap.proto",
+ "protos/perfetto/trace/ftrace/dpu.proto",
+ "protos/perfetto/trace/ftrace/ext4.proto",
+ "protos/perfetto/trace/ftrace/f2fs.proto",
+ "protos/perfetto/trace/ftrace/fastrpc.proto",
+ "protos/perfetto/trace/ftrace/fence.proto",
+ "protos/perfetto/trace/ftrace/filemap.proto",
+ "protos/perfetto/trace/ftrace/ftrace.proto",
+ "protos/perfetto/trace/ftrace/ftrace_event.proto",
+ "protos/perfetto/trace/ftrace/ftrace_event_bundle.proto",
+ "protos/perfetto/trace/ftrace/ftrace_stats.proto",
+ "protos/perfetto/trace/ftrace/g2d.proto",
+ "protos/perfetto/trace/ftrace/generic.proto",
+ "protos/perfetto/trace/ftrace/gpu_mem.proto",
+ "protos/perfetto/trace/ftrace/i2c.proto",
+ "protos/perfetto/trace/ftrace/ion.proto",
+ "protos/perfetto/trace/ftrace/ipi.proto",
+ "protos/perfetto/trace/ftrace/irq.proto",
+ "protos/perfetto/trace/ftrace/kmem.proto",
+ "protos/perfetto/trace/ftrace/lowmemorykiller.proto",
+ "protos/perfetto/trace/ftrace/mali.proto",
+ "protos/perfetto/trace/ftrace/mdss.proto",
+ "protos/perfetto/trace/ftrace/mm_event.proto",
+ "protos/perfetto/trace/ftrace/oom.proto",
+ "protos/perfetto/trace/ftrace/power.proto",
+ "protos/perfetto/trace/ftrace/raw_syscalls.proto",
+ "protos/perfetto/trace/ftrace/regulator.proto",
+ "protos/perfetto/trace/ftrace/sched.proto",
+ "protos/perfetto/trace/ftrace/scm.proto",
+ "protos/perfetto/trace/ftrace/sde.proto",
+ "protos/perfetto/trace/ftrace/signal.proto",
+ "protos/perfetto/trace/ftrace/sync.proto",
+ "protos/perfetto/trace/ftrace/systrace.proto",
+ "protos/perfetto/trace/ftrace/task.proto",
+ "protos/perfetto/trace/ftrace/test_bundle_wrapper.proto",
+ "protos/perfetto/trace/ftrace/thermal.proto",
+ "protos/perfetto/trace/ftrace/vmscan.proto",
+ "protos/perfetto/trace/ftrace/workqueue.proto",
+ "protos/perfetto/trace/gpu/gpu_counter_event.proto",
+ "protos/perfetto/trace/gpu/gpu_log.proto",
+ "protos/perfetto/trace/gpu/gpu_render_stage_event.proto",
+ "protos/perfetto/trace/gpu/vulkan_api_event.proto",
+ "protos/perfetto/trace/gpu/vulkan_memory_event.proto",
+ "protos/perfetto/trace/interned_data/interned_data.proto",
+ "protos/perfetto/trace/memory_graph.proto",
+ "protos/perfetto/trace/perfetto/perfetto_metatrace.proto",
+ "protos/perfetto/trace/perfetto/tracing_service_event.proto",
+ "protos/perfetto/trace/power/android_energy_estimation_breakdown.proto",
+ "protos/perfetto/trace/power/battery_counters.proto",
+ "protos/perfetto/trace/power/power_rails.proto",
+ "protos/perfetto/trace/profiling/deobfuscation.proto",
+ "protos/perfetto/trace/profiling/heap_graph.proto",
+ "protos/perfetto/trace/profiling/profile_common.proto",
+ "protos/perfetto/trace/profiling/profile_packet.proto",
+ "protos/perfetto/trace/profiling/smaps.proto",
+ "protos/perfetto/trace/ps/process_stats.proto",
+ "protos/perfetto/trace/ps/process_tree.proto",
+ "protos/perfetto/trace/sys_stats/sys_stats.proto",
+ "protos/perfetto/trace/system_info.proto",
+ "protos/perfetto/trace/system_info/cpu_info.proto",
+ "protos/perfetto/trace/test_event.proto",
+ "protos/perfetto/trace/test_extensions.proto",
+ "protos/perfetto/trace/trace.proto",
+ "protos/perfetto/trace/trace_packet.proto",
+ "protos/perfetto/trace/trace_packet_defaults.proto",
+ "protos/perfetto/trace/track_event/chrome_application_state_info.proto",
+ "protos/perfetto/trace/track_event/chrome_compositor_scheduler_state.proto",
+ "protos/perfetto/trace/track_event/chrome_content_settings_event_info.proto",
+ "protos/perfetto/trace/track_event/chrome_frame_reporter.proto",
+ "protos/perfetto/trace/track_event/chrome_histogram_sample.proto",
+ "protos/perfetto/trace/track_event/chrome_keyed_service.proto",
+ "protos/perfetto/trace/track_event/chrome_latency_info.proto",
+ "protos/perfetto/trace/track_event/chrome_legacy_ipc.proto",
+ "protos/perfetto/trace/track_event/chrome_message_pump.proto",
+ "protos/perfetto/trace/track_event/chrome_mojo_event_info.proto",
+ "protos/perfetto/trace/track_event/chrome_process_descriptor.proto",
+ "protos/perfetto/trace/track_event/chrome_renderer_scheduler_state.proto",
+ "protos/perfetto/trace/track_event/chrome_thread_descriptor.proto",
+ "protos/perfetto/trace/track_event/chrome_user_event.proto",
+ "protos/perfetto/trace/track_event/chrome_window_handle_event_info.proto",
+ "protos/perfetto/trace/track_event/counter_descriptor.proto",
+ "protos/perfetto/trace/track_event/debug_annotation.proto",
+ "protos/perfetto/trace/track_event/log_message.proto",
+ "protos/perfetto/trace/track_event/process_descriptor.proto",
+ "protos/perfetto/trace/track_event/source_location.proto",
+ "protos/perfetto/trace/track_event/task_execution.proto",
+ "protos/perfetto/trace/track_event/thread_descriptor.proto",
+ "protos/perfetto/trace/track_event/track_descriptor.proto",
+ "protos/perfetto/trace/track_event/track_event.proto",
+ "protos/perfetto/trace/trigger.proto",
+ "protos/perfetto/trace/ui_state.proto",
+ ],
+ tools: [
+ "aprotoc",
+ ],
+ cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --descriptor_set_out=$(out) $(in)",
+ out: [
+ "perfetto_protos_perfetto_trace_descriptor.bin",
+ ],
+}
+
// GN: //protos/perfetto/trace/filesystem:cpp
genrule {
name: "perfetto_protos_perfetto_trace_filesystem_cpp_gen",
@@ -8799,6 +8958,21 @@
],
}
+// GN: //tools/trace_to_text:gen_cc_trace_descriptor
+genrule {
+ name: "perfetto_tools_trace_to_text_gen_cc_trace_descriptor",
+ srcs: [
+ ":perfetto_protos_perfetto_trace_descriptor",
+ ],
+ cmd: "$(location tools/gen_cc_proto_descriptor.py) --gen_dir=$(genDir) --cpp_out=$(out) $(in)",
+ out: [
+ "tools/trace_to_text/trace.descriptor.h",
+ ],
+ tool_files: [
+ "tools/gen_cc_proto_descriptor.py",
+ ],
+}
+
// GN: //tools/trace_to_text:pprofbuilder
filegroup {
name: "perfetto_tools_trace_to_text_pprofbuilder",
@@ -9609,6 +9783,7 @@
"perfetto_src_trace_processor_metrics_gen_cc_all_chrome_metrics_descriptor",
"perfetto_src_trace_processor_metrics_gen_cc_metrics_descriptor",
"perfetto_src_trace_processor_metrics_gen_merged_sql_metrics",
+ "perfetto_tools_trace_to_text_gen_cc_trace_descriptor",
],
defaults: [
"perfetto_defaults",
diff --git a/BUILD b/BUILD
index 3440cca..69ab922 100644
--- a/BUILD
+++ b/BUILD
@@ -1777,6 +1777,16 @@
],
)
+perfetto_cc_proto_descriptor(
+ name = "tools_trace_to_text_gen_cc_trace_descriptor",
+ deps = [
+ ":protos_perfetto_trace_descriptor",
+ ],
+ outs = [
+ "tools/trace_to_text/trace.descriptor.h",
+ ],
+)
+
# GN target: //tools/trace_to_text:pprofbuilder
filegroup(
name = "tools_trace_to_text_pprofbuilder",
@@ -2615,6 +2625,17 @@
],
)
+# GN target: //protos/perfetto/trace:descriptor
+perfetto_proto_descriptor(
+ name = "protos_perfetto_trace_descriptor",
+ deps = [
+ ":protos_perfetto_trace_protos",
+ ],
+ outs = [
+ "protos_perfetto_trace_descriptor.bin",
+ ],
+)
+
# GN target: //protos/perfetto/trace/filesystem:lite
perfetto_cc_proto_library(
name = "protos_perfetto_trace_filesystem_lite",
@@ -3080,6 +3101,46 @@
],
)
+# GN target: //protos/perfetto/trace:descriptor
+perfetto_proto_library(
+ name = "protos_perfetto_trace_protos",
+ srcs = [
+ "protos/perfetto/trace/trace.proto",
+ ],
+ visibility = [
+ PERFETTO_CONFIG.proto_library_visibility,
+ ],
+ deps = [
+ ":protos_perfetto_common_protos",
+ ":protos_perfetto_config_android_protos",
+ ":protos_perfetto_config_ftrace_protos",
+ ":protos_perfetto_config_gpu_protos",
+ ":protos_perfetto_config_inode_file_protos",
+ ":protos_perfetto_config_interceptors_protos",
+ ":protos_perfetto_config_power_protos",
+ ":protos_perfetto_config_process_stats_protos",
+ ":protos_perfetto_config_profiling_protos",
+ ":protos_perfetto_config_protos",
+ ":protos_perfetto_config_sys_stats_protos",
+ ":protos_perfetto_config_track_event_protos",
+ ":protos_perfetto_trace_android_protos",
+ ":protos_perfetto_trace_chrome_protos",
+ ":protos_perfetto_trace_filesystem_protos",
+ ":protos_perfetto_trace_ftrace_protos",
+ ":protos_perfetto_trace_gpu_protos",
+ ":protos_perfetto_trace_interned_data_protos",
+ ":protos_perfetto_trace_minimal_protos",
+ ":protos_perfetto_trace_non_minimal_protos",
+ ":protos_perfetto_trace_perfetto_protos",
+ ":protos_perfetto_trace_power_protos",
+ ":protos_perfetto_trace_profiling_protos",
+ ":protos_perfetto_trace_ps_protos",
+ ":protos_perfetto_trace_sys_stats_protos",
+ ":protos_perfetto_trace_system_info_protos",
+ ":protos_perfetto_trace_track_event_protos",
+ ],
+)
+
# GN target: //protos/perfetto/trace/ps:lite
perfetto_cc_proto_library(
name = "protos_perfetto_trace_ps_lite",
@@ -3834,6 +3895,7 @@
":src_trace_processor_importers_gen_cc_track_event_descriptor",
":src_trace_processor_metrics_gen_cc_all_chrome_metrics_descriptor",
":src_trace_processor_metrics_gen_cc_metrics_descriptor",
+ ":tools_trace_to_text_gen_cc_trace_descriptor",
] + PERFETTO_CONFIG.deps.jsoncpp +
PERFETTO_CONFIG.deps.protobuf_full +
PERFETTO_CONFIG.deps.sqlite +
diff --git a/protos/perfetto/trace/BUILD.gn b/protos/perfetto/trace/BUILD.gn
index ed7b6ae..a807061 100644
--- a/protos/perfetto/trace/BUILD.gn
+++ b/protos/perfetto/trace/BUILD.gn
@@ -76,6 +76,7 @@
"cpp",
"lite",
"zero",
+ "source_set",
]
deps = [
":minimal_@TYPE@",
@@ -109,12 +110,11 @@
sources = [ "perfetto_trace.proto" ]
}
-if (perfetto_build_standalone) {
- perfetto_proto_library("descriptor") {
- proto_generators = [ "descriptor" ]
- generate_descriptor = "trace.descriptor"
- sources = [ "trace.proto" ]
- }
+perfetto_proto_library("descriptor") {
+ proto_generators = [ "descriptor" ]
+ generate_descriptor = "trace.descriptor"
+ sources = [ "trace.proto" ]
+ deps = [ ":non_minimal_source_set" ]
}
# This target exports perfetto trace protos allowing both host and device
diff --git a/protos/perfetto/trace/ftrace/BUILD.gn b/protos/perfetto/trace/ftrace/BUILD.gn
index 5684450..7edf7fe 100644
--- a/protos/perfetto/trace/ftrace/BUILD.gn
+++ b/protos/perfetto/trace/ftrace/BUILD.gn
@@ -21,6 +21,7 @@
"cpp",
"zero",
"lite",
+ "source_set",
]
sources = ftrace_proto_names
}
diff --git a/tools/gen_android_bp b/tools/gen_android_bp
index 5ae4b85..cc8094b 100755
--- a/tools/gen_android_bp
+++ b/tools/gen_android_bp
@@ -163,9 +163,9 @@
for line in (line.strip() for line in lines if not line.startswith('#')):
assert os.path.exists(line), 'file %s should exist' % line
if line.startswith('test/data/'):
- # Skip test data files that require GCS. They are only for benchmarks.
- # We don't run benchmarks in the android tree.
- continue
+ # Skip test data files that require GCS. They are only for benchmarks.
+ # We don't run benchmarks in the android tree.
+ continue
if line.endswith('/.'):
yield line[:-1] + '**/*'
else:
@@ -182,16 +182,16 @@
('cflags', {'-Wglobal-constructors', '-Werror=global-constructors'}),
('version_script', 'src/profiling/memory/heapprofd_client_api.map.txt'),
('stubs', {
- 'versions': ['S'],
- 'symbol_file': 'src/profiling/memory/heapprofd_client_api.map.txt',
+ 'versions': ['S'],
+ 'symbol_file': 'src/profiling/memory/heapprofd_client_api.map.txt',
}),
('export_include_dirs', {'src/profiling/memory/include'}),
],
'heapprofd_api_noop': [
('version_script', 'src/profiling/memory/heapprofd_client_api.map.txt'),
('stubs', {
- 'versions': ['S'],
- 'symbol_file': 'src/profiling/memory/heapprofd_client_api.map.txt',
+ 'versions': ['S'],
+ 'symbol_file': 'src/profiling/memory/heapprofd_client_api.map.txt',
}),
('export_include_dirs', {'src/profiling/memory/include'}),
],
@@ -210,42 +210,42 @@
('include_dirs', {'bionic/libc/kernel'}),
],
'perfetto_integrationtests': [
- ('test_suites', {'general-tests'}),
- ('test_config', 'PerfettoIntegrationTests.xml'),
+ ('test_suites', {'general-tests'}),
+ ('test_config', 'PerfettoIntegrationTests.xml'),
],
- 'traced_probes': [
- ('required', {'libperfetto_android_internal',
- 'trigger_perfetto',
- 'traced_perf',
- 'mm_events'}),
- ],
+ 'traced_probes': [('required', {
+ 'libperfetto_android_internal', 'trigger_perfetto', 'traced_perf',
+ 'mm_events'
+ }),],
'libperfetto_android_internal': [('static_libs', {'libhealthhalutils'}),],
'trace_processor_shell': [
- ('strip', {'all': True}),
- ('host', {
- 'stl': 'libc++_static',
- 'dist': {'targets': ['sdk_repo']},
- }),
+ ('strip', {
+ 'all': True
+ }),
+ ('host', {
+ 'stl': 'libc++_static',
+ 'dist': {
+ 'targets': ['sdk_repo']
+ },
+ }),
],
'libperfetto_client_experimental': [
- ('apex_available', {
- '//apex_available:platform',
- 'com.android.art',
- 'com.android.art.debug'}),
- ('min_sdk_version', 'S'),
- ('shared_libs', {'liblog'}),
- ('export_include_dirs', {'include', buildflags_dir}),
+ ('apex_available', {
+ '//apex_available:platform', 'com.android.art',
+ 'com.android.art.debug'
+ }),
+ ('min_sdk_version', 'S'),
+ ('shared_libs', {'liblog'}),
+ ('export_include_dirs', {'include', buildflags_dir}),
],
'perfetto_trace_protos': [
- ('apex_available', {
- '//apex_available:platform',
- 'com.android.art',
- 'com.android.art.debug'}),
- ('min_sdk_version', 'S'),
+ ('apex_available', {
+ '//apex_available:platform', 'com.android.art',
+ 'com.android.art.debug'
+ }),
+ ('min_sdk_version', 'S'),
],
- 'libperfetto': [
- ('export_include_dirs', {'include', buildflags_dir}),
- ],
+ 'libperfetto': [('export_include_dirs', {'include', buildflags_dir}),],
}
@@ -325,6 +325,7 @@
def enable_uapi_headers(module):
module.include_dirs.add('bionic/libc/kernel')
+
def enable_bionic_libc_platform_headers_on_android(module):
module.header_libs.add('bionic_libc_platform_headers')
@@ -332,20 +333,32 @@
# Android equivalents for third-party libraries that the upstream project
# depends on.
builtin_deps = {
- '//gn:default_deps': lambda x: None,
- '//gn:gtest_main': lambda x: None,
- '//gn:protoc': lambda x: None,
- '//gn:gtest_and_gmock': enable_gtest_and_gmock,
- '//gn:libunwind': enable_libunwind,
- '//gn:protobuf_full': enable_protobuf_full,
- '//gn:protobuf_lite': enable_protobuf_lite,
- '//gn:protoc_lib': enable_protoc_lib,
- '//gn:libunwindstack': enable_libunwindstack,
- '//gn:sqlite': enable_sqlite,
- '//gn:zlib': enable_zlib,
- '//gn:bionic_kernel_uapi_headers' : enable_uapi_headers,
+ '//gn:default_deps':
+ lambda x: None,
+ '//gn:gtest_main':
+ lambda x: None,
+ '//gn:protoc':
+ lambda x: None,
+ '//gn:gtest_and_gmock':
+ enable_gtest_and_gmock,
+ '//gn:libunwind':
+ enable_libunwind,
+ '//gn:protobuf_full':
+ enable_protobuf_full,
+ '//gn:protobuf_lite':
+ enable_protobuf_lite,
+ '//gn:protoc_lib':
+ enable_protoc_lib,
+ '//gn:libunwindstack':
+ enable_libunwindstack,
+ '//gn:sqlite':
+ enable_sqlite,
+ '//gn:zlib':
+ enable_zlib,
+ '//gn:bionic_kernel_uapi_headers':
+ enable_uapi_headers,
'//src/profiling/memory:bionic_libc_platform_headers_on_android':
- enable_bionic_libc_platform_headers_on_android,
+ enable_bionic_libc_platform_headers_on_android,
}
# ----------------------------------------------------------------------------
@@ -546,7 +559,6 @@
output.append('}')
output.append('')
-
def add_android_static_lib(self, lib):
if self.type == 'cc_binary_host':
raise Exception('Adding Android static lib for host tool is unsupported')
@@ -555,7 +567,6 @@
else:
self.static_libs.add(lib)
-
def add_android_shared_lib(self, lib):
if self.type == 'cc_binary_host':
raise Exception('Adding Android shared lib for host tool is unsupported')
@@ -564,7 +575,6 @@
else:
self.shared_libs.add(lib)
-
def _output_field(self, output, name, sort=True):
value = getattr(self, name)
return write_blueprint_key_value(output, name, value, sort)
@@ -767,10 +777,8 @@
'tools/gen_cc_proto_descriptor.py',
]
module.cmd = ' '.join([
- '$(location tools/gen_cc_proto_descriptor.py)',
- '--gen_dir=$(genDir)',
- '--cpp_out=$(out)',
- '$(in)'
+ '$(location tools/gen_cc_proto_descriptor.py)', '--gen_dir=$(genDir)',
+ '--cpp_out=$(out)', '$(in)'
])
module.genrule_headers.add(module.name)
module.srcs.update(
@@ -784,14 +792,12 @@
module = Module('genrule', bp_module_name, gn_utils.GEN_VERSION_TARGET)
script_path = gn_utils.label_to_path(target.script)
module.genrule_headers.add(bp_module_name)
- module.tool_files = [ script_path ]
+ module.tool_files = [script_path]
module.out.update(target.outputs)
module.srcs.update(gn_utils.label_to_path(src) for src in target.inputs)
module.cmd = ' '.join([
- 'python3 $(location %s)' % script_path,
- '--no_git',
- '--changelog=$(location CHANGELOG)',
- '--cpp_out=$(out)'
+ 'python3 $(location %s)' % script_path, '--no_git',
+ '--changelog=$(location CHANGELOG)', '--cpp_out=$(out)'
])
blueprint.add_module(module)
return module
@@ -821,6 +827,7 @@
return blueprint.modules[bp_module_name]
target = gn.get_target(gn_target_name)
+ name_without_toolchain = gn_utils.label_without_toolchain(target.name)
if target.type == 'executable':
if target.toolchain == gn_utils.HOST_TOOLCHAIN:
module_type = 'cc_binary_host'
@@ -846,10 +853,10 @@
elif target.type == 'action':
if 'gen_merged_sql_metrics' in target.name:
module = create_merged_sql_metrics_module(blueprint, target)
- elif re.match('.*gen_cc_.*_descriptor$', target.name):
+ elif re.match('.*gen_cc_.*_descriptor$', name_without_toolchain):
module = create_cc_proto_descriptor_module(blueprint, target)
- elif target.type == 'action' and gn_utils.label_without_toolchain(
- target.name) == gn_utils.GEN_VERSION_TARGET:
+ elif target.type == 'action' and \
+ name_without_toolchain == gn_utils.GEN_VERSION_TARGET:
module = create_gen_version_module(blueprint, target, bp_module_name)
else:
raise Error('Unhandled action: {}'.format(target.name))
@@ -857,8 +864,7 @@
raise Error('Unknown target %s (%s)' % (target.name, target.type))
blueprint.add_module(module)
- module.host_supported = (gn_utils.label_without_toolchain(target.name) in
- target_host_supported)
+ module.host_supported = (name_without_toolchain in target_host_supported)
module.init_rc = target_initrc.get(target.name, [])
module.srcs.update(
gn_utils.label_to_path(src)
@@ -1033,7 +1039,7 @@
# perfetto_component.gni is fixed.
# Check for ODR violations
# for target_name in default_targets:
- # checker = gn_utils.ODRChecker(gn, target_name)
+ # checker = gn_utils.ODRChecker(gn, target_name)
output = [
"""// Copyright (C) 2017 The Android Open Source Project
diff --git a/tools/trace_to_text/BUILD.gn b/tools/trace_to_text/BUILD.gn
index 7c409a3..503e688 100644
--- a/tools/trace_to_text/BUILD.gn
+++ b/tools/trace_to_text/BUILD.gn
@@ -13,6 +13,7 @@
# limitations under the License.
import("../../gn/perfetto.gni")
+import("../../gn/perfetto_cc_proto_descriptor.gni")
import("../../gn/perfetto_host_executable.gni")
import("../../gn/wasm.gni")
@@ -131,6 +132,7 @@
testonly = true
deps = [
":common",
+ ":gen_cc_trace_descriptor",
":utils",
"../../gn:default_deps",
"../../gn:protobuf_full",
@@ -155,3 +157,8 @@
]
}
}
+
+perfetto_cc_proto_descriptor("gen_cc_trace_descriptor") {
+ descriptor_name = "trace.descriptor"
+ descriptor_target = "../../protos/perfetto/trace:descriptor"
+}
diff --git a/tools/trace_to_text/trace_to_text.cc b/tools/trace_to_text/trace_to_text.cc
index 2fef5a5..070bb14 100644
--- a/tools/trace_to_text/trace_to_text.cc
+++ b/tools/trace_to_text/trace_to_text.cc
@@ -16,7 +16,6 @@
#include "tools/trace_to_text/trace_to_text.h"
-#include <google/protobuf/compiler/importer.h>
#include <google/protobuf/dynamic_message.h>
#include <google/protobuf/io/zero_copy_stream_impl.h>
#include <google/protobuf/text_format.h>
@@ -25,6 +24,7 @@
#include "perfetto/ext/base/file_utils.h"
#include "perfetto/ext/base/scoped_file.h"
#include "tools/trace_to_text/proto_full_utils.h"
+#include "tools/trace_to_text/trace.descriptor.h"
#include "tools/trace_to_text/utils.h"
#include "protos/perfetto/trace/trace.pbzero.h"
@@ -36,17 +36,17 @@
namespace perfetto {
namespace trace_to_text {
-
namespace {
+
using google::protobuf::Descriptor;
+using google::protobuf::DescriptorPool;
using google::protobuf::DynamicMessageFactory;
using google::protobuf::FieldDescriptor;
using google::protobuf::FileDescriptor;
+using google::protobuf::FileDescriptorSet;
using google::protobuf::Message;
using google::protobuf::Reflection;
using google::protobuf::TextFormat;
-using google::protobuf::compiler::DiskSourceTree;
-using google::protobuf::compiler::Importer;
using google::protobuf::io::OstreamOutputStream;
using google::protobuf::io::ZeroCopyOutputStream;
@@ -147,42 +147,34 @@
} // namespace
int TraceToText(std::istream* input, std::ostream* output) {
- const std::string proto_path = "protos/perfetto/trace/trace_packet.proto";
-
- if (!base::OpenFile(proto_path, O_RDONLY)) {
- PERFETTO_ELOG("Cannot open %s.", proto_path.c_str());
- PERFETTO_ELOG(
- "Text mode only works from the perfetto directory. Googlers, see "
- "b/131425913");
- return 1;
+ DescriptorPool pool;
+ FileDescriptorSet desc_set;
+ desc_set.ParseFromArray(kTraceDescriptor.data(), kTraceDescriptor.size());
+ for (const auto& desc : desc_set.file()) {
+ pool.BuildFile(desc);
}
- DiskSourceTree dst;
- dst.MapPath("", "");
- MultiFileErrorCollectorImpl mfe;
- Importer importer(&dst, &mfe);
- const FileDescriptor* parsed_file =
- importer.Import("protos/perfetto/trace/trace_packet.proto");
+ DynamicMessageFactory factory(&pool);
+ const Descriptor* trace_descriptor =
+ pool.FindMessageTypeByName("perfetto.protos.TracePacket");
+ const Message* prototype = factory.GetPrototype(trace_descriptor);
+ std::unique_ptr<Message> msg(prototype->New());
- DynamicMessageFactory dmf;
- const Descriptor* trace_descriptor = parsed_file->message_type(0);
- const Message* root = dmf.GetPrototype(trace_descriptor);
OstreamOutputStream zero_copy_output(output);
OstreamOutputStream* zero_copy_output_ptr = &zero_copy_output;
- Message* msg = root->New();
constexpr uint32_t kCompressedPacketFieldDescriptor = 50;
const Reflection* reflect = msg->GetReflection();
const FieldDescriptor* compressed_desc =
trace_descriptor->FindFieldByNumber(kCompressedPacketFieldDescriptor);
- Message* compressed_msg_scratch = root->New();
+ std::unique_ptr<Message> compressed_msg_scratch(prototype->New());
std::string compressed_packet_scratch;
TextFormat::Printer printer;
printer.SetInitialIndentLevel(1);
ForEachPacketBlobInTrace(
- input, [msg, reflect, compressed_desc, zero_copy_output_ptr,
- &compressed_packet_scratch, compressed_msg_scratch,
+ input, [&msg, reflect, compressed_desc, zero_copy_output_ptr,
+ &compressed_packet_scratch, &compressed_msg_scratch,
&printer](std::unique_ptr<char[]> buf, size_t size) {
if (!msg->ParseFromArray(buf.get(), static_cast<int>(size))) {
PERFETTO_ELOG("Skipping invalid packet");
@@ -191,7 +183,8 @@
if (reflect->HasField(*msg, compressed_desc)) {
const auto& compressed_packets = reflect->GetStringReference(
*msg, compressed_desc, &compressed_packet_scratch);
- PrintCompressedPackets(compressed_packets, compressed_msg_scratch,
+ PrintCompressedPackets(compressed_packets,
+ compressed_msg_scratch.get(),
zero_copy_output_ptr);
} else {
WriteToZeroCopyOutput(zero_copy_output_ptr, kPacketPrefix,