예제 #1
0
        void UpdateTotals()
        {
            StepDiagram stepDiagram = Session.StepDiagram;

            if (stepDiagram == null)
            {
                lblKeyPresses.Text        = "0";
                lblMouseWheelSpins.Text   = "0";
                lblMouseClicks.Text       = "0 clicks";
                lblMouseMoveDistance.Text = "0px";
                //lblMouseSpeed.Text = "0px/s";
                lblTimeSpentMoving.Text       = "0s";
                lblForceTime.Text             = "0N-s";
                lblMillerComplexityScore.Text = "0";
            }
            else
            {
                lblKeyPresses.Text            = String.Format("{0:#,0.} keys", stepDiagram.TotalKeyPresses);
                lblMouseWheelSpins.Text       = String.Format("{0:#,0.} detents", stepDiagram.TotalMouseWheels);
                lblMouseClicks.Text           = String.Format("{0:#,0.} clicks", stepDiagram.TotalMouseClicks);
                lblMouseMoveDistance.Text     = String.Format("{0:#,0.#}px", stepDiagram.TotalMouseDistanceTravelled);
                lblTimeSpentMoving.Text       = String.Format("{0:s\\.ff}s", stepDiagram.TotalTimeSpentMoving);
                lblForceTime.Text             = String.Format("{0:#,0.##}NS", stepDiagram.TotalForceTime);
                lblMillerComplexityScore.Text = String.Format("{0:#,0.##} mci", stepDiagram.TotalMillerComplexityScore);
                /*lblMouseSpeed*/
                this.Title = String.Format("Step Diagrammer - Average Mouse Speed: {0:#,0.##}px/s", stepDiagram.AverageMouseSpeed);
            }
        }
        Rect AddActiveWindowBox(TaskActive task, bool isLast)
        {
            Rectangle   taskRect    = new Rectangle();
            StepDiagram stepDiagram = Session.StepDiagram;
            double      left        = ConversionHelper.MillisecondsToPixels(stepDiagram.GetOffset(task.Start).TotalMilliseconds);

            Canvas.SetLeft(taskRect, left);
            double width = ConversionHelper.MillisecondsToPixels(task.Duration.TotalMilliseconds);

            if (isLast && HookEngine.Listening)
            {
                width = cvsWindows.ActualWidth;
            }
            taskRect.Width  = width;
            taskRect.Height = cvsWindows.ActualHeight;
            Canvas.SetTop(taskRect, 0);

            taskRect.Fill = GetTaskFillBrush(task);
            FrameworkElement windowTooltip = GetWindowTooltip();

            windowTooltip.DataContext = task;
            taskRect.ToolTip          = windowTooltip;
            taskRect.ToolTipOpening  += taskRect_ToolTipOpening;
            taskRect.Tag = task;
            cvsWindows.Children.Add(taskRect);
            return(new Rect(left, 0, width, cvsWindows.ActualHeight));
        }
예제 #3
0
        void stepDiagramViewer_EventsDeleted(object sender, EventArgs e)
        {
            StepDiagram events = Session.StepDiagram;

            if (events != null)
            {
                events.ClearTotals();
            }
            UpdateTotals();
        }
예제 #4
0
 public static void Start()
 {
     if (StepDiagram != null)
     {
         throw new Exception("Unable to start twice. Already listening. Call HookEngine.Stop after calling HookEngine.Start");
     }
     activeWindowHandle  = Win.GetActiveWindow();
     StepDiagram         = new StepDiagram();
     cpuUsageCalculator  = new CpuUsageCalculator();
     currentProcessTimer = new Timer(CheckCpuUsage, null, 100, 100);
     HookEvents();
     StepDiagram.AddTaskActive(WindowsEvents.GetActiveWindowTitle(), Win.GetForegroundWindow());
 }
        void AddWindowActivations()
        {
            StepDiagram stepDiagram = Session.StepDiagram;

            if (stepDiagram == null)
            {
                return;
            }
            IList <TaskActive> tasks = stepDiagram.Tasks;

            for (int i = nextTaskIndexToAdd; i < tasks.Count; i++)
            {
                TaskActive task   = tasks[i];
                bool       isLast = i == tasks.Count - 1;
                Rect       rect   = AddActiveWindowBox(task, isLast);
                AddActiveWindowLabel(task, rect);
            }
            nextTaskIndexToAdd = tasks.Count;
        }
        public void Stop()
        {
            StepDiagram stepDiagram = Session.StepDiagram;

            if (stepDiagram != null)
            {
                stepDiagram.TightFit();
                IList <TaskActive> tasks = stepDiagram.Tasks;
                if (tasks != null)
                {
                    TaskActive lastTask = tasks.Last <TaskActive>();
                    if (lastTask != null)
                    {
                        lastTask.Stop = stepDiagram.StopTime;
                    }
                }
            }
            RefreshDataView();
        }
예제 #7
0
        public static StepDiagram Stop()
        {
            if (StepDiagram == null)
            {
                throw new Exception("Call to Stop() failed. Must call HookEngine.Start before calling HookEngine.Stop.");
            }

            lock (currentProcessTimerLocker)
            {
                currentProcessTimer.Change(Timeout.Infinite, Timeout.Infinite);
                currentProcessTimer.Dispose();
                currentProcessTimer = null;
            }

            cpuUsageCalculator = null;
            UnhookEvents();
            StepDiagram result = StepDiagram;

            result.PostProcess();
            StepDiagram = null;
            return(result);
        }
예제 #8
0
 internal static void SetStepDiagram(StepDiagram stepDiagram)
 {
     Session.stepDiagram = stepDiagram;
 }