Skip to content

Commit

Permalink
Added profiling implementation
Browse files Browse the repository at this point in the history
  • Loading branch information
Chris van de Steeg committed Feb 18, 2015
1 parent f8df773 commit 16065b8
Show file tree
Hide file tree
Showing 21 changed files with 534 additions and 216 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -18,15 +18,15 @@
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<OutputPath>..\..\build\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<OutputPath>..\..\build\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
<copyright>Copyright 2014</copyright>
<tags>BoC,InversionOfControl,Unity</tags>
<dependencies>
<dependency id="BoC" version="2.2.2" />
<dependency id="BoC" version="2.3.0" />
<dependency id="Unity" version="3.5.1404" />
</dependencies>
</metadata>
Expand Down
77 changes: 48 additions & 29 deletions Src/Commons.InversionOfControl.Unity/UnityDependencyResolver.cs
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
using System.Configuration;
using System.Linq;
using BoC.Helpers;
using BoC.Profiling;
using Microsoft.Practices.Unity;
using Microsoft.Practices.Unity.Configuration;

Expand Down Expand Up @@ -44,67 +45,79 @@ public void RegisterSingleton<TFrom, TTo>() where TTo : TFrom

public virtual void RegisterSingleton(Type from, Type to)
{
_container.RegisterType(from, to, new ContainerControlledLifetimeManager());
using (Profiler.StartContext("UnityDependencyResolver.RegisterSingleton({0},{1})", from, to))
_container.RegisterType(from, to, new ContainerControlledLifetimeManager());
}

public void RegisterType<TFrom, TTo>(LifetimeScope scope = LifetimeScope.Transient) where TTo : TFrom
{
_container.RegisterType<TFrom, TTo>(GetLifetimeManager(scope));
using (Profiler.StartContext("UnityDependencyResolver.RegisterSingleton<{0},{1}>({2})", typeof(TFrom), typeof(TTo), scope))
_container.RegisterType<TFrom, TTo>(GetLifetimeManager(scope));
}

public void RegisterFactory<TFrom>(Func<TFrom> factory)
{
_container.RegisterType<TFrom>(new InjectionFactory(c => factory()));
using (Profiler.StartContext("UnityDependencyResolver.RegisterFactory<{0}>()", typeof(TFrom)))
_container.RegisterType<TFrom>(new InjectionFactory(c => factory()));
}

public IDependencyResolver CreateChildResolver()
{
return new UnityDependencyResolver(_container.CreateChildContainer());
using (Profiler.StartContext("UnityDependencyResolver.CreateChildResolver()"))
return new UnityDependencyResolver(_container.CreateChildContainer());
}

public void RegisterFactory(Type from, Func<object> factory)
{
_container.RegisterType(from, new InjectionFactory(c => factory()));
using (Profiler.StartContext("UnityDependencyResolver.RegisterFactory({0})", from))
_container.RegisterType(from, new InjectionFactory(c => factory()));
}

public virtual void RegisterType(Type from, Type to, LifetimeScope scope = LifetimeScope.Transient)
{
Check.Argument.IsNotNull(from, "from");
Check.Argument.IsNotNull(to, "to");

_container.RegisterType(from, to, GetLifetimeManager(scope));
using (Profiler.StartContext("UnityDependencyResolver.RegisterType({0},{1},{2})", from, to,scope))
_container.RegisterType(from, to, GetLifetimeManager(scope));
}

public object Resolve(Type type)
{
Check.Argument.IsNotNull(type, "type");
if (_container.Configure<TypeTrackingExtension>().CanResolve(type))
using (Profiler.StartContext("UnityDependencyResolver.Resolve({0})", type))
{
return _container.Resolve(type);
}
else
{
return null;
if (_container.Configure<TypeTrackingExtension>().CanResolve(type))
{
return _container.Resolve(type);
}
else
{
return null;
}
}
}

public object Resolve(Type type, string name)
{
Check.Argument.IsNotNull(type, "type");
if (Container.Configure<TypeTrackingExtension>().CanResolve(type, name))
using (Profiler.StartContext("UnityDependencyResolver.Resolve({0},{1})", type, name))
{
var result = _container.Resolve(type, name);
if (typeof(IEnumerable).IsAssignableFrom(type) &&
((result == null) || !((IEnumerable)result).Cast<Object>().Any()))
if (Container.Configure<TypeTrackingExtension>().CanResolve(type, name))
{
result = this.ResolveAll(type);
var result = _container.Resolve(type, name);
if (typeof (IEnumerable).IsAssignableFrom(type) &&
((result == null) || !((IEnumerable) result).Cast<Object>().Any()))
{
result = this.ResolveAll(type);
}

return result;
}
else
{
return null;
}

return result;
}
else
{
return null;
}
}

Expand All @@ -127,15 +140,17 @@ public IEnumerable ResolveAll(Type t)
if (!CanResolve(t))
return Enumerable.Empty<object>();

return _container.ResolveAll(t);
using (Profiler.StartContext("UnityDependencyResolver.ResolveAll({0})", t))
return _container.ResolveAll(t);
}

public IEnumerable<T> ResolveAll<T>()
{
if (!CanResolve(typeof(T)))
return Enumerable.Empty<T>();

return _container.ResolveAll<T>();
using (Profiler.StartContext("UnityDependencyResolver.ResolveAll<{0}>()", typeof(T)))
return _container.ResolveAll<T>();
}

public bool IsRegistered<T>()
Expand All @@ -145,7 +160,8 @@ public bool IsRegistered<T>()

public bool IsRegistered(Type type)
{
return _container.Configure<TypeTrackingExtension>().IsRegistered(type);
using (Profiler.StartContext("UnityDependencyResolver.IsRegistered({0})", type))
return _container.Configure<TypeTrackingExtension>().IsRegistered(type);
}

/// <summary>
Expand All @@ -168,9 +184,12 @@ public bool CanResolve<T>()
/// </returns>
public bool CanResolve(Type type)
{
if (isResolvableClass(type))
return true;
return IsRegistered(type);
using (Profiler.StartContext("UnityDependencyResolver.CanResolve({0})", type))
{
if (isResolvableClass(type))
return true;
return IsRegistered(type);
}
}

private bool isResolvableClass(Type type)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,7 @@
</ItemGroup>
<ItemGroup>
<Compile Include="ContextDatabaseProvider.cs" />
<Compile Include="DefaultSetupTasks\EnableProfiling.cs" />
<Compile Include="DefaultSetupTasks\RegisterConfigLoader.cs" />
<Compile Include="GlassConfig\AppDomainHelperConfigLoader.cs" />
<Compile Include="DefaultSetupTasks\RegisterValueProvider.cs" />
Expand All @@ -137,10 +138,12 @@
<Compile Include="DefaultSetupTasks\AutoSitecoreRepositoryGenerator.cs" />
<Compile Include="IDatabaseProvider.cs" />
<Compile Include="IIndexNameProvider.cs" />
<Compile Include="DefaultSetupTasks\RegisterPerformanceProfilers.cs" />
<Compile Include="Initialize\InitBoc.cs" />
<Compile Include="DefaultSetupTasks\InitGlass.cs" />
<Compile Include="ISitecoreServiceProvider.cs" />
<Compile Include="Mvc\SitecoreValueProvider.cs" />
<Compile Include="Profiling\SitecorePerformanceProfiler.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="SitecoreRepository.cs" />
<Compile Include="SitecoreServiceProvider.cs" />
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@
<copyright>Copyright 2014</copyright>
<tags>BoC,Persistence,Glass,Mapper,ORM,Repository,Sitecore</tags>
<dependencies>
<dependency id="BoC" version="2.2.0" />
<dependency id="BoC.Logging.Sitecore" version="2.0.1" />
<dependency id="BoC" version="2.3.0" />
<dependency id="BoC.Logging.Sitecore" version="2.2.0" />
<dependency id="BoC.Glass.Mapper" version="1.0.3" />
<dependency id="BoC.Glass.Mapper.Sc" version="1.0.3" />
<dependency id="BoC.Glass.Mapper.Sc.Mvc-5" version="1.0.3" />
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
using BoC.Profiling;
using BoC.Tasks;

namespace BoC.Persistence.SitecoreGlass.DefaultSetupTasks
{
public class EnableProfiling: IBootstrapperTask
{
public void Execute()
{
Profiler.Enabled = global::Sitecore.Configuration.Settings.GetBoolSetting("BoC.Profiler.Enabled", false);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
using BoC.InversionOfControl;
using BoC.Persistence.SitecoreGlass.Profiling;
using BoC.Profiling;

namespace BoC.Persistence.SitecoreGlass.DefaultSetupTasks
{

public class ContainerRegistrations: IContainerInitializer
{
private readonly IDependencyResolver _resolver;

public ContainerRegistrations(IDependencyResolver resolver)
{
_resolver = resolver;
}

public void Execute()
{
_resolver.RegisterSingleton<IPerformanceProfiler, SitecorePerformanceProfiler>();
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
using BoC.Profiling;

namespace BoC.Persistence.SitecoreGlass.Profiling
{
public class SitecorePerformanceProfiler: IPerformanceProfiler
{
public void BeginSession(string key)
{
Sitecore.Diagnostics.Profiler.StartOperation(key);
}

public void EndSession(string key)
{
Sitecore.Diagnostics.Profiler.EndOperation(key);
}

}
}
4 changes: 2 additions & 2 deletions Src/Commons.Persistence.Sitecore/Properties/AssemblyInfo.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,5 +32,5 @@
// You can specify all the values or you can default the Build and Revision Numbers
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("2.2.0.0")]
[assembly: AssemblyFileVersion("2.2.0.0")]
[assembly: AssemblyVersion("2.3.0.0")]
[assembly: AssemblyFileVersion("2.3.0.0")]
Loading

0 comments on commit 16065b8

Please sign in to comment.