Updates referencesource to .NET 4.7
[mono-project.git] / mcs / class / referencesource / System.Data.Entity / System / Data / Mapping / ViewGeneration / ConfigViewGenerator.cs
blobf771247ae0e4c885026ed75f10a90e16843c2561
1 //---------------------------------------------------------------------
2 // <copyright file="ConfigViewGenerator.cs" company="Microsoft">
3 // Copyright (c) Microsoft Corporation. All rights reserved.
4 // </copyright>
5 //
6 // @owner Microsoft
7 // @backupOwner Microsoft
8 //---------------------------------------------------------------------
10 using System.Data.Common.Utils;
11 using System.Text;
12 using System.Diagnostics;
14 namespace System.Data.Mapping.ViewGeneration
16 internal enum ViewGenMode
18 GenerateAllViews = 0,
19 OfTypeViews,
20 OfTypeOnlyViews
23 internal enum ViewGenTraceLevel
25 None = 0,
26 ViewsOnly,
27 Normal,
28 Verbose
31 internal enum PerfType
33 InitialSetup = 0,
34 CellCreation,
35 KeyConstraint,
36 ViewgenContext,
37 UpdateViews,
38 DisjointConstraint,
39 PartitionConstraint,
40 DomainConstraint,
41 ForeignConstraint,
42 QueryViews,
43 BoolResolution,
44 Unsatisfiability,
45 ViewParsing,
48 /// <summary>
49 /// This class holds some configuration information for the view generation code.
50 /// </summary>
51 internal sealed class ConfigViewGenerator : InternalBase
53 #region Constructors
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;
62 StartWatch();
64 #endregion
66 #region Fields
67 private bool m_generateViewsForEachType;
68 private ViewGenTraceLevel m_traceLevel;
69 private readonly TimeSpan[] m_breakdownTimes;
70 private Stopwatch m_watch;
71 /// <summary>
72 /// To measure a single thing at a time.
73 /// </summary>
74 private Stopwatch m_singleWatch;
75 /// <summary>
76 /// Perf op being measured.
77 /// </summary>
78 private PerfType m_singlePerfOp;
79 private bool m_enableValidation = true;
80 private bool m_generateUpdateViews = true;
81 private bool m_generateEsql = false;
82 #endregion
84 #region Properties
85 /// <summary>
86 /// If true then view generation will produce eSQL, otherwise CQTs only.
87 /// </summary>
88 internal bool GenerateEsql
90 get { return m_generateEsql; }
91 set { m_generateEsql = value; }
94 /// <summary>
95 /// Callers can set elements in this list.
96 /// </summary>
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); }
141 #endregion
143 #region Methods
144 private void StartWatch()
146 m_watch.Start();
149 internal void StartSingleWatch(PerfType perfType)
151 m_singleWatch.Start();
152 m_singlePerfOp = perfType;
155 /// <summary>
156 /// Sets time for <paramref name="perfType"/> for the individual timer.
157 /// </summary>
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);
168 /// <summary>
169 /// Sets time for <paramref name="perfType"/> since the last call to <see cref="SetTimeForFinishedActivity"/>.
170 /// </summary>
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);
177 m_watch.Reset();
178 m_watch.Start();
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);
190 #endregion