11#include <promeki/config.h>
12#if PROMEKI_ENABLE_PROAV
26PROMEKI_NAMESPACE_BEGIN
43class MediaPipelineStageStats {
46 using WindowedMap = ::promeki::Map<MediaIOCommand::Kind, WindowedStatsBundle>;
49 using List = ::promeki::List<MediaPipelineStageStats>;
51 MediaPipelineStageStats() =
default;
64 MediaIOStats cumulative;
88 WindowedStatsBundle &windowedBundle(MediaIOCommand::Kind kind);
91 bool isEmpty()
const {
return cumulative.size() == 0 && windowed.isEmpty(); }
97 bool operator==(
const MediaPipelineStageStats &other)
const;
98 bool operator!=(
const MediaPipelineStageStats &other)
const {
return !(*
this == other); }
101 JsonObject toJson()
const;
108 static MediaPipelineStageStats fromJson(
const JsonObject &obj, Error *err =
nullptr);
112DataStream &operator<<(DataStream &stream,
const MediaPipelineStageStats &s);
115DataStream &operator>>(DataStream &stream, MediaPipelineStageStats &s);
131class MediaPipelineStats {
132 PROMEKI_SHARED_FINAL(MediaPipelineStats)
135 using Ptr = SharedPtr<MediaPipelineStats>;
138 using List = ::promeki::List<MediaPipelineStats>;
141 using PtrList = ::promeki::List<Ptr>;
144 using StageList = MediaPipelineStageStats::List;
146 MediaPipelineStats() =
default;
153 const StageList &stages()
const {
return _stages; }
156 StageList &stages() {
return _stages; }
159 void addStage(
const MediaPipelineStageStats &s) { _stages.pushToBack(s); }
162 void addStage(MediaPipelineStageStats &&s) { _stages.pushToBack(std::move(s)); }
175 MediaPipelineStageStats stage(
const String &name)
const;
182 const MediaPipelineStageStats *findStage(
const String &name)
const;
185 MediaPipelineStageStats *findStage(
const String &name);
188 bool containsStage(
const String &name)
const {
return findStage(name) !=
nullptr; }
191 StringList stageNames()
const;
194 bool isEmpty()
const {
return _stages.isEmpty(); }
197 void clear() { _stages.clear(); }
212 StringList describe()
const;
215 JsonObject toJson()
const;
222 static MediaPipelineStats fromJson(
const JsonObject &obj, Error *err =
nullptr);
225 bool operator==(
const MediaPipelineStats &other)
const;
226 bool operator!=(
const MediaPipelineStats &other)
const {
return !(*
this == other); }
233DataStream &operator<<(DataStream &stream,
const MediaPipelineStats &s);
236DataStream &operator>>(DataStream &stream, MediaPipelineStats &s);