예제 #1
0
 private DataPipelineManager GetOrCreatePipelineManager(Microsoft.ReportingServices.ReportIntermediateFormat.DataSet dataSet, IRIFReportDataScope targetScope)
 {
     if (m_pipelineManager != null)
     {
         if (m_pipelineManager.DataSetIndex == dataSet.IndexInCollection)
         {
             return(m_pipelineManager);
         }
         if (m_odpContext.IsTablixProcessingComplete(dataSet.IndexInCollection))
         {
             Global.Tracer.Trace(TraceLevel.Verbose, "Performance: While rendering the report: '{0}' the data set {1} was processed multiple times due to rendering traversal order.", m_odpContext.ReportContext.ItemPathAsString.MarkAsPrivate(), dataSet.Name.MarkAsPrivate());
         }
         CleanupPipelineManager();
         ShutdownSequentialReadersAndIdcDataManagers();
     }
     if (dataSet.AllowIncrementalProcessing)
     {
         m_pipelineManager = new IncrementalDataPipelineManager(m_odpContext, dataSet);
     }
     else
     {
         m_pipelineManager = new StreamingAtomicDataPipelineManager(m_odpContext, dataSet);
     }
     m_pipelineThrottle = new DataPipelineThrottle();
     m_pipelineThrottle.StartUsingContext(PipelineAdvanceMode.ToStoppingScopeInstance, targetScope);
     m_pipelineManager.StartProcessing();
     m_pipelineThrottle.StopUsingContext();
     TryProcessToNextScopeInstance(targetScope);
     return(m_pipelineManager);
 }
예제 #2
0
        private bool AdvanceDataPipeline(IRIFReportDataScope reportDataScope, PipelineAdvanceMode pipelineMode)
        {
            m_lastOnDemandScopeInstance = null;
            DataPipelineThrottle pipelineThrottle = SetupUsablePipelineContextWithBackup();

            m_pipelineThrottle.StartUsingContext(pipelineMode, reportDataScope);
            bool isTablixProcessingMode = m_odpContext.IsTablixProcessingMode;
            bool num = m_odpContext.ExecutionLogContext.TryStartTablixProcessingTimer();

            m_odpContext.IsTablixProcessingMode = true;
            if (reportDataScope.DataScopeInfo.DataPipelineID != m_pipelineManager.DataSetIndex)
            {
                m_odpContext.StateManager.GetIdcDataManager(reportDataScope).Advance();
            }
            else
            {
                m_pipelineManager.Advance();
            }
            m_odpContext.IsTablixProcessingMode = isTablixProcessingMode;
            if (num)
            {
                m_odpContext.ExecutionLogContext.StopTablixProcessingTimer();
            }
            bool result = m_pipelineThrottle.StopUsingContext();

            m_pipelineThrottle = pipelineThrottle;
            return(result);
        }
        private DataPipelineThrottle SetupUsablePipelineContextWithBackup()
        {
            if (this.m_pipelineThrottle == null)
            {
                this.m_pipelineThrottle = new DataPipelineThrottle();
            }
            DataPipelineThrottle pipelineThrottle = this.m_pipelineThrottle;

            if (this.m_pipelineThrottle.InUse)
            {
                if (this.m_pipelineThrottle2 == null)
                {
                    this.m_pipelineThrottle2 = new DataPipelineThrottle();
                }
                if (this.m_pipelineThrottle2.InUse)
                {
                    this.m_pipelineThrottle = new DataPipelineThrottle();
                }
                else
                {
                    this.m_pipelineThrottle = this.m_pipelineThrottle2;
                }
            }
            return(pipelineThrottle);
        }
예제 #4
0
        private DataPipelineThrottle SetupUsablePipelineContextWithBackup()
        {
            if (m_pipelineThrottle == null)
            {
                m_pipelineThrottle = new DataPipelineThrottle();
            }
            DataPipelineThrottle pipelineThrottle = m_pipelineThrottle;

            if (m_pipelineThrottle.InUse)
            {
                if (m_pipelineThrottle2 == null)
                {
                    m_pipelineThrottle2 = new DataPipelineThrottle();
                }
                if (m_pipelineThrottle2.InUse)
                {
                    m_pipelineThrottle = new DataPipelineThrottle();
                    return(pipelineThrottle);
                }
                m_pipelineThrottle = m_pipelineThrottle2;
            }
            return(pipelineThrottle);
        }