From 068d1e129df7d1090be11716942c3387e89f5874 Mon Sep 17 00:00:00 2001 From: KevinMarquette Date: Mon, 6 Feb 2017 21:12:38 -0800 Subject: [PATCH 1/7] Corrected issue where some line numbers were set to 0 #6 --- Chronometer/Classes/MonitoredScript.ps1 | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/Chronometer/Classes/MonitoredScript.ps1 b/Chronometer/Classes/MonitoredScript.ps1 index e85acf6..0c7a761 100644 --- a/Chronometer/Classes/MonitoredScript.ps1 +++ b/Chronometer/Classes/MonitoredScript.ps1 @@ -11,12 +11,23 @@ class MonitoredScript MonitoredScript() { - $this.Line =New-Object 'System.Collections.Generic.List[ScriptLine]' + $this.Line = New-Object 'System.Collections.Generic.List[ScriptLine]' } [int] SetScript([string]$Path) { - Get-Content -Path $Path | %{ $this.Line.Add( [ScriptLine]@{text=$_;path=$path})} + $lineNumber = 0 + foreach($command in (Get-Content -Path $Path)) + { + $this.Line.Add( + [ScriptLine]@{ + Text = $command + Path = $path + LineNumber = $lineNumber + } + ) + $lineNumber++ + } $this.LinesOfCode = $this.Line.Count return $this.LinesOfCode } @@ -26,7 +37,6 @@ class MonitoredScript # Line numbers start at 1 but the array starts at 0 $lineNumber = $node.Breakpoint.Line - 1 $record = $this.Line[$lineNumber] - $record.LineNumber = $lineNumber if($this.lastNode) { From 337c4f457df1bea06535270450463e4553e35a7e Mon Sep 17 00:00:00 2001 From: KevinMarquette Date: Mon, 6 Feb 2017 21:43:43 -0800 Subject: [PATCH 2/7] Added per-line execution metadata --- Chronometer/Classes/MonitoredScript.ps1 | 4 ++++ Chronometer/Classes/ScriptLine.ps1 | 22 ++++++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/Chronometer/Classes/MonitoredScript.ps1 b/Chronometer/Classes/MonitoredScript.ps1 index 0c7a761..4e9cf43 100644 --- a/Chronometer/Classes/MonitoredScript.ps1 +++ b/Chronometer/Classes/MonitoredScript.ps1 @@ -38,6 +38,9 @@ class MonitoredScript $lineNumber = $node.Breakpoint.Line - 1 $record = $this.Line[$lineNumber] + $record.AddExecution($node) + + # Calclate the delta in time if($this.lastNode) { $duration = $node.ElapsedMilliseconds - $this.lastNode.ElapsedMilliseconds @@ -47,6 +50,7 @@ class MonitoredScript $duration = $node.ElapsedMilliseconds } + # The delta is how long the last command ran if($this.lastRecord) { $this.lastRecord.AddExecutionTime($duration) diff --git a/Chronometer/Classes/ScriptLine.ps1 b/Chronometer/Classes/ScriptLine.ps1 index 2fd3ece..277db44 100644 --- a/Chronometer/Classes/ScriptLine.ps1 +++ b/Chronometer/Classes/ScriptLine.ps1 @@ -9,10 +9,17 @@ class ScriptLine [int] $LineNumber [string] $Path [string] $Text + [System.Collections.ArrayList]$Executions + hidden [hashtable]$LastNode = $null + ScriptLine() + { + $Executions = New-Object 'System.Collections.ArrayList' + } [void]AddExecutionTime([float]$Milliseconds) { + $this.LastNode.Milliseconds = $Milliseconds $this.Milliseconds += $Milliseconds $this.HitCount += 1 $this.Average = $this.Milliseconds / $this.HitCount @@ -28,6 +35,21 @@ class ScriptLine } } + [void] AddExecution([hashtable]$node) + { + $this.Executions.Add($node) + $this.LastNode = $node + } + + [void] Clear() + { + $this.Milliseconds = 0 + $this.HitCount = 0 + $this.Average = 0 + $this.LastNode = $null + $this.Executions.Clear() + } + [string] ToString() { $values = @( From ce34bbf7449d740bcd42963b33bebb54529cede0 Mon Sep 17 00:00:00 2001 From: KevinMarquette Date: Mon, 6 Feb 2017 22:25:48 -0800 Subject: [PATCH 3/7] Added constructor to ScriptLine --- Chronometer/Classes/MonitoredScript.ps1 | 12 +++--------- Chronometer/Classes/ScriptLine.ps1 | 13 +++++++++++-- 2 files changed, 14 insertions(+), 11 deletions(-) diff --git a/Chronometer/Classes/MonitoredScript.ps1 b/Chronometer/Classes/MonitoredScript.ps1 index 4e9cf43..81dd38e 100644 --- a/Chronometer/Classes/MonitoredScript.ps1 +++ b/Chronometer/Classes/MonitoredScript.ps1 @@ -17,22 +17,16 @@ class MonitoredScript [int] SetScript([string]$Path) { $lineNumber = 0 - foreach($command in (Get-Content -Path $Path)) + foreach($command in ( Get-Content -Path $Path )) { - $this.Line.Add( - [ScriptLine]@{ - Text = $command - Path = $path - LineNumber = $lineNumber - } - ) + $this.Line.Add( [ScriptLine]::New($command, $path, $lineNumber) ) $lineNumber++ } $this.LinesOfCode = $this.Line.Count return $this.LinesOfCode } - [void] AddExecution([hashtable]$node) + [void] AddExecution( [hashtable]$node ) { # Line numbers start at 1 but the array starts at 0 $lineNumber = $node.Breakpoint.Line - 1 diff --git a/Chronometer/Classes/ScriptLine.ps1 b/Chronometer/Classes/ScriptLine.ps1 index 277db44..8464077 100644 --- a/Chronometer/Classes/ScriptLine.ps1 +++ b/Chronometer/Classes/ScriptLine.ps1 @@ -10,13 +10,22 @@ class ScriptLine [string] $Path [string] $Text [System.Collections.ArrayList]$Executions - hidden [hashtable]$LastNode = $null + hidden [hashtable]$LastNode = @{} ScriptLine() { - $Executions = New-Object 'System.Collections.ArrayList' + $this.Executions = New-Object 'System.Collections.ArrayList' } + ScriptLine($Command, $Path, $LineNumber) + { + $this.Executions = New-Object 'System.Collections.ArrayList' + $this.Text = $Command + $this.Path = $Path + $this.LineNumber = $LineNumber + } + + [void]AddExecutionTime([float]$Milliseconds) { $this.LastNode.Milliseconds = $Milliseconds From cc25b901fd568b1ab99b29816a6c266015e33a31 Mon Sep 17 00:00:00 2001 From: KevinMarquette Date: Mon, 6 Feb 2017 22:57:40 -0800 Subject: [PATCH 4/7] Converted timekeeping to timespan from miliseconds --- Chronometer/Classes/MonitoredScript.ps1 | 6 +++--- Chronometer/Classes/ScriptLine.ps1 | 26 ++++++++++++------------- Chronometer/Classes/ScriptProfiler.ps1 | 2 +- 3 files changed, 17 insertions(+), 17 deletions(-) diff --git a/Chronometer/Classes/MonitoredScript.ps1 b/Chronometer/Classes/MonitoredScript.ps1 index 81dd38e..58d4e46 100644 --- a/Chronometer/Classes/MonitoredScript.ps1 +++ b/Chronometer/Classes/MonitoredScript.ps1 @@ -6,7 +6,7 @@ class MonitoredScript hidden $lastNode = $null hidden $lastRecord = $null - [float]$ExecutionTime = 0 + [timespan]$ExecutionTime = 0 [int]$LinesOfCode = 0 MonitoredScript() @@ -37,11 +37,11 @@ class MonitoredScript # Calclate the delta in time if($this.lastNode) { - $duration = $node.ElapsedMilliseconds - $this.lastNode.ElapsedMilliseconds + $duration = $node.Elapsed - $this.lastNode.Elapsed } else { - $duration = $node.ElapsedMilliseconds + $duration = $node.Elapsed } # The delta is how long the last command ran diff --git a/Chronometer/Classes/ScriptLine.ps1 b/Chronometer/Classes/ScriptLine.ps1 index 8464077..dab7635 100644 --- a/Chronometer/Classes/ScriptLine.ps1 +++ b/Chronometer/Classes/ScriptLine.ps1 @@ -1,10 +1,10 @@ class ScriptLine { - [float] $Milliseconds = 0 + [TimeSpan] $Duration = 0 [float] $HitCount = 0 - [float] $Min = [float]::MaxValue - [float] $Max = [float]::MinValue + [TimeSpan] $Min = [TimeSpan]::MaxValue + [TimeSpan] $Max = [TimeSpan]::MinValue [float] $Average = 0 [int] $LineNumber [string] $Path @@ -26,21 +26,21 @@ class ScriptLine } - [void]AddExecutionTime([float]$Milliseconds) + [void]AddExecutionTime([timespan]$Duration) { - $this.LastNode.Milliseconds = $Milliseconds - $this.Milliseconds += $Milliseconds + $this.LastNode.Duration = $Duration + $this.Duration += $Duration $this.HitCount += 1 - $this.Average = $this.Milliseconds / $this.HitCount + $this.Average = $this.Duration.Milliseconds / $this.HitCount - if($Milliseconds -lt $this.Min) + if($Duration -lt $this.Min) { - $this.Min = $Milliseconds + $this.Min = $Duration } - if($Milliseconds -gt $this.Max) + if($Duration -gt $this.Max) { - $this.Max = $Milliseconds + $this.Max = $Duration } } @@ -52,7 +52,7 @@ class ScriptLine [void] Clear() { - $this.Milliseconds = 0 + $this.Duration = [timespan]::Zero $this.HitCount = 0 $this.Average = 0 $this.LastNode = $null @@ -62,7 +62,7 @@ class ScriptLine [string] ToString() { $values = @( - $this.Milliseconds + $this.Duration.Milliseconds $this.HitCount $this.Average $this.LineNumber diff --git a/Chronometer/Classes/ScriptProfiler.ps1 b/Chronometer/Classes/ScriptProfiler.ps1 index 7f6821e..5f600fc 100644 --- a/Chronometer/Classes/ScriptProfiler.ps1 +++ b/Chronometer/Classes/ScriptProfiler.ps1 @@ -13,7 +13,7 @@ class ScriptProfiler { { [ScriptProfiler]::Queue.Enqueue(@{ Breakpoint = $InputObject - ElapsedMilliseconds = [ScriptProfiler]::Timer.ElapsedMilliseconds + Elapsed = [ScriptProfiler]::Timer.Elapsed }) } } From a4ed61abea3f8584d8886deb56f493b654a5b98a Mon Sep 17 00:00:00 2001 From: KevinMarquette Date: Mon, 6 Feb 2017 23:12:46 -0800 Subject: [PATCH 5/7] Resolved null value issues with timespans --- Chronometer/Classes/MonitoredScript.ps1 | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/Chronometer/Classes/MonitoredScript.ps1 b/Chronometer/Classes/MonitoredScript.ps1 index 58d4e46..b793e9a 100644 --- a/Chronometer/Classes/MonitoredScript.ps1 +++ b/Chronometer/Classes/MonitoredScript.ps1 @@ -6,7 +6,7 @@ class MonitoredScript hidden $lastNode = $null hidden $lastRecord = $null - [timespan]$ExecutionTime = 0 + [timespan]$ExecutionTime = [timespan]::Zero [int]$LinesOfCode = 0 MonitoredScript() @@ -58,7 +58,7 @@ class MonitoredScript [void] PostProcessing() { $this.lastNode = $null - $this.ExecutionTime = 0 + $this.ExecutionTime = [TimeSpan]::Zero foreach($node in $this.line) { $command = $node.text -replace '\s','' @@ -70,12 +70,12 @@ class MonitoredScript { $node.HitCount = $this.lastNode.HitCount } - $node.Milliseconds = 0 + $node.Duration = [TimeSpan]::Zero $node.Average = 0 $this.lastNode = $node } '^{$|^{#}' { - $node.Milliseconds = 0 + $node.Duration = [TimeSpan]::Zero $node.Average = 0 $this.lastNode = $node } @@ -83,7 +83,7 @@ class MonitoredScript $this.lastNode = $node } } - $this.ExecutionTime += $node.Milliseconds + $this.ExecutionTime += $node.Duration } } } \ No newline at end of file From 7100594ebb940a4b942bdfbb01398c615a0ca126 Mon Sep 17 00:00:00 2001 From: KevinMarquette Date: Mon, 6 Feb 2017 23:13:54 -0800 Subject: [PATCH 6/7] Code formatting --- Chronometer/Classes/MonitoredScript.ps1 | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/Chronometer/Classes/MonitoredScript.ps1 b/Chronometer/Classes/MonitoredScript.ps1 index b793e9a..7228073 100644 --- a/Chronometer/Classes/MonitoredScript.ps1 +++ b/Chronometer/Classes/MonitoredScript.ps1 @@ -65,7 +65,8 @@ class MonitoredScript switch -Regex ($command) { - '^}$|^}#|^$' { + '^}$|^}#|^$' + { if($node.HitCount -eq 0) { $node.HitCount = $this.lastNode.HitCount @@ -74,12 +75,14 @@ class MonitoredScript $node.Average = 0 $this.lastNode = $node } - '^{$|^{#}' { + '^{$|^{#}' + { $node.Duration = [TimeSpan]::Zero $node.Average = 0 $this.lastNode = $node } - default { + default + { $this.lastNode = $node } } From 361be0876f47e4b3d3d2bac951693eb118b28c94 Mon Sep 17 00:00:00 2001 From: KevinMarquette Date: Mon, 6 Feb 2017 23:24:14 -0800 Subject: [PATCH 7/7] Updated version to reflect the changes --- Chronometer/chronometer.psd1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Chronometer/chronometer.psd1 b/Chronometer/chronometer.psd1 index 7993982..4a71a60 100644 --- a/Chronometer/chronometer.psd1 +++ b/Chronometer/chronometer.psd1 @@ -8,7 +8,7 @@ RootModule = 'chronometer.psm1' # Version number of this module. -ModuleVersion = '0.4.1' +ModuleVersion = '0.5.0' # ID used to uniquely identify this module GUID = 'f3719c3c-008a-4b25-b94d-fc9f587f62dd'