table: cleanup dependencies in prep for new iterator
Change-Id: Ibef9256878fb26ab1eb15ff38453d18a005cde8c
diff --git a/python/generators/trace_processor_table/serialize.py b/python/generators/trace_processor_table/serialize.py
index fed0766..24c243b 100644
--- a/python/generators/trace_processor_table/serialize.py
+++ b/python/generators/trace_processor_table/serialize.py
@@ -175,17 +175,6 @@
}}
'''
- def iterator_setter(self) -> Optional[str]:
- if self.is_implicit_id or self.is_implicit_type:
- return None
- return f'''
- void set_{self.name}(ColumnType::{self.name}::non_optional_type v) {{
- auto* col = mutable_table_->mutable_{self.name}();
- col->SetAtIdx(
- iterator_.StorageIndexForColumn(col->index_in_table()), v);
- }}
- '''
-
def static_schema(self) -> Optional[str]:
if self.is_implicit_id or self.is_implicit_type:
return None
@@ -242,7 +231,7 @@
if self.is_ancestor:
return None
return f'''
- RefPtr<column::DataLayer> {self.name}_storage_layer_;
+ RefPtr<column::StorageLayer> {self.name}_storage_layer_;
'''
def null_layer(self) -> Optional[str]:
@@ -251,7 +240,7 @@
if not self.is_optional or self.is_string:
return f''
return f'''
- RefPtr<column::DataLayer> {self.name}_null_layer_;
+ RefPtr<column::OverlayLayer> {self.name}_null_layer_;
'''
def storage_layer_create(self) -> str:
@@ -502,13 +491,9 @@
'''
def iterator(self) -> str:
- iterator_setters = self.foreach_col(
- ColumnSerializer.iterator_setter, delimiter='\n')
return f'''
class Iterator : public ConstIterator {{
public:
- {iterator_setters}
-
RowReference row_reference() const {{
return RowReference(mutable_table_, CurrentRowNumber());
}}
@@ -586,7 +571,7 @@
{self.foreach_col(ColumnSerializer.static_assert_flags)}
{self.foreach_col(ColumnSerializer.extend_nullable_vector)}
- std::vector<RefPtr<column::DataLayer>> overlay_layers(OverlayCount(&parent) + 1);
+ std::vector<RefPtr<column::OverlayLayer>> overlay_layers(OverlayCount(&parent) + 1);
for (uint32_t i = 0; i < overlay_layers.size(); ++i) {{
if (overlays()[i].row_map().IsIndexVector()) {{
overlay_layers[i].reset(new column::ArrangementOverlay(
diff --git a/src/trace_processor/db/runtime_table.cc b/src/trace_processor/db/runtime_table.cc
index 102f003..9019d00 100644
--- a/src/trace_processor/db/runtime_table.cc
+++ b/src/trace_processor/db/runtime_table.cc
@@ -18,6 +18,7 @@
#include <algorithm>
#include <cinttypes>
+#include <cstddef>
#include <cstdint>
#include <limits>
#include <memory>
@@ -30,6 +31,7 @@
#include "perfetto/base/logging.h"
#include "perfetto/base/status.h"
#include "perfetto/ext/base/status_or.h"
+#include "perfetto/trace_processor/basic_types.h"
#include "perfetto/trace_processor/ref_counted.h"
#include "src/trace_processor/containers/bit_vector.h"
#include "src/trace_processor/containers/string_pool.h"
@@ -38,7 +40,9 @@
#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/overlay_layer.h"
#include "src/trace_processor/db/column/selector_overlay.h"
+#include "src/trace_processor/db/column/storage_layer.h"
#include "src/trace_processor/db/column/string_storage.h"
#include "src/trace_processor/db/column/types.h"
#include "src/trace_processor/db/column_storage.h"
@@ -65,8 +69,8 @@
uint32_t col_idx,
const char* col_name,
ColumnStorage<int64_t>* ints_storage,
- std::vector<RefPtr<column::DataLayer>>& storage_layers,
- std::vector<RefPtr<column::DataLayer>>& overlay_layers,
+ std::vector<RefPtr<column::StorageLayer>>& storage_layers,
+ std::vector<RefPtr<column::OverlayLayer>>& overlay_layers,
std::vector<ColumnLegacy>& legacy_columns,
std::vector<ColumnStorageOverlay>& legacy_overlays) {
const std::vector<int64_t>& values = ints_storage->vector();
@@ -137,9 +141,9 @@
uint32_t row_count,
std::vector<ColumnLegacy> columns,
std::vector<ColumnStorageOverlay> overlays,
- std::vector<RefPtr<column::DataLayer>> storage_layers,
- std::vector<RefPtr<column::DataLayer>> null_layers,
- std::vector<RefPtr<column::DataLayer>> overlay_layers)
+ std::vector<RefPtr<column::StorageLayer>> storage_layers,
+ std::vector<RefPtr<column::OverlayLayer>> null_layers,
+ std::vector<RefPtr<column::OverlayLayer>> overlay_layers)
: Table(pool, row_count, std::move(columns), std::move(overlays)) {
OnConstructionCompleted(std::move(storage_layers), std::move(null_layers),
std::move(overlay_layers));
@@ -367,8 +371,8 @@
base::StatusOr<std::unique_ptr<RuntimeTable>> RuntimeTable::Builder::Build(
uint32_t rows) && {
- std::vector<RefPtr<column::DataLayer>> storage_layers(col_names_.size() + 1);
- std::vector<RefPtr<column::DataLayer>> null_layers(col_names_.size() + 1);
+ std::vector<RefPtr<column::StorageLayer>> storage_layers(col_names_.size() + 1);
+ std::vector<RefPtr<column::OverlayLayer>> null_layers(col_names_.size() + 1);
std::vector<ColumnLegacy> legacy_columns;
std::vector<ColumnStorageOverlay> legacy_overlays;
@@ -380,7 +384,7 @@
// one overlay per column.
legacy_overlays.reserve(col_names_.size() + 1);
legacy_overlays.emplace_back(rows);
- std::vector<RefPtr<column::DataLayer>> overlay_layers(1);
+ std::vector<RefPtr<column::OverlayLayer>> overlay_layers(1);
for (uint32_t i = 0; i < col_names_.size(); ++i) {
auto* col = storage_[i].get();
diff --git a/src/trace_processor/db/runtime_table.h b/src/trace_processor/db/runtime_table.h
index 42fdb60..3dd2a78 100644
--- a/src/trace_processor/db/runtime_table.h
+++ b/src/trace_processor/db/runtime_table.h
@@ -29,7 +29,8 @@
#include "perfetto/trace_processor/ref_counted.h"
#include "src/trace_processor/containers/string_pool.h"
#include "src/trace_processor/db/column.h"
-#include "src/trace_processor/db/column/data_layer.h"
+#include "src/trace_processor/db/column/overlay_layer.h"
+#include "src/trace_processor/db/column/storage_layer.h"
#include "src/trace_processor/db/column_storage.h"
#include "src/trace_processor/db/column_storage_overlay.h"
#include "src/trace_processor/db/table.h"
@@ -90,13 +91,14 @@
std::vector<std::unique_ptr<VariantStorage>> storage_;
};
- explicit RuntimeTable(StringPool*,
- uint32_t row_count,
- std::vector<ColumnLegacy>,
- std::vector<ColumnStorageOverlay>,
- std::vector<RefPtr<column::DataLayer>> storage_layers,
- std::vector<RefPtr<column::DataLayer>> null_layers,
- std::vector<RefPtr<column::DataLayer>> overlay_layers);
+ explicit RuntimeTable(
+ StringPool*,
+ uint32_t row_count,
+ std::vector<ColumnLegacy>,
+ std::vector<ColumnStorageOverlay>,
+ std::vector<RefPtr<column::StorageLayer>> storage_layers,
+ std::vector<RefPtr<column::OverlayLayer>> null_layers,
+ std::vector<RefPtr<column::OverlayLayer>> overlay_layers);
~RuntimeTable() override;
RuntimeTable(RuntimeTable&&) = default;
diff --git a/src/trace_processor/db/table.cc b/src/trace_processor/db/table.cc
index 45625d8..75988fc 100644
--- a/src/trace_processor/db/table.cc
+++ b/src/trace_processor/db/table.cc
@@ -32,8 +32,10 @@
#include "src/trace_processor/db/column.h"
#include "src/trace_processor/db/column/arrangement_overlay.h"
#include "src/trace_processor/db/column/data_layer.h"
+#include "src/trace_processor/db/column/overlay_layer.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/storage_layer.h"
#include "src/trace_processor/db/column/types.h"
#include "src/trace_processor/db/column_storage_overlay.h"
#include "src/trace_processor/db/query_executor.h"
@@ -142,8 +144,7 @@
// Prework - use indexes if possible and decide which one.
std::vector<uint32_t> maybe_idx_cols;
- for (uint32_t i = 0; i < c_vec.size(); i++) {
- const Constraint& c = c_vec[i];
+ for (const auto& c : c_vec) {
// Id columns shouldn't use index.
if (columns()[c.col_idx].IsId()) {
break;
@@ -152,7 +153,6 @@
if (!IsSortingOp(c.op)) {
break;
}
-
maybe_idx_cols.push_back(c.col_idx);
// For the next col to be able to use index, all previous constraints have
@@ -178,24 +178,20 @@
for (uint32_t i = 0; i < maybe_idx_cols.size(); i++) {
const Constraint& c = c_vec[i];
-
Range r =
ChainForColumn(c.col_idx).OrderedIndexSearch(c.op, c.value, o_idxs);
o_idxs.data += r.start;
o_idxs.size = r.size();
}
+ c_vec.erase(c_vec.begin(),
+ c_vec.begin() + static_cast<uint32_t>(maybe_idx_cols.size()));
std::vector<uint32_t> res_vec(o_idxs.data, o_idxs.data + o_idxs.size);
if (res_vec.size() < kIndexVectorThreshold) {
std::sort(res_vec.begin(), res_vec.end());
- rm = RowMap(std::move(res_vec));
- } else {
- rm = RowMap(BitVector::FromUnsortedIndexVector(res_vec));
+ return RowMap(std::move(res_vec));
}
-
- c_vec.erase(c_vec.begin(),
- c_vec.begin() + static_cast<uint32_t>(maybe_idx_cols.size()));
- return rm;
+ return RowMap(BitVector::FromUnsortedIndexVector(res_vec));
}
RowMap Table::QueryToRowMap(const Query& q) const {
@@ -270,7 +266,8 @@
table.columns_[ob.front().col_idx].flags_ |= ColumnLegacy::Flag::kSorted;
}
- std::vector<RefPtr<column::DataLayer>> overlay_layers(table.overlays_.size());
+ std::vector<RefPtr<column::OverlayLayer>> overlay_layers(
+ table.overlays_.size());
for (uint32_t i = 0; i < table.overlays_.size(); ++i) {
if (table.overlays_[i].row_map().IsIndexVector()) {
overlay_layers[i].reset(new column::ArrangementOverlay(
@@ -290,9 +287,9 @@
}
void Table::OnConstructionCompleted(
- std::vector<RefPtr<column::DataLayer>> storage_layers,
- std::vector<RefPtr<column::DataLayer>> null_layers,
- std::vector<RefPtr<column::DataLayer>> overlay_layers) {
+ std::vector<RefPtr<column::StorageLayer>> storage_layers,
+ std::vector<RefPtr<column::OverlayLayer>> null_layers,
+ std::vector<RefPtr<column::OverlayLayer>> overlay_layers) {
for (ColumnLegacy& col : columns_) {
col.BindToTable(this, string_pool_);
}
diff --git a/src/trace_processor/db/table.h b/src/trace_processor/db/table.h
index 8482bcb..cc6b586 100644
--- a/src/trace_processor/db/table.h
+++ b/src/trace_processor/db/table.h
@@ -22,26 +22,26 @@
#include <memory>
#include <optional>
#include <string>
-#include <unordered_set>
#include <utility>
#include <vector>
#include "perfetto/base/logging.h"
#include "perfetto/base/status.h"
-#include "perfetto/ext/base/flat_hash_map.h"
-#include "perfetto/ext/base/status_or.h"
#include "perfetto/trace_processor/basic_types.h"
#include "perfetto/trace_processor/ref_counted.h"
#include "src/trace_processor/containers/row_map.h"
#include "src/trace_processor/containers/string_pool.h"
#include "src/trace_processor/db/column.h"
#include "src/trace_processor/db/column/data_layer.h"
+#include "src/trace_processor/db/column/overlay_layer.h"
+#include "src/trace_processor/db/column/storage_layer.h"
#include "src/trace_processor/db/column/types.h"
#include "src/trace_processor/db/column_storage_overlay.h"
namespace perfetto::trace_processor {
namespace {
+
using OrderedIndices = column::DataLayerChain::OrderedIndices;
OrderedIndices OrderedIndicesFromIndex(const std::vector<uint32_t>& index) {
@@ -50,6 +50,7 @@
o.size = static_cast<uint32_t>(index.size());
return o;
}
+
} // namespace
// Represents a table of data with named, strongly typed columns.
@@ -225,10 +226,10 @@
uint32_t row_count() const { return row_count_; }
StringPool* string_pool() const { return string_pool_; }
const std::vector<ColumnLegacy>& columns() const { return columns_; }
- const std::vector<RefPtr<column::DataLayer>>& storage_layers() const {
+ const std::vector<RefPtr<column::StorageLayer>>& storage_layers() const {
return storage_layers_;
}
- const std::vector<RefPtr<column::DataLayer>>& null_layers() const {
+ const std::vector<RefPtr<column::OverlayLayer>>& null_layers() const {
return null_layers_;
}
@@ -256,9 +257,9 @@
}
void OnConstructionCompleted(
- std::vector<RefPtr<column::DataLayer>> storage_layers,
- std::vector<RefPtr<column::DataLayer>> null_layers,
- std::vector<RefPtr<column::DataLayer>> overlay_layers);
+ std::vector<RefPtr<column::StorageLayer>> storage_layers,
+ std::vector<RefPtr<column::OverlayLayer>> null_layers,
+ std::vector<RefPtr<column::OverlayLayer>> overlay_layers);
ColumnLegacy* GetColumn(uint32_t index) { return &columns_[index]; }
@@ -289,9 +290,9 @@
std::vector<ColumnStorageOverlay> overlays_;
std::vector<ColumnLegacy> columns_;
- std::vector<RefPtr<column::DataLayer>> storage_layers_;
- std::vector<RefPtr<column::DataLayer>> null_layers_;
- std::vector<RefPtr<column::DataLayer>> overlay_layers_;
+ std::vector<RefPtr<column::StorageLayer>> storage_layers_;
+ std::vector<RefPtr<column::OverlayLayer>> null_layers_;
+ std::vector<RefPtr<column::OverlayLayer>> overlay_layers_;
mutable std::vector<std::unique_ptr<column::DataLayerChain>> chains_;
std::vector<ColumnIndex> indexes_;
diff --git a/src/trace_processor/tables/macros_internal.h b/src/trace_processor/tables/macros_internal.h
index 94293e7..5f69c6c 100644
--- a/src/trace_processor/tables/macros_internal.h
+++ b/src/trace_processor/tables/macros_internal.h
@@ -32,7 +32,9 @@
#include "src/trace_processor/containers/string_pool.h"
#include "src/trace_processor/db/column.h"
#include "src/trace_processor/db/column/data_layer.h"
+#include "src/trace_processor/db/column/overlay_layer.h"
#include "src/trace_processor/db/column/selector_overlay.h"
+#include "src/trace_processor/db/column/storage_layer.h"
#include "src/trace_processor/db/column_storage.h"
#include "src/trace_processor/db/column_storage_overlay.h"
#include "src/trace_processor/db/table.h"
@@ -129,9 +131,9 @@
}
PERFETTO_NO_INLINE void OnConstructionCompletedRegularConstructor(
- std::initializer_list<RefPtr<column::DataLayer>> storage_layers,
- std::initializer_list<RefPtr<column::DataLayer>> null_layers) {
- std::vector<RefPtr<column::DataLayer>> overlay_layers(
+ std::initializer_list<RefPtr<column::StorageLayer>> storage_layers,
+ std::initializer_list<RefPtr<column::OverlayLayer>> null_layers) {
+ std::vector<RefPtr<column::OverlayLayer>> overlay_layers(
OverlayCount(parent_) + 1);
for (uint32_t i = 0; i < overlay_layers.size() - 1; ++i) {
PERFETTO_CHECK(overlays()[i].row_map().IsBitVector());