From 7fc9abfc35b0a677bc1e96264042d2474879858b Mon Sep 17 00:00:00 2001 From: wuestholz Date: Mon, 13 Oct 2014 17:33:52 +0200 Subject: Minor changes --- Source/ExecutionEngine/ExecutionEngine.cs | 28 +++++++++++++++++++---- Source/ExecutionEngine/VerificationResultCache.cs | 27 ++++++++++++---------- 2 files changed, 38 insertions(+), 17 deletions(-) (limited to 'Source') diff --git a/Source/ExecutionEngine/ExecutionEngine.cs b/Source/ExecutionEngine/ExecutionEngine.cs index dfdab25c..86c7502c 100644 --- a/Source/ExecutionEngine/ExecutionEngine.cs +++ b/Source/ExecutionEngine/ExecutionEngine.cs @@ -398,10 +398,25 @@ namespace Microsoft.Boogie static int autoRequestIdCount; + static readonly string AutoRequestIdPrefix = "auto_request_id_"; + public static string FreshRequestId() { var id = Interlocked.Increment(ref autoRequestIdCount); - return string.Format("auto_request_id_{0}", id); + return AutoRequestIdPrefix + id; + } + + public static int AutoRequestId(string id) + { + if (id.StartsWith(AutoRequestIdPrefix)) + { + int result; + if (int.TryParse(id.Substring(AutoRequestIdPrefix.Length), out result)) + { + return result; + } + } + return -1; } public readonly static VerificationResultCache Cache = new VerificationResultCache(); @@ -420,6 +435,7 @@ namespace Microsoft.Boogie static DateTime FirstRequestStart; static readonly ConcurrentDictionary TimePerRequest = new ConcurrentDictionary(); + static readonly ConcurrentDictionary StatisticsPerRequest = new ConcurrentDictionary(); static readonly ConcurrentDictionary ImplIdToCancellationTokenSource = new ConcurrentDictionary(); @@ -1012,14 +1028,16 @@ namespace Microsoft.Boogie FirstRequestStart = start; } TimePerRequest[requestId] = end.Subtract(start); + StatisticsPerRequest[requestId] = stats; Console.Out.WriteLine(CachedVerificationResultInjector.Statistics.Output(true)); - Console.Out.WriteLine("Times per request as CSV:"); - Console.Out.WriteLine("Request ID, Time (ms)"); - foreach (var kv in TimePerRequest.OrderBy(kv => kv.Key)) + Console.Out.WriteLine("Statistics per request as CSV:"); + Console.Out.WriteLine("Request ID, Time (ms), Error, Inconclusive, Out of Memory, Timeout, Verified"); + foreach (var kv in TimePerRequest.OrderBy(kv => ExecutionEngine.AutoRequestId(kv.Key))) { - Console.Out.WriteLine("{0}, {1:F0}", kv.Key, kv.Value.TotalMilliseconds); + var s = StatisticsPerRequest[kv.Key]; + Console.Out.WriteLine("{0}, {1:F0}, {2}, {3}, {4}, {5}, {6}", kv.Key, kv.Value.TotalMilliseconds, s.ErrorCount, s.InconclusiveCount, s.OutOfMemoryCount, s.TimeoutCount, s.VerifiedCount); } Console.Out.WriteLine(""); diff --git a/Source/ExecutionEngine/VerificationResultCache.cs b/Source/ExecutionEngine/VerificationResultCache.cs index 215731b0..f1032485 100644 --- a/Source/ExecutionEngine/VerificationResultCache.cs +++ b/Source/ExecutionEngine/VerificationResultCache.cs @@ -37,24 +37,27 @@ namespace Microsoft.Boogie public string Output(bool printTime = false) { var wr = new StringWriter(); - wr.WriteLine("Cached verification result injector statistics as CSV:"); - if (printTime) - { - wr.WriteLine("Request ID, Time (ms), Rewritten Implementations, Low Priority Implementations, Medium Priority Implementations, High Priority Implementations, Skipped Implementations, Implementations"); - } - else - { - wr.WriteLine("Request ID, Rewritten Implementations, Low Priority Implementations, Medium Priority Implementations, High Priority Implementations, Skipped Implementations, Implementations"); - } - foreach (var kv in runs.OrderBy(kv => kv.Key)) + if (runs.Any()) { + wr.WriteLine("Cached verification result injector statistics as CSV:"); if (printTime) { - wr.WriteLine("{0}, {1:F0}, {2}, {3}, {4}, {5}, {6}, {7}", kv.Key, kv.Value.End.Subtract(kv.Value.Start).TotalMilliseconds, kv.Value.RewrittenImplementationCount, kv.Value.LowPriorityImplementationCount, kv.Value.MediumPriorityImplementationCount, kv.Value.HighPriorityImplementationCount, kv.Value.SkippedImplementationCount, kv.Value.ImplementationCount); + wr.WriteLine("Request ID, Time (ms), Rewritten Implementations, Low Priority Implementations, Medium Priority Implementations, High Priority Implementations, Skipped Implementations, Implementations"); } else { - wr.WriteLine("{0}, {1}, {2}, {3}, {4}, {5}, {6}", kv.Key, kv.Value.RewrittenImplementationCount, kv.Value.LowPriorityImplementationCount, kv.Value.MediumPriorityImplementationCount, kv.Value.HighPriorityImplementationCount, kv.Value.SkippedImplementationCount, kv.Value.ImplementationCount); + wr.WriteLine("Request ID, Rewritten Implementations, Low Priority Implementations, Medium Priority Implementations, High Priority Implementations, Skipped Implementations, Implementations"); + } + foreach (var kv in runs.OrderBy(kv => ExecutionEngine.AutoRequestId(kv.Key))) + { + if (printTime) + { + wr.WriteLine("{0}, {1:F0}, {2}, {3}, {4}, {5}, {6}, {7}", kv.Key, kv.Value.End.Subtract(kv.Value.Start).TotalMilliseconds, kv.Value.RewrittenImplementationCount, kv.Value.LowPriorityImplementationCount, kv.Value.MediumPriorityImplementationCount, kv.Value.HighPriorityImplementationCount, kv.Value.SkippedImplementationCount, kv.Value.ImplementationCount); + } + else + { + wr.WriteLine("{0}, {1}, {2}, {3}, {4}, {5}, {6}", kv.Key, kv.Value.RewrittenImplementationCount, kv.Value.LowPriorityImplementationCount, kv.Value.MediumPriorityImplementationCount, kv.Value.HighPriorityImplementationCount, kv.Value.SkippedImplementationCount, kv.Value.ImplementationCount); + } } } return wr.ToString(); -- cgit v1.2.3