Skip to content

Commit 8f41f2b

Browse files
committed
Merge remote-tracking branch 'origin/main' into dev/lalitm/cleanup
2 parents 8fef209 + 510d8cd commit 8f41f2b

50 files changed

Lines changed: 250 additions & 3366 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Android.bp

Lines changed: 0 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -3010,8 +3010,6 @@ cc_test {
30103010
":perfetto_src_trace_processor_perfetto_sql_intrinsics_types_types",
30113011
":perfetto_src_trace_processor_perfetto_sql_parser_intrinsic_macro_expansion",
30123012
":perfetto_src_trace_processor_perfetto_sql_parser_parser",
3013-
":perfetto_src_trace_processor_perfetto_sql_preprocessor_grammar",
3014-
":perfetto_src_trace_processor_perfetto_sql_preprocessor_preprocessor",
30153013
":perfetto_src_trace_processor_perfetto_sql_syntaqlite_syntaqlite",
30163014
":perfetto_src_trace_processor_perfetto_sql_tokenizer_tokenizer",
30173015
":perfetto_src_trace_processor_plugins_ancestor_ancestor",
@@ -16839,30 +16837,6 @@ filegroup {
1683916837
],
1684016838
}
1684116839

16842-
// GN: //src/trace_processor/perfetto_sql/preprocessor:grammar
16843-
filegroup {
16844-
name: "perfetto_src_trace_processor_perfetto_sql_preprocessor_grammar",
16845-
srcs: [
16846-
"src/trace_processor/perfetto_sql/preprocessor/preprocessor_grammar.c",
16847-
],
16848-
}
16849-
16850-
// GN: //src/trace_processor/perfetto_sql/preprocessor:preprocessor
16851-
filegroup {
16852-
name: "perfetto_src_trace_processor_perfetto_sql_preprocessor_preprocessor",
16853-
srcs: [
16854-
"src/trace_processor/perfetto_sql/preprocessor/perfetto_sql_preprocessor.cc",
16855-
],
16856-
}
16857-
16858-
// GN: //src/trace_processor/perfetto_sql/preprocessor:unittests
16859-
filegroup {
16860-
name: "perfetto_src_trace_processor_perfetto_sql_preprocessor_unittests",
16861-
srcs: [
16862-
"src/trace_processor/perfetto_sql/preprocessor/perfetto_sql_preprocessor_unittest.cc",
16863-
],
16864-
}
16865-
1686616840
// GN: //src/trace_processor/perfetto_sql/stdlib/android:android
1686716841
filegroup {
1686816842
name: "perfetto_src_trace_processor_perfetto_sql_stdlib_android_android",
@@ -17082,7 +17056,6 @@ filegroup {
1708217056
"src/trace_processor/perfetto_sql/stdlib/prelude/after_eof/cpu_scheduling.sql",
1708317057
"src/trace_processor/perfetto_sql/stdlib/prelude/after_eof/events.sql",
1708417058
"src/trace_processor/perfetto_sql/stdlib/prelude/after_eof/gpu.sql",
17085-
"src/trace_processor/perfetto_sql/stdlib/prelude/after_eof/indexes.sql",
1708617059
"src/trace_processor/perfetto_sql/stdlib/prelude/after_eof/memory.sql",
1708717060
"src/trace_processor/perfetto_sql/stdlib/prelude/after_eof/slices.sql",
1708817061
"src/trace_processor/perfetto_sql/stdlib/prelude/after_eof/tracks.sql",
@@ -18851,8 +18824,6 @@ cc_library_static {
1885118824
":perfetto_src_trace_processor_perfetto_sql_intrinsics_types_types",
1885218825
":perfetto_src_trace_processor_perfetto_sql_parser_intrinsic_macro_expansion",
1885318826
":perfetto_src_trace_processor_perfetto_sql_parser_parser",
18854-
":perfetto_src_trace_processor_perfetto_sql_preprocessor_grammar",
18855-
":perfetto_src_trace_processor_perfetto_sql_preprocessor_preprocessor",
1885618827
":perfetto_src_trace_processor_perfetto_sql_syntaqlite_syntaqlite",
1885718828
":perfetto_src_trace_processor_perfetto_sql_tokenizer_tokenizer",
1885818829
":perfetto_src_trace_processor_plugins_ancestor_ancestor",
@@ -21397,9 +21368,6 @@ cc_test {
2139721368
":perfetto_src_trace_processor_perfetto_sql_parser_parser",
2139821369
":perfetto_src_trace_processor_perfetto_sql_parser_test_utils",
2139921370
":perfetto_src_trace_processor_perfetto_sql_parser_unittests",
21400-
":perfetto_src_trace_processor_perfetto_sql_preprocessor_grammar",
21401-
":perfetto_src_trace_processor_perfetto_sql_preprocessor_preprocessor",
21402-
":perfetto_src_trace_processor_perfetto_sql_preprocessor_unittests",
2140321371
":perfetto_src_trace_processor_perfetto_sql_syntaqlite_syntaqlite",
2140421372
":perfetto_src_trace_processor_perfetto_sql_tokenizer_tokenizer",
2140521373
":perfetto_src_trace_processor_perfetto_sql_tokenizer_unittests",
@@ -22435,8 +22403,6 @@ cc_library_static {
2243522403
":perfetto_src_trace_processor_perfetto_sql_intrinsics_types_types",
2243622404
":perfetto_src_trace_processor_perfetto_sql_parser_intrinsic_macro_expansion",
2243722405
":perfetto_src_trace_processor_perfetto_sql_parser_parser",
22438-
":perfetto_src_trace_processor_perfetto_sql_preprocessor_grammar",
22439-
":perfetto_src_trace_processor_perfetto_sql_preprocessor_preprocessor",
2244022406
":perfetto_src_trace_processor_perfetto_sql_syntaqlite_syntaqlite",
2244122407
":perfetto_src_trace_processor_perfetto_sql_tokenizer_tokenizer",
2244222408
":perfetto_src_trace_processor_plugins_ancestor_ancestor",
@@ -23071,8 +23037,6 @@ cc_binary_host {
2307123037
":perfetto_src_trace_processor_perfetto_sql_intrinsics_types_types",
2307223038
":perfetto_src_trace_processor_perfetto_sql_parser_intrinsic_macro_expansion",
2307323039
":perfetto_src_trace_processor_perfetto_sql_parser_parser",
23074-
":perfetto_src_trace_processor_perfetto_sql_preprocessor_grammar",
23075-
":perfetto_src_trace_processor_perfetto_sql_preprocessor_preprocessor",
2307623040
":perfetto_src_trace_processor_perfetto_sql_syntaqlite_syntaqlite",
2307723041
":perfetto_src_trace_processor_perfetto_sql_tokenizer_tokenizer",
2307823042
":perfetto_src_trace_processor_plugins_ancestor_ancestor",

BUILD

Lines changed: 0 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -440,8 +440,6 @@ perfetto_cc_library(
440440
":src_trace_processor_perfetto_sql_intrinsics_types_types",
441441
":src_trace_processor_perfetto_sql_parser_intrinsic_macro_expansion",
442442
":src_trace_processor_perfetto_sql_parser_parser",
443-
":src_trace_processor_perfetto_sql_preprocessor_grammar",
444-
":src_trace_processor_perfetto_sql_preprocessor_preprocessor",
445443
":src_trace_processor_perfetto_sql_syntaqlite_syntaqlite",
446444
":src_trace_processor_perfetto_sql_tokenizer_tokenizer",
447445
":src_trace_processor_plugins_ancestor_ancestor",
@@ -726,8 +724,6 @@ perfetto_cc_library(
726724
":src_trace_processor_perfetto_sql_intrinsics_types_types",
727725
":src_trace_processor_perfetto_sql_parser_intrinsic_macro_expansion",
728726
":src_trace_processor_perfetto_sql_parser_parser",
729-
":src_trace_processor_perfetto_sql_preprocessor_grammar",
730-
":src_trace_processor_perfetto_sql_preprocessor_preprocessor",
731727
":src_trace_processor_perfetto_sql_syntaqlite_syntaqlite",
732728
":src_trace_processor_perfetto_sql_tokenizer_tokenizer",
733729
":src_trace_processor_plugins_ancestor_ancestor",
@@ -3626,25 +3622,6 @@ perfetto_filegroup(
36263622
],
36273623
)
36283624

3629-
# GN target: //src/trace_processor/perfetto_sql/preprocessor:grammar
3630-
perfetto_filegroup(
3631-
name = "src_trace_processor_perfetto_sql_preprocessor_grammar",
3632-
srcs = [
3633-
"src/trace_processor/perfetto_sql/preprocessor/preprocessor_grammar.c",
3634-
"src/trace_processor/perfetto_sql/preprocessor/preprocessor_grammar.h",
3635-
"src/trace_processor/perfetto_sql/preprocessor/preprocessor_grammar_interface.h",
3636-
],
3637-
)
3638-
3639-
# GN target: //src/trace_processor/perfetto_sql/preprocessor:preprocessor
3640-
perfetto_filegroup(
3641-
name = "src_trace_processor_perfetto_sql_preprocessor_preprocessor",
3642-
srcs = [
3643-
"src/trace_processor/perfetto_sql/preprocessor/perfetto_sql_preprocessor.cc",
3644-
"src/trace_processor/perfetto_sql/preprocessor/perfetto_sql_preprocessor.h",
3645-
],
3646-
)
3647-
36483625
# GN target: //src/trace_processor/perfetto_sql/stdlib/android/auto:auto
36493626
perfetto_filegroup(
36503627
name = "src_trace_processor_perfetto_sql_stdlib_android_auto_auto",
@@ -4014,7 +3991,6 @@ perfetto_filegroup(
40143991
"src/trace_processor/perfetto_sql/stdlib/prelude/after_eof/cpu_scheduling.sql",
40153992
"src/trace_processor/perfetto_sql/stdlib/prelude/after_eof/events.sql",
40163993
"src/trace_processor/perfetto_sql/stdlib/prelude/after_eof/gpu.sql",
4017-
"src/trace_processor/perfetto_sql/stdlib/prelude/after_eof/indexes.sql",
40183994
"src/trace_processor/perfetto_sql/stdlib/prelude/after_eof/memory.sql",
40193995
"src/trace_processor/perfetto_sql/stdlib/prelude/after_eof/slices.sql",
40203996
"src/trace_processor/perfetto_sql/stdlib/prelude/after_eof/tracks.sql",
@@ -10031,8 +10007,6 @@ perfetto_cc_library(
1003110007
":src_trace_processor_perfetto_sql_intrinsics_types_types",
1003210008
":src_trace_processor_perfetto_sql_parser_intrinsic_macro_expansion",
1003310009
":src_trace_processor_perfetto_sql_parser_parser",
10034-
":src_trace_processor_perfetto_sql_preprocessor_grammar",
10035-
":src_trace_processor_perfetto_sql_preprocessor_preprocessor",
1003610010
":src_trace_processor_perfetto_sql_syntaqlite_syntaqlite",
1003710011
":src_trace_processor_perfetto_sql_tokenizer_tokenizer",
1003810012
":src_trace_processor_plugins_ancestor_ancestor",
@@ -10347,8 +10321,6 @@ perfetto_cc_binary(
1034710321
":src_trace_processor_perfetto_sql_intrinsics_types_types",
1034810322
":src_trace_processor_perfetto_sql_parser_intrinsic_macro_expansion",
1034910323
":src_trace_processor_perfetto_sql_parser_parser",
10350-
":src_trace_processor_perfetto_sql_preprocessor_grammar",
10351-
":src_trace_processor_perfetto_sql_preprocessor_preprocessor",
1035210324
":src_trace_processor_perfetto_sql_syntaqlite_syntaqlite",
1035310325
":src_trace_processor_perfetto_sql_tokenizer_tokenizer",
1035410326
":src_trace_processor_plugins_ancestor_ancestor",

src/trace_processor/BUILD.gn

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -427,7 +427,6 @@ perfetto_unittest_source_set("unittests") {
427427
deps += [
428428
"perfetto_sql/engine:unittests",
429429
"perfetto_sql/parser:unittests",
430-
"perfetto_sql/preprocessor:unittests",
431430
"perfetto_sql/tokenizer:unittests",
432431
"plugins/ancestor:unittests",
433432
"plugins/connected_flow:unittests",

src/trace_processor/core/dataframe/dataframe.cc

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -175,16 +175,21 @@ base::StatusOr<Index> Dataframe::BuildIndex(const uint32_t* columns_start,
175175
std::make_shared<std::vector<uint32_t>>(std::move(permutation)));
176176
}
177177

178-
void Dataframe::AddIndex(Index index) {
178+
Dataframe Dataframe::AddIndex(Index index) const {
179179
PERFETTO_CHECK(finalized_);
180-
indexes_.emplace_back(std::move(index));
181-
++non_column_mutations_;
180+
Dataframe result(*this);
181+
result.indexes_.emplace_back(std::move(index));
182+
++result.non_column_mutations_;
183+
return result;
182184
}
183185

184-
void Dataframe::RemoveIndexAt(uint32_t index) {
186+
Dataframe Dataframe::RemoveIndexAt(uint32_t pos) const {
185187
PERFETTO_CHECK(finalized_);
186-
indexes_.erase(indexes_.begin() + static_cast<std::ptrdiff_t>(index));
187-
++non_column_mutations_;
188+
Dataframe result(*this);
189+
result.indexes_.erase(result.indexes_.begin() +
190+
static_cast<std::ptrdiff_t>(pos));
191+
++result.non_column_mutations_;
192+
return result;
188193
}
189194

190195
void Dataframe::Finalize() {

src/trace_processor/core/dataframe/dataframe.h

Lines changed: 18 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -241,17 +241,27 @@ class Dataframe {
241241
base::StatusOr<Index> BuildIndex(const uint32_t* columns_start,
242242
const uint32_t* columns_end) const;
243243

244-
// Adds an index to the dataframe.
244+
// Returns a new dataframe identical to this one but with `index` appended
245+
// to its list of indexes.
245246
//
246-
// Note: indexes can only be added to a finalized dataframe; it's
247-
// undefined behavior to call this on a non-finalized dataframe.
248-
void AddIndex(Index index);
247+
// The original dataframe is unchanged. The returned dataframe shares
248+
// column storage and existing indexes with the original (via shared_ptr),
249+
// so the operation is cheap regardless of dataframe size.
250+
//
251+
// Note: indexes can only be added to a finalized dataframe; calling this
252+
// on a non-finalized dataframe will fail.
253+
[[nodiscard]] Dataframe AddIndex(Index index) const;
249254

250-
// Removes the index at the specified position.
255+
// Returns a new dataframe identical to this one but with the index at
256+
// `pos` removed.
257+
//
258+
// The original dataframe is unchanged. The returned dataframe shares
259+
// column storage and remaining indexes with the original (via shared_ptr),
260+
// so the operation is cheap regardless of dataframe size.
251261
//
252-
// Note: indexes can only be removed from a finalized dataframe;it's
253-
// undefined behavior to call this on a non-finalized dataframe.
254-
void RemoveIndexAt(uint32_t);
262+
// Note: indexes can only be removed from a finalized dataframe; calling
263+
// this on a non-finalized dataframe will fail.
264+
[[nodiscard]] Dataframe RemoveIndexAt(uint32_t pos) const;
255265

256266
// Marks the dataframe as "finalized": a finalized dataframe cannot have any
257267
// more rows added to it (note this is different from being immutable as

src/trace_processor/core/dataframe/dataframe_unittest.cc

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -936,7 +936,7 @@ TEST_F(DataframeBytecodeTest, PlanQuery_SingleColIndex_EqFilter_NonNullInt) {
936936

937937
std::vector<uint32_t> p_vec(100);
938938
std::iota(p_vec.begin(), p_vec.end(), 0);
939-
df.AddIndex(
939+
df = df.AddIndex(
940940
Index({0}, std::make_shared<std::vector<uint32_t>>(std::move(p_vec))));
941941

942942
std::vector<FilterSpec> filters = {{0, 0, Eq{}, std::nullopt}};
@@ -962,7 +962,7 @@ TEST_F(DataframeBytecodeTest, PlanQuery_SingleColIndex_InFilter_NonNullInt) {
962962

963963
std::vector<uint32_t> p_vec(100);
964964
std::iota(p_vec.begin(), p_vec.end(), 0);
965-
df.AddIndex(
965+
df = df.AddIndex(
966966
Index({0}, std::make_shared<std::vector<uint32_t>>(std::move(p_vec))));
967967

968968
std::vector<FilterSpec> filters = {{0, 0, In{}, std::nullopt}};
@@ -992,8 +992,8 @@ TEST_F(DataframeBytecodeTest,
992992
df.InsertUnchecked(kSpec,
993993
std::make_optional(string_pool_.InternString("apple")));
994994
df.Finalize();
995-
df.AddIndex(Index({0}, std::make_shared<std::vector<uint32_t>>(
996-
std::vector<uint32_t>{1, 0, 3, 2})));
995+
df = df.AddIndex(Index({0}, std::make_shared<std::vector<uint32_t>>(
996+
std::vector<uint32_t>{1, 0, 3, 2})));
997997

998998
std::vector<FilterSpec> filters = {{0, 0, Eq{}, std::nullopt}};
999999
std::string expected_bytecode = R"(
@@ -1021,8 +1021,8 @@ TEST_F(DataframeBytecodeTest, PlanQuery_SingleColIndex_EqFilter_DenseNullInt) {
10211021
df.InsertUnchecked(kSpec, std::make_optional(20u));
10221022
df.InsertUnchecked(kSpec, std::make_optional(10u));
10231023
df.Finalize();
1024-
df.AddIndex(Index({0}, std::make_shared<std::vector<uint32_t>>(
1025-
std::vector<uint32_t>{1, 0, 3, 2})));
1024+
df = df.AddIndex(Index({0}, std::make_shared<std::vector<uint32_t>>(
1025+
std::vector<uint32_t>{1, 0, 3, 2})));
10261026

10271027
std::vector<FilterSpec> filters = {{0, 0, Eq{}, std::nullopt}};
10281028
std::string expected_bytecode = R"(
@@ -1053,7 +1053,7 @@ TEST_F(DataframeBytecodeTest, PlanQuery_MultiColIndex_PrefixEqFilters) {
10531053

10541054
std::vector<uint32_t> p_vec(4);
10551055
std::iota(p_vec.begin(), p_vec.end(), 0);
1056-
df.AddIndex(
1056+
df = df.AddIndex(
10571057
Index({0, 1}, std::make_shared<std::vector<uint32_t>>(std::move(p_vec))));
10581058

10591059
std::vector<FilterSpec> filters = {
@@ -1714,8 +1714,8 @@ TEST(DataframeTest, TypedCursorInFilterWithIndex) {
17141714

17151715
// Build an index on track_id (column 1). Sorted order: 1,1,1,2,2,3
17161716
// Permutation: {0, 2, 5, 1, 4, 3}
1717-
df.AddIndex(Index({1}, std::make_shared<std::vector<uint32_t>>(
1718-
std::vector<uint32_t>{0, 2, 5, 1, 4, 3})));
1717+
df = df.AddIndex(Index({1}, std::make_shared<std::vector<uint32_t>>(
1718+
std::vector<uint32_t>{0, 2, 5, 1, 4, 3})));
17191719

17201720
// IN (1, 3) should return rows 0, 2, 5 (track_id=1) and 3 (track_id=3).
17211721
using FV = TypedCursor::FilterValue;
@@ -1749,8 +1749,8 @@ TEST(DataframeTest, TypedCursorInFilterWithIndexReverseOrder) {
17491749
df.InsertUnchecked(kSpec, std::monostate(), 1u);
17501750
df.Finalize();
17511751

1752-
df.AddIndex(Index({1}, std::make_shared<std::vector<uint32_t>>(
1753-
std::vector<uint32_t>{0, 2, 5, 1, 4, 3})));
1752+
df = df.AddIndex(Index({1}, std::make_shared<std::vector<uint32_t>>(
1753+
std::vector<uint32_t>{0, 2, 5, 1, 4, 3})));
17541754

17551755
// IN (3, 1) — reverse order relative to index sort.
17561756
using FV = TypedCursor::FilterValue;
@@ -1785,8 +1785,8 @@ TEST(DataframeTest, TypedCursorInFilterWithIndexDoesNotCorruptIndex) {
17851785
df.InsertUnchecked(kSpec, std::monostate(), 1u);
17861786
df.Finalize();
17871787

1788-
df.AddIndex(Index({1}, std::make_shared<std::vector<uint32_t>>(
1789-
std::vector<uint32_t>{0, 2, 5, 1, 4, 3})));
1788+
df = df.AddIndex(Index({1}, std::make_shared<std::vector<uint32_t>>(
1789+
std::vector<uint32_t>{0, 2, 5, 1, 4, 3})));
17901790

17911791
// First: execute an IN filter that uses the index.
17921792
{

src/trace_processor/core/plugin/registration.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,10 @@ struct WindowFunctionRegistration {
9292
struct PluginDataframe {
9393
core::dataframe::Dataframe* dataframe;
9494
std::string name;
95+
96+
// Indexes to attach to `dataframe` once it has been finalized. Each
97+
// entry is the list of column names that form one index.
98+
std::vector<std::vector<std::string>> indexes;
9599
};
96100

97101
namespace sqlite {

src/trace_processor/perfetto_sql/engine/BUILD.gn

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,6 @@ source_set("engine") {
4444
"../../util:sql_argument",
4545
"../../util:stdlib",
4646
"../parser",
47-
"../preprocessor",
4847
"../tokenizer",
4948
]
5049

0 commit comments

Comments
 (0)