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;
 }
Exemple #3
0
        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);
                }
            }
        }