private static void StatsSenderThread(string vmName) { DateTime utcNow = DateTime.UtcNow; long fromTicks = TimelineStatsSender.TicksInSeconds(); while (true) { try { TimelineStatsSender.sEventQueueMutex.WaitOne(); if (TimelineStatsSender.sEventQueue.Count <= 0) { TimelineStatsSender.sEventQueueMutex.ReleaseMutex(); Thread.Sleep(1000); } else { TimelineStatsSender.TimelineEvent timelineEvent = TimelineStatsSender.sEventQueue.Dequeue(); TimelineStatsSender.sEventQueueMutex.ReleaseMutex(); TimelineStatsSender.SendTimelineStats(timelineEvent.Time, timelineEvent.S1, timelineEvent.Ticks - fromTicks, timelineEvent.S2, timelineEvent.S3, "", "", "", "", "", "", utcNow, timelineEvent.Time, fromTicks, timelineEvent.Ticks, vmName); } } catch (Exception ex) { Logger.Warning("Exception in sending timeline stats: " + ex.ToString()); Thread.Sleep(1000); } } }
public static void HandleEngineBootEvent(string eventName) { if (SystemUtils.IsOSWinXP() || !RegistryManager.Instance.IsTimelineStats4Enabled) { return; } Logger.Info("TimelineStats: UpdateEngineBootState: " + eventName); TimelineStatsSender.TimelineEvent timelineEvent = new TimelineStatsSender.TimelineEvent("engine-boot", eventName, string.Empty, string.Empty); TimelineStatsSender.sEventQueue.Enqueue(timelineEvent); }