public static void SendTimelineStats( DateTime timestamp, string evt, long duration, string s1, string s2, string s3, string s4, string s5, string s6, string s7, string s8, DateTime fromTimestamp, DateTime toTimestamp, long fromTicks, long toTicks, string vmName) { if (!RegistryManager.Instance.IsTimelineStats4Enabled) { return; } string timezone = TimeZone.CurrentTimeZone.DaylightName; string locale = Thread.CurrentThread.CurrentCulture.Name; new Thread((ThreadStart)(() => Stats.SendTimelineStats(TimelineStatsSender.UtcToUnixTimestampSecs(timestamp), TimelineStatsSender.sSequenceNumber++, evt, duration, s1, s2, s3, s4, s5, s6, s7, s8, timezone, locale, TimelineStatsSender.UtcToUnixTimestampSecs(fromTimestamp), TimelineStatsSender.UtcToUnixTimestampSecs(toTimestamp), fromTicks, toTicks, vmName))) { IsBackground = true }.Start(); }
public TimelineEvent(string evt, string s1, string s2, string s3) { this.Time = DateTime.UtcNow; this.Ticks = TimelineStatsSender.TicksInSeconds(); this.Event = evt; this.S1 = s1; this.S2 = s2; this.S3 = s3; }
public HDAgent() { string vmName = "Android"; SysTray.Init(vmName); Utils.AddMessagingSupport(out HDAgent.sOemWindowMapper); HDAgent.clipboardClient = new ClipboardMgr(); HDAgent.clipboardClient.Show(); HDAgent.CheckAnnouncementAsync(vmName); TimelineStatsSender.Init(vmName); }
public static void Init(string vmName) { if (SystemUtils.IsOSWinXP()) { Logger.Warning("TimelineStats: Not supported for WindowsXP"); } else { Logger.Info("TimelineStats: Initalizing: Staring thread."); new Thread((ThreadStart)(() => TimelineStatsSender.StatsSenderThread(vmName))) { IsBackground = true }.Start(); } }
private static long TicksInSeconds() { return(TimelineStatsSender.GetTickCount64() / 1000L); }
private static void StatsSenderThread(string vmName) { DateTime fromTimestamp1 = DateTime.UtcNow; long fromTicks1 = TimelineStatsSender.TicksInSeconds(); bool flag1 = false; bool flag2 = false; DateTime dateTime = DateTime.UtcNow; long toTicks = TimelineStatsSender.TicksInSeconds(); string str1 = ""; string str2 = ""; DateTime fromTimestamp2 = DateTime.UtcNow; long fromTicks2 = TimelineStatsSender.TicksInSeconds(); DateTime utcNow1 = DateTime.UtcNow; TimelineStatsSender.TicksInSeconds(); DateTime utcNow2 = DateTime.UtcNow; TimelineStatsSender.TicksInSeconds(); DateTime utcNow3 = DateTime.UtcNow; TimelineStatsSender.TicksInSeconds(); while (true) { try { TimelineStatsSender.sEventQueueMutex.WaitOne(); if (TimelineStatsSender.sEventQueue.Count <= 0) { TimelineStatsSender.sEventQueueMutex.ReleaseMutex(); long num1 = TimelineStatsSender.TicksInSeconds(); long num2 = toTicks + 600L; Logger.Debug("IsUserActive: {0} TimeInSec {1} LastUserActivity {2}", (object)flag2, (object)num1, (object)num2); if (flag2 && num1 > num2) { if (toTicks < fromTicks2) { Logger.Error("TimelineStats: user-idle: lastUserActivityTicks {0} < currentActivityStartTicks {1}", (object)toTicks, (object)fromTicks2); } else if (string.Compare(str1, "", true) != 0 && RegistryManager.Instance.IsTimelineStats4Enabled) { Logger.Info("TimelineStats: Sending stat for user-idle"); string s1; string s2; string s3; string s4; string s5; TimelineStatsSender.GetInteractionStatsFromEngine(out s1, out s2, out s3, out s4, out s5, vmName); TimelineStatsSender.SendTimelineStats(dateTime, "app-usage", toTicks - fromTicks2, str1, str2, "user-idle", s1, s2, s3, s4, s5, fromTimestamp2, dateTime, fromTicks2, toTicks, vmName); } flag2 = false; } Thread.Sleep(1000); } else { TimelineStatsSender.TimelineEvent timelineEvent = TimelineStatsSender.sEventQueue.Dequeue(); TimelineStatsSender.sEventQueueMutex.ReleaseMutex(); if (string.Compare(timelineEvent.Event, "frontend-launched", true) == 0) { flag1 = true; fromTimestamp1 = timelineEvent.Time; fromTicks1 = timelineEvent.Ticks; TimelineStatsSender.SendTimelineStats(timelineEvent.Time, timelineEvent.Event, 0L, "none", "none", "none", "none", "none", "none", "none", "none", timelineEvent.Time, timelineEvent.Time, 0L, 0L, vmName); } else if (string.Compare(timelineEvent.Event, "frontend-ready", true) == 0) { TimelineStatsSender.SendTimelineStats(timelineEvent.Time, timelineEvent.Event, timelineEvent.Ticks - fromTicks1, "none", "none", "none", "none", "none", "none", "none", "none", fromTimestamp1, timelineEvent.Time, fromTicks1, timelineEvent.Ticks, vmName); } else if (string.Compare(timelineEvent.Event, "frontend-closed", true) == 0) { if (flag2 & flag1) { flag2 = false; flag1 = false; if (timelineEvent.Ticks < fromTicks2) { Logger.Error("TimelineStats: frontend-closed: e.Ticks {0} < currentActivityStartTicks {1}", (object)timelineEvent.Ticks, (object)fromTicks2); } else if (string.Compare(str1, "", true) != 0 && RegistryManager.Instance.IsTimelineStats4Enabled) { string s1; string s2; string s3; string s4; string s5; TimelineStatsSender.GetInteractionStatsFromEngine(out s1, out s2, out s3, out s4, out s5, vmName); TimelineStatsSender.SendTimelineStats(timelineEvent.Time, "app-usage", timelineEvent.Ticks - fromTicks2, str1, str2, "frontend-closed", s1, s2, s3, s4, s5, fromTimestamp2, timelineEvent.Time, fromTicks2, timelineEvent.Ticks, vmName); } } TimelineStatsSender.SendTimelineStats(timelineEvent.Time, timelineEvent.Event, timelineEvent.Ticks - fromTicks1, "none", "none", "none", "none", "none", "none", "none", "none", fromTimestamp1, timelineEvent.Time, fromTicks1, timelineEvent.Ticks, vmName); flag1 = false; flag2 = false; str1 = ""; str2 = ""; } else if (string.Compare(timelineEvent.Event, "frontend-activated", true) == 0) { flag1 = true; flag2 = true; dateTime = timelineEvent.Time; toTicks = timelineEvent.Ticks; fromTimestamp2 = timelineEvent.Time; fromTicks2 = timelineEvent.Ticks; } else if (string.Compare(timelineEvent.Event, "frontend-deactivated", true) == 0) { if (flag2) { if (timelineEvent.Ticks < fromTicks2) { Logger.Error("TimelineStats: frontend-deactivated: e.Ticks {0} < currentActivityStartTicks {1}", (object)timelineEvent.Ticks, (object)fromTicks2); } else if (string.Compare(str1, "", true) != 0 && RegistryManager.Instance.IsTimelineStats4Enabled) { string s1; string s2; string s3; string s4; string s5; TimelineStatsSender.GetInteractionStatsFromEngine(out s1, out s2, out s3, out s4, out s5, vmName); TimelineStatsSender.SendTimelineStats(timelineEvent.Time, "app-usage", timelineEvent.Ticks - fromTicks2, str1, str2, "frontend-deactivated", s1, s2, s3, s4, s5, fromTimestamp2, timelineEvent.Time, fromTicks2, timelineEvent.Ticks, vmName); } } flag1 = false; flag2 = false; } else if (string.Compare(timelineEvent.Event, "user-active", true) == 0) { if (!flag2) { fromTimestamp2 = timelineEvent.Time; fromTicks2 = timelineEvent.Ticks; } flag1 = true; flag2 = true; dateTime = timelineEvent.Time; toTicks = timelineEvent.Ticks; } else if (string.Compare(timelineEvent.Event, "app-activity", true) == 0) { if (string.Compare(timelineEvent.S1, str1, true) == 0) { if (string.Compare(timelineEvent.S2, str2, true) == 0) { continue; } } if (flag2 & flag1 && string.Compare(str1, "", true) != 0) { if (timelineEvent.Ticks < fromTicks2) { Logger.Error("TimelineStats: app-activity: e.Ticks {0} < currentActivityStartTicks {1}", (object)timelineEvent.Ticks, (object)fromTicks2); } else if (RegistryManager.Instance.IsTimelineStats4Enabled) { string s1; string s2; string s3; string s4; string s5; TimelineStatsSender.GetInteractionStatsFromEngine(out s1, out s2, out s3, out s4, out s5, vmName); TimelineStatsSender.SendTimelineStats(timelineEvent.Time, "app-usage", timelineEvent.Ticks - fromTicks2, str1, str2, "new-app-activity", s1, s2, s3, s4, s5, fromTimestamp2, timelineEvent.Time, fromTicks2, timelineEvent.Ticks, vmName); } } str1 = timelineEvent.S1; str2 = timelineEvent.S2; fromTimestamp2 = timelineEvent.Time; fromTicks2 = timelineEvent.Ticks; } else if (string.Compare(timelineEvent.Event, "guest-status", true) == 0) { if (RegistryManager.Instance.IsTimelineStats4Enabled) { TimelineStatsSender.SendTimelineStats(timelineEvent.Time, timelineEvent.S1, timelineEvent.Ticks - fromTicks2, timelineEvent.S2, timelineEvent.S3, "", "", "", "", "", "", fromTimestamp2, timelineEvent.Time, fromTicks2, timelineEvent.Ticks, vmName); } } else if (string.Equals(timelineEvent.Event, "engine-boot", StringComparison.OrdinalIgnoreCase)) { TimelineStatsSender.SendTimelineStats(timelineEvent.Time, timelineEvent.S1, timelineEvent.Ticks - fromTicks2, timelineEvent.S2, timelineEvent.S3, "", "", "", "", "", "", fromTimestamp2, timelineEvent.Time, fromTicks2, timelineEvent.Ticks, vmName); } else { Logger.Error("Unknown event {0}", (object)timelineEvent.Event); } } } catch (Exception ex) { Logger.Warning("Exception in sending timeline stats: " + ex.ToString()); Thread.Sleep(1000); } } }