HDK
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
BRAY_Stats.h
Go to the documentation of this file.
1 /*
2  * PROPRIETARY INFORMATION. This software is proprietary to
3  * Side Effects Software Inc., and is not to be reproduced,
4  * transmitted, or disclosed in any way without written permission.
5  *
6  * NAME: BRAY_Stats.h (BRAY Library, C++)
7  *
8  * COMMENTS:
9  */
10 
11 #ifndef __BRAY_Stats__
12 #define __BRAY_Stats__
13 
14 #include "BRAY_API.h"
15 #include "BRAY_Types.h"
16 #include <UT/UT_UniquePtr.h>
17 #include <UT/UT_Rect.h>
18 #include <UT/UT_NonCopyable.h>
19 #include <UT/UT_StringHolder.h>
20 #include <UT/UT_JSONValue.h>
21 
22 class BRAY_StatsImpl;
23 class BRAY_Renderer;
24 
25 namespace BRAY
26 {
27 
30 {
31 public:
32  Stats(const BRAY_Renderer &renderer);
33  ~Stats();
34 
35  enum Key
36  {
37  // System information
38  USERNAME, // User name
39  HOSTNAME, // Host name
40  KARMA_VERSION, // Karma version
41  SYSTEM_THREADS, // Thread count
42  SYSTEM_CPU_BRAND, // CPU brand
43  SYSTEM_CPU_ARCHITECTURE,// CPU architecture
44  SYSTEM_MEMORY, // Current system memory usage
45  SYSTEM_TIME, // Current system times
46  SYSTEM_RESOURCE_USAGE, // Current system resource usage
47 
48  // Global render state
49  ENGINE, // Rendering engine (cpu or xpu)
50  XPU_DEVICE_COUNT, // XPU device count
51 
52  RENDER_SETTINGS, // JSON string of all global render settings
53 
54  RENDER_CAMERA, // Path to render camera
55  DICING_CAMERA, // Path to dicing camera
56  RESOLUTION, // Image resoution
57 
58  WORLD_TO_CAMERA, // World to camera transform
59  WORLD_TO_SCREEN, // World to screen transform
60  WORLD_TO_NDC, // World to NDC transform
61  WORLD_TO_RASTER, // World to raster space transform
62 
63  CAMERA_NEAR_FAR, // Camera near/far clipping planes
64 
65  AOV_BUFFERS, // AOV Buffer dictionary
66  AOV_RASTER_MEMORY, // Current/Peak memory used by rasters
67  DEEP_IMAGE_MEMORY, // Current/peak deep memory
68 
69  // Texture information
70  UNIFIED_CACHE, // Unified cache information
71  TEXTURE_ERROR_FILES, // List of bad texture paths
72  TEXTURE_CONVERSIONS, // Textures converted interanally
73 
74  RAT_STATS, // Number of .rat textures
75  RAT_DISK_CACHE, // RAT file disk cache performance
76  RAT_DISK_CACHE_ERRORS, // RAT file disk cache conversions
77 
78  OIIO_STATS, // OIIO texture stats
79  OIIO_STATS_STRING, // OIIO stats string (direct from OIIO)
80 
81  PTEX_STATS, // Ptex texture stats
82 
83  // USD information
84  OBJECT_COUNTS, // Object counts in the scene
85  GEOMETRY_COUNTS, // Geometry prim counts in the scene
86  LIGHT_TYPES, // Counts for different light types
87  PRIMVAR_CACHE, // Information about primvar cache
88 
89  // Rendering state information
90  PERCENT_COMPLETE, // Percent complete (0-1)
91  RENDER_STAGE, // Stage of rendering (inactive, loading, etc.)
92  RENDER_STAGE_LABEL, // Stage of rendering (inactive, loading, etc.)
93  LOAD_TIME, // Time to load scene
94  LOAD_MEMORY, // Memory after load
95  TTFP, // Time to first pixel
96  FILTER_ERRORS, // Errors in pixel/image filters (denoisers)
97 
98  // Karma CPU
99  SHADER_CALLS, // Number of shader calls
100  SHADER_NODES, // Number of shader graph nodes
101  RAY_COUNTS, // Primary, indirect, occlusion, etc.
102  TIMINGS, // Breakdown of time
103 
104  // Karma XPU
105  XPU_COMPILES, // XPU compile information
106 
107  STOCHASTIC_DEPTH, // Depth of stochastic transparency
108  RAY_DEPTHS, // Distribution of ray-depths
109  RAY_DEPTHS_PERCENTAGE, // Distribution of ray-depths
110  RAY_BATCH_EFFICIENCY, // Batch efficiency
111 
112  // Checkpointing
113  CHECKPOINT_STATS, // Checkpoint stats
114 
115  // Render progress
116  ACTIVE_BUCKETS, // Active buckets list
117 
118  // Annoatations (backward compatibility)
119  PROGRESS_ANNOTATION, // Progress
120  STATS_ANNOTATION, // XPU Stats
121 
122  MAX_KEYS // Sentinal
123  };
124 
126  {
127  DEVICE_LABEL, // Label for the device
128  DEVICE_TYPE, // Type of device (gpu, embree)
129  DEVICE_STATUS, // Device status
130  DEVICE_ERROR, // Device error message
131  DEVICE_MEMORY, // Breakdown of memory
132  DEVICE_SAMPLES, // Number of samples processed by device
133  DEVICE_CONTRIB, // Contribution of device
134 
135  DEVICE_MAX_KEYS // Sentinal
136  };
137 
139  : public UT_NonCopyable
140  {
141  Value(BRAY_StatsImpl &stats, Key key);
142  Value(BRAY_StatsImpl &stats, DeviceKey key, int device);
143  ~Value();
144 
145  SYS_SAFE_BOOL operator bool() const
146  {
147  return myValue.getType() != UT_JSONValue::JSON_NULL;
148  }
149 
150  const UT_JSONValue &get() const { return myValue; }
151  const UT_JSONValue &operator->() const { return myValue; }
152  const UT_JSONValue &operator*() const { return myValue; }
153 
154  const UT_StringHolder &key() const;
155  UT_StringHolder asString() const;
156  private:
157  const UT_JSONValue &myValue;
158  BRAY_StatsImpl &myStats;
159  int myDevice;
160  Key myKey;
161  DeviceKey myDeviceKey;
162  };
163 
164  static const UT_StringHolder &keyName(Key key);
165  static const UT_StringHolder &deviceKeyName(DeviceKey key);
166 
167  /// Lightweight method to get the render stage
168  BRAY_RenderStage renderStage() const;
169  /// Lightweight method to get the percent complete (between 0 and 100)
170  fpreal percentComplete() const;
171 
172  /// Get the value of the stat
173  Value get(Key key) const
174  { return Value(*myImpl, key); }
175 
176  /// Get the value of the device stat
177  Value get(DeviceKey key, int device) const
178  { return Value(*myImpl, key, device); }
179 
180  /// After XPU devices are initialized, call this method to configure the
181  /// stats.
182  void initDevices();
183 
184  /// Clear for next render
185  void clear();
186 
187  /// @{
188  /// @private - methods used by the renderer to update stats during rendering
190  void setPercentDone(fpreal v);
191  void setTTFP(fpreal v);
192  void setProgressAnnotation(const UT_StringHolder &s);
193  void setStatsAnnotation(const UT_StringHolder &s);
194  void setAnnotations(const UT_StringHolder &progress_annotation,
195  const UT_StringHolder &stats_annotation);
196  void startBucket(const UT_DimRect &bounds, int pass);
197  void endBucket();
198 
199  struct AutoBucket
200  {
201  AutoBucket(Stats &stats, const UT_DimRect &bounds, int pass)
202  : myStats(stats)
203  {
204  myStats.startBucket(bounds, pass);
205  }
207  {
208  myStats.endBucket();
209  }
211  };
212  /// @}
213 
214 private:
216 };
217 
218 } // End namespace
219 
220 #endif
221 
const UT_JSONValue & operator*() const
Definition: BRAY_Stats.h:152
const GLdouble * v
Definition: glcorearb.h:837
GLdouble s
Definition: glad.h:3009
std::unique_ptr< T, Deleter > UT_UniquePtr
A smart pointer for unique ownership of dynamically allocated objects.
Definition: UT_UniquePtr.h:39
BRAY_RenderStage
Definition: BRAY_Types.h:589
#define SYS_SAFE_BOOL
Definition: SYS_Compiler.h:55
AutoBucket(Stats &stats, const UT_DimRect &bounds, int pass)
Definition: BRAY_Stats.h:201
fpreal64 fpreal
Definition: SYS_Types.h:277
#define BRAY_API
Definition: BRAY_API.h:12
Class to store JSON objects as C++ objects.
Definition: UT_JSONValue.h:99
const UT_JSONValue & operator->() const
Definition: BRAY_Stats.h:151