#include "src/trace_processor/perfetto_sql/intrinsics/table_functions/experimental_flamegraph.h"
#include <cstdint>
#include <memory>
#include <optional>
#include <string>
#include <utility>
#include <vector>
#include "perfetto/base/logging.h"
#include "perfetto/base/status.h"
#include "perfetto/ext/base/status_or.h"
#include "perfetto/ext/base/string_utils.h"
#include "perfetto/trace_processor/basic_types.h"
#include "src/trace_processor/containers/string_pool.h"
#include "src/trace_processor/db/column/types.h"
#include "src/trace_processor/db/table.h"
#include "src/trace_processor/importers/proto/heap_graph_tracker.h"
#include "src/trace_processor/perfetto_sql/intrinsics/table_functions/flamegraph_construction_algorithms.h"
#include "src/trace_processor/sqlite/sqlite_utils.h"
#include "src/trace_processor/storage/trace_storage.h"
#include "src/trace_processor/tables/profiler_tables_py.h"
#include "src/trace_processor/types/trace_processor_context.h"
#include "src/trace_processor/util/status_macros.h"
namespace perfetto::trace_processor {
namespace {
base::StatusOr<ExperimentalFlamegraph::ProfileType> ExtractProfileType(
const std::string& profile_name) { … }
base::StatusOr<int64_t> ParseTimeConstraintTs(const std::string& c,
uint32_t offset) { … }
base::StatusOr<TimeConstraints> ParseTimeConstraint(const std::string& c) { … }
base::StatusOr<std::vector<TimeConstraints>> ExtractTimeConstraints(
const SqlValue& value) { … }
base::StatusOr<ExperimentalFlamegraph::InputValues> GetFlamegraphInputValues(
const std::vector<SqlValue>& arguments) { … }
class Matcher { … };
enum class FocusedState { … };
ExperimentalFlamegraphTable;
std::vector<FocusedState> ComputeFocusedState(
const StringPool& pool,
const ExperimentalFlamegraphTable& table,
const Matcher& focus_matcher) { … }
struct CumulativeCounts { … };
std::unique_ptr<tables::ExperimentalFlamegraphTable> FocusTable(
TraceStorage* storage,
std::unique_ptr<ExperimentalFlamegraphTable> in,
const std::string& focus_str) { … }
}
ExperimentalFlamegraph::ExperimentalFlamegraph(TraceProcessorContext* context)
: … { … }
ExperimentalFlamegraph::~ExperimentalFlamegraph() = default;
base::StatusOr<std::unique_ptr<Table>> ExperimentalFlamegraph::ComputeTable(
const std::vector<SqlValue>& arguments) { … }
Table::Schema ExperimentalFlamegraph::CreateSchema() { … }
std::string ExperimentalFlamegraph::TableName() { … }
uint32_t ExperimentalFlamegraph::EstimateRowCount() { … }
}