1 //---------------------------------------------------------------------
2 // <copyright file="ConfigViewGenerator.cs" company="Microsoft">
3 // Copyright (c) Microsoft Corporation. All rights reserved.
7 // @backupOwner Microsoft
8 //---------------------------------------------------------------------
10 using System
.Data
.Common
.Utils
;
12 using System
.Diagnostics
;
14 namespace System
.Data
.Mapping
.ViewGeneration
16 internal enum ViewGenMode
23 internal enum ViewGenTraceLevel
31 internal enum PerfType
49 /// This class holds some configuration information for the view generation code.
51 internal sealed class ConfigViewGenerator
: InternalBase
54 internal ConfigViewGenerator()
56 m_watch
= new Stopwatch();
57 m_singleWatch
= new Stopwatch();
58 int numEnums
= Enum
.GetNames(typeof(PerfType
)).Length
;
59 m_breakdownTimes
= new TimeSpan
[numEnums
];
60 m_traceLevel
= ViewGenTraceLevel
.None
;
61 m_generateUpdateViews
= false;
67 private bool m_generateViewsForEachType
;
68 private ViewGenTraceLevel m_traceLevel
;
69 private readonly TimeSpan
[] m_breakdownTimes
;
70 private Stopwatch m_watch
;
72 /// To measure a single thing at a time.
74 private Stopwatch m_singleWatch
;
76 /// Perf op being measured.
78 private PerfType m_singlePerfOp
;
79 private bool m_enableValidation
= true;
80 private bool m_generateUpdateViews
= true;
81 private bool m_generateEsql
= false;
86 /// If true then view generation will produce eSQL, otherwise CQTs only.
88 internal bool GenerateEsql
90 get { return m_generateEsql; }
91 set { m_generateEsql = value; }
95 /// Callers can set elements in this list.
97 internal TimeSpan
[] BreakdownTimes
99 get { return m_breakdownTimes; }
102 internal ViewGenTraceLevel TraceLevel
104 get { return m_traceLevel; }
105 set { m_traceLevel = value; }
108 [System
.Diagnostics
.CodeAnalysis
.SuppressMessage("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
109 internal bool IsValidationEnabled
111 get { return m_enableValidation; }
112 set { m_enableValidation = value; }
115 internal bool GenerateUpdateViews
117 get { return m_generateUpdateViews; }
118 set { m_generateUpdateViews = value; }
121 internal bool GenerateViewsForEachType
123 get { return m_generateViewsForEachType; }
124 set { m_generateViewsForEachType = value; }
127 internal bool IsViewTracing
129 get { return IsTraceAllowed(ViewGenTraceLevel.ViewsOnly); }
132 internal bool IsNormalTracing
134 get { return IsTraceAllowed(ViewGenTraceLevel.Normal); }
137 internal bool IsVerboseTracing
139 get { return IsTraceAllowed(ViewGenTraceLevel.Verbose); }
144 private void StartWatch()
149 internal void StartSingleWatch(PerfType perfType
)
151 m_singleWatch
.Start();
152 m_singlePerfOp
= perfType
;
156 /// Sets time for <paramref name="perfType"/> for the individual timer.
158 internal void StopSingleWatch(PerfType perfType
)
160 Debug
.Assert(m_singlePerfOp
== perfType
, "Started op for different activity " + m_singlePerfOp
+ " -- not " + perfType
);
161 TimeSpan timeElapsed
= m_singleWatch
.Elapsed
;
162 int index
= (int)perfType
;
163 m_singleWatch
.Stop();
164 m_singleWatch
.Reset();
165 BreakdownTimes
[index
] = BreakdownTimes
[index
].Add(timeElapsed
);
169 /// Sets time for <paramref name="perfType"/> since the last call to <see cref="SetTimeForFinishedActivity"/>.
171 /// <param name="perfType"></param>
172 internal void SetTimeForFinishedActivity(PerfType perfType
)
174 TimeSpan timeElapsed
= m_watch
.Elapsed
;
175 int index
= (int)perfType
;
176 BreakdownTimes
[index
] = BreakdownTimes
[index
].Add(timeElapsed
);
181 internal bool IsTraceAllowed(ViewGenTraceLevel traceLevel
)
183 return TraceLevel
>= traceLevel
;
186 internal override void ToCompactString(StringBuilder builder
)
188 StringUtil
.FormatStringBuilder(builder
, "Trace Switch: {0}", m_traceLevel
);