react-native-windows 0.84.0-preview.9 → 0.84.1

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 (954) hide show
  1. package/Common/unicode.cpp +36 -0
  2. package/Common/unicode.h +8 -0
  3. package/Directory.Build.props +2 -17
  4. package/Folly/ThreadNameStub.cpp +4 -6
  5. package/Microsoft.ReactNative/Fabric/Composition/CompositionDynamicAutomationProvider.cpp +5 -0
  6. package/Microsoft.ReactNative/Fabric/Composition/CompositionEventHandler.cpp +91 -23
  7. package/Microsoft.ReactNative/Fabric/Composition/CompositionEventHandler.h +11 -0
  8. package/Microsoft.ReactNative/Fabric/Composition/ParagraphComponentView.cpp +6 -4
  9. package/Microsoft.ReactNative/Fabric/Composition/ScrollViewComponentView.cpp +28 -6
  10. package/Microsoft.ReactNative/Fabric/Composition/TextDrawing.cpp +1 -1
  11. package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.cpp +1 -1
  12. package/Microsoft.ReactNative/Fabric/Composition/TooltipService.cpp +80 -0
  13. package/Microsoft.ReactNative/Fabric/Composition/TooltipService.h +17 -0
  14. package/Microsoft.ReactNative/Fabric/platform/react/renderer/textlayoutmanager/WindowsTextLayoutManager.cpp +1 -1
  15. package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj +4 -9
  16. package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj.filters +0 -3
  17. package/Microsoft.ReactNative/Utils/LocalBundleReader.cpp +33 -25
  18. package/Microsoft.ReactNative/Utils/LocalBundleReader.h +5 -3
  19. package/Microsoft.ReactNative/Utils/UwpScriptStore.cpp +2 -2
  20. package/Microsoft.ReactNative/Utils/UwpScriptStore.h +3 -2
  21. package/Microsoft.ReactNative.Managed/Microsoft.ReactNative.Managed.csproj +3 -3
  22. package/Microsoft.ReactNative.Managed.CodeGen/Microsoft.ReactNative.Managed.CodeGen.csproj +10 -10
  23. package/Microsoft.ReactNative.Managed.CodeGen/Properties/PublishProfiles/DeployAsTool-Debug.pubxml +1 -1
  24. package/Microsoft.ReactNative.Managed.CodeGen/Properties/PublishProfiles/DeployAsTool-Release.pubxml +1 -1
  25. package/PropertySheets/CIBuildOptimizations.props +2 -2
  26. package/PropertySheets/Generated/PackageVersion.g.props +3 -3
  27. package/PropertySheets/JSEngine.props +1 -1
  28. package/PropertySheets/NuGet.LockFile.props +10 -1
  29. package/PropertySheets/React.Cpp.props +7 -6
  30. package/PropertySheets/WinUI.props +2 -2
  31. package/ReactCommon/ReactCommon.vcxproj +0 -5
  32. package/Scripts/JustMyXaml.ps1 +8 -8
  33. package/Scripts/NuGetRestoreForceEvaluateAllSolutions.ps1 +61 -6
  34. package/Scripts/Tfs/Layout-Desktop-Headers.ps1 +4 -37
  35. package/Scripts/UnitTest.ps1 +3 -1
  36. package/Scripts/UpdateNightlyDependencies.ps1 +47 -0
  37. package/Scripts/creaternwapp.cmd +5 -8
  38. package/Scripts/creaternwlib.cmd +10 -23
  39. package/Scripts/rnw-dependencies.ps1 +15 -16
  40. package/Shared/DevSupportManager.cpp +55 -48
  41. package/Shared/DevSupportManager.h +0 -1
  42. package/Shared/Modules/IWebSocketModuleContentHandler.h +15 -0
  43. package/Shared/Modules/WebSocketModule.cpp +8 -3
  44. package/Shared/Networking/DefaultBlobResource.cpp +37 -0
  45. package/Shared/Networking/DefaultBlobResource.h +12 -0
  46. package/Shared/Networking/WinRTWebSocketResource.h +5 -1
  47. package/Shared/Shared.vcxitems +2 -0
  48. package/{Folly → external}/.clang-format +0 -1
  49. package/external/External.vcxitems +10 -0
  50. package/external/fast-float/.syncignore +10 -0
  51. package/external/fast-float/LICENSE-APACHE +190 -0
  52. package/external/fast-float/LICENSE-BOOST +23 -0
  53. package/external/fast-float/LICENSE-MIT +27 -0
  54. package/external/fast-float/README.md +545 -0
  55. package/external/fast-float/cgmanifest.json +15 -0
  56. package/external/fast-float/fast-float.vcxitems +14 -0
  57. package/external/fast-float/include/fast_float/ascii_number.h +588 -0
  58. package/external/fast-float/include/fast_float/bigint.h +638 -0
  59. package/external/fast-float/include/fast_float/constexpr_feature_detect.h +46 -0
  60. package/external/fast-float/include/fast_float/decimal_to_binary.h +212 -0
  61. package/external/fast-float/include/fast_float/digit_comparison.h +457 -0
  62. package/external/fast-float/include/fast_float/fast_float.h +59 -0
  63. package/external/fast-float/include/fast_float/fast_table.h +708 -0
  64. package/external/fast-float/include/fast_float/float_common.h +1240 -0
  65. package/external/fast-float/include/fast_float/parse_number.h +399 -0
  66. package/external/fast-float/sync-config.json +8 -0
  67. package/external/fmt/.syncignore +10 -0
  68. package/external/fmt/CONTRIBUTING.md +20 -0
  69. package/external/fmt/LICENSE +27 -0
  70. package/external/fmt/README.md +484 -0
  71. package/external/fmt/doc/ChangeLog-old.md +3290 -0
  72. package/external/fmt/doc/api.md +650 -0
  73. package/external/fmt/doc/fmt.css +61 -0
  74. package/external/fmt/doc/fmt.js +4 -0
  75. package/external/fmt/doc/get-started.md +222 -0
  76. package/external/fmt/doc/index.md +151 -0
  77. package/external/fmt/doc/perf.svg +1 -0
  78. package/external/fmt/doc/python-license.txt +290 -0
  79. package/external/fmt/doc/syntax.md +887 -0
  80. package/external/fmt/fmt.vcxitems +28 -0
  81. package/external/fmt/include/fmt/args.h +228 -0
  82. package/external/fmt/include/fmt/base.h +3077 -0
  83. package/external/fmt/include/fmt/chrono.h +2432 -0
  84. package/external/fmt/include/fmt/color.h +612 -0
  85. package/external/fmt/include/fmt/compile.h +529 -0
  86. package/external/fmt/include/fmt/core.h +5 -0
  87. package/external/fmt/include/fmt/format-inl.h +1928 -0
  88. package/external/fmt/include/fmt/format.h +4427 -0
  89. package/external/fmt/include/fmt/os.h +439 -0
  90. package/external/fmt/include/fmt/ostream.h +211 -0
  91. package/external/fmt/include/fmt/printf.h +656 -0
  92. package/external/fmt/include/fmt/ranges.h +882 -0
  93. package/external/fmt/include/fmt/std.h +699 -0
  94. package/external/fmt/include/fmt/xchar.h +322 -0
  95. package/external/fmt/src/fmt.cc +135 -0
  96. package/external/fmt/src/format.cc +43 -0
  97. package/external/fmt/src/os.cc +403 -0
  98. package/external/fmt/sync-config.json +8 -0
  99. package/external/folly/.syncignore +60 -0
  100. package/external/folly/LICENSE +200 -0
  101. package/external/folly/README.md +263 -0
  102. package/{fmt → external/folly/folly}/.clang-format +0 -1
  103. package/external/folly/folly/AtomicHashArray-inl.h +546 -0
  104. package/external/folly/folly/AtomicHashArray.h +431 -0
  105. package/external/folly/folly/AtomicHashMap-inl.h +653 -0
  106. package/external/folly/folly/AtomicHashMap.h +484 -0
  107. package/external/folly/folly/AtomicIntrusiveLinkedList.h +206 -0
  108. package/external/folly/folly/AtomicLinkedList.h +110 -0
  109. package/external/folly/folly/AtomicUnorderedMap.h +522 -0
  110. package/external/folly/folly/BUCK +1631 -0
  111. package/external/folly/folly/BUILD_MODE.bzl +72 -0
  112. package/external/folly/folly/Benchmark.cpp +986 -0
  113. package/external/folly/folly/Benchmark.h +680 -0
  114. package/external/folly/folly/BenchmarkUtil.h +47 -0
  115. package/external/folly/folly/Bits.h +17 -0
  116. package/external/folly/folly/CMakeLists.txt +110 -0
  117. package/external/folly/folly/CPortability.h +338 -0
  118. package/external/folly/folly/CancellationToken-inl.h +449 -0
  119. package/external/folly/folly/CancellationToken.cpp +250 -0
  120. package/external/folly/folly/CancellationToken.h +365 -0
  121. package/external/folly/folly/Chrono.h +132 -0
  122. package/external/folly/folly/ClockGettimeWrappers.cpp +93 -0
  123. package/external/folly/folly/ClockGettimeWrappers.h +29 -0
  124. package/external/folly/folly/ConcurrentBitSet.h +157 -0
  125. package/external/folly/folly/ConcurrentLazy.h +74 -0
  126. package/external/folly/folly/ConcurrentSkipList-inl.h +341 -0
  127. package/external/folly/folly/ConcurrentSkipList.h +824 -0
  128. package/external/folly/folly/ConstructorCallbackList.h +158 -0
  129. package/external/folly/folly/Conv.h +2026 -0
  130. package/external/folly/folly/CppAttributes.h +170 -0
  131. package/external/folly/folly/CpuId.h +297 -0
  132. package/external/folly/folly/DefaultKeepAliveExecutor.h +172 -0
  133. package/external/folly/folly/Demangle.cpp +255 -0
  134. package/external/folly/folly/Demangle.h +73 -0
  135. package/external/folly/folly/DiscriminatedPtr.h +236 -0
  136. package/external/folly/folly/DynamicConverter.h +17 -0
  137. package/external/folly/folly/Exception.h +150 -0
  138. package/external/folly/folly/ExceptionString.cpp +51 -0
  139. package/external/folly/folly/ExceptionString.h +33 -0
  140. package/external/folly/folly/ExceptionWrapper-inl.h +264 -0
  141. package/external/folly/folly/ExceptionWrapper.cpp +37 -0
  142. package/external/folly/folly/ExceptionWrapper.h +377 -0
  143. package/external/folly/folly/Executor.cpp +111 -0
  144. package/external/folly/folly/Executor.h +351 -0
  145. package/external/folly/folly/Expected.h +1725 -0
  146. package/external/folly/folly/FBString.h +2888 -0
  147. package/external/folly/folly/FBVector.h +17 -0
  148. package/external/folly/folly/File.cpp +180 -0
  149. package/external/folly/folly/File.h +177 -0
  150. package/external/folly/folly/FileUtil.cpp +378 -0
  151. package/external/folly/folly/FileUtil.h +332 -0
  152. package/external/folly/folly/Fingerprint.cpp +135 -0
  153. package/external/folly/folly/Fingerprint.h +289 -0
  154. package/external/folly/folly/FixedString.h +2965 -0
  155. package/external/folly/folly/FollyMemcpy.cpp +30 -0
  156. package/external/folly/folly/FollyMemcpy.h +23 -0
  157. package/external/folly/folly/FollyMemset.cpp +29 -0
  158. package/external/folly/folly/FollyMemset.h +25 -0
  159. package/external/folly/folly/Format-inl.h +1152 -0
  160. package/external/folly/folly/Format.cpp +429 -0
  161. package/external/folly/folly/Format.h +463 -0
  162. package/external/folly/folly/FormatArg.h +285 -0
  163. package/external/folly/folly/FormatTraits.h +65 -0
  164. package/external/folly/folly/Function.h +1159 -0
  165. package/external/folly/folly/GLog.h +85 -0
  166. package/external/folly/folly/GroupVarint.cpp +153 -0
  167. package/external/folly/folly/GroupVarint.h +630 -0
  168. package/external/folly/folly/Hash.h +20 -0
  169. package/external/folly/folly/IPAddress.cpp +490 -0
  170. package/external/folly/folly/IPAddress.h +667 -0
  171. package/external/folly/folly/IPAddressException.h +82 -0
  172. package/external/folly/folly/IPAddressV4.cpp +305 -0
  173. package/external/folly/folly/IPAddressV4.h +495 -0
  174. package/external/folly/folly/IPAddressV6.cpp +541 -0
  175. package/external/folly/folly/IPAddressV6.h +627 -0
  176. package/external/folly/folly/Indestructible.h +164 -0
  177. package/external/folly/folly/IndexedMemPool.h +550 -0
  178. package/external/folly/folly/IntrusiveList.h +17 -0
  179. package/external/folly/folly/Lazy.h +142 -0
  180. package/external/folly/folly/Likely.h +76 -0
  181. package/external/folly/folly/MPMCPipeline.h +280 -0
  182. package/external/folly/folly/MPMCQueue.h +1556 -0
  183. package/external/folly/folly/MacAddress.cpp +188 -0
  184. package/external/folly/folly/MacAddress.h +260 -0
  185. package/external/folly/folly/MapUtil.h +17 -0
  186. package/external/folly/folly/Math.h +258 -0
  187. package/external/folly/folly/MaybeManagedPtr.h +120 -0
  188. package/external/folly/folly/Memory.h +900 -0
  189. package/external/folly/folly/MicroLock.cpp +76 -0
  190. package/external/folly/folly/MicroLock.h +354 -0
  191. package/external/folly/folly/MicroSpinLock.h +17 -0
  192. package/external/folly/folly/MoveWrapper.h +76 -0
  193. package/external/folly/folly/ObserverContainer.h +1026 -0
  194. package/external/folly/folly/Optional.h +743 -0
  195. package/external/folly/folly/Overload.h +325 -0
  196. package/external/folly/folly/PackedSyncPtr.h +147 -0
  197. package/external/folly/folly/Padded.h +464 -0
  198. package/external/folly/folly/Poly-inl.h +230 -0
  199. package/external/folly/folly/Poly.h +1095 -0
  200. package/external/folly/folly/PolyException.h +43 -0
  201. package/external/folly/folly/Portability.h +644 -0
  202. package/external/folly/folly/Preprocessor.h +236 -0
  203. package/external/folly/folly/ProducerConsumerQueue.h +182 -0
  204. package/external/folly/folly/RWSpinLock.h +17 -0
  205. package/external/folly/folly/Random-inl.h +86 -0
  206. package/external/folly/folly/Random.cpp +184 -0
  207. package/external/folly/folly/Random.h +434 -0
  208. package/external/folly/folly/Range.h +1772 -0
  209. package/external/folly/folly/Replaceable.h +636 -0
  210. package/external/folly/folly/ScopeGuard.cpp +29 -0
  211. package/external/folly/folly/ScopeGuard.h +420 -0
  212. package/external/folly/folly/SharedMutex.cpp +81 -0
  213. package/external/folly/folly/SharedMutex.h +1751 -0
  214. package/external/folly/folly/Singleton-inl.h +332 -0
  215. package/external/folly/folly/Singleton.cpp +512 -0
  216. package/external/folly/folly/Singleton.h +891 -0
  217. package/external/folly/folly/SingletonThreadLocal.cpp +53 -0
  218. package/external/folly/folly/SingletonThreadLocal.h +263 -0
  219. package/external/folly/folly/SocketAddress.cpp +786 -0
  220. package/external/folly/folly/SocketAddress.h +768 -0
  221. package/external/folly/folly/SpinLock.h +55 -0
  222. package/external/folly/folly/String-inl.h +668 -0
  223. package/external/folly/folly/String.cpp +777 -0
  224. package/external/folly/folly/String.h +767 -0
  225. package/external/folly/folly/Subprocess.cpp +1142 -0
  226. package/external/folly/folly/Subprocess.h +1055 -0
  227. package/external/folly/folly/Synchronized.h +1833 -0
  228. package/external/folly/folly/SynchronizedPtr.h +106 -0
  229. package/external/folly/folly/ThreadCachedInt.h +175 -0
  230. package/external/folly/folly/ThreadLocal.h +478 -0
  231. package/external/folly/folly/TimeoutQueue.cpp +78 -0
  232. package/external/folly/folly/TimeoutQueue.h +123 -0
  233. package/external/folly/folly/TokenBucket.h +673 -0
  234. package/external/folly/folly/Traits.h +1442 -0
  235. package/external/folly/folly/Try-inl.h +372 -0
  236. package/external/folly/folly/Try.cpp +23 -0
  237. package/external/folly/folly/Try.h +728 -0
  238. package/external/folly/folly/UTF8String.h +56 -0
  239. package/external/folly/folly/Unicode.cpp +201 -0
  240. package/external/folly/folly/Unicode.h +94 -0
  241. package/external/folly/folly/Unit.h +65 -0
  242. package/external/folly/folly/Uri-inl.h +101 -0
  243. package/external/folly/folly/Uri.cpp +190 -0
  244. package/external/folly/folly/Uri.h +142 -0
  245. package/external/folly/folly/Utility.h +932 -0
  246. package/external/folly/folly/VERSION +1 -0
  247. package/external/folly/folly/Varint.h +230 -0
  248. package/external/folly/folly/VirtualExecutor.h +17 -0
  249. package/external/folly/folly/algorithm/simd/BUCK +47 -0
  250. package/external/folly/folly/algorithm/simd/Contains.cpp +42 -0
  251. package/external/folly/folly/algorithm/simd/Contains.h +116 -0
  252. package/external/folly/folly/algorithm/simd/FindFixed.h +301 -0
  253. package/external/folly/folly/algorithm/simd/Ignore.h +52 -0
  254. package/external/folly/folly/algorithm/simd/Movemask.h +207 -0
  255. package/external/folly/folly/algorithm/simd/detail/BUCK +70 -0
  256. package/external/folly/folly/algorithm/simd/detail/ContainsImpl.h +91 -0
  257. package/external/folly/folly/algorithm/simd/detail/SimdAnyOf.h +83 -0
  258. package/external/folly/folly/algorithm/simd/detail/SimdForEach.h +209 -0
  259. package/external/folly/folly/algorithm/simd/detail/SimdPlatform.h +445 -0
  260. package/external/folly/folly/algorithm/simd/detail/Traits.h +125 -0
  261. package/external/folly/folly/algorithm/simd/detail/UnrollUtils.h +126 -0
  262. package/external/folly/folly/base64.h +264 -0
  263. package/external/folly/folly/chrono/BUCK +29 -0
  264. package/external/folly/folly/chrono/Clock.h +65 -0
  265. package/external/folly/folly/chrono/Conv.h +712 -0
  266. package/external/folly/folly/chrono/test/BUCK +26 -0
  267. package/external/folly/folly/chrono/test/ClockTest.cpp +68 -0
  268. package/external/folly/folly/chrono/test/ConvTest.cpp +652 -0
  269. package/external/folly/folly/concurrency/AtomicSharedPtr.h +387 -0
  270. package/external/folly/folly/concurrency/BUCK +170 -0
  271. package/external/folly/folly/concurrency/CacheLocality.h +460 -0
  272. package/external/folly/folly/concurrency/ConcurrentHashMap.h +822 -0
  273. package/external/folly/folly/concurrency/CoreCachedSharedPtr.h +232 -0
  274. package/external/folly/folly/concurrency/DeadlockDetector.cpp +27 -0
  275. package/external/folly/folly/concurrency/DeadlockDetector.h +44 -0
  276. package/external/folly/folly/concurrency/DynamicBoundedQueue.h +751 -0
  277. package/external/folly/folly/concurrency/PriorityUnboundedQueueSet.h +207 -0
  278. package/external/folly/folly/concurrency/ProcessLocalUniqueId.cpp +46 -0
  279. package/external/folly/folly/concurrency/ProcessLocalUniqueId.h +38 -0
  280. package/external/folly/folly/concurrency/SingletonRelaxedCounter.h +325 -0
  281. package/external/folly/folly/concurrency/ThreadCachedSynchronized.h +227 -0
  282. package/external/folly/folly/concurrency/UnboundedQueue.h +891 -0
  283. package/external/folly/folly/concurrency/container/BUCK +77 -0
  284. package/external/folly/folly/concurrency/container/FlatCombiningPriorityQueue.h +426 -0
  285. package/external/folly/folly/concurrency/container/LockFreeRingBuffer.h +306 -0
  286. package/external/folly/folly/concurrency/container/RelaxedConcurrentPriorityQueue.h +1212 -0
  287. package/external/folly/folly/concurrency/container/SingleWriterFixedHashMap.h +322 -0
  288. package/external/folly/folly/concurrency/container/atomic_grow_array.h +564 -0
  289. package/external/folly/folly/concurrency/container/test/BUCK +75 -0
  290. package/external/folly/folly/concurrency/container/test/FlatCombiningPriorityQueueTest.cpp +570 -0
  291. package/external/folly/folly/concurrency/container/test/LockFreeRingBufferTest.cpp +276 -0
  292. package/external/folly/folly/concurrency/container/test/RelaxedConcurrentPriorityQueueTest.cpp +1570 -0
  293. package/external/folly/folly/concurrency/container/test/SingleWriterFixedHashMapTest.cpp +401 -0
  294. package/external/folly/folly/concurrency/container/test/atomic_grow_array_test.cpp +187 -0
  295. package/external/folly/folly/concurrency/detail/AtomicSharedPtr-detail.h +212 -0
  296. package/external/folly/folly/concurrency/detail/ConcurrentHashMap-detail.h +1911 -0
  297. package/external/folly/folly/concurrency/memory/AtomicReadMostlyMainPtr.cpp +43 -0
  298. package/external/folly/folly/concurrency/memory/AtomicReadMostlyMainPtr.h +190 -0
  299. package/external/folly/folly/concurrency/memory/BUCK +53 -0
  300. package/external/folly/folly/concurrency/memory/PrimaryPtr.h +338 -0
  301. package/external/folly/folly/concurrency/memory/ReadMostlySharedPtr.h +511 -0
  302. package/external/folly/folly/concurrency/memory/TLRefCount.h +228 -0
  303. package/external/folly/folly/concurrency/memory/test/AtomicReadMostlyMainPtrBenchmark.cpp +56 -0
  304. package/external/folly/folly/concurrency/memory/test/AtomicReadMostlyMainPtrTest.cpp +454 -0
  305. package/external/folly/folly/concurrency/memory/test/BUCK +95 -0
  306. package/external/folly/folly/concurrency/memory/test/PrimaryPtrTest.cpp +303 -0
  307. package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrBenchmark.cpp +138 -0
  308. package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrStressTest.cpp +75 -0
  309. package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrTest.cpp +378 -0
  310. package/external/folly/folly/concurrency/memory/test/RefCountBenchmark.cpp +90 -0
  311. package/external/folly/folly/concurrency/memory/test/RefCountTest.cpp +168 -0
  312. package/external/folly/folly/concurrency/test/AtomicSharedPtrCounted.h +156 -0
  313. package/external/folly/folly/concurrency/test/AtomicSharedPtrPerformance.cpp +255 -0
  314. package/external/folly/folly/concurrency/test/AtomicSharedPtrTest.cpp +257 -0
  315. package/external/folly/folly/concurrency/test/BUCK +229 -0
  316. package/external/folly/folly/concurrency/test/CacheLocalityBenchmark.cpp +392 -0
  317. package/external/folly/folly/concurrency/test/CacheLocalityTest.cpp +1229 -0
  318. package/external/folly/folly/concurrency/test/ConcurrentHashMapBench.cpp +260 -0
  319. package/external/folly/folly/concurrency/test/ConcurrentHashMapTest.cpp +1242 -0
  320. package/external/folly/folly/concurrency/test/CoreCachedSharedPtrTest.cpp +408 -0
  321. package/external/folly/folly/concurrency/test/DynamicBoundedQueueTest.cpp +984 -0
  322. package/external/folly/folly/concurrency/test/PriorityUnboundedQueueSetTest.cpp +73 -0
  323. package/external/folly/folly/concurrency/test/ProcessLocalUniqueIdTest.cpp +66 -0
  324. package/external/folly/folly/concurrency/test/SingletonRelaxedCounterBench.cpp +101 -0
  325. package/external/folly/folly/concurrency/test/SingletonRelaxedCounterTest.cpp +185 -0
  326. package/external/folly/folly/concurrency/test/ThreadCachedSynchronizedBench.cpp +76 -0
  327. package/external/folly/folly/concurrency/test/ThreadCachedSynchronizedTest.cpp +93 -0
  328. package/external/folly/folly/concurrency/test/UnboundedQueueTest.cpp +1302 -0
  329. package/external/folly/folly/container/Access.h +57 -0
  330. package/external/folly/folly/container/Array.h +87 -0
  331. package/external/folly/folly/container/BUCK +353 -0
  332. package/external/folly/folly/container/BitIterator.h +203 -0
  333. package/external/folly/folly/container/Enumerate.h +162 -0
  334. package/external/folly/folly/container/EvictingCacheMap.h +730 -0
  335. package/external/folly/folly/container/F14.md +300 -0
  336. package/external/folly/folly/container/F14Map-fwd.h +113 -0
  337. package/external/folly/folly/container/F14Map.h +2108 -0
  338. package/external/folly/folly/container/F14Set-fwd.h +95 -0
  339. package/external/folly/folly/container/F14Set.h +1603 -0
  340. package/external/folly/folly/container/FBVector.h +1711 -0
  341. package/external/folly/folly/container/Foreach-inl.h +316 -0
  342. package/external/folly/folly/container/Foreach.h +209 -0
  343. package/external/folly/folly/container/HeterogeneousAccess-fwd.h +33 -0
  344. package/external/folly/folly/container/HeterogeneousAccess.h +171 -0
  345. package/external/folly/folly/container/IntrusiveHeap.h +268 -0
  346. package/external/folly/folly/container/IntrusiveList.h +131 -0
  347. package/external/folly/folly/container/Iterator.h +843 -0
  348. package/external/folly/folly/container/MapUtil.h +376 -0
  349. package/external/folly/folly/container/Merge.h +90 -0
  350. package/external/folly/folly/container/RegexMatchCache.cpp +521 -0
  351. package/external/folly/folly/container/RegexMatchCache.h +699 -0
  352. package/external/folly/folly/container/Reserve.h +109 -0
  353. package/external/folly/folly/container/SparseByteSet.h +123 -0
  354. package/external/folly/folly/container/View.h +81 -0
  355. package/external/folly/folly/container/WeightedEvictingCacheMap.h +651 -0
  356. package/external/folly/folly/container/detail/BUCK +115 -0
  357. package/external/folly/folly/container/detail/BitIteratorDetail.h +87 -0
  358. package/external/folly/folly/container/detail/F14Defaults.h +34 -0
  359. package/external/folly/folly/container/detail/F14IntrinsicsAvailability.h +67 -0
  360. package/external/folly/folly/container/detail/F14MapFallback.h +717 -0
  361. package/external/folly/folly/container/detail/F14Mask.h +235 -0
  362. package/external/folly/folly/container/detail/F14Policy.h +1523 -0
  363. package/external/folly/folly/container/detail/F14SetFallback.h +528 -0
  364. package/external/folly/folly/container/detail/F14Table.cpp +71 -0
  365. package/external/folly/folly/container/detail/F14Table.h +2680 -0
  366. package/external/folly/folly/container/detail/Util.h +303 -0
  367. package/external/folly/folly/container/detail/tape_detail.h +135 -0
  368. package/external/folly/folly/container/detail/test/BUCK +14 -0
  369. package/external/folly/folly/container/detail/test/F14DetailTest.cpp +47 -0
  370. package/external/folly/folly/container/heap_vector_types.h +1683 -0
  371. package/external/folly/folly/container/range_traits.h +81 -0
  372. package/external/folly/folly/container/small_vector.h +1476 -0
  373. package/external/folly/folly/container/sorted_vector_types.h +1652 -0
  374. package/external/folly/folly/container/span.h +408 -0
  375. package/external/folly/folly/container/tape.h +608 -0
  376. package/external/folly/folly/container/test/.clang-tidy +12 -0
  377. package/external/folly/folly/container/test/AccessTest.cpp +138 -0
  378. package/external/folly/folly/container/test/ArrayTest.cpp +84 -0
  379. package/external/folly/folly/container/test/BUCK +568 -0
  380. package/external/folly/folly/container/test/BitIteratorBench.cpp +112 -0
  381. package/external/folly/folly/container/test/BitIteratorTest.cpp +109 -0
  382. package/external/folly/folly/container/test/EnumerateTest.cpp +294 -0
  383. package/external/folly/folly/container/test/EvictingCacheMapBench.cpp +80 -0
  384. package/external/folly/folly/container/test/EvictingCacheMapTest.cpp +842 -0
  385. package/external/folly/folly/container/test/F14AsanSupportTest.cpp +143 -0
  386. package/external/folly/folly/container/test/F14FwdTest.cpp +37 -0
  387. package/external/folly/folly/container/test/F14InterprocessTest.cpp +404 -0
  388. package/external/folly/folly/container/test/F14MapTest.cpp +2543 -0
  389. package/external/folly/folly/container/test/F14PolicyTest.cpp +49 -0
  390. package/external/folly/folly/container/test/F14SetTest.cpp +1738 -0
  391. package/external/folly/folly/container/test/F14SmallOverheads.cpp +215 -0
  392. package/external/folly/folly/container/test/F14TestUtil.h +117 -0
  393. package/external/folly/folly/container/test/FBVectorBenchmark.cpp +380 -0
  394. package/external/folly/folly/container/test/FBVectorBenchmarks.cpp.h +100 -0
  395. package/external/folly/folly/container/test/FBVectorTest.cpp +326 -0
  396. package/external/folly/folly/container/test/FBVectorTests.cpp.h +304 -0
  397. package/external/folly/folly/container/test/ForeachBenchmark.cpp +388 -0
  398. package/external/folly/folly/container/test/ForeachTest.cpp +338 -0
  399. package/external/folly/folly/container/test/HashMapsBench.cpp +458 -0
  400. package/external/folly/folly/container/test/HeterogeneousAccessTest.cpp +242 -0
  401. package/external/folly/folly/container/test/IntrusiveHeapTest.cpp +262 -0
  402. package/external/folly/folly/container/test/IteratorTest.cpp +989 -0
  403. package/external/folly/folly/container/test/MapUtilTest.cpp +365 -0
  404. package/external/folly/folly/container/test/MergeTest.cpp +66 -0
  405. package/external/folly/folly/container/test/RegexMatchCacheTest.cpp +634 -0
  406. package/external/folly/folly/container/test/ReserveTest.cpp +173 -0
  407. package/external/folly/folly/container/test/SparseByteSetBenchmark.cpp +153 -0
  408. package/external/folly/folly/container/test/SparseByteSetTest.cpp +117 -0
  409. package/external/folly/folly/container/test/TrackingTypes.h +584 -0
  410. package/external/folly/folly/container/test/UtilTest.cpp +609 -0
  411. package/external/folly/folly/container/test/WeightedEvictingCacheMapTest.cpp +800 -0
  412. package/external/folly/folly/container/test/heap_vector_types_test.cpp +1774 -0
  413. package/external/folly/folly/container/test/range_traits_test.cpp +59 -0
  414. package/external/folly/folly/container/test/small_vector_test.cpp +1571 -0
  415. package/external/folly/folly/container/test/sorted_vector_test.cpp +1589 -0
  416. package/external/folly/folly/container/test/span_test.cpp +520 -0
  417. package/external/folly/folly/container/test/tape_bench.cpp +200 -0
  418. package/external/folly/folly/container/test/tape_test.cpp +590 -0
  419. package/external/folly/folly/defs.bzl +238 -0
  420. package/external/folly/folly/detail/AsyncTrace.cpp +36 -0
  421. package/external/folly/folly/detail/AsyncTrace.h +44 -0
  422. package/external/folly/folly/detail/AtomicHashUtils.h +42 -0
  423. package/external/folly/folly/detail/AtomicUnorderedMapUtils.h +80 -0
  424. package/external/folly/folly/detail/BUCK +406 -0
  425. package/external/folly/folly/detail/DiscriminatedPtrDetail.h +172 -0
  426. package/external/folly/folly/detail/FileUtilDetail.cpp +63 -0
  427. package/external/folly/folly/detail/FileUtilDetail.h +85 -0
  428. package/external/folly/folly/detail/FileUtilVectorDetail.h +81 -0
  429. package/external/folly/folly/detail/FingerprintPolynomial.h +132 -0
  430. package/external/folly/folly/detail/Futex-inl.h +123 -0
  431. package/external/folly/folly/detail/Futex.cpp +273 -0
  432. package/external/folly/folly/detail/Futex.h +109 -0
  433. package/external/folly/folly/detail/GroupVarintDetail.h +101 -0
  434. package/external/folly/folly/detail/IPAddress.cpp +37 -0
  435. package/external/folly/folly/detail/IPAddress.h +57 -0
  436. package/external/folly/folly/detail/IPAddressSource.h +278 -0
  437. package/external/folly/folly/detail/Iterators.h +156 -0
  438. package/external/folly/folly/detail/MPMCPipelineDetail.h +122 -0
  439. package/external/folly/folly/detail/MemoryIdler.cpp +233 -0
  440. package/external/folly/folly/detail/MemoryIdler.h +216 -0
  441. package/external/folly/folly/detail/PerfScoped.cpp +112 -0
  442. package/external/folly/folly/detail/PerfScoped.h +70 -0
  443. package/external/folly/folly/detail/PolyDetail.h +921 -0
  444. package/external/folly/folly/detail/RangeCommon.cpp +55 -0
  445. package/external/folly/folly/detail/RangeCommon.h +93 -0
  446. package/external/folly/folly/detail/RangeSse42.cpp +198 -0
  447. package/external/folly/folly/detail/RangeSse42.h +30 -0
  448. package/external/folly/folly/detail/SimpleSimdStringUtils.cpp +31 -0
  449. package/external/folly/folly/detail/SimpleSimdStringUtils.h +27 -0
  450. package/external/folly/folly/detail/SimpleSimdStringUtilsImpl.h +63 -0
  451. package/external/folly/folly/detail/Singleton.h +34 -0
  452. package/external/folly/folly/detail/SlowFingerprint.h +90 -0
  453. package/external/folly/folly/detail/SocketFastOpen.cpp +175 -0
  454. package/external/folly/folly/detail/SocketFastOpen.h +89 -0
  455. package/external/folly/folly/detail/SplitStringSimd.cpp +84 -0
  456. package/external/folly/folly/detail/SplitStringSimd.h +151 -0
  457. package/external/folly/folly/detail/SplitStringSimdImpl.h +149 -0
  458. package/external/folly/folly/detail/Sse.cpp +35 -0
  459. package/external/folly/folly/detail/Sse.h +45 -0
  460. package/external/folly/folly/detail/StaticSingletonManager.cpp +119 -0
  461. package/external/folly/folly/detail/StaticSingletonManager.h +298 -0
  462. package/external/folly/folly/detail/ThreadLocalDetail.cpp +492 -0
  463. package/external/folly/folly/detail/ThreadLocalDetail.h +800 -0
  464. package/external/folly/folly/detail/TrapOnAvx512.cpp +41 -0
  465. package/external/folly/folly/detail/TrapOnAvx512.h +21 -0
  466. package/external/folly/folly/detail/TurnSequencer.h +295 -0
  467. package/external/folly/folly/detail/TypeList.h +551 -0
  468. package/external/folly/folly/detail/UniqueInstance.cpp +136 -0
  469. package/external/folly/folly/detail/UniqueInstance.h +68 -0
  470. package/external/folly/folly/detail/base64_detail/BUCK +102 -0
  471. package/external/folly/folly/detail/base64_detail/Base64Api.cpp +40 -0
  472. package/external/folly/folly/detail/base64_detail/Base64Api.h +101 -0
  473. package/external/folly/folly/detail/base64_detail/Base64Common.h +80 -0
  474. package/external/folly/folly/detail/base64_detail/Base64Constants.h +79 -0
  475. package/external/folly/folly/detail/base64_detail/Base64HiddenConstants.h +129 -0
  476. package/external/folly/folly/detail/base64_detail/Base64SWAR.cpp +161 -0
  477. package/external/folly/folly/detail/base64_detail/Base64SWAR.h +32 -0
  478. package/external/folly/folly/detail/base64_detail/Base64Scalar.h +262 -0
  479. package/external/folly/folly/detail/base64_detail/Base64Simd.h +102 -0
  480. package/external/folly/folly/detail/base64_detail/Base64_SSE4_2.cpp +42 -0
  481. package/external/folly/folly/detail/base64_detail/Base64_SSE4_2.h +33 -0
  482. package/external/folly/folly/detail/base64_detail/Base64_SSE4_2_Platform.h +167 -0
  483. package/external/folly/folly/detail/base64_detail/README.md +392 -0
  484. package/external/folly/folly/detail/base64_detail/tests/BUCK +36 -0
  485. package/external/folly/folly/detail/base64_detail/tests/Base64AgainstScalarTest.cpp +141 -0
  486. package/external/folly/folly/detail/base64_detail/tests/Base64PlatformTest.cpp +273 -0
  487. package/external/folly/folly/detail/base64_detail/tests/Base64SpecialCasesTest.cpp +555 -0
  488. package/external/folly/folly/detail/test/AsyncTraceTest.cpp +43 -0
  489. package/external/folly/folly/detail/test/BUCK +118 -0
  490. package/external/folly/folly/detail/test/FileUtilDetailTest.cpp +56 -0
  491. package/external/folly/folly/detail/test/PerfScopedTest.cpp +107 -0
  492. package/external/folly/folly/detail/test/SimpleSimdStringUtilsTest.cpp +92 -0
  493. package/external/folly/folly/detail/test/SplitStringSimdTest.cpp +242 -0
  494. package/external/folly/folly/detail/test/StaticSingletonManagerTest.cpp +121 -0
  495. package/external/folly/folly/detail/test/ThreadLocalBenchmark.cpp +116 -0
  496. package/external/folly/folly/detail/test/ThreadLocalDetailTest.cpp +194 -0
  497. package/external/folly/folly/detail/test/TrapOnAvx512TestNegative.cpp +29 -0
  498. package/external/folly/folly/detail/test/UniqueInstanceTest.cpp +60 -0
  499. package/external/folly/folly/detail/thread_local_globals.cpp +69 -0
  500. package/external/folly/folly/detail/thread_local_globals.h +36 -0
  501. package/external/folly/folly/docs/AtomicHashMap.md +134 -0
  502. package/external/folly/folly/docs/Benchmark.md +310 -0
  503. package/external/folly/folly/docs/Conv.md +291 -0
  504. package/external/folly/folly/docs/Dynamic.md +220 -0
  505. package/external/folly/folly/docs/DynamicConverter.md +71 -0
  506. package/external/folly/folly/docs/Executors.md +63 -0
  507. package/external/folly/folly/docs/FBString.md +46 -0
  508. package/external/folly/folly/docs/FBVector.md +200 -0
  509. package/external/folly/folly/docs/Fbvector--graphical_solutions.png +0 -0
  510. package/external/folly/folly/docs/Format.md +177 -0
  511. package/external/folly/folly/docs/Function.md +92 -0
  512. package/external/folly/folly/docs/Futures.md +263 -0
  513. package/external/folly/folly/docs/GroupVarint.md +46 -0
  514. package/external/folly/folly/docs/Histogram.md +104 -0
  515. package/external/folly/folly/docs/MapUtils.md +80 -0
  516. package/external/folly/folly/docs/Overview.md +263 -0
  517. package/external/folly/folly/docs/PackedSyncPtr.md +77 -0
  518. package/external/folly/folly/docs/Poly.md +500 -0
  519. package/external/folly/folly/docs/ProducerConsumerQueue.md +82 -0
  520. package/external/folly/folly/docs/Rcu.md +218 -0
  521. package/external/folly/folly/docs/SmallLocks.md +24 -0
  522. package/external/folly/folly/docs/Synchronized.md +793 -0
  523. package/external/folly/folly/docs/ThreadCachedInt.md +98 -0
  524. package/external/folly/folly/docs/ThreadLocal.md +105 -0
  525. package/external/folly/folly/docs/Traits.md +161 -0
  526. package/external/folly/folly/docs/small_vector.md +64 -0
  527. package/external/folly/folly/docs/style.css +23 -0
  528. package/external/folly/folly/dynamic-inl.h +17 -0
  529. package/external/folly/folly/dynamic.h +17 -0
  530. package/external/folly/folly/folly_extended_library.bzl +28 -0
  531. package/external/folly/folly/functional/ApplyTuple.h +204 -0
  532. package/external/folly/folly/functional/BUCK +57 -0
  533. package/external/folly/folly/functional/Invoke.h +880 -0
  534. package/external/folly/folly/functional/Partial.h +130 -0
  535. package/external/folly/folly/functional/protocol.h +203 -0
  536. package/external/folly/folly/functional/test/ApplyTupleTest.cpp +549 -0
  537. package/external/folly/folly/functional/test/BUCK +57 -0
  538. package/external/folly/folly/functional/test/InvokeTest.cpp +483 -0
  539. package/external/folly/folly/functional/test/PartialTest.cpp +141 -0
  540. package/external/folly/folly/functional/test/protocol_test.cpp +177 -0
  541. package/external/folly/folly/functional/test/traits_test.cpp +551 -0
  542. package/external/folly/folly/functional/traits.h +675 -0
  543. package/external/folly/folly/hash/BUCK +86 -0
  544. package/external/folly/folly/hash/Checksum.cpp +275 -0
  545. package/external/folly/folly/hash/Checksum.h +94 -0
  546. package/external/folly/folly/hash/FarmHash.h +46 -0
  547. package/external/folly/folly/hash/Hash.h +1045 -0
  548. package/external/folly/folly/hash/MurmurHash.h +86 -0
  549. package/external/folly/folly/hash/SpookyHashV1.cpp +391 -0
  550. package/external/folly/folly/hash/SpookyHashV1.h +307 -0
  551. package/external/folly/folly/hash/SpookyHashV2.cpp +392 -0
  552. package/external/folly/folly/hash/SpookyHashV2.h +339 -0
  553. package/external/folly/folly/hash/detail/BUCK +26 -0
  554. package/external/folly/folly/hash/detail/ChecksumDetail.cpp +296 -0
  555. package/external/folly/folly/hash/detail/ChecksumDetail.h +137 -0
  556. package/external/folly/folly/hash/detail/Crc32CombineDetail.cpp +191 -0
  557. package/external/folly/folly/hash/detail/Crc32cDetail.cpp +303 -0
  558. package/external/folly/folly/hash/test/BUCK +132 -0
  559. package/external/folly/folly/hash/test/ChecksumBenchmark.cpp +91 -0
  560. package/external/folly/folly/hash/test/ChecksumTest.cpp +587 -0
  561. package/external/folly/folly/hash/test/FarmHashTest.cpp +41 -0
  562. package/external/folly/folly/hash/test/HashBenchmark.cpp +238 -0
  563. package/external/folly/folly/hash/test/HashTest.cpp +997 -0
  564. package/external/folly/folly/hash/test/MurmurHashTest.cpp +76 -0
  565. package/external/folly/folly/hash/test/SpookyHashV1Test.cpp +559 -0
  566. package/external/folly/folly/hash/test/SpookyHashV2Test.cpp +549 -0
  567. package/external/folly/folly/hash/test/traits_test.cpp +69 -0
  568. package/external/folly/folly/hash/traits.h +115 -0
  569. package/external/folly/folly/json/BUCK +155 -0
  570. package/external/folly/folly/json/DynamicConverter.h +464 -0
  571. package/external/folly/folly/json/DynamicParser-inl.h +316 -0
  572. package/external/folly/folly/json/DynamicParser.cpp +198 -0
  573. package/external/folly/folly/json/DynamicParser.h +394 -0
  574. package/external/folly/folly/json/JSONSchema.cpp +1030 -0
  575. package/external/folly/folly/json/JSONSchema.h +73 -0
  576. package/external/folly/folly/json/JsonMockUtil.h +73 -0
  577. package/external/folly/folly/json/JsonTestUtil.cpp +167 -0
  578. package/external/folly/folly/json/JsonTestUtil.h +88 -0
  579. package/external/folly/folly/json/bser/BUCK +24 -0
  580. package/external/folly/folly/json/bser/Bser.h +107 -0
  581. package/external/folly/folly/json/bser/Dump.cpp +253 -0
  582. package/external/folly/folly/json/bser/Load.cpp +246 -0
  583. package/external/folly/folly/json/bser/test/BUCK +14 -0
  584. package/external/folly/folly/json/bser/test/BserTest.cpp +149 -0
  585. package/external/folly/folly/json/dynamic.cpp +552 -0
  586. package/external/folly/folly/json/dynamic.h +1346 -0
  587. package/external/folly/folly/json/json.h +238 -0
  588. package/external/folly/folly/json/json_patch.cpp +325 -0
  589. package/external/folly/folly/json/json_patch.h +126 -0
  590. package/external/folly/folly/json/json_pointer.cpp +114 -0
  591. package/external/folly/folly/json/json_pointer.h +87 -0
  592. package/external/folly/folly/json/test/BUCK +147 -0
  593. package/external/folly/folly/json/test/DynamicBenchmark.cpp +146 -0
  594. package/external/folly/folly/json/test/DynamicConverterTest.cpp +518 -0
  595. package/external/folly/folly/json/test/DynamicOtherTest.cpp +344 -0
  596. package/external/folly/folly/json/test/DynamicParserTest.cpp +443 -0
  597. package/external/folly/folly/json/test/DynamicTest.cpp +1647 -0
  598. package/external/folly/folly/json/test/JSONSchemaTest.cpp +450 -0
  599. package/external/folly/folly/json/test/JsonBenchmark.cpp +264 -0
  600. package/external/folly/folly/json/test/JsonOtherTest.cpp +51 -0
  601. package/external/folly/folly/json/test/JsonTest.cpp +1153 -0
  602. package/external/folly/folly/json/test/JsonTestUtilTest.cpp +97 -0
  603. package/external/folly/folly/json/test/json_patch_test.cpp +361 -0
  604. package/external/folly/folly/json/test/json_pointer_test.cpp +58 -0
  605. package/external/folly/folly/json/tool/BUCK +13 -0
  606. package/external/folly/folly/json/tool/JSONSchemaTester.cpp +58 -0
  607. package/external/folly/folly/json.h +17 -0
  608. package/external/folly/folly/json_patch.h +17 -0
  609. package/external/folly/folly/json_pointer.h +17 -0
  610. package/external/folly/folly/lang/Access.h +29 -0
  611. package/external/folly/folly/lang/Align.h +240 -0
  612. package/external/folly/folly/lang/Aligned.h +92 -0
  613. package/external/folly/folly/lang/Assume.h +82 -0
  614. package/external/folly/folly/lang/BUCK +287 -0
  615. package/external/folly/folly/lang/Badge.h +108 -0
  616. package/external/folly/folly/lang/Bits.h +570 -0
  617. package/external/folly/folly/lang/BitsClass.h +312 -0
  618. package/external/folly/folly/lang/Builtin.h +74 -0
  619. package/external/folly/folly/lang/CArray.h +34 -0
  620. package/external/folly/folly/lang/CString.cpp +86 -0
  621. package/external/folly/folly/lang/CString.h +55 -0
  622. package/external/folly/folly/lang/Cast.h +51 -0
  623. package/external/folly/folly/lang/CheckedMath.h +253 -0
  624. package/external/folly/folly/lang/CustomizationPoint.h +58 -0
  625. package/external/folly/folly/lang/Exception.cpp +822 -0
  626. package/external/folly/folly/lang/Exception.h +716 -0
  627. package/external/folly/folly/lang/Extern.h +55 -0
  628. package/external/folly/folly/lang/Hint-inl.h +144 -0
  629. package/external/folly/folly/lang/Hint.h +238 -0
  630. package/external/folly/folly/lang/Keep.h +98 -0
  631. package/external/folly/folly/lang/New.h +124 -0
  632. package/external/folly/folly/lang/Ordering.h +140 -0
  633. package/external/folly/folly/lang/Pretty.h +159 -0
  634. package/external/folly/folly/lang/PropagateConst.h +413 -0
  635. package/external/folly/folly/lang/RValueReferenceWrapper.h +152 -0
  636. package/external/folly/folly/lang/SafeAssert.cpp +589 -0
  637. package/external/folly/folly/lang/StaticConst.h +33 -0
  638. package/external/folly/folly/lang/Thunk.h +100 -0
  639. package/external/folly/folly/lang/TypeInfo.h +58 -0
  640. package/external/folly/folly/lang/UncaughtExceptions.cpp +17 -0
  641. package/external/folly/folly/lang/UncaughtExceptions.h +19 -0
  642. package/external/folly/folly/lang/test/AlignTest.cpp +87 -0
  643. package/external/folly/folly/lang/test/AlignedTest.cpp +130 -0
  644. package/external/folly/folly/lang/test/BUCK +258 -0
  645. package/external/folly/folly/lang/test/BadgeTest.cpp +89 -0
  646. package/external/folly/folly/lang/test/BitsBenchmark.cpp +164 -0
  647. package/external/folly/folly/lang/test/BitsClassBenchmark.cpp +122 -0
  648. package/external/folly/folly/lang/test/BitsClassTest.cpp +379 -0
  649. package/external/folly/folly/lang/test/BitsTest.cpp +577 -0
  650. package/external/folly/folly/lang/test/CStringTest.cpp +60 -0
  651. package/external/folly/folly/lang/test/CastTest.cpp +47 -0
  652. package/external/folly/folly/lang/test/CheckedMathTest.cpp +394 -0
  653. package/external/folly/folly/lang/test/ExceptionBench.cpp +427 -0
  654. package/external/folly/folly/lang/test/ExceptionTest.cpp +413 -0
  655. package/external/folly/folly/lang/test/ExternTest.cpp +39 -0
  656. package/external/folly/folly/lang/test/HintTest.cpp +100 -0
  657. package/external/folly/folly/lang/test/NewTest.cpp +38 -0
  658. package/external/folly/folly/lang/test/OrderingTest.cpp +105 -0
  659. package/external/folly/folly/lang/test/PrettyTest.cpp +44 -0
  660. package/external/folly/folly/lang/test/PropagateConstTest.cpp +356 -0
  661. package/external/folly/folly/lang/test/RValueReferenceWrapperTest.cpp +85 -0
  662. package/external/folly/folly/lang/test/SafeAssertTest.cpp +75 -0
  663. package/external/folly/folly/lang/test/ThunkTest.cpp +105 -0
  664. package/external/folly/folly/lang/test/ToAsciiBench.cpp +466 -0
  665. package/external/folly/folly/lang/test/ToAsciiTest.cpp +266 -0
  666. package/external/folly/folly/lang/test/TypeInfoTest.cpp +56 -0
  667. package/external/folly/folly/memcpy.S +292 -0
  668. package/external/folly/folly/memcpy_select_aarch64.cpp +145 -0
  669. package/external/folly/folly/memory/Arena-inl.h +83 -0
  670. package/external/folly/folly/memory/Arena.h +325 -0
  671. package/external/folly/folly/memory/BUCK +191 -0
  672. package/external/folly/folly/memory/JemallocHugePageAllocator.cpp +449 -0
  673. package/external/folly/folly/memory/JemallocHugePageAllocator.h +105 -0
  674. package/external/folly/folly/memory/JemallocHugePageAllocatorTest.cpp +341 -0
  675. package/external/folly/folly/memory/JemallocNodumpAllocator.cpp +176 -0
  676. package/external/folly/folly/memory/JemallocNodumpAllocator.h +119 -0
  677. package/external/folly/folly/memory/JemallocNodumpAllocatorTest.cpp +61 -0
  678. package/external/folly/folly/memory/MallctlHelper.cpp +37 -0
  679. package/external/folly/folly/memory/MallctlHelper.h +167 -0
  680. package/external/folly/folly/memory/Malloc.h +551 -0
  681. package/external/folly/folly/memory/MemoryResource.h +57 -0
  682. package/external/folly/folly/memory/ReentrantAllocator.cpp +162 -0
  683. package/external/folly/folly/memory/ReentrantAllocator.h +261 -0
  684. package/external/folly/folly/memory/SanitizeAddress.cpp +75 -0
  685. package/external/folly/folly/memory/SanitizeAddress.h +117 -0
  686. package/external/folly/folly/memory/SanitizeLeak.cpp +119 -0
  687. package/external/folly/folly/memory/SanitizeLeak.h +108 -0
  688. package/external/folly/folly/memory/ThreadCachedArena.cpp +53 -0
  689. package/external/folly/folly/memory/ThreadCachedArena.h +90 -0
  690. package/external/folly/folly/memory/UninitializedMemoryHacks.h +426 -0
  691. package/external/folly/folly/memory/detail/BUCK +10 -0
  692. package/external/folly/folly/memory/detail/MallocImpl.cpp +52 -0
  693. package/external/folly/folly/memory/detail/MallocImpl.h +97 -0
  694. package/external/folly/folly/memory/not_null-inl.h +522 -0
  695. package/external/folly/folly/memory/not_null.h +449 -0
  696. package/external/folly/folly/memory/test/ArenaTest.cpp +354 -0
  697. package/external/folly/folly/memory/test/BUCK +146 -0
  698. package/external/folly/folly/memory/test/MallctlHelperTest.cpp +169 -0
  699. package/external/folly/folly/memory/test/MallocBenchmark.cpp +91 -0
  700. package/external/folly/folly/memory/test/MallocTest.cpp +78 -0
  701. package/external/folly/folly/memory/test/MemoryResourceTest.cpp +31 -0
  702. package/external/folly/folly/memory/test/ReentrantAllocatorTest.cpp +144 -0
  703. package/external/folly/folly/memory/test/SanitizeAddressTest.cpp +67 -0
  704. package/external/folly/folly/memory/test/SanitizeLeakTest.cpp +139 -0
  705. package/external/folly/folly/memory/test/ThreadCachedArenaTest.cpp +276 -0
  706. package/external/folly/folly/memory/test/UninitializedMemoryHacksODR.cpp +21 -0
  707. package/external/folly/folly/memory/test/UninitializedMemoryHacksTest.cpp +327 -0
  708. package/external/folly/folly/memory/test/not_null_test.cpp +608 -0
  709. package/external/folly/folly/memset.S +245 -0
  710. package/external/folly/folly/memset_select_aarch64.cpp +72 -0
  711. package/external/folly/folly/portability/Asm.h +50 -0
  712. package/external/folly/folly/portability/Atomic.h +31 -0
  713. package/external/folly/folly/portability/BUCK +456 -0
  714. package/external/folly/folly/portability/Builtins.cpp +31 -0
  715. package/external/folly/folly/portability/Builtins.h +161 -0
  716. package/external/folly/folly/portability/Config.h +43 -0
  717. package/external/folly/folly/portability/Constexpr.h +145 -0
  718. package/external/folly/folly/portability/Dirent.cpp +140 -0
  719. package/external/folly/folly/portability/Dirent.h +41 -0
  720. package/external/folly/folly/portability/Event.h +44 -0
  721. package/external/folly/folly/portability/Fcntl.cpp +120 -0
  722. package/external/folly/folly/portability/Fcntl.h +67 -0
  723. package/external/folly/folly/portability/Filesystem.cpp +67 -0
  724. package/external/folly/folly/portability/Filesystem.h +114 -0
  725. package/external/folly/folly/portability/FmtCompile.h +40 -0
  726. package/external/folly/folly/portability/GFlags.h +139 -0
  727. package/external/folly/folly/portability/GMock.h +35 -0
  728. package/external/folly/folly/portability/GTest.h +35 -0
  729. package/external/folly/folly/portability/IOVec.h +34 -0
  730. package/external/folly/folly/portability/Libgen.cpp +59 -0
  731. package/external/folly/folly/portability/Libgen.h +29 -0
  732. package/external/folly/folly/portability/Libunwind.h +21 -0
  733. package/external/folly/folly/portability/Malloc.cpp +31 -0
  734. package/external/folly/folly/portability/Malloc.h +53 -0
  735. package/external/folly/folly/portability/Math.h +90 -0
  736. package/external/folly/folly/portability/Memory.h +26 -0
  737. package/external/folly/folly/portability/OpenSSL.cpp +17 -0
  738. package/external/folly/folly/portability/OpenSSL.h +102 -0
  739. package/external/folly/folly/portability/PThread.cpp +697 -0
  740. package/external/folly/folly/portability/PThread.h +148 -0
  741. package/external/folly/folly/portability/README.md +21 -0
  742. package/external/folly/folly/portability/Sched.cpp +41 -0
  743. package/external/folly/folly/portability/Sched.h +45 -0
  744. package/external/folly/folly/portability/Sockets.cpp +245 -0
  745. package/external/folly/folly/portability/Sockets.h +155 -0
  746. package/external/folly/folly/portability/SourceLocation.h +49 -0
  747. package/external/folly/folly/portability/Stdio.cpp +77 -0
  748. package/external/folly/folly/portability/Stdio.h +32 -0
  749. package/external/folly/folly/portability/Stdlib.cpp +172 -0
  750. package/external/folly/folly/portability/Stdlib.h +64 -0
  751. package/external/folly/folly/portability/String.cpp +53 -0
  752. package/external/folly/folly/portability/String.h +39 -0
  753. package/external/folly/folly/portability/SysFile.cpp +46 -0
  754. package/external/folly/folly/portability/SysFile.h +27 -0
  755. package/external/folly/folly/portability/SysMembarrier.cpp +104 -0
  756. package/external/folly/folly/portability/SysMembarrier.h +26 -0
  757. package/external/folly/folly/portability/SysMman.cpp +242 -0
  758. package/external/folly/folly/portability/SysMman.h +68 -0
  759. package/external/folly/folly/portability/SysResource.cpp +108 -0
  760. package/external/folly/folly/portability/SysResource.h +71 -0
  761. package/external/folly/folly/portability/SysStat.cpp +66 -0
  762. package/external/folly/folly/portability/SysStat.h +52 -0
  763. package/external/folly/folly/portability/SysSyscall.h +73 -0
  764. package/external/folly/folly/portability/SysTime.cpp +62 -0
  765. package/external/folly/folly/portability/SysTime.h +50 -0
  766. package/external/folly/folly/portability/SysTypes.h +44 -0
  767. package/external/folly/folly/portability/SysUio.cpp +179 -0
  768. package/external/folly/folly/portability/SysUio.h +51 -0
  769. package/external/folly/folly/portability/Syslog.h +39 -0
  770. package/external/folly/folly/portability/Time.cpp +357 -0
  771. package/external/folly/folly/portability/Time.h +74 -0
  772. package/external/folly/folly/portability/Unistd.h +111 -0
  773. package/external/folly/folly/portability/Windows.h +108 -0
  774. package/external/folly/folly/portability/openat2.c +30 -0
  775. package/external/folly/folly/portability/openat2.h +39 -0
  776. package/external/folly/folly/portability/test/BUCK +59 -0
  777. package/external/folly/folly/portability/test/ConstexprTest.cpp +102 -0
  778. package/external/folly/folly/portability/test/FilesystemTest.cpp +35 -0
  779. package/external/folly/folly/portability/test/LibgenTest.cpp +35 -0
  780. package/external/folly/folly/portability/test/OpenSSLPortabilityTest.cpp +108 -0
  781. package/external/folly/folly/portability/test/PThreadTest.cpp +80 -0
  782. package/external/folly/folly/portability/test/TimeTest.cpp +90 -0
  783. package/external/folly/folly/small_vector.h +17 -0
  784. package/external/folly/folly/somerge_defs.bzl +399 -0
  785. package/external/folly/folly/sorted_vector_types.h +17 -0
  786. package/external/folly/folly/stop_watch.h +317 -0
  787. package/external/folly/folly/synchronization/AsymmetricThreadFence.cpp +91 -0
  788. package/external/folly/folly/synchronization/AsymmetricThreadFence.h +60 -0
  789. package/external/folly/folly/synchronization/AtomicNotification-inl.h +146 -0
  790. package/external/folly/folly/synchronization/AtomicNotification.cpp +34 -0
  791. package/external/folly/folly/synchronization/AtomicNotification.h +117 -0
  792. package/external/folly/folly/synchronization/AtomicRef.h +181 -0
  793. package/external/folly/folly/synchronization/AtomicStruct.h +150 -0
  794. package/external/folly/folly/synchronization/AtomicUtil-inl.h +482 -0
  795. package/external/folly/folly/synchronization/AtomicUtil.h +179 -0
  796. package/external/folly/folly/synchronization/BUCK +418 -0
  797. package/external/folly/folly/synchronization/Baton.h +419 -0
  798. package/external/folly/folly/synchronization/CallOnce.h +263 -0
  799. package/external/folly/folly/synchronization/DelayedInit.h +179 -0
  800. package/external/folly/folly/synchronization/DistributedMutex-inl.h +1744 -0
  801. package/external/folly/folly/synchronization/DistributedMutex.cpp +27 -0
  802. package/external/folly/folly/synchronization/DistributedMutex.h +342 -0
  803. package/external/folly/folly/synchronization/EventCount.h +200 -0
  804. package/external/folly/folly/synchronization/FlatCombining.h +629 -0
  805. package/external/folly/folly/synchronization/Hazptr-fwd.h +217 -0
  806. package/external/folly/folly/synchronization/Hazptr.cpp +36 -0
  807. package/external/folly/folly/synchronization/Hazptr.h +209 -0
  808. package/external/folly/folly/synchronization/HazptrDomain.cpp +68 -0
  809. package/external/folly/folly/synchronization/HazptrDomain.h +832 -0
  810. package/external/folly/folly/synchronization/HazptrHolder.h +431 -0
  811. package/external/folly/folly/synchronization/HazptrObj.h +533 -0
  812. package/external/folly/folly/synchronization/HazptrObjLinked.h +315 -0
  813. package/external/folly/folly/synchronization/HazptrRec.h +68 -0
  814. package/external/folly/folly/synchronization/HazptrThrLocal.h +180 -0
  815. package/external/folly/folly/synchronization/HazptrThreadPoolExecutor.cpp +46 -0
  816. package/external/folly/folly/synchronization/HazptrThreadPoolExecutor.h +25 -0
  817. package/external/folly/folly/synchronization/Latch.h +160 -0
  818. package/external/folly/folly/synchronization/LifoSem.h +767 -0
  819. package/external/folly/folly/synchronization/Lock.h +887 -0
  820. package/external/folly/folly/synchronization/MicroSpinLock.h +154 -0
  821. package/external/folly/folly/synchronization/NativeSemaphore.h +187 -0
  822. package/external/folly/folly/synchronization/ParkingLot.cpp +37 -0
  823. package/external/folly/folly/synchronization/ParkingLot.h +330 -0
  824. package/external/folly/folly/synchronization/PicoSpinLock.h +167 -0
  825. package/external/folly/folly/synchronization/RWSpinLock.h +549 -0
  826. package/external/folly/folly/synchronization/Rcu.cpp +26 -0
  827. package/external/folly/folly/synchronization/Rcu.h +553 -0
  828. package/external/folly/folly/synchronization/RelaxedAtomic.h +336 -0
  829. package/external/folly/folly/synchronization/SanitizeThread.cpp +141 -0
  830. package/external/folly/folly/synchronization/SanitizeThread.h +166 -0
  831. package/external/folly/folly/synchronization/SaturatingSemaphore.h +324 -0
  832. package/external/folly/folly/synchronization/SmallLocks.h +36 -0
  833. package/external/folly/folly/synchronization/ThrottledLifoSem.h +362 -0
  834. package/external/folly/folly/synchronization/WaitOptions.cpp +25 -0
  835. package/external/folly/folly/synchronization/WaitOptions.h +75 -0
  836. package/external/folly/folly/synchronization/detail/AtomicUtils.h +59 -0
  837. package/external/folly/folly/synchronization/detail/BUCK +104 -0
  838. package/external/folly/folly/synchronization/detail/Hardware.cpp +192 -0
  839. package/external/folly/folly/synchronization/detail/Hardware.h +75 -0
  840. package/external/folly/folly/synchronization/detail/HazptrUtils.h +339 -0
  841. package/external/folly/folly/synchronization/detail/InlineFunctionRef.h +229 -0
  842. package/external/folly/folly/synchronization/detail/Sleeper.cpp +27 -0
  843. package/external/folly/folly/synchronization/detail/Sleeper.h +62 -0
  844. package/external/folly/folly/synchronization/detail/Spin.h +96 -0
  845. package/external/folly/folly/synchronization/detail/ThreadCachedLists.h +174 -0
  846. package/external/folly/folly/synchronization/detail/ThreadCachedReaders.h +189 -0
  847. package/external/folly/folly/synchronization/detail/ThreadCachedTag.h +26 -0
  848. package/external/folly/folly/synchronization/detail/test/BUCK +28 -0
  849. package/external/folly/folly/synchronization/detail/test/HardwareTest.cpp +74 -0
  850. package/external/folly/folly/synchronization/detail/test/InlineFunctionRefTest.cpp +286 -0
  851. package/external/folly/folly/synchronization/example/BUCK +27 -0
  852. package/external/folly/folly/synchronization/example/HazptrLockFreeLIFO.h +88 -0
  853. package/external/folly/folly/synchronization/example/HazptrSWMRSet.h +133 -0
  854. package/external/folly/folly/synchronization/example/HazptrWideCAS.h +62 -0
  855. package/external/folly/folly/synchronization/test/AtomicNotificationTest.cpp +236 -0
  856. package/external/folly/folly/synchronization/test/AtomicRefTest.cpp +170 -0
  857. package/external/folly/folly/synchronization/test/AtomicStructTest.cpp +65 -0
  858. package/external/folly/folly/synchronization/test/AtomicUtilBench.cpp +457 -0
  859. package/external/folly/folly/synchronization/test/AtomicUtilTest.cpp +650 -0
  860. package/external/folly/folly/synchronization/test/BUCK +495 -0
  861. package/external/folly/folly/synchronization/test/Barrier.h +52 -0
  862. package/external/folly/folly/synchronization/test/BarrierTest.cpp +56 -0
  863. package/external/folly/folly/synchronization/test/BatonBenchmark.cpp +77 -0
  864. package/external/folly/folly/synchronization/test/BatonTest.cpp +164 -0
  865. package/external/folly/folly/synchronization/test/BatonTestHelpers.h +118 -0
  866. package/external/folly/folly/synchronization/test/CallOnceBenchmark.cpp +72 -0
  867. package/external/folly/folly/synchronization/test/CallOnceTest.cpp +153 -0
  868. package/external/folly/folly/synchronization/test/DelayedInitTest.cpp +281 -0
  869. package/external/folly/folly/synchronization/test/DistributedMutexTest.cpp +2074 -0
  870. package/external/folly/folly/synchronization/test/EventCountTest.cpp +124 -0
  871. package/external/folly/folly/synchronization/test/FlatCombiningBenchmark.cpp +1789 -0
  872. package/external/folly/folly/synchronization/test/FlatCombiningExamples.h +222 -0
  873. package/external/folly/folly/synchronization/test/FlatCombiningTest.cpp +121 -0
  874. package/external/folly/folly/synchronization/test/FlatCombiningTestHelpers.h +227 -0
  875. package/external/folly/folly/synchronization/test/HazptrTest.cpp +1689 -0
  876. package/external/folly/folly/synchronization/test/LatchTest.cpp +224 -0
  877. package/external/folly/folly/synchronization/test/LifoSemBench.cpp +185 -0
  878. package/external/folly/folly/synchronization/test/LifoSemTests.cpp +353 -0
  879. package/external/folly/folly/synchronization/test/LockTest.cpp +1239 -0
  880. package/external/folly/folly/synchronization/test/NativeSemaphoreTest.cpp +37 -0
  881. package/external/folly/folly/synchronization/test/ParkingLotBenchmark.cpp +239 -0
  882. package/external/folly/folly/synchronization/test/ParkingLotTest.cpp +170 -0
  883. package/external/folly/folly/synchronization/test/RWSpinLockTest.cpp +235 -0
  884. package/external/folly/folly/synchronization/test/RcuBench.cpp +66 -0
  885. package/external/folly/folly/synchronization/test/RcuTest.cpp +330 -0
  886. package/external/folly/folly/synchronization/test/RelaxedAtomicTest.cpp +389 -0
  887. package/external/folly/folly/synchronization/test/SaturatingSemaphoreTest.cpp +166 -0
  888. package/external/folly/folly/synchronization/test/Semaphore.h +242 -0
  889. package/external/folly/folly/synchronization/test/SemaphoreTest.cpp +271 -0
  890. package/external/folly/folly/synchronization/test/SmallLocksBenchmark.cpp +1296 -0
  891. package/external/folly/folly/synchronization/test/SmallLocksTest.cpp +510 -0
  892. package/external/folly/folly/synchronization/test/ThreadCachedEpochBench.h +67 -0
  893. package/external/folly/folly/synchronization/test/ThreadCachedReadersBench.cpp +42 -0
  894. package/external/folly/folly/synchronization/test/ThreadCachedReadersTest.cpp +52 -0
  895. package/external/folly/folly/synchronization/test/ThrottledLifoSemTest.cpp +243 -0
  896. package/external/folly/folly/system/AtFork.cpp +205 -0
  897. package/external/folly/folly/system/AtFork.h +116 -0
  898. package/external/folly/folly/system/AuxVector.h +198 -0
  899. package/external/folly/folly/system/BUCK +144 -0
  900. package/external/folly/folly/system/EnvUtil.cpp +93 -0
  901. package/external/folly/folly/system/EnvUtil.h +113 -0
  902. package/external/folly/folly/system/HardwareConcurrency.cpp +39 -0
  903. package/external/folly/folly/system/HardwareConcurrency.h +23 -0
  904. package/external/folly/folly/system/MemoryMapping.cpp +477 -0
  905. package/external/folly/folly/system/MemoryMapping.h +287 -0
  906. package/external/folly/folly/system/Pid.cpp +87 -0
  907. package/external/folly/folly/system/Pid.h +34 -0
  908. package/external/folly/folly/system/Shell.cpp +33 -0
  909. package/external/folly/folly/system/Shell.h +93 -0
  910. package/external/folly/folly/system/ThreadId.cpp +89 -0
  911. package/external/folly/folly/system/ThreadId.h +62 -0
  912. package/external/folly/folly/system/ThreadName.cpp +330 -0
  913. package/external/folly/folly/system/ThreadName.h +72 -0
  914. package/external/folly/folly/system/test/AtForkTest.cpp +309 -0
  915. package/external/folly/folly/system/test/AuxVectorTest.cpp +55 -0
  916. package/external/folly/folly/system/test/BUCK +120 -0
  917. package/external/folly/folly/system/test/EnvUtilSubprocess.cpp +26 -0
  918. package/external/folly/folly/system/test/EnvUtilTest.cpp +197 -0
  919. package/external/folly/folly/system/test/MemoryMappingTest.cpp +179 -0
  920. package/external/folly/folly/system/test/PidTest.cpp +46 -0
  921. package/external/folly/folly/system/test/ShellTest.cpp +66 -0
  922. package/external/folly/folly/system/test/ThreadIdTest.cpp +114 -0
  923. package/external/folly/folly/system/test/ThreadNameTest.cpp +85 -0
  924. package/external/folly/folly.vcxitems +164 -0
  925. package/external/folly/static/logo.svg +1 -0
  926. package/external/folly/sync-config.json +8 -0
  927. package/just-task.js +13 -2
  928. package/package.json +7 -7
  929. package/template/cpp-lib/proj/MyLib.sln +0 -33
  930. package/template/cs-lib/proj/MyLib.sln +0 -33
  931. package/templates/cpp-app/windows/MyApp/MyApp.vcxproj +1 -1
  932. package/templates/cpp-app/windows/MyApp.sln +0 -33
  933. package/templates/cpp-lib/example/metro.config.js +30 -4
  934. package/templates/cpp-lib/windows/MyLib/MyLib.vcxproj +1 -1
  935. package/templates/cpp-lib/windows/MyLib.sln +0 -33
  936. package/Folly/Folly.vcxproj +0 -378
  937. package/Folly/Folly.vcxproj.filters +0 -558
  938. package/fmt/fmt.vcxproj +0 -153
  939. package/fmt/fmt.vcxproj.filters +0 -59
  940. package/fmt/pch.cpp +0 -4
  941. package/fmt/pch.h +0 -2
  942. /package/{fmt → external/fmt}/cgmanifest.json +0 -0
  943. /package/{Folly → external/folly}/Folly.natvis +0 -0
  944. /package/{Folly → external/folly}/cgmanifest.json +0 -0
  945. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/ConstexprMath.h +0 -0
  946. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/Conv.cpp +0 -0
  947. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/chrono/Hardware.h +0 -0
  948. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/concurrency/CacheLocality.cpp +0 -0
  949. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/json/dynamic-inl.h +0 -0
  950. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/json/json.cpp +0 -0
  951. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/SafeAssert.h +0 -0
  952. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/ToAscii.cpp +0 -0
  953. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/ToAscii.h +0 -0
  954. /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/portability/Unistd.cpp +0 -0
@@ -0,0 +1,1570 @@
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 <iomanip>
18
+ #include <thread>
19
+
20
+ #include <boost/thread.hpp>
21
+
22
+ #include <folly/Random.h>
23
+ #include <folly/SpinLock.h>
24
+ #include <folly/concurrency/container/FlatCombiningPriorityQueue.h>
25
+ #include <folly/concurrency/container/RelaxedConcurrentPriorityQueue.h>
26
+ #include <folly/portability/GFlags.h>
27
+ #include <folly/portability/GTest.h>
28
+ #include <folly/test/DeterministicSchedule.h>
29
+
30
+ #include <glog/logging.h>
31
+
32
+ using namespace folly;
33
+
34
+ DEFINE_bool(bench, false, "run benchmark");
35
+ DEFINE_int32(reps, 1, "number of reps");
36
+ DEFINE_int64(ops, 32, "number of operations per rep");
37
+ DEFINE_int64(elems, 64, "number of elements");
38
+
39
+ static std::vector<int> nthr = {1, 2, 4, 8};
40
+ // threads number
41
+ static uint32_t nthreads;
42
+
43
+ template <class PriorityQueue>
44
+ void basicOpsTest() {
45
+ int res;
46
+ PriorityQueue pq;
47
+
48
+ EXPECT_TRUE(pq.empty());
49
+ EXPECT_EQ(pq.size(), 0);
50
+ pq.push(1);
51
+ pq.push(2);
52
+ pq.push(3);
53
+
54
+ EXPECT_FALSE(pq.empty());
55
+ EXPECT_EQ(pq.size(), 3);
56
+ pq.pop(res);
57
+ EXPECT_EQ(res, 3);
58
+ pq.pop(res);
59
+ EXPECT_EQ(res, 2);
60
+ pq.pop(res);
61
+ EXPECT_EQ(res, 1);
62
+ EXPECT_TRUE(pq.empty());
63
+ EXPECT_EQ(pq.size(), 0);
64
+
65
+ pq.push(3);
66
+ pq.push(2);
67
+ pq.push(1);
68
+
69
+ pq.pop(res);
70
+ EXPECT_EQ(res, 3);
71
+ pq.pop(res);
72
+ EXPECT_EQ(res, 2);
73
+ pq.pop(res);
74
+ EXPECT_EQ(res, 1);
75
+ EXPECT_TRUE(pq.empty());
76
+ EXPECT_EQ(pq.size(), 0);
77
+ }
78
+
79
+ TEST(CPQ, BasicOpsTest) {
80
+ // Spinning
81
+ basicOpsTest<RelaxedConcurrentPriorityQueue<int, false, true>>();
82
+ // Strict
83
+ basicOpsTest<RelaxedConcurrentPriorityQueue<int, false, true, 0>>();
84
+ basicOpsTest<RelaxedConcurrentPriorityQueue<int, false, true, 0, 1>>();
85
+ basicOpsTest<RelaxedConcurrentPriorityQueue<int, false, true, 0, 3>>();
86
+ // Relaxed
87
+ basicOpsTest<RelaxedConcurrentPriorityQueue<int, false, true, 1, 1>>();
88
+ basicOpsTest<RelaxedConcurrentPriorityQueue<int, false, true, 2, 1>>();
89
+ basicOpsTest<RelaxedConcurrentPriorityQueue<int, false, true, 3, 3>>();
90
+ // Blocking
91
+ basicOpsTest<RelaxedConcurrentPriorityQueue<int, true, true>>();
92
+ basicOpsTest<RelaxedConcurrentPriorityQueue<int, true, true, 0>>();
93
+ basicOpsTest<RelaxedConcurrentPriorityQueue<int, true, true, 2>>();
94
+ }
95
+
96
+ /// execute the function for nthreads
97
+ template <typename Func>
98
+ static uint64_t run_once(const Func& fn) {
99
+ boost::barrier barrier_start{nthreads + 1};
100
+ std::vector<std::thread> threads(nthreads);
101
+ for (uint32_t tid = 0; tid < nthreads; ++tid) {
102
+ threads[tid] = std::thread([&, tid] {
103
+ barrier_start.wait();
104
+ fn(tid);
105
+ });
106
+ }
107
+
108
+ barrier_start.wait(); // start the execution
109
+ auto tbegin = std::chrono::steady_clock::now();
110
+ for (auto& t : threads) {
111
+ t.join();
112
+ }
113
+
114
+ // end time measurement
115
+ uint64_t duration = 0;
116
+ auto tend = std::chrono::steady_clock::now();
117
+ duration = std::chrono::duration_cast<std::chrono::nanoseconds>(tend - tbegin)
118
+ .count();
119
+ return duration;
120
+ }
121
+
122
+ template <class PriorityQueue>
123
+ void singleThreadTest() {
124
+ PriorityQueue pq;
125
+
126
+ folly::Random::DefaultGenerator rng;
127
+ rng.seed(FLAGS_elems);
128
+ uint64_t expect_sum = 0;
129
+ // random push
130
+ for (int i = 0; i < FLAGS_elems; i++) {
131
+ int val = folly::Random::rand32(rng) % FLAGS_elems + 1;
132
+ expect_sum += val;
133
+ pq.push(val);
134
+ }
135
+
136
+ int val = 0;
137
+ int counter = 0;
138
+ uint64_t sum = 0;
139
+ while (counter < FLAGS_elems) {
140
+ pq.pop(val);
141
+ sum += val;
142
+ counter++;
143
+ }
144
+
145
+ EXPECT_EQ(sum, expect_sum);
146
+ }
147
+
148
+ TEST(CPQ, SingleThrStrictImplTest) {
149
+ // spinning
150
+ singleThreadTest<RelaxedConcurrentPriorityQueue<int, false, false, 0>>();
151
+ singleThreadTest<RelaxedConcurrentPriorityQueue<int, false, false, 0, 1>>();
152
+ singleThreadTest<RelaxedConcurrentPriorityQueue<int, false, false, 0, 8>>();
153
+ // blocking
154
+ singleThreadTest<RelaxedConcurrentPriorityQueue<int, true, false, 0>>();
155
+ singleThreadTest<RelaxedConcurrentPriorityQueue<int, true, false, 0, 1>>();
156
+ singleThreadTest<RelaxedConcurrentPriorityQueue<int, true, false, 0, 8>>();
157
+ }
158
+
159
+ TEST(CPQ, SingleThrRelaxedImplTest) {
160
+ // spinning
161
+ singleThreadTest<RelaxedConcurrentPriorityQueue<int, false, false, 1>>();
162
+ singleThreadTest<RelaxedConcurrentPriorityQueue<int, false, false, 8>>();
163
+ singleThreadTest<RelaxedConcurrentPriorityQueue<int, false, false, 8, 2>>();
164
+ singleThreadTest<RelaxedConcurrentPriorityQueue<int, false, false, 8, 8>>();
165
+ singleThreadTest<RelaxedConcurrentPriorityQueue<int, false, false, 2, 128>>();
166
+ singleThreadTest<RelaxedConcurrentPriorityQueue<int, false, false, 100, 8>>();
167
+ // blocking
168
+ singleThreadTest<RelaxedConcurrentPriorityQueue<int, true, false, 1>>();
169
+ singleThreadTest<RelaxedConcurrentPriorityQueue<int, true, false, 8>>();
170
+ }
171
+
172
+ /// concurrent pop should made the queue empty
173
+ /// with executing the eaqual elements pop function
174
+ template <class PriorityQueue>
175
+ void concurrentPopforSharedBuffer() {
176
+ for (int t : nthr) {
177
+ PriorityQueue pq;
178
+
179
+ folly::Random::DefaultGenerator rng;
180
+ rng.seed(FLAGS_elems);
181
+ uint64_t check_sum = 0;
182
+ // random push
183
+ for (int i = 0; i < FLAGS_elems; i++) {
184
+ int val = folly::Random::rand32(rng) % FLAGS_elems + 1;
185
+ pq.push(val);
186
+ check_sum += val;
187
+ }
188
+
189
+ std::atomic<uint64_t> pop_sum(0);
190
+ std::atomic<int> to_end(0);
191
+
192
+ nthreads = t;
193
+ auto fn = [&](uint32_t tid) {
194
+ int val = tid;
195
+ while (true) {
196
+ int index = to_end.fetch_add(1, std::memory_order_acq_rel);
197
+ if (index < FLAGS_elems) {
198
+ pq.pop(val);
199
+ } else {
200
+ break;
201
+ }
202
+ pop_sum.fetch_add(val, std::memory_order_acq_rel);
203
+ }
204
+ };
205
+ run_once(fn);
206
+ // check the sum of returned values of successful pop
207
+ EXPECT_EQ(pop_sum, check_sum);
208
+ }
209
+ }
210
+
211
+ TEST(CPQ, ConcurrentPopStrictImplTest) {
212
+ // spinning
213
+ concurrentPopforSharedBuffer<
214
+ RelaxedConcurrentPriorityQueue<int, false, false, 0>>();
215
+ concurrentPopforSharedBuffer<
216
+ RelaxedConcurrentPriorityQueue<int, false, false, 0, 1>>();
217
+ concurrentPopforSharedBuffer<
218
+ RelaxedConcurrentPriorityQueue<int, false, false, 0, 128>>();
219
+ // blocking
220
+ concurrentPopforSharedBuffer<
221
+ RelaxedConcurrentPriorityQueue<int, true, false, 0>>();
222
+ concurrentPopforSharedBuffer<
223
+ RelaxedConcurrentPriorityQueue<int, true, false, 0, 1>>();
224
+ concurrentPopforSharedBuffer<
225
+ RelaxedConcurrentPriorityQueue<int, true, false, 0, 128>>();
226
+ }
227
+
228
+ TEST(CPQ, ConcurrentPopRelaxedImplTest) {
229
+ // spinning
230
+ concurrentPopforSharedBuffer<
231
+ RelaxedConcurrentPriorityQueue<int, false, false>>();
232
+ concurrentPopforSharedBuffer<
233
+ RelaxedConcurrentPriorityQueue<int, false, false, 1, 8>>();
234
+ concurrentPopforSharedBuffer<
235
+ RelaxedConcurrentPriorityQueue<int, false, false, 8, 2>>();
236
+ concurrentPopforSharedBuffer<
237
+ RelaxedConcurrentPriorityQueue<int, false, false, 128, 2>>();
238
+ // blocking
239
+ concurrentPopforSharedBuffer<
240
+ RelaxedConcurrentPriorityQueue<int, true, false, 1>>();
241
+ concurrentPopforSharedBuffer<
242
+ RelaxedConcurrentPriorityQueue<int, true, false, 128>>();
243
+ concurrentPopforSharedBuffer<
244
+ RelaxedConcurrentPriorityQueue<int, true, false, 8, 128>>();
245
+ }
246
+
247
+ /// executing fixed number of push, counting the
248
+ /// element number & total value.
249
+ template <class PriorityQueue>
250
+ void concurrentPush() {
251
+ for (int t : nthr) {
252
+ PriorityQueue pq;
253
+ std::atomic<uint64_t> counter_sum(0);
254
+ nthreads = t;
255
+
256
+ auto fn = [&](uint32_t tid) {
257
+ folly::Random::DefaultGenerator rng;
258
+ rng.seed(tid);
259
+ uint64_t local_sum = 0;
260
+ for (int i = tid; i < FLAGS_elems; i += nthreads) {
261
+ int val = folly::Random::rand32(rng) % FLAGS_elems + 1;
262
+ local_sum += val;
263
+ pq.push(val);
264
+ }
265
+ counter_sum.fetch_add(local_sum, std::memory_order_acq_rel);
266
+ };
267
+ run_once(fn);
268
+
269
+ // check the total number of elements
270
+ uint64_t actual_sum = 0;
271
+ for (int i = 0; i < FLAGS_elems; i++) {
272
+ int res = 0;
273
+ pq.pop(res);
274
+ actual_sum += res;
275
+ }
276
+ EXPECT_EQ(actual_sum, counter_sum);
277
+ }
278
+ }
279
+
280
+ TEST(CPQ, ConcurrentPushStrictImplTest) {
281
+ concurrentPush<RelaxedConcurrentPriorityQueue<int, false, false, 0>>();
282
+ concurrentPush<RelaxedConcurrentPriorityQueue<int, false, false, 0, 8>>();
283
+ concurrentPush<RelaxedConcurrentPriorityQueue<int, false, false, 0, 128>>();
284
+ }
285
+
286
+ TEST(CPQ, ConcurrentPushRelaxedImplTest) {
287
+ concurrentPush<RelaxedConcurrentPriorityQueue<int, false, false>>();
288
+ concurrentPush<RelaxedConcurrentPriorityQueue<int, false, false, 1, 8>>();
289
+ concurrentPush<RelaxedConcurrentPriorityQueue<int, false, false, 2, 128>>();
290
+ concurrentPush<RelaxedConcurrentPriorityQueue<int, false, false, 128, 8>>();
291
+ concurrentPush<RelaxedConcurrentPriorityQueue<int, false, false, 8, 8>>();
292
+ }
293
+
294
+ template <class PriorityQueue>
295
+ void concurrentOps(int ops) {
296
+ for (int t : nthr) {
297
+ PriorityQueue pq;
298
+ std::atomic<uint64_t> counter_push(0);
299
+ std::atomic<uint64_t> counter_pop(0);
300
+ nthreads = t;
301
+
302
+ boost::barrier rb0{nthreads};
303
+ boost::barrier rb1{nthreads};
304
+ boost::barrier rb2{nthreads};
305
+ std::atomic<int> to_end(0);
306
+
307
+ auto fn = [&](uint32_t tid) {
308
+ folly::Random::DefaultGenerator rng;
309
+ rng.seed(tid);
310
+ uint64_t local_push = 0;
311
+ uint64_t local_pop = 0;
312
+ int res;
313
+
314
+ /// initialize the queue
315
+ for (int i = tid; i < FLAGS_elems; i += nthreads) {
316
+ int val = folly::Random::rand32(rng) % FLAGS_elems + 1;
317
+ local_push++;
318
+ pq.push(val);
319
+ }
320
+ rb0.wait();
321
+
322
+ /// operations
323
+ for (int i = 0; i < ops; i++) {
324
+ if (ops % 2 == 0) {
325
+ int val = folly::Random::rand32(rng) % FLAGS_elems + 1;
326
+ local_push++;
327
+ pq.push(val);
328
+ } else {
329
+ pq.pop(res);
330
+ local_pop++;
331
+ }
332
+ }
333
+ rb1.wait();
334
+ // collecting the ops info for checking purpose
335
+ counter_push.fetch_add(local_push, std::memory_order_seq_cst);
336
+ counter_pop.fetch_add(local_pop, std::memory_order_seq_cst);
337
+ rb2.wait();
338
+ /// clean up work
339
+ uint64_t r = counter_push.load(std::memory_order_seq_cst) -
340
+ counter_pop.load(std::memory_order_seq_cst);
341
+ while (true) {
342
+ uint64_t index = to_end.fetch_add(1, std::memory_order_acq_rel);
343
+ if (index < r) {
344
+ pq.pop(res);
345
+ } else {
346
+ break;
347
+ }
348
+ }
349
+ };
350
+ run_once(fn);
351
+ // the total push and pop ops should be the same
352
+ }
353
+ }
354
+
355
+ template <class PriorityQueue>
356
+ void concurrentSizeTest(int ops) {
357
+ for (int t : nthr) {
358
+ PriorityQueue pq;
359
+ nthreads = t;
360
+ EXPECT_TRUE(pq.empty());
361
+ auto fn = [&](uint32_t tid) {
362
+ folly::Random::DefaultGenerator rng;
363
+ rng.seed(tid);
364
+ int res;
365
+
366
+ /// initialize the queue
367
+ for (int i = tid; i < FLAGS_elems; i += nthreads) {
368
+ int val = folly::Random::rand32(rng) % FLAGS_elems + 1;
369
+ pq.push(val);
370
+ }
371
+
372
+ /// operations
373
+ for (int i = 0; i < ops; i++) {
374
+ int val = folly::Random::rand32(rng) % FLAGS_elems + 1;
375
+ pq.push(val);
376
+ pq.pop(res);
377
+ }
378
+ };
379
+ run_once(fn);
380
+ // the total push and pop ops should be the same
381
+ EXPECT_EQ(pq.size(), FLAGS_elems);
382
+ }
383
+ }
384
+
385
+ static std::vector<int> sizes = {0, 1024};
386
+
387
+ TEST(CPQ, ConcurrentMixedStrictImplTest) {
388
+ for (auto size : sizes) {
389
+ concurrentOps<RelaxedConcurrentPriorityQueue<int, false, false, 0>>(size);
390
+ concurrentOps<RelaxedConcurrentPriorityQueue<int, false, false, 0, 1>>(
391
+ size);
392
+ concurrentOps<RelaxedConcurrentPriorityQueue<int, false, false, 0, 32>>(
393
+ size);
394
+ }
395
+ }
396
+
397
+ TEST(CPQ, ConcurrentMixedRelaxedImplTest) {
398
+ for (auto size : sizes) {
399
+ concurrentOps<RelaxedConcurrentPriorityQueue<int, false, false>>(size);
400
+ concurrentOps<RelaxedConcurrentPriorityQueue<int, false, false, 1, 32>>(
401
+ size);
402
+ concurrentOps<RelaxedConcurrentPriorityQueue<int, false, false, 32, 1>>(
403
+ size);
404
+ concurrentOps<RelaxedConcurrentPriorityQueue<int, false, false, 8, 8>>(
405
+ size);
406
+ concurrentOps<RelaxedConcurrentPriorityQueue<int, true, false, 8, 8>>(size);
407
+ }
408
+ }
409
+
410
+ TEST(CPQ, StrictImplSizeTest) {
411
+ for (auto size : sizes) {
412
+ concurrentSizeTest<RelaxedConcurrentPriorityQueue<int, false, true, 0>>(
413
+ size);
414
+ concurrentSizeTest<RelaxedConcurrentPriorityQueue<int, true, true, 0>>(
415
+ size);
416
+ }
417
+ }
418
+
419
+ TEST(CPQ, RelaxedImplSizeTest) {
420
+ for (auto size : sizes) {
421
+ concurrentSizeTest<RelaxedConcurrentPriorityQueue<int, false, true>>(size);
422
+ concurrentSizeTest<RelaxedConcurrentPriorityQueue<int, true, true, 2, 8>>(
423
+ size);
424
+ concurrentSizeTest<RelaxedConcurrentPriorityQueue<int, false, true, 8, 2>>(
425
+ size);
426
+ }
427
+ }
428
+
429
+ template <class PriorityQueue>
430
+ void multiPusherPopper(int PushThr, int PopThr) {
431
+ int ops = FLAGS_ops;
432
+ uint32_t total_threads = PushThr + PopThr;
433
+
434
+ PriorityQueue pq;
435
+ std::atomic<uint64_t> sum_push(0);
436
+ std::atomic<uint64_t> sum_pop(0);
437
+
438
+ auto fn_popthr = [&](uint32_t tid) {
439
+ for (int i = tid; i < ops; i += PopThr) {
440
+ int val;
441
+ pq.pop(val);
442
+ sum_pop.fetch_add(val, std::memory_order_acq_rel);
443
+ }
444
+ };
445
+
446
+ auto fn_pushthr = [&](uint32_t tid) {
447
+ folly::Random::DefaultGenerator rng_t;
448
+ rng_t.seed(tid);
449
+ for (int i = tid; i < ops; i += PushThr) {
450
+ int val = folly::Random::rand32(rng_t);
451
+ pq.push(val);
452
+ sum_push.fetch_add(val, std::memory_order_acq_rel);
453
+ }
454
+ };
455
+ boost::barrier barrier_start{total_threads + 1};
456
+
457
+ std::vector<std::thread> threads_push(PushThr);
458
+ for (int tid = 0; tid < PushThr; ++tid) {
459
+ threads_push[tid] = std::thread([&, tid] {
460
+ barrier_start.wait();
461
+ fn_pushthr(tid);
462
+ });
463
+ }
464
+ std::vector<std::thread> threads_pop(PopThr);
465
+ for (int tid = 0; tid < PopThr; ++tid) {
466
+ threads_pop[tid] = std::thread([&, tid] {
467
+ barrier_start.wait();
468
+ fn_popthr(tid);
469
+ });
470
+ }
471
+
472
+ barrier_start.wait(); // start the execution
473
+ // begin time measurement
474
+ for (auto& t : threads_push) {
475
+ t.join();
476
+ }
477
+ for (auto& t : threads_pop) {
478
+ t.join();
479
+ }
480
+ EXPECT_EQ(sum_pop, sum_push);
481
+ }
482
+
483
+ TEST(CPQ, PusherPopperBlockingTest) {
484
+ for (auto i : nthr) {
485
+ for (auto j : nthr) {
486
+ // Original
487
+ multiPusherPopper<RelaxedConcurrentPriorityQueue<int, true, false, 0, 1>>(
488
+ i, j);
489
+ // Relaxed
490
+ multiPusherPopper<RelaxedConcurrentPriorityQueue<int, true, false, 1, 8>>(
491
+ i, j);
492
+ multiPusherPopper<
493
+ RelaxedConcurrentPriorityQueue<int, true, false, 8, 128>>(i, j);
494
+ multiPusherPopper<
495
+ RelaxedConcurrentPriorityQueue<int, true, false, 128, 8>>(i, j);
496
+ multiPusherPopper<RelaxedConcurrentPriorityQueue<int, true, false>>(i, j);
497
+ multiPusherPopper<
498
+ RelaxedConcurrentPriorityQueue<int, true, false, 16, 16>>(i, j);
499
+ }
500
+ }
501
+ }
502
+
503
+ TEST(CPQ, PusherPopperSpinningTest) {
504
+ for (auto i : nthr) {
505
+ for (auto j : nthr) {
506
+ // Original
507
+ multiPusherPopper<
508
+ RelaxedConcurrentPriorityQueue<int, false, false, 0, 1>>(i, j);
509
+ // Relaxed
510
+ multiPusherPopper<
511
+ RelaxedConcurrentPriorityQueue<int, false, false, 1, 8>>(i, j);
512
+ multiPusherPopper<
513
+ RelaxedConcurrentPriorityQueue<int, false, false, 8, 128>>(i, j);
514
+ multiPusherPopper<
515
+ RelaxedConcurrentPriorityQueue<int, false, false, 128, 8>>(i, j);
516
+ multiPusherPopper<RelaxedConcurrentPriorityQueue<int, false, false>>(
517
+ i, j);
518
+ multiPusherPopper<
519
+ RelaxedConcurrentPriorityQueue<int, false, false, 16, 16>>(i, j);
520
+ }
521
+ }
522
+ }
523
+
524
+ template <class PriorityQueue>
525
+ void blockingFirst() {
526
+ PriorityQueue pq;
527
+ int nPop = 16;
528
+
529
+ boost::barrier b{static_cast<unsigned int>(nPop + 1)};
530
+ std::atomic<int> finished{0};
531
+
532
+ std::vector<std::thread> threads_pop(nPop);
533
+ for (int tid = 0; tid < nPop; ++tid) {
534
+ threads_pop[tid] = std::thread([&] {
535
+ int val;
536
+ b.wait();
537
+ pq.pop(val);
538
+ finished.fetch_add(1, std::memory_order_acq_rel);
539
+ });
540
+ }
541
+
542
+ b.wait();
543
+ int c = 0;
544
+ // push to Mound one by one
545
+ // the popping threads should wake up one by one
546
+ do {
547
+ pq.push(1);
548
+ c++;
549
+ while (finished.load(std::memory_order_acquire) != c)
550
+ ;
551
+ EXPECT_EQ(finished.load(std::memory_order_acquire), c);
552
+ } while (c < nPop);
553
+
554
+ for (auto& t : threads_pop) {
555
+ t.join();
556
+ }
557
+ }
558
+
559
+ template <class PriorityQueue>
560
+ void concurrentBlocking() {
561
+ uint32_t nThrs = 16;
562
+
563
+ for (int iter = 0; iter < FLAGS_reps * 10; iter++) {
564
+ PriorityQueue pq;
565
+ boost::barrier b{static_cast<unsigned int>(nThrs + nThrs + 1)};
566
+ std::atomic<uint32_t> finished{0};
567
+ std::vector<std::thread> threads_pop(nThrs);
568
+ for (uint32_t tid = 0; tid < nThrs; ++tid) {
569
+ threads_pop[tid] = std::thread([&] {
570
+ b.wait();
571
+ int val;
572
+ pq.pop(val);
573
+ finished.fetch_add(1, std::memory_order_acq_rel);
574
+ });
575
+ }
576
+
577
+ std::vector<std::thread> threads_push(nThrs);
578
+ for (uint32_t tid = 0; tid < nThrs; ++tid) {
579
+ threads_push[tid] = std::thread([&, tid] {
580
+ b.wait();
581
+ pq.push(tid);
582
+ while (finished.load(std::memory_order_acquire) != nThrs)
583
+ ;
584
+ EXPECT_EQ(finished.load(std::memory_order_acquire), nThrs);
585
+ });
586
+ }
587
+
588
+ b.wait();
589
+ for (auto& t : threads_pop) {
590
+ t.join();
591
+ }
592
+ for (auto& t : threads_push) {
593
+ t.join();
594
+ }
595
+ }
596
+ }
597
+
598
+ TEST(CPQ, PopBlockingTest) {
599
+ // strict
600
+ blockingFirst<RelaxedConcurrentPriorityQueue<int, true, false, 0, 1>>();
601
+ blockingFirst<RelaxedConcurrentPriorityQueue<int, true, false, 0, 16>>();
602
+ // relaxed
603
+ blockingFirst<RelaxedConcurrentPriorityQueue<int, true, false>>();
604
+ blockingFirst<RelaxedConcurrentPriorityQueue<int, true, false, 8, 8>>();
605
+ blockingFirst<RelaxedConcurrentPriorityQueue<int, true, false, 16, 1>>();
606
+ // Spinning
607
+ blockingFirst<RelaxedConcurrentPriorityQueue<int, false, false>>();
608
+ blockingFirst<RelaxedConcurrentPriorityQueue<int, false, false, 8, 8>>();
609
+ blockingFirst<RelaxedConcurrentPriorityQueue<int, false, false, 16, 1>>();
610
+ }
611
+
612
+ TEST(CPQ, MixedBlockingTest) {
613
+ // strict
614
+ concurrentBlocking<RelaxedConcurrentPriorityQueue<int, true, false, 0, 1>>();
615
+ concurrentBlocking<RelaxedConcurrentPriorityQueue<int, true, false, 0, 16>>();
616
+ // relaxed
617
+ concurrentBlocking<RelaxedConcurrentPriorityQueue<int, true, false>>();
618
+ concurrentBlocking<RelaxedConcurrentPriorityQueue<int, true, false, 8, 8>>();
619
+ concurrentBlocking<RelaxedConcurrentPriorityQueue<int, true, false, 16, 1>>();
620
+ // Spinning
621
+ concurrentBlocking<RelaxedConcurrentPriorityQueue<int, false, false>>();
622
+ concurrentBlocking<RelaxedConcurrentPriorityQueue<int, false, false, 8, 8>>();
623
+ concurrentBlocking<
624
+ RelaxedConcurrentPriorityQueue<int, false, false, 16, 1>>();
625
+ }
626
+
627
+ using DSched = folly::test::DeterministicSchedule;
628
+ using folly::test::DeterministicAtomic;
629
+ using folly::test::DeterministicMutex;
630
+
631
+ template <class PriorityQueue, template <typename> class Atom = std::atomic>
632
+ static void DSchedMixedTest() {
633
+ for (int r = 0; r < FLAGS_reps; r++) {
634
+ // the thread number is 32
635
+ int thr = 8;
636
+ PriorityQueue pq;
637
+ folly::Random::DefaultGenerator rng;
638
+ rng.seed(thr);
639
+ uint64_t pre_sum = 0;
640
+ uint64_t pre_size = 0;
641
+ for (int i = 0; i < FLAGS_elems; i++) {
642
+ int val = folly::Random::rand32(rng) % FLAGS_elems + 1;
643
+ pq.push(val);
644
+ pre_sum += val;
645
+ }
646
+ pre_size = FLAGS_elems;
647
+ Atom<uint64_t> atom_push_sum{0};
648
+ Atom<uint64_t> atom_pop_sum{0};
649
+ std::vector<std::thread> threads(thr);
650
+ for (int tid = 0; tid < thr; ++tid) {
651
+ threads[tid] = DSched::thread([&]() {
652
+ folly::Random::DefaultGenerator tl_rng;
653
+ tl_rng.seed(thr);
654
+ uint64_t pop_sum = 0;
655
+ uint64_t push_sum = 0;
656
+ for (int i = 0; i < FLAGS_ops; i++) {
657
+ int val = folly::Random::rand32(tl_rng) % FLAGS_elems + 1;
658
+ pq.push(val);
659
+ push_sum += val;
660
+ pq.pop(val);
661
+ pop_sum += val;
662
+ }
663
+ atom_push_sum.fetch_add(push_sum, std::memory_order_acq_rel);
664
+ atom_pop_sum.fetch_add(pop_sum, std::memory_order_acq_rel);
665
+ });
666
+ }
667
+
668
+ for (auto& t : threads) {
669
+ DSched::join(t);
670
+ }
671
+
672
+ // It checks the number of elements remain in Mound
673
+ while (pre_size > 0) {
674
+ pre_size--;
675
+ int val = -1;
676
+ pq.pop(val);
677
+ atom_pop_sum += val;
678
+ }
679
+ // Check the accumulation of popped and pushed priorities
680
+ EXPECT_EQ(atom_pop_sum, pre_sum + atom_push_sum);
681
+ }
682
+ }
683
+
684
+ TEST(CPQ, DSchedMixedStrictTest) {
685
+ DSched sched(DSched::uniform(0));
686
+ DSchedMixedTest<
687
+ RelaxedConcurrentPriorityQueue<
688
+ int,
689
+ false,
690
+ false,
691
+ 0,
692
+ 25,
693
+ DeterministicMutex,
694
+ DeterministicAtomic>,
695
+ DeterministicAtomic>();
696
+ DSchedMixedTest<
697
+ RelaxedConcurrentPriorityQueue<
698
+ int,
699
+ true,
700
+ false,
701
+ 0,
702
+ 25,
703
+ DeterministicMutex,
704
+ DeterministicAtomic>,
705
+ DeterministicAtomic>();
706
+ DSchedMixedTest<
707
+ RelaxedConcurrentPriorityQueue<
708
+ int,
709
+ false,
710
+ false,
711
+ 0,
712
+ 1,
713
+ DeterministicMutex,
714
+ DeterministicAtomic>,
715
+ DeterministicAtomic>();
716
+ DSchedMixedTest<
717
+ RelaxedConcurrentPriorityQueue<
718
+ int,
719
+ true,
720
+ false,
721
+ 0,
722
+ 1,
723
+ DeterministicMutex,
724
+ DeterministicAtomic>,
725
+ DeterministicAtomic>();
726
+ DSchedMixedTest<
727
+ RelaxedConcurrentPriorityQueue<
728
+ int,
729
+ false,
730
+ false,
731
+ 0,
732
+ 128,
733
+ DeterministicMutex,
734
+ DeterministicAtomic>,
735
+ DeterministicAtomic>();
736
+ DSchedMixedTest<
737
+ RelaxedConcurrentPriorityQueue<
738
+ int,
739
+ true,
740
+ false,
741
+ 0,
742
+ 128,
743
+ DeterministicMutex,
744
+ DeterministicAtomic>,
745
+ DeterministicAtomic>();
746
+ }
747
+
748
+ TEST(CPQ, DSchedMixedRelaxedTest) {
749
+ DSched sched(DSched::uniform(0));
750
+ DSchedMixedTest<
751
+ RelaxedConcurrentPriorityQueue<
752
+ int,
753
+ false,
754
+ false,
755
+ 16,
756
+ 25,
757
+ DeterministicMutex,
758
+ DeterministicAtomic>,
759
+ DeterministicAtomic>();
760
+ DSchedMixedTest<
761
+ RelaxedConcurrentPriorityQueue<
762
+ int,
763
+ true,
764
+ false,
765
+ 16,
766
+ 25,
767
+ DeterministicMutex,
768
+ DeterministicAtomic>,
769
+ DeterministicAtomic>();
770
+ DSchedMixedTest<
771
+ RelaxedConcurrentPriorityQueue<
772
+ int,
773
+ false,
774
+ false,
775
+ 1,
776
+ 16,
777
+ DeterministicMutex,
778
+ DeterministicAtomic>,
779
+ DeterministicAtomic>();
780
+ DSchedMixedTest<
781
+ RelaxedConcurrentPriorityQueue<
782
+ int,
783
+ true,
784
+ false,
785
+ 1,
786
+ 16,
787
+ DeterministicMutex,
788
+ DeterministicAtomic>,
789
+ DeterministicAtomic>();
790
+ DSchedMixedTest<
791
+ RelaxedConcurrentPriorityQueue<
792
+ int,
793
+ false,
794
+ false,
795
+ 16,
796
+ 1,
797
+ DeterministicMutex,
798
+ DeterministicAtomic>,
799
+ DeterministicAtomic>();
800
+ DSchedMixedTest<
801
+ RelaxedConcurrentPriorityQueue<
802
+ int,
803
+ true,
804
+ false,
805
+ 16,
806
+ 1,
807
+ DeterministicMutex,
808
+ DeterministicAtomic>,
809
+ DeterministicAtomic>();
810
+ DSchedMixedTest<
811
+ RelaxedConcurrentPriorityQueue<
812
+ int,
813
+ false,
814
+ false,
815
+ 16,
816
+ 16,
817
+ DeterministicMutex,
818
+ DeterministicAtomic>,
819
+ DeterministicAtomic>();
820
+ DSchedMixedTest<
821
+ RelaxedConcurrentPriorityQueue<
822
+ int,
823
+ true,
824
+ false,
825
+ 16,
826
+ 16,
827
+ DeterministicMutex,
828
+ DeterministicAtomic>,
829
+ DeterministicAtomic>();
830
+ }
831
+
832
+ template <typename T>
833
+ class Queue {
834
+ std::queue<T> q_;
835
+
836
+ public:
837
+ void push(const T& val) { q_.push(val); }
838
+ void pop(T& val) {
839
+ val = q_.front();
840
+ q_.pop();
841
+ }
842
+ };
843
+
844
+ template <typename T>
845
+ class GlobalLockPQ {
846
+ std::priority_queue<T> q_;
847
+ std::mutex m_;
848
+
849
+ public:
850
+ void push(const T& val) {
851
+ std::lock_guard<std::mutex> g(m_);
852
+ q_.push(val);
853
+ }
854
+ void pop(T& val) {
855
+ while (true) {
856
+ std::lock_guard<std::mutex> g(m_);
857
+ if (q_.empty()) {
858
+ continue;
859
+ }
860
+ val = q_.top();
861
+ q_.pop();
862
+ return;
863
+ }
864
+ }
865
+ };
866
+
867
+ template <class PriorityQueue>
868
+ static uint64_t producer_consumer_test(
869
+ std::string name,
870
+ uint32_t PushThr,
871
+ uint32_t PopThr,
872
+ uint64_t initial_size) {
873
+ int ops = 1 << 18;
874
+ int reps = 15;
875
+ if (name.find("RCPQ") != std::string::npos) {
876
+ ops <<= 3;
877
+ }
878
+ uint64_t min = UINTMAX_MAX;
879
+ uint64_t max = 0;
880
+ uint64_t sum = 0;
881
+ uint32_t total_threads = PushThr + PopThr;
882
+
883
+ for (int r = 0; r < reps; ++r) {
884
+ uint64_t dur;
885
+ PriorityQueue pq;
886
+
887
+ folly::Random::DefaultGenerator rng;
888
+ rng.seed(initial_size);
889
+ // initialize the queue according to initial_size
890
+ for (uint64_t i = 0; i < initial_size; i++) {
891
+ int val = folly::Random::rand32(rng) % ops;
892
+ pq.push(val);
893
+ }
894
+
895
+ auto fn_popthr = [&](uint32_t tid) {
896
+ for (int i = tid; i < ops; i += PopThr) {
897
+ int val;
898
+ pq.pop(val);
899
+ }
900
+ };
901
+
902
+ auto fn_pushthr = [&](uint32_t tid) {
903
+ folly::Random::DefaultGenerator rng_t;
904
+ rng_t.seed(tid);
905
+ for (int i = tid; i < ops; i += PushThr) {
906
+ int val = folly::Random::rand32(rng_t) % ops;
907
+ pq.push(val);
908
+ }
909
+ };
910
+ boost::barrier barrier_start{total_threads + 1};
911
+ std::vector<std::thread> threads_push(PushThr);
912
+ for (uint32_t tid = 0; tid < PushThr; ++tid) {
913
+ threads_push[tid] = std::thread([&, tid] {
914
+ barrier_start.wait();
915
+ fn_pushthr(tid);
916
+ });
917
+ }
918
+ std::vector<std::thread> threads_pop(PopThr);
919
+ for (uint32_t tid = 0; tid < PopThr; ++tid) {
920
+ threads_pop[tid] = std::thread([&, tid] {
921
+ barrier_start.wait();
922
+ fn_popthr(tid);
923
+ });
924
+ }
925
+ barrier_start.wait(); // start the execution
926
+ // begin time measurement
927
+ auto tbegin = std::chrono::steady_clock::now();
928
+ for (auto& t : threads_push) {
929
+ t.join();
930
+ }
931
+ for (auto& t : threads_pop) {
932
+ t.join();
933
+ }
934
+ // end time measurement
935
+ auto tend = std::chrono::steady_clock::now();
936
+ dur = std::chrono::duration_cast<std::chrono::nanoseconds>(tend - tbegin)
937
+ .count();
938
+ sum += dur;
939
+ min = std::min(min, dur);
940
+ max = std::max(max, dur);
941
+ }
942
+ uint64_t avg = sum / reps;
943
+ std::cout << std::setw(12) << name;
944
+ std::cout << " " << std::setw(8) << max / ops << " ns";
945
+ std::cout << " " << std::setw(8) << avg / ops << " ns";
946
+ std::cout << " " << std::setw(8) << min / ops << " ns";
947
+ std::cout << std::endl;
948
+ return min;
949
+ }
950
+
951
+ template <class PriorityQueue>
952
+ static uint64_t throughtput_test(std::string name, uint64_t initial_size) {
953
+ int ops = 1 << 18;
954
+ int reps = 15;
955
+ uint64_t min = UINTMAX_MAX;
956
+ uint64_t max = 0;
957
+ uint64_t sum = 0;
958
+
959
+ for (int r = 0; r < reps; ++r) {
960
+ uint64_t dur;
961
+ PriorityQueue pq;
962
+
963
+ folly::Random::DefaultGenerator rng;
964
+ rng.seed(initial_size);
965
+ // initialize the queue according to initial_size
966
+ for (uint64_t i = 0; i < initial_size; i++) {
967
+ int val = folly::Random::rand32(rng) % (ops + 1);
968
+ pq.push(val);
969
+ }
970
+
971
+ auto fn = [&](uint32_t tid) {
972
+ folly::Random::DefaultGenerator rng_tl;
973
+ rng_tl.seed(tid);
974
+ uint32_t counter = 0;
975
+ for (int i = tid; i < ops; i += nthreads) {
976
+ int val;
977
+ counter++;
978
+ if (counter % 2) {
979
+ val = folly::Random::rand32(rng_tl) % (ops + 1);
980
+ pq.push(val);
981
+ } else {
982
+ pq.pop(val);
983
+ }
984
+ }
985
+ };
986
+
987
+ dur = run_once(fn);
988
+ sum += dur;
989
+ min = std::min(min, dur);
990
+ max = std::max(max, dur);
991
+ }
992
+
993
+ uint64_t avg = sum / reps;
994
+ std::cout << std::setw(12) << name;
995
+ std::cout << " " << std::setw(8) << max / ops << " ns";
996
+ std::cout << " " << std::setw(8) << avg / ops << " ns";
997
+ std::cout << " " << std::setw(8) << min / ops << " ns";
998
+ std::cout << std::endl;
999
+ return min;
1000
+ }
1001
+
1002
+ template <class PriorityQueue>
1003
+ static void accuracy_test(
1004
+ std::string name, uint64_t initial_size, uint32_t top_percent) {
1005
+ int avg = 0;
1006
+ int reps = 15;
1007
+ int valid = initial_size / top_percent;
1008
+ if (valid < 1) {
1009
+ return;
1010
+ }
1011
+ int target = initial_size - valid;
1012
+ for (int r = 0; r < reps; ++r) {
1013
+ PriorityQueue pq;
1014
+ std::unordered_set<int> filter;
1015
+ folly::Random::DefaultGenerator rng;
1016
+ rng.seed(initial_size + r);
1017
+
1018
+ // initialize the queue according to initial_size
1019
+ // eliminate repeated priorities
1020
+ for (uint64_t i = 0; i < initial_size; i++) {
1021
+ int val;
1022
+ do {
1023
+ val = folly::Random::rand32(rng) % initial_size;
1024
+ } while (filter.find(val) != filter.end());
1025
+ filter.insert(val);
1026
+ pq.push(val);
1027
+ }
1028
+
1029
+ int counter = 0;
1030
+ int stop = valid;
1031
+ for (uint64_t i = 0; i < initial_size; i++) {
1032
+ int val;
1033
+ pq.pop(val);
1034
+ if (val >= target) {
1035
+ stop--;
1036
+ }
1037
+ if (stop > 0 && val < target) {
1038
+ counter++;
1039
+ }
1040
+ if (stop == 0) {
1041
+ break;
1042
+ }
1043
+ }
1044
+ avg += counter;
1045
+ }
1046
+ avg /= reps;
1047
+ std::cout << std::setw(16) << name << " ";
1048
+ std::cout << "Lower priority popped: " << avg;
1049
+ std::cout << std::endl;
1050
+ }
1051
+
1052
+ using FCPQ = folly::FlatCombiningPriorityQueue<int>;
1053
+
1054
+ TEST(CPQ, ThroughtputBench) {
1055
+ if (!FLAGS_bench) {
1056
+ return;
1057
+ }
1058
+ std::vector<int> test_sizes = {64, 512, 65536};
1059
+ std::vector<int> nthrs = {1, 2, 4, 8, 12, 14, 16, 28, 32, 56};
1060
+
1061
+ std::cout << "Threads have equal chance to push and pop. \n"
1062
+ << "The bench caculates the avg execution time for\n"
1063
+ << "one operation (push OR pop).\n"
1064
+ << "GL : std::priority_queue protected by global lock\n"
1065
+ << "FL : flatcombinning priority queue\n"
1066
+ << "RCPQ: the relaxed concurrent priority queue\n"
1067
+ << std::endl;
1068
+ std::cout << "\nTest_name, Max time, Avg time, Min time" << std::endl;
1069
+ for (auto s : test_sizes) {
1070
+ std::cout << "\n ------ Initial size: " << s << " ------" << std::endl;
1071
+ for (int i : nthrs) {
1072
+ nthreads = i;
1073
+ std::cout << "Thread number: " << i << std::endl;
1074
+ throughtput_test<GlobalLockPQ<int>>("GL", s);
1075
+ throughtput_test<FCPQ>("FC", s);
1076
+ throughtput_test<RelaxedConcurrentPriorityQueue<int>>("RCPQ", s);
1077
+ }
1078
+ }
1079
+ }
1080
+
1081
+ TEST(CPQ, ProducerConsumerBench) {
1082
+ if (!FLAGS_bench) {
1083
+ return;
1084
+ }
1085
+ std::vector<int> test_sizes = {0, 512, 65536};
1086
+ std::vector<int> nthrs = {1, 2, 4, 8, 12, 16, 24};
1087
+
1088
+ std::cout << "<Producer, Consumer> pattern \n"
1089
+ << "The bench caculates the avg execution time for\n"
1090
+ << "push AND pop pair(two operations).\n"
1091
+ << "GL : std::priority_queue protected by global lock\n"
1092
+ << "FL : flatcombinning priority queue\n"
1093
+ << "RCPQ SPN: RCPQ spinning\n"
1094
+ << "RCPQ BLK: RCPQ blocking\n"
1095
+ << std::endl;
1096
+ for (int s : test_sizes) {
1097
+ std::cout << "\n ------ Scalability ------" << std::endl;
1098
+ for (int m : nthrs) {
1099
+ for (int n : nthrs) {
1100
+ if (m != n) {
1101
+ continue;
1102
+ }
1103
+ std::cout << "<" << m << " , " << n << "> , size = " << s << ":"
1104
+ << std::endl;
1105
+ producer_consumer_test<GlobalLockPQ<int>>("GL", m, n, s);
1106
+ producer_consumer_test<FCPQ>("FC", m, n, s);
1107
+ producer_consumer_test<
1108
+ RelaxedConcurrentPriorityQueue<int, false, false>>(
1109
+ "RCPQ SPN", m, n, s);
1110
+ producer_consumer_test<
1111
+ RelaxedConcurrentPriorityQueue<int, true, false>>(
1112
+ "RCPQ BLK", m, n, s);
1113
+ }
1114
+ }
1115
+ std::cout << "\n ------ Unbalanced(Producer<Consumer) ------" << std::endl;
1116
+ for (int m : nthrs) {
1117
+ for (int n : nthrs) {
1118
+ if (m > 4 || n - 4 <= m) {
1119
+ continue;
1120
+ }
1121
+ std::cout << "<" << m << " , " << n << "> , size = " << s << ":"
1122
+ << std::endl;
1123
+ producer_consumer_test<GlobalLockPQ<int>>("GL", m, n, s);
1124
+ producer_consumer_test<FCPQ>("FC", m, n, s);
1125
+ producer_consumer_test<
1126
+ RelaxedConcurrentPriorityQueue<int, false, false>>(
1127
+ "RCPQ SPN", m, n, s);
1128
+ producer_consumer_test<
1129
+ RelaxedConcurrentPriorityQueue<int, true, false>>(
1130
+ "RCPQ BLK", m, n, s);
1131
+ }
1132
+ }
1133
+
1134
+ std::cout << "\n ------ Unbalanced(Producer>Consumer) ------" << std::endl;
1135
+ for (int m : nthrs) {
1136
+ for (int n : nthrs) {
1137
+ if (m <= 8 || n > m - 4 || n % 4 != 0) {
1138
+ continue;
1139
+ }
1140
+ std::cout << "<" << m << " , " << n << "> , size = " << s << ":"
1141
+ << std::endl;
1142
+ producer_consumer_test<GlobalLockPQ<int>>("GL", m, n, s);
1143
+ producer_consumer_test<FCPQ>("FC", m, n, s);
1144
+ producer_consumer_test<
1145
+ RelaxedConcurrentPriorityQueue<int, false, false>>(
1146
+ "RCPQ SPN", m, n, s);
1147
+ producer_consumer_test<
1148
+ RelaxedConcurrentPriorityQueue<int, true, false>>(
1149
+ "RCPQ BLK", m, n, s);
1150
+ }
1151
+ }
1152
+ }
1153
+ }
1154
+
1155
+ TEST(CPQ, Accuracy) {
1156
+ if (!FLAGS_bench) {
1157
+ return;
1158
+ }
1159
+ std::vector<int> test_sizes = {512, 65536, 1 << 20};
1160
+ std::vector<int> rates = {1000, 100, 10};
1161
+ for (auto s : test_sizes) {
1162
+ for (auto p : rates) {
1163
+ std::cout << "\n------ Size: " << s << " Get top: " << 100. / p << "%"
1164
+ << " (Num: " << s / p << ")" << " ------" << std::endl;
1165
+ accuracy_test<Queue<int>>("FIFO Q", s, p);
1166
+ accuracy_test<RelaxedConcurrentPriorityQueue<int, false, false, 0>>(
1167
+ "RCPQ(strict)", s, p);
1168
+ accuracy_test<RelaxedConcurrentPriorityQueue<int, false, false, 2>>(
1169
+ "RCPQ(batch=2)", s, p);
1170
+ accuracy_test<RelaxedConcurrentPriorityQueue<int, false, false, 8>>(
1171
+ "RCPQ(batch=8)", s, p);
1172
+ accuracy_test<RelaxedConcurrentPriorityQueue<int, false, false, 16>>(
1173
+ "RCPQ(batch=16)", s, p);
1174
+ accuracy_test<RelaxedConcurrentPriorityQueue<int, false, false, 50>>(
1175
+ "RCPQ(batch=50)", s, p);
1176
+ }
1177
+ }
1178
+ }
1179
+
1180
+ /*
1181
+ * The folly::SpinningLock use CAS directly for try_lock, which is not
1182
+ efficient in the
1183
+ * experiment. The lock used in the experiment based on the test-test-and-set
1184
+ lock(Add
1185
+ * check before doing CAS).
1186
+ *
1187
+ Threads have equal chance to push and pop.
1188
+ The bench caculates the avg execution time for
1189
+ one operation (push OR pop).
1190
+ GL : std::priority_queue protected by global lock
1191
+ FL : flatcombinning priority queue
1192
+ RCPQ: the relaxed concurrent priority queue
1193
+
1194
+ Test_name, Max time, Avg time, Min time
1195
+
1196
+ ------ Initial size: 64 ------
1197
+ Thread number: 1
1198
+ GL 30 ns 29 ns 27 ns
1199
+ FC 47 ns 42 ns 40 ns
1200
+ RCPQ 85 ns 81 ns 77 ns
1201
+ Thread number: 2
1202
+ GL 377 ns 274 ns 154 ns
1203
+ FC 227 ns 187 ns 139 ns
1204
+ RCPQ 108 ns 106 ns 102 ns
1205
+ Thread number: 4
1206
+ GL 244 ns 214 ns 191 ns
1207
+ FC 212 ns 191 ns 173 ns
1208
+ RCPQ 98 ns 95 ns 92 ns
1209
+ Thread number: 8
1210
+ GL 252 ns 221 ns 197 ns
1211
+ FC 127 ns 112 ns 102 ns
1212
+ RCPQ 78 ns 78 ns 76 ns
1213
+ Thread number: 12
1214
+ GL 251 ns 227 ns 217 ns
1215
+ FC 104 ns 96 ns 88 ns
1216
+ RCPQ 81 ns 79 ns 77 ns
1217
+ Thread number: 14
1218
+ GL 243 ns 232 ns 224 ns
1219
+ FC 103 ns 96 ns 90 ns
1220
+ RCPQ 84 ns 82 ns 81 ns
1221
+ Thread number: 16
1222
+ GL 254 ns 239 ns 229 ns
1223
+ FC 105 ns 98 ns 92 ns
1224
+ RCPQ 88 ns 85 ns 83 ns
1225
+ Thread number: 28
1226
+ GL 265 ns 261 ns 258 ns
1227
+ FC 106 ns 100 ns 96 ns
1228
+ RCPQ 93 ns 87 ns 68 ns
1229
+ Thread number: 32
1230
+ GL 274 ns 267 ns 261 ns
1231
+ FC 110 ns 98 ns 37 ns
1232
+ RCPQ 93 ns 80 ns 47 ns
1233
+ Thread number: 56
1234
+ GL 274 ns 263 ns 257 ns
1235
+ FC 78 ns 50 ns 24 ns
1236
+ RCPQ 85 ns 71 ns 45 ns
1237
+
1238
+ ------ Initial size: 512 ------
1239
+ Thread number: 1
1240
+ GL 36 ns 35 ns 33 ns
1241
+ FC 54 ns 49 ns 47 ns
1242
+ RCPQ 79 ns 76 ns 72 ns
1243
+ Thread number: 2
1244
+ GL 248 ns 187 ns 151 ns
1245
+ FC 228 ns 179 ns 147 ns
1246
+ RCPQ 95 ns 92 ns 90 ns
1247
+ Thread number: 4
1248
+ GL 282 ns 260 ns 236 ns
1249
+ FC 218 ns 199 ns 174 ns
1250
+ RCPQ 85 ns 81 ns 79 ns
1251
+ Thread number: 8
1252
+ GL 306 ns 288 ns 270 ns
1253
+ FC 188 ns 114 ns 104 ns
1254
+ RCPQ 64 ns 62 ns 59 ns
1255
+ Thread number: 12
1256
+ GL 317 ns 296 ns 280 ns
1257
+ FC 105 ns 99 ns 91 ns
1258
+ RCPQ 59 ns 57 ns 52 ns
1259
+ Thread number: 14
1260
+ GL 331 ns 305 ns 293 ns
1261
+ FC 109 ns 99 ns 92 ns
1262
+ RCPQ 64 ns 57 ns 53 ns
1263
+ Thread number: 16
1264
+ GL 316 ns 308 ns 291 ns
1265
+ FC 110 ns 99 ns 92 ns
1266
+ RCPQ 58 ns 54 ns 52 ns
1267
+ Thread number: 28
1268
+ GL 348 ns 339 ns 333 ns
1269
+ FC 109 ns 105 ns 100 ns
1270
+ RCPQ 64 ns 62 ns 56 ns
1271
+ Thread number: 32
1272
+ GL 353 ns 347 ns 341 ns
1273
+ FC 116 ns 102 ns 39 ns
1274
+ RCPQ 62 ns 32 ns 3 ns
1275
+ Thread number: 56
1276
+ GL 360 ns 352 ns 342 ns
1277
+ FC 101 ns 58 ns 41 ns
1278
+ RCPQ 59 ns 43 ns 26 ns
1279
+
1280
+ ------ Initial size: 65536 ------
1281
+ Thread number: 1
1282
+ GL 64 ns 60 ns 56 ns
1283
+ FC 93 ns 72 ns 67 ns
1284
+ RCPQ 293 ns 286 ns 281 ns
1285
+ Thread number: 2
1286
+ GL 262 ns 248 ns 231 ns
1287
+ FC 318 ns 301 ns 288 ns
1288
+ RCPQ 230 ns 216 ns 206 ns
1289
+ Thread number: 4
1290
+ GL 463 ns 452 ns 408 ns
1291
+ FC 273 ns 265 ns 257 ns
1292
+ RCPQ 141 ns 131 ns 126 ns
1293
+ Thread number: 8
1294
+ GL 582 ns 574 ns 569 ns
1295
+ FC 152 ns 139 ns 131 ns
1296
+ RCPQ 98 ns 81 ns 72 ns
1297
+ Thread number: 12
1298
+ GL 593 ns 586 ns 576 ns
1299
+ FC 126 ns 123 ns 119 ns
1300
+ RCPQ 85 ns 72 ns 62 ns
1301
+ Thread number: 14
1302
+ GL 599 ns 595 ns 588 ns
1303
+ FC 138 ns 123 ns 119 ns
1304
+ RCPQ 79 ns 70 ns 62 ns
1305
+ Thread number: 16
1306
+ GL 599 ns 592 ns 587 ns
1307
+ FC 138 ns 123 ns 117 ns
1308
+ RCPQ 75 ns 65 ns 56 ns
1309
+ Thread number: 28
1310
+ GL 611 ns 609 ns 608 ns
1311
+ FC 147 ns 144 ns 137 ns
1312
+ RCPQ 74 ns 70 ns 66 ns
1313
+ Thread number: 32
1314
+ GL 635 ns 630 ns 627 ns
1315
+ FC 151 ns 143 ns 76 ns
1316
+ RCPQ 199 ns 94 ns 59 ns
1317
+ Thread number: 56
1318
+ GL 637 ns 633 ns 627 ns
1319
+ FC 176 ns 103 ns 41 ns
1320
+ RCPQ 561 ns 132 ns 46 ns
1321
+
1322
+
1323
+ <Producer, Consumer> pattern
1324
+ The bench caculates the avg execution time for
1325
+ push AND pop pair(two operations).
1326
+ GL : std::priority_queue protected by global lock
1327
+ FL : flatcombinning priority queue
1328
+ RCPQ SPN: RCPQ spinning
1329
+ RCPQ BLK: RCPQ blocking
1330
+
1331
+
1332
+ ------ Scalability ------
1333
+ <1 , 1> , size = 0:
1334
+ GL 781 ns 735 ns 652 ns
1335
+ FC 599 ns 535 ns 462 ns
1336
+ RCPQ SPN 178 ns 166 ns 148 ns
1337
+ RCPQ BLK 217 ns 201 ns 182 ns
1338
+ <2 , 2> , size = 0:
1339
+ GL 686 ns 665 ns 619 ns
1340
+ FC 487 ns 430 ns 398 ns
1341
+ RCPQ SPN 281 ns 239 ns 139 ns
1342
+ RCPQ BLK 405 ns 367 ns 181 ns
1343
+ <4 , 4> , size = 0:
1344
+ GL 1106 ns 1082 ns 1050 ns
1345
+ FC 278 ns 242 ns 208 ns
1346
+ RCPQ SPN 114 ns 107 ns 103 ns
1347
+ RCPQ BLK 169 ns 158 ns 148 ns
1348
+ <8 , 8> , size = 0:
1349
+ GL 1169 ns 1156 ns 1144 ns
1350
+ FC 236 ns 214 ns 197 ns
1351
+ RCPQ SPN 121 ns 114 ns 110 ns
1352
+ RCPQ BLK 154 ns 150 ns 141 ns
1353
+ <12 , 12> , size = 0:
1354
+ GL 1191 ns 1185 ns 1178 ns
1355
+ FC 232 ns 221 ns 201 ns
1356
+ RCPQ SPN 802 ns 205 ns 123 ns
1357
+ RCPQ BLK 218 ns 161 ns 147 ns
1358
+ <16 , 16> , size = 0:
1359
+ GL 1236 ns 1227 ns 1221 ns
1360
+ FC 269 ns 258 ns 243 ns
1361
+ RCPQ SPN 826 ns 733 ns 655 ns
1362
+ RCPQ BLK 172 ns 149 ns 137 ns
1363
+ <24 , 24> , size = 0:
1364
+ GL 1269 ns 1262 ns 1255 ns
1365
+ FC 280 ns 225 ns 171 ns
1366
+ RCPQ SPN 931 ns 891 ns 836 ns
1367
+ RCPQ BLK 611 ns 445 ns 362 ns
1368
+
1369
+ ------ Unbalanced(Producer<Consumer) ------
1370
+ <1 , 8> , size = 0:
1371
+ GL 1454 ns 1225 ns 1144 ns
1372
+ FC 2141 ns 1974 ns 1811 ns
1373
+ RCPQ SPN 597 ns 586 ns 573 ns
1374
+ RCPQ BLK 663 ns 649 ns 636 ns
1375
+ <1 , 12> , size = 0:
1376
+ GL 1763 ns 1658 ns 1591 ns
1377
+ FC 3396 ns 3261 ns 3107 ns
1378
+ RCPQ SPN 735 ns 714 ns 651 ns
1379
+ RCPQ BLK 773 ns 761 ns 744 ns
1380
+ <1 , 16> , size = 0:
1381
+ GL 2231 ns 2070 ns 1963 ns
1382
+ FC 6305 ns 5771 ns 5603 ns
1383
+ RCPQ SPN 787 ns 756 ns 694 ns
1384
+ RCPQ BLK 828 ns 806 ns 775 ns
1385
+ <1 , 24> , size = 0:
1386
+ GL 3802 ns 3545 ns 3229 ns
1387
+ FC 10625 ns 10311 ns 10119 ns
1388
+ RCPQ SPN 781 ns 756 ns 739 ns
1389
+ RCPQ BLK 892 ns 882 ns 870 ns
1390
+ <2 , 8> , size = 0:
1391
+ GL 873 ns 750 ns 718 ns
1392
+ FC 815 ns 712 ns 659 ns
1393
+ RCPQ SPN 720 ns 691 ns 673 ns
1394
+ RCPQ BLK 738 ns 707 ns 694 ns
1395
+ <2 , 12> , size = 0:
1396
+ GL 1061 ns 968 ns 904 ns
1397
+ FC 1410 ns 1227 ns 1190 ns
1398
+ RCPQ SPN 862 ns 829 ns 767 ns
1399
+ RCPQ BLK 825 ns 804 ns 771 ns
1400
+ <2 , 16> , size = 0:
1401
+ GL 1438 ns 1283 ns 1162 ns
1402
+ FC 2095 ns 2012 ns 1909 ns
1403
+ RCPQ SPN 763 ns 706 ns 628 ns
1404
+ RCPQ BLK 833 ns 804 ns 777 ns
1405
+ <2 , 24> , size = 0:
1406
+ GL 2031 ns 1972 ns 1872 ns
1407
+ FC 4298 ns 4191 ns 4107 ns
1408
+ RCPQ SPN 762 ns 709 ns 680 ns
1409
+ RCPQ BLK 876 ns 859 ns 825 ns
1410
+ <4 , 12> , size = 0:
1411
+ GL 696 ns 649 ns 606 ns
1412
+ FC 561 ns 517 ns 480 ns
1413
+ RCPQ SPN 759 ns 698 ns 498 ns
1414
+ RCPQ BLK 823 ns 803 ns 786 ns
1415
+ <4 , 16> , size = 0:
1416
+ GL 862 ns 800 ns 749 ns
1417
+ FC 857 ns 824 ns 781 ns
1418
+ RCPQ SPN 730 ns 679 ns 589 ns
1419
+ RCPQ BLK 863 ns 824 ns 803 ns
1420
+ <4 , 24> , size = 0:
1421
+ GL 1138 ns 1125 ns 1105 ns
1422
+ FC 1635 ns 1576 ns 1540 ns
1423
+ RCPQ SPN 756 ns 717 ns 668 ns
1424
+ RCPQ BLK 865 ns 839 ns 812 ns
1425
+
1426
+ ------ Unbalanced(Producer>Consumer) ------
1427
+ <12 , 4> , size = 0:
1428
+ GL 1115 ns 1087 ns 1053 ns
1429
+ FC 373 ns 355 ns 333 ns
1430
+ RCPQ SPN 155 ns 147 ns 142 ns
1431
+ RCPQ BLK 202 ns 190 ns 182 ns
1432
+ <12 , 8> , size = 0:
1433
+ GL 1167 ns 1157 ns 1148 ns
1434
+ FC 281 ns 256 ns 227 ns
1435
+ RCPQ SPN 132 ns 126 ns 120 ns
1436
+ RCPQ BLK 175 ns 164 ns 161 ns
1437
+ <16 , 4> , size = 0:
1438
+ GL 1103 ns 1088 ns 1074 ns
1439
+ FC 442 ns 380 ns 327 ns
1440
+ RCPQ SPN 178 ns 162 ns 150 ns
1441
+ RCPQ BLK 217 ns 200 ns 188 ns
1442
+ <16 , 8> , size = 0:
1443
+ GL 1164 ns 1153 ns 1143 ns
1444
+ FC 290 ns 268 ns 243 ns
1445
+ RCPQ SPN 146 ns 138 ns 134 ns
1446
+ RCPQ BLK 184 ns 175 ns 161 ns
1447
+ <16 , 12> , size = 0:
1448
+ GL 1196 ns 1189 ns 1185 ns
1449
+ FC 269 ns 260 ns 245 ns
1450
+ RCPQ SPN 405 ns 172 ns 129 ns
1451
+ RCPQ BLK 172 ns 165 ns 152 ns
1452
+ <24 , 4> , size = 0:
1453
+ GL 1097 ns 1081 ns 1030 ns
1454
+ FC 407 ns 369 ns 301 ns
1455
+ RCPQ SPN 184 ns 176 ns 164 ns
1456
+ RCPQ BLK 220 ns 211 ns 201 ns
1457
+ <24 , 8> , size = 0:
1458
+ GL 1177 ns 1158 ns 1148 ns
1459
+ FC 321 ns 297 ns 233 ns
1460
+ RCPQ SPN 155 ns 148 ns 139 ns
1461
+ RCPQ BLK 204 ns 188 ns 173 ns
1462
+ <24 , 12> , size = 0:
1463
+ GL 1224 ns 1215 ns 1205 ns
1464
+ FC 320 ns 287 ns 218 ns
1465
+ RCPQ SPN 145 ns 141 ns 135 ns
1466
+ RCPQ BLK 176 ns 167 ns 160 ns
1467
+ <24 , 16> , size = 0:
1468
+ GL 1250 ns 1244 ns 1238 ns
1469
+ FC 339 ns 257 ns 209 ns
1470
+ RCPQ SPN 615 ns 480 ns 359 ns
1471
+ RCPQ BLK 185 ns 151 ns 137 ns
1472
+
1473
+ [ RUN ] CPQ.Accuracy
1474
+ The Accuracy test check how many pops return lower
1475
+ priority when popping the top X% priorities.
1476
+ The default batch size is 16.
1477
+
1478
+ ------ Size: 512 Get top: 1% (Num: 5) ------
1479
+ FIFO Q Lower priority popped: 439
1480
+ RCPQ(strict) Lower priority popped: 0
1481
+ RCPQ(batch=2) Lower priority popped: 1
1482
+ RCPQ(batch=8) Lower priority popped: 10
1483
+ RCPQ(batch=16) Lower priority popped: 13
1484
+ RCPQ(batch=50) Lower priority popped: 11
1485
+
1486
+ ------ Size: 512 Get top: 10% (Num: 51) ------
1487
+ FIFO Q Lower priority popped: 451
1488
+ RCPQ(strict) Lower priority popped: 0
1489
+ RCPQ(batch=2) Lower priority popped: 15
1490
+ RCPQ(batch=8) Lower priority popped: 73
1491
+ RCPQ(batch=16) Lower priority popped: 147
1492
+ RCPQ(batch=50) Lower priority popped: 201
1493
+
1494
+ ------ Size: 65536 Get top: 0.1% (Num: 65) ------
1495
+ FIFO Q Lower priority popped: 64917
1496
+ RCPQ(strict) Lower priority popped: 0
1497
+ RCPQ(batch=2) Lower priority popped: 35
1498
+ RCPQ(batch=8) Lower priority popped: 190
1499
+ RCPQ(batch=16) Lower priority popped: 387
1500
+ RCPQ(batch=50) Lower priority popped: 655
1501
+
1502
+ ------ Size: 65536 Get top: 1% (Num: 655) ------
1503
+ FIFO Q Lower priority popped: 64793
1504
+ RCPQ(strict) Lower priority popped: 0
1505
+ RCPQ(batch=2) Lower priority popped: 122
1506
+ RCPQ(batch=8) Lower priority popped: 516
1507
+ RCPQ(batch=16) Lower priority popped: 1450
1508
+ RCPQ(batch=50) Lower priority popped: 3219
1509
+
1510
+ ------ Size: 65536 Get top: 10% (Num: 6553) ------
1511
+ FIFO Q Lower priority popped: 58977
1512
+ RCPQ(strict) Lower priority popped: 0
1513
+ RCPQ(batch=2) Lower priority popped: 174
1514
+ RCPQ(batch=8) Lower priority popped: 753
1515
+ RCPQ(batch=16) Lower priority popped: 1436
1516
+ RCPQ(batch=50) Lower priority popped: 3297
1517
+
1518
+ ------ Size: 1048576 Get top: 0.1% (Num: 1048) ------
1519
+ FIFO Q Lower priority popped: 1046345
1520
+ RCPQ(strict) Lower priority popped: 0
1521
+ RCPQ(batch=2) Lower priority popped: 124
1522
+ RCPQ(batch=8) Lower priority popped: 449
1523
+ RCPQ(batch=16) Lower priority popped: 1111
1524
+ RCPQ(batch=50) Lower priority popped: 3648
1525
+
1526
+ ------ Size: 1048576 Get top: 1% (Num: 10485) ------
1527
+ FIFO Q Lower priority popped: 1038012
1528
+ RCPQ(strict) Lower priority popped: 0
1529
+ RCPQ(batch=2) Lower priority popped: 297
1530
+ RCPQ(batch=8) Lower priority popped: 1241
1531
+ RCPQ(batch=16) Lower priority popped: 2489
1532
+ RCPQ(batch=50) Lower priority popped: 7764
1533
+
1534
+ ------ Size: 1048576 Get top: 10% (Num: 104857) ------
1535
+ FIFO Q Lower priority popped: 943706
1536
+ RCPQ(strict) Lower priority popped: 0
1537
+ RCPQ(batch=2) Lower priority popped: 1984
1538
+ RCPQ(batch=8) Lower priority popped: 8150
1539
+ RCPQ(batch=16) Lower priority popped: 15787
1540
+ RCPQ(batch=50) Lower priority popped: 42778
1541
+
1542
+ The experiment was running on 1 NUMA node,
1543
+ which is 14 cores.
1544
+
1545
+ rchitecture: x86_64
1546
+ CPU op-mode(s): 32-bit, 64-bit
1547
+ Byte Order: Little Endian
1548
+ CPU(s): 56
1549
+ On-line CPU(s) list: 0-55
1550
+ Thread(s) per core: 2
1551
+ Core(s) per socket: 14
1552
+ Socket(s): 2
1553
+ NUMA node(s): 2
1554
+ Vendor ID: GenuineIntel
1555
+ CPU family: 6
1556
+ Model: 79
1557
+ Model name: Intel(R) Xeon(R) CPU E5-2680 v4 @ 2.40GHz
1558
+ Stepping: 1
1559
+ CPU MHz: 2401.000
1560
+ CPU max MHz: 2401.0000
1561
+ CPU min MHz: 1200.0000
1562
+ BogoMIPS: 4788.91
1563
+ Virtualization: VT-x
1564
+ L1d cache: 32K
1565
+ L1i cache: 32K
1566
+ L2 cache: 256K
1567
+ L3 cache: 35840K
1568
+ NUMA node0 CPU(s): 0-13,28-41
1569
+ NUMA node1 CPU(s): 14-27,42-55
1570
+ */