Paradox Game Engine  v1.0.0 beta06
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Events Macros Pages
SemanticPerformance.cs
Go to the documentation of this file.
1 // Copyright (c) 2014 Silicon Studio Corp. (http://siliconstudio.co.jp)
2 // This file is distributed under GPL v3. See LICENSE.md for details.
3 using System;
4 using System.Diagnostics;
5 
6 namespace SiliconStudio.Paradox.Shaders.Parser.Performance
7 {
8  public static class SemanticPerformance
9  {
10  private static Stopwatch TotalTime = new Stopwatch();
11 
12  private static Stopwatch VisitVariable = new Stopwatch();
13  private static Stopwatch CommonVisit = new Stopwatch();
14  private static Stopwatch FindDeclarationScope = new Stopwatch();
15  private static Stopwatch FindDeclarationsFromObject = new Stopwatch();
16  private static Stopwatch FindDeclarations = new Stopwatch();
17  private static Stopwatch ProcessMethodInvocation = new Stopwatch();
18  private static Stopwatch CheckNameConflict = new Stopwatch();
19  private static Stopwatch HasExternQualifier = new Stopwatch();
20 
21  private static int VisitVariableCount = 0;
22  private static int CommonVisitCount = 0;
23  private static int FindDeclarationScopeCount = 0;
24  private static int FindDeclarationsFromObjectCount = 0;
25  private static int FindDeclarationsCount = 0;
26  private static int ProcessMethodInvocationCount = 0;
27  private static int CheckNameConflictCount = 0;
28  private static int HasExternQualifierCount = 0;
29 
30  private static int nbShaders = 0;
31 
32  public static void Start(SemanticStage stage)
33  {
34  switch (stage)
35  {
36  case SemanticStage.Global:
37  TotalTime.Start();
38  break;
39  case SemanticStage.VisitVariable:
40  VisitVariable.Start();
41  ++VisitVariableCount;
42  break;
43  case SemanticStage.CommonVisit:
44  CommonVisit.Start();
45  ++CommonVisitCount;
46  break;
47  case SemanticStage.FindDeclarationScope:
48  FindDeclarationScope.Start();
49  ++FindDeclarationScopeCount;
50  break;
51  case SemanticStage.FindDeclarationsFromObject:
52  FindDeclarationsFromObject.Start();
53  ++FindDeclarationsFromObjectCount;
54  break;
55  case SemanticStage.FindDeclarations:
56  FindDeclarations.Start();
57  ++FindDeclarationsCount;
58  break;
59  case SemanticStage.ProcessMethodInvocation:
60  ProcessMethodInvocation.Start();
61  ++ProcessMethodInvocationCount;
62  break;
63  case SemanticStage.CheckNameConflict:
64  CheckNameConflict.Start();
65  ++CheckNameConflictCount;
66  break;
67  case SemanticStage.HasExternQualifier:
68  HasExternQualifier.Start();
69  ++HasExternQualifierCount;
70  break;
71  }
72  }
73 
74  public static void Pause(SemanticStage stage)
75  {
76  switch (stage)
77  {
78  case SemanticStage.Global:
79  TotalTime.Stop();
80  break;
81  case SemanticStage.VisitVariable:
82  VisitVariable.Stop();
83  break;
84  case SemanticStage.CommonVisit:
85  CommonVisit.Stop();
86  break;
87  case SemanticStage.FindDeclarationScope:
88  FindDeclarationScope.Stop();
89  break;
90  case SemanticStage.FindDeclarationsFromObject:
91  FindDeclarationsFromObject.Stop();
92  break;
93  case SemanticStage.FindDeclarations:
94  FindDeclarations.Stop();
95  break;
96  case SemanticStage.ProcessMethodInvocation:
97  ProcessMethodInvocation.Stop();
98  break;
99  case SemanticStage.CheckNameConflict:
100  CheckNameConflict.Stop();
101  break;
102  case SemanticStage.HasExternQualifier:
103  HasExternQualifier.Stop();
104  break;
105  }
106  }
107 
108  public static void IncrShader()
109  {
110  ++nbShaders;
111  }
112 
113  public static void Reset()
114  {
115  nbShaders = 0;
116 
117  TotalTime.Reset();
118  VisitVariable.Reset();
119  CommonVisit.Reset();
120  FindDeclarationScope.Reset();
121  FindDeclarationsFromObject.Reset();
122  FindDeclarations.Reset();
123  ProcessMethodInvocation.Reset();
124  CheckNameConflict.Reset();
125  HasExternQualifier.Reset();
126 
127  VisitVariableCount = 0;
128  CommonVisitCount = 0;
129  FindDeclarationScopeCount = 0;
130  FindDeclarationsFromObjectCount = 0;
131  FindDeclarationsCount = 0;
132  ProcessMethodInvocationCount = 0;
133  CheckNameConflictCount = 0;
134  HasExternQualifierCount = 0;
135  }
136 
137  public static void PrintResult()
138  {
139  Console.WriteLine();
140  Console.WriteLine(@"--------------------------TOTAL SEMANTIC ANALYZER---------------------------");
141  Console.WriteLine(@"{0} shader(s) analyzed in {1} ms, {2} ms per shader", nbShaders, TotalTime.ElapsedMilliseconds, nbShaders == 0 ? 0 : TotalTime.ElapsedMilliseconds / nbShaders);
142  Console.WriteLine(@"VisitVariable {0} ms for {1} calls", VisitVariable.ElapsedMilliseconds, VisitVariableCount);
143  Console.WriteLine(@"CommonVisit took {0} ms for {1} calls", CommonVisit.ElapsedMilliseconds, CommonVisitCount);
144  Console.WriteLine(@"FindDeclarationScope took {0} ms for {1} calls", FindDeclarationScope.ElapsedMilliseconds, FindDeclarationScopeCount);
145  Console.WriteLine(@"FindDeclarationsFromObject took {0} ms for {1} calls", FindDeclarationsFromObject.ElapsedMilliseconds, FindDeclarationsFromObjectCount);
146  Console.WriteLine(@"FindDeclarations took {0} ms for {1} calls", FindDeclarations.ElapsedMilliseconds, FindDeclarationsCount);
147  Console.WriteLine(@"ProcessMethodInvocation took {0} ms for {1} calls", ProcessMethodInvocation.ElapsedMilliseconds, ProcessMethodInvocationCount);
148  Console.WriteLine(@"CheckNameConflict took {0} ms for {1} calls", CheckNameConflict.ElapsedMilliseconds, CheckNameConflictCount);
149  Console.WriteLine(@"HasExternQualifier took {0} ms for {1} calls", HasExternQualifier.ElapsedMilliseconds, HasExternQualifierCount);
150  Console.WriteLine(@"-------------------------------------------------------------------------------");
151  Console.WriteLine();
152  }
153  }
154 
155  public enum SemanticStage
156  {
157  Global,
159  CommonVisit,
166  }
167 }