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  XPU_TIMINGS, // XPU-specific timings
107 
108  STOCHASTIC_DEPTH, // Depth of stochastic transparency
109  RAY_DEPTHS, // Distribution of ray-depths
110  RAY_DEPTHS_PERCENTAGE, // Distribution of ray-depths
111  RAY_BATCH_EFFICIENCY, // Batch efficiency
112 
113  // Checkpointing
114  CHECKPOINT_STATS, // Checkpoint stats
115 
116  // Render progress
117  ACTIVE_BUCKETS, // Active buckets list
118 
119  // Annoatations (backward compatibility)
120  PROGRESS_ANNOTATION, // Progress
121  STATS_ANNOTATION, // XPU Stats
122 
123  MAX_KEYS // Sentinal
124  };
125 
127  {
128  DEVICE_LABEL, // Label for the device
129  DEVICE_TYPE, // Type of device (gpu, embree)
130  DEVICE_STATUS, // Device status
131  DEVICE_ERROR, // Device error message
132  DEVICE_MEMORY, // Breakdown of memory
133  DEVICE_SAMPLES, // Number of samples processed by device
134  DEVICE_CONTRIB, // Contribution of device
135 
136  DEVICE_MAX_KEYS // Sentinal
137  };
138 
140  : public UT_NonCopyable
141  {
142  Value(BRAY_StatsImpl &stats, Key key);
143  Value(BRAY_StatsImpl &stats, DeviceKey key, int device);
144  ~Value();
145 
146  SYS_SAFE_BOOL operator bool() const
147  {
148  return myValue.getType() != UT_JSONValue::JSON_NULL;
149  }
150 
151  const UT_JSONValue &get() const { return myValue; }
152  const UT_JSONValue &operator->() const { return myValue; }
153  const UT_JSONValue &operator*() const { return myValue; }
154 
155  const UT_StringHolder &key() const;
156  UT_StringHolder asString() const;
157  private:
158  const UT_JSONValue &myValue;
159  BRAY_StatsImpl &myStats;
160  int myDevice;
161  Key myKey;
162  DeviceKey myDeviceKey;
163  };
164 
165  static const UT_StringHolder &keyName(Key key);
166  static const UT_StringHolder &deviceKeyName(DeviceKey key);
167 
168  /// Lightweight method to get the render stage
169  BRAY_RenderStage renderStage() const;
170  /// Lightweight method to get the percent complete (between 0 and 100)
171  fpreal percentComplete() const;
172 
173  /// Get the value of the stat
174  Value get(Key key) const
175  { return Value(*myImpl, key); }
176 
177  /// Get the value of the device stat
178  Value get(DeviceKey key, int device) const
179  { return Value(*myImpl, key, device); }
180 
181  /// After XPU devices are initialized, call this method to configure the
182  /// stats.
183  void initDevices();
184 
185  /// Clear for next render
186  void clear();
187 
188  /// @{
189  /// @private - methods used by the renderer to update stats during rendering
191  void setPercentDone(fpreal v);
192  void setTTFP(fpreal v);
193  void setProgressAnnotation(const UT_StringHolder &s);
194  void setStatsAnnotation(const UT_StringHolder &s);
195  void setAnnotations(const UT_StringHolder &progress_annotation,
196  const UT_StringHolder &stats_annotation);
197  void startBucket(const UT_DimRect &bounds, int pass);
198  void endBucket();
199 
200  struct AutoBucket
201  {
202  AutoBucket(Stats &stats, const UT_DimRect &bounds, int pass)
203  : myStats(stats)
204  {
205  myStats.startBucket(bounds, pass);
206  }
208  {
209  myStats.endBucket();
210  }
212  };
213  /// @}
214 
215 private:
217 };
218 
219 } // End namespace
220 
221 #endif
222 
const UT_JSONValue & operator*() const
Definition: BRAY_Stats.h:153
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:592
#define SYS_SAFE_BOOL
Definition: SYS_Compiler.h:55
AutoBucket(Stats &stats, const UT_DimRect &bounds, int pass)
Definition: BRAY_Stats.h:202
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:152