@itwin/frontend-devtools 3.5.0-dev.63 → 3.5.0-dev.66

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 (374) hide show
  1. package/CHANGELOG.md +16 -1
  2. package/README.md +7 -4
  3. package/lib/cjs/ClipboardUtilities.d.ts +8 -8
  4. package/lib/cjs/ClipboardUtilities.js +26 -26
  5. package/lib/cjs/ClipboardUtilities.js.map +1 -1
  6. package/lib/cjs/FrontEndDevTools.d.ts +19 -19
  7. package/lib/cjs/FrontEndDevTools.d.ts.map +1 -1
  8. package/lib/cjs/FrontEndDevTools.js +221 -220
  9. package/lib/cjs/FrontEndDevTools.js.map +1 -1
  10. package/lib/cjs/effects/Convolution.d.ts +68 -68
  11. package/lib/cjs/effects/Convolution.js +165 -165
  12. package/lib/cjs/effects/Convolution.js.map +1 -1
  13. package/lib/cjs/effects/EffectTools.d.ts +33 -33
  14. package/lib/cjs/effects/EffectTools.js +68 -68
  15. package/lib/cjs/effects/EffectTools.js.map +1 -1
  16. package/lib/cjs/effects/Explosion.d.ts +12 -12
  17. package/lib/cjs/effects/Explosion.js +168 -168
  18. package/lib/cjs/effects/Explosion.js.map +1 -1
  19. package/lib/cjs/effects/FlipImage.d.ts +30 -30
  20. package/lib/cjs/effects/FlipImage.js +99 -99
  21. package/lib/cjs/effects/FlipImage.js.map +1 -1
  22. package/lib/cjs/effects/LensDistortion.d.ts +34 -34
  23. package/lib/cjs/effects/LensDistortion.js +109 -109
  24. package/lib/cjs/effects/LensDistortion.js.map +1 -1
  25. package/lib/cjs/effects/Random.d.ts +24 -24
  26. package/lib/cjs/effects/Random.js +49 -49
  27. package/lib/cjs/effects/Random.js.map +1 -1
  28. package/lib/cjs/effects/Saturation.d.ts +30 -30
  29. package/lib/cjs/effects/Saturation.js +85 -85
  30. package/lib/cjs/effects/Saturation.js.map +1 -1
  31. package/lib/cjs/effects/Snow.d.ts +76 -76
  32. package/lib/cjs/effects/Snow.js +187 -187
  33. package/lib/cjs/effects/Snow.js.map +1 -1
  34. package/lib/cjs/effects/Vignette.d.ts +39 -39
  35. package/lib/cjs/effects/Vignette.js +108 -108
  36. package/lib/cjs/effects/Vignette.js.map +1 -1
  37. package/lib/cjs/frontend-devtools.d.ts +82 -82
  38. package/lib/cjs/frontend-devtools.js +98 -98
  39. package/lib/cjs/frontend-devtools.js.map +1 -1
  40. package/lib/cjs/tools/AnimationIntervalTool.d.ts +15 -15
  41. package/lib/cjs/tools/AnimationIntervalTool.js +30 -30
  42. package/lib/cjs/tools/AnimationIntervalTool.js.map +1 -1
  43. package/lib/cjs/tools/ChangeUnitsTool.d.ts +15 -15
  44. package/lib/cjs/tools/ChangeUnitsTool.js +41 -41
  45. package/lib/cjs/tools/ChangeUnitsTool.js.map +1 -1
  46. package/lib/cjs/tools/ClipTools.d.ts +67 -67
  47. package/lib/cjs/tools/ClipTools.js +164 -164
  48. package/lib/cjs/tools/ClipTools.js.map +1 -1
  49. package/lib/cjs/tools/DisplayStyleTools.d.ts +145 -145
  50. package/lib/cjs/tools/DisplayStyleTools.js +370 -370
  51. package/lib/cjs/tools/DisplayStyleTools.js.map +1 -1
  52. package/lib/cjs/tools/EmphasizeElementsTool.d.ts +60 -60
  53. package/lib/cjs/tools/EmphasizeElementsTool.js +154 -154
  54. package/lib/cjs/tools/EmphasizeElementsTool.js.map +1 -1
  55. package/lib/cjs/tools/FrustumDecoration.d.ts +57 -57
  56. package/lib/cjs/tools/FrustumDecoration.js +374 -374
  57. package/lib/cjs/tools/FrustumDecoration.js.map +1 -1
  58. package/lib/cjs/tools/InspectElementTool.d.ts +42 -42
  59. package/lib/cjs/tools/InspectElementTool.js +198 -198
  60. package/lib/cjs/tools/InspectElementTool.js.map +1 -1
  61. package/lib/cjs/tools/MapLayerTool.d.ts +264 -264
  62. package/lib/cjs/tools/MapLayerTool.js +507 -507
  63. package/lib/cjs/tools/MapLayerTool.js.map +1 -1
  64. package/lib/cjs/tools/MeasureTileLoadTime.d.ts +12 -12
  65. package/lib/cjs/tools/MeasureTileLoadTime.js +63 -63
  66. package/lib/cjs/tools/MeasureTileLoadTime.js.map +1 -1
  67. package/lib/cjs/tools/ModelAppearanceTools.d.ts +86 -86
  68. package/lib/cjs/tools/ModelAppearanceTools.js +183 -183
  69. package/lib/cjs/tools/ModelAppearanceTools.js.map +1 -1
  70. package/lib/cjs/tools/PlanProjectionTools.d.ts +40 -40
  71. package/lib/cjs/tools/PlanProjectionTools.js +149 -149
  72. package/lib/cjs/tools/PlanProjectionTools.js.map +1 -1
  73. package/lib/cjs/tools/PlanarMaskTools.d.ts +182 -182
  74. package/lib/cjs/tools/PlanarMaskTools.js +393 -393
  75. package/lib/cjs/tools/PlanarMaskTools.js.map +1 -1
  76. package/lib/cjs/tools/ProjectExtents.d.ts +41 -41
  77. package/lib/cjs/tools/ProjectExtents.js +110 -110
  78. package/lib/cjs/tools/ProjectExtents.js.map +1 -1
  79. package/lib/cjs/tools/RealityModelTools.d.ts +116 -116
  80. package/lib/cjs/tools/RealityModelTools.js +281 -281
  81. package/lib/cjs/tools/RealityModelTools.js.map +1 -1
  82. package/lib/cjs/tools/RealityTransitionTool.d.ts +25 -25
  83. package/lib/cjs/tools/RealityTransitionTool.js +116 -116
  84. package/lib/cjs/tools/RealityTransitionTool.js.map +1 -1
  85. package/lib/cjs/tools/RenderSystemTools.d.ts +38 -38
  86. package/lib/cjs/tools/RenderSystemTools.js +70 -70
  87. package/lib/cjs/tools/RenderSystemTools.js.map +1 -1
  88. package/lib/cjs/tools/RenderTargetTools.d.ts +107 -100
  89. package/lib/cjs/tools/RenderTargetTools.d.ts.map +1 -1
  90. package/lib/cjs/tools/RenderTargetTools.js +174 -166
  91. package/lib/cjs/tools/RenderTargetTools.js.map +1 -1
  92. package/lib/cjs/tools/ReportWebGLCompatibilityTool.d.ts +11 -11
  93. package/lib/cjs/tools/ReportWebGLCompatibilityTool.js +30 -30
  94. package/lib/cjs/tools/ReportWebGLCompatibilityTool.js.map +1 -1
  95. package/lib/cjs/tools/SavedViews.d.ts +46 -46
  96. package/lib/cjs/tools/SavedViews.js +136 -136
  97. package/lib/cjs/tools/SavedViews.js.map +1 -1
  98. package/lib/cjs/tools/ScheduleScriptTools.d.ts +37 -37
  99. package/lib/cjs/tools/ScheduleScriptTools.js +159 -159
  100. package/lib/cjs/tools/ScheduleScriptTools.js.map +1 -1
  101. package/lib/cjs/tools/SelectionTools.d.ts +28 -28
  102. package/lib/cjs/tools/SelectionTools.js +87 -87
  103. package/lib/cjs/tools/SelectionTools.js.map +1 -1
  104. package/lib/cjs/tools/SetGpuMemoryLimitTool.d.ts +15 -15
  105. package/lib/cjs/tools/SetGpuMemoryLimitTool.js +33 -33
  106. package/lib/cjs/tools/SetGpuMemoryLimitTool.js.map +1 -1
  107. package/lib/cjs/tools/SourceAspectIdTools.d.ts +40 -40
  108. package/lib/cjs/tools/SourceAspectIdTools.js +86 -86
  109. package/lib/cjs/tools/SourceAspectIdTools.js.map +1 -1
  110. package/lib/cjs/tools/TileRequestDecoration.d.ts +12 -12
  111. package/lib/cjs/tools/TileRequestDecoration.js +83 -83
  112. package/lib/cjs/tools/TileRequestDecoration.js.map +1 -1
  113. package/lib/cjs/tools/TileTreeBoundsDecoration.d.ts +11 -11
  114. package/lib/cjs/tools/TileTreeBoundsDecoration.js +74 -74
  115. package/lib/cjs/tools/TileTreeBoundsDecoration.js.map +1 -1
  116. package/lib/cjs/tools/ToolTipProvider.d.ts +15 -15
  117. package/lib/cjs/tools/ToolTipProvider.js +66 -66
  118. package/lib/cjs/tools/ToolTipProvider.js.map +1 -1
  119. package/lib/cjs/tools/ViewportTools.d.ts +218 -218
  120. package/lib/cjs/tools/ViewportTools.js +516 -516
  121. package/lib/cjs/tools/ViewportTools.js.map +1 -1
  122. package/lib/cjs/tools/parseArgs.d.ts +23 -23
  123. package/lib/cjs/tools/parseArgs.js +51 -51
  124. package/lib/cjs/tools/parseArgs.js.map +1 -1
  125. package/lib/cjs/tools/parseBoolean.d.ts +8 -8
  126. package/lib/cjs/tools/parseBoolean.js +26 -26
  127. package/lib/cjs/tools/parseBoolean.js.map +1 -1
  128. package/lib/cjs/tools/parseToggle.d.ts +8 -8
  129. package/lib/cjs/tools/parseToggle.js +25 -25
  130. package/lib/cjs/tools/parseToggle.js.map +1 -1
  131. package/lib/cjs/ui/Button.d.ts +29 -29
  132. package/lib/cjs/ui/Button.js +26 -26
  133. package/lib/cjs/ui/Button.js.map +1 -1
  134. package/lib/cjs/ui/CheckBox.d.ts +23 -23
  135. package/lib/cjs/ui/CheckBox.js +27 -27
  136. package/lib/cjs/ui/CheckBox.js.map +1 -1
  137. package/lib/cjs/ui/ColorInput.d.ts +27 -27
  138. package/lib/cjs/ui/ColorInput.js +53 -53
  139. package/lib/cjs/ui/ColorInput.js.map +1 -1
  140. package/lib/cjs/ui/ComboBox.d.ts +28 -28
  141. package/lib/cjs/ui/ComboBox.js +42 -42
  142. package/lib/cjs/ui/ComboBox.js.map +1 -1
  143. package/lib/cjs/ui/DataList.d.ts +27 -27
  144. package/lib/cjs/ui/DataList.js +39 -39
  145. package/lib/cjs/ui/DataList.js.map +1 -1
  146. package/lib/cjs/ui/NestedMenu.d.ts +19 -19
  147. package/lib/cjs/ui/NestedMenu.js +46 -46
  148. package/lib/cjs/ui/NestedMenu.js.map +1 -1
  149. package/lib/cjs/ui/NumericInput.d.ts +35 -35
  150. package/lib/cjs/ui/NumericInput.js +61 -61
  151. package/lib/cjs/ui/NumericInput.js.map +1 -1
  152. package/lib/cjs/ui/RadioBox.d.ts +29 -29
  153. package/lib/cjs/ui/RadioBox.js +76 -76
  154. package/lib/cjs/ui/RadioBox.js.map +1 -1
  155. package/lib/cjs/ui/Slider.d.ts +26 -26
  156. package/lib/cjs/ui/Slider.js +34 -34
  157. package/lib/cjs/ui/Slider.js.map +1 -1
  158. package/lib/cjs/ui/TextBox.d.ts +32 -32
  159. package/lib/cjs/ui/TextBox.js +56 -56
  160. package/lib/cjs/ui/TextBox.js.map +1 -1
  161. package/lib/cjs/widgets/DiagnosticsPanel.d.ts +37 -37
  162. package/lib/cjs/widgets/DiagnosticsPanel.js +81 -81
  163. package/lib/cjs/widgets/DiagnosticsPanel.js.map +1 -1
  164. package/lib/cjs/widgets/FpsTracker.d.ts +19 -19
  165. package/lib/cjs/widgets/FpsTracker.js +56 -56
  166. package/lib/cjs/widgets/FpsTracker.js.map +1 -1
  167. package/lib/cjs/widgets/GpuProfiler.d.ts +16 -16
  168. package/lib/cjs/widgets/GpuProfiler.js +192 -192
  169. package/lib/cjs/widgets/GpuProfiler.js.map +1 -1
  170. package/lib/cjs/widgets/KeyinField.d.ts +61 -61
  171. package/lib/cjs/widgets/KeyinField.js +187 -187
  172. package/lib/cjs/widgets/KeyinField.js.map +1 -1
  173. package/lib/cjs/widgets/MemoryTracker.d.ts +27 -27
  174. package/lib/cjs/widgets/MemoryTracker.js +243 -243
  175. package/lib/cjs/widgets/MemoryTracker.js.map +1 -1
  176. package/lib/cjs/widgets/RenderCommandBreakdown.d.ts +15 -15
  177. package/lib/cjs/widgets/RenderCommandBreakdown.js +68 -68
  178. package/lib/cjs/widgets/RenderCommandBreakdown.js.map +1 -1
  179. package/lib/cjs/widgets/TileMemoryBreakdown.d.ts +30 -30
  180. package/lib/cjs/widgets/TileMemoryBreakdown.js +204 -204
  181. package/lib/cjs/widgets/TileMemoryBreakdown.js.map +1 -1
  182. package/lib/cjs/widgets/TileStatisticsTracker.d.ts +21 -21
  183. package/lib/cjs/widgets/TileStatisticsTracker.js +142 -142
  184. package/lib/cjs/widgets/TileStatisticsTracker.js.map +1 -1
  185. package/lib/cjs/widgets/ToolSettingsTracker.d.ts +9 -9
  186. package/lib/cjs/widgets/ToolSettingsTracker.js +211 -211
  187. package/lib/cjs/widgets/ToolSettingsTracker.js.map +1 -1
  188. package/lib/esm/ClipboardUtilities.d.ts +8 -8
  189. package/lib/esm/ClipboardUtilities.js +22 -22
  190. package/lib/esm/ClipboardUtilities.js.map +1 -1
  191. package/lib/esm/FrontEndDevTools.d.ts +19 -19
  192. package/lib/esm/FrontEndDevTools.d.ts.map +1 -1
  193. package/lib/esm/FrontEndDevTools.js +217 -216
  194. package/lib/esm/FrontEndDevTools.js.map +1 -1
  195. package/lib/esm/effects/Convolution.d.ts +68 -68
  196. package/lib/esm/effects/Convolution.js +155 -155
  197. package/lib/esm/effects/Convolution.js.map +1 -1
  198. package/lib/esm/effects/EffectTools.d.ts +33 -33
  199. package/lib/esm/effects/EffectTools.js +62 -62
  200. package/lib/esm/effects/EffectTools.js.map +1 -1
  201. package/lib/esm/effects/Explosion.d.ts +12 -12
  202. package/lib/esm/effects/Explosion.js +164 -164
  203. package/lib/esm/effects/Explosion.js.map +1 -1
  204. package/lib/esm/effects/FlipImage.d.ts +30 -30
  205. package/lib/esm/effects/FlipImage.js +94 -94
  206. package/lib/esm/effects/FlipImage.js.map +1 -1
  207. package/lib/esm/effects/LensDistortion.d.ts +34 -34
  208. package/lib/esm/effects/LensDistortion.js +104 -104
  209. package/lib/esm/effects/LensDistortion.js.map +1 -1
  210. package/lib/esm/effects/Random.d.ts +24 -24
  211. package/lib/esm/effects/Random.js +41 -41
  212. package/lib/esm/effects/Random.js.map +1 -1
  213. package/lib/esm/effects/Saturation.d.ts +30 -30
  214. package/lib/esm/effects/Saturation.js +80 -80
  215. package/lib/esm/effects/Saturation.js.map +1 -1
  216. package/lib/esm/effects/Snow.d.ts +76 -76
  217. package/lib/esm/effects/Snow.js +182 -182
  218. package/lib/esm/effects/Snow.js.map +1 -1
  219. package/lib/esm/effects/Vignette.d.ts +39 -39
  220. package/lib/esm/effects/Vignette.js +103 -103
  221. package/lib/esm/effects/Vignette.js.map +1 -1
  222. package/lib/esm/frontend-devtools.d.ts +82 -82
  223. package/lib/esm/frontend-devtools.js +86 -86
  224. package/lib/esm/frontend-devtools.js.map +1 -1
  225. package/lib/esm/tools/AnimationIntervalTool.d.ts +15 -15
  226. package/lib/esm/tools/AnimationIntervalTool.js +26 -26
  227. package/lib/esm/tools/AnimationIntervalTool.js.map +1 -1
  228. package/lib/esm/tools/ChangeUnitsTool.d.ts +15 -15
  229. package/lib/esm/tools/ChangeUnitsTool.js +37 -37
  230. package/lib/esm/tools/ChangeUnitsTool.js.map +1 -1
  231. package/lib/esm/tools/ClipTools.d.ts +67 -67
  232. package/lib/esm/tools/ClipTools.js +158 -158
  233. package/lib/esm/tools/ClipTools.js.map +1 -1
  234. package/lib/esm/tools/DisplayStyleTools.d.ts +145 -145
  235. package/lib/esm/tools/DisplayStyleTools.js +356 -356
  236. package/lib/esm/tools/DisplayStyleTools.js.map +1 -1
  237. package/lib/esm/tools/EmphasizeElementsTool.d.ts +60 -60
  238. package/lib/esm/tools/EmphasizeElementsTool.js +145 -145
  239. package/lib/esm/tools/EmphasizeElementsTool.js.map +1 -1
  240. package/lib/esm/tools/FrustumDecoration.d.ts +57 -57
  241. package/lib/esm/tools/FrustumDecoration.js +367 -367
  242. package/lib/esm/tools/FrustumDecoration.js.map +1 -1
  243. package/lib/esm/tools/InspectElementTool.d.ts +42 -42
  244. package/lib/esm/tools/InspectElementTool.js +194 -194
  245. package/lib/esm/tools/InspectElementTool.js.map +1 -1
  246. package/lib/esm/tools/MapLayerTool.d.ts +264 -264
  247. package/lib/esm/tools/MapLayerTool.js +485 -485
  248. package/lib/esm/tools/MapLayerTool.js.map +1 -1
  249. package/lib/esm/tools/MeasureTileLoadTime.d.ts +12 -12
  250. package/lib/esm/tools/MeasureTileLoadTime.js +59 -59
  251. package/lib/esm/tools/MeasureTileLoadTime.js.map +1 -1
  252. package/lib/esm/tools/ModelAppearanceTools.d.ts +86 -86
  253. package/lib/esm/tools/ModelAppearanceTools.js +172 -172
  254. package/lib/esm/tools/ModelAppearanceTools.js.map +1 -1
  255. package/lib/esm/tools/PlanProjectionTools.d.ts +40 -40
  256. package/lib/esm/tools/PlanProjectionTools.js +143 -143
  257. package/lib/esm/tools/PlanProjectionTools.js.map +1 -1
  258. package/lib/esm/tools/PlanarMaskTools.d.ts +182 -182
  259. package/lib/esm/tools/PlanarMaskTools.js +377 -377
  260. package/lib/esm/tools/PlanarMaskTools.js.map +1 -1
  261. package/lib/esm/tools/ProjectExtents.d.ts +41 -41
  262. package/lib/esm/tools/ProjectExtents.js +104 -104
  263. package/lib/esm/tools/ProjectExtents.js.map +1 -1
  264. package/lib/esm/tools/RealityModelTools.d.ts +116 -116
  265. package/lib/esm/tools/RealityModelTools.js +268 -268
  266. package/lib/esm/tools/RealityModelTools.js.map +1 -1
  267. package/lib/esm/tools/RealityTransitionTool.d.ts +25 -25
  268. package/lib/esm/tools/RealityTransitionTool.js +112 -112
  269. package/lib/esm/tools/RealityTransitionTool.js.map +1 -1
  270. package/lib/esm/tools/RenderSystemTools.d.ts +38 -38
  271. package/lib/esm/tools/RenderSystemTools.js +63 -63
  272. package/lib/esm/tools/RenderSystemTools.js.map +1 -1
  273. package/lib/esm/tools/RenderTargetTools.d.ts +107 -100
  274. package/lib/esm/tools/RenderTargetTools.d.ts.map +1 -1
  275. package/lib/esm/tools/RenderTargetTools.js +159 -152
  276. package/lib/esm/tools/RenderTargetTools.js.map +1 -1
  277. package/lib/esm/tools/ReportWebGLCompatibilityTool.d.ts +11 -11
  278. package/lib/esm/tools/ReportWebGLCompatibilityTool.js +26 -26
  279. package/lib/esm/tools/ReportWebGLCompatibilityTool.js.map +1 -1
  280. package/lib/esm/tools/SavedViews.d.ts +46 -46
  281. package/lib/esm/tools/SavedViews.js +128 -128
  282. package/lib/esm/tools/SavedViews.js.map +1 -1
  283. package/lib/esm/tools/ScheduleScriptTools.d.ts +37 -37
  284. package/lib/esm/tools/ScheduleScriptTools.js +153 -153
  285. package/lib/esm/tools/ScheduleScriptTools.js.map +1 -1
  286. package/lib/esm/tools/SelectionTools.d.ts +28 -28
  287. package/lib/esm/tools/SelectionTools.js +82 -82
  288. package/lib/esm/tools/SelectionTools.js.map +1 -1
  289. package/lib/esm/tools/SetGpuMemoryLimitTool.d.ts +15 -15
  290. package/lib/esm/tools/SetGpuMemoryLimitTool.js +29 -29
  291. package/lib/esm/tools/SetGpuMemoryLimitTool.js.map +1 -1
  292. package/lib/esm/tools/SourceAspectIdTools.d.ts +40 -40
  293. package/lib/esm/tools/SourceAspectIdTools.js +80 -80
  294. package/lib/esm/tools/SourceAspectIdTools.js.map +1 -1
  295. package/lib/esm/tools/TileRequestDecoration.d.ts +12 -12
  296. package/lib/esm/tools/TileRequestDecoration.js +79 -79
  297. package/lib/esm/tools/TileRequestDecoration.js.map +1 -1
  298. package/lib/esm/tools/TileTreeBoundsDecoration.d.ts +11 -11
  299. package/lib/esm/tools/TileTreeBoundsDecoration.js +70 -70
  300. package/lib/esm/tools/TileTreeBoundsDecoration.js.map +1 -1
  301. package/lib/esm/tools/ToolTipProvider.d.ts +15 -15
  302. package/lib/esm/tools/ToolTipProvider.js +62 -62
  303. package/lib/esm/tools/ToolTipProvider.js.map +1 -1
  304. package/lib/esm/tools/ViewportTools.d.ts +218 -218
  305. package/lib/esm/tools/ViewportTools.js +492 -492
  306. package/lib/esm/tools/ViewportTools.js.map +1 -1
  307. package/lib/esm/tools/parseArgs.d.ts +23 -23
  308. package/lib/esm/tools/parseArgs.js +47 -47
  309. package/lib/esm/tools/parseArgs.js.map +1 -1
  310. package/lib/esm/tools/parseBoolean.d.ts +8 -8
  311. package/lib/esm/tools/parseBoolean.js +22 -22
  312. package/lib/esm/tools/parseBoolean.js.map +1 -1
  313. package/lib/esm/tools/parseToggle.d.ts +8 -8
  314. package/lib/esm/tools/parseToggle.js +21 -21
  315. package/lib/esm/tools/parseToggle.js.map +1 -1
  316. package/lib/esm/ui/Button.d.ts +29 -29
  317. package/lib/esm/ui/Button.js +22 -22
  318. package/lib/esm/ui/Button.js.map +1 -1
  319. package/lib/esm/ui/CheckBox.d.ts +23 -23
  320. package/lib/esm/ui/CheckBox.js +23 -23
  321. package/lib/esm/ui/CheckBox.js.map +1 -1
  322. package/lib/esm/ui/ColorInput.d.ts +27 -27
  323. package/lib/esm/ui/ColorInput.js +48 -48
  324. package/lib/esm/ui/ColorInput.js.map +1 -1
  325. package/lib/esm/ui/ComboBox.d.ts +28 -28
  326. package/lib/esm/ui/ComboBox.js +38 -38
  327. package/lib/esm/ui/ComboBox.js.map +1 -1
  328. package/lib/esm/ui/DataList.d.ts +27 -27
  329. package/lib/esm/ui/DataList.js +34 -34
  330. package/lib/esm/ui/DataList.js.map +1 -1
  331. package/lib/esm/ui/NestedMenu.d.ts +19 -19
  332. package/lib/esm/ui/NestedMenu.js +42 -42
  333. package/lib/esm/ui/NestedMenu.js.map +1 -1
  334. package/lib/esm/ui/NumericInput.d.ts +35 -35
  335. package/lib/esm/ui/NumericInput.js +56 -56
  336. package/lib/esm/ui/NumericInput.js.map +1 -1
  337. package/lib/esm/ui/RadioBox.d.ts +29 -29
  338. package/lib/esm/ui/RadioBox.js +72 -72
  339. package/lib/esm/ui/RadioBox.js.map +1 -1
  340. package/lib/esm/ui/Slider.d.ts +26 -26
  341. package/lib/esm/ui/Slider.js +30 -30
  342. package/lib/esm/ui/Slider.js.map +1 -1
  343. package/lib/esm/ui/TextBox.d.ts +32 -32
  344. package/lib/esm/ui/TextBox.js +52 -52
  345. package/lib/esm/ui/TextBox.js.map +1 -1
  346. package/lib/esm/widgets/DiagnosticsPanel.d.ts +37 -37
  347. package/lib/esm/widgets/DiagnosticsPanel.js +77 -77
  348. package/lib/esm/widgets/DiagnosticsPanel.js.map +1 -1
  349. package/lib/esm/widgets/FpsTracker.d.ts +19 -19
  350. package/lib/esm/widgets/FpsTracker.js +52 -52
  351. package/lib/esm/widgets/FpsTracker.js.map +1 -1
  352. package/lib/esm/widgets/GpuProfiler.d.ts +16 -16
  353. package/lib/esm/widgets/GpuProfiler.js +188 -188
  354. package/lib/esm/widgets/GpuProfiler.js.map +1 -1
  355. package/lib/esm/widgets/KeyinField.d.ts +61 -61
  356. package/lib/esm/widgets/KeyinField.js +183 -183
  357. package/lib/esm/widgets/KeyinField.js.map +1 -1
  358. package/lib/esm/widgets/MemoryTracker.d.ts +27 -27
  359. package/lib/esm/widgets/MemoryTracker.js +238 -238
  360. package/lib/esm/widgets/MemoryTracker.js.map +1 -1
  361. package/lib/esm/widgets/RenderCommandBreakdown.d.ts +15 -15
  362. package/lib/esm/widgets/RenderCommandBreakdown.js +64 -64
  363. package/lib/esm/widgets/RenderCommandBreakdown.js.map +1 -1
  364. package/lib/esm/widgets/TileMemoryBreakdown.d.ts +30 -30
  365. package/lib/esm/widgets/TileMemoryBreakdown.js +200 -200
  366. package/lib/esm/widgets/TileMemoryBreakdown.js.map +1 -1
  367. package/lib/esm/widgets/TileStatisticsTracker.d.ts +21 -21
  368. package/lib/esm/widgets/TileStatisticsTracker.js +138 -138
  369. package/lib/esm/widgets/TileStatisticsTracker.js.map +1 -1
  370. package/lib/esm/widgets/ToolSettingsTracker.d.ts +9 -9
  371. package/lib/esm/widgets/ToolSettingsTracker.js +207 -207
  372. package/lib/esm/widgets/ToolSettingsTracker.js.map +1 -1
  373. package/lib/public/locales/en/FrontendDevTools.json +484 -481
  374. package/package.json +8 -8
@@ -1 +1 @@
1
- {"version":3,"file":"TileMemoryBreakdown.js","sourceRoot":"","sources":["../../../src/widgets/TileMemoryBreakdown.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/** @packageDocumentation\r\n * @module Widgets\r\n */\r\n\r\nimport { IModelApp, IModelConnection, RenderMemory, Tile } from \"@itwin/core-frontend\";\r\nimport { createCheckBox } from \"../ui/CheckBox\";\r\nimport { formatMemory } from \"./MemoryTracker\";\r\n\r\ninterface TileMemoryCounter {\r\n numTiles: number;\r\n bytesUsed: number;\r\n}\r\n\r\nenum TileMemorySelector {\r\n Selected, // Tiles selected for display by at least one viewport.\r\n Ancestors, // Ancestors of selected tiles, themselves not selected for display by any viewport.\r\n Descendants, // Descendants of selected tiles, themselves not selected for display by any viewport.\r\n Orphaned, // Tiles not selected for display having no ancestors nor descendants selected for display.\r\n Total, // Total of all the above\r\n Count,\r\n}\r\n\r\nclass TileMemoryTracer {\r\n private readonly _stats = new RenderMemory.Statistics();\r\n private readonly _processedTiles = new Set<Tile>();\r\n public readonly counters: TileMemoryCounter[] = [];\r\n public numSelected = 0;\r\n\r\n public constructor() {\r\n for (let i = 0; i < TileMemorySelector.Count; i++)\r\n this.counters.push({ numTiles: 0, bytesUsed: 0 });\r\n }\r\n\r\n public update(): void {\r\n this.reset();\r\n\r\n const imodels = new Set<IModelConnection>();\r\n const selectedTiles = new Set<Tile>();\r\n for (const vp of IModelApp.viewManager) {\r\n imodels.add(vp.iModel);\r\n const tiles = IModelApp.tileAdmin.getTilesForUser(vp)?.selected;\r\n if (tiles)\r\n for (const tile of tiles)\r\n selectedTiles.add(tile);\r\n }\r\n\r\n for (const selected of selectedTiles)\r\n this.add(selected, TileMemorySelector.Selected);\r\n\r\n for (const selected of selectedTiles) {\r\n this.processParent(selected.parent);\r\n this.processChildren(selected.children);\r\n }\r\n\r\n for (const imodel of imodels) {\r\n imodel.tiles.forEachTreeOwner((owner) => {\r\n const tree = owner.tileTree;\r\n if (tree)\r\n this.processOrphan(tree.rootTile);\r\n });\r\n }\r\n\r\n this.counters[TileMemorySelector.Total].numTiles = this.counters.reduce((accum, counter) => accum + counter.numTiles, 0);\r\n this.counters[TileMemorySelector.Total].bytesUsed = this.counters.reduce((accum, counter) => accum + counter.bytesUsed, 0);\r\n }\r\n\r\n private reset(): void {\r\n this._processedTiles.clear();\r\n this.numSelected = 0;\r\n for (const counter of this.counters)\r\n counter.numTiles = counter.bytesUsed = 0;\r\n }\r\n\r\n private add(tile: Tile, selector: TileMemorySelector): void {\r\n this._processedTiles.add(tile);\r\n this._stats.clear();\r\n tile.collectStatistics(this._stats, false);\r\n\r\n const bytesUsed = this._stats.totalBytes;\r\n if (bytesUsed > 0) {\r\n const counter = this.counters[selector];\r\n ++counter.numTiles;\r\n counter.bytesUsed += bytesUsed;\r\n }\r\n }\r\n\r\n private processParent(parent: Tile | undefined): void {\r\n if (parent && !this._processedTiles.has(parent)) {\r\n this.add(parent, TileMemorySelector.Ancestors);\r\n this.processParent(parent.parent);\r\n }\r\n }\r\n\r\n private processChildren(children: Tile[] | undefined): void {\r\n if (!children)\r\n return;\r\n\r\n for (const child of children) {\r\n if (!this._processedTiles.has(child)) {\r\n this.add(child, TileMemorySelector.Descendants);\r\n this.processChildren(child.children);\r\n }\r\n }\r\n }\r\n\r\n private processOrphan(tile: Tile): void {\r\n if (!this._processedTiles.has(tile))\r\n this.add(tile, TileMemorySelector.Orphaned);\r\n\r\n const children = tile.children;\r\n if (children)\r\n for (const child of children)\r\n this.processOrphan(child);\r\n }\r\n}\r\n\r\nconst statsLabels = [\"Selected\", \"Ancestors\", \"Descendants\", \"Orphaned\", \"Total\"];\r\n\r\nfunction format(count: number, label: string, bytesUsed: number): string {\r\n return `${count} ${label}: ${formatMemory(bytesUsed)}`;\r\n}\r\n\r\n/** Breaks down the GPU memory allocated to tiles into categories displayed in two panes.\r\n * The left-hand pane obtains its information from [TileAdmin]($frontend), displaying the number of selected and unselected tiles that are consuming graphics memory along with the amount of memory consumed.\r\n * The right-hand pane computes its information from the set of all [TileTree]($frontend)s, broken down into groups:\r\n * - \"Selected\" - tiles that have been selected for display in at least one viewport.\r\n * - \"Ancestors\" - tiles not selected for display, but have descendents selected for display.\r\n * - \"Descendants\" - tiles not selected for display, but have ancestors selected for display.\r\n * - \"Orphans\" - tiles not selected for display that have no ancestors nor descendants selected for display.\r\n * - \"Total\" - totals of the above categories.\r\n *\r\n * Each row of data shows `(number of tiles) Group Name: amount of memory consumed by group`.\r\n * The number of tiles in each group includes only those tiles that are consuming a non-zero amount of GPU memory.\r\n * The widget includes a checkbox to toggle tracking and display of these statistics.\r\n * @beta\r\n */\r\nexport class TileMemoryBreakdown {\r\n private readonly _tracer = new TileMemoryTracer();\r\n private readonly _div: HTMLDivElement;\r\n private _curIntervalId?: NodeJS.Timer;\r\n private readonly _statsElements: HTMLElement[] = [];\r\n private readonly _totalsElements: HTMLElement[] = [];\r\n\r\n /** Construct a new breakdown widget as a child of the specified parent element. */\r\n public constructor(parent: HTMLElement) {\r\n createCheckBox({\r\n parent,\r\n name: \"Tile Memory Breakdown\",\r\n id: \"tileMemoryBreakdown\",\r\n handler: (_cb) => this.toggle(),\r\n });\r\n\r\n parent.appendChild(this._div = document.createElement(\"div\"));\r\n this._div.style.display = \"none\";\r\n this._div.style.textAlign = \"right\";\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 row = document.createElement(\"tr\");\r\n const leftCell = document.createElement(\"td\");\r\n const rightCell = document.createElement(\"td\");\r\n leftCell.style.width = rightCell.style.width = \"50%\";\r\n row.appendChild(leftCell);\r\n row.appendChild(rightCell);\r\n table.appendChild(row);\r\n\r\n for (let i = 0; i < TileMemorySelector.Count; i++) {\r\n const div = document.createElement(\"div\");\r\n const elem = document.createElement(\"text\");\r\n this._statsElements.push(elem);\r\n div.appendChild(elem);\r\n rightCell.appendChild(div);\r\n }\r\n\r\n for (let i = 0; i < 3; i++) {\r\n const div = document.createElement(\"div\");\r\n const elem = document.createElement(\"text\");\r\n this._totalsElements.push(elem);\r\n div.appendChild(elem);\r\n leftCell.appendChild(div);\r\n }\r\n }\r\n\r\n public dispose(): void {\r\n this.clearInterval();\r\n }\r\n\r\n private toggle(): void {\r\n if (undefined !== this._curIntervalId) {\r\n this._div.style.display = \"none\";\r\n this.clearInterval();\r\n } else {\r\n this._div.style.display = \"block\";\r\n this.update();\r\n this._curIntervalId = setInterval(() => this.update(), 500);\r\n }\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 update(): void {\r\n this._tracer.update();\r\n for (let i = 0; i < this._statsElements.length; i++) {\r\n const counter = this._tracer.counters[i];\r\n this._statsElements[i].innerText = format(counter.numTiles, statsLabels[i], counter.bytesUsed);\r\n }\r\n\r\n let numUnselected = 0;\r\n let unselectedBytes = 0;\r\n for (const unselected of IModelApp.tileAdmin.unselectedLoadedTiles) {\r\n ++numUnselected;\r\n unselectedBytes += unselected.bytesUsed;\r\n }\r\n\r\n let numSelected = 0;\r\n let selectedBytes = 0;\r\n for (const selected of IModelApp.tileAdmin.selectedLoadedTiles) {\r\n ++numSelected;\r\n selectedBytes += selected.bytesUsed;\r\n }\r\n\r\n this._totalsElements[0].innerText = format(numSelected, \"Selected\", selectedBytes);\r\n this._totalsElements[1].innerText = format(numUnselected, \"Unselected\", unselectedBytes);\r\n this._totalsElements[2].innerText = format(numSelected + numUnselected, \"Total\", IModelApp.tileAdmin.totalTileContentBytes);\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"TileMemoryBreakdown.js","sourceRoot":"","sources":["../../../src/widgets/TileMemoryBreakdown.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n/** @packageDocumentation\n * @module Widgets\n */\n\nimport { IModelApp, IModelConnection, RenderMemory, Tile } from \"@itwin/core-frontend\";\nimport { createCheckBox } from \"../ui/CheckBox\";\nimport { formatMemory } from \"./MemoryTracker\";\n\ninterface TileMemoryCounter {\n numTiles: number;\n bytesUsed: number;\n}\n\nenum TileMemorySelector {\n Selected, // Tiles selected for display by at least one viewport.\n Ancestors, // Ancestors of selected tiles, themselves not selected for display by any viewport.\n Descendants, // Descendants of selected tiles, themselves not selected for display by any viewport.\n Orphaned, // Tiles not selected for display having no ancestors nor descendants selected for display.\n Total, // Total of all the above\n Count,\n}\n\nclass TileMemoryTracer {\n private readonly _stats = new RenderMemory.Statistics();\n private readonly _processedTiles = new Set<Tile>();\n public readonly counters: TileMemoryCounter[] = [];\n public numSelected = 0;\n\n public constructor() {\n for (let i = 0; i < TileMemorySelector.Count; i++)\n this.counters.push({ numTiles: 0, bytesUsed: 0 });\n }\n\n public update(): void {\n this.reset();\n\n const imodels = new Set<IModelConnection>();\n const selectedTiles = new Set<Tile>();\n for (const vp of IModelApp.viewManager) {\n imodels.add(vp.iModel);\n const tiles = IModelApp.tileAdmin.getTilesForUser(vp)?.selected;\n if (tiles)\n for (const tile of tiles)\n selectedTiles.add(tile);\n }\n\n for (const selected of selectedTiles)\n this.add(selected, TileMemorySelector.Selected);\n\n for (const selected of selectedTiles) {\n this.processParent(selected.parent);\n this.processChildren(selected.children);\n }\n\n for (const imodel of imodels) {\n imodel.tiles.forEachTreeOwner((owner) => {\n const tree = owner.tileTree;\n if (tree)\n this.processOrphan(tree.rootTile);\n });\n }\n\n this.counters[TileMemorySelector.Total].numTiles = this.counters.reduce((accum, counter) => accum + counter.numTiles, 0);\n this.counters[TileMemorySelector.Total].bytesUsed = this.counters.reduce((accum, counter) => accum + counter.bytesUsed, 0);\n }\n\n private reset(): void {\n this._processedTiles.clear();\n this.numSelected = 0;\n for (const counter of this.counters)\n counter.numTiles = counter.bytesUsed = 0;\n }\n\n private add(tile: Tile, selector: TileMemorySelector): void {\n this._processedTiles.add(tile);\n this._stats.clear();\n tile.collectStatistics(this._stats, false);\n\n const bytesUsed = this._stats.totalBytes;\n if (bytesUsed > 0) {\n const counter = this.counters[selector];\n ++counter.numTiles;\n counter.bytesUsed += bytesUsed;\n }\n }\n\n private processParent(parent: Tile | undefined): void {\n if (parent && !this._processedTiles.has(parent)) {\n this.add(parent, TileMemorySelector.Ancestors);\n this.processParent(parent.parent);\n }\n }\n\n private processChildren(children: Tile[] | undefined): void {\n if (!children)\n return;\n\n for (const child of children) {\n if (!this._processedTiles.has(child)) {\n this.add(child, TileMemorySelector.Descendants);\n this.processChildren(child.children);\n }\n }\n }\n\n private processOrphan(tile: Tile): void {\n if (!this._processedTiles.has(tile))\n this.add(tile, TileMemorySelector.Orphaned);\n\n const children = tile.children;\n if (children)\n for (const child of children)\n this.processOrphan(child);\n }\n}\n\nconst statsLabels = [\"Selected\", \"Ancestors\", \"Descendants\", \"Orphaned\", \"Total\"];\n\nfunction format(count: number, label: string, bytesUsed: number): string {\n return `${count} ${label}: ${formatMemory(bytesUsed)}`;\n}\n\n/** Breaks down the GPU memory allocated to tiles into categories displayed in two panes.\n * The left-hand pane obtains its information from [TileAdmin]($frontend), displaying the number of selected and unselected tiles that are consuming graphics memory along with the amount of memory consumed.\n * The right-hand pane computes its information from the set of all [TileTree]($frontend)s, broken down into groups:\n * - \"Selected\" - tiles that have been selected for display in at least one viewport.\n * - \"Ancestors\" - tiles not selected for display, but have descendents selected for display.\n * - \"Descendants\" - tiles not selected for display, but have ancestors selected for display.\n * - \"Orphans\" - tiles not selected for display that have no ancestors nor descendants selected for display.\n * - \"Total\" - totals of the above categories.\n *\n * Each row of data shows `(number of tiles) Group Name: amount of memory consumed by group`.\n * The number of tiles in each group includes only those tiles that are consuming a non-zero amount of GPU memory.\n * The widget includes a checkbox to toggle tracking and display of these statistics.\n * @beta\n */\nexport class TileMemoryBreakdown {\n private readonly _tracer = new TileMemoryTracer();\n private readonly _div: HTMLDivElement;\n private _curIntervalId?: NodeJS.Timer;\n private readonly _statsElements: HTMLElement[] = [];\n private readonly _totalsElements: HTMLElement[] = [];\n\n /** Construct a new breakdown widget as a child of the specified parent element. */\n public constructor(parent: HTMLElement) {\n createCheckBox({\n parent,\n name: \"Tile Memory Breakdown\",\n id: \"tileMemoryBreakdown\",\n handler: (_cb) => this.toggle(),\n });\n\n parent.appendChild(this._div = document.createElement(\"div\"));\n this._div.style.display = \"none\";\n this._div.style.textAlign = \"right\";\n\n const table = document.createElement(\"table\");\n table.style.width = \"100%\";\n table.setAttribute(\"border\", \"1\");\n this._div.appendChild(table);\n\n const row = document.createElement(\"tr\");\n const leftCell = document.createElement(\"td\");\n const rightCell = document.createElement(\"td\");\n leftCell.style.width = rightCell.style.width = \"50%\";\n row.appendChild(leftCell);\n row.appendChild(rightCell);\n table.appendChild(row);\n\n for (let i = 0; i < TileMemorySelector.Count; i++) {\n const div = document.createElement(\"div\");\n const elem = document.createElement(\"text\");\n this._statsElements.push(elem);\n div.appendChild(elem);\n rightCell.appendChild(div);\n }\n\n for (let i = 0; i < 3; i++) {\n const div = document.createElement(\"div\");\n const elem = document.createElement(\"text\");\n this._totalsElements.push(elem);\n div.appendChild(elem);\n leftCell.appendChild(div);\n }\n }\n\n public dispose(): void {\n this.clearInterval();\n }\n\n private toggle(): void {\n if (undefined !== this._curIntervalId) {\n this._div.style.display = \"none\";\n this.clearInterval();\n } else {\n this._div.style.display = \"block\";\n this.update();\n this._curIntervalId = setInterval(() => this.update(), 500);\n }\n }\n\n private clearInterval(): void {\n if (undefined !== this._curIntervalId) {\n clearInterval(this._curIntervalId);\n this._curIntervalId = undefined;\n }\n }\n\n private update(): void {\n this._tracer.update();\n for (let i = 0; i < this._statsElements.length; i++) {\n const counter = this._tracer.counters[i];\n this._statsElements[i].innerText = format(counter.numTiles, statsLabels[i], counter.bytesUsed);\n }\n\n let numUnselected = 0;\n let unselectedBytes = 0;\n for (const unselected of IModelApp.tileAdmin.unselectedLoadedTiles) {\n ++numUnselected;\n unselectedBytes += unselected.bytesUsed;\n }\n\n let numSelected = 0;\n let selectedBytes = 0;\n for (const selected of IModelApp.tileAdmin.selectedLoadedTiles) {\n ++numSelected;\n selectedBytes += selected.bytesUsed;\n }\n\n this._totalsElements[0].innerText = format(numSelected, \"Selected\", selectedBytes);\n this._totalsElements[1].innerText = format(numUnselected, \"Unselected\", unselectedBytes);\n this._totalsElements[2].innerText = format(numSelected + numUnselected, \"Total\", IModelApp.tileAdmin.totalTileContentBytes);\n }\n}\n"]}
@@ -1,22 +1,22 @@
1
- /** @packageDocumentation
2
- * @module Widgets
3
- */
4
- import { Viewport } from "@itwin/core-frontend";
5
- /** Outputs statistics related to tile requests including the current number of active, pending, selected, and ready tile requests; as well as cumulative statistics for the session including the number of failed, timed-out, empty, and elided tile requests.
6
- * @beta
7
- */
8
- export declare class TileStatisticsTracker {
9
- private readonly _statElements;
10
- private readonly _div;
11
- private readonly _vp;
12
- private _curIntervalId?;
13
- constructor(parent: HTMLElement, vp: Viewport);
14
- dispose(): void;
15
- private addMaxActive;
16
- private updateMaxActive;
17
- private clearInterval;
18
- private toggle;
19
- private update;
20
- private reset;
21
- }
1
+ /** @packageDocumentation
2
+ * @module Widgets
3
+ */
4
+ import { Viewport } from "@itwin/core-frontend";
5
+ /** Outputs statistics related to tile requests including the current number of active, pending, selected, and ready tile requests; as well as cumulative statistics for the session including the number of failed, timed-out, empty, and elided tile requests.
6
+ * @beta
7
+ */
8
+ export declare class TileStatisticsTracker {
9
+ private readonly _statElements;
10
+ private readonly _div;
11
+ private readonly _vp;
12
+ private _curIntervalId?;
13
+ constructor(parent: HTMLElement, vp: Viewport);
14
+ dispose(): void;
15
+ private addMaxActive;
16
+ private updateMaxActive;
17
+ private clearInterval;
18
+ private toggle;
19
+ private update;
20
+ private reset;
21
+ }
22
22
  //# sourceMappingURL=TileStatisticsTracker.d.ts.map
@@ -1,143 +1,143 @@
1
- "use strict";
2
- /*---------------------------------------------------------------------------------------------
3
- * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
4
- * See LICENSE.md in the project root for license terms and full copyright notice.
5
- *--------------------------------------------------------------------------------------------*/
6
- Object.defineProperty(exports, "__esModule", { value: true });
7
- exports.TileStatisticsTracker = void 0;
8
- /** @packageDocumentation
9
- * @module Widgets
10
- */
11
- const core_frontend_1 = require("@itwin/core-frontend");
12
- const Button_1 = require("../ui/Button");
13
- const CheckBox_1 = require("../ui/CheckBox");
14
- const NumericInput_1 = require("../ui/NumericInput");
15
- function computeProgress(vp) {
16
- const ready = vp.numReadyTiles;
17
- const requested = vp.numRequestedTiles;
18
- const total = ready + requested;
19
- const ratio = (total > 0) ? (ready / total) : 1.0;
20
- return Math.round(ratio * 100);
21
- }
22
- const statEntries = [
23
- { getValue: (stats, vp) => { var _a, _b; return stats.numActiveRequests + ((_b = (_a = core_frontend_1.IModelApp.tileAdmin.getTilesForUser(vp)) === null || _a === void 0 ? void 0 : _a.external.requested) !== null && _b !== void 0 ? _b : 0); }, label: "Active" },
24
- { getValue: (stats, _vp) => stats.numPendingRequests, label: "Pending" },
25
- { getValue: (stats, _vp) => stats.numCanceled, label: "Canceled" },
26
- { getValue: (stats, _vp) => stats.numActiveRequests + stats.numPendingRequests, label: "Total" },
27
- { getValue: (_stats, vp) => vp.numSelectedTiles, label: "Selected" },
28
- { getValue: (_stats, vp) => vp.numReadyTiles, label: "Ready" },
29
- { getValue: (_stats, vp) => computeProgress(vp), label: "Progress" },
30
- { getValue: (stats, _vp) => stats.totalCompletedRequests, label: "Completed" },
31
- { getValue: (stats, _vp) => stats.totalTimedOutRequests, label: "Timed Out" },
32
- { getValue: (stats, _vp) => stats.totalFailedRequests, label: "Failed" },
33
- { getValue: (stats, _vp) => stats.totalEmptyTiles, label: "Empty" },
34
- { getValue: (stats, _vp) => stats.totalUndisplayableTiles, label: "Undisplayable" },
35
- { getValue: (stats, _vp) => stats.totalElidedTiles, label: "Elided" },
36
- { getValue: (stats, _vp) => stats.totalCacheMisses, label: "Cache Misses" },
37
- { getValue: (stats, _vp) => stats.totalDispatchedRequests, label: "Dispatched" },
38
- { getValue: (stats, _vp) => stats.totalAbortedRequests, label: "Aborted" },
39
- ];
40
- const indexOfFirstGlobalStatistic = 7; // "Completed"
41
- /** Outputs statistics related to tile requests including the current number of active, pending, selected, and ready tile requests; as well as cumulative statistics for the session including the number of failed, timed-out, empty, and elided tile requests.
42
- * @beta
43
- */
44
- class TileStatisticsTracker {
45
- constructor(parent, vp) {
46
- this._statElements = [];
47
- this._vp = vp;
48
- this.addMaxActive(parent);
49
- (0, CheckBox_1.createCheckBox)({
50
- parent,
51
- name: "Track Tile Requests",
52
- id: "stats_trackMemory",
53
- handler: (_cb) => this.toggle(),
54
- });
55
- this._div = document.createElement("div");
56
- this._div.style.display = "none";
57
- this._div.style.textAlign = "right";
58
- const table = document.createElement("table");
59
- table.style.width = "100%";
60
- table.setAttribute("border", "1");
61
- this._div.appendChild(table);
62
- const row = document.createElement("tr");
63
- const frameColumn = document.createElement("td");
64
- const globalColumn = document.createElement("td");
65
- frameColumn.style.width = globalColumn.style.width = "50%";
66
- row.appendChild(frameColumn);
67
- row.appendChild(globalColumn);
68
- table.appendChild(row);
69
- for (let i = 0; i < statEntries.length; i++) {
70
- const div = document.createElement("div");
71
- const elem = document.createElement("text");
72
- this._statElements[i] = elem;
73
- div.appendChild(elem);
74
- const column = i >= indexOfFirstGlobalStatistic ? globalColumn : frameColumn;
75
- column.appendChild(div);
76
- }
77
- const resetButton = (0, Button_1.createButton)({
78
- parent: this._div,
79
- value: "Reset",
80
- tooltip: "Reset all cumulative statistics",
81
- handler: () => this.reset(),
82
- });
83
- resetButton.div.style.textAlign = "center";
84
- parent.appendChild(this._div);
85
- }
86
- dispose() {
87
- this.clearInterval();
88
- }
89
- addMaxActive(parent) {
90
- const div = document.createElement("div");
91
- const label = document.createElement("label");
92
- label.style.display = "inline";
93
- label.htmlFor = "maxActiveRequests";
94
- label.innerText = "Max Active Requests: ";
95
- div.appendChild(label);
96
- (0, NumericInput_1.createNumericInput)({
97
- parent: div,
98
- id: "maxActiveRequests",
99
- display: "inline",
100
- min: 0,
101
- step: 1,
102
- value: core_frontend_1.IModelApp.tileAdmin.channels.rpcConcurrency,
103
- handler: (value, _input) => this.updateMaxActive(value),
104
- });
105
- parent.appendChild(div);
106
- }
107
- updateMaxActive(value) {
108
- core_frontend_1.IModelApp.tileAdmin.channels.setRpcConcurrency(value);
109
- }
110
- clearInterval() {
111
- if (undefined !== this._curIntervalId) {
112
- clearInterval(this._curIntervalId);
113
- this._curIntervalId = undefined;
114
- }
115
- }
116
- toggle() {
117
- if (undefined !== this._curIntervalId) {
118
- // Currently on - turn off.
119
- this._div.style.display = "none";
120
- this.clearInterval();
121
- }
122
- else {
123
- // Currently off - turn on.
124
- this._div.style.display = "block";
125
- this.update();
126
- this._curIntervalId = setInterval(() => this.update(), 500);
127
- }
128
- }
129
- update() {
130
- const stats = core_frontend_1.IModelApp.tileAdmin.statistics;
131
- for (let i = 0; i < statEntries.length; i++) {
132
- const stat = statEntries[i];
133
- const label = `${stat.label}: ${stat.getValue(stats, this._vp)}`;
134
- this._statElements[i].innerText = label;
135
- }
136
- }
137
- reset() {
138
- core_frontend_1.IModelApp.tileAdmin.resetStatistics();
139
- this.update();
140
- }
141
- }
142
- exports.TileStatisticsTracker = TileStatisticsTracker;
1
+ "use strict";
2
+ /*---------------------------------------------------------------------------------------------
3
+ * Copyright (c) Bentley Systems, Incorporated. All rights reserved.
4
+ * See LICENSE.md in the project root for license terms and full copyright notice.
5
+ *--------------------------------------------------------------------------------------------*/
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.TileStatisticsTracker = void 0;
8
+ /** @packageDocumentation
9
+ * @module Widgets
10
+ */
11
+ const core_frontend_1 = require("@itwin/core-frontend");
12
+ const Button_1 = require("../ui/Button");
13
+ const CheckBox_1 = require("../ui/CheckBox");
14
+ const NumericInput_1 = require("../ui/NumericInput");
15
+ function computeProgress(vp) {
16
+ const ready = vp.numReadyTiles;
17
+ const requested = vp.numRequestedTiles;
18
+ const total = ready + requested;
19
+ const ratio = (total > 0) ? (ready / total) : 1.0;
20
+ return Math.round(ratio * 100);
21
+ }
22
+ const statEntries = [
23
+ { getValue: (stats, vp) => { var _a, _b; return stats.numActiveRequests + ((_b = (_a = core_frontend_1.IModelApp.tileAdmin.getTilesForUser(vp)) === null || _a === void 0 ? void 0 : _a.external.requested) !== null && _b !== void 0 ? _b : 0); }, label: "Active" },
24
+ { getValue: (stats, _vp) => stats.numPendingRequests, label: "Pending" },
25
+ { getValue: (stats, _vp) => stats.numCanceled, label: "Canceled" },
26
+ { getValue: (stats, _vp) => stats.numActiveRequests + stats.numPendingRequests, label: "Total" },
27
+ { getValue: (_stats, vp) => vp.numSelectedTiles, label: "Selected" },
28
+ { getValue: (_stats, vp) => vp.numReadyTiles, label: "Ready" },
29
+ { getValue: (_stats, vp) => computeProgress(vp), label: "Progress" },
30
+ { getValue: (stats, _vp) => stats.totalCompletedRequests, label: "Completed" },
31
+ { getValue: (stats, _vp) => stats.totalTimedOutRequests, label: "Timed Out" },
32
+ { getValue: (stats, _vp) => stats.totalFailedRequests, label: "Failed" },
33
+ { getValue: (stats, _vp) => stats.totalEmptyTiles, label: "Empty" },
34
+ { getValue: (stats, _vp) => stats.totalUndisplayableTiles, label: "Undisplayable" },
35
+ { getValue: (stats, _vp) => stats.totalElidedTiles, label: "Elided" },
36
+ { getValue: (stats, _vp) => stats.totalCacheMisses, label: "Cache Misses" },
37
+ { getValue: (stats, _vp) => stats.totalDispatchedRequests, label: "Dispatched" },
38
+ { getValue: (stats, _vp) => stats.totalAbortedRequests, label: "Aborted" },
39
+ ];
40
+ const indexOfFirstGlobalStatistic = 7; // "Completed"
41
+ /** Outputs statistics related to tile requests including the current number of active, pending, selected, and ready tile requests; as well as cumulative statistics for the session including the number of failed, timed-out, empty, and elided tile requests.
42
+ * @beta
43
+ */
44
+ class TileStatisticsTracker {
45
+ constructor(parent, vp) {
46
+ this._statElements = [];
47
+ this._vp = vp;
48
+ this.addMaxActive(parent);
49
+ (0, CheckBox_1.createCheckBox)({
50
+ parent,
51
+ name: "Track Tile Requests",
52
+ id: "stats_trackMemory",
53
+ handler: (_cb) => this.toggle(),
54
+ });
55
+ this._div = document.createElement("div");
56
+ this._div.style.display = "none";
57
+ this._div.style.textAlign = "right";
58
+ const table = document.createElement("table");
59
+ table.style.width = "100%";
60
+ table.setAttribute("border", "1");
61
+ this._div.appendChild(table);
62
+ const row = document.createElement("tr");
63
+ const frameColumn = document.createElement("td");
64
+ const globalColumn = document.createElement("td");
65
+ frameColumn.style.width = globalColumn.style.width = "50%";
66
+ row.appendChild(frameColumn);
67
+ row.appendChild(globalColumn);
68
+ table.appendChild(row);
69
+ for (let i = 0; i < statEntries.length; i++) {
70
+ const div = document.createElement("div");
71
+ const elem = document.createElement("text");
72
+ this._statElements[i] = elem;
73
+ div.appendChild(elem);
74
+ const column = i >= indexOfFirstGlobalStatistic ? globalColumn : frameColumn;
75
+ column.appendChild(div);
76
+ }
77
+ const resetButton = (0, Button_1.createButton)({
78
+ parent: this._div,
79
+ value: "Reset",
80
+ tooltip: "Reset all cumulative statistics",
81
+ handler: () => this.reset(),
82
+ });
83
+ resetButton.div.style.textAlign = "center";
84
+ parent.appendChild(this._div);
85
+ }
86
+ dispose() {
87
+ this.clearInterval();
88
+ }
89
+ addMaxActive(parent) {
90
+ const div = document.createElement("div");
91
+ const label = document.createElement("label");
92
+ label.style.display = "inline";
93
+ label.htmlFor = "maxActiveRequests";
94
+ label.innerText = "Max Active Requests: ";
95
+ div.appendChild(label);
96
+ (0, NumericInput_1.createNumericInput)({
97
+ parent: div,
98
+ id: "maxActiveRequests",
99
+ display: "inline",
100
+ min: 0,
101
+ step: 1,
102
+ value: core_frontend_1.IModelApp.tileAdmin.channels.rpcConcurrency,
103
+ handler: (value, _input) => this.updateMaxActive(value),
104
+ });
105
+ parent.appendChild(div);
106
+ }
107
+ updateMaxActive(value) {
108
+ core_frontend_1.IModelApp.tileAdmin.channels.setRpcConcurrency(value);
109
+ }
110
+ clearInterval() {
111
+ if (undefined !== this._curIntervalId) {
112
+ clearInterval(this._curIntervalId);
113
+ this._curIntervalId = undefined;
114
+ }
115
+ }
116
+ toggle() {
117
+ if (undefined !== this._curIntervalId) {
118
+ // Currently on - turn off.
119
+ this._div.style.display = "none";
120
+ this.clearInterval();
121
+ }
122
+ else {
123
+ // Currently off - turn on.
124
+ this._div.style.display = "block";
125
+ this.update();
126
+ this._curIntervalId = setInterval(() => this.update(), 500);
127
+ }
128
+ }
129
+ update() {
130
+ const stats = core_frontend_1.IModelApp.tileAdmin.statistics;
131
+ for (let i = 0; i < statEntries.length; i++) {
132
+ const stat = statEntries[i];
133
+ const label = `${stat.label}: ${stat.getValue(stats, this._vp)}`;
134
+ this._statElements[i].innerText = label;
135
+ }
136
+ }
137
+ reset() {
138
+ core_frontend_1.IModelApp.tileAdmin.resetStatistics();
139
+ this.update();
140
+ }
141
+ }
142
+ exports.TileStatisticsTracker = TileStatisticsTracker;
143
143
  //# sourceMappingURL=TileStatisticsTracker.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"TileStatisticsTracker.js","sourceRoot":"","sources":["../../../src/widgets/TileStatisticsTracker.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 { IModelApp, TileAdmin, Viewport } from \"@itwin/core-frontend\";\r\nimport { createButton } from \"../ui/Button\";\r\nimport { createCheckBox } from \"../ui/CheckBox\";\r\nimport { createNumericInput } from \"../ui/NumericInput\";\r\n\r\ntype GetStatValue = (stats: TileAdmin.Statistics, vp: Viewport) => number;\r\ninterface StatEntry {\r\n label: string;\r\n getValue: GetStatValue;\r\n}\r\n\r\nfunction computeProgress(vp: Viewport): number {\r\n const ready = vp.numReadyTiles;\r\n const requested = vp.numRequestedTiles;\r\n const total = ready + requested;\r\n const ratio = (total > 0) ? (ready / total) : 1.0;\r\n return Math.round(ratio * 100);\r\n}\r\n\r\nconst statEntries: StatEntry[] = [\r\n { getValue: (stats, vp) => stats.numActiveRequests + (IModelApp.tileAdmin.getTilesForUser(vp)?.external.requested ?? 0), label: \"Active\" },\r\n { getValue: (stats, _vp) => stats.numPendingRequests, label: \"Pending\" },\r\n { getValue: (stats, _vp) => stats.numCanceled, label: \"Canceled\" },\r\n { getValue: (stats, _vp) => stats.numActiveRequests + stats.numPendingRequests, label: \"Total\" },\r\n { getValue: (_stats, vp) => vp.numSelectedTiles, label: \"Selected\" },\r\n { getValue: (_stats, vp) => vp.numReadyTiles, label: \"Ready\" },\r\n { getValue: (_stats, vp) => computeProgress(vp), label: \"Progress\" },\r\n { getValue: (stats, _vp) => stats.totalCompletedRequests, label: \"Completed\" },\r\n { getValue: (stats, _vp) => stats.totalTimedOutRequests, label: \"Timed Out\" },\r\n { getValue: (stats, _vp) => stats.totalFailedRequests, label: \"Failed\" },\r\n { getValue: (stats, _vp) => stats.totalEmptyTiles, label: \"Empty\" },\r\n { getValue: (stats, _vp) => stats.totalUndisplayableTiles, label: \"Undisplayable\" },\r\n { getValue: (stats, _vp) => stats.totalElidedTiles, label: \"Elided\" },\r\n { getValue: (stats, _vp) => stats.totalCacheMisses, label: \"Cache Misses\" },\r\n { getValue: (stats, _vp) => stats.totalDispatchedRequests, label: \"Dispatched\" },\r\n { getValue: (stats, _vp) => stats.totalAbortedRequests, label: \"Aborted\" },\r\n];\r\n\r\nconst indexOfFirstGlobalStatistic = 7; // \"Completed\"\r\n\r\n/** Outputs statistics related to tile requests including the current number of active, pending, selected, and ready tile requests; as well as cumulative statistics for the session including the number of failed, timed-out, empty, and elided tile requests.\r\n * @beta\r\n */\r\nexport class TileStatisticsTracker {\r\n private readonly _statElements: HTMLElement[] = [];\r\n private readonly _div: HTMLDivElement;\r\n private readonly _vp: Viewport;\r\n private _curIntervalId?: NodeJS.Timer;\r\n\r\n public constructor(parent: HTMLElement, vp: Viewport) {\r\n this._vp = vp;\r\n this.addMaxActive(parent);\r\n createCheckBox({\r\n parent,\r\n name: \"Track Tile Requests\",\r\n id: \"stats_trackMemory\",\r\n handler: (_cb) => this.toggle(),\r\n });\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 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 row = document.createElement(\"tr\");\r\n const frameColumn = document.createElement(\"td\");\r\n const globalColumn = document.createElement(\"td\");\r\n frameColumn.style.width = globalColumn.style.width = \"50%\";\r\n row.appendChild(frameColumn);\r\n row.appendChild(globalColumn);\r\n table.appendChild(row);\r\n\r\n for (let i = 0; i < statEntries.length; i++) {\r\n const div = document.createElement(\"div\");\r\n const elem = document.createElement(\"text\");\r\n this._statElements[i] = elem;\r\n div.appendChild(elem);\r\n\r\n const column = i >= indexOfFirstGlobalStatistic ? globalColumn : frameColumn;\r\n column.appendChild(div);\r\n }\r\n\r\n const resetButton = createButton({\r\n parent: this._div,\r\n value: \"Reset\",\r\n tooltip: \"Reset all cumulative statistics\",\r\n handler: () => this.reset(),\r\n });\r\n resetButton.div.style.textAlign = \"center\";\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 addMaxActive(parent: HTMLElement): void {\r\n const div = document.createElement(\"div\");\r\n\r\n const label = document.createElement(\"label\");\r\n label.style.display = \"inline\";\r\n label.htmlFor = \"maxActiveRequests\";\r\n label.innerText = \"Max Active Requests: \";\r\n div.appendChild(label);\r\n\r\n createNumericInput({\r\n parent: div,\r\n id: \"maxActiveRequests\",\r\n display: \"inline\",\r\n min: 0,\r\n step: 1,\r\n value: IModelApp.tileAdmin.channels.rpcConcurrency,\r\n handler: (value, _input) => this.updateMaxActive(value),\r\n });\r\n\r\n parent.appendChild(div);\r\n }\r\n\r\n private updateMaxActive(value: number): void {\r\n IModelApp.tileAdmin.channels.setRpcConcurrency(value);\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 toggle(): void {\r\n if (undefined !== this._curIntervalId) {\r\n // Currently on - turn off.\r\n this._div.style.display = \"none\";\r\n this.clearInterval();\r\n } else {\r\n // Currently off - turn on.\r\n this._div.style.display = \"block\";\r\n this.update();\r\n this._curIntervalId = setInterval(() => this.update(), 500);\r\n }\r\n }\r\n\r\n private update(): void {\r\n const stats = IModelApp.tileAdmin.statistics;\r\n for (let i = 0; i < statEntries.length; i++) {\r\n const stat = statEntries[i];\r\n const label = `${stat.label}: ${stat.getValue(stats, this._vp)}`;\r\n this._statElements[i].innerText = label;\r\n }\r\n }\r\n\r\n private reset(): void {\r\n IModelApp.tileAdmin.resetStatistics();\r\n this.update();\r\n }\r\n}\r\n"]}
1
+ {"version":3,"file":"TileStatisticsTracker.js","sourceRoot":"","sources":["../../../src/widgets/TileStatisticsTracker.ts"],"names":[],"mappings":"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","sourcesContent":["/*---------------------------------------------------------------------------------------------\n* Copyright (c) Bentley Systems, Incorporated. All rights reserved.\n* See LICENSE.md in the project root for license terms and full copyright notice.\n*--------------------------------------------------------------------------------------------*/\n\n/** @packageDocumentation\n * @module Widgets\n */\n\nimport { IModelApp, TileAdmin, Viewport } from \"@itwin/core-frontend\";\nimport { createButton } from \"../ui/Button\";\nimport { createCheckBox } from \"../ui/CheckBox\";\nimport { createNumericInput } from \"../ui/NumericInput\";\n\ntype GetStatValue = (stats: TileAdmin.Statistics, vp: Viewport) => number;\ninterface StatEntry {\n label: string;\n getValue: GetStatValue;\n}\n\nfunction computeProgress(vp: Viewport): number {\n const ready = vp.numReadyTiles;\n const requested = vp.numRequestedTiles;\n const total = ready + requested;\n const ratio = (total > 0) ? (ready / total) : 1.0;\n return Math.round(ratio * 100);\n}\n\nconst statEntries: StatEntry[] = [\n { getValue: (stats, vp) => stats.numActiveRequests + (IModelApp.tileAdmin.getTilesForUser(vp)?.external.requested ?? 0), label: \"Active\" },\n { getValue: (stats, _vp) => stats.numPendingRequests, label: \"Pending\" },\n { getValue: (stats, _vp) => stats.numCanceled, label: \"Canceled\" },\n { getValue: (stats, _vp) => stats.numActiveRequests + stats.numPendingRequests, label: \"Total\" },\n { getValue: (_stats, vp) => vp.numSelectedTiles, label: \"Selected\" },\n { getValue: (_stats, vp) => vp.numReadyTiles, label: \"Ready\" },\n { getValue: (_stats, vp) => computeProgress(vp), label: \"Progress\" },\n { getValue: (stats, _vp) => stats.totalCompletedRequests, label: \"Completed\" },\n { getValue: (stats, _vp) => stats.totalTimedOutRequests, label: \"Timed Out\" },\n { getValue: (stats, _vp) => stats.totalFailedRequests, label: \"Failed\" },\n { getValue: (stats, _vp) => stats.totalEmptyTiles, label: \"Empty\" },\n { getValue: (stats, _vp) => stats.totalUndisplayableTiles, label: \"Undisplayable\" },\n { getValue: (stats, _vp) => stats.totalElidedTiles, label: \"Elided\" },\n { getValue: (stats, _vp) => stats.totalCacheMisses, label: \"Cache Misses\" },\n { getValue: (stats, _vp) => stats.totalDispatchedRequests, label: \"Dispatched\" },\n { getValue: (stats, _vp) => stats.totalAbortedRequests, label: \"Aborted\" },\n];\n\nconst indexOfFirstGlobalStatistic = 7; // \"Completed\"\n\n/** Outputs statistics related to tile requests including the current number of active, pending, selected, and ready tile requests; as well as cumulative statistics for the session including the number of failed, timed-out, empty, and elided tile requests.\n * @beta\n */\nexport class TileStatisticsTracker {\n private readonly _statElements: HTMLElement[] = [];\n private readonly _div: HTMLDivElement;\n private readonly _vp: Viewport;\n private _curIntervalId?: NodeJS.Timer;\n\n public constructor(parent: HTMLElement, vp: Viewport) {\n this._vp = vp;\n this.addMaxActive(parent);\n createCheckBox({\n parent,\n name: \"Track Tile Requests\",\n id: \"stats_trackMemory\",\n handler: (_cb) => this.toggle(),\n });\n\n this._div = document.createElement(\"div\");\n this._div.style.display = \"none\";\n this._div.style.textAlign = \"right\";\n\n const table = document.createElement(\"table\");\n table.style.width = \"100%\";\n table.setAttribute(\"border\", \"1\");\n this._div.appendChild(table);\n\n const row = document.createElement(\"tr\");\n const frameColumn = document.createElement(\"td\");\n const globalColumn = document.createElement(\"td\");\n frameColumn.style.width = globalColumn.style.width = \"50%\";\n row.appendChild(frameColumn);\n row.appendChild(globalColumn);\n table.appendChild(row);\n\n for (let i = 0; i < statEntries.length; i++) {\n const div = document.createElement(\"div\");\n const elem = document.createElement(\"text\");\n this._statElements[i] = elem;\n div.appendChild(elem);\n\n const column = i >= indexOfFirstGlobalStatistic ? globalColumn : frameColumn;\n column.appendChild(div);\n }\n\n const resetButton = createButton({\n parent: this._div,\n value: \"Reset\",\n tooltip: \"Reset all cumulative statistics\",\n handler: () => this.reset(),\n });\n resetButton.div.style.textAlign = \"center\";\n\n parent.appendChild(this._div);\n }\n\n public dispose(): void {\n this.clearInterval();\n }\n\n private addMaxActive(parent: HTMLElement): void {\n const div = document.createElement(\"div\");\n\n const label = document.createElement(\"label\");\n label.style.display = \"inline\";\n label.htmlFor = \"maxActiveRequests\";\n label.innerText = \"Max Active Requests: \";\n div.appendChild(label);\n\n createNumericInput({\n parent: div,\n id: \"maxActiveRequests\",\n display: \"inline\",\n min: 0,\n step: 1,\n value: IModelApp.tileAdmin.channels.rpcConcurrency,\n handler: (value, _input) => this.updateMaxActive(value),\n });\n\n parent.appendChild(div);\n }\n\n private updateMaxActive(value: number): void {\n IModelApp.tileAdmin.channels.setRpcConcurrency(value);\n }\n\n private clearInterval(): void {\n if (undefined !== this._curIntervalId) {\n clearInterval(this._curIntervalId);\n this._curIntervalId = undefined;\n }\n }\n\n private toggle(): void {\n if (undefined !== this._curIntervalId) {\n // Currently on - turn off.\n this._div.style.display = \"none\";\n this.clearInterval();\n } else {\n // Currently off - turn on.\n this._div.style.display = \"block\";\n this.update();\n this._curIntervalId = setInterval(() => this.update(), 500);\n }\n }\n\n private update(): void {\n const stats = IModelApp.tileAdmin.statistics;\n for (let i = 0; i < statEntries.length; i++) {\n const stat = statEntries[i];\n const label = `${stat.label}: ${stat.getValue(stats, this._vp)}`;\n this._statElements[i].innerText = label;\n }\n }\n\n private reset(): void {\n IModelApp.tileAdmin.resetStatistics();\n this.update();\n }\n}\n"]}
@@ -1,10 +1,10 @@
1
- import { Viewport } from "@itwin/core-frontend";
2
- /** Allows the global settings controlling the behavior of viewing tools to be customized.
3
- * @alpha
4
- */
5
- export declare class ToolSettingsTracker {
6
- private static _expandToolSettings;
7
- constructor(parent: HTMLElement, _vp: Viewport);
8
- dispose(): void;
9
- }
1
+ import { Viewport } from "@itwin/core-frontend";
2
+ /** Allows the global settings controlling the behavior of viewing tools to be customized.
3
+ * @alpha
4
+ */
5
+ export declare class ToolSettingsTracker {
6
+ private static _expandToolSettings;
7
+ constructor(parent: HTMLElement, _vp: Viewport);
8
+ dispose(): void;
9
+ }
10
10
  //# sourceMappingURL=ToolSettingsTracker.d.ts.map