#include "src/trace_processor/db/runtime_table.h"
#include <algorithm>
#include <cinttypes>
#include <cstddef>
#include <cstdint>
#include <limits>
#include <memory>
#include <optional>
#include <string>
#include <utility>
#include <variant>
#include <vector>
#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"
#include "src/trace_processor/db/column.h"
#include "src/trace_processor/db/column/data_layer.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/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"
#include "src/trace_processor/db/column_storage_overlay.h"
namespace perfetto::trace_processor {
namespace {
template <typename T, typename U>
T Fill(uint32_t leading_nulls, U value) { … }
bool IsPerfectlyRepresentableAsDouble(int64_t res) { … }
void CreateNonNullableIntsColumn(
uint32_t col_idx,
const char* col_name,
ColumnStorage<int64_t>* ints_storage,
std::vector<RefPtr<column::StorageLayer>>& storage_layers,
std::vector<RefPtr<column::OverlayLayer>>& overlay_layers,
std::vector<ColumnLegacy>& legacy_columns,
std::vector<ColumnStorageOverlay>& legacy_overlays) { … }
}
RuntimeTable::RuntimeTable(
StringPool* pool,
uint32_t row_count,
std::vector<ColumnLegacy> columns,
std::vector<ColumnStorageOverlay> overlays,
std::vector<RefPtr<column::StorageLayer>> storage_layers,
std::vector<RefPtr<column::OverlayLayer>> null_layers,
std::vector<RefPtr<column::OverlayLayer>> overlay_layers)
: … { … }
RuntimeTable::~RuntimeTable() = default;
RuntimeTable::Builder::Builder(StringPool* pool,
const std::vector<std::string>& col_names)
: … { … }
RuntimeTable::Builder::Builder(StringPool* pool,
const std::vector<std::string>& col_names,
const std::vector<BuilderColumnType>& col_types)
: … { … }
base::Status RuntimeTable::Builder::AddNull(uint32_t idx) { … }
base::Status RuntimeTable::Builder::AddInteger(uint32_t idx, int64_t res) { … }
base::Status RuntimeTable::Builder::AddFloat(uint32_t idx, double res) { … }
base::Status RuntimeTable::Builder::AddText(uint32_t idx, const char* ptr) { … }
base::Status RuntimeTable::Builder::AddIntegers(uint32_t idx,
int64_t res,
uint32_t count) { … }
base::Status RuntimeTable::Builder::AddFloats(uint32_t idx,
double res,
uint32_t count) { … }
base::Status RuntimeTable::Builder::AddTexts(uint32_t idx,
const char* ptr,
uint32_t count) { … }
base::Status RuntimeTable::Builder::AddNulls(uint32_t idx, uint32_t count) { … }
void RuntimeTable::Builder::AddNonNullIntegersUnchecked(
uint32_t idx,
const std::vector<int64_t>& res) { … }
base::StatusOr<std::unique_ptr<RuntimeTable>> RuntimeTable::Builder::Build(
uint32_t rows) && { … }
}