5namespace Stroika::Frameworks::SystemPerformance {
12 inline Instrument::Instrument (Instrument&& src) noexcept
13 : Instrument{move (src.fInstrumentName_), move (src.fCaptureRep_), move (src.fCapturedMeasurementTypes_),
14 move (src.fType2MeasurementTypes_), move (src.fObjectVariantMapper_)}
17 inline Instrument::Instrument (
const Instrument& src)
18 : Instrument{src.fInstrumentName_, src.fCaptureRep_->Clone (), src.fCapturedMeasurementTypes_, src.fType2MeasurementTypes_, src.fObjectVariantMapper_}
25 return fCaptureRep_->Capture ();
31 if (measurementTimeOut !=
nullptr) {
32 *measurementTimeOut = ms.fMeasuredAt;
34 for (
const auto& ii : ms.fMeasurements) {
38 return VariantValue{};
41 inline T Instrument::CaptureOneMeasurement (Range<TimePointSeconds>* measurementTimeOut)
45 return MeasurementAs<T> (CaptureOneMeasurement<VariantValue> (measurementTimeOut));
48 inline T Instrument::MeasurementAs (
const Measurement& m)
const
50 Debug::AssertExternallySynchronizedMutex::ReadContext readLock{fThisAssertExternallySynchronized_};
51 Require (fType2MeasurementTypes_.ContainsKey (typeid (decay_t<T>)));
52 Require (m.fType == fType2MeasurementTypes_[typeid (decay_t<T>)]);
53 return fObjectVariantMapper_.ToObject<T> (m.fValue);
56 optional<T> Instrument::MeasurementAs (
const MeasurementSet& m)
const
58 Debug::AssertExternallySynchronizedMutex::ReadContext readLock{fThisAssertExternallySynchronized_};
59 Require (fType2MeasurementTypes_.ContainsKey (typeid (decay_t<T>)));
60 MeasurementType mt = fType2MeasurementTypes_[
typeid (decay_t<T>)];
61 if (
auto i = m.fMeasurements.Find ([=] (
const Measurement& m) { return m.fType == mt; })) {
62 return fObjectVariantMapper_.ToObject<T> (i->fValue);
66 inline bool Instrument::operator== (
const Instrument& rhs)
const
68 Debug::AssertExternallySynchronizedMutex::ReadContext readLock{fThisAssertExternallySynchronized_};
69 return fInstrumentName_ == rhs.fInstrumentName_;
#define AssertNotReached()
Simple variant-value (case variant union) object, with (variant) basic types analogous to a value in ...
unique_lock< AssertExternallySynchronizedMutex > WriteContext
Instantiate AssertExternallySynchronizedMutex::WriteContext to designate an area of code where protec...