@itwin/frontend-devtools 4.0.0-dev.8 → 4.0.0-dev.80

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (360) hide show
  1. package/CHANGELOG.md +41 -1
  2. package/README.md +1 -1
  3. package/lib/cjs/ClipboardUtilities.d.ts +8 -8
  4. package/lib/cjs/ClipboardUtilities.js +26 -26
  5. package/lib/cjs/FrontEndDevTools.d.ts +19 -19
  6. package/lib/cjs/FrontEndDevTools.js +221 -221
  7. package/lib/cjs/FrontEndDevTools.js.map +1 -1
  8. package/lib/cjs/effects/Convolution.d.ts +68 -68
  9. package/lib/cjs/effects/Convolution.js +148 -148
  10. package/lib/cjs/effects/Convolution.js.map +1 -1
  11. package/lib/cjs/effects/EffectTools.d.ts +33 -33
  12. package/lib/cjs/effects/EffectTools.js +67 -68
  13. package/lib/cjs/effects/EffectTools.js.map +1 -1
  14. package/lib/cjs/effects/Explosion.d.ts +12 -12
  15. package/lib/cjs/effects/Explosion.js +168 -168
  16. package/lib/cjs/effects/Explosion.js.map +1 -1
  17. package/lib/cjs/effects/FlipImage.d.ts +30 -30
  18. package/lib/cjs/effects/FlipImage.js +79 -79
  19. package/lib/cjs/effects/FlipImage.js.map +1 -1
  20. package/lib/cjs/effects/LensDistortion.d.ts +34 -34
  21. package/lib/cjs/effects/LensDistortion.js +88 -88
  22. package/lib/cjs/effects/LensDistortion.js.map +1 -1
  23. package/lib/cjs/effects/Random.d.ts +24 -24
  24. package/lib/cjs/effects/Random.js +49 -49
  25. package/lib/cjs/effects/Saturation.d.ts +30 -30
  26. package/lib/cjs/effects/Saturation.js +59 -59
  27. package/lib/cjs/effects/Saturation.js.map +1 -1
  28. package/lib/cjs/effects/Snow.d.ts +76 -76
  29. package/lib/cjs/effects/Snow.js +187 -187
  30. package/lib/cjs/effects/Snow.js.map +1 -1
  31. package/lib/cjs/effects/Vignette.d.ts +39 -39
  32. package/lib/cjs/effects/Vignette.js +79 -79
  33. package/lib/cjs/effects/Vignette.js.map +1 -1
  34. package/lib/cjs/frontend-devtools.d.ts +82 -82
  35. package/lib/cjs/frontend-devtools.js +102 -98
  36. package/lib/cjs/frontend-devtools.js.map +1 -1
  37. package/lib/cjs/tools/AnimationIntervalTool.d.ts +15 -15
  38. package/lib/cjs/tools/AnimationIntervalTool.js +30 -30
  39. package/lib/cjs/tools/AnimationIntervalTool.js.map +1 -1
  40. package/lib/cjs/tools/ChangeUnitsTool.d.ts +15 -15
  41. package/lib/cjs/tools/ChangeUnitsTool.js +41 -41
  42. package/lib/cjs/tools/ChangeUnitsTool.js.map +1 -1
  43. package/lib/cjs/tools/ClipTools.d.ts +67 -67
  44. package/lib/cjs/tools/ClipTools.js +161 -164
  45. package/lib/cjs/tools/ClipTools.js.map +1 -1
  46. package/lib/cjs/tools/DisplayStyleTools.d.ts +145 -145
  47. package/lib/cjs/tools/DisplayStyleTools.js +368 -370
  48. package/lib/cjs/tools/DisplayStyleTools.js.map +1 -1
  49. package/lib/cjs/tools/EmphasizeElementsTool.d.ts +60 -60
  50. package/lib/cjs/tools/EmphasizeElementsTool.js +154 -154
  51. package/lib/cjs/tools/EmphasizeElementsTool.js.map +1 -1
  52. package/lib/cjs/tools/FrustumDecoration.d.ts +57 -57
  53. package/lib/cjs/tools/FrustumDecoration.js +374 -374
  54. package/lib/cjs/tools/FrustumDecoration.js.map +1 -1
  55. package/lib/cjs/tools/InspectElementTool.d.ts +42 -42
  56. package/lib/cjs/tools/InspectElementTool.js +198 -198
  57. package/lib/cjs/tools/InspectElementTool.js.map +1 -1
  58. package/lib/cjs/tools/MapLayerTool.d.ts +264 -264
  59. package/lib/cjs/tools/MapLayerTool.d.ts.map +1 -1
  60. package/lib/cjs/tools/MapLayerTool.js +509 -507
  61. package/lib/cjs/tools/MapLayerTool.js.map +1 -1
  62. package/lib/cjs/tools/MeasureTileLoadTime.d.ts +12 -12
  63. package/lib/cjs/tools/MeasureTileLoadTime.js +63 -63
  64. package/lib/cjs/tools/MeasureTileLoadTime.js.map +1 -1
  65. package/lib/cjs/tools/ModelAppearanceTools.d.ts +86 -86
  66. package/lib/cjs/tools/ModelAppearanceTools.js +183 -183
  67. package/lib/cjs/tools/ModelAppearanceTools.js.map +1 -1
  68. package/lib/cjs/tools/PlanProjectionTools.d.ts +40 -40
  69. package/lib/cjs/tools/PlanProjectionTools.js +149 -149
  70. package/lib/cjs/tools/PlanProjectionTools.js.map +1 -1
  71. package/lib/cjs/tools/PlanarMaskTools.d.ts +182 -182
  72. package/lib/cjs/tools/PlanarMaskTools.js +391 -393
  73. package/lib/cjs/tools/PlanarMaskTools.js.map +1 -1
  74. package/lib/cjs/tools/ProjectExtents.d.ts +41 -41
  75. package/lib/cjs/tools/ProjectExtents.js +110 -110
  76. package/lib/cjs/tools/ProjectExtents.js.map +1 -1
  77. package/lib/cjs/tools/RealityModelTools.d.ts +116 -116
  78. package/lib/cjs/tools/RealityModelTools.js +281 -281
  79. package/lib/cjs/tools/RealityModelTools.js.map +1 -1
  80. package/lib/cjs/tools/RealityTransitionTool.d.ts +25 -25
  81. package/lib/cjs/tools/RealityTransitionTool.js +115 -116
  82. package/lib/cjs/tools/RealityTransitionTool.js.map +1 -1
  83. package/lib/cjs/tools/RenderSystemTools.d.ts +38 -38
  84. package/lib/cjs/tools/RenderSystemTools.js +69 -70
  85. package/lib/cjs/tools/RenderSystemTools.js.map +1 -1
  86. package/lib/cjs/tools/RenderTargetTools.d.ts +107 -107
  87. package/lib/cjs/tools/RenderTargetTools.d.ts.map +1 -1
  88. package/lib/cjs/tools/RenderTargetTools.js +174 -174
  89. package/lib/cjs/tools/RenderTargetTools.js.map +1 -1
  90. package/lib/cjs/tools/ReportWebGLCompatibilityTool.d.ts +11 -11
  91. package/lib/cjs/tools/ReportWebGLCompatibilityTool.js +30 -30
  92. package/lib/cjs/tools/ReportWebGLCompatibilityTool.js.map +1 -1
  93. package/lib/cjs/tools/SavedViews.d.ts +46 -46
  94. package/lib/cjs/tools/SavedViews.js +136 -136
  95. package/lib/cjs/tools/SavedViews.js.map +1 -1
  96. package/lib/cjs/tools/ScheduleScriptTools.d.ts +37 -37
  97. package/lib/cjs/tools/ScheduleScriptTools.js +157 -159
  98. package/lib/cjs/tools/ScheduleScriptTools.js.map +1 -1
  99. package/lib/cjs/tools/SelectionTools.d.ts +28 -28
  100. package/lib/cjs/tools/SelectionTools.js +87 -87
  101. package/lib/cjs/tools/SelectionTools.js.map +1 -1
  102. package/lib/cjs/tools/SetGpuMemoryLimitTool.d.ts +15 -15
  103. package/lib/cjs/tools/SetGpuMemoryLimitTool.js +33 -33
  104. package/lib/cjs/tools/SetGpuMemoryLimitTool.js.map +1 -1
  105. package/lib/cjs/tools/SourceAspectIdTools.d.ts +40 -40
  106. package/lib/cjs/tools/SourceAspectIdTools.js +85 -86
  107. package/lib/cjs/tools/SourceAspectIdTools.js.map +1 -1
  108. package/lib/cjs/tools/TileRequestDecoration.d.ts +12 -12
  109. package/lib/cjs/tools/TileRequestDecoration.js +83 -83
  110. package/lib/cjs/tools/TileRequestDecoration.js.map +1 -1
  111. package/lib/cjs/tools/TileTreeBoundsDecoration.d.ts +11 -11
  112. package/lib/cjs/tools/TileTreeBoundsDecoration.js +74 -74
  113. package/lib/cjs/tools/TileTreeBoundsDecoration.js.map +1 -1
  114. package/lib/cjs/tools/ToolTipProvider.d.ts +15 -15
  115. package/lib/cjs/tools/ToolTipProvider.js +66 -66
  116. package/lib/cjs/tools/ToolTipProvider.js.map +1 -1
  117. package/lib/cjs/tools/ViewportTools.d.ts +218 -218
  118. package/lib/cjs/tools/ViewportTools.d.ts.map +1 -1
  119. package/lib/cjs/tools/ViewportTools.js +516 -516
  120. package/lib/cjs/tools/ViewportTools.js.map +1 -1
  121. package/lib/cjs/tools/parseArgs.d.ts +23 -23
  122. package/lib/cjs/tools/parseArgs.js +51 -51
  123. package/lib/cjs/tools/parseBoolean.d.ts +8 -8
  124. package/lib/cjs/tools/parseBoolean.js +26 -26
  125. package/lib/cjs/tools/parseToggle.d.ts +8 -8
  126. package/lib/cjs/tools/parseToggle.js +25 -25
  127. package/lib/cjs/ui/Button.d.ts +29 -29
  128. package/lib/cjs/ui/Button.d.ts.map +1 -1
  129. package/lib/cjs/ui/Button.js +26 -26
  130. package/lib/cjs/ui/CheckBox.d.ts +23 -23
  131. package/lib/cjs/ui/CheckBox.d.ts.map +1 -1
  132. package/lib/cjs/ui/CheckBox.js +27 -27
  133. package/lib/cjs/ui/ColorInput.d.ts +27 -27
  134. package/lib/cjs/ui/ColorInput.d.ts.map +1 -1
  135. package/lib/cjs/ui/ColorInput.js +53 -53
  136. package/lib/cjs/ui/ComboBox.d.ts +28 -28
  137. package/lib/cjs/ui/ComboBox.d.ts.map +1 -1
  138. package/lib/cjs/ui/ComboBox.js +42 -42
  139. package/lib/cjs/ui/DataList.d.ts +27 -27
  140. package/lib/cjs/ui/DataList.d.ts.map +1 -1
  141. package/lib/cjs/ui/DataList.js +39 -39
  142. package/lib/cjs/ui/NestedMenu.d.ts +19 -19
  143. package/lib/cjs/ui/NestedMenu.d.ts.map +1 -1
  144. package/lib/cjs/ui/NestedMenu.js +46 -46
  145. package/lib/cjs/ui/NumericInput.d.ts +35 -35
  146. package/lib/cjs/ui/NumericInput.d.ts.map +1 -1
  147. package/lib/cjs/ui/NumericInput.js +61 -61
  148. package/lib/cjs/ui/RadioBox.d.ts +29 -29
  149. package/lib/cjs/ui/RadioBox.d.ts.map +1 -1
  150. package/lib/cjs/ui/RadioBox.js +76 -76
  151. package/lib/cjs/ui/Slider.d.ts +28 -28
  152. package/lib/cjs/ui/Slider.d.ts.map +1 -1
  153. package/lib/cjs/ui/Slider.js +42 -42
  154. package/lib/cjs/ui/TextBox.d.ts +32 -32
  155. package/lib/cjs/ui/TextBox.d.ts.map +1 -1
  156. package/lib/cjs/ui/TextBox.js +56 -56
  157. package/lib/cjs/widgets/DiagnosticsPanel.d.ts +37 -37
  158. package/lib/cjs/widgets/DiagnosticsPanel.js +81 -81
  159. package/lib/cjs/widgets/FpsTracker.d.ts +19 -19
  160. package/lib/cjs/widgets/FpsTracker.js +56 -56
  161. package/lib/cjs/widgets/GpuProfiler.d.ts +16 -16
  162. package/lib/cjs/widgets/GpuProfiler.js +192 -192
  163. package/lib/cjs/widgets/KeyinField.d.ts +61 -61
  164. package/lib/cjs/widgets/KeyinField.js +186 -187
  165. package/lib/cjs/widgets/KeyinField.js.map +1 -1
  166. package/lib/cjs/widgets/MemoryTracker.d.ts +27 -27
  167. package/lib/cjs/widgets/MemoryTracker.js +242 -243
  168. package/lib/cjs/widgets/MemoryTracker.js.map +1 -1
  169. package/lib/cjs/widgets/RenderCommandBreakdown.d.ts +15 -15
  170. package/lib/cjs/widgets/RenderCommandBreakdown.js +67 -68
  171. package/lib/cjs/widgets/RenderCommandBreakdown.js.map +1 -1
  172. package/lib/cjs/widgets/TileMemoryBreakdown.d.ts +30 -30
  173. package/lib/cjs/widgets/TileMemoryBreakdown.js +203 -204
  174. package/lib/cjs/widgets/TileMemoryBreakdown.js.map +1 -1
  175. package/lib/cjs/widgets/TileStatisticsTracker.d.ts +21 -21
  176. package/lib/cjs/widgets/TileStatisticsTracker.d.ts.map +1 -1
  177. package/lib/cjs/widgets/TileStatisticsTracker.js +144 -142
  178. package/lib/cjs/widgets/TileStatisticsTracker.js.map +1 -1
  179. package/lib/cjs/widgets/ToolSettingsTracker.d.ts +9 -9
  180. package/lib/cjs/widgets/ToolSettingsTracker.js +211 -211
  181. package/lib/cjs/widgets/ToolSettingsTracker.js.map +1 -1
  182. package/lib/esm/ClipboardUtilities.d.ts +8 -8
  183. package/lib/esm/ClipboardUtilities.js +22 -22
  184. package/lib/esm/FrontEndDevTools.d.ts +19 -19
  185. package/lib/esm/FrontEndDevTools.js +218 -217
  186. package/lib/esm/FrontEndDevTools.js.map +1 -1
  187. package/lib/esm/effects/Convolution.d.ts +68 -68
  188. package/lib/esm/effects/Convolution.js +144 -138
  189. package/lib/esm/effects/Convolution.js.map +1 -1
  190. package/lib/esm/effects/EffectTools.d.ts +33 -33
  191. package/lib/esm/effects/EffectTools.js +63 -62
  192. package/lib/esm/effects/EffectTools.js.map +1 -1
  193. package/lib/esm/effects/Explosion.d.ts +12 -12
  194. package/lib/esm/effects/Explosion.js +165 -164
  195. package/lib/esm/effects/Explosion.js.map +1 -1
  196. package/lib/esm/effects/FlipImage.d.ts +30 -30
  197. package/lib/esm/effects/FlipImage.js +76 -74
  198. package/lib/esm/effects/FlipImage.js.map +1 -1
  199. package/lib/esm/effects/LensDistortion.d.ts +34 -34
  200. package/lib/esm/effects/LensDistortion.js +85 -83
  201. package/lib/esm/effects/LensDistortion.js.map +1 -1
  202. package/lib/esm/effects/Random.d.ts +24 -24
  203. package/lib/esm/effects/Random.js +41 -41
  204. package/lib/esm/effects/Saturation.d.ts +30 -30
  205. package/lib/esm/effects/Saturation.js +56 -54
  206. package/lib/esm/effects/Saturation.js.map +1 -1
  207. package/lib/esm/effects/Snow.d.ts +76 -76
  208. package/lib/esm/effects/Snow.js +184 -182
  209. package/lib/esm/effects/Snow.js.map +1 -1
  210. package/lib/esm/effects/Vignette.d.ts +39 -39
  211. package/lib/esm/effects/Vignette.js +76 -74
  212. package/lib/esm/effects/Vignette.js.map +1 -1
  213. package/lib/esm/frontend-devtools.d.ts +82 -82
  214. package/lib/esm/frontend-devtools.js +86 -86
  215. package/lib/esm/tools/AnimationIntervalTool.d.ts +15 -15
  216. package/lib/esm/tools/AnimationIntervalTool.js +27 -26
  217. package/lib/esm/tools/AnimationIntervalTool.js.map +1 -1
  218. package/lib/esm/tools/ChangeUnitsTool.d.ts +15 -15
  219. package/lib/esm/tools/ChangeUnitsTool.js +38 -37
  220. package/lib/esm/tools/ChangeUnitsTool.js.map +1 -1
  221. package/lib/esm/tools/ClipTools.d.ts +67 -67
  222. package/lib/esm/tools/ClipTools.js +158 -158
  223. package/lib/esm/tools/ClipTools.js.map +1 -1
  224. package/lib/esm/tools/DisplayStyleTools.d.ts +145 -145
  225. package/lib/esm/tools/DisplayStyleTools.js +364 -356
  226. package/lib/esm/tools/DisplayStyleTools.js.map +1 -1
  227. package/lib/esm/tools/EmphasizeElementsTool.d.ts +60 -60
  228. package/lib/esm/tools/EmphasizeElementsTool.js +150 -145
  229. package/lib/esm/tools/EmphasizeElementsTool.js.map +1 -1
  230. package/lib/esm/tools/FrustumDecoration.d.ts +57 -57
  231. package/lib/esm/tools/FrustumDecoration.js +370 -367
  232. package/lib/esm/tools/FrustumDecoration.js.map +1 -1
  233. package/lib/esm/tools/InspectElementTool.d.ts +42 -42
  234. package/lib/esm/tools/InspectElementTool.js +195 -194
  235. package/lib/esm/tools/InspectElementTool.js.map +1 -1
  236. package/lib/esm/tools/MapLayerTool.d.ts +264 -264
  237. package/lib/esm/tools/MapLayerTool.d.ts.map +1 -1
  238. package/lib/esm/tools/MapLayerTool.js +506 -485
  239. package/lib/esm/tools/MapLayerTool.js.map +1 -1
  240. package/lib/esm/tools/MeasureTileLoadTime.d.ts +12 -12
  241. package/lib/esm/tools/MeasureTileLoadTime.js +60 -59
  242. package/lib/esm/tools/MeasureTileLoadTime.js.map +1 -1
  243. package/lib/esm/tools/ModelAppearanceTools.d.ts +86 -86
  244. package/lib/esm/tools/ModelAppearanceTools.js +180 -172
  245. package/lib/esm/tools/ModelAppearanceTools.js.map +1 -1
  246. package/lib/esm/tools/PlanProjectionTools.d.ts +40 -40
  247. package/lib/esm/tools/PlanProjectionTools.js +146 -143
  248. package/lib/esm/tools/PlanProjectionTools.js.map +1 -1
  249. package/lib/esm/tools/PlanarMaskTools.d.ts +182 -182
  250. package/lib/esm/tools/PlanarMaskTools.js +387 -377
  251. package/lib/esm/tools/PlanarMaskTools.js.map +1 -1
  252. package/lib/esm/tools/ProjectExtents.d.ts +41 -41
  253. package/lib/esm/tools/ProjectExtents.js +105 -104
  254. package/lib/esm/tools/ProjectExtents.js.map +1 -1
  255. package/lib/esm/tools/RealityModelTools.d.ts +116 -116
  256. package/lib/esm/tools/RealityModelTools.js +278 -268
  257. package/lib/esm/tools/RealityModelTools.js.map +1 -1
  258. package/lib/esm/tools/RealityTransitionTool.d.ts +25 -25
  259. package/lib/esm/tools/RealityTransitionTool.js +112 -112
  260. package/lib/esm/tools/RealityTransitionTool.js.map +1 -1
  261. package/lib/esm/tools/RenderSystemTools.d.ts +38 -38
  262. package/lib/esm/tools/RenderSystemTools.js +65 -63
  263. package/lib/esm/tools/RenderSystemTools.js.map +1 -1
  264. package/lib/esm/tools/RenderTargetTools.d.ts +107 -107
  265. package/lib/esm/tools/RenderTargetTools.d.ts.map +1 -1
  266. package/lib/esm/tools/RenderTargetTools.js +169 -159
  267. package/lib/esm/tools/RenderTargetTools.js.map +1 -1
  268. package/lib/esm/tools/ReportWebGLCompatibilityTool.d.ts +11 -11
  269. package/lib/esm/tools/ReportWebGLCompatibilityTool.js +27 -26
  270. package/lib/esm/tools/ReportWebGLCompatibilityTool.js.map +1 -1
  271. package/lib/esm/tools/SavedViews.d.ts +46 -46
  272. package/lib/esm/tools/SavedViews.js +131 -128
  273. package/lib/esm/tools/SavedViews.js.map +1 -1
  274. package/lib/esm/tools/ScheduleScriptTools.d.ts +37 -37
  275. package/lib/esm/tools/ScheduleScriptTools.js +154 -153
  276. package/lib/esm/tools/ScheduleScriptTools.js.map +1 -1
  277. package/lib/esm/tools/SelectionTools.d.ts +28 -28
  278. package/lib/esm/tools/SelectionTools.js +84 -82
  279. package/lib/esm/tools/SelectionTools.js.map +1 -1
  280. package/lib/esm/tools/SetGpuMemoryLimitTool.d.ts +15 -15
  281. package/lib/esm/tools/SetGpuMemoryLimitTool.js +30 -29
  282. package/lib/esm/tools/SetGpuMemoryLimitTool.js.map +1 -1
  283. package/lib/esm/tools/SourceAspectIdTools.d.ts +40 -40
  284. package/lib/esm/tools/SourceAspectIdTools.js +81 -80
  285. package/lib/esm/tools/SourceAspectIdTools.js.map +1 -1
  286. package/lib/esm/tools/TileRequestDecoration.d.ts +12 -12
  287. package/lib/esm/tools/TileRequestDecoration.js +80 -79
  288. package/lib/esm/tools/TileRequestDecoration.js.map +1 -1
  289. package/lib/esm/tools/TileTreeBoundsDecoration.d.ts +11 -11
  290. package/lib/esm/tools/TileTreeBoundsDecoration.js +71 -70
  291. package/lib/esm/tools/TileTreeBoundsDecoration.js.map +1 -1
  292. package/lib/esm/tools/ToolTipProvider.d.ts +15 -15
  293. package/lib/esm/tools/ToolTipProvider.js +63 -62
  294. package/lib/esm/tools/ToolTipProvider.js.map +1 -1
  295. package/lib/esm/tools/ViewportTools.d.ts +218 -218
  296. package/lib/esm/tools/ViewportTools.d.ts.map +1 -1
  297. package/lib/esm/tools/ViewportTools.js +511 -492
  298. package/lib/esm/tools/ViewportTools.js.map +1 -1
  299. package/lib/esm/tools/parseArgs.d.ts +23 -23
  300. package/lib/esm/tools/parseArgs.js +47 -47
  301. package/lib/esm/tools/parseBoolean.d.ts +8 -8
  302. package/lib/esm/tools/parseBoolean.js +22 -22
  303. package/lib/esm/tools/parseToggle.d.ts +8 -8
  304. package/lib/esm/tools/parseToggle.js +21 -21
  305. package/lib/esm/ui/Button.d.ts +29 -29
  306. package/lib/esm/ui/Button.d.ts.map +1 -1
  307. package/lib/esm/ui/Button.js +22 -22
  308. package/lib/esm/ui/CheckBox.d.ts +23 -23
  309. package/lib/esm/ui/CheckBox.d.ts.map +1 -1
  310. package/lib/esm/ui/CheckBox.js +23 -23
  311. package/lib/esm/ui/ColorInput.d.ts +27 -27
  312. package/lib/esm/ui/ColorInput.d.ts.map +1 -1
  313. package/lib/esm/ui/ColorInput.js +48 -48
  314. package/lib/esm/ui/ComboBox.d.ts +28 -28
  315. package/lib/esm/ui/ComboBox.d.ts.map +1 -1
  316. package/lib/esm/ui/ComboBox.js +38 -38
  317. package/lib/esm/ui/DataList.d.ts +27 -27
  318. package/lib/esm/ui/DataList.d.ts.map +1 -1
  319. package/lib/esm/ui/DataList.js +34 -34
  320. package/lib/esm/ui/NestedMenu.d.ts +19 -19
  321. package/lib/esm/ui/NestedMenu.d.ts.map +1 -1
  322. package/lib/esm/ui/NestedMenu.js +42 -42
  323. package/lib/esm/ui/NumericInput.d.ts +35 -35
  324. package/lib/esm/ui/NumericInput.d.ts.map +1 -1
  325. package/lib/esm/ui/NumericInput.js +56 -56
  326. package/lib/esm/ui/RadioBox.d.ts +29 -29
  327. package/lib/esm/ui/RadioBox.d.ts.map +1 -1
  328. package/lib/esm/ui/RadioBox.js +72 -72
  329. package/lib/esm/ui/Slider.d.ts +28 -28
  330. package/lib/esm/ui/Slider.d.ts.map +1 -1
  331. package/lib/esm/ui/Slider.js +38 -38
  332. package/lib/esm/ui/TextBox.d.ts +32 -32
  333. package/lib/esm/ui/TextBox.d.ts.map +1 -1
  334. package/lib/esm/ui/TextBox.js +52 -52
  335. package/lib/esm/widgets/DiagnosticsPanel.d.ts +37 -37
  336. package/lib/esm/widgets/DiagnosticsPanel.js +77 -77
  337. package/lib/esm/widgets/FpsTracker.d.ts +19 -19
  338. package/lib/esm/widgets/FpsTracker.js +52 -52
  339. package/lib/esm/widgets/GpuProfiler.d.ts +16 -16
  340. package/lib/esm/widgets/GpuProfiler.js +188 -188
  341. package/lib/esm/widgets/KeyinField.d.ts +61 -61
  342. package/lib/esm/widgets/KeyinField.js +182 -183
  343. package/lib/esm/widgets/KeyinField.js.map +1 -1
  344. package/lib/esm/widgets/MemoryTracker.d.ts +27 -27
  345. package/lib/esm/widgets/MemoryTracker.js +237 -238
  346. package/lib/esm/widgets/MemoryTracker.js.map +1 -1
  347. package/lib/esm/widgets/RenderCommandBreakdown.d.ts +15 -15
  348. package/lib/esm/widgets/RenderCommandBreakdown.js +63 -64
  349. package/lib/esm/widgets/RenderCommandBreakdown.js.map +1 -1
  350. package/lib/esm/widgets/TileMemoryBreakdown.d.ts +30 -30
  351. package/lib/esm/widgets/TileMemoryBreakdown.js +199 -200
  352. package/lib/esm/widgets/TileMemoryBreakdown.js.map +1 -1
  353. package/lib/esm/widgets/TileStatisticsTracker.d.ts +21 -21
  354. package/lib/esm/widgets/TileStatisticsTracker.d.ts.map +1 -1
  355. package/lib/esm/widgets/TileStatisticsTracker.js +140 -138
  356. package/lib/esm/widgets/TileStatisticsTracker.js.map +1 -1
  357. package/lib/esm/widgets/ToolSettingsTracker.d.ts +9 -9
  358. package/lib/esm/widgets/ToolSettingsTracker.js +208 -207
  359. package/lib/esm/widgets/ToolSettingsTracker.js.map +1 -1
  360. package/package.json +14 -14
@@ -1,239 +1,238 @@
1
- /*---------------------------------------------------------------------------------------------
2
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
- * See LICENSE.md in the project root for license terms and full copyright notice.
4
- *--------------------------------------------------------------------------------------------*/
5
- /** @packageDocumentation
6
- * @module Widgets
7
- */
8
- import { assert, BeTimePoint } from "@itwin/core-bentley";
9
- import { DisclosedTileTreeSet, IModelApp, RenderMemory, } from "@itwin/core-frontend";
10
- import { createComboBox } from "../ui/ComboBox";
11
- function collectTileTreeMemory(stats, owner) {
12
- const tree = owner.tileTree;
13
- if (undefined !== tree)
14
- tree.collectStatistics(stats);
15
- }
16
- // Includes None (-1) at index 0
17
- const memLabels = [
18
- "None",
19
- "Viewed Tile Trees",
20
- "Selected Tiles",
21
- "All Tile Trees",
22
- "Render Target",
23
- "Viewport",
24
- "System",
25
- "All",
26
- ];
27
- function collectStatisticsForViewedTileTrees(vp, stats) {
28
- vp.collectStatistics(stats);
29
- const trees = new DisclosedTileTreeSet();
30
- vp.discloseTileTrees(trees);
31
- return trees.size;
32
- }
33
- function collectStatisticsForSelectedTiles(vp, stats) {
34
- var _a;
35
- const trees = new Set();
36
- const selectedTiles = (_a = IModelApp.tileAdmin.getTilesForUser(vp)) === null || _a === void 0 ? void 0 : _a.selected;
37
- if (selectedTiles) {
38
- for (const tile of selectedTiles) {
39
- trees.add(tile.tree);
40
- tile.collectStatistics(stats);
41
- }
42
- }
43
- return trees.size;
44
- }
45
- function collectStatisticsForAllTileTrees(vp, stats) {
46
- let numTrees = 0;
47
- vp.view.iModel.tiles.forEachTreeOwner((owner) => {
48
- collectTileTreeMemory(stats, owner);
49
- if (undefined !== owner.tileTree)
50
- ++numTrees;
51
- });
52
- return numTrees;
53
- }
54
- const calcMem = [
55
- (stats, vp) => collectStatisticsForViewedTileTrees(vp, stats),
56
- (stats, vp) => collectStatisticsForSelectedTiles(vp, stats),
57
- (stats, vp) => collectStatisticsForAllTileTrees(vp, stats),
58
- (stats, vp) => {
59
- vp.target.collectStatistics(stats);
60
- return 0;
61
- },
62
- (stats, vp) => {
63
- vp.target.collectStatistics(stats);
64
- return collectStatisticsForViewedTileTrees(vp, stats);
65
- },
66
- (stats, vp) => {
67
- vp.target.renderSystem.collectStatistics(stats);
68
- return 0;
69
- },
70
- (stats, vp) => {
71
- vp.target.renderSystem.collectStatistics(stats);
72
- for (const x of IModelApp.viewManager)
73
- x.target.collectStatistics(stats);
74
- return collectStatisticsForAllTileTrees(vp, stats);
75
- },
76
- ];
77
- // ###TODO...
78
- const purgeMem = [
79
- undefined,
80
- (olderThan) => IModelApp.viewManager.purgeTileTrees(olderThan ? olderThan : BeTimePoint.now()),
81
- ];
82
- /** @internal */
83
- export function formatMemory(numBytes) {
84
- let suffix = "b";
85
- if (numBytes >= 1024) {
86
- numBytes /= 1024;
87
- suffix = "kb";
88
- if (numBytes >= 1024) {
89
- numBytes /= 1024;
90
- suffix = "mb";
91
- }
92
- }
93
- return numBytes.toFixed(2) + suffix;
94
- }
95
- class MemoryPanel {
96
- constructor(parent, label, labels) {
97
- this._elems = [];
98
- this._label = label;
99
- this._labels = labels;
100
- this._div = document.createElement("div");
101
- this._header = document.createElement("label");
102
- this._header.style.fontWeight = "bold";
103
- this._div.appendChild(this._header);
104
- const numElems = labels.length;
105
- for (let i = 0; i < numElems; i++) {
106
- const elem = document.createElement("label");
107
- this._elems.push(elem);
108
- this._div.appendChild(elem);
109
- }
110
- parent.appendChild(this._div);
111
- }
112
- update(stats, total) {
113
- assert(this._labels.length === stats.length);
114
- assert(this._labels.length === this._elems.length);
115
- this._header.innerHTML = `${this._label}: ${formatMemory(total)}`;
116
- for (let i = 0; i < this._labels.length; i++) {
117
- const elem = this._elems[i];
118
- const stat = stats[i];
119
- if (0 === stat.totalBytes) {
120
- elem.style.display = "none";
121
- continue;
122
- }
123
- elem.style.display = "block";
124
- elem.innerHTML = `${this._labels[i]} (${stat.count}): ${formatMemory(stat.totalBytes)}`; // + "\n(max: " + formatMemory(stat.maxBytes) + ")";
125
- }
126
- }
127
- }
128
- /** Displays GPU memory allocated to tile trees - either all tile trees in the system, or only those associated with a specific Viewport.
129
- * @beta
130
- */
131
- export class MemoryTracker {
132
- constructor(parent, vp) {
133
- this._stats = new RenderMemory.Statistics();
134
- this._memIndex = -1 /* None */;
135
- this._vp = vp;
136
- this._div = document.createElement("div");
137
- this._div.style.display = "none";
138
- this._div.style.textAlign = "right";
139
- this.addSelector(parent);
140
- const table = document.createElement("table");
141
- table.style.width = "100%";
142
- table.setAttribute("border", "1");
143
- this._div.appendChild(table);
144
- const row0 = document.createElement("tr");
145
- const cell00 = document.createElement("td");
146
- const cell01 = document.createElement("td");
147
- cell00.style.width = cell01.style.width = "50%";
148
- row0.appendChild(cell00);
149
- row0.appendChild(cell01);
150
- table.appendChild(row0);
151
- const row1 = document.createElement("tr");
152
- const cell10 = document.createElement("td");
153
- const cell11 = document.createElement("td");
154
- cell10.style.width = cell11.style.width = "50%";
155
- row1.appendChild(cell10);
156
- row1.appendChild(cell11);
157
- table.appendChild(row1);
158
- this._textures = new MemoryPanel(cell00, "Textures", ["Surface Textures", "Vertex Tables", "Edge Tables", "Feature Tables", "Feature Overrides", "Clip Volumes", "Planar Classifiers", "Shadow Maps", "Texture Attachments", "Thematic Textures"]);
159
- this._buffers = new MemoryPanel(cell01, "Buffers", ["Surfaces", "Visible Edges", "Silhouettes", "Polyline Edges", "Indexed Edges", "Polylines", "Point Strings", "Point Clouds", "Instances", "Terrain", "Reality Mesh"]);
160
- this._totalElem = this.addStatistics(cell10);
161
- this._totalTreesElem = this.addStatistics(cell11);
162
- this._purgeButton = this.addPurgeButton(this._div);
163
- parent.appendChild(this._div);
164
- }
165
- dispose() {
166
- this.clearInterval();
167
- }
168
- addSelector(parent) {
169
- const entries = [];
170
- for (let i = -1 /* None */; i < 7 /* COUNT */; i++)
171
- entries.push({ name: memLabels[i + 1], value: i });
172
- createComboBox({
173
- parent,
174
- name: "Track Memory: ",
175
- id: "memTracker_type",
176
- value: -1 /* None */,
177
- handler: (select) => this.change(Number.parseInt(select.value, 10)),
178
- entries,
179
- });
180
- }
181
- addPurgeButton(parent) {
182
- const div = document.createElement("div");
183
- div.style.textAlign = "center";
184
- const button = document.createElement("button");
185
- button.innerText = "Purge";
186
- button.addEventListener("click", () => this.purge());
187
- div.appendChild(button);
188
- parent.appendChild(div);
189
- return button;
190
- }
191
- addStatistics(parent) {
192
- const div = document.createElement("div");
193
- const text = document.createElement("text");
194
- text.style.fontWeight = "bold";
195
- div.appendChild(text);
196
- parent.appendChild(div);
197
- return text;
198
- }
199
- clearInterval() {
200
- if (undefined !== this._curIntervalId) {
201
- clearInterval(this._curIntervalId);
202
- this._curIntervalId = undefined;
203
- }
204
- }
205
- change(newIndex) {
206
- if (newIndex === this._memIndex)
207
- return;
208
- this._memIndex = newIndex;
209
- if (-1 /* None */ === newIndex) {
210
- this.clearInterval();
211
- this._div.style.display = "none";
212
- return;
213
- }
214
- if (undefined === this._curIntervalId) {
215
- this._curIntervalId = setInterval(() => this.update(), 1000);
216
- this._div.style.display = "block";
217
- }
218
- this._purgeButton.disabled = undefined === purgeMem[this._memIndex];
219
- this.update();
220
- }
221
- update() {
222
- const calc = calcMem[this._memIndex];
223
- this._stats.clear();
224
- const numTrees = calc(this._stats, this._vp);
225
- this._totalElem.innerText = `Total: ${formatMemory(this._stats.totalBytes)}`;
226
- this._totalTreesElem.innerText = `Total Tile Trees: ${numTrees}`;
227
- this._textures.update(this._stats.consumers, this._stats.totalBytes - this._stats.buffers.totalBytes);
228
- this._buffers.update(this._stats.buffers.consumers, this._stats.buffers.totalBytes);
229
- }
230
- purge() {
231
- const purge = purgeMem[this._memIndex];
232
- if (undefined !== purge) {
233
- purge();
234
- this._vp.invalidateScene(); // to trigger reloading of tiles we actually do want to continue drawing
235
- this.update();
236
- }
237
- }
238
- }
1
+ /*---------------------------------------------------------------------------------------------
2
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
3
+ * See LICENSE.md in the project root for license terms and full copyright notice.
4
+ *--------------------------------------------------------------------------------------------*/
5
+ /** @packageDocumentation
6
+ * @module Widgets
7
+ */
8
+ import { assert, BeTimePoint } from "@itwin/core-bentley";
9
+ import { DisclosedTileTreeSet, IModelApp, RenderMemory, } from "@itwin/core-frontend";
10
+ import { createComboBox } from "../ui/ComboBox";
11
+ function collectTileTreeMemory(stats, owner) {
12
+ const tree = owner.tileTree;
13
+ if (undefined !== tree)
14
+ tree.collectStatistics(stats);
15
+ }
16
+ // Includes None (-1) at index 0
17
+ const memLabels = [
18
+ "None",
19
+ "Viewed Tile Trees",
20
+ "Selected Tiles",
21
+ "All Tile Trees",
22
+ "Render Target",
23
+ "Viewport",
24
+ "System",
25
+ "All",
26
+ ];
27
+ function collectStatisticsForViewedTileTrees(vp, stats) {
28
+ vp.collectStatistics(stats);
29
+ const trees = new DisclosedTileTreeSet();
30
+ vp.discloseTileTrees(trees);
31
+ return trees.size;
32
+ }
33
+ function collectStatisticsForSelectedTiles(vp, stats) {
34
+ const trees = new Set();
35
+ const selectedTiles = IModelApp.tileAdmin.getTilesForUser(vp)?.selected;
36
+ if (selectedTiles) {
37
+ for (const tile of selectedTiles) {
38
+ trees.add(tile.tree);
39
+ tile.collectStatistics(stats);
40
+ }
41
+ }
42
+ return trees.size;
43
+ }
44
+ function collectStatisticsForAllTileTrees(vp, stats) {
45
+ let numTrees = 0;
46
+ vp.view.iModel.tiles.forEachTreeOwner((owner) => {
47
+ collectTileTreeMemory(stats, owner);
48
+ if (undefined !== owner.tileTree)
49
+ ++numTrees;
50
+ });
51
+ return numTrees;
52
+ }
53
+ const calcMem = [
54
+ (stats, vp) => collectStatisticsForViewedTileTrees(vp, stats),
55
+ (stats, vp) => collectStatisticsForSelectedTiles(vp, stats),
56
+ (stats, vp) => collectStatisticsForAllTileTrees(vp, stats),
57
+ (stats, vp) => {
58
+ vp.target.collectStatistics(stats);
59
+ return 0;
60
+ },
61
+ (stats, vp) => {
62
+ vp.target.collectStatistics(stats);
63
+ return collectStatisticsForViewedTileTrees(vp, stats);
64
+ },
65
+ (stats, vp) => {
66
+ vp.target.renderSystem.collectStatistics(stats);
67
+ return 0;
68
+ },
69
+ (stats, vp) => {
70
+ vp.target.renderSystem.collectStatistics(stats);
71
+ for (const x of IModelApp.viewManager)
72
+ x.target.collectStatistics(stats);
73
+ return collectStatisticsForAllTileTrees(vp, stats);
74
+ },
75
+ ];
76
+ // ###TODO...
77
+ const purgeMem = [
78
+ undefined,
79
+ (olderThan) => IModelApp.viewManager.purgeTileTrees(olderThan ? olderThan : BeTimePoint.now()),
80
+ ];
81
+ /** @internal */
82
+ export function formatMemory(numBytes) {
83
+ let suffix = "b";
84
+ if (numBytes >= 1024) {
85
+ numBytes /= 1024;
86
+ suffix = "kb";
87
+ if (numBytes >= 1024) {
88
+ numBytes /= 1024;
89
+ suffix = "mb";
90
+ }
91
+ }
92
+ return numBytes.toFixed(2) + suffix;
93
+ }
94
+ class MemoryPanel {
95
+ constructor(parent, label, labels) {
96
+ this._elems = [];
97
+ this._label = label;
98
+ this._labels = labels;
99
+ this._div = document.createElement("div");
100
+ this._header = document.createElement("label");
101
+ this._header.style.fontWeight = "bold";
102
+ this._div.appendChild(this._header);
103
+ const numElems = labels.length;
104
+ for (let i = 0; i < numElems; i++) {
105
+ const elem = document.createElement("label");
106
+ this._elems.push(elem);
107
+ this._div.appendChild(elem);
108
+ }
109
+ parent.appendChild(this._div);
110
+ }
111
+ update(stats, total) {
112
+ assert(this._labels.length === stats.length);
113
+ assert(this._labels.length === this._elems.length);
114
+ this._header.innerHTML = `${this._label}: ${formatMemory(total)}`;
115
+ for (let i = 0; i < this._labels.length; i++) {
116
+ const elem = this._elems[i];
117
+ const stat = stats[i];
118
+ if (0 === stat.totalBytes) {
119
+ elem.style.display = "none";
120
+ continue;
121
+ }
122
+ elem.style.display = "block";
123
+ elem.innerHTML = `${this._labels[i]} (${stat.count}): ${formatMemory(stat.totalBytes)}`; // + "\n(max: " + formatMemory(stat.maxBytes) + ")";
124
+ }
125
+ }
126
+ }
127
+ /** Displays GPU memory allocated to tile trees - either all tile trees in the system, or only those associated with a specific Viewport.
128
+ * @beta
129
+ */
130
+ export class MemoryTracker {
131
+ constructor(parent, vp) {
132
+ this._stats = new RenderMemory.Statistics();
133
+ this._memIndex = -1 /* MemIndex.None */;
134
+ this._vp = vp;
135
+ this._div = document.createElement("div");
136
+ this._div.style.display = "none";
137
+ this._div.style.textAlign = "right";
138
+ this.addSelector(parent);
139
+ const table = document.createElement("table");
140
+ table.style.width = "100%";
141
+ table.setAttribute("border", "1");
142
+ this._div.appendChild(table);
143
+ const row0 = document.createElement("tr");
144
+ const cell00 = document.createElement("td");
145
+ const cell01 = document.createElement("td");
146
+ cell00.style.width = cell01.style.width = "50%";
147
+ row0.appendChild(cell00);
148
+ row0.appendChild(cell01);
149
+ table.appendChild(row0);
150
+ const row1 = document.createElement("tr");
151
+ const cell10 = document.createElement("td");
152
+ const cell11 = document.createElement("td");
153
+ cell10.style.width = cell11.style.width = "50%";
154
+ row1.appendChild(cell10);
155
+ row1.appendChild(cell11);
156
+ table.appendChild(row1);
157
+ this._textures = new MemoryPanel(cell00, "Textures", ["Surface Textures", "Vertex Tables", "Edge Tables", "Feature Tables", "Feature Overrides", "Clip Volumes", "Planar Classifiers", "Shadow Maps", "Texture Attachments", "Thematic Textures"]);
158
+ this._buffers = new MemoryPanel(cell01, "Buffers", ["Surfaces", "Visible Edges", "Silhouettes", "Polyline Edges", "Indexed Edges", "Polylines", "Point Strings", "Point Clouds", "Instances", "Terrain", "Reality Mesh"]);
159
+ this._totalElem = this.addStatistics(cell10);
160
+ this._totalTreesElem = this.addStatistics(cell11);
161
+ this._purgeButton = this.addPurgeButton(this._div);
162
+ parent.appendChild(this._div);
163
+ }
164
+ dispose() {
165
+ this.clearInterval();
166
+ }
167
+ addSelector(parent) {
168
+ const entries = [];
169
+ for (let i = -1 /* MemIndex.None */; i < 7 /* MemIndex.COUNT */; i++)
170
+ entries.push({ name: memLabels[i + 1], value: i });
171
+ createComboBox({
172
+ parent,
173
+ name: "Track Memory: ",
174
+ id: "memTracker_type",
175
+ value: -1 /* MemIndex.None */,
176
+ handler: (select) => this.change(Number.parseInt(select.value, 10)),
177
+ entries,
178
+ });
179
+ }
180
+ addPurgeButton(parent) {
181
+ const div = document.createElement("div");
182
+ div.style.textAlign = "center";
183
+ const button = document.createElement("button");
184
+ button.innerText = "Purge";
185
+ button.addEventListener("click", () => this.purge());
186
+ div.appendChild(button);
187
+ parent.appendChild(div);
188
+ return button;
189
+ }
190
+ addStatistics(parent) {
191
+ const div = document.createElement("div");
192
+ const text = document.createElement("text");
193
+ text.style.fontWeight = "bold";
194
+ div.appendChild(text);
195
+ parent.appendChild(div);
196
+ return text;
197
+ }
198
+ clearInterval() {
199
+ if (undefined !== this._curIntervalId) {
200
+ clearInterval(this._curIntervalId);
201
+ this._curIntervalId = undefined;
202
+ }
203
+ }
204
+ change(newIndex) {
205
+ if (newIndex === this._memIndex)
206
+ return;
207
+ this._memIndex = newIndex;
208
+ if (-1 /* MemIndex.None */ === newIndex) {
209
+ this.clearInterval();
210
+ this._div.style.display = "none";
211
+ return;
212
+ }
213
+ if (undefined === this._curIntervalId) {
214
+ this._curIntervalId = setInterval(() => this.update(), 1000);
215
+ this._div.style.display = "block";
216
+ }
217
+ this._purgeButton.disabled = undefined === purgeMem[this._memIndex];
218
+ this.update();
219
+ }
220
+ update() {
221
+ const calc = calcMem[this._memIndex];
222
+ this._stats.clear();
223
+ const numTrees = calc(this._stats, this._vp);
224
+ this._totalElem.innerText = `Total: ${formatMemory(this._stats.totalBytes)}`;
225
+ this._totalTreesElem.innerText = `Total Tile Trees: ${numTrees}`;
226
+ this._textures.update(this._stats.consumers, this._stats.totalBytes - this._stats.buffers.totalBytes);
227
+ this._buffers.update(this._stats.buffers.consumers, this._stats.buffers.totalBytes);
228
+ }
229
+ purge() {
230
+ const purge = purgeMem[this._memIndex];
231
+ if (undefined !== purge) {
232
+ purge();
233
+ this._vp.invalidateScene(); // to trigger reloading of tiles we actually do want to continue drawing
234
+ this.update();
235
+ }
236
+ }
237
+ }
239
238
  //# sourceMappingURL=MemoryTracker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"MemoryTracker.js","sourceRoot":"","sources":["../../../src/widgets/MemoryTracker.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Widgets\r\n */\r\n\r\nimport { assert, BeTimePoint } from \"@itwin/core-bentley\";\r\nimport {\r\n DisclosedTileTreeSet, IModelApp, RenderMemory, TileTree, TileTreeOwner, Viewport,\r\n} from \"@itwin/core-frontend\";\r\nimport { ComboBoxEntry, createComboBox } from \"../ui/ComboBox\";\r\n\r\nfunction collectTileTreeMemory(stats: RenderMemory.Statistics, owner: TileTreeOwner): void {\r\n const tree = owner.tileTree;\r\n if (undefined !== tree)\r\n tree.collectStatistics(stats);\r\n}\r\n\r\n// Returns the number of tile trees processed.\r\ntype CalcMem = (stats: RenderMemory.Statistics, vp: Viewport) => number;\r\ntype PurgeMem = (olderThan?: BeTimePoint) => void;\r\n\r\nconst enum MemIndex { // eslint-disable-line no-restricted-syntax\r\n None = -1,\r\n ViewportTileTrees,\r\n SelectedTiles,\r\n AllTileTrees,\r\n RenderTarget,\r\n // eslint-disable-next-line @typescript-eslint/no-shadow\r\n Viewport, // RenderTarget + Viewed Tile Trees\r\n System,\r\n All, // All Tile Trees + System + (RenderTarget for each ViewManager viewport)\r\n\r\n COUNT,\r\n}\r\n\r\n// Includes None (-1) at index 0\r\nconst memLabels = [\r\n \"None\",\r\n \"Viewed Tile Trees\",\r\n \"Selected Tiles\",\r\n \"All Tile Trees\",\r\n \"Render Target\",\r\n \"Viewport\",\r\n \"System\",\r\n \"All\",\r\n];\r\n\r\nfunction collectStatisticsForViewedTileTrees(vp: Viewport, stats: RenderMemory.Statistics): number {\r\n vp.collectStatistics(stats);\r\n const trees = new DisclosedTileTreeSet();\r\n vp.discloseTileTrees(trees);\r\n return trees.size;\r\n}\r\n\r\nfunction collectStatisticsForSelectedTiles(vp: Viewport, stats: RenderMemory.Statistics): number {\r\n const trees = new Set<TileTree>();\r\n const selectedTiles = IModelApp.tileAdmin.getTilesForUser(vp)?.selected;\r\n if (selectedTiles) {\r\n for (const tile of selectedTiles) {\r\n trees.add(tile.tree);\r\n tile.collectStatistics(stats);\r\n }\r\n }\r\n\r\n return trees.size;\r\n}\r\n\r\nfunction collectStatisticsForAllTileTrees(vp: Viewport, stats: RenderMemory.Statistics): number {\r\n let numTrees = 0;\r\n vp.view.iModel.tiles.forEachTreeOwner((owner) => {\r\n collectTileTreeMemory(stats, owner);\r\n if (undefined !== owner.tileTree)\r\n ++numTrees;\r\n });\r\n return numTrees;\r\n}\r\n\r\nconst calcMem: CalcMem[] = [\r\n (stats, vp) => collectStatisticsForViewedTileTrees(vp, stats),\r\n (stats, vp) => collectStatisticsForSelectedTiles(vp, stats),\r\n (stats, vp) => collectStatisticsForAllTileTrees(vp, stats),\r\n (stats, vp) => {\r\n vp.target.collectStatistics(stats);\r\n return 0;\r\n },\r\n (stats, vp) => {\r\n vp.target.collectStatistics(stats);\r\n return collectStatisticsForViewedTileTrees(vp, stats);\r\n },\r\n (stats, vp) => {\r\n vp.target.renderSystem.collectStatistics(stats);\r\n return 0;\r\n },\r\n (stats, vp) => {\r\n vp.target.renderSystem.collectStatistics(stats);\r\n for (const x of IModelApp.viewManager)\r\n x.target.collectStatistics(stats);\r\n\r\n return collectStatisticsForAllTileTrees(vp, stats);\r\n },\r\n];\r\n\r\n// ###TODO...\r\nconst purgeMem: Array<PurgeMem | undefined> = [\r\n undefined,\r\n (olderThan?) => IModelApp.viewManager.purgeTileTrees(olderThan ? olderThan : BeTimePoint.now()),\r\n];\r\n\r\n/** @internal */\r\nexport function formatMemory(numBytes: number): string {\r\n let suffix = \"b\";\r\n if (numBytes >= 1024) {\r\n numBytes /= 1024;\r\n suffix = \"kb\";\r\n if (numBytes >= 1024) {\r\n numBytes /= 1024;\r\n suffix = \"mb\";\r\n }\r\n }\r\n\r\n return numBytes.toFixed(2) + suffix;\r\n}\r\n\r\nclass MemoryPanel {\r\n private readonly _label: string;\r\n private readonly _labels: string[];\r\n private readonly _elems: HTMLElement[] = [];\r\n private readonly _div: HTMLDivElement;\r\n private readonly _header: HTMLElement;\r\n\r\n public constructor(parent: HTMLElement, label: string, labels: string[]) {\r\n this._label = label;\r\n this._labels = labels;\r\n this._div = document.createElement(\"div\");\r\n\r\n this._header = document.createElement(\"label\")!;\r\n this._header.style.fontWeight = \"bold\";\r\n this._div.appendChild(this._header);\r\n\r\n const numElems = labels.length;\r\n for (let i = 0; i < numElems; i++) {\r\n const elem = document.createElement(\"label\");\r\n this._elems.push(elem);\r\n this._div.appendChild(elem);\r\n }\r\n\r\n parent.appendChild(this._div);\r\n }\r\n\r\n public update(stats: RenderMemory.Consumers[], total: number): void {\r\n assert(this._labels.length === stats.length);\r\n assert(this._labels.length === this._elems.length);\r\n\r\n this._header.innerHTML = `${this._label}: ${formatMemory(total)}`;\r\n\r\n for (let i = 0; i < this._labels.length; i++) {\r\n const elem = this._elems[i];\r\n const stat = stats[i];\r\n if (0 === stat.totalBytes) {\r\n elem.style.display = \"none\";\r\n continue;\r\n }\r\n\r\n elem.style.display = \"block\";\r\n elem.innerHTML = `${this._labels[i]} (${stat.count}): ${formatMemory(stat.totalBytes)}`; // + \"\\n(max: \" + formatMemory(stat.maxBytes) + \")\";\r\n }\r\n }\r\n}\r\n\r\n/** Displays GPU memory allocated to tile trees - either all tile trees in the system, or only those associated with a specific Viewport.\r\n * @beta\r\n */\r\nexport class MemoryTracker {\r\n private readonly _stats = new RenderMemory.Statistics();\r\n private readonly _vp: Viewport;\r\n private readonly _div: HTMLDivElement;\r\n private _curIntervalId?: NodeJS.Timer;\r\n private _memIndex = MemIndex.None;\r\n private readonly _totalElem: HTMLElement;\r\n private readonly _totalTreesElem: HTMLElement;\r\n private readonly _purgeButton: HTMLButtonElement;\r\n private readonly _textures: MemoryPanel;\r\n private readonly _buffers: MemoryPanel;\r\n\r\n public constructor(parent: HTMLElement, vp: Viewport) {\r\n this._vp = vp;\r\n\r\n this._div = document.createElement(\"div\");\r\n this._div.style.display = \"none\";\r\n this._div.style.textAlign = \"right\";\r\n\r\n this.addSelector(parent);\r\n\r\n const table = document.createElement(\"table\");\r\n table.style.width = \"100%\";\r\n table.setAttribute(\"border\", \"1\");\r\n this._div.appendChild(table);\r\n\r\n const row0 = document.createElement(\"tr\");\r\n const cell00 = document.createElement(\"td\");\r\n const cell01 = document.createElement(\"td\");\r\n cell00.style.width = cell01.style.width = \"50%\";\r\n row0.appendChild(cell00);\r\n row0.appendChild(cell01);\r\n table.appendChild(row0);\r\n\r\n const row1 = document.createElement(\"tr\");\r\n const cell10 = document.createElement(\"td\");\r\n const cell11 = document.createElement(\"td\");\r\n cell10.style.width = cell11.style.width = \"50%\";\r\n row1.appendChild(cell10);\r\n row1.appendChild(cell11);\r\n table.appendChild(row1);\r\n\r\n this._textures = new MemoryPanel(cell00, \"Textures\", [\"Surface Textures\", \"Vertex Tables\", \"Edge Tables\", \"Feature Tables\", \"Feature Overrides\", \"Clip Volumes\", \"Planar Classifiers\", \"Shadow Maps\", \"Texture Attachments\", \"Thematic Textures\"]);\r\n this._buffers = new MemoryPanel(cell01, \"Buffers\", [\"Surfaces\", \"Visible Edges\", \"Silhouettes\", \"Polyline Edges\", \"Indexed Edges\", \"Polylines\", \"Point Strings\", \"Point Clouds\", \"Instances\", \"Terrain\", \"Reality Mesh\"]);\r\n this._totalElem = this.addStatistics(cell10);\r\n this._totalTreesElem = this.addStatistics(cell11);\r\n\r\n this._purgeButton = this.addPurgeButton(this._div);\r\n\r\n parent.appendChild(this._div);\r\n }\r\n\r\n public dispose(): void {\r\n this.clearInterval();\r\n }\r\n\r\n private addSelector(parent: HTMLElement): void {\r\n const entries: ComboBoxEntry[] = [];\r\n for (let i = MemIndex.None; i < MemIndex.COUNT; i++)\r\n entries.push({ name: memLabels[i + 1], value: i });\r\n\r\n createComboBox({\r\n parent,\r\n name: \"Track Memory: \",\r\n id: \"memTracker_type\",\r\n value: MemIndex.None,\r\n handler: (select) => this.change(Number.parseInt(select.value, 10)),\r\n entries,\r\n });\r\n }\r\n\r\n private addPurgeButton(parent: HTMLElement): HTMLButtonElement {\r\n const div = document.createElement(\"div\");\r\n div.style.textAlign = \"center\";\r\n\r\n const button = document.createElement(\"button\");\r\n button.innerText = \"Purge\";\r\n button.addEventListener(\"click\", () => this.purge());\r\n\r\n div.appendChild(button);\r\n parent.appendChild(div);\r\n\r\n return button;\r\n }\r\n\r\n private addStatistics(parent: HTMLElement): HTMLElement {\r\n const div = document.createElement(\"div\");\r\n const text = document.createElement(\"text\");\r\n text.style.fontWeight = \"bold\";\r\n div.appendChild(text);\r\n parent.appendChild(div);\r\n return text;\r\n }\r\n\r\n private clearInterval(): void {\r\n if (undefined !== this._curIntervalId) {\r\n clearInterval(this._curIntervalId);\r\n this._curIntervalId = undefined;\r\n }\r\n }\r\n\r\n private change(newIndex: MemIndex): void {\r\n if (newIndex === this._memIndex)\r\n return;\r\n\r\n this._memIndex = newIndex;\r\n if (MemIndex.None === newIndex) {\r\n this.clearInterval();\r\n this._div.style.display = \"none\";\r\n return;\r\n }\r\n\r\n if (undefined === this._curIntervalId) {\r\n this._curIntervalId = setInterval(() => this.update(), 1000);\r\n this._div.style.display = \"block\";\r\n }\r\n\r\n this._purgeButton.disabled = undefined === purgeMem[this._memIndex];\r\n\r\n this.update();\r\n }\r\n\r\n private update(): void {\r\n const calc = calcMem[this._memIndex];\r\n this._stats.clear();\r\n const numTrees = calc(this._stats, this._vp);\r\n this._totalElem.innerText = `Total: ${formatMemory(this._stats.totalBytes)}`;\r\n this._totalTreesElem.innerText = `Total Tile Trees: ${numTrees}`;\r\n\r\n this._textures.update(this._stats.consumers, this._stats.totalBytes - this._stats.buffers.totalBytes);\r\n this._buffers.update(this._stats.buffers.consumers, this._stats.buffers.totalBytes);\r\n }\r\n\r\n private purge(): void {\r\n const purge = purgeMem[this._memIndex];\r\n if (undefined !== purge) {\r\n purge();\r\n this._vp.invalidateScene(); // to trigger reloading of tiles we actually do want to continue drawing\r\n this.update();\r\n }\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"MemoryTracker.js","sourceRoot":"","sources":["../../../src/widgets/MemoryTracker.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\r\n* See LICENSE.md in the project root for license terms and full copyright notice.\r\n*--------------------------------------------------------------------------------------------*/\r\n\r\n/** @packageDocumentation\r\n * @module Widgets\r\n */\r\n\r\nimport { assert, BeTimePoint } from \"@itwin/core-bentley\";\r\nimport {\r\n DisclosedTileTreeSet, IModelApp, RenderMemory, TileTree, TileTreeOwner, Viewport,\r\n} from \"@itwin/core-frontend\";\r\nimport { ComboBoxEntry, createComboBox } from \"../ui/ComboBox\";\r\n\r\nfunction collectTileTreeMemory(stats: RenderMemory.Statistics, owner: TileTreeOwner): void {\r\n const tree = owner.tileTree;\r\n if (undefined !== tree)\r\n tree.collectStatistics(stats);\r\n}\r\n\r\n// Returns the number of tile trees processed.\r\ntype CalcMem = (stats: RenderMemory.Statistics, vp: Viewport) => number;\r\ntype PurgeMem = (olderThan?: BeTimePoint) => void;\r\n\r\nconst enum MemIndex { // eslint-disable-line no-restricted-syntax\r\n None = -1,\r\n ViewportTileTrees,\r\n SelectedTiles,\r\n AllTileTrees,\r\n RenderTarget,\r\n // eslint-disable-next-line @typescript-eslint/no-shadow\r\n Viewport, // RenderTarget + Viewed Tile Trees\r\n System,\r\n All, // All Tile Trees + System + (RenderTarget for each ViewManager viewport)\r\n\r\n COUNT,\r\n}\r\n\r\n// Includes None (-1) at index 0\r\nconst memLabels = [\r\n \"None\",\r\n \"Viewed Tile Trees\",\r\n \"Selected Tiles\",\r\n \"All Tile Trees\",\r\n \"Render Target\",\r\n \"Viewport\",\r\n \"System\",\r\n \"All\",\r\n];\r\n\r\nfunction collectStatisticsForViewedTileTrees(vp: Viewport, stats: RenderMemory.Statistics): number {\r\n vp.collectStatistics(stats);\r\n const trees = new DisclosedTileTreeSet();\r\n vp.discloseTileTrees(trees);\r\n return trees.size;\r\n}\r\n\r\nfunction collectStatisticsForSelectedTiles(vp: Viewport, stats: RenderMemory.Statistics): number {\r\n const trees = new Set<TileTree>();\r\n const selectedTiles = IModelApp.tileAdmin.getTilesForUser(vp)?.selected;\r\n if (selectedTiles) {\r\n for (const tile of selectedTiles) {\r\n trees.add(tile.tree);\r\n tile.collectStatistics(stats);\r\n }\r\n }\r\n\r\n return trees.size;\r\n}\r\n\r\nfunction collectStatisticsForAllTileTrees(vp: Viewport, stats: RenderMemory.Statistics): number {\r\n let numTrees = 0;\r\n vp.view.iModel.tiles.forEachTreeOwner((owner) => {\r\n collectTileTreeMemory(stats, owner);\r\n if (undefined !== owner.tileTree)\r\n ++numTrees;\r\n });\r\n return numTrees;\r\n}\r\n\r\nconst calcMem: CalcMem[] = [\r\n (stats, vp) => collectStatisticsForViewedTileTrees(vp, stats),\r\n (stats, vp) => collectStatisticsForSelectedTiles(vp, stats),\r\n (stats, vp) => collectStatisticsForAllTileTrees(vp, stats),\r\n (stats, vp) => {\r\n vp.target.collectStatistics(stats);\r\n return 0;\r\n },\r\n (stats, vp) => {\r\n vp.target.collectStatistics(stats);\r\n return collectStatisticsForViewedTileTrees(vp, stats);\r\n },\r\n (stats, vp) => {\r\n vp.target.renderSystem.collectStatistics(stats);\r\n return 0;\r\n },\r\n (stats, vp) => {\r\n vp.target.renderSystem.collectStatistics(stats);\r\n for (const x of IModelApp.viewManager)\r\n x.target.collectStatistics(stats);\r\n\r\n return collectStatisticsForAllTileTrees(vp, stats);\r\n },\r\n];\r\n\r\n// ###TODO...\r\nconst purgeMem: Array<PurgeMem | undefined> = [\r\n undefined,\r\n (olderThan?) => IModelApp.viewManager.purgeTileTrees(olderThan ? olderThan : BeTimePoint.now()),\r\n];\r\n\r\n/** @internal */\r\nexport function formatMemory(numBytes: number): string {\r\n let suffix = \"b\";\r\n if (numBytes >= 1024) {\r\n numBytes /= 1024;\r\n suffix = \"kb\";\r\n if (numBytes >= 1024) {\r\n numBytes /= 1024;\r\n suffix = \"mb\";\r\n }\r\n }\r\n\r\n return numBytes.toFixed(2) + suffix;\r\n}\r\n\r\nclass MemoryPanel {\r\n private readonly _label: string;\r\n private readonly _labels: string[];\r\n private readonly _elems: HTMLElement[] = [];\r\n private readonly _div: HTMLDivElement;\r\n private readonly _header: HTMLElement;\r\n\r\n public constructor(parent: HTMLElement, label: string, labels: string[]) {\r\n this._label = label;\r\n this._labels = labels;\r\n this._div = document.createElement(\"div\");\r\n\r\n this._header = document.createElement(\"label\")!;\r\n this._header.style.fontWeight = \"bold\";\r\n this._div.appendChild(this._header);\r\n\r\n const numElems = labels.length;\r\n for (let i = 0; i < numElems; i++) {\r\n const elem = document.createElement(\"label\");\r\n this._elems.push(elem);\r\n this._div.appendChild(elem);\r\n }\r\n\r\n parent.appendChild(this._div);\r\n }\r\n\r\n public update(stats: RenderMemory.Consumers[], total: number): void {\r\n assert(this._labels.length === stats.length);\r\n assert(this._labels.length === this._elems.length);\r\n\r\n this._header.innerHTML = `${this._label}: ${formatMemory(total)}`;\r\n\r\n for (let i = 0; i < this._labels.length; i++) {\r\n const elem = this._elems[i];\r\n const stat = stats[i];\r\n if (0 === stat.totalBytes) {\r\n elem.style.display = \"none\";\r\n continue;\r\n }\r\n\r\n elem.style.display = \"block\";\r\n elem.innerHTML = `${this._labels[i]} (${stat.count}): ${formatMemory(stat.totalBytes)}`; // + \"\\n(max: \" + formatMemory(stat.maxBytes) + \")\";\r\n }\r\n }\r\n}\r\n\r\n/** Displays GPU memory allocated to tile trees - either all tile trees in the system, or only those associated with a specific Viewport.\r\n * @beta\r\n */\r\nexport class MemoryTracker {\r\n private readonly _stats = new RenderMemory.Statistics();\r\n private readonly _vp: Viewport;\r\n private readonly _div: HTMLDivElement;\r\n private _curIntervalId?: NodeJS.Timer;\r\n private _memIndex = MemIndex.None;\r\n private readonly _totalElem: HTMLElement;\r\n private readonly _totalTreesElem: HTMLElement;\r\n private readonly _purgeButton: HTMLButtonElement;\r\n private readonly _textures: MemoryPanel;\r\n private readonly _buffers: MemoryPanel;\r\n\r\n public constructor(parent: HTMLElement, vp: Viewport) {\r\n this._vp = vp;\r\n\r\n this._div = document.createElement(\"div\");\r\n this._div.style.display = \"none\";\r\n this._div.style.textAlign = \"right\";\r\n\r\n this.addSelector(parent);\r\n\r\n const table = document.createElement(\"table\");\r\n table.style.width = \"100%\";\r\n table.setAttribute(\"border\", \"1\");\r\n this._div.appendChild(table);\r\n\r\n const row0 = document.createElement(\"tr\");\r\n const cell00 = document.createElement(\"td\");\r\n const cell01 = document.createElement(\"td\");\r\n cell00.style.width = cell01.style.width = \"50%\";\r\n row0.appendChild(cell00);\r\n row0.appendChild(cell01);\r\n table.appendChild(row0);\r\n\r\n const row1 = document.createElement(\"tr\");\r\n const cell10 = document.createElement(\"td\");\r\n const cell11 = document.createElement(\"td\");\r\n cell10.style.width = cell11.style.width = \"50%\";\r\n row1.appendChild(cell10);\r\n row1.appendChild(cell11);\r\n table.appendChild(row1);\r\n\r\n this._textures = new MemoryPanel(cell00, \"Textures\", [\"Surface Textures\", \"Vertex Tables\", \"Edge Tables\", \"Feature Tables\", \"Feature Overrides\", \"Clip Volumes\", \"Planar Classifiers\", \"Shadow Maps\", \"Texture Attachments\", \"Thematic Textures\"]);\r\n this._buffers = new MemoryPanel(cell01, \"Buffers\", [\"Surfaces\", \"Visible Edges\", \"Silhouettes\", \"Polyline Edges\", \"Indexed Edges\", \"Polylines\", \"Point Strings\", \"Point Clouds\", \"Instances\", \"Terrain\", \"Reality Mesh\"]);\r\n this._totalElem = this.addStatistics(cell10);\r\n this._totalTreesElem = this.addStatistics(cell11);\r\n\r\n this._purgeButton = this.addPurgeButton(this._div);\r\n\r\n parent.appendChild(this._div);\r\n }\r\n\r\n public dispose(): void {\r\n this.clearInterval();\r\n }\r\n\r\n private addSelector(parent: HTMLElement): void {\r\n const entries: ComboBoxEntry[] = [];\r\n for (let i = MemIndex.None; i < MemIndex.COUNT; i++)\r\n entries.push({ name: memLabels[i + 1], value: i });\r\n\r\n createComboBox({\r\n parent,\r\n name: \"Track Memory: \",\r\n id: \"memTracker_type\",\r\n value: MemIndex.None,\r\n handler: (select) => this.change(Number.parseInt(select.value, 10)),\r\n entries,\r\n });\r\n }\r\n\r\n private addPurgeButton(parent: HTMLElement): HTMLButtonElement {\r\n const div = document.createElement(\"div\");\r\n div.style.textAlign = \"center\";\r\n\r\n const button = document.createElement(\"button\");\r\n button.innerText = \"Purge\";\r\n button.addEventListener(\"click\", () => this.purge());\r\n\r\n div.appendChild(button);\r\n parent.appendChild(div);\r\n\r\n return button;\r\n }\r\n\r\n private addStatistics(parent: HTMLElement): HTMLElement {\r\n const div = document.createElement(\"div\");\r\n const text = document.createElement(\"text\");\r\n text.style.fontWeight = \"bold\";\r\n div.appendChild(text);\r\n parent.appendChild(div);\r\n return text;\r\n }\r\n\r\n private clearInterval(): void {\r\n if (undefined !== this._curIntervalId) {\r\n clearInterval(this._curIntervalId);\r\n this._curIntervalId = undefined;\r\n }\r\n }\r\n\r\n private change(newIndex: MemIndex): void {\r\n if (newIndex === this._memIndex)\r\n return;\r\n\r\n this._memIndex = newIndex;\r\n if (MemIndex.None === newIndex) {\r\n this.clearInterval();\r\n this._div.style.display = \"none\";\r\n return;\r\n }\r\n\r\n if (undefined === this._curIntervalId) {\r\n this._curIntervalId = setInterval(() => this.update(), 1000);\r\n this._div.style.display = \"block\";\r\n }\r\n\r\n this._purgeButton.disabled = undefined === purgeMem[this._memIndex];\r\n\r\n this.update();\r\n }\r\n\r\n private update(): void {\r\n const calc = calcMem[this._memIndex];\r\n this._stats.clear();\r\n const numTrees = calc(this._stats, this._vp);\r\n this._totalElem.innerText = `Total: ${formatMemory(this._stats.totalBytes)}`;\r\n this._totalTreesElem.innerText = `Total Tile Trees: ${numTrees}`;\r\n\r\n this._textures.update(this._stats.consumers, this._stats.totalBytes - this._stats.buffers.totalBytes);\r\n this._buffers.update(this._stats.buffers.consumers, this._stats.buffers.totalBytes);\r\n }\r\n\r\n private purge(): void {\r\n const purge = purgeMem[this._memIndex];\r\n if (undefined !== purge) {\r\n purge();\r\n this._vp.invalidateScene(); // to trigger reloading of tiles we actually do want to continue drawing\r\n this.update();\r\n }\r\n }\r\n}\r\n"]}
@@ -1,16 +1,16 @@
1
- /** @packageDocumentation
2
- * @module Widgets
3
- */
4
- export declare class RenderCommandBreakdown {
5
- private readonly _div;
6
- private readonly _cellDiv;
7
- private _curIntervalId?;
8
- private readonly _cells;
9
- private readonly _total;
10
- constructor(parent: HTMLElement);
11
- dispose(): void;
12
- private toggle;
13
- private clearInterval;
14
- private update;
15
- }
1
+ /** @packageDocumentation
2
+ * @module Widgets
3
+ */
4
+ export declare class RenderCommandBreakdown {
5
+ private readonly _div;
6
+ private readonly _cellDiv;
7
+ private _curIntervalId?;
8
+ private readonly _cells;
9
+ private readonly _total;
10
+ constructor(parent: HTMLElement);
11
+ dispose(): void;
12
+ private toggle;
13
+ private clearInterval;
14
+ private update;
15
+ }
16
16
  //# sourceMappingURL=RenderCommandBreakdown.d.ts.map