tp: don't ship actual chain implementations in export_json target
export_json doesn't use any of the filtering logic so simply ship a
dummy chain for it to reduce binary size.
Change-Id: I6391820ee0d40b27f8b97c63a22ced985aad7011
diff --git a/Android.bp b/Android.bp
index 9650218..73487c9 100644
--- a/Android.bp
+++ b/Android.bp
@@ -2323,10 +2323,10 @@
":perfetto_src_shared_lib_test_utils",
":perfetto_src_trace_processor_containers_containers",
":perfetto_src_trace_processor_db_column_column",
- ":perfetto_src_trace_processor_db_column_minimal",
+ ":perfetto_src_trace_processor_db_column_make_chain",
":perfetto_src_trace_processor_db_db",
":perfetto_src_trace_processor_db_minimal",
- ":perfetto_src_trace_processor_export_json",
+ ":perfetto_src_trace_processor_export_json_sources",
":perfetto_src_trace_processor_importers_android_bugreport_android_bugreport",
":perfetto_src_trace_processor_importers_common_common",
":perfetto_src_trace_processor_importers_common_parser_types",
@@ -10933,10 +10933,15 @@
filegroup {
name: "perfetto_src_trace_processor_db_column_column",
srcs: [
+ "src/trace_processor/db/column/arrangement_overlay.cc",
+ "src/trace_processor/db/column/data_layer.cc",
"src/trace_processor/db/column/dense_null_overlay.cc",
+ "src/trace_processor/db/column/dummy_storage.cc",
"src/trace_processor/db/column/id_storage.cc",
"src/trace_processor/db/column/null_overlay.cc",
"src/trace_processor/db/column/numeric_storage.cc",
+ "src/trace_processor/db/column/range_overlay.cc",
+ "src/trace_processor/db/column/selector_overlay.cc",
"src/trace_processor/db/column/set_id_storage.cc",
"src/trace_processor/db/column/string_storage.cc",
"src/trace_processor/db/column/utils.cc",
@@ -10951,15 +10956,11 @@
],
}
-// GN: //src/trace_processor/db/column:minimal
+// GN: //src/trace_processor/db/column:make_chain
filegroup {
- name: "perfetto_src_trace_processor_db_column_minimal",
+ name: "perfetto_src_trace_processor_db_column_make_chain",
srcs: [
- "src/trace_processor/db/column/arrangement_overlay.cc",
- "src/trace_processor/db/column/data_layer.cc",
- "src/trace_processor/db/column/dummy_storage.cc",
- "src/trace_processor/db/column/range_overlay.cc",
- "src/trace_processor/db/column/selector_overlay.cc",
+ "src/trace_processor/db/column/make_chain.cc",
],
}
@@ -11031,9 +11032,9 @@
],
}
-// GN: //src/trace_processor:export_json
+// GN: //src/trace_processor:export_json_sources
filegroup {
- name: "perfetto_src_trace_processor_export_json",
+ name: "perfetto_src_trace_processor_export_json_sources",
srcs: [
"src/trace_processor/export_json.cc",
],
@@ -13810,13 +13811,13 @@
":perfetto_src_trace_processor_containers_unittests",
":perfetto_src_trace_processor_db_column_column",
":perfetto_src_trace_processor_db_column_fake_storage",
- ":perfetto_src_trace_processor_db_column_minimal",
+ ":perfetto_src_trace_processor_db_column_make_chain",
":perfetto_src_trace_processor_db_column_unittests",
":perfetto_src_trace_processor_db_compare",
":perfetto_src_trace_processor_db_db",
":perfetto_src_trace_processor_db_minimal",
":perfetto_src_trace_processor_db_unittests",
- ":perfetto_src_trace_processor_export_json",
+ ":perfetto_src_trace_processor_export_json_sources",
":perfetto_src_trace_processor_importers_android_bugreport_android_bugreport",
":perfetto_src_trace_processor_importers_android_bugreport_unittests",
":perfetto_src_trace_processor_importers_common_common",
@@ -14531,10 +14532,10 @@
":perfetto_src_protozero_protozero",
":perfetto_src_trace_processor_containers_containers",
":perfetto_src_trace_processor_db_column_column",
- ":perfetto_src_trace_processor_db_column_minimal",
+ ":perfetto_src_trace_processor_db_column_make_chain",
":perfetto_src_trace_processor_db_db",
":perfetto_src_trace_processor_db_minimal",
- ":perfetto_src_trace_processor_export_json",
+ ":perfetto_src_trace_processor_export_json_sources",
":perfetto_src_trace_processor_importers_android_bugreport_android_bugreport",
":perfetto_src_trace_processor_importers_common_common",
":perfetto_src_trace_processor_importers_common_parser_types",
@@ -14768,10 +14769,10 @@
":perfetto_src_protozero_protozero",
":perfetto_src_trace_processor_containers_containers",
":perfetto_src_trace_processor_db_column_column",
- ":perfetto_src_trace_processor_db_column_minimal",
+ ":perfetto_src_trace_processor_db_column_make_chain",
":perfetto_src_trace_processor_db_db",
":perfetto_src_trace_processor_db_minimal",
- ":perfetto_src_trace_processor_export_json",
+ ":perfetto_src_trace_processor_export_json_sources",
":perfetto_src_trace_processor_importers_android_bugreport_android_bugreport",
":perfetto_src_trace_processor_importers_common_common",
":perfetto_src_trace_processor_importers_common_parser_types",
diff --git a/BUILD b/BUILD
index c3bddeb..a60811a 100644
--- a/BUILD
+++ b/BUILD
@@ -217,10 +217,10 @@
":src_kernel_utils_syscall_table",
":src_protozero_proto_ring_buffer",
":src_trace_processor_db_column_column",
- ":src_trace_processor_db_column_minimal",
+ ":src_trace_processor_db_column_make_chain",
":src_trace_processor_db_db",
":src_trace_processor_db_minimal",
- ":src_trace_processor_export_json",
+ ":src_trace_processor_export_json_sources",
":src_trace_processor_importers_android_bugreport_android_bugreport",
":src_trace_processor_importers_common_common",
":src_trace_processor_importers_common_parser_types",
@@ -1375,38 +1375,39 @@
perfetto_filegroup(
name = "src_trace_processor_db_column_column",
srcs = [
+ "src/trace_processor/db/column/arrangement_overlay.cc",
+ "src/trace_processor/db/column/arrangement_overlay.h",
+ "src/trace_processor/db/column/data_layer.cc",
+ "src/trace_processor/db/column/data_layer.h",
"src/trace_processor/db/column/dense_null_overlay.cc",
"src/trace_processor/db/column/dense_null_overlay.h",
+ "src/trace_processor/db/column/dummy_storage.cc",
+ "src/trace_processor/db/column/dummy_storage.h",
"src/trace_processor/db/column/id_storage.cc",
"src/trace_processor/db/column/id_storage.h",
"src/trace_processor/db/column/null_overlay.cc",
"src/trace_processor/db/column/null_overlay.h",
"src/trace_processor/db/column/numeric_storage.cc",
"src/trace_processor/db/column/numeric_storage.h",
+ "src/trace_processor/db/column/range_overlay.cc",
+ "src/trace_processor/db/column/range_overlay.h",
+ "src/trace_processor/db/column/selector_overlay.cc",
+ "src/trace_processor/db/column/selector_overlay.h",
"src/trace_processor/db/column/set_id_storage.cc",
"src/trace_processor/db/column/set_id_storage.h",
"src/trace_processor/db/column/string_storage.cc",
"src/trace_processor/db/column/string_storage.h",
+ "src/trace_processor/db/column/types.h",
"src/trace_processor/db/column/utils.cc",
"src/trace_processor/db/column/utils.h",
],
)
-# GN target: //src/trace_processor/db/column:minimal
+# GN target: //src/trace_processor/db/column:make_chain
perfetto_filegroup(
- name = "src_trace_processor_db_column_minimal",
+ name = "src_trace_processor_db_column_make_chain",
srcs = [
- "src/trace_processor/db/column/arrangement_overlay.cc",
- "src/trace_processor/db/column/arrangement_overlay.h",
- "src/trace_processor/db/column/data_layer.cc",
- "src/trace_processor/db/column/data_layer.h",
- "src/trace_processor/db/column/dummy_storage.cc",
- "src/trace_processor/db/column/dummy_storage.h",
- "src/trace_processor/db/column/range_overlay.cc",
- "src/trace_processor/db/column/range_overlay.h",
- "src/trace_processor/db/column/selector_overlay.cc",
- "src/trace_processor/db/column/selector_overlay.h",
- "src/trace_processor/db/column/types.h",
+ "src/trace_processor/db/column/make_chain.cc",
],
)
@@ -2838,9 +2839,9 @@
linkstatic = True,
)
-# GN target: //src/trace_processor:export_json
+# GN target: //src/trace_processor:export_json_sources
perfetto_filegroup(
- name = "src_trace_processor_export_json",
+ name = "src_trace_processor_export_json_sources",
srcs = [
"src/trace_processor/export_json.cc",
"src/trace_processor/export_json.h",
@@ -5552,10 +5553,10 @@
srcs = [
":src_kernel_utils_syscall_table",
":src_trace_processor_db_column_column",
- ":src_trace_processor_db_column_minimal",
+ ":src_trace_processor_db_column_make_chain",
":src_trace_processor_db_db",
":src_trace_processor_db_minimal",
- ":src_trace_processor_export_json",
+ ":src_trace_processor_export_json_sources",
":src_trace_processor_importers_android_bugreport_android_bugreport",
":src_trace_processor_importers_common_common",
":src_trace_processor_importers_common_parser_types",
@@ -5720,10 +5721,10 @@
":src_profiling_symbolizer_symbolizer",
":src_protozero_proto_ring_buffer",
":src_trace_processor_db_column_column",
- ":src_trace_processor_db_column_minimal",
+ ":src_trace_processor_db_column_make_chain",
":src_trace_processor_db_db",
":src_trace_processor_db_minimal",
- ":src_trace_processor_export_json",
+ ":src_trace_processor_export_json_sources",
":src_trace_processor_importers_android_bugreport_android_bugreport",
":src_trace_processor_importers_common_common",
":src_trace_processor_importers_common_parser_types",
@@ -5946,10 +5947,10 @@
":src_profiling_symbolizer_symbolizer",
":src_protozero_proto_ring_buffer",
":src_trace_processor_db_column_column",
- ":src_trace_processor_db_column_minimal",
+ ":src_trace_processor_db_column_make_chain",
":src_trace_processor_db_db",
":src_trace_processor_db_minimal",
- ":src_trace_processor_export_json",
+ ":src_trace_processor_export_json_sources",
":src_trace_processor_importers_android_bugreport_android_bugreport",
":src_trace_processor_importers_common_common",
":src_trace_processor_importers_common_parser_types",
diff --git a/gn/standalone/BUILD.gn b/gn/standalone/BUILD.gn
index 1fb8196..c397d5c 100644
--- a/gn/standalone/BUILD.gn
+++ b/gn/standalone/BUILD.gn
@@ -65,7 +65,10 @@
# Disable variadic macro warning as we make extensive use of them in trace
# processor and client API.
if (is_clang) {
- if (!is_fuzzer) {
+ # Only enable -Weverything on hermetic clang as system clang might be quite
+ # out of date.
+ if (is_hermetic_clang && current_toolchain == host_toolchain &&
+ !is_fuzzer) {
# Disable Weverything on fuzzers to avoid breakages when new versions of
# clang are rolled into OSS-fuzz.
cflags += [ "-Weverything" ]
diff --git a/src/trace_processor/BUILD.gn b/src/trace_processor/BUILD.gn
index c20ba5e..dab8c3f 100644
--- a/src/trace_processor/BUILD.gn
+++ b/src/trace_processor/BUILD.gn
@@ -43,6 +43,18 @@
}
}
+# Depended upon by Chrome to do proto -> JSON conversion of traces.
+# Must be small binary size as all code here needs to be shipped in
+# Chrome.
+static_library("export_json") {
+ deps = [
+ ":export_json_sources",
+ "../../gn:default_deps",
+ "db/column:make_chain_minimal",
+ ]
+ public_deps = [ "../../include/perfetto/ext/trace_processor:export_json" ]
+}
+
source_set("metatrace") {
sources = [
"tp_metatrace.cc",
@@ -117,7 +129,7 @@
public_deps = [ "../../include/perfetto/trace_processor:storage" ]
}
-source_set("export_json") {
+source_set("export_json_sources") {
sources = [
"export_json.cc",
"export_json.h",
@@ -125,12 +137,12 @@
deps = [
":storage_minimal",
"../../gn:default_deps",
+ "../../include/perfetto/ext/trace_processor:export_json",
"../base",
"importers/json:minimal",
"storage",
"types",
]
- public_deps = [ "../../include/perfetto/ext/trace_processor:export_json" ]
}
if (enable_perfetto_trace_processor_sqlite) {
@@ -156,6 +168,7 @@
"../base",
"../protozero",
"db",
+ "db/column:make_chain",
"importers/android_bugreport",
"importers/common",
"importers/etw:full",
@@ -249,8 +262,9 @@
# windows.
sources += [ "export_json_unittest.cc" ]
deps += [
- ":export_json",
+ ":export_json_sources",
"../../gn:jsoncpp",
+ "../../include/perfetto/ext/trace_processor:export_json",
"containers",
"importers/common",
"importers/proto:minimal",
@@ -350,5 +364,6 @@
":storage_minimal",
"../../gn:default_deps",
"../base",
+ "db/column:make_chain_minimal",
]
}
diff --git a/src/trace_processor/db/BUILD.gn b/src/trace_processor/db/BUILD.gn
index 38664b3..cbd4304 100644
--- a/src/trace_processor/db/BUILD.gn
+++ b/src/trace_processor/db/BUILD.gn
@@ -39,7 +39,7 @@
"../util:glob",
"../util:regex",
"../util:util",
- "column:minimal",
+ "column",
]
}
diff --git a/src/trace_processor/db/column/BUILD.gn b/src/trace_processor/db/column/BUILD.gn
index bdca5e9..786fb91 100644
--- a/src/trace_processor/db/column/BUILD.gn
+++ b/src/trace_processor/db/column/BUILD.gn
@@ -14,44 +14,31 @@
import("../../../../gn/test.gni")
-source_set("minimal") {
+source_set("column") {
sources = [
"arrangement_overlay.cc",
"arrangement_overlay.h",
"data_layer.cc",
"data_layer.h",
- "dummy_storage.cc",
- "dummy_storage.h",
- "range_overlay.cc",
- "range_overlay.h",
- "selector_overlay.cc",
- "selector_overlay.h",
- "types.h",
- ]
- deps = [
- "../..:metatrace",
- "../../../../gn:default_deps",
- "../../../../include/perfetto/trace_processor",
- "../../../../include/perfetto/trace_processor:basic_types",
- "../../../../protos/perfetto/trace_processor:zero",
- "../../containers",
- ]
-}
-
-source_set("column") {
- sources = [
"dense_null_overlay.cc",
"dense_null_overlay.h",
+ "dummy_storage.cc",
+ "dummy_storage.h",
"id_storage.cc",
"id_storage.h",
"null_overlay.cc",
"null_overlay.h",
"numeric_storage.cc",
"numeric_storage.h",
+ "range_overlay.cc",
+ "range_overlay.h",
+ "selector_overlay.cc",
+ "selector_overlay.h",
"set_id_storage.cc",
"set_id_storage.h",
"string_storage.cc",
"string_storage.h",
+ "types.h",
"utils.cc",
"utils.h",
]
@@ -66,7 +53,22 @@
"../../util:glob",
"../../util:regex",
]
- public_deps = [ ":minimal" ]
+}
+
+source_set("make_chain_minimal") {
+ sources = [ "make_chain_minimal.cc" ]
+ deps = [
+ ":column",
+ "../../../../gn:default_deps",
+ ]
+}
+
+source_set("make_chain") {
+ sources = [ "make_chain.cc" ]
+ deps = [
+ ":column",
+ "../../../../gn:default_deps",
+ ]
}
perfetto_unittest_source_set("fake_storage") {
diff --git a/src/trace_processor/db/column/arrangement_overlay.cc b/src/trace_processor/db/column/arrangement_overlay.cc
index 4ad4184..7325689 100644
--- a/src/trace_processor/db/column/arrangement_overlay.cc
+++ b/src/trace_processor/db/column/arrangement_overlay.cc
@@ -38,14 +38,6 @@
Indices::State arrangement_state)
: arrangement_(arrangement), arrangement_state_(arrangement_state) {}
-std::unique_ptr<DataLayerChain> ArrangementOverlay::MakeChain(
- std::unique_ptr<DataLayerChain> inner,
- ChainCreationArgs args) {
- return std::make_unique<ChainImpl>(std::move(inner), arrangement_,
- arrangement_state_,
- args.does_layer_order_chain_contents);
-}
-
ArrangementOverlay::ChainImpl::ChainImpl(
std::unique_ptr<DataLayerChain> inner,
const std::vector<uint32_t>* arrangement,
diff --git a/src/trace_processor/db/column/dense_null_overlay.cc b/src/trace_processor/db/column/dense_null_overlay.cc
index fb51bb5..fcd22bb 100644
--- a/src/trace_processor/db/column/dense_null_overlay.cc
+++ b/src/trace_processor/db/column/dense_null_overlay.cc
@@ -37,12 +37,6 @@
DenseNullOverlay::DenseNullOverlay(const BitVector* non_null)
: non_null_(non_null) {}
-std::unique_ptr<DataLayerChain> DenseNullOverlay::MakeChain(
- std::unique_ptr<DataLayerChain> inner,
- ChainCreationArgs) {
- return std::make_unique<ChainImpl>(std::move(inner), non_null_);
-}
-
DenseNullOverlay::ChainImpl::ChainImpl(std::unique_ptr<DataLayerChain> inner,
const BitVector* non_null)
: inner_(std::move(inner)), non_null_(non_null) {}
diff --git a/src/trace_processor/db/column/dummy_storage.cc b/src/trace_processor/db/column/dummy_storage.cc
index 519aa61..71a3a5c 100644
--- a/src/trace_processor/db/column/dummy_storage.cc
+++ b/src/trace_processor/db/column/dummy_storage.cc
@@ -26,10 +26,6 @@
namespace perfetto::trace_processor::column {
-std::unique_ptr<DataLayerChain> DummyStorage::MakeChain() {
- return std::make_unique<ChainImpl>();
-}
-
SingleSearchResult DummyStorage::ChainImpl::SingleSearch(FilterOp,
SqlValue,
uint32_t) const {
diff --git a/src/trace_processor/db/column/dummy_storage.h b/src/trace_processor/db/column/dummy_storage.h
index a9bbc5b..b723c2e 100644
--- a/src/trace_processor/db/column/dummy_storage.h
+++ b/src/trace_processor/db/column/dummy_storage.h
@@ -30,9 +30,6 @@
// on them.
class DummyStorage final : public DataLayer {
public:
- std::unique_ptr<DataLayerChain> MakeChain() override;
-
- private:
class ChainImpl : public DataLayerChain {
public:
ChainImpl() = default;
@@ -64,6 +61,7 @@
std::string DebugString() const override { return "DummyStorage"; }
};
+ std::unique_ptr<DataLayerChain> MakeChain() override;
};
} // namespace perfetto::trace_processor::column
diff --git a/src/trace_processor/db/column/id_storage.cc b/src/trace_processor/db/column/id_storage.cc
index bf8fd41..6fdb800 100644
--- a/src/trace_processor/db/column/id_storage.cc
+++ b/src/trace_processor/db/column/id_storage.cc
@@ -151,10 +151,6 @@
return SearchValidationResult::kOk;
}
-std::unique_ptr<DataLayerChain> IdStorage::MakeChain() {
- return std::make_unique<ChainImpl>();
-}
-
SingleSearchResult IdStorage::ChainImpl::SingleSearch(FilterOp op,
SqlValue sql_val,
uint32_t index) const {
diff --git a/src/trace_processor/db/column/make_chain.cc b/src/trace_processor/db/column/make_chain.cc
new file mode 100644
index 0000000..15ee387
--- /dev/null
+++ b/src/trace_processor/db/column/make_chain.cc
@@ -0,0 +1,96 @@
+/*
+ * 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 <memory>
+#include <utility>
+
+#include "src/trace_processor/db/column/arrangement_overlay.h"
+#include "src/trace_processor/db/column/data_layer.h"
+#include "src/trace_processor/db/column/dense_null_overlay.h"
+#include "src/trace_processor/db/column/dummy_storage.h"
+#include "src/trace_processor/db/column/id_storage.h"
+#include "src/trace_processor/db/column/null_overlay.h"
+#include "src/trace_processor/db/column/numeric_storage.h"
+#include "src/trace_processor/db/column/range_overlay.h"
+#include "src/trace_processor/db/column/selector_overlay.h"
+#include "src/trace_processor/db/column/set_id_storage.h"
+#include "src/trace_processor/db/column/string_storage.h"
+
+// This file contains the implementation of MakeChain for all the
+// DataLayer implementations. They are all centralised here because
+// there is an alternative set of implementations (see make_chain_minimal.cc)
+// the "minimal" target used by export_json in Chrome.
+
+namespace perfetto::trace_processor::column {
+
+std::unique_ptr<DataLayerChain> ArrangementOverlay::MakeChain(
+ std::unique_ptr<DataLayerChain> inner,
+ ChainCreationArgs args) {
+ return std::make_unique<ChainImpl>(std::move(inner), arrangement_,
+ arrangement_state_,
+ args.does_layer_order_chain_contents);
+}
+
+std::unique_ptr<DataLayerChain> DenseNullOverlay::MakeChain(
+ std::unique_ptr<DataLayerChain> inner,
+ ChainCreationArgs) {
+ return std::make_unique<ChainImpl>(std::move(inner), non_null_);
+}
+
+std::unique_ptr<DataLayerChain> DummyStorage::MakeChain() {
+ return std::make_unique<ChainImpl>();
+}
+
+std::unique_ptr<DataLayerChain> IdStorage::MakeChain() {
+ return std::make_unique<ChainImpl>();
+}
+
+std::unique_ptr<DataLayerChain> NullOverlay::MakeChain(
+ std::unique_ptr<DataLayerChain> inner,
+ ChainCreationArgs) {
+ return std::make_unique<ChainImpl>(std::move(inner), non_null_);
+}
+
+template <typename T>
+std::unique_ptr<DataLayerChain> NumericStorage<T>::MakeChain() {
+ return std::make_unique<ChainImpl>(vector_, storage_type_, is_sorted_);
+}
+template std::unique_ptr<DataLayerChain> NumericStorage<double>::MakeChain();
+template std::unique_ptr<DataLayerChain> NumericStorage<uint32_t>::MakeChain();
+template std::unique_ptr<DataLayerChain> NumericStorage<int32_t>::MakeChain();
+template std::unique_ptr<DataLayerChain> NumericStorage<int64_t>::MakeChain();
+
+std::unique_ptr<DataLayerChain> RangeOverlay::MakeChain(
+ std::unique_ptr<DataLayerChain> inner,
+ ChainCreationArgs) {
+ return std::make_unique<ChainImpl>(std::move(inner), range_);
+}
+
+std::unique_ptr<DataLayerChain> SelectorOverlay::MakeChain(
+ std::unique_ptr<DataLayerChain> inner,
+ ChainCreationArgs) {
+ return std::make_unique<ChainImpl>(std::move(inner), selector_);
+}
+
+std::unique_ptr<DataLayerChain> SetIdStorage::MakeChain() {
+ return std::make_unique<ChainImpl>(values_);
+}
+
+std::unique_ptr<DataLayerChain> StringStorage::MakeChain() {
+ return std::make_unique<ChainImpl>(string_pool_, data_, is_sorted_);
+}
+
+} // namespace perfetto::trace_processor::column
diff --git a/src/trace_processor/db/column/make_chain_minimal.cc b/src/trace_processor/db/column/make_chain_minimal.cc
new file mode 100644
index 0000000..7a23549
--- /dev/null
+++ b/src/trace_processor/db/column/make_chain_minimal.cc
@@ -0,0 +1,92 @@
+/*
+ * 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 <memory>
+
+#include "src/trace_processor/db/column/arrangement_overlay.h"
+#include "src/trace_processor/db/column/data_layer.h"
+#include "src/trace_processor/db/column/dense_null_overlay.h"
+#include "src/trace_processor/db/column/dummy_storage.h"
+#include "src/trace_processor/db/column/id_storage.h"
+#include "src/trace_processor/db/column/null_overlay.h"
+#include "src/trace_processor/db/column/numeric_storage.h"
+#include "src/trace_processor/db/column/range_overlay.h"
+#include "src/trace_processor/db/column/selector_overlay.h"
+#include "src/trace_processor/db/column/set_id_storage.h"
+#include "src/trace_processor/db/column/string_storage.h"
+
+// This file contains the implementation of MakeChain for all the
+// DataLayer implementations the "minimal" target used by export_json in Chrome.
+// See make_chain.cc for the real implementations for these functions.
+
+namespace perfetto::trace_processor::column {
+
+std::unique_ptr<DataLayerChain> ArrangementOverlay::MakeChain(
+ std::unique_ptr<DataLayerChain>,
+ ChainCreationArgs) {
+ return std::make_unique<DummyStorage::ChainImpl>();
+}
+
+std::unique_ptr<DataLayerChain> DenseNullOverlay::MakeChain(
+ std::unique_ptr<DataLayerChain>,
+ ChainCreationArgs) {
+ return std::make_unique<DummyStorage::ChainImpl>();
+}
+
+std::unique_ptr<DataLayerChain> DummyStorage::MakeChain() {
+ return std::make_unique<DummyStorage::ChainImpl>();
+}
+
+std::unique_ptr<DataLayerChain> IdStorage::MakeChain() {
+ return std::make_unique<DummyStorage::ChainImpl>();
+}
+
+std::unique_ptr<DataLayerChain> NullOverlay::MakeChain(
+ std::unique_ptr<DataLayerChain>,
+ ChainCreationArgs) {
+ return std::make_unique<DummyStorage::ChainImpl>();
+}
+
+template <typename T>
+std::unique_ptr<DataLayerChain> NumericStorage<T>::MakeChain() {
+ return std::make_unique<DummyStorage::ChainImpl>();
+}
+template std::unique_ptr<DataLayerChain> NumericStorage<double>::MakeChain();
+template std::unique_ptr<DataLayerChain> NumericStorage<uint32_t>::MakeChain();
+template std::unique_ptr<DataLayerChain> NumericStorage<int32_t>::MakeChain();
+template std::unique_ptr<DataLayerChain> NumericStorage<int64_t>::MakeChain();
+
+std::unique_ptr<DataLayerChain> RangeOverlay::MakeChain(
+ std::unique_ptr<DataLayerChain>,
+ ChainCreationArgs) {
+ return std::make_unique<DummyStorage::ChainImpl>();
+}
+
+std::unique_ptr<DataLayerChain> SelectorOverlay::MakeChain(
+ std::unique_ptr<DataLayerChain>,
+ ChainCreationArgs) {
+ return std::make_unique<DummyStorage::ChainImpl>();
+}
+
+std::unique_ptr<DataLayerChain> SetIdStorage::MakeChain() {
+ return std::make_unique<DummyStorage::ChainImpl>();
+}
+
+std::unique_ptr<DataLayerChain> StringStorage::MakeChain() {
+ return std::make_unique<DummyStorage::ChainImpl>();
+}
+
+} // namespace perfetto::trace_processor::column
diff --git a/src/trace_processor/db/column/null_overlay.cc b/src/trace_processor/db/column/null_overlay.cc
index 25fddd4..2ddc004 100644
--- a/src/trace_processor/db/column/null_overlay.cc
+++ b/src/trace_processor/db/column/null_overlay.cc
@@ -80,12 +80,6 @@
NullOverlay::NullOverlay(const BitVector* non_null) : non_null_(non_null) {}
-std::unique_ptr<DataLayerChain> NullOverlay::MakeChain(
- std::unique_ptr<DataLayerChain> inner,
- ChainCreationArgs) {
- return std::make_unique<ChainImpl>(std::move(inner), non_null_);
-}
-
SingleSearchResult NullOverlay::ChainImpl::SingleSearch(FilterOp op,
SqlValue sql_val,
uint32_t index) const {
diff --git a/src/trace_processor/db/column/numeric_storage.cc b/src/trace_processor/db/column/numeric_storage.cc
index 9c56c85..2c88b38 100644
--- a/src/trace_processor/db/column/numeric_storage.cc
+++ b/src/trace_processor/db/column/numeric_storage.cc
@@ -22,6 +22,7 @@
#include <cstdint>
#include <functional>
#include <limits>
+#include <memory>
#include <optional>
#include <string>
#include <utility>
@@ -700,4 +701,11 @@
}
}
+// Define explicit instantiation of the necessary templates here to reduce
+// binary size bloat.
+template class NumericStorage<double>;
+template class NumericStorage<uint32_t>;
+template class NumericStorage<int32_t>;
+template class NumericStorage<int64_t>;
+
} // namespace perfetto::trace_processor::column
diff --git a/src/trace_processor/db/column/numeric_storage.h b/src/trace_processor/db/column/numeric_storage.h
index e0fa5d1..f6f450a 100644
--- a/src/trace_processor/db/column/numeric_storage.h
+++ b/src/trace_processor/db/column/numeric_storage.h
@@ -93,9 +93,10 @@
bool is_sorted)
: NumericStorageBase(type, is_sorted), vector_(vec) {}
- std::unique_ptr<DataLayerChain> MakeChain() override {
- return std::make_unique<ChainImpl>(vector_, storage_type_, is_sorted_);
- }
+ // The implementation of this function is given by
+ // make_chain.cc/make_chain_minimal.cc depending on whether this is a minimal
+ // or full build of trace processor.
+ std::unique_ptr<DataLayerChain> MakeChain() override;
private:
class ChainImpl : public NumericStorageBase::ChainImpl {
@@ -155,6 +156,22 @@
const std::vector<T>* vector_;
};
+// Define external templates to reduce binary size bloat.
+extern template class NumericStorage<double>;
+extern template class NumericStorage<uint32_t>;
+extern template class NumericStorage<int32_t>;
+extern template class NumericStorage<int64_t>;
+
+// Define external templates to allow splitting minimal vs full targets.
+extern template std::unique_ptr<DataLayerChain>
+NumericStorage<double>::MakeChain();
+extern template std::unique_ptr<DataLayerChain>
+NumericStorage<uint32_t>::MakeChain();
+extern template std::unique_ptr<DataLayerChain>
+NumericStorage<int32_t>::MakeChain();
+extern template std::unique_ptr<DataLayerChain>
+NumericStorage<int64_t>::MakeChain();
+
} // namespace perfetto::trace_processor::column
#endif // SRC_TRACE_PROCESSOR_DB_COLUMN_NUMERIC_STORAGE_H_
diff --git a/src/trace_processor/db/column/range_overlay.cc b/src/trace_processor/db/column/range_overlay.cc
index d3f3797..5a92138 100644
--- a/src/trace_processor/db/column/range_overlay.cc
+++ b/src/trace_processor/db/column/range_overlay.cc
@@ -36,12 +36,6 @@
RangeOverlay::RangeOverlay(const Range* range) : range_(range) {}
-std::unique_ptr<DataLayerChain> RangeOverlay::MakeChain(
- std::unique_ptr<DataLayerChain> inner,
- ChainCreationArgs) {
- return std::make_unique<ChainImpl>(std::move(inner), range_);
-}
-
RangeOverlay::ChainImpl::ChainImpl(std::unique_ptr<DataLayerChain> inner,
const Range* range)
: inner_(std::move(inner)), range_(range) {
diff --git a/src/trace_processor/db/column/selector_overlay.cc b/src/trace_processor/db/column/selector_overlay.cc
index e024d4d..47df692 100644
--- a/src/trace_processor/db/column/selector_overlay.cc
+++ b/src/trace_processor/db/column/selector_overlay.cc
@@ -37,12 +37,6 @@
SelectorOverlay::SelectorOverlay(const BitVector* selector)
: selector_(selector) {}
-std::unique_ptr<DataLayerChain> SelectorOverlay::MakeChain(
- std::unique_ptr<DataLayerChain> inner,
- ChainCreationArgs) {
- return std::make_unique<ChainImpl>(std::move(inner), selector_);
-}
-
SelectorOverlay::ChainImpl::ChainImpl(std::unique_ptr<DataLayerChain> inner,
const BitVector* selector)
: inner_(std::move(inner)), selector_(selector) {}
diff --git a/src/trace_processor/db/column/set_id_storage.cc b/src/trace_processor/db/column/set_id_storage.cc
index 58bbe96..dd22def 100644
--- a/src/trace_processor/db/column/set_id_storage.cc
+++ b/src/trace_processor/db/column/set_id_storage.cc
@@ -69,10 +69,6 @@
SetIdStorage::SetIdStorage(const std::vector<uint32_t>* values)
: values_(values) {}
-std::unique_ptr<DataLayerChain> SetIdStorage::MakeChain() {
- return std::make_unique<ChainImpl>(values_);
-}
-
SetIdStorage::ChainImpl::ChainImpl(const std::vector<uint32_t>* values)
: values_(values) {}
diff --git a/src/trace_processor/db/column/string_storage.cc b/src/trace_processor/db/column/string_storage.cc
index ec004aa..5eaf950 100644
--- a/src/trace_processor/db/column/string_storage.cc
+++ b/src/trace_processor/db/column/string_storage.cc
@@ -202,10 +202,6 @@
bool is_sorted)
: data_(data), string_pool_(string_pool), is_sorted_(is_sorted) {}
-std::unique_ptr<DataLayerChain> StringStorage::MakeChain() {
- return std::make_unique<ChainImpl>(string_pool_, data_, is_sorted_);
-}
-
StringStorage::ChainImpl::ChainImpl(StringPool* string_pool,
const std::vector<StringPool::Id>* data,
bool is_sorted)
diff --git a/src/trace_processor/perfetto_sql/intrinsics/functions/BUILD.gn b/src/trace_processor/perfetto_sql/intrinsics/functions/BUILD.gn
index e34973c..ea8b3ae 100644
--- a/src/trace_processor/perfetto_sql/intrinsics/functions/BUILD.gn
+++ b/src/trace_processor/perfetto_sql/intrinsics/functions/BUILD.gn
@@ -42,7 +42,7 @@
]
deps = [
"../../..:demangle",
- "../../..:export_json",
+ "../../..:export_json_sources",
"../../..:metatrace",
"../../../../../gn:default_deps",
"../../../../../gn:sqlite",