react-native-windows 0.84.0 → 0.84.2

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 (923) hide show
  1. package/Directory.Build.props +2 -17
  2. package/Folly/ThreadNameStub.cpp +4 -6
  3. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.cpp +1 -1
  4. package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj +1 -7
  5. package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj.filters +0 -3
  6. package/PropertySheets/CIBuildOptimizations.props +2 -2
  7. package/PropertySheets/Generated/PackageVersion.g.props +3 -3
  8. package/PropertySheets/JSEngine.props +1 -1
  9. package/PropertySheets/NuGet.LockFile.props +10 -1
  10. package/PropertySheets/React.Cpp.props +3 -3
  11. package/PropertySheets/WinUI.props +2 -1
  12. package/ReactCommon/ReactCommon.vcxproj +0 -5
  13. package/Scripts/EnableInternalWinAppSDKFeed.ps1 +12 -5
  14. package/Scripts/NuGetRestoreForceEvaluateAllSolutions.ps1 +61 -6
  15. package/Scripts/Tfs/Layout-Desktop-Headers.ps1 +4 -37
  16. package/Scripts/UpdateNightlyDependencies.ps1 +47 -0
  17. package/Scripts/creaternwapp.cmd +5 -8
  18. package/Scripts/creaternwlib.cmd +10 -23
  19. package/Shared/Shared.vcxitems +2 -0
  20. package/{Folly → external}/.clang-format +0 -1
  21. package/external/External.vcxitems +10 -0
  22. package/external/fast-float/.syncignore +10 -0
  23. package/external/fast-float/LICENSE-APACHE +190 -0
  24. package/external/fast-float/LICENSE-BOOST +23 -0
  25. package/external/fast-float/LICENSE-MIT +27 -0
  26. package/external/fast-float/README.md +545 -0
  27. package/external/fast-float/cgmanifest.json +15 -0
  28. package/external/fast-float/fast-float.vcxitems +14 -0
  29. package/external/fast-float/include/fast_float/ascii_number.h +588 -0
  30. package/external/fast-float/include/fast_float/bigint.h +638 -0
  31. package/external/fast-float/include/fast_float/constexpr_feature_detect.h +46 -0
  32. package/external/fast-float/include/fast_float/decimal_to_binary.h +212 -0
  33. package/external/fast-float/include/fast_float/digit_comparison.h +457 -0
  34. package/external/fast-float/include/fast_float/fast_float.h +59 -0
  35. package/external/fast-float/include/fast_float/fast_table.h +708 -0
  36. package/external/fast-float/include/fast_float/float_common.h +1240 -0
  37. package/external/fast-float/include/fast_float/parse_number.h +399 -0
  38. package/external/fast-float/sync-config.json +8 -0
  39. package/external/fmt/.syncignore +10 -0
  40. package/external/fmt/CONTRIBUTING.md +20 -0
  41. package/external/fmt/LICENSE +27 -0
  42. package/external/fmt/README.md +484 -0
  43. package/external/fmt/doc/ChangeLog-old.md +3290 -0
  44. package/external/fmt/doc/api.md +650 -0
  45. package/external/fmt/doc/fmt.css +61 -0
  46. package/external/fmt/doc/fmt.js +4 -0
  47. package/external/fmt/doc/get-started.md +222 -0
  48. package/external/fmt/doc/index.md +151 -0
  49. package/external/fmt/doc/perf.svg +1 -0
  50. package/external/fmt/doc/python-license.txt +290 -0
  51. package/external/fmt/doc/syntax.md +887 -0
  52. package/external/fmt/fmt.vcxitems +28 -0
  53. package/external/fmt/include/fmt/args.h +228 -0
  54. package/external/fmt/include/fmt/base.h +3077 -0
  55. package/external/fmt/include/fmt/chrono.h +2432 -0
  56. package/external/fmt/include/fmt/color.h +612 -0
  57. package/external/fmt/include/fmt/compile.h +529 -0
  58. package/external/fmt/include/fmt/core.h +5 -0
  59. package/external/fmt/include/fmt/format-inl.h +1928 -0
  60. package/external/fmt/include/fmt/format.h +4427 -0
  61. package/external/fmt/include/fmt/os.h +439 -0
  62. package/external/fmt/include/fmt/ostream.h +211 -0
  63. package/external/fmt/include/fmt/printf.h +656 -0
  64. package/external/fmt/include/fmt/ranges.h +882 -0
  65. package/external/fmt/include/fmt/std.h +699 -0
  66. package/external/fmt/include/fmt/xchar.h +322 -0
  67. package/external/fmt/src/fmt.cc +135 -0
  68. package/external/fmt/src/format.cc +43 -0
  69. package/external/fmt/src/os.cc +403 -0
  70. package/external/fmt/sync-config.json +8 -0
  71. package/external/folly/.syncignore +60 -0
  72. package/external/folly/LICENSE +200 -0
  73. package/external/folly/README.md +263 -0
  74. package/{fmt → external/folly/folly}/.clang-format +0 -1
  75. package/external/folly/folly/AtomicHashArray-inl.h +546 -0
  76. package/external/folly/folly/AtomicHashArray.h +431 -0
  77. package/external/folly/folly/AtomicHashMap-inl.h +653 -0
  78. package/external/folly/folly/AtomicHashMap.h +484 -0
  79. package/external/folly/folly/AtomicIntrusiveLinkedList.h +206 -0
  80. package/external/folly/folly/AtomicLinkedList.h +110 -0
  81. package/external/folly/folly/AtomicUnorderedMap.h +522 -0
  82. package/external/folly/folly/BUCK +1631 -0
  83. package/external/folly/folly/BUILD_MODE.bzl +72 -0
  84. package/external/folly/folly/Benchmark.cpp +986 -0
  85. package/external/folly/folly/Benchmark.h +680 -0
  86. package/external/folly/folly/BenchmarkUtil.h +47 -0
  87. package/external/folly/folly/Bits.h +17 -0
  88. package/external/folly/folly/CMakeLists.txt +110 -0
  89. package/external/folly/folly/CPortability.h +338 -0
  90. package/external/folly/folly/CancellationToken-inl.h +449 -0
  91. package/external/folly/folly/CancellationToken.cpp +250 -0
  92. package/external/folly/folly/CancellationToken.h +365 -0
  93. package/external/folly/folly/Chrono.h +132 -0
  94. package/external/folly/folly/ClockGettimeWrappers.cpp +93 -0
  95. package/external/folly/folly/ClockGettimeWrappers.h +29 -0
  96. package/external/folly/folly/ConcurrentBitSet.h +157 -0
  97. package/external/folly/folly/ConcurrentLazy.h +74 -0
  98. package/external/folly/folly/ConcurrentSkipList-inl.h +341 -0
  99. package/external/folly/folly/ConcurrentSkipList.h +824 -0
  100. package/external/folly/folly/ConstructorCallbackList.h +158 -0
  101. package/external/folly/folly/Conv.h +2026 -0
  102. package/external/folly/folly/CppAttributes.h +170 -0
  103. package/external/folly/folly/CpuId.h +297 -0
  104. package/external/folly/folly/DefaultKeepAliveExecutor.h +172 -0
  105. package/external/folly/folly/Demangle.cpp +255 -0
  106. package/external/folly/folly/Demangle.h +73 -0
  107. package/external/folly/folly/DiscriminatedPtr.h +236 -0
  108. package/external/folly/folly/DynamicConverter.h +17 -0
  109. package/external/folly/folly/Exception.h +150 -0
  110. package/external/folly/folly/ExceptionString.cpp +51 -0
  111. package/external/folly/folly/ExceptionString.h +33 -0
  112. package/external/folly/folly/ExceptionWrapper-inl.h +264 -0
  113. package/external/folly/folly/ExceptionWrapper.cpp +37 -0
  114. package/external/folly/folly/ExceptionWrapper.h +377 -0
  115. package/external/folly/folly/Executor.cpp +111 -0
  116. package/external/folly/folly/Executor.h +351 -0
  117. package/external/folly/folly/Expected.h +1725 -0
  118. package/external/folly/folly/FBString.h +2888 -0
  119. package/external/folly/folly/FBVector.h +17 -0
  120. package/external/folly/folly/File.cpp +180 -0
  121. package/external/folly/folly/File.h +177 -0
  122. package/external/folly/folly/FileUtil.cpp +378 -0
  123. package/external/folly/folly/FileUtil.h +332 -0
  124. package/external/folly/folly/Fingerprint.cpp +135 -0
  125. package/external/folly/folly/Fingerprint.h +289 -0
  126. package/external/folly/folly/FixedString.h +2965 -0
  127. package/external/folly/folly/FollyMemcpy.cpp +30 -0
  128. package/external/folly/folly/FollyMemcpy.h +23 -0
  129. package/external/folly/folly/FollyMemset.cpp +29 -0
  130. package/external/folly/folly/FollyMemset.h +25 -0
  131. package/external/folly/folly/Format-inl.h +1152 -0
  132. package/external/folly/folly/Format.cpp +429 -0
  133. package/external/folly/folly/Format.h +463 -0
  134. package/external/folly/folly/FormatArg.h +285 -0
  135. package/external/folly/folly/FormatTraits.h +65 -0
  136. package/external/folly/folly/Function.h +1159 -0
  137. package/external/folly/folly/GLog.h +85 -0
  138. package/external/folly/folly/GroupVarint.cpp +153 -0
  139. package/external/folly/folly/GroupVarint.h +630 -0
  140. package/external/folly/folly/Hash.h +20 -0
  141. package/external/folly/folly/IPAddress.cpp +490 -0
  142. package/external/folly/folly/IPAddress.h +667 -0
  143. package/external/folly/folly/IPAddressException.h +82 -0
  144. package/external/folly/folly/IPAddressV4.cpp +305 -0
  145. package/external/folly/folly/IPAddressV4.h +495 -0
  146. package/external/folly/folly/IPAddressV6.cpp +541 -0
  147. package/external/folly/folly/IPAddressV6.h +627 -0
  148. package/external/folly/folly/Indestructible.h +164 -0
  149. package/external/folly/folly/IndexedMemPool.h +550 -0
  150. package/external/folly/folly/IntrusiveList.h +17 -0
  151. package/external/folly/folly/Lazy.h +142 -0
  152. package/external/folly/folly/Likely.h +76 -0
  153. package/external/folly/folly/MPMCPipeline.h +280 -0
  154. package/external/folly/folly/MPMCQueue.h +1556 -0
  155. package/external/folly/folly/MacAddress.cpp +188 -0
  156. package/external/folly/folly/MacAddress.h +260 -0
  157. package/external/folly/folly/MapUtil.h +17 -0
  158. package/external/folly/folly/Math.h +258 -0
  159. package/external/folly/folly/MaybeManagedPtr.h +120 -0
  160. package/external/folly/folly/Memory.h +900 -0
  161. package/external/folly/folly/MicroLock.cpp +76 -0
  162. package/external/folly/folly/MicroLock.h +354 -0
  163. package/external/folly/folly/MicroSpinLock.h +17 -0
  164. package/external/folly/folly/MoveWrapper.h +76 -0
  165. package/external/folly/folly/ObserverContainer.h +1026 -0
  166. package/external/folly/folly/Optional.h +743 -0
  167. package/external/folly/folly/Overload.h +325 -0
  168. package/external/folly/folly/PackedSyncPtr.h +147 -0
  169. package/external/folly/folly/Padded.h +464 -0
  170. package/external/folly/folly/Poly-inl.h +230 -0
  171. package/external/folly/folly/Poly.h +1095 -0
  172. package/external/folly/folly/PolyException.h +43 -0
  173. package/external/folly/folly/Portability.h +644 -0
  174. package/external/folly/folly/Preprocessor.h +236 -0
  175. package/external/folly/folly/ProducerConsumerQueue.h +182 -0
  176. package/external/folly/folly/RWSpinLock.h +17 -0
  177. package/external/folly/folly/Random-inl.h +86 -0
  178. package/external/folly/folly/Random.cpp +184 -0
  179. package/external/folly/folly/Random.h +434 -0
  180. package/external/folly/folly/Range.h +1772 -0
  181. package/external/folly/folly/Replaceable.h +636 -0
  182. package/external/folly/folly/ScopeGuard.cpp +29 -0
  183. package/external/folly/folly/ScopeGuard.h +420 -0
  184. package/external/folly/folly/SharedMutex.cpp +81 -0
  185. package/external/folly/folly/SharedMutex.h +1751 -0
  186. package/external/folly/folly/Singleton-inl.h +332 -0
  187. package/external/folly/folly/Singleton.cpp +512 -0
  188. package/external/folly/folly/Singleton.h +891 -0
  189. package/external/folly/folly/SingletonThreadLocal.cpp +53 -0
  190. package/external/folly/folly/SingletonThreadLocal.h +263 -0
  191. package/external/folly/folly/SocketAddress.cpp +786 -0
  192. package/external/folly/folly/SocketAddress.h +768 -0
  193. package/external/folly/folly/SpinLock.h +55 -0
  194. package/external/folly/folly/String-inl.h +668 -0
  195. package/external/folly/folly/String.cpp +777 -0
  196. package/external/folly/folly/String.h +767 -0
  197. package/external/folly/folly/Subprocess.cpp +1142 -0
  198. package/external/folly/folly/Subprocess.h +1055 -0
  199. package/external/folly/folly/Synchronized.h +1833 -0
  200. package/external/folly/folly/SynchronizedPtr.h +106 -0
  201. package/external/folly/folly/ThreadCachedInt.h +175 -0
  202. package/external/folly/folly/ThreadLocal.h +478 -0
  203. package/external/folly/folly/TimeoutQueue.cpp +78 -0
  204. package/external/folly/folly/TimeoutQueue.h +123 -0
  205. package/external/folly/folly/TokenBucket.h +673 -0
  206. package/external/folly/folly/Traits.h +1442 -0
  207. package/external/folly/folly/Try-inl.h +372 -0
  208. package/external/folly/folly/Try.cpp +23 -0
  209. package/external/folly/folly/Try.h +728 -0
  210. package/external/folly/folly/UTF8String.h +56 -0
  211. package/external/folly/folly/Unicode.cpp +201 -0
  212. package/external/folly/folly/Unicode.h +94 -0
  213. package/external/folly/folly/Unit.h +65 -0
  214. package/external/folly/folly/Uri-inl.h +101 -0
  215. package/external/folly/folly/Uri.cpp +190 -0
  216. package/external/folly/folly/Uri.h +142 -0
  217. package/external/folly/folly/Utility.h +932 -0
  218. package/external/folly/folly/VERSION +1 -0
  219. package/external/folly/folly/Varint.h +230 -0
  220. package/external/folly/folly/VirtualExecutor.h +17 -0
  221. package/external/folly/folly/algorithm/simd/BUCK +47 -0
  222. package/external/folly/folly/algorithm/simd/Contains.cpp +42 -0
  223. package/external/folly/folly/algorithm/simd/Contains.h +116 -0
  224. package/external/folly/folly/algorithm/simd/FindFixed.h +301 -0
  225. package/external/folly/folly/algorithm/simd/Ignore.h +52 -0
  226. package/external/folly/folly/algorithm/simd/Movemask.h +207 -0
  227. package/external/folly/folly/algorithm/simd/detail/BUCK +70 -0
  228. package/external/folly/folly/algorithm/simd/detail/ContainsImpl.h +91 -0
  229. package/external/folly/folly/algorithm/simd/detail/SimdAnyOf.h +83 -0
  230. package/external/folly/folly/algorithm/simd/detail/SimdForEach.h +209 -0
  231. package/external/folly/folly/algorithm/simd/detail/SimdPlatform.h +445 -0
  232. package/external/folly/folly/algorithm/simd/detail/Traits.h +125 -0
  233. package/external/folly/folly/algorithm/simd/detail/UnrollUtils.h +126 -0
  234. package/external/folly/folly/base64.h +264 -0
  235. package/external/folly/folly/chrono/BUCK +29 -0
  236. package/external/folly/folly/chrono/Clock.h +65 -0
  237. package/external/folly/folly/chrono/Conv.h +712 -0
  238. package/external/folly/folly/chrono/test/BUCK +26 -0
  239. package/external/folly/folly/chrono/test/ClockTest.cpp +68 -0
  240. package/external/folly/folly/chrono/test/ConvTest.cpp +652 -0
  241. package/external/folly/folly/concurrency/AtomicSharedPtr.h +387 -0
  242. package/external/folly/folly/concurrency/BUCK +170 -0
  243. package/external/folly/folly/concurrency/CacheLocality.h +460 -0
  244. package/external/folly/folly/concurrency/ConcurrentHashMap.h +822 -0
  245. package/external/folly/folly/concurrency/CoreCachedSharedPtr.h +232 -0
  246. package/external/folly/folly/concurrency/DeadlockDetector.cpp +27 -0
  247. package/external/folly/folly/concurrency/DeadlockDetector.h +44 -0
  248. package/external/folly/folly/concurrency/DynamicBoundedQueue.h +751 -0
  249. package/external/folly/folly/concurrency/PriorityUnboundedQueueSet.h +207 -0
  250. package/external/folly/folly/concurrency/ProcessLocalUniqueId.cpp +46 -0
  251. package/external/folly/folly/concurrency/ProcessLocalUniqueId.h +38 -0
  252. package/external/folly/folly/concurrency/SingletonRelaxedCounter.h +325 -0
  253. package/external/folly/folly/concurrency/ThreadCachedSynchronized.h +227 -0
  254. package/external/folly/folly/concurrency/UnboundedQueue.h +891 -0
  255. package/external/folly/folly/concurrency/container/BUCK +77 -0
  256. package/external/folly/folly/concurrency/container/FlatCombiningPriorityQueue.h +426 -0
  257. package/external/folly/folly/concurrency/container/LockFreeRingBuffer.h +306 -0
  258. package/external/folly/folly/concurrency/container/RelaxedConcurrentPriorityQueue.h +1212 -0
  259. package/external/folly/folly/concurrency/container/SingleWriterFixedHashMap.h +322 -0
  260. package/external/folly/folly/concurrency/container/atomic_grow_array.h +564 -0
  261. package/external/folly/folly/concurrency/container/test/BUCK +75 -0
  262. package/external/folly/folly/concurrency/container/test/FlatCombiningPriorityQueueTest.cpp +570 -0
  263. package/external/folly/folly/concurrency/container/test/LockFreeRingBufferTest.cpp +276 -0
  264. package/external/folly/folly/concurrency/container/test/RelaxedConcurrentPriorityQueueTest.cpp +1570 -0
  265. package/external/folly/folly/concurrency/container/test/SingleWriterFixedHashMapTest.cpp +401 -0
  266. package/external/folly/folly/concurrency/container/test/atomic_grow_array_test.cpp +187 -0
  267. package/external/folly/folly/concurrency/detail/AtomicSharedPtr-detail.h +212 -0
  268. package/external/folly/folly/concurrency/detail/ConcurrentHashMap-detail.h +1911 -0
  269. package/external/folly/folly/concurrency/memory/AtomicReadMostlyMainPtr.cpp +43 -0
  270. package/external/folly/folly/concurrency/memory/AtomicReadMostlyMainPtr.h +190 -0
  271. package/external/folly/folly/concurrency/memory/BUCK +53 -0
  272. package/external/folly/folly/concurrency/memory/PrimaryPtr.h +338 -0
  273. package/external/folly/folly/concurrency/memory/ReadMostlySharedPtr.h +511 -0
  274. package/external/folly/folly/concurrency/memory/TLRefCount.h +228 -0
  275. package/external/folly/folly/concurrency/memory/test/AtomicReadMostlyMainPtrBenchmark.cpp +56 -0
  276. package/external/folly/folly/concurrency/memory/test/AtomicReadMostlyMainPtrTest.cpp +454 -0
  277. package/external/folly/folly/concurrency/memory/test/BUCK +95 -0
  278. package/external/folly/folly/concurrency/memory/test/PrimaryPtrTest.cpp +303 -0
  279. package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrBenchmark.cpp +138 -0
  280. package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrStressTest.cpp +75 -0
  281. package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrTest.cpp +378 -0
  282. package/external/folly/folly/concurrency/memory/test/RefCountBenchmark.cpp +90 -0
  283. package/external/folly/folly/concurrency/memory/test/RefCountTest.cpp +168 -0
  284. package/external/folly/folly/concurrency/test/AtomicSharedPtrCounted.h +156 -0
  285. package/external/folly/folly/concurrency/test/AtomicSharedPtrPerformance.cpp +255 -0
  286. package/external/folly/folly/concurrency/test/AtomicSharedPtrTest.cpp +257 -0
  287. package/external/folly/folly/concurrency/test/BUCK +229 -0
  288. package/external/folly/folly/concurrency/test/CacheLocalityBenchmark.cpp +392 -0
  289. package/external/folly/folly/concurrency/test/CacheLocalityTest.cpp +1229 -0
  290. package/external/folly/folly/concurrency/test/ConcurrentHashMapBench.cpp +260 -0
  291. package/external/folly/folly/concurrency/test/ConcurrentHashMapTest.cpp +1242 -0
  292. package/external/folly/folly/concurrency/test/CoreCachedSharedPtrTest.cpp +408 -0
  293. package/external/folly/folly/concurrency/test/DynamicBoundedQueueTest.cpp +984 -0
  294. package/external/folly/folly/concurrency/test/PriorityUnboundedQueueSetTest.cpp +73 -0
  295. package/external/folly/folly/concurrency/test/ProcessLocalUniqueIdTest.cpp +66 -0
  296. package/external/folly/folly/concurrency/test/SingletonRelaxedCounterBench.cpp +101 -0
  297. package/external/folly/folly/concurrency/test/SingletonRelaxedCounterTest.cpp +185 -0
  298. package/external/folly/folly/concurrency/test/ThreadCachedSynchronizedBench.cpp +76 -0
  299. package/external/folly/folly/concurrency/test/ThreadCachedSynchronizedTest.cpp +93 -0
  300. package/external/folly/folly/concurrency/test/UnboundedQueueTest.cpp +1302 -0
  301. package/external/folly/folly/container/Access.h +57 -0
  302. package/external/folly/folly/container/Array.h +87 -0
  303. package/external/folly/folly/container/BUCK +353 -0
  304. package/external/folly/folly/container/BitIterator.h +203 -0
  305. package/external/folly/folly/container/Enumerate.h +162 -0
  306. package/external/folly/folly/container/EvictingCacheMap.h +730 -0
  307. package/external/folly/folly/container/F14.md +300 -0
  308. package/external/folly/folly/container/F14Map-fwd.h +113 -0
  309. package/external/folly/folly/container/F14Map.h +2108 -0
  310. package/external/folly/folly/container/F14Set-fwd.h +95 -0
  311. package/external/folly/folly/container/F14Set.h +1603 -0
  312. package/external/folly/folly/container/FBVector.h +1711 -0
  313. package/external/folly/folly/container/Foreach-inl.h +316 -0
  314. package/external/folly/folly/container/Foreach.h +209 -0
  315. package/external/folly/folly/container/HeterogeneousAccess-fwd.h +33 -0
  316. package/external/folly/folly/container/HeterogeneousAccess.h +171 -0
  317. package/external/folly/folly/container/IntrusiveHeap.h +268 -0
  318. package/external/folly/folly/container/IntrusiveList.h +131 -0
  319. package/external/folly/folly/container/Iterator.h +843 -0
  320. package/external/folly/folly/container/MapUtil.h +376 -0
  321. package/external/folly/folly/container/Merge.h +90 -0
  322. package/external/folly/folly/container/RegexMatchCache.cpp +521 -0
  323. package/external/folly/folly/container/RegexMatchCache.h +699 -0
  324. package/external/folly/folly/container/Reserve.h +109 -0
  325. package/external/folly/folly/container/SparseByteSet.h +123 -0
  326. package/external/folly/folly/container/View.h +81 -0
  327. package/external/folly/folly/container/WeightedEvictingCacheMap.h +651 -0
  328. package/external/folly/folly/container/detail/BUCK +115 -0
  329. package/external/folly/folly/container/detail/BitIteratorDetail.h +87 -0
  330. package/external/folly/folly/container/detail/F14Defaults.h +34 -0
  331. package/external/folly/folly/container/detail/F14IntrinsicsAvailability.h +67 -0
  332. package/external/folly/folly/container/detail/F14MapFallback.h +717 -0
  333. package/external/folly/folly/container/detail/F14Mask.h +235 -0
  334. package/external/folly/folly/container/detail/F14Policy.h +1523 -0
  335. package/external/folly/folly/container/detail/F14SetFallback.h +528 -0
  336. package/external/folly/folly/container/detail/F14Table.cpp +71 -0
  337. package/external/folly/folly/container/detail/F14Table.h +2680 -0
  338. package/external/folly/folly/container/detail/Util.h +303 -0
  339. package/external/folly/folly/container/detail/tape_detail.h +135 -0
  340. package/external/folly/folly/container/detail/test/BUCK +14 -0
  341. package/external/folly/folly/container/detail/test/F14DetailTest.cpp +47 -0
  342. package/external/folly/folly/container/heap_vector_types.h +1683 -0
  343. package/external/folly/folly/container/range_traits.h +81 -0
  344. package/external/folly/folly/container/small_vector.h +1476 -0
  345. package/external/folly/folly/container/sorted_vector_types.h +1652 -0
  346. package/external/folly/folly/container/span.h +408 -0
  347. package/external/folly/folly/container/tape.h +608 -0
  348. package/external/folly/folly/container/test/.clang-tidy +12 -0
  349. package/external/folly/folly/container/test/AccessTest.cpp +138 -0
  350. package/external/folly/folly/container/test/ArrayTest.cpp +84 -0
  351. package/external/folly/folly/container/test/BUCK +568 -0
  352. package/external/folly/folly/container/test/BitIteratorBench.cpp +112 -0
  353. package/external/folly/folly/container/test/BitIteratorTest.cpp +109 -0
  354. package/external/folly/folly/container/test/EnumerateTest.cpp +294 -0
  355. package/external/folly/folly/container/test/EvictingCacheMapBench.cpp +80 -0
  356. package/external/folly/folly/container/test/EvictingCacheMapTest.cpp +842 -0
  357. package/external/folly/folly/container/test/F14AsanSupportTest.cpp +143 -0
  358. package/external/folly/folly/container/test/F14FwdTest.cpp +37 -0
  359. package/external/folly/folly/container/test/F14InterprocessTest.cpp +404 -0
  360. package/external/folly/folly/container/test/F14MapTest.cpp +2543 -0
  361. package/external/folly/folly/container/test/F14PolicyTest.cpp +49 -0
  362. package/external/folly/folly/container/test/F14SetTest.cpp +1738 -0
  363. package/external/folly/folly/container/test/F14SmallOverheads.cpp +215 -0
  364. package/external/folly/folly/container/test/F14TestUtil.h +117 -0
  365. package/external/folly/folly/container/test/FBVectorBenchmark.cpp +380 -0
  366. package/external/folly/folly/container/test/FBVectorBenchmarks.cpp.h +100 -0
  367. package/external/folly/folly/container/test/FBVectorTest.cpp +326 -0
  368. package/external/folly/folly/container/test/FBVectorTests.cpp.h +304 -0
  369. package/external/folly/folly/container/test/ForeachBenchmark.cpp +388 -0
  370. package/external/folly/folly/container/test/ForeachTest.cpp +338 -0
  371. package/external/folly/folly/container/test/HashMapsBench.cpp +458 -0
  372. package/external/folly/folly/container/test/HeterogeneousAccessTest.cpp +242 -0
  373. package/external/folly/folly/container/test/IntrusiveHeapTest.cpp +262 -0
  374. package/external/folly/folly/container/test/IteratorTest.cpp +989 -0
  375. package/external/folly/folly/container/test/MapUtilTest.cpp +365 -0
  376. package/external/folly/folly/container/test/MergeTest.cpp +66 -0
  377. package/external/folly/folly/container/test/RegexMatchCacheTest.cpp +634 -0
  378. package/external/folly/folly/container/test/ReserveTest.cpp +173 -0
  379. package/external/folly/folly/container/test/SparseByteSetBenchmark.cpp +153 -0
  380. package/external/folly/folly/container/test/SparseByteSetTest.cpp +117 -0
  381. package/external/folly/folly/container/test/TrackingTypes.h +584 -0
  382. package/external/folly/folly/container/test/UtilTest.cpp +609 -0
  383. package/external/folly/folly/container/test/WeightedEvictingCacheMapTest.cpp +800 -0
  384. package/external/folly/folly/container/test/heap_vector_types_test.cpp +1774 -0
  385. package/external/folly/folly/container/test/range_traits_test.cpp +59 -0
  386. package/external/folly/folly/container/test/small_vector_test.cpp +1571 -0
  387. package/external/folly/folly/container/test/sorted_vector_test.cpp +1589 -0
  388. package/external/folly/folly/container/test/span_test.cpp +520 -0
  389. package/external/folly/folly/container/test/tape_bench.cpp +200 -0
  390. package/external/folly/folly/container/test/tape_test.cpp +590 -0
  391. package/external/folly/folly/defs.bzl +238 -0
  392. package/external/folly/folly/detail/AsyncTrace.cpp +36 -0
  393. package/external/folly/folly/detail/AsyncTrace.h +44 -0
  394. package/external/folly/folly/detail/AtomicHashUtils.h +42 -0
  395. package/external/folly/folly/detail/AtomicUnorderedMapUtils.h +80 -0
  396. package/external/folly/folly/detail/BUCK +406 -0
  397. package/external/folly/folly/detail/DiscriminatedPtrDetail.h +172 -0
  398. package/external/folly/folly/detail/FileUtilDetail.cpp +63 -0
  399. package/external/folly/folly/detail/FileUtilDetail.h +85 -0
  400. package/external/folly/folly/detail/FileUtilVectorDetail.h +81 -0
  401. package/external/folly/folly/detail/FingerprintPolynomial.h +132 -0
  402. package/external/folly/folly/detail/Futex-inl.h +123 -0
  403. package/external/folly/folly/detail/Futex.cpp +273 -0
  404. package/external/folly/folly/detail/Futex.h +109 -0
  405. package/external/folly/folly/detail/GroupVarintDetail.h +101 -0
  406. package/external/folly/folly/detail/IPAddress.cpp +37 -0
  407. package/external/folly/folly/detail/IPAddress.h +57 -0
  408. package/external/folly/folly/detail/IPAddressSource.h +278 -0
  409. package/external/folly/folly/detail/Iterators.h +156 -0
  410. package/external/folly/folly/detail/MPMCPipelineDetail.h +122 -0
  411. package/external/folly/folly/detail/MemoryIdler.cpp +233 -0
  412. package/external/folly/folly/detail/MemoryIdler.h +216 -0
  413. package/external/folly/folly/detail/PerfScoped.cpp +112 -0
  414. package/external/folly/folly/detail/PerfScoped.h +70 -0
  415. package/external/folly/folly/detail/PolyDetail.h +921 -0
  416. package/external/folly/folly/detail/RangeCommon.cpp +55 -0
  417. package/external/folly/folly/detail/RangeCommon.h +93 -0
  418. package/external/folly/folly/detail/RangeSse42.cpp +198 -0
  419. package/external/folly/folly/detail/RangeSse42.h +30 -0
  420. package/external/folly/folly/detail/SimpleSimdStringUtils.cpp +31 -0
  421. package/external/folly/folly/detail/SimpleSimdStringUtils.h +27 -0
  422. package/external/folly/folly/detail/SimpleSimdStringUtilsImpl.h +63 -0
  423. package/external/folly/folly/detail/Singleton.h +34 -0
  424. package/external/folly/folly/detail/SlowFingerprint.h +90 -0
  425. package/external/folly/folly/detail/SocketFastOpen.cpp +175 -0
  426. package/external/folly/folly/detail/SocketFastOpen.h +89 -0
  427. package/external/folly/folly/detail/SplitStringSimd.cpp +84 -0
  428. package/external/folly/folly/detail/SplitStringSimd.h +151 -0
  429. package/external/folly/folly/detail/SplitStringSimdImpl.h +149 -0
  430. package/external/folly/folly/detail/Sse.cpp +35 -0
  431. package/external/folly/folly/detail/Sse.h +45 -0
  432. package/external/folly/folly/detail/StaticSingletonManager.cpp +119 -0
  433. package/external/folly/folly/detail/StaticSingletonManager.h +298 -0
  434. package/external/folly/folly/detail/ThreadLocalDetail.cpp +492 -0
  435. package/external/folly/folly/detail/ThreadLocalDetail.h +800 -0
  436. package/external/folly/folly/detail/TrapOnAvx512.cpp +41 -0
  437. package/external/folly/folly/detail/TrapOnAvx512.h +21 -0
  438. package/external/folly/folly/detail/TurnSequencer.h +295 -0
  439. package/external/folly/folly/detail/TypeList.h +551 -0
  440. package/external/folly/folly/detail/UniqueInstance.cpp +136 -0
  441. package/external/folly/folly/detail/UniqueInstance.h +68 -0
  442. package/external/folly/folly/detail/base64_detail/BUCK +102 -0
  443. package/external/folly/folly/detail/base64_detail/Base64Api.cpp +40 -0
  444. package/external/folly/folly/detail/base64_detail/Base64Api.h +101 -0
  445. package/external/folly/folly/detail/base64_detail/Base64Common.h +80 -0
  446. package/external/folly/folly/detail/base64_detail/Base64Constants.h +79 -0
  447. package/external/folly/folly/detail/base64_detail/Base64HiddenConstants.h +129 -0
  448. package/external/folly/folly/detail/base64_detail/Base64SWAR.cpp +161 -0
  449. package/external/folly/folly/detail/base64_detail/Base64SWAR.h +32 -0
  450. package/external/folly/folly/detail/base64_detail/Base64Scalar.h +262 -0
  451. package/external/folly/folly/detail/base64_detail/Base64Simd.h +102 -0
  452. package/external/folly/folly/detail/base64_detail/Base64_SSE4_2.cpp +42 -0
  453. package/external/folly/folly/detail/base64_detail/Base64_SSE4_2.h +33 -0
  454. package/external/folly/folly/detail/base64_detail/Base64_SSE4_2_Platform.h +167 -0
  455. package/external/folly/folly/detail/base64_detail/README.md +392 -0
  456. package/external/folly/folly/detail/base64_detail/tests/BUCK +36 -0
  457. package/external/folly/folly/detail/base64_detail/tests/Base64AgainstScalarTest.cpp +141 -0
  458. package/external/folly/folly/detail/base64_detail/tests/Base64PlatformTest.cpp +273 -0
  459. package/external/folly/folly/detail/base64_detail/tests/Base64SpecialCasesTest.cpp +555 -0
  460. package/external/folly/folly/detail/test/AsyncTraceTest.cpp +43 -0
  461. package/external/folly/folly/detail/test/BUCK +118 -0
  462. package/external/folly/folly/detail/test/FileUtilDetailTest.cpp +56 -0
  463. package/external/folly/folly/detail/test/PerfScopedTest.cpp +107 -0
  464. package/external/folly/folly/detail/test/SimpleSimdStringUtilsTest.cpp +92 -0
  465. package/external/folly/folly/detail/test/SplitStringSimdTest.cpp +242 -0
  466. package/external/folly/folly/detail/test/StaticSingletonManagerTest.cpp +121 -0
  467. package/external/folly/folly/detail/test/ThreadLocalBenchmark.cpp +116 -0
  468. package/external/folly/folly/detail/test/ThreadLocalDetailTest.cpp +194 -0
  469. package/external/folly/folly/detail/test/TrapOnAvx512TestNegative.cpp +29 -0
  470. package/external/folly/folly/detail/test/UniqueInstanceTest.cpp +60 -0
  471. package/external/folly/folly/detail/thread_local_globals.cpp +69 -0
  472. package/external/folly/folly/detail/thread_local_globals.h +36 -0
  473. package/external/folly/folly/docs/AtomicHashMap.md +134 -0
  474. package/external/folly/folly/docs/Benchmark.md +310 -0
  475. package/external/folly/folly/docs/Conv.md +291 -0
  476. package/external/folly/folly/docs/Dynamic.md +220 -0
  477. package/external/folly/folly/docs/DynamicConverter.md +71 -0
  478. package/external/folly/folly/docs/Executors.md +63 -0
  479. package/external/folly/folly/docs/FBString.md +46 -0
  480. package/external/folly/folly/docs/FBVector.md +200 -0
  481. package/external/folly/folly/docs/Fbvector--graphical_solutions.png +0 -0
  482. package/external/folly/folly/docs/Format.md +177 -0
  483. package/external/folly/folly/docs/Function.md +92 -0
  484. package/external/folly/folly/docs/Futures.md +263 -0
  485. package/external/folly/folly/docs/GroupVarint.md +46 -0
  486. package/external/folly/folly/docs/Histogram.md +104 -0
  487. package/external/folly/folly/docs/MapUtils.md +80 -0
  488. package/external/folly/folly/docs/Overview.md +263 -0
  489. package/external/folly/folly/docs/PackedSyncPtr.md +77 -0
  490. package/external/folly/folly/docs/Poly.md +500 -0
  491. package/external/folly/folly/docs/ProducerConsumerQueue.md +82 -0
  492. package/external/folly/folly/docs/Rcu.md +218 -0
  493. package/external/folly/folly/docs/SmallLocks.md +24 -0
  494. package/external/folly/folly/docs/Synchronized.md +793 -0
  495. package/external/folly/folly/docs/ThreadCachedInt.md +98 -0
  496. package/external/folly/folly/docs/ThreadLocal.md +105 -0
  497. package/external/folly/folly/docs/Traits.md +161 -0
  498. package/external/folly/folly/docs/small_vector.md +64 -0
  499. package/external/folly/folly/docs/style.css +23 -0
  500. package/external/folly/folly/dynamic-inl.h +17 -0
  501. package/external/folly/folly/dynamic.h +17 -0
  502. package/external/folly/folly/folly_extended_library.bzl +28 -0
  503. package/external/folly/folly/functional/ApplyTuple.h +204 -0
  504. package/external/folly/folly/functional/BUCK +57 -0
  505. package/external/folly/folly/functional/Invoke.h +880 -0
  506. package/external/folly/folly/functional/Partial.h +130 -0
  507. package/external/folly/folly/functional/protocol.h +203 -0
  508. package/external/folly/folly/functional/test/ApplyTupleTest.cpp +549 -0
  509. package/external/folly/folly/functional/test/BUCK +57 -0
  510. package/external/folly/folly/functional/test/InvokeTest.cpp +483 -0
  511. package/external/folly/folly/functional/test/PartialTest.cpp +141 -0
  512. package/external/folly/folly/functional/test/protocol_test.cpp +177 -0
  513. package/external/folly/folly/functional/test/traits_test.cpp +551 -0
  514. package/external/folly/folly/functional/traits.h +675 -0
  515. package/external/folly/folly/hash/BUCK +86 -0
  516. package/external/folly/folly/hash/Checksum.cpp +275 -0
  517. package/external/folly/folly/hash/Checksum.h +94 -0
  518. package/external/folly/folly/hash/FarmHash.h +46 -0
  519. package/external/folly/folly/hash/Hash.h +1045 -0
  520. package/external/folly/folly/hash/MurmurHash.h +86 -0
  521. package/external/folly/folly/hash/SpookyHashV1.cpp +391 -0
  522. package/external/folly/folly/hash/SpookyHashV1.h +307 -0
  523. package/external/folly/folly/hash/SpookyHashV2.cpp +392 -0
  524. package/external/folly/folly/hash/SpookyHashV2.h +339 -0
  525. package/external/folly/folly/hash/detail/BUCK +26 -0
  526. package/external/folly/folly/hash/detail/ChecksumDetail.cpp +296 -0
  527. package/external/folly/folly/hash/detail/ChecksumDetail.h +137 -0
  528. package/external/folly/folly/hash/detail/Crc32CombineDetail.cpp +191 -0
  529. package/external/folly/folly/hash/detail/Crc32cDetail.cpp +303 -0
  530. package/external/folly/folly/hash/test/BUCK +132 -0
  531. package/external/folly/folly/hash/test/ChecksumBenchmark.cpp +91 -0
  532. package/external/folly/folly/hash/test/ChecksumTest.cpp +587 -0
  533. package/external/folly/folly/hash/test/FarmHashTest.cpp +41 -0
  534. package/external/folly/folly/hash/test/HashBenchmark.cpp +238 -0
  535. package/external/folly/folly/hash/test/HashTest.cpp +997 -0
  536. package/external/folly/folly/hash/test/MurmurHashTest.cpp +76 -0
  537. package/external/folly/folly/hash/test/SpookyHashV1Test.cpp +559 -0
  538. package/external/folly/folly/hash/test/SpookyHashV2Test.cpp +549 -0
  539. package/external/folly/folly/hash/test/traits_test.cpp +69 -0
  540. package/external/folly/folly/hash/traits.h +115 -0
  541. package/external/folly/folly/json/BUCK +155 -0
  542. package/external/folly/folly/json/DynamicConverter.h +464 -0
  543. package/external/folly/folly/json/DynamicParser-inl.h +316 -0
  544. package/external/folly/folly/json/DynamicParser.cpp +198 -0
  545. package/external/folly/folly/json/DynamicParser.h +394 -0
  546. package/external/folly/folly/json/JSONSchema.cpp +1030 -0
  547. package/external/folly/folly/json/JSONSchema.h +73 -0
  548. package/external/folly/folly/json/JsonMockUtil.h +73 -0
  549. package/external/folly/folly/json/JsonTestUtil.cpp +167 -0
  550. package/external/folly/folly/json/JsonTestUtil.h +88 -0
  551. package/external/folly/folly/json/bser/BUCK +24 -0
  552. package/external/folly/folly/json/bser/Bser.h +107 -0
  553. package/external/folly/folly/json/bser/Dump.cpp +253 -0
  554. package/external/folly/folly/json/bser/Load.cpp +246 -0
  555. package/external/folly/folly/json/bser/test/BUCK +14 -0
  556. package/external/folly/folly/json/bser/test/BserTest.cpp +149 -0
  557. package/external/folly/folly/json/dynamic.cpp +552 -0
  558. package/external/folly/folly/json/dynamic.h +1346 -0
  559. package/external/folly/folly/json/json.h +238 -0
  560. package/external/folly/folly/json/json_patch.cpp +325 -0
  561. package/external/folly/folly/json/json_patch.h +126 -0
  562. package/external/folly/folly/json/json_pointer.cpp +114 -0
  563. package/external/folly/folly/json/json_pointer.h +87 -0
  564. package/external/folly/folly/json/test/BUCK +147 -0
  565. package/external/folly/folly/json/test/DynamicBenchmark.cpp +146 -0
  566. package/external/folly/folly/json/test/DynamicConverterTest.cpp +518 -0
  567. package/external/folly/folly/json/test/DynamicOtherTest.cpp +344 -0
  568. package/external/folly/folly/json/test/DynamicParserTest.cpp +443 -0
  569. package/external/folly/folly/json/test/DynamicTest.cpp +1647 -0
  570. package/external/folly/folly/json/test/JSONSchemaTest.cpp +450 -0
  571. package/external/folly/folly/json/test/JsonBenchmark.cpp +264 -0
  572. package/external/folly/folly/json/test/JsonOtherTest.cpp +51 -0
  573. package/external/folly/folly/json/test/JsonTest.cpp +1153 -0
  574. package/external/folly/folly/json/test/JsonTestUtilTest.cpp +97 -0
  575. package/external/folly/folly/json/test/json_patch_test.cpp +361 -0
  576. package/external/folly/folly/json/test/json_pointer_test.cpp +58 -0
  577. package/external/folly/folly/json/tool/BUCK +13 -0
  578. package/external/folly/folly/json/tool/JSONSchemaTester.cpp +58 -0
  579. package/external/folly/folly/json.h +17 -0
  580. package/external/folly/folly/json_patch.h +17 -0
  581. package/external/folly/folly/json_pointer.h +17 -0
  582. package/external/folly/folly/lang/Access.h +29 -0
  583. package/external/folly/folly/lang/Align.h +240 -0
  584. package/external/folly/folly/lang/Aligned.h +92 -0
  585. package/external/folly/folly/lang/Assume.h +82 -0
  586. package/external/folly/folly/lang/BUCK +287 -0
  587. package/external/folly/folly/lang/Badge.h +108 -0
  588. package/external/folly/folly/lang/Bits.h +570 -0
  589. package/external/folly/folly/lang/BitsClass.h +312 -0
  590. package/external/folly/folly/lang/Builtin.h +74 -0
  591. package/external/folly/folly/lang/CArray.h +34 -0
  592. package/external/folly/folly/lang/CString.cpp +86 -0
  593. package/external/folly/folly/lang/CString.h +55 -0
  594. package/external/folly/folly/lang/Cast.h +51 -0
  595. package/external/folly/folly/lang/CheckedMath.h +253 -0
  596. package/external/folly/folly/lang/CustomizationPoint.h +58 -0
  597. package/external/folly/folly/lang/Exception.cpp +822 -0
  598. package/external/folly/folly/lang/Exception.h +716 -0
  599. package/external/folly/folly/lang/Extern.h +55 -0
  600. package/external/folly/folly/lang/Hint-inl.h +144 -0
  601. package/external/folly/folly/lang/Hint.h +238 -0
  602. package/external/folly/folly/lang/Keep.h +98 -0
  603. package/external/folly/folly/lang/New.h +124 -0
  604. package/external/folly/folly/lang/Ordering.h +140 -0
  605. package/external/folly/folly/lang/Pretty.h +159 -0
  606. package/external/folly/folly/lang/PropagateConst.h +413 -0
  607. package/external/folly/folly/lang/RValueReferenceWrapper.h +152 -0
  608. package/external/folly/folly/lang/SafeAssert.cpp +589 -0
  609. package/external/folly/folly/lang/StaticConst.h +33 -0
  610. package/external/folly/folly/lang/Thunk.h +100 -0
  611. package/external/folly/folly/lang/TypeInfo.h +58 -0
  612. package/external/folly/folly/lang/UncaughtExceptions.cpp +17 -0
  613. package/external/folly/folly/lang/UncaughtExceptions.h +19 -0
  614. package/external/folly/folly/lang/test/AlignTest.cpp +87 -0
  615. package/external/folly/folly/lang/test/AlignedTest.cpp +130 -0
  616. package/external/folly/folly/lang/test/BUCK +258 -0
  617. package/external/folly/folly/lang/test/BadgeTest.cpp +89 -0
  618. package/external/folly/folly/lang/test/BitsBenchmark.cpp +164 -0
  619. package/external/folly/folly/lang/test/BitsClassBenchmark.cpp +122 -0
  620. package/external/folly/folly/lang/test/BitsClassTest.cpp +379 -0
  621. package/external/folly/folly/lang/test/BitsTest.cpp +577 -0
  622. package/external/folly/folly/lang/test/CStringTest.cpp +60 -0
  623. package/external/folly/folly/lang/test/CastTest.cpp +47 -0
  624. package/external/folly/folly/lang/test/CheckedMathTest.cpp +394 -0
  625. package/external/folly/folly/lang/test/ExceptionBench.cpp +427 -0
  626. package/external/folly/folly/lang/test/ExceptionTest.cpp +413 -0
  627. package/external/folly/folly/lang/test/ExternTest.cpp +39 -0
  628. package/external/folly/folly/lang/test/HintTest.cpp +100 -0
  629. package/external/folly/folly/lang/test/NewTest.cpp +38 -0
  630. package/external/folly/folly/lang/test/OrderingTest.cpp +105 -0
  631. package/external/folly/folly/lang/test/PrettyTest.cpp +44 -0
  632. package/external/folly/folly/lang/test/PropagateConstTest.cpp +356 -0
  633. package/external/folly/folly/lang/test/RValueReferenceWrapperTest.cpp +85 -0
  634. package/external/folly/folly/lang/test/SafeAssertTest.cpp +75 -0
  635. package/external/folly/folly/lang/test/ThunkTest.cpp +105 -0
  636. package/external/folly/folly/lang/test/ToAsciiBench.cpp +466 -0
  637. package/external/folly/folly/lang/test/ToAsciiTest.cpp +266 -0
  638. package/external/folly/folly/lang/test/TypeInfoTest.cpp +56 -0
  639. package/external/folly/folly/memcpy.S +292 -0
  640. package/external/folly/folly/memcpy_select_aarch64.cpp +145 -0
  641. package/external/folly/folly/memory/Arena-inl.h +83 -0
  642. package/external/folly/folly/memory/Arena.h +325 -0
  643. package/external/folly/folly/memory/BUCK +191 -0
  644. package/external/folly/folly/memory/JemallocHugePageAllocator.cpp +449 -0
  645. package/external/folly/folly/memory/JemallocHugePageAllocator.h +105 -0
  646. package/external/folly/folly/memory/JemallocHugePageAllocatorTest.cpp +341 -0
  647. package/external/folly/folly/memory/JemallocNodumpAllocator.cpp +176 -0
  648. package/external/folly/folly/memory/JemallocNodumpAllocator.h +119 -0
  649. package/external/folly/folly/memory/JemallocNodumpAllocatorTest.cpp +61 -0
  650. package/external/folly/folly/memory/MallctlHelper.cpp +37 -0
  651. package/external/folly/folly/memory/MallctlHelper.h +167 -0
  652. package/external/folly/folly/memory/Malloc.h +551 -0
  653. package/external/folly/folly/memory/MemoryResource.h +57 -0
  654. package/external/folly/folly/memory/ReentrantAllocator.cpp +162 -0
  655. package/external/folly/folly/memory/ReentrantAllocator.h +261 -0
  656. package/external/folly/folly/memory/SanitizeAddress.cpp +75 -0
  657. package/external/folly/folly/memory/SanitizeAddress.h +117 -0
  658. package/external/folly/folly/memory/SanitizeLeak.cpp +119 -0
  659. package/external/folly/folly/memory/SanitizeLeak.h +108 -0
  660. package/external/folly/folly/memory/ThreadCachedArena.cpp +53 -0
  661. package/external/folly/folly/memory/ThreadCachedArena.h +90 -0
  662. package/external/folly/folly/memory/UninitializedMemoryHacks.h +426 -0
  663. package/external/folly/folly/memory/detail/BUCK +10 -0
  664. package/external/folly/folly/memory/detail/MallocImpl.cpp +52 -0
  665. package/external/folly/folly/memory/detail/MallocImpl.h +97 -0
  666. package/external/folly/folly/memory/not_null-inl.h +522 -0
  667. package/external/folly/folly/memory/not_null.h +449 -0
  668. package/external/folly/folly/memory/test/ArenaTest.cpp +354 -0
  669. package/external/folly/folly/memory/test/BUCK +146 -0
  670. package/external/folly/folly/memory/test/MallctlHelperTest.cpp +169 -0
  671. package/external/folly/folly/memory/test/MallocBenchmark.cpp +91 -0
  672. package/external/folly/folly/memory/test/MallocTest.cpp +78 -0
  673. package/external/folly/folly/memory/test/MemoryResourceTest.cpp +31 -0
  674. package/external/folly/folly/memory/test/ReentrantAllocatorTest.cpp +144 -0
  675. package/external/folly/folly/memory/test/SanitizeAddressTest.cpp +67 -0
  676. package/external/folly/folly/memory/test/SanitizeLeakTest.cpp +139 -0
  677. package/external/folly/folly/memory/test/ThreadCachedArenaTest.cpp +276 -0
  678. package/external/folly/folly/memory/test/UninitializedMemoryHacksODR.cpp +21 -0
  679. package/external/folly/folly/memory/test/UninitializedMemoryHacksTest.cpp +327 -0
  680. package/external/folly/folly/memory/test/not_null_test.cpp +608 -0
  681. package/external/folly/folly/memset.S +245 -0
  682. package/external/folly/folly/memset_select_aarch64.cpp +72 -0
  683. package/external/folly/folly/portability/Asm.h +50 -0
  684. package/external/folly/folly/portability/Atomic.h +31 -0
  685. package/external/folly/folly/portability/BUCK +456 -0
  686. package/external/folly/folly/portability/Builtins.cpp +31 -0
  687. package/external/folly/folly/portability/Builtins.h +161 -0
  688. package/external/folly/folly/portability/Config.h +43 -0
  689. package/external/folly/folly/portability/Constexpr.h +145 -0
  690. package/external/folly/folly/portability/Dirent.cpp +140 -0
  691. package/external/folly/folly/portability/Dirent.h +41 -0
  692. package/external/folly/folly/portability/Event.h +44 -0
  693. package/external/folly/folly/portability/Fcntl.cpp +120 -0
  694. package/external/folly/folly/portability/Fcntl.h +67 -0
  695. package/external/folly/folly/portability/Filesystem.cpp +67 -0
  696. package/external/folly/folly/portability/Filesystem.h +114 -0
  697. package/external/folly/folly/portability/FmtCompile.h +40 -0
  698. package/external/folly/folly/portability/GFlags.h +139 -0
  699. package/external/folly/folly/portability/GMock.h +35 -0
  700. package/external/folly/folly/portability/GTest.h +35 -0
  701. package/external/folly/folly/portability/IOVec.h +34 -0
  702. package/external/folly/folly/portability/Libgen.cpp +59 -0
  703. package/external/folly/folly/portability/Libgen.h +29 -0
  704. package/external/folly/folly/portability/Libunwind.h +21 -0
  705. package/external/folly/folly/portability/Malloc.cpp +31 -0
  706. package/external/folly/folly/portability/Malloc.h +53 -0
  707. package/external/folly/folly/portability/Math.h +90 -0
  708. package/external/folly/folly/portability/Memory.h +26 -0
  709. package/external/folly/folly/portability/OpenSSL.cpp +17 -0
  710. package/external/folly/folly/portability/OpenSSL.h +102 -0
  711. package/external/folly/folly/portability/PThread.cpp +697 -0
  712. package/external/folly/folly/portability/PThread.h +148 -0
  713. package/external/folly/folly/portability/README.md +21 -0
  714. package/external/folly/folly/portability/Sched.cpp +41 -0
  715. package/external/folly/folly/portability/Sched.h +45 -0
  716. package/external/folly/folly/portability/Sockets.cpp +245 -0
  717. package/external/folly/folly/portability/Sockets.h +155 -0
  718. package/external/folly/folly/portability/SourceLocation.h +49 -0
  719. package/external/folly/folly/portability/Stdio.cpp +77 -0
  720. package/external/folly/folly/portability/Stdio.h +32 -0
  721. package/external/folly/folly/portability/Stdlib.cpp +172 -0
  722. package/external/folly/folly/portability/Stdlib.h +64 -0
  723. package/external/folly/folly/portability/String.cpp +53 -0
  724. package/external/folly/folly/portability/String.h +39 -0
  725. package/external/folly/folly/portability/SysFile.cpp +46 -0
  726. package/external/folly/folly/portability/SysFile.h +27 -0
  727. package/external/folly/folly/portability/SysMembarrier.cpp +104 -0
  728. package/external/folly/folly/portability/SysMembarrier.h +26 -0
  729. package/external/folly/folly/portability/SysMman.cpp +242 -0
  730. package/external/folly/folly/portability/SysMman.h +68 -0
  731. package/external/folly/folly/portability/SysResource.cpp +108 -0
  732. package/external/folly/folly/portability/SysResource.h +71 -0
  733. package/external/folly/folly/portability/SysStat.cpp +66 -0
  734. package/external/folly/folly/portability/SysStat.h +52 -0
  735. package/external/folly/folly/portability/SysSyscall.h +73 -0
  736. package/external/folly/folly/portability/SysTime.cpp +62 -0
  737. package/external/folly/folly/portability/SysTime.h +50 -0
  738. package/external/folly/folly/portability/SysTypes.h +44 -0
  739. package/external/folly/folly/portability/SysUio.cpp +179 -0
  740. package/external/folly/folly/portability/SysUio.h +51 -0
  741. package/external/folly/folly/portability/Syslog.h +39 -0
  742. package/external/folly/folly/portability/Time.cpp +357 -0
  743. package/external/folly/folly/portability/Time.h +74 -0
  744. package/external/folly/folly/portability/Unistd.h +111 -0
  745. package/external/folly/folly/portability/Windows.h +108 -0
  746. package/external/folly/folly/portability/openat2.c +30 -0
  747. package/external/folly/folly/portability/openat2.h +39 -0
  748. package/external/folly/folly/portability/test/BUCK +59 -0
  749. package/external/folly/folly/portability/test/ConstexprTest.cpp +102 -0
  750. package/external/folly/folly/portability/test/FilesystemTest.cpp +35 -0
  751. package/external/folly/folly/portability/test/LibgenTest.cpp +35 -0
  752. package/external/folly/folly/portability/test/OpenSSLPortabilityTest.cpp +108 -0
  753. package/external/folly/folly/portability/test/PThreadTest.cpp +80 -0
  754. package/external/folly/folly/portability/test/TimeTest.cpp +90 -0
  755. package/external/folly/folly/small_vector.h +17 -0
  756. package/external/folly/folly/somerge_defs.bzl +399 -0
  757. package/external/folly/folly/sorted_vector_types.h +17 -0
  758. package/external/folly/folly/stop_watch.h +317 -0
  759. package/external/folly/folly/synchronization/AsymmetricThreadFence.cpp +91 -0
  760. package/external/folly/folly/synchronization/AsymmetricThreadFence.h +60 -0
  761. package/external/folly/folly/synchronization/AtomicNotification-inl.h +146 -0
  762. package/external/folly/folly/synchronization/AtomicNotification.cpp +34 -0
  763. package/external/folly/folly/synchronization/AtomicNotification.h +117 -0
  764. package/external/folly/folly/synchronization/AtomicRef.h +181 -0
  765. package/external/folly/folly/synchronization/AtomicStruct.h +150 -0
  766. package/external/folly/folly/synchronization/AtomicUtil-inl.h +482 -0
  767. package/external/folly/folly/synchronization/AtomicUtil.h +179 -0
  768. package/external/folly/folly/synchronization/BUCK +418 -0
  769. package/external/folly/folly/synchronization/Baton.h +419 -0
  770. package/external/folly/folly/synchronization/CallOnce.h +263 -0
  771. package/external/folly/folly/synchronization/DelayedInit.h +179 -0
  772. package/external/folly/folly/synchronization/DistributedMutex-inl.h +1744 -0
  773. package/external/folly/folly/synchronization/DistributedMutex.cpp +27 -0
  774. package/external/folly/folly/synchronization/DistributedMutex.h +342 -0
  775. package/external/folly/folly/synchronization/EventCount.h +200 -0
  776. package/external/folly/folly/synchronization/FlatCombining.h +629 -0
  777. package/external/folly/folly/synchronization/Hazptr-fwd.h +217 -0
  778. package/external/folly/folly/synchronization/Hazptr.cpp +36 -0
  779. package/external/folly/folly/synchronization/Hazptr.h +209 -0
  780. package/external/folly/folly/synchronization/HazptrDomain.cpp +68 -0
  781. package/external/folly/folly/synchronization/HazptrDomain.h +832 -0
  782. package/external/folly/folly/synchronization/HazptrHolder.h +431 -0
  783. package/external/folly/folly/synchronization/HazptrObj.h +533 -0
  784. package/external/folly/folly/synchronization/HazptrObjLinked.h +315 -0
  785. package/external/folly/folly/synchronization/HazptrRec.h +68 -0
  786. package/external/folly/folly/synchronization/HazptrThrLocal.h +180 -0
  787. package/external/folly/folly/synchronization/HazptrThreadPoolExecutor.cpp +46 -0
  788. package/external/folly/folly/synchronization/HazptrThreadPoolExecutor.h +25 -0
  789. package/external/folly/folly/synchronization/Latch.h +160 -0
  790. package/external/folly/folly/synchronization/LifoSem.h +767 -0
  791. package/external/folly/folly/synchronization/Lock.h +887 -0
  792. package/external/folly/folly/synchronization/MicroSpinLock.h +154 -0
  793. package/external/folly/folly/synchronization/NativeSemaphore.h +187 -0
  794. package/external/folly/folly/synchronization/ParkingLot.cpp +37 -0
  795. package/external/folly/folly/synchronization/ParkingLot.h +330 -0
  796. package/external/folly/folly/synchronization/PicoSpinLock.h +167 -0
  797. package/external/folly/folly/synchronization/RWSpinLock.h +549 -0
  798. package/external/folly/folly/synchronization/Rcu.cpp +26 -0
  799. package/external/folly/folly/synchronization/Rcu.h +553 -0
  800. package/external/folly/folly/synchronization/RelaxedAtomic.h +336 -0
  801. package/external/folly/folly/synchronization/SanitizeThread.cpp +141 -0
  802. package/external/folly/folly/synchronization/SanitizeThread.h +166 -0
  803. package/external/folly/folly/synchronization/SaturatingSemaphore.h +324 -0
  804. package/external/folly/folly/synchronization/SmallLocks.h +36 -0
  805. package/external/folly/folly/synchronization/ThrottledLifoSem.h +362 -0
  806. package/external/folly/folly/synchronization/WaitOptions.cpp +25 -0
  807. package/external/folly/folly/synchronization/WaitOptions.h +75 -0
  808. package/external/folly/folly/synchronization/detail/AtomicUtils.h +59 -0
  809. package/external/folly/folly/synchronization/detail/BUCK +104 -0
  810. package/external/folly/folly/synchronization/detail/Hardware.cpp +192 -0
  811. package/external/folly/folly/synchronization/detail/Hardware.h +75 -0
  812. package/external/folly/folly/synchronization/detail/HazptrUtils.h +339 -0
  813. package/external/folly/folly/synchronization/detail/InlineFunctionRef.h +229 -0
  814. package/external/folly/folly/synchronization/detail/Sleeper.cpp +27 -0
  815. package/external/folly/folly/synchronization/detail/Sleeper.h +62 -0
  816. package/external/folly/folly/synchronization/detail/Spin.h +96 -0
  817. package/external/folly/folly/synchronization/detail/ThreadCachedLists.h +174 -0
  818. package/external/folly/folly/synchronization/detail/ThreadCachedReaders.h +189 -0
  819. package/external/folly/folly/synchronization/detail/ThreadCachedTag.h +26 -0
  820. package/external/folly/folly/synchronization/detail/test/BUCK +28 -0
  821. package/external/folly/folly/synchronization/detail/test/HardwareTest.cpp +74 -0
  822. package/external/folly/folly/synchronization/detail/test/InlineFunctionRefTest.cpp +286 -0
  823. package/external/folly/folly/synchronization/example/BUCK +27 -0
  824. package/external/folly/folly/synchronization/example/HazptrLockFreeLIFO.h +88 -0
  825. package/external/folly/folly/synchronization/example/HazptrSWMRSet.h +133 -0
  826. package/external/folly/folly/synchronization/example/HazptrWideCAS.h +62 -0
  827. package/external/folly/folly/synchronization/test/AtomicNotificationTest.cpp +236 -0
  828. package/external/folly/folly/synchronization/test/AtomicRefTest.cpp +170 -0
  829. package/external/folly/folly/synchronization/test/AtomicStructTest.cpp +65 -0
  830. package/external/folly/folly/synchronization/test/AtomicUtilBench.cpp +457 -0
  831. package/external/folly/folly/synchronization/test/AtomicUtilTest.cpp +650 -0
  832. package/external/folly/folly/synchronization/test/BUCK +495 -0
  833. package/external/folly/folly/synchronization/test/Barrier.h +52 -0
  834. package/external/folly/folly/synchronization/test/BarrierTest.cpp +56 -0
  835. package/external/folly/folly/synchronization/test/BatonBenchmark.cpp +77 -0
  836. package/external/folly/folly/synchronization/test/BatonTest.cpp +164 -0
  837. package/external/folly/folly/synchronization/test/BatonTestHelpers.h +118 -0
  838. package/external/folly/folly/synchronization/test/CallOnceBenchmark.cpp +72 -0
  839. package/external/folly/folly/synchronization/test/CallOnceTest.cpp +153 -0
  840. package/external/folly/folly/synchronization/test/DelayedInitTest.cpp +281 -0
  841. package/external/folly/folly/synchronization/test/DistributedMutexTest.cpp +2074 -0
  842. package/external/folly/folly/synchronization/test/EventCountTest.cpp +124 -0
  843. package/external/folly/folly/synchronization/test/FlatCombiningBenchmark.cpp +1789 -0
  844. package/external/folly/folly/synchronization/test/FlatCombiningExamples.h +222 -0
  845. package/external/folly/folly/synchronization/test/FlatCombiningTest.cpp +121 -0
  846. package/external/folly/folly/synchronization/test/FlatCombiningTestHelpers.h +227 -0
  847. package/external/folly/folly/synchronization/test/HazptrTest.cpp +1689 -0
  848. package/external/folly/folly/synchronization/test/LatchTest.cpp +224 -0
  849. package/external/folly/folly/synchronization/test/LifoSemBench.cpp +185 -0
  850. package/external/folly/folly/synchronization/test/LifoSemTests.cpp +353 -0
  851. package/external/folly/folly/synchronization/test/LockTest.cpp +1239 -0
  852. package/external/folly/folly/synchronization/test/NativeSemaphoreTest.cpp +37 -0
  853. package/external/folly/folly/synchronization/test/ParkingLotBenchmark.cpp +239 -0
  854. package/external/folly/folly/synchronization/test/ParkingLotTest.cpp +170 -0
  855. package/external/folly/folly/synchronization/test/RWSpinLockTest.cpp +235 -0
  856. package/external/folly/folly/synchronization/test/RcuBench.cpp +66 -0
  857. package/external/folly/folly/synchronization/test/RcuTest.cpp +330 -0
  858. package/external/folly/folly/synchronization/test/RelaxedAtomicTest.cpp +389 -0
  859. package/external/folly/folly/synchronization/test/SaturatingSemaphoreTest.cpp +166 -0
  860. package/external/folly/folly/synchronization/test/Semaphore.h +242 -0
  861. package/external/folly/folly/synchronization/test/SemaphoreTest.cpp +271 -0
  862. package/external/folly/folly/synchronization/test/SmallLocksBenchmark.cpp +1296 -0
  863. package/external/folly/folly/synchronization/test/SmallLocksTest.cpp +510 -0
  864. package/external/folly/folly/synchronization/test/ThreadCachedEpochBench.h +67 -0
  865. package/external/folly/folly/synchronization/test/ThreadCachedReadersBench.cpp +42 -0
  866. package/external/folly/folly/synchronization/test/ThreadCachedReadersTest.cpp +52 -0
  867. package/external/folly/folly/synchronization/test/ThrottledLifoSemTest.cpp +243 -0
  868. package/external/folly/folly/system/AtFork.cpp +205 -0
  869. package/external/folly/folly/system/AtFork.h +116 -0
  870. package/external/folly/folly/system/AuxVector.h +198 -0
  871. package/external/folly/folly/system/BUCK +144 -0
  872. package/external/folly/folly/system/EnvUtil.cpp +93 -0
  873. package/external/folly/folly/system/EnvUtil.h +113 -0
  874. package/external/folly/folly/system/HardwareConcurrency.cpp +39 -0
  875. package/external/folly/folly/system/HardwareConcurrency.h +23 -0
  876. package/external/folly/folly/system/MemoryMapping.cpp +477 -0
  877. package/external/folly/folly/system/MemoryMapping.h +287 -0
  878. package/external/folly/folly/system/Pid.cpp +87 -0
  879. package/external/folly/folly/system/Pid.h +34 -0
  880. package/external/folly/folly/system/Shell.cpp +33 -0
  881. package/external/folly/folly/system/Shell.h +93 -0
  882. package/external/folly/folly/system/ThreadId.cpp +89 -0
  883. package/external/folly/folly/system/ThreadId.h +62 -0
  884. package/external/folly/folly/system/ThreadName.cpp +330 -0
  885. package/external/folly/folly/system/ThreadName.h +72 -0
  886. package/external/folly/folly/system/test/AtForkTest.cpp +309 -0
  887. package/external/folly/folly/system/test/AuxVectorTest.cpp +55 -0
  888. package/external/folly/folly/system/test/BUCK +120 -0
  889. package/external/folly/folly/system/test/EnvUtilSubprocess.cpp +26 -0
  890. package/external/folly/folly/system/test/EnvUtilTest.cpp +197 -0
  891. package/external/folly/folly/system/test/MemoryMappingTest.cpp +179 -0
  892. package/external/folly/folly/system/test/PidTest.cpp +46 -0
  893. package/external/folly/folly/system/test/ShellTest.cpp +66 -0
  894. package/external/folly/folly/system/test/ThreadIdTest.cpp +114 -0
  895. package/external/folly/folly/system/test/ThreadNameTest.cpp +85 -0
  896. package/external/folly/folly.vcxitems +164 -0
  897. package/external/folly/static/logo.svg +1 -0
  898. package/external/folly/sync-config.json +8 -0
  899. package/package.json +6 -6
  900. package/template/cpp-lib/proj/MyLib.sln +0 -33
  901. package/template/cs-lib/proj/MyLib.sln +0 -33
  902. package/templates/cpp-app/windows/MyApp.sln +0 -33
  903. package/templates/cpp-lib/example/metro.config.js +30 -4
  904. package/templates/cpp-lib/windows/MyLib.sln +0 -33
  905. package/Folly/Folly.vcxproj +0 -378
  906. package/Folly/Folly.vcxproj.filters +0 -558
  907. package/fmt/fmt.vcxproj +0 -153
  908. package/fmt/fmt.vcxproj.filters +0 -59
  909. package/fmt/pch.cpp +0 -4
  910. package/fmt/pch.h +0 -2
  911. /package/{fmt → external/fmt}/cgmanifest.json +0 -0
  912. /package/{Folly → external/folly}/Folly.natvis +0 -0
  913. /package/{Folly → external/folly}/cgmanifest.json +0 -0
  914. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/ConstexprMath.h +0 -0
  915. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/Conv.cpp +0 -0
  916. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/chrono/Hardware.h +0 -0
  917. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/concurrency/CacheLocality.cpp +0 -0
  918. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/json/dynamic-inl.h +0 -0
  919. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/json/json.cpp +0 -0
  920. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/SafeAssert.h +0 -0
  921. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/ToAscii.cpp +0 -0
  922. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/ToAscii.h +0 -0
  923. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/portability/Unistd.cpp +0 -0
@@ -0,0 +1,986 @@
1
+ /*
2
+ * Copyright (c) Meta Platforms, Inc. and affiliates.
3
+ *
4
+ * Licensed under the Apache License, Version 2.0 (the "License");
5
+ * you may not use this file except in compliance with the License.
6
+ * You may obtain a copy of the License at
7
+ *
8
+ * http://www.apache.org/licenses/LICENSE-2.0
9
+ *
10
+ * Unless required by applicable law or agreed to in writing, software
11
+ * distributed under the License is distributed on an "AS IS" BASIS,
12
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
+ * See the License for the specific language governing permissions and
14
+ * limitations under the License.
15
+ */
16
+
17
+ #include <folly/Benchmark.h>
18
+
19
+ #include <algorithm>
20
+ #include <cmath>
21
+ #include <cstring>
22
+ #include <iostream>
23
+ #include <limits>
24
+ #include <map>
25
+ #include <memory>
26
+ #include <numeric>
27
+ #include <utility>
28
+ #include <vector>
29
+
30
+ #include <folly/FileUtil.h>
31
+ #include <folly/MapUtil.h>
32
+ #include <folly/String.h>
33
+ #include <folly/detail/PerfScoped.h>
34
+ #include <folly/json/json.h>
35
+
36
+ // This needs to be at the end because some versions end up including
37
+ // Windows.h without defining NOMINMAX, which breaks uses
38
+ // of `std::numeric_limits<T>::max()`. We explicitly define NOMINMAX here
39
+ // explicitly instead.
40
+ #define NOMINMAX 1
41
+ #include <boost/regex.hpp>
42
+
43
+ using namespace std;
44
+
45
+ FOLLY_GFLAGS_DEFINE_bool(benchmark, false, "Run benchmarks.");
46
+
47
+ FOLLY_GFLAGS_DEFINE_bool(json, false, "Output in JSON format.");
48
+
49
+ FOLLY_GFLAGS_DEFINE_bool(bm_estimate_time, false, "Estimate running time");
50
+
51
+ #if FOLLY_PERF_IS_SUPPORTED
52
+ FOLLY_GFLAGS_DEFINE_string(
53
+ bm_perf_args,
54
+ "",
55
+ "Run selected benchmarks while attaching `perf` profiling tool."
56
+ "Advantage over attaching perf externally is that this skips "
57
+ "initialization. The first iteration of the benchmark is also "
58
+ "skipped to allow for all statics to be set up. This requires perf "
59
+ " to be available on the system. Example: --bm_perf_args=\"record -g\"");
60
+ #endif
61
+
62
+ FOLLY_GFLAGS_DEFINE_bool(
63
+ bm_profile, false, "Run benchmarks with constant number of iterations");
64
+
65
+ FOLLY_GFLAGS_DEFINE_int64(
66
+ bm_profile_iters, 1000, "Number of iterations for profiling");
67
+
68
+ FOLLY_GFLAGS_DEFINE_string(
69
+ bm_relative_to,
70
+ "",
71
+ "Print benchmark results relative to an earlier dump (via --bm_json_verbose)");
72
+
73
+ FOLLY_GFLAGS_DEFINE_bool(
74
+ bm_warm_up_iteration,
75
+ false,
76
+ "Run one iteration of the benchmarks before measuring. Always true if `bm_perf_args` is passed");
77
+
78
+ FOLLY_GFLAGS_DEFINE_string(
79
+ bm_json_verbose,
80
+ "",
81
+ "File to write verbose JSON format (for BenchmarkCompare / --bm_relative_to). "
82
+ "NOTE: this file is written regardless of options --json and --bm_relative_to.");
83
+
84
+ FOLLY_GFLAGS_DEFINE_string(
85
+ bm_regex, "", "Only benchmarks whose names match this regex will be run.");
86
+
87
+ FOLLY_GFLAGS_DEFINE_string(
88
+ bm_file_regex,
89
+ "",
90
+ "Only benchmarks whose filenames match this regex will be run.");
91
+
92
+ FOLLY_GFLAGS_DEFINE_int64(
93
+ bm_min_usec,
94
+ 100,
95
+ "Minimum # of microseconds we'll accept for each benchmark.");
96
+
97
+ FOLLY_GFLAGS_DEFINE_int32(
98
+ bm_min_iters, 1, "Minimum # of iterations we'll try for each benchmark.");
99
+
100
+ FOLLY_GFLAGS_DEFINE_int64(
101
+ bm_max_iters,
102
+ 1 << 30,
103
+ "Maximum # of iterations we'll try for each benchmark.");
104
+
105
+ FOLLY_GFLAGS_DEFINE_int32(
106
+ bm_max_secs, 1, "Maximum # of seconds we'll spend on each benchmark.");
107
+
108
+ FOLLY_GFLAGS_DEFINE_uint32(
109
+ bm_result_width_chars, 76, "Width of results table in characters");
110
+
111
+ FOLLY_GFLAGS_DEFINE_uint32(
112
+ bm_max_trials,
113
+ 1000,
114
+ "Maximum number of trials (iterations) executed for each benchmark.");
115
+
116
+ FOLLY_GFLAGS_DEFINE_bool(
117
+ bm_list,
118
+ false,
119
+ "Print out list of all benchmark test names without running them.");
120
+
121
+ namespace folly {
122
+ namespace detail {
123
+
124
+ BenchmarkingState<std::chrono::high_resolution_clock>& globalBenchmarkState() {
125
+ static detail::BenchmarkingState<std::chrono::high_resolution_clock> state;
126
+ return state;
127
+ }
128
+
129
+ } // namespace detail
130
+
131
+ using BenchmarkFun = std::function<detail::TimeIterData(unsigned int)>;
132
+
133
+ #define FB_FOLLY_GLOBAL_BENCHMARK_BASELINE fbFollyGlobalBenchmarkBaseline
134
+ #define FB_STRINGIZE_X2(x) FOLLY_PP_STRINGIZE(x)
135
+
136
+ constexpr const char kGlobalBenchmarkBaseline[] =
137
+ FB_STRINGIZE_X2(FB_FOLLY_GLOBAL_BENCHMARK_BASELINE);
138
+
139
+ // Add the global baseline
140
+ BENCHMARK(FB_FOLLY_GLOBAL_BENCHMARK_BASELINE) {
141
+ #ifdef _MSC_VER
142
+ _ReadWriteBarrier();
143
+ #else
144
+ asm volatile("");
145
+ #endif
146
+ }
147
+
148
+ #undef FB_STRINGIZE_X2
149
+ #undef FB_FOLLY_GLOBAL_BENCHMARK_BASELINE
150
+
151
+ static std::pair<double, UserCounters> runBenchmarkGetNSPerIteration(
152
+ const BenchmarkFun& fun, const double globalBaseline) {
153
+ using std::chrono::duration_cast;
154
+ using std::chrono::high_resolution_clock;
155
+ using std::chrono::microseconds;
156
+ using std::chrono::nanoseconds;
157
+ using std::chrono::seconds;
158
+
159
+ // They key here is accuracy; too low numbers means the accuracy was
160
+ // coarse. We up the ante until we get to at least minNanoseconds
161
+ // timings.
162
+ static_assert(
163
+ std::is_same<high_resolution_clock::duration, nanoseconds>::value,
164
+ "High resolution clock must be nanosecond resolution.");
165
+ // We choose a minimum minimum (sic) of 100,000 nanoseconds, but if
166
+ // the clock resolution is worse than that, it will be larger. In
167
+ // essence we're aiming at making the quantization noise 0.01%.
168
+ static const auto minNanoseconds = std::max<nanoseconds>(
169
+ nanoseconds(100000), microseconds(FLAGS_bm_min_usec));
170
+
171
+ // We establish a total time budget as we don't want a measurement
172
+ // to take too long. This will curtail the number of actual trials.
173
+ const auto timeBudget = seconds(FLAGS_bm_max_secs);
174
+ auto global = high_resolution_clock::now();
175
+
176
+ std::vector<std::pair<double, UserCounters>> trialResults(
177
+ FLAGS_bm_max_trials);
178
+ size_t actualTrials = 0;
179
+
180
+ // We do measurements in several trials (epochs) and take the minimum, to
181
+ // account for jitter.
182
+ for (; actualTrials < FLAGS_bm_max_trials; ++actualTrials) {
183
+ const auto maxIters = uint32_t(FLAGS_bm_max_iters);
184
+ for (auto n = uint32_t(FLAGS_bm_min_iters); n < maxIters; n *= 2) {
185
+ detail::TimeIterData timeIterData = fun(static_cast<unsigned int>(n));
186
+ if (timeIterData.duration < minNanoseconds) {
187
+ continue;
188
+ }
189
+ // We got an accurate enough timing, done. But only save if
190
+ // smaller than the current result.
191
+ auto nsecs = duration_cast<nanoseconds>(timeIterData.duration);
192
+ trialResults[actualTrials] = std::make_pair(
193
+ max(0.0, double(nsecs.count()) / timeIterData.niter - globalBaseline),
194
+ std::move(timeIterData.userCounters));
195
+ // Done with the current trial, we got a meaningful timing.
196
+ break;
197
+ }
198
+ auto now = high_resolution_clock::now();
199
+ if (now - global >= timeBudget) {
200
+ // No more time budget available.
201
+ ++actualTrials;
202
+ break;
203
+ }
204
+ }
205
+
206
+ // Current state of the art: get the minimum. After some
207
+ // experimentation, it seems taking the minimum is the best.
208
+ auto iter = min_element(
209
+ trialResults.begin(),
210
+ trialResults.begin() + actualTrials,
211
+ [](const auto& a, const auto& b) { return a.first < b.first; });
212
+
213
+ // If the benchmark was basically drowned in baseline noise, it's
214
+ // possible it became negative.
215
+ return std::make_pair(max(0.0, iter->first), iter->second);
216
+ }
217
+
218
+ static std::pair<double, UserCounters> runBenchmarkGetNSPerIterationEstimate(
219
+ const BenchmarkFun& fun, const double globalBaseline) {
220
+ using std::chrono::duration_cast;
221
+ using std::chrono::high_resolution_clock;
222
+ using std::chrono::microseconds;
223
+ using std::chrono::nanoseconds;
224
+ using std::chrono::seconds;
225
+ using TrialResultType = std::pair<double, UserCounters>;
226
+
227
+ // They key here is accuracy; too low numbers means the accuracy was
228
+ // coarse. We up the ante until we get to at least minNanoseconds
229
+ // timings.
230
+ static_assert(
231
+ std::is_same<high_resolution_clock::duration, nanoseconds>::value,
232
+ "High resolution clock must be nanosecond resolution.");
233
+
234
+ // Estimate single iteration running time for 1 sec
235
+ double estPerIter = 0.0; // Estimated nanosec per iteration
236
+ auto estStart = high_resolution_clock::now();
237
+ const auto estBudget = seconds(1);
238
+ for (auto n = 1; n < 1000; n *= 2) {
239
+ detail::TimeIterData timeIterData = fun(static_cast<unsigned int>(n));
240
+ auto now = high_resolution_clock::now();
241
+ auto nsecs = duration_cast<nanoseconds>(timeIterData.duration);
242
+ estPerIter = double(nsecs.count() - globalBaseline) / n;
243
+ if (now - estStart > estBudget) {
244
+ break;
245
+ }
246
+ }
247
+ // Can't estimate running time, so make it a baseline
248
+ if (estPerIter <= 0.0) {
249
+ estPerIter = globalBaseline;
250
+ }
251
+
252
+ // We do measurements in several trials (epochs) to account for jitter.
253
+ size_t actualTrials = 0;
254
+ const unsigned int estimateCount = to_integral(max(1.0, 5e+7 / estPerIter));
255
+ std::vector<TrialResultType> trialResults(FLAGS_bm_max_trials);
256
+ const auto maxRunTime = seconds(5);
257
+ auto globalStart = high_resolution_clock::now();
258
+
259
+ // Run benchmark up to trial times with at least 0.5 sec each
260
+ // Or until we run out of alowed time (5sec)
261
+ for (size_t tryId = 0; tryId < FLAGS_bm_max_trials; tryId++) {
262
+ detail::TimeIterData timeIterData = fun(estimateCount);
263
+ auto nsecs = duration_cast<nanoseconds>(timeIterData.duration);
264
+
265
+ if (nsecs.count() > globalBaseline) {
266
+ auto nsecIter =
267
+ double(nsecs.count() - globalBaseline) / timeIterData.niter;
268
+ trialResults[actualTrials++] =
269
+ std::make_pair(nsecIter, std::move(timeIterData.userCounters));
270
+ }
271
+ // Check if we are out of time quota
272
+ auto now = high_resolution_clock::now();
273
+ if (now - globalStart > maxRunTime) {
274
+ break;
275
+ }
276
+ }
277
+
278
+ // Sort results by running time
279
+ std::sort(
280
+ trialResults.begin(),
281
+ trialResults.begin() + actualTrials,
282
+ [](const TrialResultType& a, const TrialResultType& b) {
283
+ return a.first < b.first;
284
+ });
285
+
286
+ const auto getPercentile = [](size_t count, double p) -> size_t {
287
+ return static_cast<size_t>(count * p);
288
+ };
289
+
290
+ const size_t trialP25 = getPercentile(actualTrials, 0.25);
291
+ const size_t trialP75 = getPercentile(actualTrials, 0.75);
292
+ if (trialP75 - trialP25 == 0) {
293
+ // Use first trial results if p75 == p25.
294
+ return std::make_pair(trialResults[0].first, trialResults[0].second);
295
+ }
296
+
297
+ double geomeanNsec = 0.0;
298
+ for (size_t tryId = trialP25; tryId < trialP75; tryId++) {
299
+ geomeanNsec += std::log(trialResults[tryId].first);
300
+ }
301
+ geomeanNsec = std::exp(geomeanNsec / (1.0 * (trialP75 - trialP25)));
302
+
303
+ return std::make_pair(
304
+ geomeanNsec, trialResults[trialP25 + (trialP75 - trialP25) / 2].second);
305
+ }
306
+
307
+ static std::pair<double, UserCounters> runProfilingGetNSPerIteration(
308
+ const BenchmarkFun& fun, const double globalBaseline) {
309
+ using std::chrono::duration_cast;
310
+ using std::chrono::high_resolution_clock;
311
+ using std::chrono::nanoseconds;
312
+
313
+ // They key here is accuracy; too low numbers means the accuracy was
314
+ // coarse. We up the ante until we get to at least minNanoseconds
315
+ // timings.
316
+ static_assert(
317
+ std::is_same<high_resolution_clock::duration, nanoseconds>::value,
318
+ "High resolution clock must be nanosecond resolution.");
319
+
320
+ // This is a very simple measurement with a single epoch
321
+ // and should be used only for profiling purposes
322
+ detail::TimeIterData timeIterData = fun(FLAGS_bm_profile_iters);
323
+
324
+ auto nsecs = duration_cast<nanoseconds>(timeIterData.duration);
325
+ auto nsecIter = double(nsecs.count()) / timeIterData.niter - globalBaseline;
326
+ return std::make_pair(nsecIter, std::move(timeIterData.userCounters));
327
+ }
328
+
329
+ struct ScaleInfo {
330
+ double boundary;
331
+ const char* suffix;
332
+ };
333
+
334
+ static const ScaleInfo kTimeSuffixes[]{
335
+ {365.25 * 24 * 3600, "years"},
336
+ {24 * 3600, "days"},
337
+ {3600, "hr"},
338
+ {60, "min"},
339
+ {1, "s"},
340
+ {1E-3, "ms"},
341
+ {1E-6, "us"},
342
+ {1E-9, "ns"},
343
+ {1E-12, "ps"},
344
+ {1E-15, "fs"},
345
+ {0, nullptr},
346
+ };
347
+
348
+ static const ScaleInfo kMetricSuffixes[]{
349
+ {1E24, "Y"}, // yotta
350
+ {1E21, "Z"}, // zetta
351
+ {1E18, "X"}, // "exa" written with suffix 'X' so as to not create
352
+ // confusion with scientific notation
353
+ {1E15, "P"}, // peta
354
+ {1E12, "T"}, // terra
355
+ {1E9, "G"}, // giga
356
+ {1E6, "M"}, // mega
357
+ {1E3, "K"}, // kilo
358
+ {1, ""},
359
+ {1E-3, "m"}, // milli
360
+ {1E-6, "u"}, // micro
361
+ {1E-9, "n"}, // nano
362
+ {1E-12, "p"}, // pico
363
+ {1E-15, "f"}, // femto
364
+ {1E-18, "a"}, // atto
365
+ {1E-21, "z"}, // zepto
366
+ {1E-24, "y"}, // yocto
367
+ {0, nullptr},
368
+ };
369
+
370
+ static string humanReadable(
371
+ double n, unsigned int decimals, const ScaleInfo* scales) {
372
+ if (std::isinf(n) || std::isnan(n)) {
373
+ return folly::to<string>(n);
374
+ }
375
+
376
+ const double absValue = fabs(n);
377
+ const ScaleInfo* scale = scales;
378
+ while (absValue < scale[0].boundary && scale[1].suffix != nullptr) {
379
+ ++scale;
380
+ }
381
+
382
+ const double scaledValue = n / scale->boundary;
383
+ return stringPrintf("%.*f%s", decimals, scaledValue, scale->suffix);
384
+ }
385
+
386
+ static string readableTime(double n, unsigned int decimals) {
387
+ return humanReadable(n, decimals, kTimeSuffixes);
388
+ }
389
+
390
+ static string metricReadable(double n, unsigned int decimals) {
391
+ return humanReadable(n, decimals, kMetricSuffixes);
392
+ }
393
+
394
+ namespace {
395
+
396
+ constexpr std::string_view kUnitHeaders = "relative time/iter iters/s";
397
+ constexpr std::string_view kUnitHeadersPadding = " ";
398
+ void printHeaderContents(std::string_view file) {
399
+ printf(
400
+ "%-.*s%*s%*s",
401
+ static_cast<int>(file.size()),
402
+ file.data(),
403
+ static_cast<int>(kUnitHeadersPadding.size()),
404
+ kUnitHeadersPadding.data(),
405
+ static_cast<int>(kUnitHeaders.size()),
406
+ kUnitHeaders.data());
407
+ }
408
+
409
+ void printDefaultHeaderContents(std::string_view file, size_t columns) {
410
+ const size_t maxFileNameChars =
411
+ columns - kUnitHeaders.size() - kUnitHeadersPadding.size();
412
+
413
+ if (file.size() <= maxFileNameChars) {
414
+ printHeaderContents(file);
415
+ } else {
416
+ std::string truncatedFile = std::string(file.begin(), file.end());
417
+ constexpr std::string_view overflowFilePrefix = "[...]";
418
+ const auto overflow = truncatedFile.size() - maxFileNameChars;
419
+ truncatedFile.erase(0, overflow);
420
+ truncatedFile.replace(0, overflowFilePrefix.size(), overflowFilePrefix);
421
+ printHeaderContents(truncatedFile);
422
+ }
423
+ }
424
+
425
+ void printSeparator(char pad, unsigned int columns) {
426
+ puts(string(columns, pad).c_str());
427
+ }
428
+
429
+ class BenchmarkResultsPrinter {
430
+ public:
431
+ BenchmarkResultsPrinter() : columns_(FLAGS_bm_result_width_chars) {}
432
+ explicit BenchmarkResultsPrinter(std::set<std::string> counterNames)
433
+ : counterNames_(std::move(counterNames)),
434
+ namesLength_{std::accumulate(
435
+ counterNames_.begin(),
436
+ counterNames_.end(),
437
+ size_t{0},
438
+ [](size_t acc, auto&& name) { return acc + 2 + name.length(); })},
439
+ columns_(FLAGS_bm_result_width_chars + namesLength_) {}
440
+
441
+ void separator(char pad) { printSeparator(pad, columns_); }
442
+
443
+ void header(std::string_view file) {
444
+ separator('=');
445
+ printDefaultHeaderContents(file, columns_);
446
+ for (auto const& name : counterNames_) {
447
+ printf(" %s", name.c_str());
448
+ }
449
+ printf("\n");
450
+ separator('=');
451
+ }
452
+
453
+ void print(const vector<detail::BenchmarkResult>& data) {
454
+ for (auto& datum : data) {
455
+ auto file = datum.file;
456
+ if (file != lastFile_) {
457
+ // New file starting
458
+ header(file);
459
+ lastFile_ = file;
460
+ }
461
+
462
+ string s = datum.name;
463
+ if (s == "-") {
464
+ // Simply draw a line across the benchmark results
465
+ separator('-');
466
+ continue;
467
+ }
468
+ if (s[0] == '"') {
469
+ // Simply print some text. Strips implied quote characters
470
+ // from the beginning and end of the name.
471
+ printf("%s\n", s.substr(1, s.length() - 2).c_str());
472
+ continue;
473
+ }
474
+ bool useBaseline = false;
475
+ // '%' indicates a relative benchmark.
476
+ if (s[0] == '%') {
477
+ s.erase(0, 1);
478
+ useBaseline = isBaselineSet();
479
+ } else {
480
+ baselineNsPerIter_ = datum.timeInNs;
481
+ useBaseline = false;
482
+ }
483
+ s.resize(columns_ - kUnitHeaders.size(), ' ');
484
+ const auto nsPerIter = datum.timeInNs;
485
+ const auto secPerIter = nsPerIter / 1E9;
486
+ const auto itersPerSec = (secPerIter == 0)
487
+ ? std::numeric_limits<double>::infinity()
488
+ : (1 / secPerIter);
489
+ if (!useBaseline) {
490
+ // Print without baseline
491
+ printf(
492
+ "%*s%8.8s %9.9s %8.8s",
493
+ static_cast<int>(s.size()),
494
+ s.c_str(),
495
+ "", // Padding for "relative" header.
496
+ readableTime(secPerIter, 2).c_str(),
497
+ metricReadable(itersPerSec, 2).c_str());
498
+ } else {
499
+ // Print with baseline
500
+ const auto rel = baselineNsPerIter_ / nsPerIter * 100.0;
501
+ printf(
502
+ "%*s%#7.5g%% %9.9s %8.8s",
503
+ static_cast<int>(s.size()),
504
+ s.c_str(),
505
+ rel,
506
+ readableTime(secPerIter, 2).c_str(),
507
+ metricReadable(itersPerSec, 2).c_str());
508
+ }
509
+ for (auto const& name : counterNames_) {
510
+ if (auto ptr = folly::get_ptr(datum.counters, name)) {
511
+ switch (ptr->type) {
512
+ case UserMetric::Type::TIME:
513
+ printf(
514
+ " %*s",
515
+ int(name.length()),
516
+ readableTime(ptr->value, 2).c_str());
517
+ break;
518
+ case UserMetric::Type::METRIC:
519
+ printf(
520
+ " %*s",
521
+ int(name.length()),
522
+ metricReadable(ptr->value, 2).c_str());
523
+ break;
524
+ case UserMetric::Type::CUSTOM:
525
+ default:
526
+ printf(" %*" PRId64, int(name.length()), ptr->value);
527
+ }
528
+ } else {
529
+ printf(" %*s", int(name.length()), "NaN");
530
+ }
531
+ }
532
+ printf("\n");
533
+ }
534
+ }
535
+
536
+ private:
537
+ bool isBaselineSet() {
538
+ return baselineNsPerIter_ != numeric_limits<double>::max();
539
+ }
540
+
541
+ std::set<std::string> counterNames_;
542
+ size_t namesLength_{0};
543
+ size_t columns_{0};
544
+ double baselineNsPerIter_{numeric_limits<double>::max()};
545
+ string lastFile_;
546
+ };
547
+ } // namespace
548
+
549
+ static void printBenchmarkResultsAsJson(
550
+ const vector<detail::BenchmarkResult>& data) {
551
+ dynamic d = dynamic::object;
552
+ for (auto& datum : data) {
553
+ d[datum.name] = datum.timeInNs * 1000.;
554
+ }
555
+
556
+ printf("%s\n", toPrettyJson(d).c_str());
557
+ }
558
+
559
+ void benchmarkResultsToDynamic(
560
+ const vector<detail::BenchmarkResult>& data, dynamic& out) {
561
+ out = dynamic::array;
562
+ for (auto& datum : data) {
563
+ if (!datum.counters.empty()) {
564
+ dynamic obj = dynamic::object;
565
+ for (auto& counter : datum.counters) {
566
+ dynamic counterInfo = dynamic::object;
567
+ counterInfo["value"] = counter.second.value;
568
+ counterInfo["type"] = static_cast<int>(counter.second.type);
569
+ obj[counter.first] = counterInfo;
570
+ }
571
+ out.push_back(
572
+ dynamic::array(datum.file, datum.name, datum.timeInNs, obj));
573
+ } else {
574
+ out.push_back(dynamic::array(datum.file, datum.name, datum.timeInNs));
575
+ }
576
+ }
577
+ }
578
+
579
+ void benchmarkResultsFromDynamic(
580
+ const dynamic& d, vector<detail::BenchmarkResult>& results) {
581
+ for (auto& datum : d) {
582
+ results.push_back(
583
+ {datum[0].asString(),
584
+ datum[1].asString(),
585
+ datum[2].asDouble(),
586
+ UserCounters{}});
587
+ }
588
+ }
589
+
590
+ static pair<StringPiece, StringPiece> resultKey(
591
+ const detail::BenchmarkResult& result) {
592
+ return pair<StringPiece, StringPiece>(result.file, result.name);
593
+ }
594
+
595
+ void printResultComparison(
596
+ const vector<detail::BenchmarkResult>& base,
597
+ const vector<detail::BenchmarkResult>& test) {
598
+ map<pair<StringPiece, StringPiece>, double> baselines;
599
+
600
+ for (auto& baseResult : base) {
601
+ baselines[resultKey(baseResult)] = baseResult.timeInNs;
602
+ }
603
+
604
+ // Width available
605
+ const size_t columns = FLAGS_bm_result_width_chars;
606
+
607
+ auto header = [&](const string_view& file) {
608
+ printSeparator('=', columns);
609
+ printDefaultHeaderContents(file, columns);
610
+ printf("\n");
611
+ printSeparator('=', columns);
612
+ };
613
+
614
+ string lastFile;
615
+
616
+ for (auto& datum : test) {
617
+ folly::Optional<double> baseline =
618
+ folly::get_optional(baselines, resultKey(datum));
619
+ auto file = datum.file;
620
+ if (file != lastFile) {
621
+ // New file starting
622
+ header(file);
623
+ lastFile = file;
624
+ }
625
+
626
+ string s = datum.name;
627
+ if (s == "-") {
628
+ printSeparator('-', columns);
629
+ continue;
630
+ }
631
+ if (s[0] == '%') {
632
+ s.erase(0, 1);
633
+ }
634
+ s.resize(columns - 29, ' ');
635
+ auto nsPerIter = datum.timeInNs;
636
+ auto secPerIter = nsPerIter / 1E9;
637
+ auto itersPerSec = (secPerIter == 0)
638
+ ? std::numeric_limits<double>::infinity()
639
+ : (1 / secPerIter);
640
+ if (!baseline) {
641
+ // Print without baseline
642
+ printf(
643
+ "%*s %9s %7s\n",
644
+ static_cast<int>(s.size()),
645
+ s.c_str(),
646
+ readableTime(secPerIter, 2).c_str(),
647
+ metricReadable(itersPerSec, 2).c_str());
648
+ } else {
649
+ // Print with baseline
650
+ auto rel = *baseline / nsPerIter * 100.0;
651
+ printf(
652
+ "%*s %7.2f%% %9s %7s\n",
653
+ static_cast<int>(s.size()),
654
+ s.c_str(),
655
+ rel,
656
+ readableTime(secPerIter, 2).c_str(),
657
+ metricReadable(itersPerSec, 2).c_str());
658
+ }
659
+ }
660
+ printSeparator('=', columns);
661
+ }
662
+
663
+ void checkRunMode() {
664
+ if (folly::kIsDebug || folly::kIsSanitize) {
665
+ std::cerr << "WARNING: Benchmark running "
666
+ << (folly::kIsDebug ? "in DEBUG mode" : "with SANITIZERS")
667
+ << std::endl;
668
+ }
669
+ }
670
+
671
+ namespace {
672
+
673
+ struct BenchmarksToRun {
674
+ const detail::BenchmarkRegistration* baseline = nullptr;
675
+ std::vector<const detail::BenchmarkRegistration*> benchmarks;
676
+ std::vector<size_t> separatorsAfter;
677
+ };
678
+
679
+ void addSeparator(BenchmarksToRun& res) {
680
+ size_t separatorAfter = res.benchmarks.size();
681
+ if (separatorAfter == 0) {
682
+ return;
683
+ }
684
+ if (res.separatorsAfter.empty() ||
685
+ res.separatorsAfter.back() != separatorAfter) {
686
+ res.separatorsAfter.push_back(res.benchmarks.size() - 1);
687
+ }
688
+ }
689
+
690
+ BenchmarksToRun selectBenchmarksToRun(
691
+ const std::vector<detail::BenchmarkRegistration>& benchmarks) {
692
+ BenchmarksToRun res;
693
+
694
+ folly::Optional<boost::regex> bmRegex;
695
+ folly::Optional<boost::regex> bmFileRegex;
696
+
697
+ res.benchmarks.reserve(benchmarks.size());
698
+
699
+ if (!FLAGS_bm_regex.empty()) {
700
+ bmRegex.emplace(FLAGS_bm_regex);
701
+ }
702
+
703
+ if (!FLAGS_bm_file_regex.empty()) {
704
+ bmFileRegex.emplace(FLAGS_bm_file_regex);
705
+ }
706
+
707
+ for (auto& bm : benchmarks) {
708
+ if (bm.name == "-") {
709
+ addSeparator(res);
710
+ continue;
711
+ }
712
+
713
+ if (bm.name == kGlobalBenchmarkBaseline) {
714
+ res.baseline = &bm;
715
+ continue;
716
+ }
717
+
718
+ bool matchedName = !bmRegex || boost::regex_search(bm.name, *bmRegex);
719
+ bool matchedFile =
720
+ !bmFileRegex || boost::regex_search(bm.file, *bmFileRegex);
721
+
722
+ if (matchedName && matchedFile) {
723
+ res.benchmarks.push_back(&bm);
724
+ }
725
+ }
726
+
727
+ if (bmRegex) {
728
+ res.separatorsAfter.clear();
729
+ }
730
+
731
+ CHECK(res.baseline);
732
+
733
+ return res;
734
+ }
735
+
736
+ void maybeRunWarmUpIteration(const BenchmarksToRun& toRun) {
737
+ bool shouldRun = FLAGS_bm_warm_up_iteration;
738
+
739
+ #if FOLLY_PERF_IS_SUPPORTED
740
+ shouldRun = shouldRun || !FLAGS_bm_perf_args.empty();
741
+ #endif
742
+
743
+ if (!shouldRun) {
744
+ return;
745
+ }
746
+
747
+ for (const auto* bm : toRun.benchmarks) {
748
+ bm->func(1);
749
+ }
750
+ }
751
+
752
+ class ShouldDrawLineTracker {
753
+ public:
754
+ explicit ShouldDrawLineTracker(const BenchmarksToRun& toRun)
755
+ : separatorsAfter_(&toRun.separatorsAfter) {}
756
+
757
+ bool operator()() {
758
+ std::size_t i = curI_++;
759
+ if (drawAfterI_ >= separatorsAfter_->size()) {
760
+ return false;
761
+ }
762
+ std::size_t nextToDrawAfter = (*separatorsAfter_)[drawAfterI_];
763
+ if (i == nextToDrawAfter) {
764
+ ++drawAfterI_;
765
+ return true;
766
+ }
767
+ return false;
768
+ }
769
+
770
+ private:
771
+ const std::vector<std::size_t>* separatorsAfter_;
772
+ std::size_t curI_ = 0;
773
+ std::size_t drawAfterI_ = 0;
774
+ };
775
+
776
+ std::pair<std::set<std::string>, std::vector<detail::BenchmarkResult>>
777
+ runBenchmarksWithPrinterImpl(
778
+ BenchmarkResultsPrinter* FOLLY_NULLABLE printer,
779
+ const BenchmarksToRun& toRun) {
780
+ vector<detail::BenchmarkResult> results;
781
+ results.reserve(toRun.benchmarks.size());
782
+
783
+ // PLEASE KEEP QUIET. MEASUREMENTS IN PROGRESS.
784
+
785
+ auto const globalBaseline =
786
+ runBenchmarkGetNSPerIteration(toRun.baseline->func, 0);
787
+
788
+ std::set<std::string> counterNames;
789
+ ShouldDrawLineTracker shouldDrawLineTracker(toRun);
790
+ for (std::size_t i = 0; i != toRun.benchmarks.size(); ++i) {
791
+ std::pair<double, UserCounters> elapsed;
792
+ const detail::BenchmarkRegistration& bm = *toRun.benchmarks[i];
793
+ bool shoudDrawLineAfter = shouldDrawLineTracker();
794
+
795
+ if (FLAGS_bm_profile) {
796
+ elapsed = runProfilingGetNSPerIteration(bm.func, globalBaseline.first);
797
+ } else {
798
+ elapsed = FLAGS_bm_estimate_time
799
+ ? runBenchmarkGetNSPerIterationEstimate(bm.func, globalBaseline.first)
800
+ : runBenchmarkGetNSPerIteration(bm.func, globalBaseline.first);
801
+ }
802
+
803
+ // if customized user counters is used, it cannot print the result in real
804
+ // time as it needs to run all cases first to know the complete set of
805
+ // counters have been used, then the header can be printed out properly
806
+ if (printer != nullptr) {
807
+ printer->print({{bm.file, bm.name, elapsed.first, elapsed.second}});
808
+ if (shoudDrawLineAfter) {
809
+ printer->separator('-');
810
+ }
811
+ }
812
+ results.push_back({bm.file, bm.name, elapsed.first, elapsed.second});
813
+
814
+ // get all counter names
815
+ for (auto const& kv : elapsed.second) {
816
+ counterNames.insert(kv.first);
817
+ }
818
+ }
819
+
820
+ // MEASUREMENTS DONE.
821
+
822
+ return std::make_pair(std::move(counterNames), std::move(results));
823
+ }
824
+
825
+ std::vector<detail::BenchmarkResult> resultsFromFile(
826
+ const std::string& filename) {
827
+ std::string content;
828
+ readFile(filename.c_str(), content);
829
+ std::vector<detail::BenchmarkResult> ret;
830
+ if (!content.empty()) {
831
+ benchmarkResultsFromDynamic(parseJson(content), ret);
832
+ }
833
+ return ret;
834
+ }
835
+
836
+ bool writeResultsToFile(
837
+ const std::vector<detail::BenchmarkResult>& results,
838
+ const std::string& filename) {
839
+ dynamic d;
840
+ benchmarkResultsToDynamic(results, d);
841
+ return writeFile(toPrettyJson(d), filename.c_str());
842
+ }
843
+
844
+ } // namespace
845
+
846
+ namespace detail {
847
+
848
+ std::ostream& operator<<(std::ostream& os, const BenchmarkResult& x) {
849
+ folly::dynamic r;
850
+ benchmarkResultsToDynamic({x}, r);
851
+ return os << r[0];
852
+ }
853
+
854
+ bool operator==(const BenchmarkResult& x, const BenchmarkResult& y) {
855
+ auto xtime = static_cast<std::uint64_t>(x.timeInNs * 1000);
856
+ auto ytime = static_cast<std::uint64_t>(y.timeInNs * 1000);
857
+ return x.name == y.name && x.file == y.file && xtime == ytime &&
858
+ x.counters == y.counters;
859
+ }
860
+
861
+ std::chrono::high_resolution_clock::duration BenchmarkSuspenderBase::timeSpent;
862
+
863
+ void BenchmarkingStateBase::addBenchmarkImpl(
864
+ const char* file, StringPiece name, BenchmarkFun fun, bool useCounter) {
865
+ std::lock_guard<std::mutex> guard(mutex_);
866
+ benchmarks_.push_back({file, name.str(), std::move(fun), useCounter});
867
+ }
868
+
869
+ bool BenchmarkingStateBase::useCounters() const {
870
+ std::lock_guard<std::mutex> guard(mutex_);
871
+ return std::any_of(
872
+ benchmarks_.begin(), benchmarks_.end(), [](const auto& bm) {
873
+ return bm.useCounter;
874
+ });
875
+ }
876
+
877
+ std::vector<std::string> BenchmarkingStateBase::getBenchmarkList() {
878
+ std::vector<std::string> bmNames;
879
+ auto toRun = selectBenchmarksToRun(benchmarks_);
880
+ for (auto benchmarkRegistration : toRun.benchmarks) {
881
+ bmNames.push_back(benchmarkRegistration->name);
882
+ }
883
+
884
+ return bmNames;
885
+ }
886
+
887
+ // static
888
+ folly::StringPiece BenchmarkingStateBase::getGlobalBaselineNameForTests() {
889
+ return kGlobalBenchmarkBaseline;
890
+ }
891
+
892
+ PerfScoped BenchmarkingStateBase::doSetUpPerfScoped(
893
+ const std::vector<std::string>& args) const {
894
+ return PerfScoped{args};
895
+ }
896
+
897
+ PerfScoped BenchmarkingStateBase::setUpPerfScoped() const {
898
+ std::vector<std::string> perfArgs;
899
+ #if FOLLY_PERF_IS_SUPPORTED
900
+ folly::split(' ', FLAGS_bm_perf_args, perfArgs, true);
901
+ #endif
902
+ if (perfArgs.empty()) {
903
+ return PerfScoped{};
904
+ }
905
+ return doSetUpPerfScoped(perfArgs);
906
+ }
907
+
908
+ template <typename Printer>
909
+ std::pair<std::set<std::string>, std::vector<BenchmarkResult>>
910
+ BenchmarkingStateBase::runBenchmarksWithPrinter(Printer* printer) const {
911
+ std::lock_guard<std::mutex> guard(mutex_);
912
+ BenchmarksToRun toRun = selectBenchmarksToRun(benchmarks_);
913
+ maybeRunWarmUpIteration(toRun);
914
+
915
+ detail::PerfScoped perf = setUpPerfScoped();
916
+ return runBenchmarksWithPrinterImpl(printer, toRun);
917
+ }
918
+
919
+ std::vector<BenchmarkResult> BenchmarkingStateBase::runBenchmarksWithResults()
920
+ const {
921
+ return runBenchmarksWithPrinter(
922
+ static_cast<BenchmarkResultsPrinter*>(nullptr))
923
+ .second;
924
+ }
925
+
926
+ std::vector<BenchmarkResult> runBenchmarksWithResults() {
927
+ return globalBenchmarkState().runBenchmarksWithResults();
928
+ }
929
+
930
+ } // namespace detail
931
+
932
+ void runBenchmarks() {
933
+ auto& state = detail::globalBenchmarkState();
934
+
935
+ if (FLAGS_bm_list) {
936
+ auto bmNames = state.getBenchmarkList();
937
+ for (auto testName : bmNames) {
938
+ std::cout << testName << std::endl;
939
+ }
940
+ return;
941
+ }
942
+
943
+ if (FLAGS_bm_profile) {
944
+ printf(
945
+ "WARNING: Running with constant number of iterations. Results might be jittery.\n");
946
+ }
947
+
948
+ if (FLAGS_bm_min_iters >= FLAGS_bm_max_iters) {
949
+ std::cerr << "WARNING: bm_min_iters > bm_max_iters; increasing the max"
950
+ << std::endl;
951
+ FLAGS_bm_max_iters = FLAGS_bm_min_iters + 1;
952
+ }
953
+
954
+ checkRunMode();
955
+
956
+ BenchmarkResultsPrinter printer;
957
+ bool useCounter = state.useCounters();
958
+
959
+ // PLEASE KEEP QUIET. MEASUREMENTS IN PROGRESS.
960
+
961
+ const bool shouldPrintInline =
962
+ FLAGS_bm_relative_to.empty() && !FLAGS_json && !useCounter;
963
+ auto benchmarkResults =
964
+ state.runBenchmarksWithPrinter(shouldPrintInline ? &printer : nullptr);
965
+
966
+ // PLEASE MAKE NOISE. MEASUREMENTS DONE.
967
+
968
+ if (FLAGS_json) {
969
+ printBenchmarkResultsAsJson(benchmarkResults.second);
970
+ } else if (!FLAGS_bm_relative_to.empty()) {
971
+ printResultComparison(
972
+ resultsFromFile(FLAGS_bm_relative_to), benchmarkResults.second);
973
+ } else if (!shouldPrintInline) {
974
+ printer = BenchmarkResultsPrinter{std::move(benchmarkResults.first)};
975
+ printer.print(benchmarkResults.second);
976
+ printer.separator('=');
977
+ }
978
+
979
+ if (!FLAGS_bm_json_verbose.empty()) {
980
+ writeResultsToFile(benchmarkResults.second, FLAGS_bm_json_verbose);
981
+ }
982
+
983
+ checkRunMode();
984
+ }
985
+
986
+ } // namespace folly