diff --git a/src/Umbraco.Core/CoreBootManager.cs b/src/Umbraco.Core/CoreBootManager.cs index e5dc8240a7..419f9cd873 100644 --- a/src/Umbraco.Core/CoreBootManager.cs +++ b/src/Umbraco.Core/CoreBootManager.cs @@ -187,6 +187,9 @@ namespace Umbraco.Core /// 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()); diff --git a/src/Umbraco.Core/Profiling/IProfiler.cs b/src/Umbraco.Core/Profiling/IProfiler.cs index 12e6e6714f..720c71b555 100644 --- a/src/Umbraco.Core/Profiling/IProfiler.cs +++ b/src/Umbraco.Core/Profiling/IProfiler.cs @@ -1,44 +1,44 @@ -//using System; +using System; -//namespace Umbraco.Core.Profiling -//{ -// /// -// /// Defines an object for use in the application to profile operations -// /// -// public interface IProfiler -// { - -// /// -// /// Render the UI to display the profiler -// /// -// /// -// /// -// /// Generally used for HTML displays -// /// -// string Render(); +namespace Umbraco.Core.Profiling +{ + /// + /// Defines an object for use in the application to profile operations + /// + internal interface IProfiler + { -// /// -// /// Profile a step -// /// -// /// -// /// -// /// -// /// Use the 'using(' syntax -// /// -// IDisposable Step(string name); + /// + /// Render the UI to display the profiler + /// + /// + /// + /// Generally used for HTML displays + /// + string Render(); -// /// -// /// Start the profiler -// /// -// void Start(); + /// + /// Profile a step + /// + /// + /// + /// + /// Use the 'using(' syntax + /// + IDisposable Step(string name); -// /// -// /// Start the profiler -// /// -// /// -// /// 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. -// /// -// void Stop(bool discardResults = false); -// } -//} \ No newline at end of file + /// + /// Start the profiler + /// + void Start(); + + /// + /// Start the profiler + /// + /// + /// 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. + /// + void Stop(bool discardResults = false); + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Profiling/LogProfiler.cs b/src/Umbraco.Core/Profiling/LogProfiler.cs index 22b35f4de5..fbcb21988a 100644 --- a/src/Umbraco.Core/Profiling/LogProfiler.cs +++ b/src/Umbraco.Core/Profiling/LogProfiler.cs @@ -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 -//{ -// /// -// /// A profiler that outputs its results to the LogHelper -// /// -// public class LogProfiler : IProfiler -// { -// public string Render() -// { -// return string.Empty; -// } +namespace Umbraco.Core.Profiling +{ + /// + /// A profiler that outputs its results to the LogHelper + /// + internal 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 + } + } +} diff --git a/src/Umbraco.Core/Profiling/MiniProfilerExtensions.cs b/src/Umbraco.Core/Profiling/ProfilerExtensions.cs similarity index 56% rename from src/Umbraco.Core/Profiling/MiniProfilerExtensions.cs rename to src/Umbraco.Core/Profiling/ProfilerExtensions.cs index 8eb8a2ba63..16b8ab3e96 100644 --- a/src/Umbraco.Core/Profiling/MiniProfilerExtensions.cs +++ b/src/Umbraco.Core/Profiling/ProfilerExtensions.cs @@ -1,9 +1,8 @@ using System; -using StackExchange.Profiling; namespace Umbraco.Core.Profiling { - public static class MiniProfilerExtensions + internal static class ProfilerExtensions { /// /// Writes out a step prefixed with the type @@ -12,9 +11,9 @@ namespace Umbraco.Core.Profiling /// /// /// - public static IDisposable Step(this MiniProfiler profiler, string name) + internal static IDisposable Step(this IProfiler profiler, string name) { - return profiler.Step(string.Format("[" + typeof (T).Name + "] " + name)); + return profiler.Step(string.Format(typeof(T).Name + ", " + name)); } } } \ No newline at end of file diff --git a/src/Umbraco.Core/Profiling/ProfilerResolver.cs b/src/Umbraco.Core/Profiling/ProfilerResolver.cs index 92009967f2..82374a298d 100644 --- a/src/Umbraco.Core/Profiling/ProfilerResolver.cs +++ b/src/Umbraco.Core/Profiling/ProfilerResolver.cs @@ -1,37 +1,37 @@ -//using Umbraco.Core.ObjectResolution; +using Umbraco.Core.ObjectResolution; -//namespace Umbraco.Core.Profiling -//{ -// /// -// /// A resolver exposing the current profiler -// /// -// public class ProfilerResolver : SingleObjectResolverBase -// { -// /// -// /// Constructor -// /// -// /// -// public ProfilerResolver(IProfiler profiler) -// : base(profiler) -// { - -// } +namespace Umbraco.Core.Profiling +{ + /// + /// A resolver exposing the current profiler + /// + internal class ProfilerResolver : SingleObjectResolverBase + { + /// + /// Constructor + /// + /// + public ProfilerResolver(IProfiler profiler) + : base(profiler) + { -// /// -// /// Method allowing to change the profiler during startup -// /// -// /// -// internal void SetProfiler(IProfiler profiler) -// { -// Value = profiler; -// } + } -// /// -// /// Gets the current profiler -// /// -// public IProfiler Profiler -// { -// get { return Value; } -// } -// } -//} \ No newline at end of file + /// + /// Method allowing to change the profiler during startup + /// + /// + internal void SetProfiler(IProfiler profiler) + { + Value = profiler; + } + + /// + /// Gets the current profiler + /// + public IProfiler Profiler + { + get { return Value; } + } + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Profiling/WebProfiler.cs b/src/Umbraco.Core/Profiling/WebProfiler.cs index 1c1d40cd45..56918ff349 100644 --- a/src/Umbraco.Core/Profiling/WebProfiler.cs +++ b/src/Umbraco.Core/Profiling/WebProfiler.cs @@ -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 -//{ -// /// -// /// A profiler used for web based activity based on the MiniProfiler framework -// /// -// public class WebProfiler : IProfiler -// { +namespace Umbraco.Core.Profiling +{ + /// + /// A profiler used for web based activity based on the MiniProfiler framework + /// + internal class WebProfiler : IProfiler + { -// /// -// /// Constructor -// /// -// /// -// /// Binds to application events to enable the MiniProfiler -// /// -// internal WebProfiler() -// { -// UmbracoApplicationBase.ApplicationInit += UmbracoApplicationApplicationInit; -// } + /// + /// Constructor + /// + /// + /// Binds to application events to enable the MiniProfiler + /// + internal WebProfiler() + { + UmbracoApplicationBase.ApplicationInit += UmbracoApplicationApplicationInit; + } -// /// -// /// Handle the Init event o fthe UmbracoApplication which allows us to subscribe to the HttpApplication events -// /// -// /// -// /// -// void UmbracoApplicationApplicationInit(object sender, EventArgs e) -// { -// var app = sender as HttpApplication; -// if (app == null) return; + /// + /// Handle the Init event o fthe UmbracoApplication which allows us to subscribe to the HttpApplication events + /// + /// + /// + 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("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("Cannot start the WebProfiler since the application is running in Medium trust"); + } + else + { + app.BeginRequest += UmbracoApplicationBeginRequest; + app.EndRequest += UmbracoApplicationEndRequest; + } + } -// /// -// /// Handle the begin request event -// /// -// /// -// /// -// 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(); -// } -// } + /// + /// Handle the begin request event + /// + /// + /// + 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(); + } + } -// /// -// /// Handle the end request event -// /// -// /// -// /// -// 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(); -// } -// } + /// + /// Handle the end request event + /// + /// + /// + 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(); + } + } -// /// -// /// Render the UI to display the profiler -// /// -// /// -// /// -// /// Generally used for HTML displays -// /// -// public string Render() -// { -// return MiniProfiler.RenderIncludes().ToString(); -// } + /// + /// Render the UI to display the profiler + /// + /// + /// + /// Generally used for HTML displays + /// + public string Render() + { + return MiniProfiler.RenderIncludes().ToString(); + } -// /// -// /// Profile a step -// /// -// /// -// /// -// /// -// /// Use the 'using(' syntax -// /// -// public IDisposable Step(string name) -// { -// if (GlobalSettings.DebugMode == false) return null; + /// + /// Profile a step + /// + /// + /// + /// + /// Use the 'using(' syntax + /// + public IDisposable Step(string name) + { + if (GlobalSettings.DebugMode == false) return null; -// return MiniProfiler.Current.Step(name); -// } + return MiniProfiler.Current.Step(name); + } -// /// -// /// Start the profiler -// /// -// public void Start() -// { -// if (GlobalSettings.DebugMode == false) return; -// //will not run in medium trust -// if (SystemUtilities.GetCurrentTrustLevel() < AspNetHostingPermissionLevel.High) return; + /// + /// Start the profiler + /// + public void Start() + { + if (GlobalSettings.DebugMode == false) return; + //will not run in medium trust + if (SystemUtilities.GetCurrentTrustLevel() < AspNetHostingPermissionLevel.High) return; -// MiniProfiler.Start(); -// } + MiniProfiler.Start(); + } -// /// -// /// Start the profiler -// /// -// /// -// /// 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. -// /// -// public void Stop(bool discardResults = false) -// { -// if (GlobalSettings.DebugMode == false) return; -// //will not run in medium trust -// if (SystemUtilities.GetCurrentTrustLevel() < AspNetHostingPermissionLevel.High) return; + /// + /// Start the profiler + /// + /// + /// 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. + /// + 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); + } -// /// -// /// Gets the request object from the app instance if it is available -// /// -// /// The application object -// /// -// private Attempt TryGetRequest(object sender) -// { -// var app = sender as HttpApplication; -// if (app == null) return Attempt.False; + /// + /// Gets the request object from the app instance if it is available + /// + /// The application object + /// + private Attempt TryGetRequest(object sender) + { + var app = sender as HttpApplication; + if (app == null) return Attempt.False; -// try -// { -// var req = app.Request; -// return new Attempt(true, new HttpRequestWrapper(req)); -// } -// catch (HttpException ex) -// { -// return new Attempt(ex); -// } -// } + try + { + var req = app.Request; + return new Attempt(true, new HttpRequestWrapper(req)); + } + catch (HttpException ex) + { + return new Attempt(ex); + } + } -// } -//} \ No newline at end of file + } +} \ No newline at end of file diff --git a/src/Umbraco.Core/Umbraco.Core.csproj b/src/Umbraco.Core/Umbraco.Core.csproj index 6f23a9f69e..7ba29b88d2 100644 --- a/src/Umbraco.Core/Umbraco.Core.csproj +++ b/src/Umbraco.Core/Umbraco.Core.csproj @@ -525,7 +525,7 @@ - + diff --git a/src/Umbraco.Core/UmbracoApplicationBase.cs b/src/Umbraco.Core/UmbracoApplicationBase.cs index 8cedd54bc9..eef1aa2215 100644 --- a/src/Umbraco.Core/UmbracoApplicationBase.cs +++ b/src/Umbraco.Core/UmbracoApplicationBase.cs @@ -25,6 +25,11 @@ namespace Umbraco.Core public static event EventHandler ApplicationStarting; public static event EventHandler ApplicationStarted; + /// + /// Called when the HttpApplication.Init() is fired, allows developers to subscribe to the HttpApplication events + /// + public static event EventHandler ApplicationInit; + /// /// Boots up the Umbraco application /// @@ -48,49 +53,17 @@ 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("Cannot use the MiniProfiler since the application is running in Medium trust"); - } } /// - /// Initializes the mini profiler for the request + /// Override init and raise the event /// - protected void Application_BeginRequest() + public override void Init() { - 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(); - } + base.Init(); + OnApplicationInit(this, new EventArgs()); } - /// - /// Closes the mini profiler for the request - /// - 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(); - } - } - - /// /// Developers can override this method to modify objects on startup /// @@ -112,7 +85,18 @@ namespace Umbraco.Core if (ApplicationStarted != null) ApplicationStarted(sender, e); } - + + /// + /// Called to raise the ApplicationInit event + /// + /// + /// + private void OnApplicationInit(object sender, EventArgs e) + { + if (ApplicationInit != null) + ApplicationInit(sender, e); + } + /// /// A method that can be overridden to invoke code when the application has an error. /// @@ -162,22 +146,5 @@ namespace Umbraco.Core protected abstract IBootManager GetBootManager(); - /// - /// Gets the request object from the app instance if it is available - /// - /// - private Attempt TryGetRequest() - { - try - { - var req = Request; - return new Attempt(true, new HttpRequestWrapper(req)); - } - catch (HttpException ex) - { - return new Attempt(ex); - } - } - } } diff --git a/src/Umbraco.Web.UI/umbraco/umbraco.aspx b/src/Umbraco.Web.UI/umbraco/umbraco.aspx index 4a9490b049..6f6ec216e9 100644 --- a/src/Umbraco.Web.UI/umbraco/umbraco.aspx +++ b/src/Umbraco.Web.UI/umbraco/umbraco.aspx @@ -6,6 +6,7 @@ <%@ Register Src="controls/Tree/TreeControl.ascx" TagName="TreeControl" TagPrefix="umbraco" %> <%@ Import Namespace="StackExchange.Profiling" %> <%@ Import Namespace="Umbraco.Core.Profiling" %> +<%@ Import Namespace="Umbraco.Web" %> <%@ Register TagPrefix="cc1" Namespace="umbraco.uicontrols" Assembly="controls" %> <%@ Register TagPrefix="uc1" TagName="quickSearch" Src="Search/QuickSearch.ascx" %> <%@ Register TagPrefix="umb" Namespace="ClientDependency.Core.Controls" Assembly="ClientDependency.Core" %> @@ -392,7 +393,7 @@ <%if(string.IsNullOrEmpty(Request["umbDebug"]) == false && umbraco.GlobalSettings.DebugMode) { - Response.Write(MiniProfiler.RenderIncludes()); + Response.Write(Html.RenderProfiler()); }%> diff --git a/src/Umbraco.Web/HtmlHelperRenderExtensions.cs b/src/Umbraco.Web/HtmlHelperRenderExtensions.cs index 2fa8300d46..ecccd126a0 100644 --- a/src/Umbraco.Web/HtmlHelperRenderExtensions.cs +++ b/src/Umbraco.Web/HtmlHelperRenderExtensions.cs @@ -10,17 +10,29 @@ using System.Web.Routing; using Umbraco.Core; using Umbraco.Core.Dynamics; using Umbraco.Core.IO; +using Umbraco.Core.Profiling; using Umbraco.Web.Mvc; using umbraco; using umbraco.cms.businesslogic.member; namespace Umbraco.Web { - /// + + /// /// HtmlHelper extensions for use in templates /// public static class HtmlHelperRenderExtensions { + /// + /// Renders the markup for the profiler + /// + /// + /// + public static IHtmlString RenderProfiler(this HtmlHelper helper) + { + return new HtmlString(ProfilerResolver.Current.Profiler.Render()); + } + /// /// Renders a partial view that is found in the specified area /// diff --git a/src/Umbraco.Web/Mvc/UmbracoTemplatePage.cs b/src/Umbraco.Web/Mvc/UmbracoTemplatePage.cs index 9ba2f6e92c..7c5d23ae74 100644 --- a/src/Umbraco.Web/Mvc/UmbracoTemplatePage.cs +++ b/src/Umbraco.Web/Mvc/UmbracoTemplatePage.cs @@ -95,7 +95,7 @@ namespace Umbraco.Web.Mvc } else { - var profilerMarkup = MiniProfiler.RenderIncludes(); + var profilerMarkup = this.Html.RenderProfiler(); text = text.Substring(0, pos) + profilerMarkup + text.Substring(pos, text.Length - pos); } base.WriteLiteral(text); diff --git a/src/Umbraco.Web/UI/Pages/BasePage.cs b/src/Umbraco.Web/UI/Pages/BasePage.cs index fd18b14e71..4fa198f8b6 100644 --- a/src/Umbraco.Web/UI/Pages/BasePage.cs +++ b/src/Umbraco.Web/UI/Pages/BasePage.cs @@ -54,6 +54,18 @@ namespace Umbraco.Web.UI.Pages get { return _url ?? (_url = new UrlHelper(new RequestContext(new HttpContextWrapper(Context), new RouteData()))); } } + private HtmlHelper _html; + /// + /// Returns a HtmlHelper + /// + /// + /// This html helper is created with an empty context and page so it may not have all of the functionality expected. + /// + public HtmlHelper Html + { + get { return _html ?? (_html = new HtmlHelper(new ViewContext(), new ViewPage())); } + } + /// /// Returns the current ApplicationContext /// diff --git a/src/Umbraco.Web/WebBootManager.cs b/src/Umbraco.Web/WebBootManager.cs index e9315add13..e22554ced8 100644 --- a/src/Umbraco.Web/WebBootManager.cs +++ b/src/Umbraco.Web/WebBootManager.cs @@ -240,6 +240,9 @@ 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)); diff --git a/src/Umbraco.Web/umbraco.presentation/default.aspx.cs b/src/Umbraco.Web/umbraco.presentation/default.aspx.cs index 5405c384f0..29a34965f7 100644 --- a/src/Umbraco.Web/umbraco.presentation/default.aspx.cs +++ b/src/Umbraco.Web/umbraco.presentation/default.aspx.cs @@ -46,7 +46,7 @@ namespace umbraco protected override void OnPreInit(EventArgs e) { base.OnPreInit(e); - using (MiniProfiler.Current.Step("PreInit")) + using (ProfilerResolver.Current.Profiler.Step("PreInit")) { // handle the infamous umbDebugShowTrace, etc @@ -83,7 +83,7 @@ namespace umbraco protected override void OnInit(EventArgs e) { - using (MiniProfiler.Current.Step("Init")) + using (ProfilerResolver.Current.Profiler.Step("Init")) { base.OnInit(e); @@ -120,7 +120,7 @@ namespace umbraco protected override void OnLoad(EventArgs e) { - using (MiniProfiler.Current.Step("Load")) + using (ProfilerResolver.Current.Profiler.Step("Load")) { base.OnLoad(e); @@ -134,7 +134,7 @@ namespace umbraco protected override void Render(HtmlTextWriter writer) { - using (MiniProfiler.Current.Step("Render")) + using (ProfilerResolver.Current.Profiler.Step("Render")) { // do the original rendering diff --git a/src/Umbraco.Web/umbraco.presentation/item.cs b/src/Umbraco.Web/umbraco.presentation/item.cs index 9063d154f7..9a0595221b 100644 --- a/src/Umbraco.Web/umbraco.presentation/item.cs +++ b/src/Umbraco.Web/umbraco.presentation/item.cs @@ -99,7 +99,7 @@ namespace umbraco /// private string GetRecursiveValueLegacy(IDictionary elements) { - using (MiniProfiler.Current.Step("Checking recusively")) + using (ProfilerResolver.Current.Profiler.Step("Checking recusively")) { var content = ""; @@ -131,7 +131,7 @@ namespace umbraco private void ParseItem(IDictionary attributes) { - using (MiniProfiler.Current.Step("Start parsing " + _fieldName)) + using (ProfilerResolver.Current.Profiler.Step("Start parsing " + _fieldName)) { HttpContext.Current.Trace.Write("item", "Start parsing '" + _fieldName + "'"); if (helper.FindAttribute(attributes, "textIfEmpty") != "" && _fieldContent == "") diff --git a/src/Umbraco.Web/umbraco.presentation/macro.cs b/src/Umbraco.Web/umbraco.presentation/macro.cs index 5225163527..9191ae7350 100644 --- a/src/Umbraco.Web/umbraco.presentation/macro.cs +++ b/src/Umbraco.Web/umbraco.presentation/macro.cs @@ -236,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 (MiniProfiler.Current.Step(macroInfo)) + using (ProfilerResolver.Current.Profiler.Step(macroInfo)) { TraceInfo("renderMacro", macroInfo); @@ -282,7 +282,7 @@ namespace umbraco return GetControlForErrorBehavior("Error loading Partial View script (file: " + ScriptFile + ")", macroErrorEventArgs); }; - using (MiniProfiler.Current.Step("Executing Partial View: " + Model.TypeName)) + using (ProfilerResolver.Current.Profiler.Step("Executing Partial View: " + Model.TypeName)) { TraceInfo("umbracoMacro", "Partial View added (" + Model.TypeName + ")"); try @@ -318,7 +318,7 @@ namespace umbraco } case (int) MacroTypes.UserControl: - using (MiniProfiler.Current.Step("Executing UserControl: " + Model.TypeName)) + using (ProfilerResolver.Current.Profiler.Step("Executing UserControl: " + Model.TypeName)) { try { @@ -362,7 +362,7 @@ namespace umbraco case (int) MacroTypes.CustomControl: - using (MiniProfiler.Current.Step("Executing CustomControl: " + Model.TypeName + "." + Model.TypeAssembly)) + using (ProfilerResolver.Current.Profiler.Step("Executing CustomControl: " + Model.TypeName + "." + Model.TypeAssembly)) { try { @@ -424,7 +424,7 @@ namespace umbraco return GetControlForErrorBehavior("Error loading MacroEngine script (file: " + ScriptFile + ")", macroErrorEventArgs); }; - using (MiniProfiler.Current.Step("Executing MacroEngineScript: " + ScriptFile)) + using (ProfilerResolver.Current.Profiler.Step("Executing MacroEngineScript: " + ScriptFile)) { try { @@ -501,7 +501,7 @@ namespace umbraco { string dateAddedCacheKey; - using (MiniProfiler.Current.Step("Saving MacroContent To Cache: " + Model.CacheIdentifier)) + using (ProfilerResolver.Current.Profiler.Step("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) @@ -831,7 +831,7 @@ namespace umbraco return new LiteralControl(string.Empty); } - using (MiniProfiler.Current.Step("Executing XSLT: " + XsltFile)) + using (ProfilerResolver.Current.Profiler.Step("Executing XSLT: " + XsltFile)) { XmlDocument macroXml = null; @@ -860,7 +860,7 @@ namespace umbraco { var xsltFile = getXslt(XsltFile); - using (MiniProfiler.Current.Step("Performing transformation")) + using (ProfilerResolver.Current.Profiler.Step("Performing transformation")) { try { diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/masterpages/default.Master.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/masterpages/default.Master.cs index c37e2b6cdf..2bb660c817 100644 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/masterpages/default.Master.cs +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/masterpages/default.Master.cs @@ -1,8 +1,10 @@ using System; using System.Diagnostics; +using System.Web.Mvc; using System.Web.UI; using StackExchange.Profiling; using Umbraco.Core.Profiling; +using Umbraco.Web; using umbraco.presentation.LiveEditing; using umbraco.presentation.LiveEditing.Controls; using System.IO; @@ -41,7 +43,8 @@ namespace umbraco.presentation.masterpages base.Render(new HtmlTextWriter(baseWriter)); var baseOutput = baseWriter.ToString(); - baseOutput = baseOutput.Replace("", MiniProfiler.RenderIncludes() + ""); + var htmlHelper = new HtmlHelper(new ViewContext(), new ViewPage()); + baseOutput = baseOutput.Replace("", htmlHelper.RenderProfiler() + ""); writer.Write(baseOutput); } diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/masterpages/umbracoPage.Master.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/masterpages/umbracoPage.Master.cs index fe412b2adb..e3d6bfe82a 100644 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/masterpages/umbracoPage.Master.cs +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/masterpages/umbracoPage.Master.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.IO; using System.Web; +using System.Web.Mvc; using System.Web.UI; using System.Web.UI.WebControls; @@ -9,6 +10,7 @@ using System.Web.UI.WebControls; //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 Umbraco.Web; using mp = umbraco.presentation.masterpages; namespace umbraco.presentation.umbraco.masterpages { @@ -43,10 +45,10 @@ namespace umbraco.presentation.masterpages // profiling if (string.IsNullOrEmpty(Request.QueryString["umbDebug"]) == false && GlobalSettings.DebugMode) { - baseOutput = baseOutput.Replace("", MiniProfiler.RenderIncludes() + ""); + var htmlHelper = new HtmlHelper(new ViewContext(), new ViewPage()); + baseOutput = baseOutput.Replace("", htmlHelper.RenderProfiler() + ""); } - // write modified output writer.Write(baseOutput); } diff --git a/src/Umbraco.Web/umbraco.presentation/umbraco/templateControls/ItemRenderer.cs b/src/Umbraco.Web/umbraco.presentation/umbraco/templateControls/ItemRenderer.cs index 1f918a8011..75b51bb029 100644 --- a/src/Umbraco.Web/umbraco.presentation/umbraco/templateControls/ItemRenderer.cs +++ b/src/Umbraco.Web/umbraco.presentation/umbraco/templateControls/ItemRenderer.cs @@ -135,7 +135,7 @@ namespace umbraco.presentation.templateControls /// The item. public virtual void Load(Item item) { - using (MiniProfiler.Current.Step(string.Format("Item: {0}", item.Field))) + using (ProfilerResolver.Current.Profiler.Step(string.Format("Item: {0}", item.Field))) { ParseMacros(item); } @@ -153,7 +153,7 @@ namespace umbraco.presentation.templateControls string elementText = GetFieldContents(item); - using (MiniProfiler.Current.Step("Parsing Macros")) + using (ProfilerResolver.Current.Profiler.Step("Parsing Macros")) { MacroTagParser.ParseMacros(