Merge "Trace Redaction - Stop using gen in production code" into main
diff --git a/Android.bp b/Android.bp
index 78939cf..ebc715d 100644
--- a/Android.bp
+++ b/Android.bp
@@ -15165,70 +15165,38 @@
":perfetto_include_perfetto_trace_processor_basic_types",
":perfetto_include_perfetto_trace_processor_storage",
":perfetto_include_perfetto_trace_processor_trace_processor",
- ":perfetto_protos_perfetto_common_cpp_gen",
":perfetto_protos_perfetto_common_zero_gen",
- ":perfetto_protos_perfetto_config_android_cpp_gen",
":perfetto_protos_perfetto_config_android_zero_gen",
- ":perfetto_protos_perfetto_config_cpp_gen",
- ":perfetto_protos_perfetto_config_ftrace_cpp_gen",
":perfetto_protos_perfetto_config_ftrace_zero_gen",
- ":perfetto_protos_perfetto_config_gpu_cpp_gen",
":perfetto_protos_perfetto_config_gpu_zero_gen",
- ":perfetto_protos_perfetto_config_inode_file_cpp_gen",
":perfetto_protos_perfetto_config_inode_file_zero_gen",
- ":perfetto_protos_perfetto_config_interceptors_cpp_gen",
":perfetto_protos_perfetto_config_interceptors_zero_gen",
- ":perfetto_protos_perfetto_config_power_cpp_gen",
":perfetto_protos_perfetto_config_power_zero_gen",
- ":perfetto_protos_perfetto_config_process_stats_cpp_gen",
":perfetto_protos_perfetto_config_process_stats_zero_gen",
- ":perfetto_protos_perfetto_config_profiling_cpp_gen",
":perfetto_protos_perfetto_config_profiling_zero_gen",
- ":perfetto_protos_perfetto_config_statsd_cpp_gen",
":perfetto_protos_perfetto_config_statsd_zero_gen",
- ":perfetto_protos_perfetto_config_sys_stats_cpp_gen",
":perfetto_protos_perfetto_config_sys_stats_zero_gen",
- ":perfetto_protos_perfetto_config_system_info_cpp_gen",
":perfetto_protos_perfetto_config_system_info_zero_gen",
- ":perfetto_protos_perfetto_config_track_event_cpp_gen",
":perfetto_protos_perfetto_config_track_event_zero_gen",
":perfetto_protos_perfetto_config_zero_gen",
- ":perfetto_protos_perfetto_trace_android_cpp_gen",
":perfetto_protos_perfetto_trace_android_zero_gen",
- ":perfetto_protos_perfetto_trace_chrome_cpp_gen",
":perfetto_protos_perfetto_trace_chrome_zero_gen",
- ":perfetto_protos_perfetto_trace_etw_cpp_gen",
":perfetto_protos_perfetto_trace_etw_zero_gen",
- ":perfetto_protos_perfetto_trace_filesystem_cpp_gen",
":perfetto_protos_perfetto_trace_filesystem_zero_gen",
- ":perfetto_protos_perfetto_trace_ftrace_cpp_gen",
":perfetto_protos_perfetto_trace_ftrace_zero_gen",
- ":perfetto_protos_perfetto_trace_gpu_cpp_gen",
":perfetto_protos_perfetto_trace_gpu_zero_gen",
- ":perfetto_protos_perfetto_trace_interned_data_cpp_gen",
":perfetto_protos_perfetto_trace_interned_data_zero_gen",
- ":perfetto_protos_perfetto_trace_minimal_cpp_gen",
":perfetto_protos_perfetto_trace_minimal_zero_gen",
- ":perfetto_protos_perfetto_trace_non_minimal_cpp_gen",
":perfetto_protos_perfetto_trace_non_minimal_zero_gen",
- ":perfetto_protos_perfetto_trace_perfetto_cpp_gen",
":perfetto_protos_perfetto_trace_perfetto_zero_gen",
- ":perfetto_protos_perfetto_trace_power_cpp_gen",
":perfetto_protos_perfetto_trace_power_zero_gen",
":perfetto_protos_perfetto_trace_processor_zero_gen",
- ":perfetto_protos_perfetto_trace_profiling_cpp_gen",
":perfetto_protos_perfetto_trace_profiling_zero_gen",
- ":perfetto_protos_perfetto_trace_ps_cpp_gen",
":perfetto_protos_perfetto_trace_ps_zero_gen",
- ":perfetto_protos_perfetto_trace_statsd_cpp_gen",
":perfetto_protos_perfetto_trace_statsd_zero_gen",
- ":perfetto_protos_perfetto_trace_sys_stats_cpp_gen",
":perfetto_protos_perfetto_trace_sys_stats_zero_gen",
- ":perfetto_protos_perfetto_trace_system_info_cpp_gen",
":perfetto_protos_perfetto_trace_system_info_zero_gen",
- ":perfetto_protos_perfetto_trace_track_event_cpp_gen",
":perfetto_protos_perfetto_trace_track_event_zero_gen",
- ":perfetto_protos_perfetto_trace_translation_cpp_gen",
":perfetto_protos_perfetto_trace_translation_zero_gen",
":perfetto_src_base_base",
":perfetto_src_protozero_protozero",
@@ -15271,70 +15239,38 @@
"libz",
],
generated_headers: [
- "perfetto_protos_perfetto_common_cpp_gen_headers",
"perfetto_protos_perfetto_common_zero_gen_headers",
- "perfetto_protos_perfetto_config_android_cpp_gen_headers",
"perfetto_protos_perfetto_config_android_zero_gen_headers",
- "perfetto_protos_perfetto_config_cpp_gen_headers",
- "perfetto_protos_perfetto_config_ftrace_cpp_gen_headers",
"perfetto_protos_perfetto_config_ftrace_zero_gen_headers",
- "perfetto_protos_perfetto_config_gpu_cpp_gen_headers",
"perfetto_protos_perfetto_config_gpu_zero_gen_headers",
- "perfetto_protos_perfetto_config_inode_file_cpp_gen_headers",
"perfetto_protos_perfetto_config_inode_file_zero_gen_headers",
- "perfetto_protos_perfetto_config_interceptors_cpp_gen_headers",
"perfetto_protos_perfetto_config_interceptors_zero_gen_headers",
- "perfetto_protos_perfetto_config_power_cpp_gen_headers",
"perfetto_protos_perfetto_config_power_zero_gen_headers",
- "perfetto_protos_perfetto_config_process_stats_cpp_gen_headers",
"perfetto_protos_perfetto_config_process_stats_zero_gen_headers",
- "perfetto_protos_perfetto_config_profiling_cpp_gen_headers",
"perfetto_protos_perfetto_config_profiling_zero_gen_headers",
- "perfetto_protos_perfetto_config_statsd_cpp_gen_headers",
"perfetto_protos_perfetto_config_statsd_zero_gen_headers",
- "perfetto_protos_perfetto_config_sys_stats_cpp_gen_headers",
"perfetto_protos_perfetto_config_sys_stats_zero_gen_headers",
- "perfetto_protos_perfetto_config_system_info_cpp_gen_headers",
"perfetto_protos_perfetto_config_system_info_zero_gen_headers",
- "perfetto_protos_perfetto_config_track_event_cpp_gen_headers",
"perfetto_protos_perfetto_config_track_event_zero_gen_headers",
"perfetto_protos_perfetto_config_zero_gen_headers",
- "perfetto_protos_perfetto_trace_android_cpp_gen_headers",
"perfetto_protos_perfetto_trace_android_zero_gen_headers",
- "perfetto_protos_perfetto_trace_chrome_cpp_gen_headers",
"perfetto_protos_perfetto_trace_chrome_zero_gen_headers",
- "perfetto_protos_perfetto_trace_etw_cpp_gen_headers",
"perfetto_protos_perfetto_trace_etw_zero_gen_headers",
- "perfetto_protos_perfetto_trace_filesystem_cpp_gen_headers",
"perfetto_protos_perfetto_trace_filesystem_zero_gen_headers",
- "perfetto_protos_perfetto_trace_ftrace_cpp_gen_headers",
"perfetto_protos_perfetto_trace_ftrace_zero_gen_headers",
- "perfetto_protos_perfetto_trace_gpu_cpp_gen_headers",
"perfetto_protos_perfetto_trace_gpu_zero_gen_headers",
- "perfetto_protos_perfetto_trace_interned_data_cpp_gen_headers",
"perfetto_protos_perfetto_trace_interned_data_zero_gen_headers",
- "perfetto_protos_perfetto_trace_minimal_cpp_gen_headers",
"perfetto_protos_perfetto_trace_minimal_zero_gen_headers",
- "perfetto_protos_perfetto_trace_non_minimal_cpp_gen_headers",
"perfetto_protos_perfetto_trace_non_minimal_zero_gen_headers",
- "perfetto_protos_perfetto_trace_perfetto_cpp_gen_headers",
"perfetto_protos_perfetto_trace_perfetto_zero_gen_headers",
- "perfetto_protos_perfetto_trace_power_cpp_gen_headers",
"perfetto_protos_perfetto_trace_power_zero_gen_headers",
"perfetto_protos_perfetto_trace_processor_zero_gen_headers",
- "perfetto_protos_perfetto_trace_profiling_cpp_gen_headers",
"perfetto_protos_perfetto_trace_profiling_zero_gen_headers",
- "perfetto_protos_perfetto_trace_ps_cpp_gen_headers",
"perfetto_protos_perfetto_trace_ps_zero_gen_headers",
- "perfetto_protos_perfetto_trace_statsd_cpp_gen_headers",
"perfetto_protos_perfetto_trace_statsd_zero_gen_headers",
- "perfetto_protos_perfetto_trace_sys_stats_cpp_gen_headers",
"perfetto_protos_perfetto_trace_sys_stats_zero_gen_headers",
- "perfetto_protos_perfetto_trace_system_info_cpp_gen_headers",
"perfetto_protos_perfetto_trace_system_info_zero_gen_headers",
- "perfetto_protos_perfetto_trace_track_event_cpp_gen_headers",
"perfetto_protos_perfetto_trace_track_event_zero_gen_headers",
- "perfetto_protos_perfetto_trace_translation_cpp_gen_headers",
"perfetto_protos_perfetto_trace_translation_zero_gen_headers",
"perfetto_src_trace_processor_importers_proto_gen_cc_chrome_track_event_descriptor",
"perfetto_src_trace_processor_importers_proto_gen_cc_track_event_descriptor",
diff --git a/src/trace_redaction/BUILD.gn b/src/trace_redaction/BUILD.gn
index fe67ac8..2420b71 100644
--- a/src/trace_redaction/BUILD.gn
+++ b/src/trace_redaction/BUILD.gn
@@ -61,9 +61,7 @@
"../../include/perfetto/ext/base",
"../../include/perfetto/protozero:protozero",
"../../include/perfetto/trace_processor:storage",
- "../../protos/perfetto/trace:non_minimal_cpp",
"../../protos/perfetto/trace:non_minimal_zero",
- "../../protos/perfetto/trace/android:cpp",
"../../protos/perfetto/trace/android:zero",
"../../protos/perfetto/trace/ftrace:zero",
"../../protos/perfetto/trace/ps:zero",
diff --git a/src/trace_redaction/prune_package_list.cc b/src/trace_redaction/prune_package_list.cc
index a85a18f..de6331b 100644
--- a/src/trace_redaction/prune_package_list.cc
+++ b/src/trace_redaction/prune_package_list.cc
@@ -18,15 +18,29 @@
#include <string>
+#include "perfetto/base/logging.h"
#include "perfetto/base/status.h"
-#include "protos/perfetto/trace/android/packages_list.gen.h"
-#include "protos/perfetto/trace/trace_packet.gen.h"
+#include "perfetto/protozero/scattered_heap_buffer.h"
+#include "protos/perfetto/trace/android/packages_list.pbzero.h"
+#include "src/trace_redaction/proto_util.h"
namespace perfetto::trace_redaction {
+namespace {
-PrunePackageList::PrunePackageList() = default;
-PrunePackageList::~PrunePackageList() = default;
+bool ShouldKeepPackageInfo(protozero::Field package_info, uint64_t uid) {
+ PERFETTO_DCHECK(package_info.id() ==
+ protos::pbzero::PackagesList::kPackagesFieldNumber);
+
+ protozero::ProtoDecoder decoder(package_info.as_bytes());
+ auto uid_field = decoder.FindField(
+ protos::pbzero::PackagesList::PackageInfo::kUidFieldNumber);
+
+ return uid_field.valid() &&
+ NormalizeUid(uid_field.as_uint64()) == NormalizeUid(uid);
+}
+
+} // namespace
base::Status PrunePackageList::Transform(const Context& context,
std::string* packet) const {
@@ -34,30 +48,47 @@
return base::ErrStatus("PrunePackageList: missing package uid.");
}
+ protozero::ProtoDecoder packet_decoder(*packet);
+
protos::pbzero::TracePacket::Decoder trace_packet_decoder(*packet);
- if (!trace_packet_decoder.has_packages_list()) {
+ auto package_list = packet_decoder.FindField(
+ protos::pbzero::TracePacket::kPackagesListFieldNumber);
+
+ if (!package_list.valid()) {
return base::OkStatus();
}
- auto normalized_uid = NormalizeUid(context.package_uid.value());
+ auto uid = context.package_uid.value();
- protos::gen::TracePacket mutable_packet;
- mutable_packet.ParseFromString(*packet);
+ protozero::HeapBuffered<protos::pbzero::TracePacket> packet_message;
- auto* packages = mutable_packet.mutable_packages_list()->mutable_packages();
+ for (auto packet_field = packet_decoder.ReadField(); packet_field.valid();
+ packet_field = packet_decoder.ReadField()) {
+ if (packet_field.id() !=
+ protos::pbzero::TracePacket::kPackagesListFieldNumber) {
+ proto_util::AppendField(packet_field, packet_message.get());
+ continue;
+ }
- // Remove all entries that don't match the uid. After this, one or more
- // packages will be left in the list (multiple packages can share a uid).
- packages->erase(
- std::remove_if(
- packages->begin(), packages->end(),
- [normalized_uid](const protos::gen::PackagesList::PackageInfo& info) {
- return NormalizeUid(info.uid()) != normalized_uid;
- }),
- packages->end());
+ auto* package_list_message = packet_message->set_packages_list();
- packet->assign(mutable_packet.SerializeAsString());
+ protozero::ProtoDecoder package_list_decoder(packet_field.as_bytes());
+
+ for (auto package_field = package_list_decoder.ReadField();
+ package_field.valid();
+ package_field = package_list_decoder.ReadField()) {
+ // If not packages, keep.
+ // If packages and uid matches, keep.
+ if (package_field.id() !=
+ protos::pbzero::PackagesList::kPackagesFieldNumber ||
+ ShouldKeepPackageInfo(package_field, uid)) {
+ proto_util::AppendField(package_field, package_list_message);
+ }
+ }
+ }
+
+ packet->assign(packet_message.SerializeAsString());
return base::OkStatus();
}
diff --git a/src/trace_redaction/prune_package_list.h b/src/trace_redaction/prune_package_list.h
index 24d9ec2..ff5f060 100644
--- a/src/trace_redaction/prune_package_list.h
+++ b/src/trace_redaction/prune_package_list.h
@@ -28,9 +28,6 @@
// Returns `base::ErrStatus()` if `Context.package_uid` was not set.
class PrunePackageList final : public TransformPrimitive {
public:
- PrunePackageList();
- ~PrunePackageList() override;
-
base::Status Transform(const Context& context,
std::string* packet) const override;
};