Browse Source

proper handling for joined probes timestamps;

asorotsky 1 year ago
parent
commit
50a138c06e
1 changed files with 8 additions and 1 deletions
  1. 8 1
      library/cpp/lwtrace/control.cpp

+ 8 - 1
library/cpp/lwtrace/control.cpp

@@ -73,11 +73,18 @@ TTraceDeserializeStatus TManager::HandleTraceResponse(
                 LWTRACK(DeserializationError, orbit, probe->Event.Name, probe->Event.GetProvider());
                 result.AddFailedEventName(v.GetName());
             } else {
+                // in case of fork join probes would be like "start 0 fork 1 ....... join 10 forked 5 forked 6"
                 ui64 timestamp = EpochNanosecondsToCycles(v.GetTimestampNanosec());
+                if (timestamp > prev) {
+                    timestamp = prev + (timestamp-prev)*timeScale + timeOffset;
+                } else {
+                    timestamp += timeOffset;
+                }
+
                 orbit.AddProbe(
                     probe,
                     params,
-                    prev + (timestamp-prev)*timeScale + timeOffset);
+                    timestamp);
                 probe->Event.Signature.DestroyParams(params);
                 prev = timestamp;
             }