@itwin/frontend-devtools 4.0.0-dev.24 → 4.0.0-dev.28

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 (369) hide show
  1. package/CHANGELOG.md +5 -0
  2. package/lib/cjs/ClipboardUtilities.d.ts +8 -8
  3. package/lib/cjs/ClipboardUtilities.js +26 -26
  4. package/lib/cjs/ClipboardUtilities.js.map +1 -1
  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 +165 -165
  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 +99 -99
  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 +109 -109
  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/Random.js.map +1 -1
  26. package/lib/cjs/effects/Saturation.d.ts +30 -30
  27. package/lib/cjs/effects/Saturation.js +85 -85
  28. package/lib/cjs/effects/Saturation.js.map +1 -1
  29. package/lib/cjs/effects/Snow.d.ts +76 -76
  30. package/lib/cjs/effects/Snow.js +187 -187
  31. package/lib/cjs/effects/Snow.js.map +1 -1
  32. package/lib/cjs/effects/Vignette.d.ts +39 -39
  33. package/lib/cjs/effects/Vignette.js +108 -108
  34. package/lib/cjs/effects/Vignette.js.map +1 -1
  35. package/lib/cjs/frontend-devtools.d.ts +82 -82
  36. package/lib/cjs/frontend-devtools.js +98 -98
  37. package/lib/cjs/frontend-devtools.js.map +1 -1
  38. package/lib/cjs/tools/AnimationIntervalTool.d.ts +15 -15
  39. package/lib/cjs/tools/AnimationIntervalTool.js +30 -30
  40. package/lib/cjs/tools/AnimationIntervalTool.js.map +1 -1
  41. package/lib/cjs/tools/ChangeUnitsTool.d.ts +15 -15
  42. package/lib/cjs/tools/ChangeUnitsTool.js +41 -41
  43. package/lib/cjs/tools/ChangeUnitsTool.js.map +1 -1
  44. package/lib/cjs/tools/ClipTools.d.ts +67 -67
  45. package/lib/cjs/tools/ClipTools.js +161 -164
  46. package/lib/cjs/tools/ClipTools.js.map +1 -1
  47. package/lib/cjs/tools/DisplayStyleTools.d.ts +145 -145
  48. package/lib/cjs/tools/DisplayStyleTools.js +368 -370
  49. package/lib/cjs/tools/DisplayStyleTools.js.map +1 -1
  50. package/lib/cjs/tools/EmphasizeElementsTool.d.ts +60 -60
  51. package/lib/cjs/tools/EmphasizeElementsTool.js +154 -154
  52. package/lib/cjs/tools/EmphasizeElementsTool.js.map +1 -1
  53. package/lib/cjs/tools/FrustumDecoration.d.ts +57 -57
  54. package/lib/cjs/tools/FrustumDecoration.js +374 -374
  55. package/lib/cjs/tools/FrustumDecoration.js.map +1 -1
  56. package/lib/cjs/tools/InspectElementTool.d.ts +42 -42
  57. package/lib/cjs/tools/InspectElementTool.js +198 -198
  58. package/lib/cjs/tools/InspectElementTool.js.map +1 -1
  59. package/lib/cjs/tools/MapLayerTool.d.ts +264 -264
  60. package/lib/cjs/tools/MapLayerTool.js +507 -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.js +174 -174
  88. package/lib/cjs/tools/RenderTargetTools.js.map +1 -1
  89. package/lib/cjs/tools/ReportWebGLCompatibilityTool.d.ts +11 -11
  90. package/lib/cjs/tools/ReportWebGLCompatibilityTool.js +30 -30
  91. package/lib/cjs/tools/ReportWebGLCompatibilityTool.js.map +1 -1
  92. package/lib/cjs/tools/SavedViews.d.ts +46 -46
  93. package/lib/cjs/tools/SavedViews.js +136 -136
  94. package/lib/cjs/tools/SavedViews.js.map +1 -1
  95. package/lib/cjs/tools/ScheduleScriptTools.d.ts +37 -37
  96. package/lib/cjs/tools/ScheduleScriptTools.js +157 -159
  97. package/lib/cjs/tools/ScheduleScriptTools.js.map +1 -1
  98. package/lib/cjs/tools/SelectionTools.d.ts +28 -28
  99. package/lib/cjs/tools/SelectionTools.js +87 -87
  100. package/lib/cjs/tools/SelectionTools.js.map +1 -1
  101. package/lib/cjs/tools/SetGpuMemoryLimitTool.d.ts +15 -15
  102. package/lib/cjs/tools/SetGpuMemoryLimitTool.js +33 -33
  103. package/lib/cjs/tools/SetGpuMemoryLimitTool.js.map +1 -1
  104. package/lib/cjs/tools/SourceAspectIdTools.d.ts +40 -40
  105. package/lib/cjs/tools/SourceAspectIdTools.js +85 -86
  106. package/lib/cjs/tools/SourceAspectIdTools.js.map +1 -1
  107. package/lib/cjs/tools/TileRequestDecoration.d.ts +12 -12
  108. package/lib/cjs/tools/TileRequestDecoration.js +83 -83
  109. package/lib/cjs/tools/TileRequestDecoration.js.map +1 -1
  110. package/lib/cjs/tools/TileTreeBoundsDecoration.d.ts +11 -11
  111. package/lib/cjs/tools/TileTreeBoundsDecoration.js +74 -74
  112. package/lib/cjs/tools/TileTreeBoundsDecoration.js.map +1 -1
  113. package/lib/cjs/tools/ToolTipProvider.d.ts +15 -15
  114. package/lib/cjs/tools/ToolTipProvider.js +66 -66
  115. package/lib/cjs/tools/ToolTipProvider.js.map +1 -1
  116. package/lib/cjs/tools/ViewportTools.d.ts +218 -218
  117. package/lib/cjs/tools/ViewportTools.js +515 -516
  118. package/lib/cjs/tools/ViewportTools.js.map +1 -1
  119. package/lib/cjs/tools/parseArgs.d.ts +23 -23
  120. package/lib/cjs/tools/parseArgs.js +51 -51
  121. package/lib/cjs/tools/parseArgs.js.map +1 -1
  122. package/lib/cjs/tools/parseBoolean.d.ts +8 -8
  123. package/lib/cjs/tools/parseBoolean.js +26 -26
  124. package/lib/cjs/tools/parseBoolean.js.map +1 -1
  125. package/lib/cjs/tools/parseToggle.d.ts +8 -8
  126. package/lib/cjs/tools/parseToggle.js +25 -25
  127. package/lib/cjs/tools/parseToggle.js.map +1 -1
  128. package/lib/cjs/ui/Button.d.ts +29 -29
  129. package/lib/cjs/ui/Button.js +26 -26
  130. package/lib/cjs/ui/Button.js.map +1 -1
  131. package/lib/cjs/ui/CheckBox.d.ts +23 -23
  132. package/lib/cjs/ui/CheckBox.js +27 -27
  133. package/lib/cjs/ui/CheckBox.js.map +1 -1
  134. package/lib/cjs/ui/ColorInput.d.ts +27 -27
  135. package/lib/cjs/ui/ColorInput.js +53 -53
  136. package/lib/cjs/ui/ColorInput.js.map +1 -1
  137. package/lib/cjs/ui/ComboBox.d.ts +28 -28
  138. package/lib/cjs/ui/ComboBox.js +42 -42
  139. package/lib/cjs/ui/ComboBox.js.map +1 -1
  140. package/lib/cjs/ui/DataList.d.ts +27 -27
  141. package/lib/cjs/ui/DataList.js +39 -39
  142. package/lib/cjs/ui/DataList.js.map +1 -1
  143. package/lib/cjs/ui/NestedMenu.d.ts +19 -19
  144. package/lib/cjs/ui/NestedMenu.js +46 -46
  145. package/lib/cjs/ui/NestedMenu.js.map +1 -1
  146. package/lib/cjs/ui/NumericInput.d.ts +35 -35
  147. package/lib/cjs/ui/NumericInput.js +61 -61
  148. package/lib/cjs/ui/NumericInput.js.map +1 -1
  149. package/lib/cjs/ui/RadioBox.d.ts +29 -29
  150. package/lib/cjs/ui/RadioBox.js +76 -76
  151. package/lib/cjs/ui/RadioBox.js.map +1 -1
  152. package/lib/cjs/ui/Slider.d.ts +28 -28
  153. package/lib/cjs/ui/Slider.js +42 -42
  154. package/lib/cjs/ui/Slider.js.map +1 -1
  155. package/lib/cjs/ui/TextBox.d.ts +32 -32
  156. package/lib/cjs/ui/TextBox.js +56 -56
  157. package/lib/cjs/ui/TextBox.js.map +1 -1
  158. package/lib/cjs/widgets/DiagnosticsPanel.d.ts +37 -37
  159. package/lib/cjs/widgets/DiagnosticsPanel.js +81 -81
  160. package/lib/cjs/widgets/DiagnosticsPanel.js.map +1 -1
  161. package/lib/cjs/widgets/FpsTracker.d.ts +19 -19
  162. package/lib/cjs/widgets/FpsTracker.js +56 -56
  163. package/lib/cjs/widgets/FpsTracker.js.map +1 -1
  164. package/lib/cjs/widgets/GpuProfiler.d.ts +16 -16
  165. package/lib/cjs/widgets/GpuProfiler.js +192 -192
  166. package/lib/cjs/widgets/GpuProfiler.js.map +1 -1
  167. package/lib/cjs/widgets/KeyinField.d.ts +61 -61
  168. package/lib/cjs/widgets/KeyinField.js +186 -187
  169. package/lib/cjs/widgets/KeyinField.js.map +1 -1
  170. package/lib/cjs/widgets/MemoryTracker.d.ts +27 -27
  171. package/lib/cjs/widgets/MemoryTracker.js +242 -243
  172. package/lib/cjs/widgets/MemoryTracker.js.map +1 -1
  173. package/lib/cjs/widgets/RenderCommandBreakdown.d.ts +15 -15
  174. package/lib/cjs/widgets/RenderCommandBreakdown.js +67 -68
  175. package/lib/cjs/widgets/RenderCommandBreakdown.js.map +1 -1
  176. package/lib/cjs/widgets/TileMemoryBreakdown.d.ts +30 -30
  177. package/lib/cjs/widgets/TileMemoryBreakdown.js +203 -204
  178. package/lib/cjs/widgets/TileMemoryBreakdown.js.map +1 -1
  179. package/lib/cjs/widgets/TileStatisticsTracker.d.ts +21 -21
  180. package/lib/cjs/widgets/TileStatisticsTracker.js +144 -144
  181. package/lib/cjs/widgets/TileStatisticsTracker.js.map +1 -1
  182. package/lib/cjs/widgets/ToolSettingsTracker.d.ts +9 -9
  183. package/lib/cjs/widgets/ToolSettingsTracker.js +211 -211
  184. package/lib/cjs/widgets/ToolSettingsTracker.js.map +1 -1
  185. package/lib/esm/ClipboardUtilities.d.ts +8 -8
  186. package/lib/esm/ClipboardUtilities.js +22 -22
  187. package/lib/esm/ClipboardUtilities.js.map +1 -1
  188. package/lib/esm/FrontEndDevTools.d.ts +19 -19
  189. package/lib/esm/FrontEndDevTools.js +217 -217
  190. package/lib/esm/FrontEndDevTools.js.map +1 -1
  191. package/lib/esm/effects/Convolution.d.ts +68 -68
  192. package/lib/esm/effects/Convolution.js +155 -155
  193. package/lib/esm/effects/Convolution.js.map +1 -1
  194. package/lib/esm/effects/EffectTools.d.ts +33 -33
  195. package/lib/esm/effects/EffectTools.js +61 -62
  196. package/lib/esm/effects/EffectTools.js.map +1 -1
  197. package/lib/esm/effects/Explosion.d.ts +12 -12
  198. package/lib/esm/effects/Explosion.js +164 -164
  199. package/lib/esm/effects/Explosion.js.map +1 -1
  200. package/lib/esm/effects/FlipImage.d.ts +30 -30
  201. package/lib/esm/effects/FlipImage.js +94 -94
  202. package/lib/esm/effects/FlipImage.js.map +1 -1
  203. package/lib/esm/effects/LensDistortion.d.ts +34 -34
  204. package/lib/esm/effects/LensDistortion.js +104 -104
  205. package/lib/esm/effects/LensDistortion.js.map +1 -1
  206. package/lib/esm/effects/Random.d.ts +24 -24
  207. package/lib/esm/effects/Random.js +41 -41
  208. package/lib/esm/effects/Random.js.map +1 -1
  209. package/lib/esm/effects/Saturation.d.ts +30 -30
  210. package/lib/esm/effects/Saturation.js +80 -80
  211. package/lib/esm/effects/Saturation.js.map +1 -1
  212. package/lib/esm/effects/Snow.d.ts +76 -76
  213. package/lib/esm/effects/Snow.js +182 -182
  214. package/lib/esm/effects/Snow.js.map +1 -1
  215. package/lib/esm/effects/Vignette.d.ts +39 -39
  216. package/lib/esm/effects/Vignette.js +103 -103
  217. package/lib/esm/effects/Vignette.js.map +1 -1
  218. package/lib/esm/frontend-devtools.d.ts +82 -82
  219. package/lib/esm/frontend-devtools.js +86 -86
  220. package/lib/esm/frontend-devtools.js.map +1 -1
  221. package/lib/esm/tools/AnimationIntervalTool.d.ts +15 -15
  222. package/lib/esm/tools/AnimationIntervalTool.js +26 -26
  223. package/lib/esm/tools/AnimationIntervalTool.js.map +1 -1
  224. package/lib/esm/tools/ChangeUnitsTool.d.ts +15 -15
  225. package/lib/esm/tools/ChangeUnitsTool.js +37 -37
  226. package/lib/esm/tools/ChangeUnitsTool.js.map +1 -1
  227. package/lib/esm/tools/ClipTools.d.ts +67 -67
  228. package/lib/esm/tools/ClipTools.js +155 -158
  229. package/lib/esm/tools/ClipTools.js.map +1 -1
  230. package/lib/esm/tools/DisplayStyleTools.d.ts +145 -145
  231. package/lib/esm/tools/DisplayStyleTools.js +354 -356
  232. package/lib/esm/tools/DisplayStyleTools.js.map +1 -1
  233. package/lib/esm/tools/EmphasizeElementsTool.d.ts +60 -60
  234. package/lib/esm/tools/EmphasizeElementsTool.js +145 -145
  235. package/lib/esm/tools/EmphasizeElementsTool.js.map +1 -1
  236. package/lib/esm/tools/FrustumDecoration.d.ts +57 -57
  237. package/lib/esm/tools/FrustumDecoration.js +367 -367
  238. package/lib/esm/tools/FrustumDecoration.js.map +1 -1
  239. package/lib/esm/tools/InspectElementTool.d.ts +42 -42
  240. package/lib/esm/tools/InspectElementTool.js +194 -194
  241. package/lib/esm/tools/InspectElementTool.js.map +1 -1
  242. package/lib/esm/tools/MapLayerTool.d.ts +264 -264
  243. package/lib/esm/tools/MapLayerTool.js +485 -485
  244. package/lib/esm/tools/MapLayerTool.js.map +1 -1
  245. package/lib/esm/tools/MeasureTileLoadTime.d.ts +12 -12
  246. package/lib/esm/tools/MeasureTileLoadTime.js +59 -59
  247. package/lib/esm/tools/MeasureTileLoadTime.js.map +1 -1
  248. package/lib/esm/tools/ModelAppearanceTools.d.ts +86 -86
  249. package/lib/esm/tools/ModelAppearanceTools.js +172 -172
  250. package/lib/esm/tools/ModelAppearanceTools.js.map +1 -1
  251. package/lib/esm/tools/PlanProjectionTools.d.ts +40 -40
  252. package/lib/esm/tools/PlanProjectionTools.js +143 -143
  253. package/lib/esm/tools/PlanProjectionTools.js.map +1 -1
  254. package/lib/esm/tools/PlanarMaskTools.d.ts +182 -182
  255. package/lib/esm/tools/PlanarMaskTools.js +375 -377
  256. package/lib/esm/tools/PlanarMaskTools.js.map +1 -1
  257. package/lib/esm/tools/ProjectExtents.d.ts +41 -41
  258. package/lib/esm/tools/ProjectExtents.js +104 -104
  259. package/lib/esm/tools/ProjectExtents.js.map +1 -1
  260. package/lib/esm/tools/RealityModelTools.d.ts +116 -116
  261. package/lib/esm/tools/RealityModelTools.js +268 -268
  262. package/lib/esm/tools/RealityModelTools.js.map +1 -1
  263. package/lib/esm/tools/RealityTransitionTool.d.ts +25 -25
  264. package/lib/esm/tools/RealityTransitionTool.js +111 -112
  265. package/lib/esm/tools/RealityTransitionTool.js.map +1 -1
  266. package/lib/esm/tools/RenderSystemTools.d.ts +38 -38
  267. package/lib/esm/tools/RenderSystemTools.js +62 -63
  268. package/lib/esm/tools/RenderSystemTools.js.map +1 -1
  269. package/lib/esm/tools/RenderTargetTools.d.ts +107 -107
  270. package/lib/esm/tools/RenderTargetTools.js +159 -159
  271. package/lib/esm/tools/RenderTargetTools.js.map +1 -1
  272. package/lib/esm/tools/ReportWebGLCompatibilityTool.d.ts +11 -11
  273. package/lib/esm/tools/ReportWebGLCompatibilityTool.js +26 -26
  274. package/lib/esm/tools/ReportWebGLCompatibilityTool.js.map +1 -1
  275. package/lib/esm/tools/SavedViews.d.ts +46 -46
  276. package/lib/esm/tools/SavedViews.js +128 -128
  277. package/lib/esm/tools/SavedViews.js.map +1 -1
  278. package/lib/esm/tools/ScheduleScriptTools.d.ts +37 -37
  279. package/lib/esm/tools/ScheduleScriptTools.js +151 -153
  280. package/lib/esm/tools/ScheduleScriptTools.js.map +1 -1
  281. package/lib/esm/tools/SelectionTools.d.ts +28 -28
  282. package/lib/esm/tools/SelectionTools.js +82 -82
  283. package/lib/esm/tools/SelectionTools.js.map +1 -1
  284. package/lib/esm/tools/SetGpuMemoryLimitTool.d.ts +15 -15
  285. package/lib/esm/tools/SetGpuMemoryLimitTool.js +29 -29
  286. package/lib/esm/tools/SetGpuMemoryLimitTool.js.map +1 -1
  287. package/lib/esm/tools/SourceAspectIdTools.d.ts +40 -40
  288. package/lib/esm/tools/SourceAspectIdTools.js +79 -80
  289. package/lib/esm/tools/SourceAspectIdTools.js.map +1 -1
  290. package/lib/esm/tools/TileRequestDecoration.d.ts +12 -12
  291. package/lib/esm/tools/TileRequestDecoration.js +79 -79
  292. package/lib/esm/tools/TileRequestDecoration.js.map +1 -1
  293. package/lib/esm/tools/TileTreeBoundsDecoration.d.ts +11 -11
  294. package/lib/esm/tools/TileTreeBoundsDecoration.js +70 -70
  295. package/lib/esm/tools/TileTreeBoundsDecoration.js.map +1 -1
  296. package/lib/esm/tools/ToolTipProvider.d.ts +15 -15
  297. package/lib/esm/tools/ToolTipProvider.js +62 -62
  298. package/lib/esm/tools/ToolTipProvider.js.map +1 -1
  299. package/lib/esm/tools/ViewportTools.d.ts +218 -218
  300. package/lib/esm/tools/ViewportTools.js +491 -492
  301. package/lib/esm/tools/ViewportTools.js.map +1 -1
  302. package/lib/esm/tools/parseArgs.d.ts +23 -23
  303. package/lib/esm/tools/parseArgs.js +47 -47
  304. package/lib/esm/tools/parseArgs.js.map +1 -1
  305. package/lib/esm/tools/parseBoolean.d.ts +8 -8
  306. package/lib/esm/tools/parseBoolean.js +22 -22
  307. package/lib/esm/tools/parseBoolean.js.map +1 -1
  308. package/lib/esm/tools/parseToggle.d.ts +8 -8
  309. package/lib/esm/tools/parseToggle.js +21 -21
  310. package/lib/esm/tools/parseToggle.js.map +1 -1
  311. package/lib/esm/ui/Button.d.ts +29 -29
  312. package/lib/esm/ui/Button.js +22 -22
  313. package/lib/esm/ui/Button.js.map +1 -1
  314. package/lib/esm/ui/CheckBox.d.ts +23 -23
  315. package/lib/esm/ui/CheckBox.js +23 -23
  316. package/lib/esm/ui/CheckBox.js.map +1 -1
  317. package/lib/esm/ui/ColorInput.d.ts +27 -27
  318. package/lib/esm/ui/ColorInput.js +48 -48
  319. package/lib/esm/ui/ColorInput.js.map +1 -1
  320. package/lib/esm/ui/ComboBox.d.ts +28 -28
  321. package/lib/esm/ui/ComboBox.js +38 -38
  322. package/lib/esm/ui/ComboBox.js.map +1 -1
  323. package/lib/esm/ui/DataList.d.ts +27 -27
  324. package/lib/esm/ui/DataList.js +34 -34
  325. package/lib/esm/ui/DataList.js.map +1 -1
  326. package/lib/esm/ui/NestedMenu.d.ts +19 -19
  327. package/lib/esm/ui/NestedMenu.js +42 -42
  328. package/lib/esm/ui/NestedMenu.js.map +1 -1
  329. package/lib/esm/ui/NumericInput.d.ts +35 -35
  330. package/lib/esm/ui/NumericInput.js +56 -56
  331. package/lib/esm/ui/NumericInput.js.map +1 -1
  332. package/lib/esm/ui/RadioBox.d.ts +29 -29
  333. package/lib/esm/ui/RadioBox.js +72 -72
  334. package/lib/esm/ui/RadioBox.js.map +1 -1
  335. package/lib/esm/ui/Slider.d.ts +28 -28
  336. package/lib/esm/ui/Slider.js +38 -38
  337. package/lib/esm/ui/Slider.js.map +1 -1
  338. package/lib/esm/ui/TextBox.d.ts +32 -32
  339. package/lib/esm/ui/TextBox.js +52 -52
  340. package/lib/esm/ui/TextBox.js.map +1 -1
  341. package/lib/esm/widgets/DiagnosticsPanel.d.ts +37 -37
  342. package/lib/esm/widgets/DiagnosticsPanel.js +77 -77
  343. package/lib/esm/widgets/DiagnosticsPanel.js.map +1 -1
  344. package/lib/esm/widgets/FpsTracker.d.ts +19 -19
  345. package/lib/esm/widgets/FpsTracker.js +52 -52
  346. package/lib/esm/widgets/FpsTracker.js.map +1 -1
  347. package/lib/esm/widgets/GpuProfiler.d.ts +16 -16
  348. package/lib/esm/widgets/GpuProfiler.js +188 -188
  349. package/lib/esm/widgets/GpuProfiler.js.map +1 -1
  350. package/lib/esm/widgets/KeyinField.d.ts +61 -61
  351. package/lib/esm/widgets/KeyinField.js +182 -183
  352. package/lib/esm/widgets/KeyinField.js.map +1 -1
  353. package/lib/esm/widgets/MemoryTracker.d.ts +27 -27
  354. package/lib/esm/widgets/MemoryTracker.js +237 -238
  355. package/lib/esm/widgets/MemoryTracker.js.map +1 -1
  356. package/lib/esm/widgets/RenderCommandBreakdown.d.ts +15 -15
  357. package/lib/esm/widgets/RenderCommandBreakdown.js +63 -64
  358. package/lib/esm/widgets/RenderCommandBreakdown.js.map +1 -1
  359. package/lib/esm/widgets/TileMemoryBreakdown.d.ts +30 -30
  360. package/lib/esm/widgets/TileMemoryBreakdown.js +199 -200
  361. package/lib/esm/widgets/TileMemoryBreakdown.js.map +1 -1
  362. package/lib/esm/widgets/TileStatisticsTracker.d.ts +21 -21
  363. package/lib/esm/widgets/TileStatisticsTracker.js +140 -140
  364. package/lib/esm/widgets/TileStatisticsTracker.js.map +1 -1
  365. package/lib/esm/widgets/ToolSettingsTracker.d.ts +9 -9
  366. package/lib/esm/widgets/ToolSettingsTracker.js +207 -207
  367. package/lib/esm/widgets/ToolSettingsTracker.js.map +1 -1
  368. package/lib/public/locales/en/FrontendDevTools.json +484 -484
  369. package/package.json +7 -7
@@ -1,193 +1,193 @@
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.GpuProfiler = void 0;
8
- /** @packageDocumentation
9
- * @module Widgets
10
- */
11
- const file_saver_1 = require("file-saver");
12
- const core_frontend_1 = require("@itwin/core-frontend");
13
- const CheckBox_1 = require("../ui/CheckBox");
14
- const dummyArgs = { 0: 0 }; // Reuse instead of allocating for each entry
15
- /**
16
- * @param name Label for the trace event
17
- * @param start Timestamp in microseconds of when trace event started
18
- * @param duration Duration in microseconds of trace event
19
- */
20
- function createTraceEvent(name, start, duration) {
21
- return {
22
- pid: 1,
23
- ts: start,
24
- dur: duration,
25
- ph: "X",
26
- name,
27
- args: dummyArgs,
28
- };
29
- }
30
- function createTraceFromTimerResults(timerResults) {
31
- const traceEvents = [];
32
- const addChildren = (startTime, children) => {
33
- for (const child of children) {
34
- if (child.nanoseconds < 100)
35
- continue;
36
- const microseconds = child.nanoseconds / 1E3;
37
- traceEvents.push(createTraceEvent(child.label, startTime, microseconds));
38
- if (child.children)
39
- addChildren(startTime, child.children);
40
- startTime += microseconds;
41
- }
42
- };
43
- let frameStartTime = 0;
44
- let frameNumber = 0;
45
- for (const tr of timerResults) {
46
- const microseconds = tr.nanoseconds / 1E3;
47
- traceEvents.push(createTraceEvent(`Frame ${frameNumber}`, frameStartTime, microseconds));
48
- if (tr.children)
49
- addChildren(frameStartTime, tr.children);
50
- frameStartTime += microseconds;
51
- ++frameNumber;
52
- }
53
- return { traceEvents };
54
- }
55
- /** @alpha */
56
- class GpuProfiler {
57
- constructor(parent) {
58
- this._clickRecord = () => {
59
- if (!this._isRecording) {
60
- this._isRecording = true;
61
- this._recordButton.innerText = "Stop Recording";
62
- return;
63
- }
64
- this.stopRecording();
65
- };
66
- this._resultsCallback = (result) => {
67
- if (this._isRecording)
68
- this._recordedResults.push(result);
69
- const fragment = document.createDocumentFragment();
70
- const numSavedFrames = 120;
71
- let lastValue;
72
- const changedResults = new Array(this._results.length); // default values false
73
- const printDepth = (depth, currentRes) => {
74
- const index = this._results.findIndex((res) => res.label === currentRes.label);
75
- if (index < 0) { // Add brand new entry
76
- const data = {
77
- label: currentRes.label,
78
- paddingLeft: `${depth}em`,
79
- sum: currentRes.nanoseconds,
80
- values: [currentRes.nanoseconds],
81
- };
82
- if (lastValue === undefined) {
83
- this._results.unshift(data);
84
- changedResults.unshift(true);
85
- }
86
- else if (currentRes.label === "Read Pixels") {
87
- this._results.push(data); // Read Pixels should go at the end of the list
88
- changedResults.push(true);
89
- }
90
- else {
91
- const prevIndex = this._results.findIndex((res) => res.label === lastValue);
92
- this._results.splice(prevIndex + 1, 0, data);
93
- changedResults.splice(prevIndex + 1, 0, true);
94
- }
95
- }
96
- else { // Edit old entry
97
- let oldVal = 0.0;
98
- const savedResults = this._results[index];
99
- if (savedResults.values.length >= numSavedFrames) { // keep up to numSavedFrames values to average between
100
- oldVal = savedResults.values.shift();
101
- }
102
- const newVal = currentRes.nanoseconds < 100 ? 0.0 : currentRes.nanoseconds; // high-pass filter, empty queries have some noise
103
- savedResults.sum += newVal - oldVal;
104
- savedResults.values.push(newVal);
105
- changedResults[index] = true;
106
- }
107
- lastValue = currentRes.label;
108
- if (!currentRes.children)
109
- return;
110
- for (const childRes of currentRes.children)
111
- printDepth(depth + 1, childRes);
112
- };
113
- printDepth(0, result);
114
- this._results.forEach((value, index) => {
115
- if (!changedResults[index]) { // if no data received on this item, add a value of 0.0 to the avg.
116
- const oldVal = value.values.length >= numSavedFrames ? value.values.shift() : 0.0;
117
- value.sum -= oldVal;
118
- value.values.push(0.0);
119
- }
120
- const div = document.createElement("div");
121
- div.style.display = "flex";
122
- div.style.width = "75%";
123
- const textLabel = document.createElement("text");
124
- textLabel.innerText = `${value.label}`;
125
- textLabel.style.paddingLeft = value.paddingLeft;
126
- div.appendChild(textLabel);
127
- const divLine = document.createElement("div");
128
- divLine.style.flexGrow = "1";
129
- divLine.style.borderBottom = "dotted 1px";
130
- div.appendChild(divLine);
131
- const textValue = document.createElement("text");
132
- textValue.innerText = `${(value.sum / value.values.length / 1.E6).toFixed(3)} ms\n`;
133
- div.appendChild(textValue);
134
- fragment.appendChild(div);
135
- });
136
- this._resultsDiv.innerHTML = "";
137
- this._resultsDiv.appendChild(fragment);
138
- };
139
- this._debugControl = core_frontend_1.IModelApp.renderSystem.debugControl;
140
- const checkBox = (0, CheckBox_1.createCheckBox)({
141
- parent,
142
- name: "Profile GPU",
143
- id: "gpu-profiler-toggle",
144
- handler: (cb) => this.toggleProfileCheckBox(cb.checked),
145
- });
146
- if (!this._debugControl.isGLTimerSupported) {
147
- checkBox.checkbox.disabled = true;
148
- checkBox.div.title = "EXT_disjoint_timer_query is not available in this browser";
149
- }
150
- this._div = document.createElement("div");
151
- this._div.style.display = "none";
152
- this._recordButton = document.createElement("button");
153
- this._recordButton.style.textAlign = "center";
154
- this._isRecording = false;
155
- this._recordButton.innerText = "Record Profile";
156
- this._recordButton.title = "Record a profile to open with chrome://tracing";
157
- this._recordedResults = [];
158
- this._recordButton.addEventListener("click", this._clickRecord);
159
- this._div.appendChild(this._recordButton);
160
- this._results = [];
161
- this._resultsDiv = document.createElement("div");
162
- this._resultsDiv.style.textAlign = "left";
163
- this._div.appendChild(this._resultsDiv);
164
- parent.appendChild(this._div);
165
- }
166
- dispose() {
167
- this._debugControl.resultsCallback = undefined;
168
- }
169
- toggleProfileCheckBox(isEnabled) {
170
- if (isEnabled) {
171
- this._debugControl.resultsCallback = this._resultsCallback;
172
- this._resultsDiv.innerHTML = "";
173
- this._div.style.display = "block";
174
- }
175
- else {
176
- this._debugControl.resultsCallback = undefined;
177
- this._div.style.display = "none";
178
- this.stopRecording();
179
- }
180
- }
181
- stopRecording() {
182
- this._isRecording = false;
183
- this._recordButton.innerText = "Record Profile";
184
- if (this._recordedResults.length !== 0) {
185
- const chromeTrace = createTraceFromTimerResults(this._recordedResults);
186
- const blob = new Blob([JSON.stringify(chromeTrace)], { type: "application/json;charset=utf-8" });
187
- (0, file_saver_1.saveAs)(blob, "gpu-profile.json");
188
- this._recordedResults = [];
189
- }
190
- }
191
- }
192
- exports.GpuProfiler = GpuProfiler;
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.GpuProfiler = void 0;
8
+ /** @packageDocumentation
9
+ * @module Widgets
10
+ */
11
+ const file_saver_1 = require("file-saver");
12
+ const core_frontend_1 = require("@itwin/core-frontend");
13
+ const CheckBox_1 = require("../ui/CheckBox");
14
+ const dummyArgs = { 0: 0 }; // Reuse instead of allocating for each entry
15
+ /**
16
+ * @param name Label for the trace event
17
+ * @param start Timestamp in microseconds of when trace event started
18
+ * @param duration Duration in microseconds of trace event
19
+ */
20
+ function createTraceEvent(name, start, duration) {
21
+ return {
22
+ pid: 1,
23
+ ts: start,
24
+ dur: duration,
25
+ ph: "X",
26
+ name,
27
+ args: dummyArgs,
28
+ };
29
+ }
30
+ function createTraceFromTimerResults(timerResults) {
31
+ const traceEvents = [];
32
+ const addChildren = (startTime, children) => {
33
+ for (const child of children) {
34
+ if (child.nanoseconds < 100)
35
+ continue;
36
+ const microseconds = child.nanoseconds / 1E3;
37
+ traceEvents.push(createTraceEvent(child.label, startTime, microseconds));
38
+ if (child.children)
39
+ addChildren(startTime, child.children);
40
+ startTime += microseconds;
41
+ }
42
+ };
43
+ let frameStartTime = 0;
44
+ let frameNumber = 0;
45
+ for (const tr of timerResults) {
46
+ const microseconds = tr.nanoseconds / 1E3;
47
+ traceEvents.push(createTraceEvent(`Frame ${frameNumber}`, frameStartTime, microseconds));
48
+ if (tr.children)
49
+ addChildren(frameStartTime, tr.children);
50
+ frameStartTime += microseconds;
51
+ ++frameNumber;
52
+ }
53
+ return { traceEvents };
54
+ }
55
+ /** @alpha */
56
+ class GpuProfiler {
57
+ constructor(parent) {
58
+ this._clickRecord = () => {
59
+ if (!this._isRecording) {
60
+ this._isRecording = true;
61
+ this._recordButton.innerText = "Stop Recording";
62
+ return;
63
+ }
64
+ this.stopRecording();
65
+ };
66
+ this._resultsCallback = (result) => {
67
+ if (this._isRecording)
68
+ this._recordedResults.push(result);
69
+ const fragment = document.createDocumentFragment();
70
+ const numSavedFrames = 120;
71
+ let lastValue;
72
+ const changedResults = new Array(this._results.length); // default values false
73
+ const printDepth = (depth, currentRes) => {
74
+ const index = this._results.findIndex((res) => res.label === currentRes.label);
75
+ if (index < 0) { // Add brand new entry
76
+ const data = {
77
+ label: currentRes.label,
78
+ paddingLeft: `${depth}em`,
79
+ sum: currentRes.nanoseconds,
80
+ values: [currentRes.nanoseconds],
81
+ };
82
+ if (lastValue === undefined) {
83
+ this._results.unshift(data);
84
+ changedResults.unshift(true);
85
+ }
86
+ else if (currentRes.label === "Read Pixels") {
87
+ this._results.push(data); // Read Pixels should go at the end of the list
88
+ changedResults.push(true);
89
+ }
90
+ else {
91
+ const prevIndex = this._results.findIndex((res) => res.label === lastValue);
92
+ this._results.splice(prevIndex + 1, 0, data);
93
+ changedResults.splice(prevIndex + 1, 0, true);
94
+ }
95
+ }
96
+ else { // Edit old entry
97
+ let oldVal = 0.0;
98
+ const savedResults = this._results[index];
99
+ if (savedResults.values.length >= numSavedFrames) { // keep up to numSavedFrames values to average between
100
+ oldVal = savedResults.values.shift();
101
+ }
102
+ const newVal = currentRes.nanoseconds < 100 ? 0.0 : currentRes.nanoseconds; // high-pass filter, empty queries have some noise
103
+ savedResults.sum += newVal - oldVal;
104
+ savedResults.values.push(newVal);
105
+ changedResults[index] = true;
106
+ }
107
+ lastValue = currentRes.label;
108
+ if (!currentRes.children)
109
+ return;
110
+ for (const childRes of currentRes.children)
111
+ printDepth(depth + 1, childRes);
112
+ };
113
+ printDepth(0, result);
114
+ this._results.forEach((value, index) => {
115
+ if (!changedResults[index]) { // if no data received on this item, add a value of 0.0 to the avg.
116
+ const oldVal = value.values.length >= numSavedFrames ? value.values.shift() : 0.0;
117
+ value.sum -= oldVal;
118
+ value.values.push(0.0);
119
+ }
120
+ const div = document.createElement("div");
121
+ div.style.display = "flex";
122
+ div.style.width = "75%";
123
+ const textLabel = document.createElement("text");
124
+ textLabel.innerText = `${value.label}`;
125
+ textLabel.style.paddingLeft = value.paddingLeft;
126
+ div.appendChild(textLabel);
127
+ const divLine = document.createElement("div");
128
+ divLine.style.flexGrow = "1";
129
+ divLine.style.borderBottom = "dotted 1px";
130
+ div.appendChild(divLine);
131
+ const textValue = document.createElement("text");
132
+ textValue.innerText = `${(value.sum / value.values.length / 1.E6).toFixed(3)} ms\n`;
133
+ div.appendChild(textValue);
134
+ fragment.appendChild(div);
135
+ });
136
+ this._resultsDiv.innerHTML = "";
137
+ this._resultsDiv.appendChild(fragment);
138
+ };
139
+ this._debugControl = core_frontend_1.IModelApp.renderSystem.debugControl;
140
+ const checkBox = (0, CheckBox_1.createCheckBox)({
141
+ parent,
142
+ name: "Profile GPU",
143
+ id: "gpu-profiler-toggle",
144
+ handler: (cb) => this.toggleProfileCheckBox(cb.checked),
145
+ });
146
+ if (!this._debugControl.isGLTimerSupported) {
147
+ checkBox.checkbox.disabled = true;
148
+ checkBox.div.title = "EXT_disjoint_timer_query is not available in this browser";
149
+ }
150
+ this._div = document.createElement("div");
151
+ this._div.style.display = "none";
152
+ this._recordButton = document.createElement("button");
153
+ this._recordButton.style.textAlign = "center";
154
+ this._isRecording = false;
155
+ this._recordButton.innerText = "Record Profile";
156
+ this._recordButton.title = "Record a profile to open with chrome://tracing";
157
+ this._recordedResults = [];
158
+ this._recordButton.addEventListener("click", this._clickRecord);
159
+ this._div.appendChild(this._recordButton);
160
+ this._results = [];
161
+ this._resultsDiv = document.createElement("div");
162
+ this._resultsDiv.style.textAlign = "left";
163
+ this._div.appendChild(this._resultsDiv);
164
+ parent.appendChild(this._div);
165
+ }
166
+ dispose() {
167
+ this._debugControl.resultsCallback = undefined;
168
+ }
169
+ toggleProfileCheckBox(isEnabled) {
170
+ if (isEnabled) {
171
+ this._debugControl.resultsCallback = this._resultsCallback;
172
+ this._resultsDiv.innerHTML = "";
173
+ this._div.style.display = "block";
174
+ }
175
+ else {
176
+ this._debugControl.resultsCallback = undefined;
177
+ this._div.style.display = "none";
178
+ this.stopRecording();
179
+ }
180
+ }
181
+ stopRecording() {
182
+ this._isRecording = false;
183
+ this._recordButton.innerText = "Record Profile";
184
+ if (this._recordedResults.length !== 0) {
185
+ const chromeTrace = createTraceFromTimerResults(this._recordedResults);
186
+ const blob = new Blob([JSON.stringify(chromeTrace)], { type: "application/json;charset=utf-8" });
187
+ (0, file_saver_1.saveAs)(blob, "gpu-profile.json");
188
+ this._recordedResults = [];
189
+ }
190
+ }
191
+ }
192
+ exports.GpuProfiler = GpuProfiler;
193
193
  //# sourceMappingURL=GpuProfiler.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"GpuProfiler.js","sourceRoot":"","sources":["../../../src/widgets/GpuProfiler.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 { saveAs } from \"file-saver\";\r\nimport { GLTimerResult, IModelApp, RenderSystemDebugControl } from \"@itwin/core-frontend\";\r\nimport { createCheckBox } from \"../ui/CheckBox\";\r\n\r\n/** Trace Event Format, viewable with chrome://tracing\r\n * https://docs.google.com/document/d/1CvAClvFfyA5R-PhYUmn5OOQtYMH4h6I0nSsKchNAySU/edit\r\n */\r\ninterface ChromeTrace {\r\n traceEvents: ChromeTraceEvent[];\r\n}\r\n\r\ninterface ChromeTraceEvent {\r\n /** Required by chrome://tracing */\r\n pid: 1;\r\n /** Timestamp in microseconds */\r\n ts: number;\r\n /** Duration in microseconds */\r\n dur: number;\r\n /** Denotes \"complete\" event */\r\n ph: \"X\";\r\n /** Label for chrome://tracing view */\r\n name: string;\r\n /** dummy value, args must be defined for entries to be clickable in chrome://tracing */\r\n args: ChromeTraceEventArgs;\r\n}\r\n\r\ninterface ChromeTraceEventArgs { 0: 0 }\r\nconst dummyArgs: ChromeTraceEventArgs = { 0: 0 }; // Reuse instead of allocating for each entry\r\n\r\n/**\r\n * @param name Label for the trace event\r\n * @param start Timestamp in microseconds of when trace event started\r\n * @param duration Duration in microseconds of trace event\r\n */\r\nfunction createTraceEvent(name: string, start: number, duration: number): ChromeTraceEvent {\r\n return {\r\n pid: 1,\r\n ts: start,\r\n dur: duration,\r\n ph: \"X\",\r\n name,\r\n args: dummyArgs,\r\n };\r\n}\r\n\r\nfunction createTraceFromTimerResults(timerResults: GLTimerResult[]): ChromeTrace {\r\n const traceEvents: ChromeTraceEvent[] = [];\r\n\r\n const addChildren = (startTime: number, children: GLTimerResult[]) => {\r\n for (const child of children) {\r\n if (child.nanoseconds < 100)\r\n continue;\r\n const microseconds = child.nanoseconds / 1E3;\r\n traceEvents.push(createTraceEvent(child.label, startTime, microseconds));\r\n if (child.children)\r\n addChildren(startTime, child.children);\r\n startTime += microseconds;\r\n }\r\n };\r\n\r\n let frameStartTime = 0;\r\n let frameNumber = 0;\r\n for (const tr of timerResults) {\r\n const microseconds = tr.nanoseconds / 1E3;\r\n traceEvents.push(createTraceEvent(`Frame ${frameNumber}`, frameStartTime, microseconds));\r\n if (tr.children)\r\n addChildren(frameStartTime, tr.children);\r\n frameStartTime += microseconds;\r\n ++frameNumber;\r\n }\r\n\r\n return { traceEvents };\r\n}\r\n\r\n/** @internal */\r\ninterface GpuProfilerResults {\r\n label: string;\r\n sum: number;\r\n paddingLeft: string;\r\n values: number[];\r\n}\r\n\r\n/** @alpha */\r\nexport class GpuProfiler {\r\n private readonly _div: HTMLDivElement;\r\n private readonly _resultsDiv: HTMLDivElement;\r\n private readonly _results: GpuProfilerResults[];\r\n private readonly _debugControl: RenderSystemDebugControl;\r\n\r\n private readonly _recordButton!: HTMLButtonElement;\r\n private _recordedResults: GLTimerResult[];\r\n private _isRecording: boolean;\r\n\r\n public constructor(parent: HTMLElement) {\r\n this._debugControl = IModelApp.renderSystem.debugControl!;\r\n\r\n const checkBox = createCheckBox({\r\n parent,\r\n name: \"Profile GPU\",\r\n id: \"gpu-profiler-toggle\",\r\n handler: (cb) => this.toggleProfileCheckBox(cb.checked),\r\n });\r\n\r\n if (!this._debugControl.isGLTimerSupported) {\r\n checkBox.checkbox.disabled = true;\r\n checkBox.div.title = \"EXT_disjoint_timer_query is not available in this browser\";\r\n }\r\n\r\n this._div = document.createElement(\"div\");\r\n this._div.style.display = \"none\";\r\n\r\n this._recordButton = document.createElement(\"button\");\r\n this._recordButton.style.textAlign = \"center\";\r\n this._isRecording = false;\r\n this._recordButton.innerText = \"Record Profile\";\r\n this._recordButton.title = \"Record a profile to open with chrome://tracing\";\r\n this._recordedResults = [];\r\n this._recordButton.addEventListener(\"click\", this._clickRecord);\r\n this._div.appendChild(this._recordButton);\r\n\r\n this._results = [];\r\n this._resultsDiv = document.createElement(\"div\");\r\n this._resultsDiv.style.textAlign = \"left\";\r\n this._div.appendChild(this._resultsDiv);\r\n\r\n parent.appendChild(this._div);\r\n }\r\n\r\n public dispose(): void {\r\n this._debugControl.resultsCallback = undefined;\r\n }\r\n\r\n private toggleProfileCheckBox(isEnabled: boolean): void {\r\n if (isEnabled) {\r\n this._debugControl.resultsCallback = this._resultsCallback;\r\n this._resultsDiv.innerHTML = \"\";\r\n this._div.style.display = \"block\";\r\n } else {\r\n this._debugControl.resultsCallback = undefined;\r\n this._div.style.display = \"none\";\r\n this.stopRecording();\r\n }\r\n }\r\n\r\n private _clickRecord = () => {\r\n if (!this._isRecording) {\r\n this._isRecording = true;\r\n this._recordButton.innerText = \"Stop Recording\";\r\n return;\r\n }\r\n\r\n this.stopRecording();\r\n };\r\n\r\n private stopRecording() {\r\n this._isRecording = false;\r\n this._recordButton.innerText = \"Record Profile\";\r\n\r\n if (this._recordedResults.length !== 0) {\r\n const chromeTrace = createTraceFromTimerResults(this._recordedResults);\r\n const blob = new Blob([JSON.stringify(chromeTrace)], { type: \"application/json;charset=utf-8\" });\r\n saveAs(blob, \"gpu-profile.json\");\r\n this._recordedResults = [];\r\n }\r\n }\r\n\r\n private _resultsCallback = (result: GLTimerResult): void => {\r\n if (this._isRecording)\r\n this._recordedResults.push(result);\r\n\r\n const fragment = document.createDocumentFragment();\r\n const numSavedFrames = 120;\r\n let lastValue: string;\r\n const changedResults = new Array<boolean>(this._results.length); // default values false\r\n const printDepth = (depth: number, currentRes: GLTimerResult) => {\r\n const index = this._results.findIndex((res) => res.label === currentRes.label);\r\n if (index < 0) { // Add brand new entry\r\n const data: GpuProfilerResults = {\r\n label: currentRes.label,\r\n paddingLeft: `${depth}em`,\r\n sum: currentRes.nanoseconds,\r\n values: [currentRes.nanoseconds],\r\n };\r\n if (lastValue === undefined) {\r\n this._results.unshift(data);\r\n changedResults.unshift(true);\r\n } else if (currentRes.label === \"Read Pixels\") {\r\n this._results.push(data); // Read Pixels should go at the end of the list\r\n changedResults.push(true);\r\n } else {\r\n const prevIndex = this._results.findIndex((res) => res.label === lastValue);\r\n this._results.splice(prevIndex + 1, 0, data);\r\n changedResults.splice(prevIndex + 1, 0, true);\r\n }\r\n } else { // Edit old entry\r\n let oldVal = 0.0;\r\n const savedResults = this._results[index];\r\n if (savedResults.values.length >= numSavedFrames) { // keep up to numSavedFrames values to average between\r\n oldVal = savedResults.values.shift()!;\r\n }\r\n const newVal = currentRes.nanoseconds < 100 ? 0.0 : currentRes.nanoseconds; // high-pass filter, empty queries have some noise\r\n savedResults.sum += newVal - oldVal;\r\n savedResults.values.push(newVal);\r\n changedResults[index] = true;\r\n }\r\n lastValue = currentRes.label;\r\n\r\n if (!currentRes.children)\r\n return;\r\n\r\n for (const childRes of currentRes.children)\r\n printDepth(depth + 1, childRes);\r\n };\r\n printDepth(0, result);\r\n\r\n this._results.forEach((value, index) => {\r\n if (!changedResults[index]) { // if no data received on this item, add a value of 0.0 to the avg.\r\n const oldVal = value.values.length >= numSavedFrames ? value.values.shift()! : 0.0;\r\n value.sum -= oldVal;\r\n value.values.push(0.0);\r\n }\r\n const div = document.createElement(\"div\");\r\n div.style.display = \"flex\";\r\n div.style.width = \"75%\";\r\n const textLabel = document.createElement(\"text\");\r\n textLabel.innerText = `${value.label}`;\r\n textLabel.style.paddingLeft = value.paddingLeft;\r\n div.appendChild(textLabel);\r\n const divLine = document.createElement(\"div\");\r\n divLine.style.flexGrow = \"1\";\r\n divLine.style.borderBottom = \"dotted 1px\";\r\n div.appendChild(divLine);\r\n const textValue = document.createElement(\"text\");\r\n textValue.innerText = `${(value.sum / value.values.length / 1.E6).toFixed(3)} ms\\n`;\r\n div.appendChild(textValue);\r\n fragment.appendChild(div);\r\n });\r\n\r\n this._resultsDiv.innerHTML = \"\";\r\n this._resultsDiv.appendChild(fragment);\r\n };\r\n}\r\n"]}
1
+ {"version":3,"file":"GpuProfiler.js","sourceRoot":"","sources":["../../../src/widgets/GpuProfiler.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 { saveAs } from \"file-saver\";\nimport { GLTimerResult, IModelApp, RenderSystemDebugControl } from \"@itwin/core-frontend\";\nimport { createCheckBox } from \"../ui/CheckBox\";\n\n/** Trace Event Format, viewable with chrome://tracing\n * https://docs.google.com/document/d/1CvAClvFfyA5R-PhYUmn5OOQtYMH4h6I0nSsKchNAySU/edit\n */\ninterface ChromeTrace {\n traceEvents: ChromeTraceEvent[];\n}\n\ninterface ChromeTraceEvent {\n /** Required by chrome://tracing */\n pid: 1;\n /** Timestamp in microseconds */\n ts: number;\n /** Duration in microseconds */\n dur: number;\n /** Denotes \"complete\" event */\n ph: \"X\";\n /** Label for chrome://tracing view */\n name: string;\n /** dummy value, args must be defined for entries to be clickable in chrome://tracing */\n args: ChromeTraceEventArgs;\n}\n\ninterface ChromeTraceEventArgs { 0: 0 }\nconst dummyArgs: ChromeTraceEventArgs = { 0: 0 }; // Reuse instead of allocating for each entry\n\n/**\n * @param name Label for the trace event\n * @param start Timestamp in microseconds of when trace event started\n * @param duration Duration in microseconds of trace event\n */\nfunction createTraceEvent(name: string, start: number, duration: number): ChromeTraceEvent {\n return {\n pid: 1,\n ts: start,\n dur: duration,\n ph: \"X\",\n name,\n args: dummyArgs,\n };\n}\n\nfunction createTraceFromTimerResults(timerResults: GLTimerResult[]): ChromeTrace {\n const traceEvents: ChromeTraceEvent[] = [];\n\n const addChildren = (startTime: number, children: GLTimerResult[]) => {\n for (const child of children) {\n if (child.nanoseconds < 100)\n continue;\n const microseconds = child.nanoseconds / 1E3;\n traceEvents.push(createTraceEvent(child.label, startTime, microseconds));\n if (child.children)\n addChildren(startTime, child.children);\n startTime += microseconds;\n }\n };\n\n let frameStartTime = 0;\n let frameNumber = 0;\n for (const tr of timerResults) {\n const microseconds = tr.nanoseconds / 1E3;\n traceEvents.push(createTraceEvent(`Frame ${frameNumber}`, frameStartTime, microseconds));\n if (tr.children)\n addChildren(frameStartTime, tr.children);\n frameStartTime += microseconds;\n ++frameNumber;\n }\n\n return { traceEvents };\n}\n\n/** @internal */\ninterface GpuProfilerResults {\n label: string;\n sum: number;\n paddingLeft: string;\n values: number[];\n}\n\n/** @alpha */\nexport class GpuProfiler {\n private readonly _div: HTMLDivElement;\n private readonly _resultsDiv: HTMLDivElement;\n private readonly _results: GpuProfilerResults[];\n private readonly _debugControl: RenderSystemDebugControl;\n\n private readonly _recordButton!: HTMLButtonElement;\n private _recordedResults: GLTimerResult[];\n private _isRecording: boolean;\n\n public constructor(parent: HTMLElement) {\n this._debugControl = IModelApp.renderSystem.debugControl!;\n\n const checkBox = createCheckBox({\n parent,\n name: \"Profile GPU\",\n id: \"gpu-profiler-toggle\",\n handler: (cb) => this.toggleProfileCheckBox(cb.checked),\n });\n\n if (!this._debugControl.isGLTimerSupported) {\n checkBox.checkbox.disabled = true;\n checkBox.div.title = \"EXT_disjoint_timer_query is not available in this browser\";\n }\n\n this._div = document.createElement(\"div\");\n this._div.style.display = \"none\";\n\n this._recordButton = document.createElement(\"button\");\n this._recordButton.style.textAlign = \"center\";\n this._isRecording = false;\n this._recordButton.innerText = \"Record Profile\";\n this._recordButton.title = \"Record a profile to open with chrome://tracing\";\n this._recordedResults = [];\n this._recordButton.addEventListener(\"click\", this._clickRecord);\n this._div.appendChild(this._recordButton);\n\n this._results = [];\n this._resultsDiv = document.createElement(\"div\");\n this._resultsDiv.style.textAlign = \"left\";\n this._div.appendChild(this._resultsDiv);\n\n parent.appendChild(this._div);\n }\n\n public dispose(): void {\n this._debugControl.resultsCallback = undefined;\n }\n\n private toggleProfileCheckBox(isEnabled: boolean): void {\n if (isEnabled) {\n this._debugControl.resultsCallback = this._resultsCallback;\n this._resultsDiv.innerHTML = \"\";\n this._div.style.display = \"block\";\n } else {\n this._debugControl.resultsCallback = undefined;\n this._div.style.display = \"none\";\n this.stopRecording();\n }\n }\n\n private _clickRecord = () => {\n if (!this._isRecording) {\n this._isRecording = true;\n this._recordButton.innerText = \"Stop Recording\";\n return;\n }\n\n this.stopRecording();\n };\n\n private stopRecording() {\n this._isRecording = false;\n this._recordButton.innerText = \"Record Profile\";\n\n if (this._recordedResults.length !== 0) {\n const chromeTrace = createTraceFromTimerResults(this._recordedResults);\n const blob = new Blob([JSON.stringify(chromeTrace)], { type: \"application/json;charset=utf-8\" });\n saveAs(blob, \"gpu-profile.json\");\n this._recordedResults = [];\n }\n }\n\n private _resultsCallback = (result: GLTimerResult): void => {\n if (this._isRecording)\n this._recordedResults.push(result);\n\n const fragment = document.createDocumentFragment();\n const numSavedFrames = 120;\n let lastValue: string;\n const changedResults = new Array<boolean>(this._results.length); // default values false\n const printDepth = (depth: number, currentRes: GLTimerResult) => {\n const index = this._results.findIndex((res) => res.label === currentRes.label);\n if (index < 0) { // Add brand new entry\n const data: GpuProfilerResults = {\n label: currentRes.label,\n paddingLeft: `${depth}em`,\n sum: currentRes.nanoseconds,\n values: [currentRes.nanoseconds],\n };\n if (lastValue === undefined) {\n this._results.unshift(data);\n changedResults.unshift(true);\n } else if (currentRes.label === \"Read Pixels\") {\n this._results.push(data); // Read Pixels should go at the end of the list\n changedResults.push(true);\n } else {\n const prevIndex = this._results.findIndex((res) => res.label === lastValue);\n this._results.splice(prevIndex + 1, 0, data);\n changedResults.splice(prevIndex + 1, 0, true);\n }\n } else { // Edit old entry\n let oldVal = 0.0;\n const savedResults = this._results[index];\n if (savedResults.values.length >= numSavedFrames) { // keep up to numSavedFrames values to average between\n oldVal = savedResults.values.shift()!;\n }\n const newVal = currentRes.nanoseconds < 100 ? 0.0 : currentRes.nanoseconds; // high-pass filter, empty queries have some noise\n savedResults.sum += newVal - oldVal;\n savedResults.values.push(newVal);\n changedResults[index] = true;\n }\n lastValue = currentRes.label;\n\n if (!currentRes.children)\n return;\n\n for (const childRes of currentRes.children)\n printDepth(depth + 1, childRes);\n };\n printDepth(0, result);\n\n this._results.forEach((value, index) => {\n if (!changedResults[index]) { // if no data received on this item, add a value of 0.0 to the avg.\n const oldVal = value.values.length >= numSavedFrames ? value.values.shift()! : 0.0;\n value.sum -= oldVal;\n value.values.push(0.0);\n }\n const div = document.createElement(\"div\");\n div.style.display = \"flex\";\n div.style.width = \"75%\";\n const textLabel = document.createElement(\"text\");\n textLabel.innerText = `${value.label}`;\n textLabel.style.paddingLeft = value.paddingLeft;\n div.appendChild(textLabel);\n const divLine = document.createElement(\"div\");\n divLine.style.flexGrow = \"1\";\n divLine.style.borderBottom = \"dotted 1px\";\n div.appendChild(divLine);\n const textValue = document.createElement(\"text\");\n textValue.innerText = `${(value.sum / value.values.length / 1.E6).toFixed(3)} ms\\n`;\n div.appendChild(textValue);\n fragment.appendChild(div);\n });\n\n this._resultsDiv.innerHTML = \"\";\n this._resultsDiv.appendChild(fragment);\n };\n}\n"]}
@@ -1,62 +1,62 @@
1
- import { DataList } from "../ui/DataList";
2
- import { TextBox } from "../ui/TextBox";
3
- /** Controls whether localized and/or non-localized key-in strings appear in a KeyinField's auto-completion list.
4
- * @beta
5
- */
6
- export declare enum KeyinFieldLocalization {
7
- /** Include only non-localized key-in strings. */
8
- NonLocalized = 0,
9
- /** Include only localized key-in strings. */
10
- Localized = 1,
11
- /** Include localized and non-localized strings for each key-in. */
12
- Both = 2
13
- }
14
- /** Properties controlling how a KeyinField is created.
15
- * @beta
16
- */
17
- export interface KeyinFieldProps {
18
- /** If supplied, the keyin field's elements will be added as children of this parent element. */
19
- parent?: HTMLElement;
20
- /** Required, unique ID prefix used to produce unique IDs for child elements. */
21
- baseId: string;
22
- /** Default: false. */
23
- wantButton?: boolean;
24
- /** Default: false. */
25
- wantLabel?: boolean;
26
- /** The maximum number of submitted key-ins to store in the history.
27
- * If greater than zero, pressing up/down while the KeyinField has focus will move backwards/forwards through the history.
28
- * Default: zero;
29
- */
30
- historyLength?: number;
31
- /** Controls whether localized and/or non-localized keyin strings appear in the autocompletion list.
32
- * Note: the KeyinField will still accept either localized or non-localized strings; this option only controls what is displayed in the auto-completion list.
33
- * Default: non-localized
34
- */
35
- localization?: KeyinFieldLocalization;
36
- }
37
- /** A textbox allowing input of key-ins (localized tool names) combined with a drop-down that lists all registered key-ins, filtered by substring match on the current input.
38
- * Press `enter` or click the Enter button to run the key-in.
39
- * @beta
40
- */
41
- export declare class KeyinField {
42
- /** @alpha */
43
- readonly autoCompleteList: DataList;
44
- readonly textBox: TextBox;
45
- readonly keyins: string[];
46
- private _historyIndex?;
47
- private _historyLength;
48
- private readonly _history;
49
- private readonly _localization;
50
- constructor(props: KeyinFieldProps);
51
- focus(): void;
52
- loseFocus(): void;
53
- selectAll(): void;
54
- private handleKeyPress;
55
- private handleKeyDown;
56
- private resetHistoryIndex;
57
- private pushHistory;
58
- private submitKeyin;
59
- private respondToKeyinFocus;
60
- private findKeyins;
61
- }
1
+ import { DataList } from "../ui/DataList";
2
+ import { TextBox } from "../ui/TextBox";
3
+ /** Controls whether localized and/or non-localized key-in strings appear in a KeyinField's auto-completion list.
4
+ * @beta
5
+ */
6
+ export declare enum KeyinFieldLocalization {
7
+ /** Include only non-localized key-in strings. */
8
+ NonLocalized = 0,
9
+ /** Include only localized key-in strings. */
10
+ Localized = 1,
11
+ /** Include localized and non-localized strings for each key-in. */
12
+ Both = 2
13
+ }
14
+ /** Properties controlling how a KeyinField is created.
15
+ * @beta
16
+ */
17
+ export interface KeyinFieldProps {
18
+ /** If supplied, the keyin field's elements will be added as children of this parent element. */
19
+ parent?: HTMLElement;
20
+ /** Required, unique ID prefix used to produce unique IDs for child elements. */
21
+ baseId: string;
22
+ /** Default: false. */
23
+ wantButton?: boolean;
24
+ /** Default: false. */
25
+ wantLabel?: boolean;
26
+ /** The maximum number of submitted key-ins to store in the history.
27
+ * If greater than zero, pressing up/down while the KeyinField has focus will move backwards/forwards through the history.
28
+ * Default: zero;
29
+ */
30
+ historyLength?: number;
31
+ /** Controls whether localized and/or non-localized keyin strings appear in the autocompletion list.
32
+ * Note: the KeyinField will still accept either localized or non-localized strings; this option only controls what is displayed in the auto-completion list.
33
+ * Default: non-localized
34
+ */
35
+ localization?: KeyinFieldLocalization;
36
+ }
37
+ /** A textbox allowing input of key-ins (localized tool names) combined with a drop-down that lists all registered key-ins, filtered by substring match on the current input.
38
+ * Press `enter` or click the Enter button to run the key-in.
39
+ * @beta
40
+ */
41
+ export declare class KeyinField {
42
+ /** @alpha */
43
+ readonly autoCompleteList: DataList;
44
+ readonly textBox: TextBox;
45
+ readonly keyins: string[];
46
+ private _historyIndex?;
47
+ private _historyLength;
48
+ private readonly _history;
49
+ private readonly _localization;
50
+ constructor(props: KeyinFieldProps);
51
+ focus(): void;
52
+ loseFocus(): void;
53
+ selectAll(): void;
54
+ private handleKeyPress;
55
+ private handleKeyDown;
56
+ private resetHistoryIndex;
57
+ private pushHistory;
58
+ private submitKeyin;
59
+ private respondToKeyinFocus;
60
+ private findKeyins;
61
+ }
62
62
  //# sourceMappingURL=KeyinField.d.ts.map