Paradox Game Engine  v1.0.0 beta06
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Events Macros Pages
StreamCreatorPerformance.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 StreamCreatorPerformance
9  {
10  private static Stopwatch Global = new Stopwatch();
11  private static Stopwatch StreamAnalyzer = new Stopwatch();
12  private static Stopwatch FindEntryPoint = new Stopwatch();
13  private static Stopwatch StreamAnalysisPerShader = new Stopwatch();
14  private static Stopwatch BubbleUpStreamUsages = new Stopwatch();
15  private static Stopwatch ComputeShaderStreamAnalysis = new Stopwatch();
16  private static Stopwatch TagCleaner = new Stopwatch();
17  private static Stopwatch GenerateStreams = new Stopwatch();
18  private static Stopwatch RemoveUselessAndSortMethods = new Stopwatch();
19  private static Stopwatch PropagateStreamsParameter = new Stopwatch();
20  private static Stopwatch TransformStreamsAssignments = new Stopwatch();
21  private static Stopwatch AssignSearch = new Stopwatch();
22  private static Stopwatch CreateOutputFromStream = new Stopwatch();
23  private static Stopwatch CreateStreamFromInput = new Stopwatch();
24  private static Stopwatch StreamFieldVisitor = new Stopwatch();
25  private static Stopwatch StreamFieldVisitorClone = new Stopwatch();
26 
27  private static int StreamFieldVisitorCount;
28 
29  public static void Start(StreamCreatorStage stage)
30  {
31  switch (stage)
32  {
33  case StreamCreatorStage.Global:
34  Global.Start();
35  break;
36  case StreamCreatorStage.StreamAnalyzer:
37  StreamAnalyzer.Start();
38  break;
39  case StreamCreatorStage.FindEntryPoint:
40  FindEntryPoint.Start();
41  break;
42  case StreamCreatorStage.StreamAnalysisPerShader:
43  StreamAnalysisPerShader.Start();
44  break;
45  case StreamCreatorStage.BubbleUpStreamUsages:
46  BubbleUpStreamUsages.Start();
47  break;
48  case StreamCreatorStage.ComputeShaderStreamAnalysis:
49  ComputeShaderStreamAnalysis.Start();
50  break;
51  case StreamCreatorStage.TagCleaner:
52  TagCleaner.Start();
53  break;
54  case StreamCreatorStage.GenerateStreams:
55  GenerateStreams.Start();
56  break;
57  case StreamCreatorStage.RemoveUselessAndSortMethods:
58  RemoveUselessAndSortMethods.Start();
59  break;
60  case StreamCreatorStage.PropagateStreamsParameter:
61  PropagateStreamsParameter.Start();
62  break;
63  case StreamCreatorStage.TransformStreamsAssignments:
64  TransformStreamsAssignments.Start();
65  break;
66  case StreamCreatorStage.AssignSearch:
67  AssignSearch.Start();
68  break;
69  case StreamCreatorStage.CreateOutputFromStream:
70  CreateOutputFromStream.Start();
71  break;
72  case StreamCreatorStage.CreateStreamFromInput:
73  CreateStreamFromInput.Start();
74  break;
75  case StreamCreatorStage.StreamFieldVisitor:
76  StreamFieldVisitor.Start();
77  ++StreamFieldVisitorCount;
78  break;
79  case StreamCreatorStage.StreamFieldVisitorClone:
80  StreamFieldVisitorClone.Start();
81  break;
82  }
83  }
84 
85  public static void Pause(StreamCreatorStage stage)
86  {
87  switch (stage)
88  {
89  case StreamCreatorStage.Global:
90  Global.Stop();
91  break;
92  case StreamCreatorStage.StreamAnalyzer:
93  StreamAnalyzer.Stop();
94  break;
95  case StreamCreatorStage.FindEntryPoint:
96  FindEntryPoint.Stop();
97  break;
98  case StreamCreatorStage.StreamAnalysisPerShader:
99  StreamAnalysisPerShader.Stop();
100  break;
101  case StreamCreatorStage.BubbleUpStreamUsages:
102  BubbleUpStreamUsages.Stop();
103  break;
104  case StreamCreatorStage.ComputeShaderStreamAnalysis:
105  ComputeShaderStreamAnalysis.Stop();
106  break;
107  case StreamCreatorStage.TagCleaner:
108  TagCleaner.Stop();
109  break;
110  case StreamCreatorStage.GenerateStreams:
111  GenerateStreams.Stop();
112  break;
113  case StreamCreatorStage.RemoveUselessAndSortMethods:
114  RemoveUselessAndSortMethods.Stop();
115  break;
116  case StreamCreatorStage.PropagateStreamsParameter:
117  PropagateStreamsParameter.Stop();
118  break;
119  case StreamCreatorStage.TransformStreamsAssignments:
120  TransformStreamsAssignments.Stop();
121  break;
122  case StreamCreatorStage.AssignSearch:
123  AssignSearch.Stop();
124  break;
125  case StreamCreatorStage.CreateOutputFromStream:
126  CreateOutputFromStream.Stop();
127  break;
128  case StreamCreatorStage.CreateStreamFromInput:
129  CreateStreamFromInput.Stop();
130  break;
131  case StreamCreatorStage.StreamFieldVisitor:
132  StreamFieldVisitor.Stop();
133  break;
134  case StreamCreatorStage.StreamFieldVisitorClone:
135  StreamFieldVisitorClone.Stop();
136  break;
137  }
138  }
139 
140  public static void Reset()
141  {
142  Global.Reset();
143  StreamAnalyzer.Reset();
144  FindEntryPoint.Reset();
145  StreamAnalysisPerShader.Reset();
146  BubbleUpStreamUsages.Reset();
147  ComputeShaderStreamAnalysis.Reset();
148  TagCleaner.Reset();
149  GenerateStreams.Reset();
150  RemoveUselessAndSortMethods.Reset();
151  PropagateStreamsParameter.Reset();
152  TransformStreamsAssignments.Reset();
153  AssignSearch.Reset();
154  CreateOutputFromStream.Reset();
155  CreateStreamFromInput.Reset();
156  StreamFieldVisitor.Reset();
157  StreamFieldVisitorClone.Reset();
158 
159  StreamFieldVisitorCount = 0;
160  }
161 
162  public static void PrintResult()
163  {
164  Console.WriteLine();
165  Console.WriteLine(@"----------------------------STREAM CREATOR ANALYZER-----------------------------");
166  Console.WriteLine(@"Stream creation took {0} ms", Global.ElapsedMilliseconds);
167  Console.WriteLine(@"StreamAnalyzer took {0} ms", StreamAnalyzer.ElapsedMilliseconds);
168  Console.WriteLine(@"FindEntryPoint took {0} ms", FindEntryPoint.ElapsedMilliseconds);
169  Console.WriteLine(@"StreamAnalysisPerShader took {0} ms", StreamAnalysisPerShader.ElapsedMilliseconds);
170  Console.WriteLine(@"BubbleUpStreamUsages took {0} ms", BubbleUpStreamUsages.ElapsedMilliseconds);
171  Console.WriteLine(@"ComputeShaderStreamAnalysis took {0} ms", ComputeShaderStreamAnalysis.ElapsedMilliseconds);
172  Console.WriteLine(@"TagCleaner took {0} ms", TagCleaner.ElapsedMilliseconds);
173  Console.WriteLine(@"GenerateStreams took {0} ms", GenerateStreams.ElapsedMilliseconds);
174  Console.WriteLine(@"RemoveUselessAndSortMethods took {0} ms", RemoveUselessAndSortMethods.ElapsedMilliseconds);
175  Console.WriteLine(@"PropagateStreamsParameter took {0} ms", PropagateStreamsParameter.ElapsedMilliseconds);
176  Console.WriteLine(@"TransformStreamsAssignments took {0} ms", TransformStreamsAssignments.ElapsedMilliseconds);
177  Console.WriteLine(@"AssignSearch took {0} ms", AssignSearch.ElapsedMilliseconds);
178  Console.WriteLine(@"CreateOutputFromStream took {0} ms", CreateOutputFromStream.ElapsedMilliseconds);
179  Console.WriteLine(@"CreateStreamFromInput took {0} ms", CreateStreamFromInput.ElapsedMilliseconds);
180  Console.WriteLine(@"StreamFieldVisitor took {0} ms for {1} calls", StreamFieldVisitor.ElapsedMilliseconds, StreamFieldVisitorCount);
181  Console.WriteLine(@"StreamFieldVisitorClone took {0} ms", StreamFieldVisitorClone.ElapsedMilliseconds);
182  Console.WriteLine(@"-------------------------------------------------------------------------------");
183  Console.WriteLine();
184  }
185  }
186 
187  public enum StreamCreatorStage
188  {
189  Global,
195  TagCleaner,
200  AssignSearch,
205  }
206 }