From b6f52bf78226de398e767e6a7add7f44b1d5d283 Mon Sep 17 00:00:00 2001 From: Shannon Deminick Date: Mon, 13 May 2013 20:10:28 -1000 Subject: [PATCH] Changed the profiler over to use resolvers again. We no longer will call MiniProfiler directly. Added an HtmlHelper extension which is used to render the profiler html output. Added an HtmlHelper property to the new base page too. --- src/Umbraco.Core/CoreBootManager.cs | 3 + src/Umbraco.Core/Profiling/IProfiler.cs | 80 ++--- src/Umbraco.Core/Profiling/LogProfiler.cs | 62 ++-- ...lerExtensions.cs => ProfilerExtensions.cs} | 7 +- .../Profiling/ProfilerResolver.cs | 68 ++-- src/Umbraco.Core/Profiling/WebProfiler.cs | 290 +++++++++--------- src/Umbraco.Core/Umbraco.Core.csproj | 2 +- src/Umbraco.Core/UmbracoApplicationBase.cs | 75 ++--- src/Umbraco.Web.UI/umbraco/umbraco.aspx | 3 +- src/Umbraco.Web/HtmlHelperRenderExtensions.cs | 14 +- src/Umbraco.Web/Mvc/UmbracoTemplatePage.cs | 2 +- src/Umbraco.Web/UI/Pages/BasePage.cs | 12 + src/Umbraco.Web/WebBootManager.cs | 3 + .../umbraco.presentation/default.aspx.cs | 8 +- src/Umbraco.Web/umbraco.presentation/item.cs | 4 +- src/Umbraco.Web/umbraco.presentation/macro.cs | 16 +- .../umbraco/masterpages/default.Master.cs | 5 +- .../umbraco/masterpages/umbracoPage.Master.cs | 6 +- .../umbraco/templateControls/ItemRenderer.cs | 4 +- 19 files changed, 333 insertions(+), 331 deletions(-) rename src/Umbraco.Core/Profiling/{MiniProfilerExtensions.cs => ProfilerExtensions.cs} (56%) 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(