|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#pragma once
|
|
|
|
|
|
#include <memory>
|
|
|
#include <set>
|
|
|
#include <vector>
|
|
|
|
|
|
#include "Config.h"
|
|
|
#include "GenericTraceActivity.h"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
namespace libkineto {
|
|
|
|
|
|
struct CpuTraceBuffer;
|
|
|
|
|
|
#ifdef _MSC_VER
|
|
|
|
|
|
#undef ERROR
|
|
|
#endif
|
|
|
|
|
|
enum class TraceStatus {
|
|
|
READY,
|
|
|
WARMUP,
|
|
|
RECORDING,
|
|
|
PROCESSING,
|
|
|
ERROR,
|
|
|
WARNING,
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct DeviceInfo {
|
|
|
DeviceInfo(
|
|
|
int64_t id,
|
|
|
int64_t sortIndex,
|
|
|
const std::string& name,
|
|
|
const std::string& label)
|
|
|
: id(id), sortIndex(sortIndex), name(name), label(label) {}
|
|
|
int64_t id;
|
|
|
int64_t sortIndex;
|
|
|
const std::string name;
|
|
|
const std::string label;
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
struct ResourceInfo {
|
|
|
ResourceInfo(
|
|
|
int64_t deviceId,
|
|
|
int64_t id,
|
|
|
int64_t sortIndex,
|
|
|
const std::string& name)
|
|
|
: id(id), sortIndex(sortIndex), deviceId(deviceId), name(name) {}
|
|
|
int64_t id;
|
|
|
int64_t sortIndex;
|
|
|
int64_t deviceId;
|
|
|
|
|
|
const std::string name;
|
|
|
};
|
|
|
|
|
|
using getLinkedActivityCallback = std::function<const ITraceActivity*(int32_t)>;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class IActivityProfilerSession {
|
|
|
public:
|
|
|
virtual ~IActivityProfilerSession() {}
|
|
|
|
|
|
|
|
|
virtual void start() = 0;
|
|
|
|
|
|
|
|
|
virtual void stop() = 0;
|
|
|
|
|
|
TraceStatus status() {
|
|
|
return status_;
|
|
|
}
|
|
|
|
|
|
|
|
|
virtual std::vector<std::string> errors() = 0;
|
|
|
|
|
|
|
|
|
virtual void processTrace(ActivityLogger& logger) = 0;
|
|
|
|
|
|
virtual void processTrace(
|
|
|
ActivityLogger& logger,
|
|
|
getLinkedActivityCallback ,
|
|
|
int64_t ,
|
|
|
int64_t ) {
|
|
|
processTrace(logger);
|
|
|
}
|
|
|
|
|
|
|
|
|
virtual std::unique_ptr<DeviceInfo> getDeviceInfo() = 0;
|
|
|
|
|
|
|
|
|
virtual std::vector<ResourceInfo> getResourceInfos() = 0;
|
|
|
|
|
|
|
|
|
virtual std::unique_ptr<CpuTraceBuffer> getTraceBuffer() = 0;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
virtual void pushCorrelationId(uint64_t ) {}
|
|
|
virtual void popCorrelationId() {}
|
|
|
|
|
|
virtual void pushUserCorrelationId(uint64_t ) {}
|
|
|
virtual void popUserCorrelationId() {}
|
|
|
|
|
|
virtual std::string getDeviceProperties() {
|
|
|
return "";
|
|
|
}
|
|
|
|
|
|
virtual std::unordered_map<std::string, std::string> getMetadata() {
|
|
|
return {};
|
|
|
}
|
|
|
|
|
|
protected:
|
|
|
TraceStatus status_ = TraceStatus::READY;
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class IActivityProfiler {
|
|
|
public:
|
|
|
virtual ~IActivityProfiler() {}
|
|
|
|
|
|
|
|
|
virtual const std::string& name() const = 0;
|
|
|
|
|
|
|
|
|
virtual const std::set<ActivityType>& availableActivities() const = 0;
|
|
|
|
|
|
|
|
|
|
|
|
virtual std::unique_ptr<IActivityProfilerSession> configure(
|
|
|
const std::set<ActivityType>& activity_types,
|
|
|
const Config& config) = 0;
|
|
|
|
|
|
|
|
|
virtual std::unique_ptr<IActivityProfilerSession> configure(
|
|
|
int64_t ts_ms,
|
|
|
int64_t duration_ms,
|
|
|
const std::set<ActivityType>& activity_types,
|
|
|
const Config& config) = 0;
|
|
|
};
|
|
|
|
|
|
}
|
|
|
|