Skip to content
This repository has been archived by the owner on Jan 15, 2021. It is now read-only.

Commit

Permalink
Update system so that TimeSpans are used instead of doubles
Browse files Browse the repository at this point in the history
  • Loading branch information
avanderhoorn committed Dec 28, 2012
1 parent 0da12bd commit 9629114
Show file tree
Hide file tree
Showing 24 changed files with 160 additions and 53 deletions.
6 changes: 3 additions & 3 deletions source/Glimpse.AspNet/Model/RouteModel.cs
@@ -1,5 +1,5 @@
using System.Collections.Generic; using System;
using System.Web.Routing; using System.Collections.Generic;


namespace Glimpse.AspNet.Model namespace Glimpse.AspNet.Model
{ {
Expand All @@ -17,6 +17,6 @@ public class RouteModel


public IDictionary<string, object> DataTokens { get; set; } public IDictionary<string, object> DataTokens { get; set; }


public double Duration { get; set; } public TimeSpan Duration { get; set; }
} }
} }
6 changes: 3 additions & 3 deletions source/Glimpse.AspNet/Model/TimelineEventModel.cs
Expand Up @@ -16,17 +16,17 @@ public TimelineEventModel()


public DateTime StartTime { get; set; } public DateTime StartTime { get; set; }


public double StartPoint { get; set; } public TimeSpan StartPoint { get; set; }


public double Duration { get; set; } public TimeSpan Duration { get; set; }


public string Title { get; set; } public string Title { get; set; }


public string SubText { get; set; } public string SubText { get; set; }


public IDictionary<string, object> Details { get; set; } public IDictionary<string, object> Details { get; set; }


public double EndPoint public TimeSpan EndPoint
{ {
get { return StartPoint + Duration; } get { return StartPoint + Duration; }
} }
Expand Down
5 changes: 3 additions & 2 deletions source/Glimpse.AspNet/Model/TimelineModel.cs
@@ -1,12 +1,13 @@
using System.Collections.Generic; using System;
using System.Collections.Generic;
using System.Linq; using System.Linq;
using System.Text; using System.Text;


namespace Glimpse.AspNet.Model namespace Glimpse.AspNet.Model
{ {
public class TimelineModel public class TimelineModel
{ {
public double Duration { get; set; } public TimeSpan Duration { get; set; }


public IDictionary<string, TimelineCategoryModel> Category { get; set; } public IDictionary<string, TimelineCategoryModel> Category { get; set; }


Expand Down
Expand Up @@ -14,7 +14,7 @@ public override object Convert(List<RouteModel> routes)
var section = new TabSection("Area", "Url", "Data", "Constraints", "DataTokens", "Duration"); var section = new TabSection("Area", "Url", "Data", "Constraints", "DataTokens", "Duration");
foreach (var item in routes) foreach (var item in routes)
{ {
section.AddRow().Column(item.Area).Column(item.Url).Column(GetRouteData(item.RouteData)).Column(GetConstraintData(item.Constraints)).Column(GetDataTokens(item.DataTokens)).Column(Math.Round(item.Duration, 2)).SelectedIf(item.IsMatch); section.AddRow().Column(item.Area).Column(item.Url).Column(GetRouteData(item.RouteData)).Column(GetConstraintData(item.Constraints)).Column(GetDataTokens(item.DataTokens)).Column(item.Duration).SelectedIf(item.IsMatch);
} }


return section.Build(); return section.Build();
Expand Down
Expand Up @@ -8,7 +8,7 @@ public class TimelineEventModelConverter : SerializationConverter<TimelineEventM
{ {
public override object Convert(TimelineEventModel obj) public override object Convert(TimelineEventModel obj)
{ {
return new { obj.Title, obj.Category, obj.SubText, obj.StartTime, obj.Details, Duration = Math.Round(obj.Duration, 2), StartPoint = Math.Round(obj.StartPoint, 2) }; return new { obj.Title, obj.Category, obj.SubText, obj.StartTime, obj.Details, obj.Duration, obj.StartPoint };
} }
} }
} }
5 changes: 3 additions & 2 deletions source/Glimpse.AspNet/Tab/Timeline.cs
@@ -1,4 +1,5 @@
using System.Collections.Generic; using System;
using System.Collections.Generic;
using System.Linq; using System.Linq;
using Glimpse.AspNet.Extensibility; using Glimpse.AspNet.Extensibility;
using Glimpse.AspNet.Model; using Glimpse.AspNet.Model;
Expand Down Expand Up @@ -56,7 +57,7 @@ public override object GetData(ITabContext context)


if (viewRenderMessages != null) if (viewRenderMessages != null)
{ {
var maxEndPoint = 0.0; var maxEndPoint = TimeSpan.Zero;
var events = new List<TimelineEventModel>(); var events = new List<TimelineEventModel>();
foreach (var viewRenderMessage in viewRenderMessages.OrderBy(x => x.Offset)) foreach (var viewRenderMessage in viewRenderMessages.OrderBy(x => x.Offset))
{ {
Expand Down
22 changes: 11 additions & 11 deletions source/Glimpse.Core/Extensibility/ExecutionTimer.cs
Expand Up @@ -22,8 +22,8 @@ public TimerResult Point()
{ {
var result = new TimerResult(); var result = new TimerResult();
result.StartTime = DateTime.Now; result.StartTime = DateTime.Now;
result.Offset = Stopwatch.ElapsedTicks.ConvertNanosecondsToMilliseconds(); result.Offset = Stopwatch.Elapsed;
result.Duration = 0; result.Duration = TimeSpan.Zero;


return result; return result;
} }
Expand All @@ -32,9 +32,9 @@ public TimerResult<T> Time<T>(Func<T> func)
{ {
var result = new TimerResult<T>(); var result = new TimerResult<T>();
result.StartTime = DateTime.Now; result.StartTime = DateTime.Now;
result.Offset = Stopwatch.ElapsedTicks.ConvertNanosecondsToMilliseconds(); result.Offset = Stopwatch.Elapsed;
result.Result = func(); result.Result = func();
result.Duration = Stopwatch.ElapsedTicks.ConvertNanosecondsToMilliseconds() - result.Offset; result.Duration = Stopwatch.Elapsed - result.Offset;


return result; return result;
} }
Expand All @@ -43,24 +43,24 @@ public TimerResult Time(Action action)
{ {
var result = new TimerResult(); var result = new TimerResult();
result.StartTime = DateTime.Now; result.StartTime = DateTime.Now;
result.Offset = Stopwatch.ElapsedTicks.ConvertNanosecondsToMilliseconds(); result.Offset = Stopwatch.Elapsed;
action(); action();
result.Duration = Stopwatch.ElapsedTicks.ConvertNanosecondsToMilliseconds() - result.Offset; result.Duration = Stopwatch.Elapsed - result.Offset;


return result; return result;
} }


public double Start() public TimeSpan Start()
{ {
return Stopwatch.ElapsedMilliseconds.ConvertNanosecondsToMilliseconds(); return Stopwatch.Elapsed;
} }


public TimerResult Stop(double offset) public TimerResult Stop(TimeSpan offset)
{ {
var result = new TimerResult(); var result = new TimerResult();
result.StartTime = DateTime.Now.AddMilliseconds(offset * -1); result.StartTime = DateTime.Now - offset;
result.Offset = offset; result.Offset = offset;
result.Duration = Stopwatch.ElapsedTicks.ConvertNanosecondsToMilliseconds() - result.Offset; result.Duration = Stopwatch.Elapsed - result.Offset;


return result; return result;
} }
Expand Down
4 changes: 2 additions & 2 deletions source/Glimpse.Core/Extensibility/IExecutionTimer.cs
Expand Up @@ -10,8 +10,8 @@ public interface IExecutionTimer


TimerResult Time(Action action); TimerResult Time(Action action);


double Start(); TimeSpan Start();


TimerResult Stop(double offset); TimerResult Stop(TimeSpan offset);
} }
} }
6 changes: 3 additions & 3 deletions source/Glimpse.Core/Extensibility/TimerResult.cs
Expand Up @@ -4,9 +4,9 @@ namespace Glimpse.Core.Extensibility
{ {
public class TimerResult public class TimerResult
{ {
public double Offset { get; set; } public TimeSpan Offset { get; set; }

public double Duration { get; set; } public TimeSpan Duration { get; set; }


public DateTime StartTime { get; set; } public DateTime StartTime { get; set; }
} }
Expand Down
1 change: 1 addition & 0 deletions source/Glimpse.Core/Glimpse.Core.csproj
Expand Up @@ -188,6 +188,7 @@
<Compile Include="Message\PointTimelineMessage.cs" /> <Compile Include="Message\PointTimelineMessage.cs" />
<Compile Include="Message\TimelineMessage.cs" /> <Compile Include="Message\TimelineMessage.cs" />
<Compile Include="Message\TimeMessage.cs" /> <Compile Include="Message\TimeMessage.cs" />
<Compile Include="SerializationConverter\TimeSpanConverter.cs" />
<Compile Include="Tab\Assist\CodeType.cs" /> <Compile Include="Tab\Assist\CodeType.cs" />
<Compile Include="Tab\Assist\CodeTypeConverter.cs" /> <Compile Include="Tab\Assist\CodeTypeConverter.cs" />
<Compile Include="Tab\Assist\Formats.cs" /> <Compile Include="Tab\Assist\Formats.cs" />
Expand Down
4 changes: 2 additions & 2 deletions source/Glimpse.Core/Message/ITimeMessage.cs
Expand Up @@ -4,9 +4,9 @@ namespace Glimpse.Core.Message
{ {
public interface ITimeMessage : IMessage public interface ITimeMessage : IMessage
{ {
double Offset { get; } TimeSpan Offset { get; }


double Duration { get; } TimeSpan Duration { get; }


DateTime StartTime { get; } DateTime StartTime { get; }
} }
Expand Down
4 changes: 2 additions & 2 deletions source/Glimpse.Core/Message/TimeMessage.cs
Expand Up @@ -12,12 +12,12 @@ public TimeMessage(TimerResult timerResult, Type executedType, MethodInfo execut
Result = timerResult; Result = timerResult;
} }


public double Offset public TimeSpan Offset
{ {
get { return Result.Offset; } get { return Result.Offset; }
} }


public double Duration public TimeSpan Duration
{ {
get { return Result.Duration; } get { return Result.Duration; }
} }
Expand Down
34 changes: 34 additions & 0 deletions source/Glimpse.Core/SerializationConverter/TimeSpanConverter.cs
@@ -0,0 +1,34 @@
using System;
using System.Collections.Generic;
using System.Globalization;
using System.Linq;
using System.Text;
using Glimpse.Core.Extensibility;
using Glimpse.Core.Extensions;

namespace Glimpse.Core.SerializationConverter
{
public class TimeSpanConverter : ISerializationConverter
{
public IEnumerable<Type> SupportedTypes
{
get
{
yield return typeof(TimeSpan);
yield return typeof(TimeSpan?);
}
}

public object Convert(object date)
{
var converted = date as TimeSpan?;

if (converted.HasValue)
{
return Math.Round(converted.Value.TotalMilliseconds, 2);
}

return null;
}
}
}
@@ -1,15 +1,17 @@
namespace Glimpse.Mvc.AlternateImplementation using System;

namespace Glimpse.Mvc.AlternateImplementation
{ {
public interface IActionInvokerStateMixin public interface IActionInvokerStateMixin
{ {
double Offset { get; set; } TimeSpan Offset { get; set; }


ActionInvoker.InvokeActionMethod.Arguments Arguments { get; set; } ActionInvoker.InvokeActionMethod.Arguments Arguments { get; set; }
} }


public class ActionInvokerStateMixin : IActionInvokerStateMixin public class ActionInvokerStateMixin : IActionInvokerStateMixin
{ {
public double Offset { get; set; } public TimeSpan Offset { get; set; }


public ActionInvoker.InvokeActionMethod.Arguments Arguments { get; set; } public ActionInvoker.InvokeActionMethod.Arguments Arguments { get; set; }
} }
Expand Down
2 changes: 1 addition & 1 deletion source/Glimpse.Mvc3/Message/IExecutionMessage.cs
Expand Up @@ -11,6 +11,6 @@ public interface IExecutionMessage


MethodInfo ExecutedMethod { get; } MethodInfo ExecutedMethod { get; }


double Duration { get; } TimeSpan Duration { get; }
} }
} }
4 changes: 2 additions & 2 deletions source/Glimpse.Mvc3/Model/ExecutionModel.cs
Expand Up @@ -11,7 +11,7 @@ public ExecutionModel(IExecutionMessage message)
IsChildAction = message.IsChildAction; IsChildAction = message.IsChildAction;
ExecutedType = message.ExecutedType; ExecutedType = message.ExecutedType;
ExecutedMethod = message.ExecutedMethod; ExecutedMethod = message.ExecutedMethod;
MillisecondsDuration = message.Duration; Duration = message.Duration;


var filter = message as IFilterMessage; var filter = message as IFilterMessage;
if (filter != null) if (filter != null)
Expand All @@ -26,7 +26,7 @@ public ExecutionModel(IExecutionMessage message)
} }
} }


public double MillisecondsDuration { get; set; } public TimeSpan Duration { get; set; }


public MethodInfo ExecutedMethod { get; set; } public MethodInfo ExecutedMethod { get; set; }


Expand Down
Expand Up @@ -16,7 +16,7 @@ public override object Convert(List<ExecutionModel> models)
var section = new TabSection("Ordinal", "Is Child", "Category", "Category", "Type", "Method", "Time Elapsed"); var section = new TabSection("Ordinal", "Is Child", "Category", "Category", "Type", "Method", "Time Elapsed");
foreach (var model in models) foreach (var model in models)
{ {
section.AddRow().Column(ordinal++).Column(model.IsChildAction).Column(model.Category.ToStringOrDefault()).Column(model.Bounds.ToStringOrDefault()).Column(model.ExecutedType).Column(model.ExecutedMethod).Column(Math.Round(model.MillisecondsDuration, 2)).SelectedIf(!model.Category.HasValue); section.AddRow().Column(ordinal++).Column(model.IsChildAction).Column(model.Category.ToStringOrDefault()).Column(model.Bounds.ToStringOrDefault()).Column(model.ExecutedType).Column(model.ExecutedMethod).Column(model.Duration).SelectedIf(!model.Category.HasValue);
} }


return section.Build(); return section.Build();
Expand Down
4 changes: 2 additions & 2 deletions source/Glimpse.Test.AspNet/Tab/RoutesShould.cs
Expand Up @@ -84,8 +84,8 @@ public void MatchConstraintMessageToRoute(Routes tab, ITabContext context, Syste
RouteTable.Routes.Clear(); RouteTable.Routes.Clear();
RouteTable.Routes.Add(route); RouteTable.Routes.Add(route);


var routeMessage = new RouteBase.GetRouteData.Message(new TimerResult { Duration = 19 }, route.GetType(), null, route.GetHashCode(), new System.Web.Routing.RouteData()); var routeMessage = new RouteBase.GetRouteData.Message(new TimerResult { Duration = TimeSpan.FromMilliseconds(19) }, route.GetType(), null, route.GetHashCode(), new System.Web.Routing.RouteData());
var constraintMessage = new Route.ProcessConstraint.Message(new Route.ProcessConstraint.Arguments(new object[] { (HttpContextBase)null, constraint, "test", (System.Web.Routing.RouteValueDictionary)null, System.Web.Routing.RouteDirection.IncomingRequest }), new TimerResult { Duration = 25 }, route.GetType(), null, route.GetHashCode(), true); var constraintMessage = new Route.ProcessConstraint.Message(new Route.ProcessConstraint.Arguments(new object[] { (HttpContextBase)null, constraint, "test", (System.Web.Routing.RouteValueDictionary)null, System.Web.Routing.RouteDirection.IncomingRequest }), new TimerResult { Duration = TimeSpan.FromMilliseconds(25) }, route.GetType(), null, route.GetHashCode(), true);


context.TabStore.Setup(mb => mb.Contains(typeof(IList<Route.ProcessConstraint.Message>).AssemblyQualifiedName)).Returns(true).Verifiable(); context.TabStore.Setup(mb => mb.Contains(typeof(IList<Route.ProcessConstraint.Message>).AssemblyQualifiedName)).Returns(true).Verifiable();
context.TabStore.Setup(mb => mb.Contains(typeof(IList<RouteBase.GetRouteData.Message>).AssemblyQualifiedName)).Returns(true).Verifiable(); context.TabStore.Setup(mb => mb.Contains(typeof(IList<RouteBase.GetRouteData.Message>).AssemblyQualifiedName)).Returns(true).Verifiable();
Expand Down
14 changes: 7 additions & 7 deletions source/Glimpse.Test.AspNet/Tab/TimelineShould.cs
Expand Up @@ -57,7 +57,7 @@ public void ReturnData(ITabContext context)
var result = timeline.GetData(context) as TimelineModel; var result = timeline.GetData(context) as TimelineModel;


Assert.NotNull(result); Assert.NotNull(result);
Assert.Equal(7, result.Duration); Assert.Equal(TimeSpan.FromMilliseconds(7), result.Duration);
Assert.Equal(3, result.Events.Count); Assert.Equal(3, result.Events.Count);
Assert.Equal("TestName1", result.Events[0].Title); Assert.Equal("TestName1", result.Events[0].Title);
Assert.Equal("TestName3", result.Events[1].Title); Assert.Equal("TestName3", result.Events[1].Title);
Expand All @@ -73,17 +73,17 @@ public void ReturnEmptyWhenNoData(ITabContext context)
var result = timeline.GetData(context) as TimelineModel; var result = timeline.GetData(context) as TimelineModel;


Assert.NotNull(result); Assert.NotNull(result);
Assert.Equal(0, result.Duration); Assert.Equal(TimeSpan.FromMilliseconds(0), result.Duration);
Assert.Null(result.Events); Assert.Null(result.Events);
} }


private IEnumerable<ITimelineMessage> BuildMessages() private IEnumerable<ITimelineMessage> BuildMessages()
{ {
return new List<ITimelineMessage> return new List<ITimelineMessage>
{ {
new TestTimelineMessage { Duration = 1, EventCategory = "Test1", EventName = "TestName1", EventSubText = "TestSub1", Offset = 1, StartTime = DateTime.Now }, new TestTimelineMessage { Duration = TimeSpan.FromMilliseconds(1), EventCategory = "Test1", EventName = "TestName1", EventSubText = "TestSub1", Offset = TimeSpan.FromMilliseconds(1), StartTime = DateTime.Now },
new TestTimelineMessage { Duration = 4, EventCategory = "Test2", EventName = "TestName2", EventSubText = "TestSub2", Offset = 3, StartTime = DateTime.Now }, new TestTimelineMessage { Duration = TimeSpan.FromMilliseconds(4), EventCategory = "Test2", EventName = "TestName2", EventSubText = "TestSub2", Offset = TimeSpan.FromMilliseconds(3), StartTime = DateTime.Now },
new TestTimelineMessage { Duration = 1, EventCategory = "Test3", EventName = "TestName3", EventSubText = "TestSub3", Offset = 2, StartTime = DateTime.Now } new TestTimelineMessage { Duration = TimeSpan.FromMilliseconds(1), EventCategory = "Test3", EventName = "TestName3", EventSubText = "TestSub3", Offset = TimeSpan.FromMilliseconds(2), StartTime = DateTime.Now }
}; };
} }


Expand All @@ -101,9 +101,9 @@ public class TestTimelineMessage : ITimelineMessage


public string EventSubText { get; set; } public string EventSubText { get; set; }


public double Offset { get; set; } public TimeSpan Offset { get; set; }


public double Duration { get; set; } public TimeSpan Duration { get; set; }


public DateTime StartTime { get; set; } public DateTime StartTime { get; set; }


Expand Down
4 changes: 2 additions & 2 deletions source/Glimpse.Test.Core/Framework/TimerShould.cs
Expand Up @@ -19,7 +19,7 @@ public void TimeFunction()
Assert.NotNull(result); Assert.NotNull(result);
var failureMessage = result.Duration.ToString() + " not greater than " + waitTime.ToString(); var failureMessage = result.Duration.ToString() + " not greater than " + waitTime.ToString();
Console.Write(failureMessage); Console.Write(failureMessage);
Assert.True(result.Duration >= waitTime-1, failureMessage); //-1 to handle issues with rounding?? Assert.True(new DateTime().AddTicks(result.Duration.Ticks) >= new DateTime().AddTicks(result.Duration.Ticks).AddMilliseconds(waitTime - 1), failureMessage); //-1 to handle issues with rounding??
} }


[Fact(Skip = "This test is flaky. Need to find a better way to do this...")] [Fact(Skip = "This test is flaky. Need to find a better way to do this...")]
Expand All @@ -35,7 +35,7 @@ public void TimeMethod()
}); });


Assert.NotNull(result); Assert.NotNull(result);
Assert.True(result.Duration >= waitTime); Assert.True(new DateTime().AddTicks(result.Duration.Ticks) >= new DateTime().AddTicks(result.Duration.Ticks).AddMilliseconds(waitTime));
Assert.Equal("STRING", result.Result); Assert.Equal("STRING", result.Result);
} }


Expand Down
1 change: 1 addition & 0 deletions source/Glimpse.Test.Core/Glimpse.Test.Core.csproj
Expand Up @@ -152,6 +152,7 @@
<Compile Include="Resource\MetadataShould.cs" /> <Compile Include="Resource\MetadataShould.cs" />
<Compile Include="Resource\PopupResourceShould.cs" /> <Compile Include="Resource\PopupResourceShould.cs" />
<Compile Include="Resource\VersionCheckResourceShould.cs" /> <Compile Include="Resource\VersionCheckResourceShould.cs" />
<Compile Include="SerializationConverter\TimeStampConverterShould.cs" />
<Compile Include="SerializationConverter\DateTimeConverterShould.cs" /> <Compile Include="SerializationConverter\DateTimeConverterShould.cs" />
<Compile Include="SerializationConverter\GlimpseMetadataConverterShould.cs" /> <Compile Include="SerializationConverter\GlimpseMetadataConverterShould.cs" />
<Compile Include="SerializationConverter\GlimpseRequestConverterShould.cs" /> <Compile Include="SerializationConverter\GlimpseRequestConverterShould.cs" />
Expand Down

0 comments on commit 9629114

Please sign in to comment.