/// <summary>
        /// Called after processor is called.
        /// </summary>
        /// <param name="sender">The sender.</param>
        /// <param name="args">The <see cref="RuntimeProcessorCallEventArgs" /> instance containing the event data.</param>
        protected virtual void OnAfterPipelineProcessorCalled(object sender, RuntimeProcessorCallEventArgs args)
        {
            lock (this)
            {
                if (this.pipelineCalls == null)
                {
                    this.pipelineCalls = new List <RuntimePipelineCall>();
                }

                if (this.executingPipelines == null)
                {
                    this.executingPipelines = new Stack <RuntimePipelineCall>();
                }

                if (args.ProcessorIndex == 0)
                {
                    RuntimePipelineCall pipelineCall = new RuntimePipelineCall(args.PipelineName, args.PipelineDomain, args.PipelineArgs);

                    this.pipelineCalls.Add(pipelineCall);
                    this.executingPipelines.Push(pipelineCall);
                }

                if (string.IsNullOrEmpty(args.ProcessorDefinition.Type) && string.IsNullOrEmpty(args.ProcessorDefinition.TypeReference))
                {
                    this.executingPipelines.Pop();
                }
                else
                {
                    this.executingPipelines.Peek().ProcessorCalls.Add(args.ProcessorDefinition);
                }
            }
        }
    /// <summary>
    /// Called after processor is called.
    /// </summary>
    /// <param name="sender">The sender.</param>
    /// <param name="args">The <see cref="RuntimeProcessorCallEventArgs" /> instance containing the event data.</param>
    protected virtual void OnAfterPipelineProcessorCalled(object sender, RuntimeProcessorCallEventArgs args)
    {
      lock (this)
      {
        if (this.pipelineCalls == null)
        {
          this.pipelineCalls = new List<RuntimePipelineCall>();
        }

        if (this.executingPipelines == null)
        {
          this.executingPipelines = new Stack<RuntimePipelineCall>();
        }

        if (args.ProcessorIndex == 0)
        {
          RuntimePipelineCall pipelineCall = new RuntimePipelineCall(args.PipelineName, args.PipelineDomain, args.PipelineArgs);

          this.pipelineCalls.Add(pipelineCall);
          this.executingPipelines.Push(pipelineCall);
        }

        if (string.IsNullOrEmpty(args.ProcessorDefinition.Type) && string.IsNullOrEmpty(args.ProcessorDefinition.TypeReference))
        {
          this.executingPipelines.Pop();
        }
        else
        {
          this.executingPipelines.Peek().ProcessorCalls.Add(args.ProcessorDefinition);
        }
      }
    }