@@ -40,6 +40,7 @@ enum Header {
4040 Header_DisplayLatency,
4141 Header_DisplayedTime,
4242 Header_AnimationError,
43+ Header_AnimationTime,
4344 Header_ClickToPhotonLatency,
4445 Header_AllInputToPhotonLatency,
4546
@@ -92,6 +93,7 @@ struct v2Metrics {
9293 std::optional<double > displayLatency;
9394 std::optional<double > displayedTime;
9495 std::optional<double > animationError;
96+ std::optional<double > animationTime;
9597 std::optional<double > clickToPhotonLatency;
9698 std::optional<double > AllInputToPhotonLatency;
9799 std::optional<double > InstrumentedLatency;
@@ -124,6 +126,7 @@ constexpr char const* GetHeaderString(Header h)
124126 case Header_DisplayLatency: return " DisplayLatency" ;
125127 case Header_DisplayedTime: return " DisplayedTime" ;
126128 case Header_AnimationError: return " AnimationError" ;
129+ case Header_AnimationTime: return " AnimationTime" ;
127130 case Header_ClickToPhotonLatency: return " ClickToPhotonLatency" ;
128131 case Header_AllInputToPhotonLatency: return " AllInputToPhotonLatency" ;
129132
@@ -328,7 +331,7 @@ class CsvParser {
328331 bool Open (std::wstring const & path, uint32_t processId);
329332 void Close ();
330333 bool VerifyBlobAgainstCsv (const std::string& processName, const unsigned int & processId,
331- PM_QUERY_ELEMENT (&queryElements)[21 ], pmapi::BlobContainer& blobs);
334+ PM_QUERY_ELEMENT (&queryElements)[22 ], pmapi::BlobContainer& blobs);
332335 bool ResetCsv ();
333336
334337private:
@@ -357,7 +360,7 @@ CsvParser::CsvParser()
357360{}
358361
359362bool CsvParser::VerifyBlobAgainstCsv (const std::string& processName, const unsigned int & processId,
360- PM_QUERY_ELEMENT (&queryElements)[21 ], pmapi::BlobContainer& blobs)
363+ PM_QUERY_ELEMENT (&queryElements)[22 ], pmapi::BlobContainer& blobs)
361364{
362365
363366 for (auto pBlob : blobs) {
@@ -381,9 +384,12 @@ bool CsvParser::VerifyBlobAgainstCsv(const std::string& processName, const unsig
381384 const auto displayLatency = *reinterpret_cast <const double *>(&pBlob[queryElements[15 ].dataOffset ]);
382385 const auto displayedTime = *reinterpret_cast <const double *>(&pBlob[queryElements[16 ].dataOffset ]);
383386 const auto animationError = *reinterpret_cast <const double *>(&pBlob[queryElements[17 ].dataOffset ]);
384- const auto allInputToPhotonLatency = *reinterpret_cast <const double *>(&pBlob[queryElements[18 ].dataOffset ]);
385- const auto clickToPhotonLatency = *reinterpret_cast <const double *>(&pBlob[queryElements[19 ].dataOffset ]);
386- const auto instrumentedLatency = *reinterpret_cast <const double *>(&pBlob[queryElements[20 ].dataOffset ]);
387+ const auto animationTime = *reinterpret_cast <const double *>(&pBlob[queryElements[18 ].dataOffset ]);
388+ const auto allInputToPhotonLatency = *reinterpret_cast <const double *>(&pBlob[queryElements[19 ].dataOffset ]);
389+ const auto clickToPhotonLatency = *reinterpret_cast <const double *>(&pBlob[queryElements[20 ].dataOffset ]);
390+ const auto instrumentedLatency = *reinterpret_cast <const double *>(&pBlob[queryElements[21 ].dataOffset ]);
391+
392+
387393
388394 // Read rows until we find one with the process we are interested in
389395 // or we are out of data.
@@ -504,6 +510,21 @@ bool CsvParser::VerifyBlobAgainstCsv(const std::string& processName, const unsig
504510 }
505511 }
506512 break ;
513+ case Header_AnimationTime:
514+ if (v2MetricRow_.animationTime .has_value ()) {
515+ columnsMatch = Validate (v2MetricRow_.animationTime .value (), animationTime);
516+ }
517+ else
518+ {
519+ if (std::isnan (animationTime)) {
520+ columnsMatch = true ;
521+ }
522+ else
523+ {
524+ columnsMatch = false ;
525+ }
526+ }
527+ break ;
507528 case Header_ClickToPhotonLatency:
508529 if (v2MetricRow_.clickToPhotonLatency .has_value ()) {
509530 columnsMatch = Validate (v2MetricRow_.clickToPhotonLatency .value (), clickToPhotonLatency);
@@ -661,6 +682,7 @@ bool CsvParser::Open(std::wstring const& path, uint32_t processId) {
661682 Header_DisplayLatency,
662683 Header_DisplayedTime,
663684 Header_AnimationError,
685+ Header_AnimationTime,
664686 Header_ClickToPhotonLatency,
665687 Header_AllInputToPhotonLatency,
666688 Header_InstrumentedLatency });
@@ -850,6 +872,19 @@ void CsvParser::ConvertToMetricDataType(const char* data, Header columnId)
850872 }
851873 }
852874 break ;
875+ case Header_AnimationTime:
876+ {
877+ if (strncmp (data, " NA" , 2 ) != 0 ) {
878+ double convertedData = 0 .;
879+ CharConvert<double > converter;
880+ converter.Convert (data, convertedData, columnId, line_);
881+ v2MetricRow_.animationTime = convertedData;
882+ }
883+ else {
884+ v2MetricRow_.animationTime .reset ();
885+ }
886+ }
887+ break ;
853888 case Header_ClickToPhotonLatency:
854889 {
855890 if (strncmp (data, " NA" , 2 ) != 0 ) {
0 commit comments