Removes the abstraction on the profiler, no need for a resolver, it will work in unit tests and we can override the provider if needed.

Added better support for MVC profiling by using the built in ProfilingViewEngine and ProfilingActionFilter.
This commit is contained in:
Shannon Deminick
2013-05-12 19:05:49 -10:00
parent 3fd3bf0fda
commit cb8d080f1d
22 changed files with 362 additions and 302 deletions

View File

@@ -187,9 +187,6 @@ namespace Umbraco.Core
/// </summary>
protected virtual void InitializeResolvers()
{
//By default we'll initialize the Log profiler (in the web project, we'll override with the web profiler)
ProfilerResolver.Current = new ProfilerResolver(new LogProfiler());
//by default we'll use the standard configuration based sync
ServerRegistrarResolver.Current = new ServerRegistrarResolver(
new ConfigServerRegistrar());

View File

@@ -1,44 +1,44 @@
using System;
//using System;
namespace Umbraco.Core.Profiling
{
/// <summary>
/// Defines an object for use in the application to profile operations
/// </summary>
public interface IProfiler
{
//namespace Umbraco.Core.Profiling
//{
// /// <summary>
// /// Defines an object for use in the application to profile operations
// /// </summary>
// public interface IProfiler
// {
/// <summary>
/// Render the UI to display the profiler
/// </summary>
/// <returns></returns>
/// <remarks>
/// Generally used for HTML displays
/// </remarks>
string Render();
// /// <summary>
// /// Render the UI to display the profiler
// /// </summary>
// /// <returns></returns>
// /// <remarks>
// /// Generally used for HTML displays
// /// </remarks>
// string Render();
/// <summary>
/// Profile a step
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
/// <remarks>
/// Use the 'using(' syntax
/// </remarks>
IDisposable Step(string name);
// /// <summary>
// /// Profile a step
// /// </summary>
// /// <param name="name"></param>
// /// <returns></returns>
// /// <remarks>
// /// Use the 'using(' syntax
// /// </remarks>
// IDisposable Step(string name);
/// <summary>
/// Start the profiler
/// </summary>
void Start();
// /// <summary>
// /// Start the profiler
// /// </summary>
// void Start();
/// <summary>
/// Start the profiler
/// </summary>
/// <remarks>
/// set discardResults to false when you want to abandon all profiling, this is useful for
/// when someone is not authenticated or you want to clear the results based on some other mechanism.
/// </remarks>
void Stop(bool discardResults = false);
}
}
// /// <summary>
// /// Start the profiler
// /// </summary>
// /// <remarks>
// /// set discardResults to false when you want to abandon all profiling, this is useful for
// /// when someone is not authenticated or you want to clear the results based on some other mechanism.
// /// </remarks>
// void Stop(bool discardResults = false);
// }
//}

View File

@@ -1,35 +1,35 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Umbraco.Core.Logging;
//using System;
//using System.Collections.Generic;
//using System.Linq;
//using System.Text;
//using Umbraco.Core.Logging;
namespace Umbraco.Core.Profiling
{
/// <summary>
/// A profiler that outputs its results to the LogHelper
/// </summary>
public class LogProfiler : IProfiler
{
public string Render()
{
return string.Empty;
}
//namespace Umbraco.Core.Profiling
//{
// /// <summary>
// /// A profiler that outputs its results to the LogHelper
// /// </summary>
// public class LogProfiler : IProfiler
// {
// public string Render()
// {
// return string.Empty;
// }
public IDisposable Step(string name)
{
LogHelper.Debug(typeof(LogProfiler), "Starting - " + name);
return DisposableTimer.Start(l => LogHelper.Info(typeof (LogProfiler), () => name + " (took " + l + "ms)"));
}
// public IDisposable Step(string name)
// {
// LogHelper.Debug(typeof(LogProfiler), "Starting - " + name);
// return DisposableTimer.Start(l => LogHelper.Info(typeof (LogProfiler), () => name + " (took " + l + "ms)"));
// }
public void Start()
{
//the log will alwasy be started
}
// public void Start()
// {
// //the log will alwasy be started
// }
public void Stop(bool discardResults = false)
{
//we don't need to do anything here
}
}
}
// public void Stop(bool discardResults = false)
// {
// //we don't need to do anything here
// }
// }
//}

View File

@@ -1,8 +1,9 @@
using System;
using StackExchange.Profiling;
namespace Umbraco.Core.Profiling
{
public static class ProfilerExtensions
public static class MiniProfilerExtensions
{
/// <summary>
/// Writes out a step prefixed with the type
@@ -11,7 +12,7 @@ namespace Umbraco.Core.Profiling
/// <param name="profiler"></param>
/// <param name="name"></param>
/// <returns></returns>
public static IDisposable Step<T>(this IProfiler profiler, string name)
public static IDisposable Step<T>(this MiniProfiler profiler, string name)
{
return profiler.Step(string.Format("[" + typeof (T).Name + "] " + name));
}

View File

@@ -1,37 +1,37 @@
using Umbraco.Core.ObjectResolution;
//using Umbraco.Core.ObjectResolution;
namespace Umbraco.Core.Profiling
{
/// <summary>
/// A resolver exposing the current profiler
/// </summary>
public class ProfilerResolver : SingleObjectResolverBase<ProfilerResolver, IProfiler>
{
/// <summary>
/// Constructor
/// </summary>
/// <param name="profiler"></param>
public ProfilerResolver(IProfiler profiler)
: base(profiler)
{
//namespace Umbraco.Core.Profiling
//{
// /// <summary>
// /// A resolver exposing the current profiler
// /// </summary>
// public class ProfilerResolver : SingleObjectResolverBase<ProfilerResolver, IProfiler>
// {
// /// <summary>
// /// Constructor
// /// </summary>
// /// <param name="profiler"></param>
// public ProfilerResolver(IProfiler profiler)
// : base(profiler)
// {
}
// }
/// <summary>
/// Method allowing to change the profiler during startup
/// </summary>
/// <param name="profiler"></param>
internal void SetProfiler(IProfiler profiler)
{
Value = profiler;
}
// /// <summary>
// /// Method allowing to change the profiler during startup
// /// </summary>
// /// <param name="profiler"></param>
// internal void SetProfiler(IProfiler profiler)
// {
// Value = profiler;
// }
/// <summary>
/// Gets the current profiler
/// </summary>
public IProfiler Profiler
{
get { return Value; }
}
}
}
// /// <summary>
// /// Gets the current profiler
// /// </summary>
// public IProfiler Profiler
// {
// get { return Value; }
// }
// }
//}

View File

@@ -1,161 +1,161 @@
using System;
using System.Web;
using StackExchange.Profiling;
using Umbraco.Core.Configuration;
using Umbraco.Core.Logging;
//using System;
//using System.Web;
//using StackExchange.Profiling;
//using Umbraco.Core.Configuration;
//using Umbraco.Core.Logging;
namespace Umbraco.Core.Profiling
{
/// <summary>
/// A profiler used for web based activity based on the MiniProfiler framework
/// </summary>
public class WebProfiler : IProfiler
{
//namespace Umbraco.Core.Profiling
//{
// /// <summary>
// /// A profiler used for web based activity based on the MiniProfiler framework
// /// </summary>
// public class WebProfiler : IProfiler
// {
/// <summary>
/// Constructor
/// </summary>
/// <remarks>
/// Binds to application events to enable the MiniProfiler
/// </remarks>
internal WebProfiler()
{
UmbracoApplicationBase.ApplicationInit += UmbracoApplicationApplicationInit;
}
// /// <summary>
// /// Constructor
// /// </summary>
// /// <remarks>
// /// Binds to application events to enable the MiniProfiler
// /// </remarks>
// internal WebProfiler()
// {
// UmbracoApplicationBase.ApplicationInit += UmbracoApplicationApplicationInit;
// }
/// <summary>
/// Handle the Init event o fthe UmbracoApplication which allows us to subscribe to the HttpApplication events
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void UmbracoApplicationApplicationInit(object sender, EventArgs e)
{
var app = sender as HttpApplication;
if (app == null) return;
// /// <summary>
// /// Handle the Init event o fthe UmbracoApplication which allows us to subscribe to the HttpApplication events
// /// </summary>
// /// <param name="sender"></param>
// /// <param name="e"></param>
// void UmbracoApplicationApplicationInit(object sender, EventArgs e)
// {
// var app = sender as HttpApplication;
// if (app == null) return;
if (SystemUtilities.GetCurrentTrustLevel() < AspNetHostingPermissionLevel.High)
{
//If we don't have a high enough trust level we cannot bind to the events
LogHelper.Info<WebProfiler>("Cannot start the WebProfiler since the application is running in Medium trust");
}
else
{
app.BeginRequest += UmbracoApplicationBeginRequest;
app.EndRequest += UmbracoApplicationEndRequest;
}
}
// if (SystemUtilities.GetCurrentTrustLevel() < AspNetHostingPermissionLevel.High)
// {
// //If we don't have a high enough trust level we cannot bind to the events
// LogHelper.Info<WebProfiler>("Cannot start the WebProfiler since the application is running in Medium trust");
// }
// else
// {
// app.BeginRequest += UmbracoApplicationBeginRequest;
// app.EndRequest += UmbracoApplicationEndRequest;
// }
// }
/// <summary>
/// Handle the begin request event
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void UmbracoApplicationEndRequest(object sender, EventArgs e)
{
if (GlobalSettings.DebugMode == false) return;
var request = TryGetRequest(sender);
if (request.Success == false) return;
if (request.Result.Url.IsClientSideRequest()) return;
if (string.IsNullOrEmpty(request.Result["umbDebug"]) == false)
{
//stop the profiler
Stop();
}
}
// /// <summary>
// /// Handle the begin request event
// /// </summary>
// /// <param name="sender"></param>
// /// <param name="e"></param>
// void UmbracoApplicationEndRequest(object sender, EventArgs e)
// {
// if (GlobalSettings.DebugMode == false) return;
// var request = TryGetRequest(sender);
// if (request.Success == false) return;
// if (request.Result.Url.IsClientSideRequest()) return;
// if (string.IsNullOrEmpty(request.Result["umbDebug"]) == false)
// {
// //stop the profiler
// Stop();
// }
// }
/// <summary>
/// Handle the end request event
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
void UmbracoApplicationBeginRequest(object sender, EventArgs e)
{
if (GlobalSettings.DebugMode == false) return;
var request = TryGetRequest(sender);
if (request.Success == false) return;
if (request.Result.Url.IsClientSideRequest()) return;
if (string.IsNullOrEmpty(request.Result["umbDebug"]) == false)
{
//start the profiler
Start();
}
}
// /// <summary>
// /// Handle the end request event
// /// </summary>
// /// <param name="sender"></param>
// /// <param name="e"></param>
// void UmbracoApplicationBeginRequest(object sender, EventArgs e)
// {
// if (GlobalSettings.DebugMode == false) return;
// var request = TryGetRequest(sender);
// if (request.Success == false) return;
// if (request.Result.Url.IsClientSideRequest()) return;
// if (string.IsNullOrEmpty(request.Result["umbDebug"]) == false)
// {
// //start the profiler
// Start();
// }
// }
/// <summary>
/// Render the UI to display the profiler
/// </summary>
/// <returns></returns>
/// <remarks>
/// Generally used for HTML displays
/// </remarks>
public string Render()
{
return MiniProfiler.RenderIncludes().ToString();
}
// /// <summary>
// /// Render the UI to display the profiler
// /// </summary>
// /// <returns></returns>
// /// <remarks>
// /// Generally used for HTML displays
// /// </remarks>
// public string Render()
// {
// return MiniProfiler.RenderIncludes().ToString();
// }
/// <summary>
/// Profile a step
/// </summary>
/// <param name="name"></param>
/// <returns></returns>
/// <remarks>
/// Use the 'using(' syntax
/// </remarks>
public IDisposable Step(string name)
{
if (GlobalSettings.DebugMode == false) return null;
// /// <summary>
// /// Profile a step
// /// </summary>
// /// <param name="name"></param>
// /// <returns></returns>
// /// <remarks>
// /// Use the 'using(' syntax
// /// </remarks>
// public IDisposable Step(string name)
// {
// if (GlobalSettings.DebugMode == false) return null;
return MiniProfiler.Current.Step(name);
}
// return MiniProfiler.Current.Step(name);
// }
/// <summary>
/// Start the profiler
/// </summary>
public void Start()
{
if (GlobalSettings.DebugMode == false) return;
//will not run in medium trust
if (SystemUtilities.GetCurrentTrustLevel() < AspNetHostingPermissionLevel.High) return;
// /// <summary>
// /// Start the profiler
// /// </summary>
// public void Start()
// {
// if (GlobalSettings.DebugMode == false) return;
// //will not run in medium trust
// if (SystemUtilities.GetCurrentTrustLevel() < AspNetHostingPermissionLevel.High) return;
MiniProfiler.Start();
}
// MiniProfiler.Start();
// }
/// <summary>
/// Start the profiler
/// </summary>
/// <remarks>
/// set discardResults to false when you want to abandon all profiling, this is useful for
/// when someone is not authenticated or you want to clear the results based on some other mechanism.
/// </remarks>
public void Stop(bool discardResults = false)
{
if (GlobalSettings.DebugMode == false) return;
//will not run in medium trust
if (SystemUtilities.GetCurrentTrustLevel() < AspNetHostingPermissionLevel.High) return;
// /// <summary>
// /// Start the profiler
// /// </summary>
// /// <remarks>
// /// set discardResults to false when you want to abandon all profiling, this is useful for
// /// when someone is not authenticated or you want to clear the results based on some other mechanism.
// /// </remarks>
// public void Stop(bool discardResults = false)
// {
// if (GlobalSettings.DebugMode == false) return;
// //will not run in medium trust
// if (SystemUtilities.GetCurrentTrustLevel() < AspNetHostingPermissionLevel.High) return;
MiniProfiler.Stop(discardResults);
}
// MiniProfiler.Stop(discardResults);
// }
/// <summary>
/// Gets the request object from the app instance if it is available
/// </summary>
/// <param name="sender">The application object</param>
/// <returns></returns>
private Attempt<HttpRequestBase> TryGetRequest(object sender)
{
var app = sender as HttpApplication;
if (app == null) return Attempt<HttpRequestBase>.False;
// /// <summary>
// /// Gets the request object from the app instance if it is available
// /// </summary>
// /// <param name="sender">The application object</param>
// /// <returns></returns>
// private Attempt<HttpRequestBase> TryGetRequest(object sender)
// {
// var app = sender as HttpApplication;
// if (app == null) return Attempt<HttpRequestBase>.False;
try
{
var req = app.Request;
return new Attempt<HttpRequestBase>(true, new HttpRequestWrapper(req));
}
catch (HttpException ex)
{
return new Attempt<HttpRequestBase>(ex);
}
}
// try
// {
// var req = app.Request;
// return new Attempt<HttpRequestBase>(true, new HttpRequestWrapper(req));
// }
// catch (HttpException ex)
// {
// return new Attempt<HttpRequestBase>(ex);
// }
// }
}
}
// }
//}

View File

@@ -523,7 +523,7 @@
<Compile Include="Persistence\UnitOfWork\PetaPocoUnitOfWorkProvider.cs" />
<Compile Include="Profiling\IProfiler.cs" />
<Compile Include="Profiling\LogProfiler.cs" />
<Compile Include="Profiling\ProfilerExtensions.cs" />
<Compile Include="Profiling\MiniProfilerExtensions.cs" />
<Compile Include="Profiling\ProfilerResolver.cs" />
<Compile Include="Profiling\WebProfiler.cs" />
<Compile Include="PropertyEditors\Attributes\PropertyEditorAttribute.cs" />

View File

@@ -25,11 +25,6 @@ namespace Umbraco.Core
public static event EventHandler ApplicationStarting;
public static event EventHandler ApplicationStarted;
/// <summary>
/// Called when the HttpApplication.Init() is fired, allows developers to subscribe to the HttpApplication events
/// </summary>
public static event EventHandler ApplicationInit;
/// <summary>
/// Boots up the Umbraco application
/// </summary>
@@ -53,17 +48,49 @@ namespace Umbraco.Core
protected void Application_Start(object sender, EventArgs e)
{
StartApplication(sender, e);
if (SystemUtilities.GetCurrentTrustLevel() < AspNetHostingPermissionLevel.High)
{
//If we don't have a high enough trust level we cannot bind to the events
LogHelper.Info<UmbracoApplicationBase>("Cannot use the MiniProfiler since the application is running in Medium trust");
}
}
/// <summary>
/// Override init and raise the event
/// Initializes the mini profiler for the request
/// </summary>
public override void Init()
protected void Application_BeginRequest()
{
base.Init();
OnApplicationInit(this, new EventArgs());
if (GlobalSettings.DebugMode == false) return;
var request = TryGetRequest();
if (request.Success == false) return;
if (request.Result.Url.IsClientSideRequest()) return;
if (SystemUtilities.GetCurrentTrustLevel() < AspNetHostingPermissionLevel.High) return;
if (string.IsNullOrEmpty(request.Result["umbDebug"]) == false)
{
//start the profiler
MiniProfiler.Start();
}
}
/// <summary>
/// Closes the mini profiler for the request
/// </summary>
protected void Application_EndRequest()
{
if (GlobalSettings.DebugMode == false) return;
var request = TryGetRequest();
if (request.Success == false) return;
if (request.Result.Url.IsClientSideRequest()) return;
if (SystemUtilities.GetCurrentTrustLevel() < AspNetHostingPermissionLevel.High) return;
if (string.IsNullOrEmpty(request.Result["umbDebug"]) == false)
{
//stop the profiler
MiniProfiler.Stop();
}
}
/// <summary>
/// Developers can override this method to modify objects on startup
/// </summary>
@@ -85,18 +112,7 @@ namespace Umbraco.Core
if (ApplicationStarted != null)
ApplicationStarted(sender, e);
}
/// <summary>
/// Called to raise the ApplicationInit event
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void OnApplicationInit(object sender, EventArgs e)
{
if (ApplicationInit != null)
ApplicationInit(sender, e);
}
/// <summary>
/// A method that can be overridden to invoke code when the application has an error.
/// </summary>
@@ -146,5 +162,22 @@ namespace Umbraco.Core
protected abstract IBootManager GetBootManager();
/// <summary>
/// Gets the request object from the app instance if it is available
/// </summary>
/// <returns></returns>
private Attempt<HttpRequestBase> TryGetRequest()
{
try
{
var req = Request;
return new Attempt<HttpRequestBase>(true, new HttpRequestWrapper(req));
}
catch (HttpException ex)
{
return new Attempt<HttpRequestBase>(ex);
}
}
}
}

View File

@@ -127,6 +127,10 @@
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\Microsoft.AspNet.Mvc.FixedDisplayModes.1.0.1\lib\net40\Microsoft.Web.Mvc.FixedDisplayModes.dll</HintPath>
</Reference>
<Reference Include="MiniProfiler, Version=2.1.0.0, Culture=neutral, PublicKeyToken=b44f9351044011a3, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\MiniProfiler.2.1.0\lib\net40\MiniProfiler.dll</HintPath>
</Reference>
<Reference Include="MySql.Data, Version=6.6.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\MySql.Data.6.6.4\lib\net40\MySql.Data.dll</HintPath>

View File

@@ -16,6 +16,7 @@
<package id="Microsoft.Net.Http" version="2.0.20710.0" targetFramework="net40" />
<package id="Microsoft.Web.Helpers" version="1.0.0" targetFramework="net40" />
<package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net40" />
<package id="MiniProfiler" version="2.1.0" targetFramework="net40" />
<package id="MySql.Data" version="6.6.4" targetFramework="net40" />
<package id="Newtonsoft.Json" version="4.5.11" targetFramework="net40" />
<package id="SharpZipLib" version="0.86.0" targetFramework="net40" />

View File

@@ -4,6 +4,7 @@
<%@ Import Namespace="System.Web.Script.Serialization" %>
<%@ Register Src="controls/Tree/TreeControl.ascx" TagName="TreeControl" TagPrefix="umbraco" %>
<%@ Import Namespace="StackExchange.Profiling" %>
<%@ Import Namespace="Umbraco.Core.Profiling" %>
<%@ Register TagPrefix="cc1" Namespace="umbraco.uicontrols" Assembly="controls" %>
<%@ Register TagPrefix="uc1" TagName="quickSearch" Src="Search/QuickSearch.ascx" %>
@@ -391,7 +392,7 @@
</script>
<%if(string.IsNullOrEmpty(Request["umbDebug"]) == false && umbraco.GlobalSettings.DebugMode)
{
Response.Write(ProfilerResolver.Current.Profiler.Render());
Response.Write(MiniProfiler.RenderIncludes());
}%>
</body>
</html>

View File

@@ -22,6 +22,16 @@ namespace Umbraco.Web.Mvc
}
/// <summary>
/// Return the controller name from the controller instance
/// </summary>
/// <param name="controllerInstance"></param>
/// <returns></returns>
internal static string GetControllerName(this IController controllerInstance)
{
return GetControllerName(controllerInstance.GetType());
}
/// <summary>
/// Return the controller name from the controller type
/// </summary>
/// <typeparam name="T"></typeparam>

View File

@@ -1,4 +1,5 @@
using System;
using StackExchange.Profiling;
using Umbraco.Core;
using Umbraco.Core.Configuration;
using Umbraco.Core.Dictionary;
@@ -94,7 +95,7 @@ namespace Umbraco.Web.Mvc
}
else
{
var profilerMarkup = ProfilerResolver.Current.Profiler.Render();
var profilerMarkup = MiniProfiler.RenderIncludes();
text = text.Substring(0, pos) + profilerMarkup + text.Substring(pos, text.Length - pos);
}
base.WriteLiteral(text);

View File

@@ -126,6 +126,10 @@
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\Microsoft.AspNet.Mvc.FixedDisplayModes.1.0.1\lib\net40\Microsoft.Web.Mvc.FixedDisplayModes.dll</HintPath>
</Reference>
<Reference Include="MiniProfiler, Version=2.1.0.0, Culture=neutral, PublicKeyToken=b44f9351044011a3, processorArchitecture=MSIL">
<SpecificVersion>False</SpecificVersion>
<HintPath>..\packages\MiniProfiler.2.1.0\lib\net40\MiniProfiler.dll</HintPath>
</Reference>
<Reference Include="Newtonsoft.Json">
<HintPath>..\packages\Newtonsoft.Json.4.5.11\lib\net40\Newtonsoft.Json.dll</HintPath>
</Reference>

View File

@@ -5,6 +5,7 @@ using System.Web;
using System.Web.Http;
using System.Web.Mvc;
using System.Web.Routing;
using StackExchange.Profiling.MVCHelpers;
using Umbraco.Core;
using Umbraco.Core.Configuration;
using Umbraco.Core.Dictionary;
@@ -72,13 +73,16 @@ namespace Umbraco.Web
new MasterControllerFactory(FilteredControllerFactoriesResolver.Current));
//set the render view engine
ViewEngines.Engines.Add(new RenderViewEngine());
ViewEngines.Engines.Add(new ProfilingViewEngine(new RenderViewEngine()));
//set the plugin view engine
ViewEngines.Engines.Add(new PluginViewEngine());
ViewEngines.Engines.Add(new ProfilingViewEngine(new PluginViewEngine()));
//set model binder
ModelBinders.Binders.Add(new KeyValuePair<Type, IModelBinder>(typeof(RenderModel), new RenderModelBinder()));
//add the profiling action filter
GlobalFilters.Filters.Add(new ProfilingActionFilter());
return this;
}
@@ -236,9 +240,6 @@ namespace Umbraco.Web
{
base.InitializeResolvers();
//Set the profiler to be the web profiler
ProfilerResolver.Current.SetProfiler(new WebProfiler());
//set the default RenderMvcController
DefaultRenderMvcControllerResolver.Current = new DefaultRenderMvcControllerResolver(typeof(RenderMvcController));

View File

@@ -15,6 +15,7 @@
<package id="Microsoft.AspNet.WebPages" version="2.0.20710.0" targetFramework="net40" />
<package id="Microsoft.Net.Http" version="2.0.20710.0" targetFramework="net40" />
<package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net40" />
<package id="MiniProfiler" version="2.1.0" targetFramework="net40" />
<package id="Newtonsoft.Json" version="4.5.11" targetFramework="net40" />
<package id="SharpZipLib" version="0.86.0" targetFramework="net40" />
<package id="uGoLive" version="1.4.0" targetFramework="net40" />

View File

@@ -6,6 +6,7 @@ using System.Web.UI;
using System.IO;
using System.Xml;
using System.Text.RegularExpressions;
using StackExchange.Profiling;
using Umbraco.Core;
using Umbraco.Core.Logging;
using Umbraco.Core.Profiling;
@@ -45,7 +46,7 @@ namespace umbraco
protected override void OnPreInit(EventArgs e)
{
base.OnPreInit(e);
using (ProfilerResolver.Current.Profiler.Step<UmbracoDefault>("PreInit"))
using (MiniProfiler.Current.Step<UmbracoDefault>("PreInit"))
{
// handle the infamous umbDebugShowTrace, etc
@@ -82,7 +83,7 @@ namespace umbraco
protected override void OnInit(EventArgs e)
{
using (ProfilerResolver.Current.Profiler.Step<UmbracoDefault>("Init"))
using (MiniProfiler.Current.Step<UmbracoDefault>("Init"))
{
base.OnInit(e);
@@ -119,7 +120,7 @@ namespace umbraco
protected override void OnLoad(EventArgs e)
{
using (ProfilerResolver.Current.Profiler.Step<UmbracoDefault>("Load"))
using (MiniProfiler.Current.Step<UmbracoDefault>("Load"))
{
base.OnLoad(e);
@@ -133,7 +134,7 @@ namespace umbraco
protected override void Render(HtmlTextWriter writer)
{
using (ProfilerResolver.Current.Profiler.Step<UmbracoDefault>("Render"))
using (MiniProfiler.Current.Step<UmbracoDefault>("Render"))
{
// do the original rendering

View File

@@ -2,6 +2,7 @@ using System;
using System.Collections;
using System.Web;
using System.Xml;
using StackExchange.Profiling;
using Umbraco.Core;
using Umbraco.Core.Models;
using Umbraco.Core.Profiling;
@@ -98,7 +99,7 @@ namespace umbraco
/// <returns></returns>
private string GetRecursiveValueLegacy(IDictionary elements)
{
using (ProfilerResolver.Current.Profiler.Step<item>("Checking recusively"))
using (MiniProfiler.Current.Step<item>("Checking recusively"))
{
var content = "";
@@ -130,7 +131,7 @@ namespace umbraco
private void ParseItem(IDictionary attributes)
{
using (ProfilerResolver.Current.Profiler.Step<item>("Start parsing " + _fieldName))
using (MiniProfiler.Current.Step<item>("Start parsing " + _fieldName))
{
HttpContext.Current.Trace.Write("item", "Start parsing '" + _fieldName + "'");
if (helper.FindAttribute(attributes, "textIfEmpty") != "" && _fieldContent == "")

View File

@@ -17,6 +17,7 @@ using System.Web.UI.WebControls;
using System.Xml;
using System.Xml.XPath;
using System.Xml.Xsl;
using StackExchange.Profiling;
using Umbraco.Core;
using Umbraco.Core.Cache;
using Umbraco.Core.Events;
@@ -235,7 +236,7 @@ namespace umbraco
? string.Format("Render Inline Macro, Cache: {0})", Model.CacheDuration)
: string.Format("Render Macro: {0}, type: {1}, cache: {2})", Name, Model.MacroType, Model.CacheDuration);
using (ProfilerResolver.Current.Profiler.Step<macro>(macroInfo))
using (MiniProfiler.Current.Step<macro>(macroInfo))
{
TraceInfo("renderMacro", macroInfo);
@@ -281,7 +282,7 @@ namespace umbraco
return GetControlForErrorBehavior("Error loading Partial View script (file: " + ScriptFile + ")", macroErrorEventArgs);
};
using (ProfilerResolver.Current.Profiler.Step<macro>("Executing Partial View: " + Model.TypeName))
using (MiniProfiler.Current.Step<macro>("Executing Partial View: " + Model.TypeName))
{
TraceInfo("umbracoMacro", "Partial View added (" + Model.TypeName + ")");
try
@@ -317,7 +318,7 @@ namespace umbraco
}
case (int) MacroTypes.UserControl:
using (ProfilerResolver.Current.Profiler.Step<macro>("Executing UserControl: " + Model.TypeName))
using (MiniProfiler.Current.Step<macro>("Executing UserControl: " + Model.TypeName))
{
try
{
@@ -361,7 +362,7 @@ namespace umbraco
case (int) MacroTypes.CustomControl:
using (ProfilerResolver.Current.Profiler.Step<macro>("Executing CustomControl: " + Model.TypeName + "." + Model.TypeAssembly))
using (MiniProfiler.Current.Step<macro>("Executing CustomControl: " + Model.TypeName + "." + Model.TypeAssembly))
{
try
{
@@ -423,7 +424,7 @@ namespace umbraco
return GetControlForErrorBehavior("Error loading MacroEngine script (file: " + ScriptFile + ")", macroErrorEventArgs);
};
using (ProfilerResolver.Current.Profiler.Step<macro>("Executing MacroEngineScript: " + ScriptFile))
using (MiniProfiler.Current.Step<macro>("Executing MacroEngineScript: " + ScriptFile))
{
try
{
@@ -500,7 +501,7 @@ namespace umbraco
{
string dateAddedCacheKey;
using (ProfilerResolver.Current.Profiler.Step<macro>("Saving MacroContent To Cache: " + Model.CacheIdentifier))
using (MiniProfiler.Current.Step<macro>("Saving MacroContent To Cache: " + Model.CacheIdentifier))
{
// NH: Scripts and XSLT can be generated as strings, but not controls as page events wouldn't be hit (such as Page_Load, etc)
@@ -830,7 +831,7 @@ namespace umbraco
return new LiteralControl(string.Empty);
}
using (ProfilerResolver.Current.Profiler.Step<macro>("Executing XSLT: " + XsltFile))
using (MiniProfiler.Current.Step<macro>("Executing XSLT: " + XsltFile))
{
XmlDocument macroXml = null;
@@ -859,7 +860,7 @@ namespace umbraco
{
var xsltFile = getXslt(XsltFile);
using (ProfilerResolver.Current.Profiler.Step<macro>("Performing transformation"))
using (MiniProfiler.Current.Step<macro>("Performing transformation"))
{
try
{
@@ -1681,8 +1682,8 @@ namespace umbraco
//Trace out to profiling... doesn't actually profile, just for informational output.
if (excludeProfiling == false)
{
//NOTE: we cannot even do this since it throws an exception, need to use using clause: ProfilerResolver.Current.Profiler.Step(message).Dispose();
using (ProfilerResolver.Current.Profiler.Step(string.Format("{0}, Error: {1}", message, ex)))
//NOTE: we cannot even do this since it throws an exception, need to use using clause: MiniProfiler.Current.Step(message).Dispose();
using (MiniProfiler.Current.Step(string.Format("{0}, Error: {1}", message, ex)))
{
}
}

View File

@@ -1,6 +1,7 @@
using System;
using System.Diagnostics;
using System.Web.UI;
using StackExchange.Profiling;
using Umbraco.Core.Profiling;
using umbraco.presentation.LiveEditing;
using umbraco.presentation.LiveEditing.Controls;
@@ -40,7 +41,7 @@ namespace umbraco.presentation.masterpages
base.Render(new HtmlTextWriter(baseWriter));
var baseOutput = baseWriter.ToString();
baseOutput = baseOutput.Replace("</body>", ProfilerResolver.Current.Profiler.Render() + "</body>");
baseOutput = baseOutput.Replace("</body>", MiniProfiler.RenderIncludes() + "</body>");
writer.Write(baseOutput);
}

View File

@@ -7,6 +7,7 @@ using System.Web.UI.WebControls;
//This is only in case an upgrade goes wrong and the the /masterpages/ files are not copied over
//which would result in an error. so we have kept the old namespaces intact with references to new ones
using StackExchange.Profiling;
using Umbraco.Core.Profiling;
using mp = umbraco.presentation.masterpages;
namespace umbraco.presentation.umbraco.masterpages
@@ -42,7 +43,7 @@ namespace umbraco.presentation.masterpages
// profiling
if (string.IsNullOrEmpty(Request.QueryString["umbDebug"]) == false && GlobalSettings.DebugMode)
{
baseOutput = baseOutput.Replace("</body>", ProfilerResolver.Current.Profiler.Render() + "</body>");
baseOutput = baseOutput.Replace("</body>", MiniProfiler.RenderIncludes() + "</body>");
}

View File

@@ -8,6 +8,7 @@ using System.Web;
using System.Web.Caching;
using System.Web.UI;
using System.Xml;
using StackExchange.Profiling;
using Umbraco.Core;
using Umbraco.Core.Cache;
using Umbraco.Core.Macros;
@@ -134,7 +135,7 @@ namespace umbraco.presentation.templateControls
/// <param name="item">The item.</param>
public virtual void Load(Item item)
{
using (ProfilerResolver.Current.Profiler.Step<ItemRenderer>(string.Format("Item: {0}", item.Field)))
using (MiniProfiler.Current.Step<ItemRenderer>(string.Format("Item: {0}", item.Field)))
{
ParseMacros(item);
}
@@ -152,7 +153,7 @@ namespace umbraco.presentation.templateControls
string elementText = GetFieldContents(item);
using (ProfilerResolver.Current.Profiler.Step<ItemRenderer>("Parsing Macros"))
using (MiniProfiler.Current.Step<ItemRenderer>("Parsing Macros"))
{
MacroTagParser.ParseMacros(