diff --git a/BUILD.gn b/BUILD.gn index bfadecaa5c..1e61d67e04 100644 --- a/BUILD.gn +++ b/BUILD.gn @@ -48,6 +48,10 @@ if (enable_perfetto_trace_processor && enable_perfetto_trace_processor_sqlite) { all_targets += [ "src/trace_processor:trace_processor_shell" ] } +if (enable_perfetto_trace_processor) { + all_targets += [ "src/trace_redaction:trace_redactor" ] +} + if (enable_perfetto_traceconv) { all_targets += [ "src/traceconv" ] if (is_cross_compiling) { diff --git a/src/trace_redaction/BUILD.gn b/src/trace_redaction/BUILD.gn index cff9588bf3..f65c588bee 100644 --- a/src/trace_redaction/BUILD.gn +++ b/src/trace_redaction/BUILD.gn @@ -14,6 +14,18 @@ import("../../gn/test.gni") +# The main entry point for external processes. This is separate from +# "trace_redaction" because tests also depend on "trace_redaction". +executable("trace_redactor") { + sources = [ "main.cc" ] + deps = [ + ":trace_redaction", + "../../gn:default_deps", + "../../include/perfetto/base", + "../../include/perfetto/ext/base", + ] +} + source_set("trace_redaction") { sources = [ "find_package_uid.cc", diff --git a/src/trace_redaction/main.cc b/src/trace_redaction/main.cc new file mode 100644 index 0000000000..24ad116d96 --- /dev/null +++ b/src/trace_redaction/main.cc @@ -0,0 +1,68 @@ +/* + * Copyright (C) 2024 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. + */ + +#include "perfetto/base/logging.h" +#include "perfetto/base/status.h" +#include "src/trace_redaction/find_package_uid.h" +#include "src/trace_redaction/prune_package_list.h" +#include "src/trace_redaction/trace_redaction_framework.h" +#include "src/trace_redaction/trace_redactor.h" + +namespace perfetto::trace_redaction { + +// Builds and runs a trace redactor. +static base::Status Main(std::string_view input, + std::string_view output, + std::string_view package_name) { + TraceRedactor redactor; + + // Add all collectors. + redactor.collectors()->emplace_back(new FindPackageUid()); + + // TODO(vaage): Add all builders. + + // Add all transforms. + redactor.transformers()->emplace_back(new PrunePackageList()); + + Context context; + context.package_name = package_name; + + return redactor.Redact(input, output, &context); +} + +} // namespace perfetto::trace_redaction + +int main(int argc, char** argv) { + constexpr int kSuccess = 0; + constexpr int kFailure = 1; + constexpr int kInvalidArgs = 2; + + if (argc != 4) { + PERFETTO_ELOG( + "Invalid arguments: %s ", + argv[0]); + return kInvalidArgs; + } + + auto result = perfetto::trace_redaction::Main(argv[1], argv[2], argv[3]); + + if (result.ok()) { + return kSuccess; + } + + PERFETTO_ELOG("Unexpected error: %s", result.c_message()); + return kFailure; +}