react-native-windows 0.83.0 → 0.83.3
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.
- package/Common/unicode.cpp +36 -0
- package/Common/unicode.h +8 -0
- package/Directory.Build.props +2 -17
- package/Folly/ThreadNameStub.cpp +4 -6
- package/Microsoft.ReactNative/Fabric/Composition/CompositionEventHandler.cpp +17 -4
- package/Microsoft.ReactNative/Fabric/Composition/ParagraphComponentView.cpp +6 -4
- package/Microsoft.ReactNative/Fabric/Composition/TextDrawing.cpp +1 -1
- package/Microsoft.ReactNative/Fabric/Composition/TextInput/WindowsTextInputComponentView.cpp +8 -4
- package/Microsoft.ReactNative/Fabric/platform/react/renderer/textlayoutmanager/WindowsTextLayoutManager.cpp +1 -1
- package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj +4 -9
- package/Microsoft.ReactNative/Microsoft.ReactNative.vcxproj.filters +0 -3
- package/Microsoft.ReactNative/ReactNativeAppBuilder.idl +3 -0
- package/Microsoft.ReactNative/Utils/LocalBundleReader.cpp +33 -25
- package/Microsoft.ReactNative/Utils/LocalBundleReader.h +5 -3
- package/Microsoft.ReactNative/Utils/UwpScriptStore.cpp +2 -2
- package/Microsoft.ReactNative/Utils/UwpScriptStore.h +3 -2
- package/Microsoft.ReactNative.Cxx/Microsoft.ReactNative.Cxx.vcxitems +16 -0
- package/Microsoft.ReactNative.Managed/Microsoft.ReactNative.Managed.csproj +3 -3
- package/Microsoft.ReactNative.Managed.CodeGen/Microsoft.ReactNative.Managed.CodeGen.csproj +10 -10
- package/Microsoft.ReactNative.Managed.CodeGen/Properties/PublishProfiles/DeployAsTool-Debug.pubxml +1 -1
- package/Microsoft.ReactNative.Managed.CodeGen/Properties/PublishProfiles/DeployAsTool-Release.pubxml +1 -1
- package/PropertySheets/CIBuildOptimizations.props +2 -2
- package/PropertySheets/Generated/PackageVersion.g.props +3 -3
- package/PropertySheets/JSEngine.props +1 -1
- package/PropertySheets/NuGet.LockFile.props +9 -1
- package/PropertySheets/React.Cpp.props +7 -6
- package/PropertySheets/WinUI.props +4 -3
- package/ReactCommon/ReactCommon.vcxproj +0 -5
- package/Scripts/ConfigureYarnPackageAgeGate.ps1 +25 -0
- package/Scripts/EnableInternalWinAppSDKFeed.ps1 +12 -5
- package/Scripts/JustMyXaml.ps1 +8 -8
- package/Scripts/NuGetRestoreForceEvaluateAllSolutions.ps1 +103 -6
- package/Scripts/RunRnwInitWindows.js +37 -0
- package/Scripts/Tfs/Layout-Desktop-Headers.ps1 +4 -37
- package/Scripts/UnitTest.ps1 +3 -1
- package/Scripts/UpdateNightlyDependencies.ps1 +47 -0
- package/Scripts/creaternwapp.cmd +35 -12
- package/Scripts/creaternwlib.cmd +41 -18
- package/Scripts/rnw-dependencies.ps1 +15 -16
- package/Shared/DevSupportManager.cpp +55 -48
- package/Shared/DevSupportManager.h +0 -1
- package/Shared/Modules/IWebSocketModuleContentHandler.h +15 -0
- package/Shared/Modules/WebSocketModule.cpp +8 -3
- package/Shared/Networking/DefaultBlobResource.cpp +37 -0
- package/Shared/Networking/DefaultBlobResource.h +12 -0
- package/Shared/Networking/WinRTWebSocketResource.h +5 -1
- package/Shared/Shared.vcxitems +2 -0
- package/{Folly → external}/.clang-format +0 -1
- package/external/External.vcxitems +10 -0
- package/external/fast-float/.syncignore +10 -0
- package/external/fast-float/LICENSE-APACHE +190 -0
- package/external/fast-float/LICENSE-BOOST +23 -0
- package/external/fast-float/LICENSE-MIT +27 -0
- package/external/fast-float/README.md +545 -0
- package/external/fast-float/cgmanifest.json +15 -0
- package/external/fast-float/fast-float.vcxitems +14 -0
- package/external/fast-float/include/fast_float/ascii_number.h +588 -0
- package/external/fast-float/include/fast_float/bigint.h +638 -0
- package/external/fast-float/include/fast_float/constexpr_feature_detect.h +46 -0
- package/external/fast-float/include/fast_float/decimal_to_binary.h +212 -0
- package/external/fast-float/include/fast_float/digit_comparison.h +457 -0
- package/external/fast-float/include/fast_float/fast_float.h +59 -0
- package/external/fast-float/include/fast_float/fast_table.h +708 -0
- package/external/fast-float/include/fast_float/float_common.h +1240 -0
- package/external/fast-float/include/fast_float/parse_number.h +399 -0
- package/external/fast-float/sync-config.json +8 -0
- package/external/fmt/.syncignore +10 -0
- package/external/fmt/CONTRIBUTING.md +20 -0
- package/external/fmt/LICENSE +27 -0
- package/external/fmt/README.md +484 -0
- package/external/fmt/doc/ChangeLog-old.md +3290 -0
- package/external/fmt/doc/api.md +650 -0
- package/external/fmt/doc/fmt.css +61 -0
- package/external/fmt/doc/fmt.js +4 -0
- package/external/fmt/doc/get-started.md +222 -0
- package/external/fmt/doc/index.md +151 -0
- package/external/fmt/doc/perf.svg +1 -0
- package/external/fmt/doc/python-license.txt +290 -0
- package/external/fmt/doc/syntax.md +887 -0
- package/external/fmt/fmt.vcxitems +28 -0
- package/external/fmt/include/fmt/args.h +228 -0
- package/external/fmt/include/fmt/base.h +3077 -0
- package/external/fmt/include/fmt/chrono.h +2432 -0
- package/external/fmt/include/fmt/color.h +612 -0
- package/external/fmt/include/fmt/compile.h +529 -0
- package/external/fmt/include/fmt/core.h +5 -0
- package/external/fmt/include/fmt/format-inl.h +1928 -0
- package/external/fmt/include/fmt/format.h +4427 -0
- package/external/fmt/include/fmt/os.h +439 -0
- package/external/fmt/include/fmt/ostream.h +211 -0
- package/external/fmt/include/fmt/printf.h +656 -0
- package/external/fmt/include/fmt/ranges.h +882 -0
- package/external/fmt/include/fmt/std.h +699 -0
- package/external/fmt/include/fmt/xchar.h +322 -0
- package/external/fmt/src/fmt.cc +135 -0
- package/external/fmt/src/format.cc +43 -0
- package/external/fmt/src/os.cc +403 -0
- package/external/fmt/sync-config.json +8 -0
- package/external/folly/.syncignore +60 -0
- package/external/folly/LICENSE +200 -0
- package/external/folly/README.md +263 -0
- package/{fmt → external/folly/folly}/.clang-format +0 -1
- package/external/folly/folly/AtomicHashArray-inl.h +546 -0
- package/external/folly/folly/AtomicHashArray.h +431 -0
- package/external/folly/folly/AtomicHashMap-inl.h +653 -0
- package/external/folly/folly/AtomicHashMap.h +484 -0
- package/external/folly/folly/AtomicIntrusiveLinkedList.h +206 -0
- package/external/folly/folly/AtomicLinkedList.h +110 -0
- package/external/folly/folly/AtomicUnorderedMap.h +522 -0
- package/external/folly/folly/BUCK +1631 -0
- package/external/folly/folly/BUILD_MODE.bzl +72 -0
- package/external/folly/folly/Benchmark.cpp +986 -0
- package/external/folly/folly/Benchmark.h +680 -0
- package/external/folly/folly/BenchmarkUtil.h +47 -0
- package/external/folly/folly/Bits.h +17 -0
- package/external/folly/folly/CMakeLists.txt +110 -0
- package/external/folly/folly/CPortability.h +338 -0
- package/external/folly/folly/CancellationToken-inl.h +449 -0
- package/external/folly/folly/CancellationToken.cpp +250 -0
- package/external/folly/folly/CancellationToken.h +365 -0
- package/external/folly/folly/Chrono.h +132 -0
- package/external/folly/folly/ClockGettimeWrappers.cpp +93 -0
- package/external/folly/folly/ClockGettimeWrappers.h +29 -0
- package/external/folly/folly/ConcurrentBitSet.h +157 -0
- package/external/folly/folly/ConcurrentLazy.h +74 -0
- package/external/folly/folly/ConcurrentSkipList-inl.h +341 -0
- package/external/folly/folly/ConcurrentSkipList.h +824 -0
- package/external/folly/folly/ConstructorCallbackList.h +158 -0
- package/external/folly/folly/Conv.h +2026 -0
- package/external/folly/folly/CppAttributes.h +170 -0
- package/external/folly/folly/CpuId.h +297 -0
- package/external/folly/folly/DefaultKeepAliveExecutor.h +172 -0
- package/external/folly/folly/Demangle.cpp +255 -0
- package/external/folly/folly/Demangle.h +73 -0
- package/external/folly/folly/DiscriminatedPtr.h +236 -0
- package/external/folly/folly/DynamicConverter.h +17 -0
- package/external/folly/folly/Exception.h +150 -0
- package/external/folly/folly/ExceptionString.cpp +51 -0
- package/external/folly/folly/ExceptionString.h +33 -0
- package/external/folly/folly/ExceptionWrapper-inl.h +264 -0
- package/external/folly/folly/ExceptionWrapper.cpp +37 -0
- package/external/folly/folly/ExceptionWrapper.h +377 -0
- package/external/folly/folly/Executor.cpp +111 -0
- package/external/folly/folly/Executor.h +351 -0
- package/external/folly/folly/Expected.h +1725 -0
- package/external/folly/folly/FBString.h +2888 -0
- package/external/folly/folly/FBVector.h +17 -0
- package/external/folly/folly/File.cpp +180 -0
- package/external/folly/folly/File.h +177 -0
- package/external/folly/folly/FileUtil.cpp +378 -0
- package/external/folly/folly/FileUtil.h +332 -0
- package/external/folly/folly/Fingerprint.cpp +135 -0
- package/external/folly/folly/Fingerprint.h +289 -0
- package/external/folly/folly/FixedString.h +2965 -0
- package/external/folly/folly/FollyMemcpy.cpp +30 -0
- package/external/folly/folly/FollyMemcpy.h +23 -0
- package/external/folly/folly/FollyMemset.cpp +29 -0
- package/external/folly/folly/FollyMemset.h +25 -0
- package/external/folly/folly/Format-inl.h +1152 -0
- package/external/folly/folly/Format.cpp +429 -0
- package/external/folly/folly/Format.h +463 -0
- package/external/folly/folly/FormatArg.h +285 -0
- package/external/folly/folly/FormatTraits.h +65 -0
- package/external/folly/folly/Function.h +1159 -0
- package/external/folly/folly/GLog.h +85 -0
- package/external/folly/folly/GroupVarint.cpp +153 -0
- package/external/folly/folly/GroupVarint.h +630 -0
- package/external/folly/folly/Hash.h +20 -0
- package/external/folly/folly/IPAddress.cpp +490 -0
- package/external/folly/folly/IPAddress.h +667 -0
- package/external/folly/folly/IPAddressException.h +82 -0
- package/external/folly/folly/IPAddressV4.cpp +305 -0
- package/external/folly/folly/IPAddressV4.h +495 -0
- package/external/folly/folly/IPAddressV6.cpp +541 -0
- package/external/folly/folly/IPAddressV6.h +627 -0
- package/external/folly/folly/Indestructible.h +164 -0
- package/external/folly/folly/IndexedMemPool.h +550 -0
- package/external/folly/folly/IntrusiveList.h +17 -0
- package/external/folly/folly/Lazy.h +142 -0
- package/external/folly/folly/Likely.h +76 -0
- package/external/folly/folly/MPMCPipeline.h +280 -0
- package/external/folly/folly/MPMCQueue.h +1556 -0
- package/external/folly/folly/MacAddress.cpp +188 -0
- package/external/folly/folly/MacAddress.h +260 -0
- package/external/folly/folly/MapUtil.h +17 -0
- package/external/folly/folly/Math.h +258 -0
- package/external/folly/folly/MaybeManagedPtr.h +120 -0
- package/external/folly/folly/Memory.h +900 -0
- package/external/folly/folly/MicroLock.cpp +76 -0
- package/external/folly/folly/MicroLock.h +354 -0
- package/external/folly/folly/MicroSpinLock.h +17 -0
- package/external/folly/folly/MoveWrapper.h +76 -0
- package/external/folly/folly/ObserverContainer.h +1026 -0
- package/external/folly/folly/Optional.h +743 -0
- package/external/folly/folly/Overload.h +325 -0
- package/external/folly/folly/PackedSyncPtr.h +147 -0
- package/external/folly/folly/Padded.h +464 -0
- package/external/folly/folly/Poly-inl.h +230 -0
- package/external/folly/folly/Poly.h +1095 -0
- package/external/folly/folly/PolyException.h +43 -0
- package/external/folly/folly/Portability.h +644 -0
- package/external/folly/folly/Preprocessor.h +236 -0
- package/external/folly/folly/ProducerConsumerQueue.h +182 -0
- package/external/folly/folly/RWSpinLock.h +17 -0
- package/external/folly/folly/Random-inl.h +86 -0
- package/external/folly/folly/Random.cpp +184 -0
- package/external/folly/folly/Random.h +434 -0
- package/external/folly/folly/Range.h +1772 -0
- package/external/folly/folly/Replaceable.h +636 -0
- package/external/folly/folly/ScopeGuard.cpp +29 -0
- package/external/folly/folly/ScopeGuard.h +420 -0
- package/external/folly/folly/SharedMutex.cpp +81 -0
- package/external/folly/folly/SharedMutex.h +1751 -0
- package/external/folly/folly/Singleton-inl.h +332 -0
- package/external/folly/folly/Singleton.cpp +512 -0
- package/external/folly/folly/Singleton.h +891 -0
- package/external/folly/folly/SingletonThreadLocal.cpp +53 -0
- package/external/folly/folly/SingletonThreadLocal.h +263 -0
- package/external/folly/folly/SocketAddress.cpp +786 -0
- package/external/folly/folly/SocketAddress.h +768 -0
- package/external/folly/folly/SpinLock.h +55 -0
- package/external/folly/folly/String-inl.h +668 -0
- package/external/folly/folly/String.cpp +777 -0
- package/external/folly/folly/String.h +767 -0
- package/external/folly/folly/Subprocess.cpp +1142 -0
- package/external/folly/folly/Subprocess.h +1055 -0
- package/external/folly/folly/Synchronized.h +1833 -0
- package/external/folly/folly/SynchronizedPtr.h +106 -0
- package/external/folly/folly/ThreadCachedInt.h +175 -0
- package/external/folly/folly/ThreadLocal.h +478 -0
- package/external/folly/folly/TimeoutQueue.cpp +78 -0
- package/external/folly/folly/TimeoutQueue.h +123 -0
- package/external/folly/folly/TokenBucket.h +673 -0
- package/external/folly/folly/Traits.h +1442 -0
- package/external/folly/folly/Try-inl.h +372 -0
- package/external/folly/folly/Try.cpp +23 -0
- package/external/folly/folly/Try.h +728 -0
- package/external/folly/folly/UTF8String.h +56 -0
- package/external/folly/folly/Unicode.cpp +201 -0
- package/external/folly/folly/Unicode.h +94 -0
- package/external/folly/folly/Unit.h +65 -0
- package/external/folly/folly/Uri-inl.h +101 -0
- package/external/folly/folly/Uri.cpp +190 -0
- package/external/folly/folly/Uri.h +142 -0
- package/external/folly/folly/Utility.h +932 -0
- package/external/folly/folly/VERSION +1 -0
- package/external/folly/folly/Varint.h +230 -0
- package/external/folly/folly/VirtualExecutor.h +17 -0
- package/external/folly/folly/algorithm/simd/BUCK +47 -0
- package/external/folly/folly/algorithm/simd/Contains.cpp +42 -0
- package/external/folly/folly/algorithm/simd/Contains.h +116 -0
- package/external/folly/folly/algorithm/simd/FindFixed.h +301 -0
- package/external/folly/folly/algorithm/simd/Ignore.h +52 -0
- package/external/folly/folly/algorithm/simd/Movemask.h +207 -0
- package/external/folly/folly/algorithm/simd/detail/BUCK +70 -0
- package/external/folly/folly/algorithm/simd/detail/ContainsImpl.h +91 -0
- package/external/folly/folly/algorithm/simd/detail/SimdAnyOf.h +83 -0
- package/external/folly/folly/algorithm/simd/detail/SimdForEach.h +209 -0
- package/external/folly/folly/algorithm/simd/detail/SimdPlatform.h +445 -0
- package/external/folly/folly/algorithm/simd/detail/Traits.h +125 -0
- package/external/folly/folly/algorithm/simd/detail/UnrollUtils.h +126 -0
- package/external/folly/folly/base64.h +264 -0
- package/external/folly/folly/chrono/BUCK +29 -0
- package/external/folly/folly/chrono/Clock.h +65 -0
- package/external/folly/folly/chrono/Conv.h +712 -0
- package/external/folly/folly/chrono/test/BUCK +26 -0
- package/external/folly/folly/chrono/test/ClockTest.cpp +68 -0
- package/external/folly/folly/chrono/test/ConvTest.cpp +652 -0
- package/external/folly/folly/concurrency/AtomicSharedPtr.h +387 -0
- package/external/folly/folly/concurrency/BUCK +170 -0
- package/external/folly/folly/concurrency/CacheLocality.h +460 -0
- package/external/folly/folly/concurrency/ConcurrentHashMap.h +822 -0
- package/external/folly/folly/concurrency/CoreCachedSharedPtr.h +232 -0
- package/external/folly/folly/concurrency/DeadlockDetector.cpp +27 -0
- package/external/folly/folly/concurrency/DeadlockDetector.h +44 -0
- package/external/folly/folly/concurrency/DynamicBoundedQueue.h +751 -0
- package/external/folly/folly/concurrency/PriorityUnboundedQueueSet.h +207 -0
- package/external/folly/folly/concurrency/ProcessLocalUniqueId.cpp +46 -0
- package/external/folly/folly/concurrency/ProcessLocalUniqueId.h +38 -0
- package/external/folly/folly/concurrency/SingletonRelaxedCounter.h +325 -0
- package/external/folly/folly/concurrency/ThreadCachedSynchronized.h +227 -0
- package/external/folly/folly/concurrency/UnboundedQueue.h +891 -0
- package/external/folly/folly/concurrency/container/BUCK +77 -0
- package/external/folly/folly/concurrency/container/FlatCombiningPriorityQueue.h +426 -0
- package/external/folly/folly/concurrency/container/LockFreeRingBuffer.h +306 -0
- package/external/folly/folly/concurrency/container/RelaxedConcurrentPriorityQueue.h +1212 -0
- package/external/folly/folly/concurrency/container/SingleWriterFixedHashMap.h +322 -0
- package/external/folly/folly/concurrency/container/atomic_grow_array.h +564 -0
- package/external/folly/folly/concurrency/container/test/BUCK +75 -0
- package/external/folly/folly/concurrency/container/test/FlatCombiningPriorityQueueTest.cpp +570 -0
- package/external/folly/folly/concurrency/container/test/LockFreeRingBufferTest.cpp +276 -0
- package/external/folly/folly/concurrency/container/test/RelaxedConcurrentPriorityQueueTest.cpp +1570 -0
- package/external/folly/folly/concurrency/container/test/SingleWriterFixedHashMapTest.cpp +401 -0
- package/external/folly/folly/concurrency/container/test/atomic_grow_array_test.cpp +187 -0
- package/external/folly/folly/concurrency/detail/AtomicSharedPtr-detail.h +212 -0
- package/external/folly/folly/concurrency/detail/ConcurrentHashMap-detail.h +1911 -0
- package/external/folly/folly/concurrency/memory/AtomicReadMostlyMainPtr.cpp +43 -0
- package/external/folly/folly/concurrency/memory/AtomicReadMostlyMainPtr.h +190 -0
- package/external/folly/folly/concurrency/memory/BUCK +53 -0
- package/external/folly/folly/concurrency/memory/PrimaryPtr.h +338 -0
- package/external/folly/folly/concurrency/memory/ReadMostlySharedPtr.h +511 -0
- package/external/folly/folly/concurrency/memory/TLRefCount.h +228 -0
- package/external/folly/folly/concurrency/memory/test/AtomicReadMostlyMainPtrBenchmark.cpp +56 -0
- package/external/folly/folly/concurrency/memory/test/AtomicReadMostlyMainPtrTest.cpp +454 -0
- package/external/folly/folly/concurrency/memory/test/BUCK +95 -0
- package/external/folly/folly/concurrency/memory/test/PrimaryPtrTest.cpp +303 -0
- package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrBenchmark.cpp +138 -0
- package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrStressTest.cpp +75 -0
- package/external/folly/folly/concurrency/memory/test/ReadMostlySharedPtrTest.cpp +378 -0
- package/external/folly/folly/concurrency/memory/test/RefCountBenchmark.cpp +90 -0
- package/external/folly/folly/concurrency/memory/test/RefCountTest.cpp +168 -0
- package/external/folly/folly/concurrency/test/AtomicSharedPtrCounted.h +156 -0
- package/external/folly/folly/concurrency/test/AtomicSharedPtrPerformance.cpp +255 -0
- package/external/folly/folly/concurrency/test/AtomicSharedPtrTest.cpp +257 -0
- package/external/folly/folly/concurrency/test/BUCK +229 -0
- package/external/folly/folly/concurrency/test/CacheLocalityBenchmark.cpp +392 -0
- package/external/folly/folly/concurrency/test/CacheLocalityTest.cpp +1229 -0
- package/external/folly/folly/concurrency/test/ConcurrentHashMapBench.cpp +260 -0
- package/external/folly/folly/concurrency/test/ConcurrentHashMapTest.cpp +1242 -0
- package/external/folly/folly/concurrency/test/CoreCachedSharedPtrTest.cpp +408 -0
- package/external/folly/folly/concurrency/test/DynamicBoundedQueueTest.cpp +984 -0
- package/external/folly/folly/concurrency/test/PriorityUnboundedQueueSetTest.cpp +73 -0
- package/external/folly/folly/concurrency/test/ProcessLocalUniqueIdTest.cpp +66 -0
- package/external/folly/folly/concurrency/test/SingletonRelaxedCounterBench.cpp +101 -0
- package/external/folly/folly/concurrency/test/SingletonRelaxedCounterTest.cpp +185 -0
- package/external/folly/folly/concurrency/test/ThreadCachedSynchronizedBench.cpp +76 -0
- package/external/folly/folly/concurrency/test/ThreadCachedSynchronizedTest.cpp +93 -0
- package/external/folly/folly/concurrency/test/UnboundedQueueTest.cpp +1302 -0
- package/external/folly/folly/container/Access.h +57 -0
- package/external/folly/folly/container/Array.h +87 -0
- package/external/folly/folly/container/BUCK +353 -0
- package/external/folly/folly/container/BitIterator.h +203 -0
- package/external/folly/folly/container/Enumerate.h +162 -0
- package/external/folly/folly/container/EvictingCacheMap.h +730 -0
- package/external/folly/folly/container/F14.md +300 -0
- package/external/folly/folly/container/F14Map-fwd.h +113 -0
- package/external/folly/folly/container/F14Map.h +2108 -0
- package/external/folly/folly/container/F14Set-fwd.h +95 -0
- package/external/folly/folly/container/F14Set.h +1603 -0
- package/external/folly/folly/container/FBVector.h +1711 -0
- package/external/folly/folly/container/Foreach-inl.h +316 -0
- package/external/folly/folly/container/Foreach.h +209 -0
- package/external/folly/folly/container/HeterogeneousAccess-fwd.h +33 -0
- package/external/folly/folly/container/HeterogeneousAccess.h +171 -0
- package/external/folly/folly/container/IntrusiveHeap.h +268 -0
- package/external/folly/folly/container/IntrusiveList.h +131 -0
- package/external/folly/folly/container/Iterator.h +843 -0
- package/external/folly/folly/container/MapUtil.h +376 -0
- package/external/folly/folly/container/Merge.h +90 -0
- package/external/folly/folly/container/RegexMatchCache.cpp +521 -0
- package/external/folly/folly/container/RegexMatchCache.h +699 -0
- package/external/folly/folly/container/Reserve.h +109 -0
- package/external/folly/folly/container/SparseByteSet.h +123 -0
- package/external/folly/folly/container/View.h +81 -0
- package/external/folly/folly/container/WeightedEvictingCacheMap.h +651 -0
- package/external/folly/folly/container/detail/BUCK +115 -0
- package/external/folly/folly/container/detail/BitIteratorDetail.h +87 -0
- package/external/folly/folly/container/detail/F14Defaults.h +34 -0
- package/external/folly/folly/container/detail/F14IntrinsicsAvailability.h +67 -0
- package/external/folly/folly/container/detail/F14MapFallback.h +717 -0
- package/external/folly/folly/container/detail/F14Mask.h +235 -0
- package/external/folly/folly/container/detail/F14Policy.h +1523 -0
- package/external/folly/folly/container/detail/F14SetFallback.h +528 -0
- package/external/folly/folly/container/detail/F14Table.cpp +71 -0
- package/external/folly/folly/container/detail/F14Table.h +2680 -0
- package/external/folly/folly/container/detail/Util.h +303 -0
- package/external/folly/folly/container/detail/tape_detail.h +135 -0
- package/external/folly/folly/container/detail/test/BUCK +14 -0
- package/external/folly/folly/container/detail/test/F14DetailTest.cpp +47 -0
- package/external/folly/folly/container/heap_vector_types.h +1683 -0
- package/external/folly/folly/container/range_traits.h +81 -0
- package/external/folly/folly/container/small_vector.h +1476 -0
- package/external/folly/folly/container/sorted_vector_types.h +1652 -0
- package/external/folly/folly/container/span.h +408 -0
- package/external/folly/folly/container/tape.h +608 -0
- package/external/folly/folly/container/test/.clang-tidy +12 -0
- package/external/folly/folly/container/test/AccessTest.cpp +138 -0
- package/external/folly/folly/container/test/ArrayTest.cpp +84 -0
- package/external/folly/folly/container/test/BUCK +568 -0
- package/external/folly/folly/container/test/BitIteratorBench.cpp +112 -0
- package/external/folly/folly/container/test/BitIteratorTest.cpp +109 -0
- package/external/folly/folly/container/test/EnumerateTest.cpp +294 -0
- package/external/folly/folly/container/test/EvictingCacheMapBench.cpp +80 -0
- package/external/folly/folly/container/test/EvictingCacheMapTest.cpp +842 -0
- package/external/folly/folly/container/test/F14AsanSupportTest.cpp +143 -0
- package/external/folly/folly/container/test/F14FwdTest.cpp +37 -0
- package/external/folly/folly/container/test/F14InterprocessTest.cpp +404 -0
- package/external/folly/folly/container/test/F14MapTest.cpp +2543 -0
- package/external/folly/folly/container/test/F14PolicyTest.cpp +49 -0
- package/external/folly/folly/container/test/F14SetTest.cpp +1738 -0
- package/external/folly/folly/container/test/F14SmallOverheads.cpp +215 -0
- package/external/folly/folly/container/test/F14TestUtil.h +117 -0
- package/external/folly/folly/container/test/FBVectorBenchmark.cpp +380 -0
- package/external/folly/folly/container/test/FBVectorBenchmarks.cpp.h +100 -0
- package/external/folly/folly/container/test/FBVectorTest.cpp +326 -0
- package/external/folly/folly/container/test/FBVectorTests.cpp.h +304 -0
- package/external/folly/folly/container/test/ForeachBenchmark.cpp +388 -0
- package/external/folly/folly/container/test/ForeachTest.cpp +338 -0
- package/external/folly/folly/container/test/HashMapsBench.cpp +458 -0
- package/external/folly/folly/container/test/HeterogeneousAccessTest.cpp +242 -0
- package/external/folly/folly/container/test/IntrusiveHeapTest.cpp +262 -0
- package/external/folly/folly/container/test/IteratorTest.cpp +989 -0
- package/external/folly/folly/container/test/MapUtilTest.cpp +365 -0
- package/external/folly/folly/container/test/MergeTest.cpp +66 -0
- package/external/folly/folly/container/test/RegexMatchCacheTest.cpp +634 -0
- package/external/folly/folly/container/test/ReserveTest.cpp +173 -0
- package/external/folly/folly/container/test/SparseByteSetBenchmark.cpp +153 -0
- package/external/folly/folly/container/test/SparseByteSetTest.cpp +117 -0
- package/external/folly/folly/container/test/TrackingTypes.h +584 -0
- package/external/folly/folly/container/test/UtilTest.cpp +609 -0
- package/external/folly/folly/container/test/WeightedEvictingCacheMapTest.cpp +800 -0
- package/external/folly/folly/container/test/heap_vector_types_test.cpp +1774 -0
- package/external/folly/folly/container/test/range_traits_test.cpp +59 -0
- package/external/folly/folly/container/test/small_vector_test.cpp +1571 -0
- package/external/folly/folly/container/test/sorted_vector_test.cpp +1589 -0
- package/external/folly/folly/container/test/span_test.cpp +520 -0
- package/external/folly/folly/container/test/tape_bench.cpp +200 -0
- package/external/folly/folly/container/test/tape_test.cpp +590 -0
- package/external/folly/folly/defs.bzl +238 -0
- package/external/folly/folly/detail/AsyncTrace.cpp +36 -0
- package/external/folly/folly/detail/AsyncTrace.h +44 -0
- package/external/folly/folly/detail/AtomicHashUtils.h +42 -0
- package/external/folly/folly/detail/AtomicUnorderedMapUtils.h +80 -0
- package/external/folly/folly/detail/BUCK +406 -0
- package/external/folly/folly/detail/DiscriminatedPtrDetail.h +172 -0
- package/external/folly/folly/detail/FileUtilDetail.cpp +63 -0
- package/external/folly/folly/detail/FileUtilDetail.h +85 -0
- package/external/folly/folly/detail/FileUtilVectorDetail.h +81 -0
- package/external/folly/folly/detail/FingerprintPolynomial.h +132 -0
- package/external/folly/folly/detail/Futex-inl.h +123 -0
- package/external/folly/folly/detail/Futex.cpp +273 -0
- package/external/folly/folly/detail/Futex.h +109 -0
- package/external/folly/folly/detail/GroupVarintDetail.h +101 -0
- package/external/folly/folly/detail/IPAddress.cpp +37 -0
- package/external/folly/folly/detail/IPAddress.h +57 -0
- package/external/folly/folly/detail/IPAddressSource.h +278 -0
- package/external/folly/folly/detail/Iterators.h +156 -0
- package/external/folly/folly/detail/MPMCPipelineDetail.h +122 -0
- package/external/folly/folly/detail/MemoryIdler.cpp +233 -0
- package/external/folly/folly/detail/MemoryIdler.h +216 -0
- package/external/folly/folly/detail/PerfScoped.cpp +112 -0
- package/external/folly/folly/detail/PerfScoped.h +70 -0
- package/external/folly/folly/detail/PolyDetail.h +921 -0
- package/external/folly/folly/detail/RangeCommon.cpp +55 -0
- package/external/folly/folly/detail/RangeCommon.h +93 -0
- package/external/folly/folly/detail/RangeSse42.cpp +198 -0
- package/external/folly/folly/detail/RangeSse42.h +30 -0
- package/external/folly/folly/detail/SimpleSimdStringUtils.cpp +31 -0
- package/external/folly/folly/detail/SimpleSimdStringUtils.h +27 -0
- package/external/folly/folly/detail/SimpleSimdStringUtilsImpl.h +63 -0
- package/external/folly/folly/detail/Singleton.h +34 -0
- package/external/folly/folly/detail/SlowFingerprint.h +90 -0
- package/external/folly/folly/detail/SocketFastOpen.cpp +175 -0
- package/external/folly/folly/detail/SocketFastOpen.h +89 -0
- package/external/folly/folly/detail/SplitStringSimd.cpp +84 -0
- package/external/folly/folly/detail/SplitStringSimd.h +151 -0
- package/external/folly/folly/detail/SplitStringSimdImpl.h +149 -0
- package/external/folly/folly/detail/Sse.cpp +35 -0
- package/external/folly/folly/detail/Sse.h +45 -0
- package/external/folly/folly/detail/StaticSingletonManager.cpp +119 -0
- package/external/folly/folly/detail/StaticSingletonManager.h +298 -0
- package/external/folly/folly/detail/ThreadLocalDetail.cpp +492 -0
- package/external/folly/folly/detail/ThreadLocalDetail.h +800 -0
- package/external/folly/folly/detail/TrapOnAvx512.cpp +41 -0
- package/external/folly/folly/detail/TrapOnAvx512.h +21 -0
- package/external/folly/folly/detail/TurnSequencer.h +295 -0
- package/external/folly/folly/detail/TypeList.h +551 -0
- package/external/folly/folly/detail/UniqueInstance.cpp +136 -0
- package/external/folly/folly/detail/UniqueInstance.h +68 -0
- package/external/folly/folly/detail/base64_detail/BUCK +102 -0
- package/external/folly/folly/detail/base64_detail/Base64Api.cpp +40 -0
- package/external/folly/folly/detail/base64_detail/Base64Api.h +101 -0
- package/external/folly/folly/detail/base64_detail/Base64Common.h +80 -0
- package/external/folly/folly/detail/base64_detail/Base64Constants.h +79 -0
- package/external/folly/folly/detail/base64_detail/Base64HiddenConstants.h +129 -0
- package/external/folly/folly/detail/base64_detail/Base64SWAR.cpp +161 -0
- package/external/folly/folly/detail/base64_detail/Base64SWAR.h +32 -0
- package/external/folly/folly/detail/base64_detail/Base64Scalar.h +262 -0
- package/external/folly/folly/detail/base64_detail/Base64Simd.h +102 -0
- package/external/folly/folly/detail/base64_detail/Base64_SSE4_2.cpp +42 -0
- package/external/folly/folly/detail/base64_detail/Base64_SSE4_2.h +33 -0
- package/external/folly/folly/detail/base64_detail/Base64_SSE4_2_Platform.h +167 -0
- package/external/folly/folly/detail/base64_detail/README.md +392 -0
- package/external/folly/folly/detail/base64_detail/tests/BUCK +36 -0
- package/external/folly/folly/detail/base64_detail/tests/Base64AgainstScalarTest.cpp +141 -0
- package/external/folly/folly/detail/base64_detail/tests/Base64PlatformTest.cpp +273 -0
- package/external/folly/folly/detail/base64_detail/tests/Base64SpecialCasesTest.cpp +555 -0
- package/external/folly/folly/detail/test/AsyncTraceTest.cpp +43 -0
- package/external/folly/folly/detail/test/BUCK +118 -0
- package/external/folly/folly/detail/test/FileUtilDetailTest.cpp +56 -0
- package/external/folly/folly/detail/test/PerfScopedTest.cpp +107 -0
- package/external/folly/folly/detail/test/SimpleSimdStringUtilsTest.cpp +92 -0
- package/external/folly/folly/detail/test/SplitStringSimdTest.cpp +242 -0
- package/external/folly/folly/detail/test/StaticSingletonManagerTest.cpp +121 -0
- package/external/folly/folly/detail/test/ThreadLocalBenchmark.cpp +116 -0
- package/external/folly/folly/detail/test/ThreadLocalDetailTest.cpp +194 -0
- package/external/folly/folly/detail/test/TrapOnAvx512TestNegative.cpp +29 -0
- package/external/folly/folly/detail/test/UniqueInstanceTest.cpp +60 -0
- package/external/folly/folly/detail/thread_local_globals.cpp +69 -0
- package/external/folly/folly/detail/thread_local_globals.h +36 -0
- package/external/folly/folly/docs/AtomicHashMap.md +134 -0
- package/external/folly/folly/docs/Benchmark.md +310 -0
- package/external/folly/folly/docs/Conv.md +291 -0
- package/external/folly/folly/docs/Dynamic.md +220 -0
- package/external/folly/folly/docs/DynamicConverter.md +71 -0
- package/external/folly/folly/docs/Executors.md +63 -0
- package/external/folly/folly/docs/FBString.md +46 -0
- package/external/folly/folly/docs/FBVector.md +200 -0
- package/external/folly/folly/docs/Fbvector--graphical_solutions.png +0 -0
- package/external/folly/folly/docs/Format.md +177 -0
- package/external/folly/folly/docs/Function.md +92 -0
- package/external/folly/folly/docs/Futures.md +263 -0
- package/external/folly/folly/docs/GroupVarint.md +46 -0
- package/external/folly/folly/docs/Histogram.md +104 -0
- package/external/folly/folly/docs/MapUtils.md +80 -0
- package/external/folly/folly/docs/Overview.md +263 -0
- package/external/folly/folly/docs/PackedSyncPtr.md +77 -0
- package/external/folly/folly/docs/Poly.md +500 -0
- package/external/folly/folly/docs/ProducerConsumerQueue.md +82 -0
- package/external/folly/folly/docs/Rcu.md +218 -0
- package/external/folly/folly/docs/SmallLocks.md +24 -0
- package/external/folly/folly/docs/Synchronized.md +793 -0
- package/external/folly/folly/docs/ThreadCachedInt.md +98 -0
- package/external/folly/folly/docs/ThreadLocal.md +105 -0
- package/external/folly/folly/docs/Traits.md +161 -0
- package/external/folly/folly/docs/small_vector.md +64 -0
- package/external/folly/folly/docs/style.css +23 -0
- package/external/folly/folly/dynamic-inl.h +17 -0
- package/external/folly/folly/dynamic.h +17 -0
- package/external/folly/folly/folly_extended_library.bzl +28 -0
- package/external/folly/folly/functional/ApplyTuple.h +204 -0
- package/external/folly/folly/functional/BUCK +57 -0
- package/external/folly/folly/functional/Invoke.h +880 -0
- package/external/folly/folly/functional/Partial.h +130 -0
- package/external/folly/folly/functional/protocol.h +203 -0
- package/external/folly/folly/functional/test/ApplyTupleTest.cpp +549 -0
- package/external/folly/folly/functional/test/BUCK +57 -0
- package/external/folly/folly/functional/test/InvokeTest.cpp +483 -0
- package/external/folly/folly/functional/test/PartialTest.cpp +141 -0
- package/external/folly/folly/functional/test/protocol_test.cpp +177 -0
- package/external/folly/folly/functional/test/traits_test.cpp +551 -0
- package/external/folly/folly/functional/traits.h +675 -0
- package/external/folly/folly/hash/BUCK +86 -0
- package/external/folly/folly/hash/Checksum.cpp +275 -0
- package/external/folly/folly/hash/Checksum.h +94 -0
- package/external/folly/folly/hash/FarmHash.h +46 -0
- package/external/folly/folly/hash/Hash.h +1045 -0
- package/external/folly/folly/hash/MurmurHash.h +86 -0
- package/external/folly/folly/hash/SpookyHashV1.cpp +391 -0
- package/external/folly/folly/hash/SpookyHashV1.h +307 -0
- package/external/folly/folly/hash/SpookyHashV2.cpp +392 -0
- package/external/folly/folly/hash/SpookyHashV2.h +339 -0
- package/external/folly/folly/hash/detail/BUCK +26 -0
- package/external/folly/folly/hash/detail/ChecksumDetail.cpp +296 -0
- package/external/folly/folly/hash/detail/ChecksumDetail.h +137 -0
- package/external/folly/folly/hash/detail/Crc32CombineDetail.cpp +191 -0
- package/external/folly/folly/hash/detail/Crc32cDetail.cpp +303 -0
- package/external/folly/folly/hash/test/BUCK +132 -0
- package/external/folly/folly/hash/test/ChecksumBenchmark.cpp +91 -0
- package/external/folly/folly/hash/test/ChecksumTest.cpp +587 -0
- package/external/folly/folly/hash/test/FarmHashTest.cpp +41 -0
- package/external/folly/folly/hash/test/HashBenchmark.cpp +238 -0
- package/external/folly/folly/hash/test/HashTest.cpp +997 -0
- package/external/folly/folly/hash/test/MurmurHashTest.cpp +76 -0
- package/external/folly/folly/hash/test/SpookyHashV1Test.cpp +559 -0
- package/external/folly/folly/hash/test/SpookyHashV2Test.cpp +549 -0
- package/external/folly/folly/hash/test/traits_test.cpp +69 -0
- package/external/folly/folly/hash/traits.h +115 -0
- package/external/folly/folly/json/BUCK +155 -0
- package/external/folly/folly/json/DynamicConverter.h +464 -0
- package/external/folly/folly/json/DynamicParser-inl.h +316 -0
- package/external/folly/folly/json/DynamicParser.cpp +198 -0
- package/external/folly/folly/json/DynamicParser.h +394 -0
- package/external/folly/folly/json/JSONSchema.cpp +1030 -0
- package/external/folly/folly/json/JSONSchema.h +73 -0
- package/external/folly/folly/json/JsonMockUtil.h +73 -0
- package/external/folly/folly/json/JsonTestUtil.cpp +167 -0
- package/external/folly/folly/json/JsonTestUtil.h +88 -0
- package/external/folly/folly/json/bser/BUCK +24 -0
- package/external/folly/folly/json/bser/Bser.h +107 -0
- package/external/folly/folly/json/bser/Dump.cpp +253 -0
- package/external/folly/folly/json/bser/Load.cpp +246 -0
- package/external/folly/folly/json/bser/test/BUCK +14 -0
- package/external/folly/folly/json/bser/test/BserTest.cpp +149 -0
- package/external/folly/folly/json/dynamic.cpp +552 -0
- package/external/folly/folly/json/dynamic.h +1346 -0
- package/external/folly/folly/json/json.h +238 -0
- package/external/folly/folly/json/json_patch.cpp +325 -0
- package/external/folly/folly/json/json_patch.h +126 -0
- package/external/folly/folly/json/json_pointer.cpp +114 -0
- package/external/folly/folly/json/json_pointer.h +87 -0
- package/external/folly/folly/json/test/BUCK +147 -0
- package/external/folly/folly/json/test/DynamicBenchmark.cpp +146 -0
- package/external/folly/folly/json/test/DynamicConverterTest.cpp +518 -0
- package/external/folly/folly/json/test/DynamicOtherTest.cpp +344 -0
- package/external/folly/folly/json/test/DynamicParserTest.cpp +443 -0
- package/external/folly/folly/json/test/DynamicTest.cpp +1647 -0
- package/external/folly/folly/json/test/JSONSchemaTest.cpp +450 -0
- package/external/folly/folly/json/test/JsonBenchmark.cpp +264 -0
- package/external/folly/folly/json/test/JsonOtherTest.cpp +51 -0
- package/external/folly/folly/json/test/JsonTest.cpp +1153 -0
- package/external/folly/folly/json/test/JsonTestUtilTest.cpp +97 -0
- package/external/folly/folly/json/test/json_patch_test.cpp +361 -0
- package/external/folly/folly/json/test/json_pointer_test.cpp +58 -0
- package/external/folly/folly/json/tool/BUCK +13 -0
- package/external/folly/folly/json/tool/JSONSchemaTester.cpp +58 -0
- package/external/folly/folly/json.h +17 -0
- package/external/folly/folly/json_patch.h +17 -0
- package/external/folly/folly/json_pointer.h +17 -0
- package/external/folly/folly/lang/Access.h +29 -0
- package/external/folly/folly/lang/Align.h +240 -0
- package/external/folly/folly/lang/Aligned.h +92 -0
- package/external/folly/folly/lang/Assume.h +82 -0
- package/external/folly/folly/lang/BUCK +287 -0
- package/external/folly/folly/lang/Badge.h +108 -0
- package/external/folly/folly/lang/Bits.h +570 -0
- package/external/folly/folly/lang/BitsClass.h +312 -0
- package/external/folly/folly/lang/Builtin.h +74 -0
- package/external/folly/folly/lang/CArray.h +34 -0
- package/external/folly/folly/lang/CString.cpp +86 -0
- package/external/folly/folly/lang/CString.h +55 -0
- package/external/folly/folly/lang/Cast.h +51 -0
- package/external/folly/folly/lang/CheckedMath.h +253 -0
- package/external/folly/folly/lang/CustomizationPoint.h +58 -0
- package/external/folly/folly/lang/Exception.cpp +822 -0
- package/external/folly/folly/lang/Exception.h +716 -0
- package/external/folly/folly/lang/Extern.h +55 -0
- package/external/folly/folly/lang/Hint-inl.h +144 -0
- package/external/folly/folly/lang/Hint.h +238 -0
- package/external/folly/folly/lang/Keep.h +98 -0
- package/external/folly/folly/lang/New.h +124 -0
- package/external/folly/folly/lang/Ordering.h +140 -0
- package/external/folly/folly/lang/Pretty.h +159 -0
- package/external/folly/folly/lang/PropagateConst.h +413 -0
- package/external/folly/folly/lang/RValueReferenceWrapper.h +152 -0
- package/external/folly/folly/lang/SafeAssert.cpp +589 -0
- package/external/folly/folly/lang/StaticConst.h +33 -0
- package/external/folly/folly/lang/Thunk.h +100 -0
- package/external/folly/folly/lang/TypeInfo.h +58 -0
- package/external/folly/folly/lang/UncaughtExceptions.cpp +17 -0
- package/external/folly/folly/lang/UncaughtExceptions.h +19 -0
- package/external/folly/folly/lang/test/AlignTest.cpp +87 -0
- package/external/folly/folly/lang/test/AlignedTest.cpp +130 -0
- package/external/folly/folly/lang/test/BUCK +258 -0
- package/external/folly/folly/lang/test/BadgeTest.cpp +89 -0
- package/external/folly/folly/lang/test/BitsBenchmark.cpp +164 -0
- package/external/folly/folly/lang/test/BitsClassBenchmark.cpp +122 -0
- package/external/folly/folly/lang/test/BitsClassTest.cpp +379 -0
- package/external/folly/folly/lang/test/BitsTest.cpp +577 -0
- package/external/folly/folly/lang/test/CStringTest.cpp +60 -0
- package/external/folly/folly/lang/test/CastTest.cpp +47 -0
- package/external/folly/folly/lang/test/CheckedMathTest.cpp +394 -0
- package/external/folly/folly/lang/test/ExceptionBench.cpp +427 -0
- package/external/folly/folly/lang/test/ExceptionTest.cpp +413 -0
- package/external/folly/folly/lang/test/ExternTest.cpp +39 -0
- package/external/folly/folly/lang/test/HintTest.cpp +100 -0
- package/external/folly/folly/lang/test/NewTest.cpp +38 -0
- package/external/folly/folly/lang/test/OrderingTest.cpp +105 -0
- package/external/folly/folly/lang/test/PrettyTest.cpp +44 -0
- package/external/folly/folly/lang/test/PropagateConstTest.cpp +356 -0
- package/external/folly/folly/lang/test/RValueReferenceWrapperTest.cpp +85 -0
- package/external/folly/folly/lang/test/SafeAssertTest.cpp +75 -0
- package/external/folly/folly/lang/test/ThunkTest.cpp +105 -0
- package/external/folly/folly/lang/test/ToAsciiBench.cpp +466 -0
- package/external/folly/folly/lang/test/ToAsciiTest.cpp +266 -0
- package/external/folly/folly/lang/test/TypeInfoTest.cpp +56 -0
- package/external/folly/folly/memcpy.S +292 -0
- package/external/folly/folly/memcpy_select_aarch64.cpp +145 -0
- package/external/folly/folly/memory/Arena-inl.h +83 -0
- package/external/folly/folly/memory/Arena.h +325 -0
- package/external/folly/folly/memory/BUCK +191 -0
- package/external/folly/folly/memory/JemallocHugePageAllocator.cpp +449 -0
- package/external/folly/folly/memory/JemallocHugePageAllocator.h +105 -0
- package/external/folly/folly/memory/JemallocHugePageAllocatorTest.cpp +341 -0
- package/external/folly/folly/memory/JemallocNodumpAllocator.cpp +176 -0
- package/external/folly/folly/memory/JemallocNodumpAllocator.h +119 -0
- package/external/folly/folly/memory/JemallocNodumpAllocatorTest.cpp +61 -0
- package/external/folly/folly/memory/MallctlHelper.cpp +37 -0
- package/external/folly/folly/memory/MallctlHelper.h +167 -0
- package/external/folly/folly/memory/Malloc.h +551 -0
- package/external/folly/folly/memory/MemoryResource.h +57 -0
- package/external/folly/folly/memory/ReentrantAllocator.cpp +162 -0
- package/external/folly/folly/memory/ReentrantAllocator.h +261 -0
- package/external/folly/folly/memory/SanitizeAddress.cpp +75 -0
- package/external/folly/folly/memory/SanitizeAddress.h +117 -0
- package/external/folly/folly/memory/SanitizeLeak.cpp +119 -0
- package/external/folly/folly/memory/SanitizeLeak.h +108 -0
- package/external/folly/folly/memory/ThreadCachedArena.cpp +53 -0
- package/external/folly/folly/memory/ThreadCachedArena.h +90 -0
- package/external/folly/folly/memory/UninitializedMemoryHacks.h +426 -0
- package/external/folly/folly/memory/detail/BUCK +10 -0
- package/external/folly/folly/memory/detail/MallocImpl.cpp +52 -0
- package/external/folly/folly/memory/detail/MallocImpl.h +97 -0
- package/external/folly/folly/memory/not_null-inl.h +522 -0
- package/external/folly/folly/memory/not_null.h +449 -0
- package/external/folly/folly/memory/test/ArenaTest.cpp +354 -0
- package/external/folly/folly/memory/test/BUCK +146 -0
- package/external/folly/folly/memory/test/MallctlHelperTest.cpp +169 -0
- package/external/folly/folly/memory/test/MallocBenchmark.cpp +91 -0
- package/external/folly/folly/memory/test/MallocTest.cpp +78 -0
- package/external/folly/folly/memory/test/MemoryResourceTest.cpp +31 -0
- package/external/folly/folly/memory/test/ReentrantAllocatorTest.cpp +144 -0
- package/external/folly/folly/memory/test/SanitizeAddressTest.cpp +67 -0
- package/external/folly/folly/memory/test/SanitizeLeakTest.cpp +139 -0
- package/external/folly/folly/memory/test/ThreadCachedArenaTest.cpp +276 -0
- package/external/folly/folly/memory/test/UninitializedMemoryHacksODR.cpp +21 -0
- package/external/folly/folly/memory/test/UninitializedMemoryHacksTest.cpp +327 -0
- package/external/folly/folly/memory/test/not_null_test.cpp +608 -0
- package/external/folly/folly/memset.S +245 -0
- package/external/folly/folly/memset_select_aarch64.cpp +72 -0
- package/external/folly/folly/portability/Asm.h +50 -0
- package/external/folly/folly/portability/Atomic.h +31 -0
- package/external/folly/folly/portability/BUCK +456 -0
- package/external/folly/folly/portability/Builtins.cpp +31 -0
- package/external/folly/folly/portability/Builtins.h +161 -0
- package/external/folly/folly/portability/Config.h +43 -0
- package/external/folly/folly/portability/Constexpr.h +145 -0
- package/external/folly/folly/portability/Dirent.cpp +140 -0
- package/external/folly/folly/portability/Dirent.h +41 -0
- package/external/folly/folly/portability/Event.h +44 -0
- package/external/folly/folly/portability/Fcntl.cpp +120 -0
- package/external/folly/folly/portability/Fcntl.h +67 -0
- package/external/folly/folly/portability/Filesystem.cpp +67 -0
- package/external/folly/folly/portability/Filesystem.h +114 -0
- package/external/folly/folly/portability/FmtCompile.h +40 -0
- package/external/folly/folly/portability/GFlags.h +139 -0
- package/external/folly/folly/portability/GMock.h +35 -0
- package/external/folly/folly/portability/GTest.h +35 -0
- package/external/folly/folly/portability/IOVec.h +34 -0
- package/external/folly/folly/portability/Libgen.cpp +59 -0
- package/external/folly/folly/portability/Libgen.h +29 -0
- package/external/folly/folly/portability/Libunwind.h +21 -0
- package/external/folly/folly/portability/Malloc.cpp +31 -0
- package/external/folly/folly/portability/Malloc.h +53 -0
- package/external/folly/folly/portability/Math.h +90 -0
- package/external/folly/folly/portability/Memory.h +26 -0
- package/external/folly/folly/portability/OpenSSL.cpp +17 -0
- package/external/folly/folly/portability/OpenSSL.h +102 -0
- package/external/folly/folly/portability/PThread.cpp +697 -0
- package/external/folly/folly/portability/PThread.h +148 -0
- package/external/folly/folly/portability/README.md +21 -0
- package/external/folly/folly/portability/Sched.cpp +41 -0
- package/external/folly/folly/portability/Sched.h +45 -0
- package/external/folly/folly/portability/Sockets.cpp +245 -0
- package/external/folly/folly/portability/Sockets.h +155 -0
- package/external/folly/folly/portability/SourceLocation.h +49 -0
- package/external/folly/folly/portability/Stdio.cpp +77 -0
- package/external/folly/folly/portability/Stdio.h +32 -0
- package/external/folly/folly/portability/Stdlib.cpp +172 -0
- package/external/folly/folly/portability/Stdlib.h +64 -0
- package/external/folly/folly/portability/String.cpp +53 -0
- package/external/folly/folly/portability/String.h +39 -0
- package/external/folly/folly/portability/SysFile.cpp +46 -0
- package/external/folly/folly/portability/SysFile.h +27 -0
- package/external/folly/folly/portability/SysMembarrier.cpp +104 -0
- package/external/folly/folly/portability/SysMembarrier.h +26 -0
- package/external/folly/folly/portability/SysMman.cpp +242 -0
- package/external/folly/folly/portability/SysMman.h +68 -0
- package/external/folly/folly/portability/SysResource.cpp +108 -0
- package/external/folly/folly/portability/SysResource.h +71 -0
- package/external/folly/folly/portability/SysStat.cpp +66 -0
- package/external/folly/folly/portability/SysStat.h +52 -0
- package/external/folly/folly/portability/SysSyscall.h +73 -0
- package/external/folly/folly/portability/SysTime.cpp +62 -0
- package/external/folly/folly/portability/SysTime.h +50 -0
- package/external/folly/folly/portability/SysTypes.h +44 -0
- package/external/folly/folly/portability/SysUio.cpp +179 -0
- package/external/folly/folly/portability/SysUio.h +51 -0
- package/external/folly/folly/portability/Syslog.h +39 -0
- package/external/folly/folly/portability/Time.cpp +357 -0
- package/external/folly/folly/portability/Time.h +74 -0
- package/external/folly/folly/portability/Unistd.h +111 -0
- package/external/folly/folly/portability/Windows.h +108 -0
- package/external/folly/folly/portability/openat2.c +30 -0
- package/external/folly/folly/portability/openat2.h +39 -0
- package/external/folly/folly/portability/test/BUCK +59 -0
- package/external/folly/folly/portability/test/ConstexprTest.cpp +102 -0
- package/external/folly/folly/portability/test/FilesystemTest.cpp +35 -0
- package/external/folly/folly/portability/test/LibgenTest.cpp +35 -0
- package/external/folly/folly/portability/test/OpenSSLPortabilityTest.cpp +108 -0
- package/external/folly/folly/portability/test/PThreadTest.cpp +80 -0
- package/external/folly/folly/portability/test/TimeTest.cpp +90 -0
- package/external/folly/folly/small_vector.h +17 -0
- package/external/folly/folly/somerge_defs.bzl +399 -0
- package/external/folly/folly/sorted_vector_types.h +17 -0
- package/external/folly/folly/stop_watch.h +317 -0
- package/external/folly/folly/synchronization/AsymmetricThreadFence.cpp +91 -0
- package/external/folly/folly/synchronization/AsymmetricThreadFence.h +60 -0
- package/external/folly/folly/synchronization/AtomicNotification-inl.h +146 -0
- package/external/folly/folly/synchronization/AtomicNotification.cpp +34 -0
- package/external/folly/folly/synchronization/AtomicNotification.h +117 -0
- package/external/folly/folly/synchronization/AtomicRef.h +181 -0
- package/external/folly/folly/synchronization/AtomicStruct.h +150 -0
- package/external/folly/folly/synchronization/AtomicUtil-inl.h +482 -0
- package/external/folly/folly/synchronization/AtomicUtil.h +179 -0
- package/external/folly/folly/synchronization/BUCK +418 -0
- package/external/folly/folly/synchronization/Baton.h +419 -0
- package/external/folly/folly/synchronization/CallOnce.h +263 -0
- package/external/folly/folly/synchronization/DelayedInit.h +179 -0
- package/external/folly/folly/synchronization/DistributedMutex-inl.h +1744 -0
- package/external/folly/folly/synchronization/DistributedMutex.cpp +27 -0
- package/external/folly/folly/synchronization/DistributedMutex.h +342 -0
- package/external/folly/folly/synchronization/EventCount.h +200 -0
- package/external/folly/folly/synchronization/FlatCombining.h +629 -0
- package/external/folly/folly/synchronization/Hazptr-fwd.h +217 -0
- package/external/folly/folly/synchronization/Hazptr.cpp +36 -0
- package/external/folly/folly/synchronization/Hazptr.h +209 -0
- package/external/folly/folly/synchronization/HazptrDomain.cpp +68 -0
- package/external/folly/folly/synchronization/HazptrDomain.h +832 -0
- package/external/folly/folly/synchronization/HazptrHolder.h +431 -0
- package/external/folly/folly/synchronization/HazptrObj.h +533 -0
- package/external/folly/folly/synchronization/HazptrObjLinked.h +315 -0
- package/external/folly/folly/synchronization/HazptrRec.h +68 -0
- package/external/folly/folly/synchronization/HazptrThrLocal.h +180 -0
- package/external/folly/folly/synchronization/HazptrThreadPoolExecutor.cpp +46 -0
- package/external/folly/folly/synchronization/HazptrThreadPoolExecutor.h +25 -0
- package/external/folly/folly/synchronization/Latch.h +160 -0
- package/external/folly/folly/synchronization/LifoSem.h +767 -0
- package/external/folly/folly/synchronization/Lock.h +887 -0
- package/external/folly/folly/synchronization/MicroSpinLock.h +154 -0
- package/external/folly/folly/synchronization/NativeSemaphore.h +187 -0
- package/external/folly/folly/synchronization/ParkingLot.cpp +37 -0
- package/external/folly/folly/synchronization/ParkingLot.h +330 -0
- package/external/folly/folly/synchronization/PicoSpinLock.h +167 -0
- package/external/folly/folly/synchronization/RWSpinLock.h +549 -0
- package/external/folly/folly/synchronization/Rcu.cpp +26 -0
- package/external/folly/folly/synchronization/Rcu.h +553 -0
- package/external/folly/folly/synchronization/RelaxedAtomic.h +336 -0
- package/external/folly/folly/synchronization/SanitizeThread.cpp +141 -0
- package/external/folly/folly/synchronization/SanitizeThread.h +166 -0
- package/external/folly/folly/synchronization/SaturatingSemaphore.h +324 -0
- package/external/folly/folly/synchronization/SmallLocks.h +36 -0
- package/external/folly/folly/synchronization/ThrottledLifoSem.h +362 -0
- package/external/folly/folly/synchronization/WaitOptions.cpp +25 -0
- package/external/folly/folly/synchronization/WaitOptions.h +75 -0
- package/external/folly/folly/synchronization/detail/AtomicUtils.h +59 -0
- package/external/folly/folly/synchronization/detail/BUCK +104 -0
- package/external/folly/folly/synchronization/detail/Hardware.cpp +192 -0
- package/external/folly/folly/synchronization/detail/Hardware.h +75 -0
- package/external/folly/folly/synchronization/detail/HazptrUtils.h +339 -0
- package/external/folly/folly/synchronization/detail/InlineFunctionRef.h +229 -0
- package/external/folly/folly/synchronization/detail/Sleeper.cpp +27 -0
- package/external/folly/folly/synchronization/detail/Sleeper.h +62 -0
- package/external/folly/folly/synchronization/detail/Spin.h +96 -0
- package/external/folly/folly/synchronization/detail/ThreadCachedLists.h +174 -0
- package/external/folly/folly/synchronization/detail/ThreadCachedReaders.h +189 -0
- package/external/folly/folly/synchronization/detail/ThreadCachedTag.h +26 -0
- package/external/folly/folly/synchronization/detail/test/BUCK +28 -0
- package/external/folly/folly/synchronization/detail/test/HardwareTest.cpp +74 -0
- package/external/folly/folly/synchronization/detail/test/InlineFunctionRefTest.cpp +286 -0
- package/external/folly/folly/synchronization/example/BUCK +27 -0
- package/external/folly/folly/synchronization/example/HazptrLockFreeLIFO.h +88 -0
- package/external/folly/folly/synchronization/example/HazptrSWMRSet.h +133 -0
- package/external/folly/folly/synchronization/example/HazptrWideCAS.h +62 -0
- package/external/folly/folly/synchronization/test/AtomicNotificationTest.cpp +236 -0
- package/external/folly/folly/synchronization/test/AtomicRefTest.cpp +170 -0
- package/external/folly/folly/synchronization/test/AtomicStructTest.cpp +65 -0
- package/external/folly/folly/synchronization/test/AtomicUtilBench.cpp +457 -0
- package/external/folly/folly/synchronization/test/AtomicUtilTest.cpp +650 -0
- package/external/folly/folly/synchronization/test/BUCK +495 -0
- package/external/folly/folly/synchronization/test/Barrier.h +52 -0
- package/external/folly/folly/synchronization/test/BarrierTest.cpp +56 -0
- package/external/folly/folly/synchronization/test/BatonBenchmark.cpp +77 -0
- package/external/folly/folly/synchronization/test/BatonTest.cpp +164 -0
- package/external/folly/folly/synchronization/test/BatonTestHelpers.h +118 -0
- package/external/folly/folly/synchronization/test/CallOnceBenchmark.cpp +72 -0
- package/external/folly/folly/synchronization/test/CallOnceTest.cpp +153 -0
- package/external/folly/folly/synchronization/test/DelayedInitTest.cpp +281 -0
- package/external/folly/folly/synchronization/test/DistributedMutexTest.cpp +2074 -0
- package/external/folly/folly/synchronization/test/EventCountTest.cpp +124 -0
- package/external/folly/folly/synchronization/test/FlatCombiningBenchmark.cpp +1789 -0
- package/external/folly/folly/synchronization/test/FlatCombiningExamples.h +222 -0
- package/external/folly/folly/synchronization/test/FlatCombiningTest.cpp +121 -0
- package/external/folly/folly/synchronization/test/FlatCombiningTestHelpers.h +227 -0
- package/external/folly/folly/synchronization/test/HazptrTest.cpp +1689 -0
- package/external/folly/folly/synchronization/test/LatchTest.cpp +224 -0
- package/external/folly/folly/synchronization/test/LifoSemBench.cpp +185 -0
- package/external/folly/folly/synchronization/test/LifoSemTests.cpp +353 -0
- package/external/folly/folly/synchronization/test/LockTest.cpp +1239 -0
- package/external/folly/folly/synchronization/test/NativeSemaphoreTest.cpp +37 -0
- package/external/folly/folly/synchronization/test/ParkingLotBenchmark.cpp +239 -0
- package/external/folly/folly/synchronization/test/ParkingLotTest.cpp +170 -0
- package/external/folly/folly/synchronization/test/RWSpinLockTest.cpp +235 -0
- package/external/folly/folly/synchronization/test/RcuBench.cpp +66 -0
- package/external/folly/folly/synchronization/test/RcuTest.cpp +330 -0
- package/external/folly/folly/synchronization/test/RelaxedAtomicTest.cpp +389 -0
- package/external/folly/folly/synchronization/test/SaturatingSemaphoreTest.cpp +166 -0
- package/external/folly/folly/synchronization/test/Semaphore.h +242 -0
- package/external/folly/folly/synchronization/test/SemaphoreTest.cpp +271 -0
- package/external/folly/folly/synchronization/test/SmallLocksBenchmark.cpp +1296 -0
- package/external/folly/folly/synchronization/test/SmallLocksTest.cpp +510 -0
- package/external/folly/folly/synchronization/test/ThreadCachedEpochBench.h +67 -0
- package/external/folly/folly/synchronization/test/ThreadCachedReadersBench.cpp +42 -0
- package/external/folly/folly/synchronization/test/ThreadCachedReadersTest.cpp +52 -0
- package/external/folly/folly/synchronization/test/ThrottledLifoSemTest.cpp +243 -0
- package/external/folly/folly/system/AtFork.cpp +205 -0
- package/external/folly/folly/system/AtFork.h +116 -0
- package/external/folly/folly/system/AuxVector.h +198 -0
- package/external/folly/folly/system/BUCK +144 -0
- package/external/folly/folly/system/EnvUtil.cpp +93 -0
- package/external/folly/folly/system/EnvUtil.h +113 -0
- package/external/folly/folly/system/HardwareConcurrency.cpp +39 -0
- package/external/folly/folly/system/HardwareConcurrency.h +23 -0
- package/external/folly/folly/system/MemoryMapping.cpp +477 -0
- package/external/folly/folly/system/MemoryMapping.h +287 -0
- package/external/folly/folly/system/Pid.cpp +87 -0
- package/external/folly/folly/system/Pid.h +34 -0
- package/external/folly/folly/system/Shell.cpp +33 -0
- package/external/folly/folly/system/Shell.h +93 -0
- package/external/folly/folly/system/ThreadId.cpp +89 -0
- package/external/folly/folly/system/ThreadId.h +62 -0
- package/external/folly/folly/system/ThreadName.cpp +330 -0
- package/external/folly/folly/system/ThreadName.h +72 -0
- package/external/folly/folly/system/test/AtForkTest.cpp +309 -0
- package/external/folly/folly/system/test/AuxVectorTest.cpp +55 -0
- package/external/folly/folly/system/test/BUCK +120 -0
- package/external/folly/folly/system/test/EnvUtilSubprocess.cpp +26 -0
- package/external/folly/folly/system/test/EnvUtilTest.cpp +197 -0
- package/external/folly/folly/system/test/MemoryMappingTest.cpp +179 -0
- package/external/folly/folly/system/test/PidTest.cpp +46 -0
- package/external/folly/folly/system/test/ShellTest.cpp +66 -0
- package/external/folly/folly/system/test/ThreadIdTest.cpp +114 -0
- package/external/folly/folly/system/test/ThreadNameTest.cpp +85 -0
- package/external/folly/folly.vcxitems +164 -0
- package/external/folly/static/logo.svg +1 -0
- package/external/folly/sync-config.json +8 -0
- package/just-task.js +13 -2
- package/package.json +6 -6
- package/template/cpp-lib/proj/MyLib.sln +0 -33
- package/template/cs-lib/proj/MyLib.sln +0 -33
- package/templates/cpp-app/windows/MyApp/MyApp.vcxproj +1 -1
- package/templates/cpp-app/windows/MyApp.sln +0 -33
- package/templates/cpp-lib/example/metro.config.js +30 -4
- package/templates/cpp-lib/windows/MyLib/MyLib.vcxproj +1 -1
- package/templates/cpp-lib/windows/MyLib.sln +0 -33
- package/Folly/Folly.vcxproj +0 -376
- package/Folly/Folly.vcxproj.filters +0 -558
- package/fmt/fmt.vcxproj +0 -153
- package/fmt/fmt.vcxproj.filters +0 -59
- package/fmt/pch.cpp +0 -4
- package/fmt/pch.h +0 -2
- /package/{fmt → external/fmt}/cgmanifest.json +0 -0
- /package/{Folly → external/folly}/Folly.natvis +0 -0
- /package/{Folly → external/folly}/cgmanifest.json +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/ConstexprMath.h +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/Conv.cpp +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/chrono/Hardware.h +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/concurrency/CacheLocality.cpp +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/json/dynamic-inl.h +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/json/json.cpp +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/SafeAssert.h +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/ToAscii.cpp +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/lang/ToAscii.h +0 -0
- /package/{Folly/TEMP_UntilFollyUpdate → external/folly/folly}/portability/Unistd.cpp +0 -0
|
@@ -0,0 +1,751 @@
|
|
|
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
|
+
#pragma once
|
|
18
|
+
|
|
19
|
+
#include <folly/concurrency/CacheLocality.h>
|
|
20
|
+
#include <folly/concurrency/UnboundedQueue.h>
|
|
21
|
+
|
|
22
|
+
#include <glog/logging.h>
|
|
23
|
+
|
|
24
|
+
#include <atomic>
|
|
25
|
+
#include <chrono>
|
|
26
|
+
|
|
27
|
+
namespace folly {
|
|
28
|
+
|
|
29
|
+
/// DynamicBoundedQueue supports:
|
|
30
|
+
/// - Dynamic memory usage that grows and shrink in proportion to the
|
|
31
|
+
/// number of elements in the queue.
|
|
32
|
+
/// - Adjustable capacity that helps throttle pathological cases of
|
|
33
|
+
/// producer-consumer imbalance that may lead to excessive memory
|
|
34
|
+
/// usage.
|
|
35
|
+
/// - The adjustable capacity can also help prevent deadlock by
|
|
36
|
+
/// allowing users to temporarily increase capacity substantially to
|
|
37
|
+
/// guarantee accommodating producer requests that cannot wait.
|
|
38
|
+
/// - SPSC, SPMC, MPSC, MPMC variants.
|
|
39
|
+
/// - Blocking and spinning-only variants.
|
|
40
|
+
/// - Inter-operable non-waiting, timed until, timed for, and waiting
|
|
41
|
+
/// variants of producer and consumer operations.
|
|
42
|
+
/// - Optional variable element weights.
|
|
43
|
+
///
|
|
44
|
+
/// Element Weights
|
|
45
|
+
/// - Queue elements may have variable weights (calculated using a
|
|
46
|
+
/// template parameter) that are by default 1.
|
|
47
|
+
/// - Element weights count towards the queue's capacity.
|
|
48
|
+
/// - Elements weights are not priorities and do not affect element
|
|
49
|
+
/// order. Queues with variable element weights follow FIFO order,
|
|
50
|
+
/// the same as default queues.
|
|
51
|
+
///
|
|
52
|
+
/// When to use DynamicBoundedQueue:
|
|
53
|
+
/// - If a small maximum capacity may lead to deadlock or performance
|
|
54
|
+
/// degradation under bursty patterns and a larger capacity is
|
|
55
|
+
/// sufficient.
|
|
56
|
+
/// - If the typical queue size is expected to be much lower than the
|
|
57
|
+
/// maximum capacity
|
|
58
|
+
/// - If an unbounded queue is susceptible to growing too much.
|
|
59
|
+
/// - If support for variable element weights is needed.
|
|
60
|
+
///
|
|
61
|
+
/// When not to use DynamicBoundedQueue?
|
|
62
|
+
/// - If dynamic memory allocation is unacceptable or if the maximum
|
|
63
|
+
/// capacity needs to be small, then use fixed-size MPMCQueue or (if
|
|
64
|
+
/// non-blocking SPSC) ProducerConsumerQueue.
|
|
65
|
+
/// - If there is no risk of the queue growing too much, then use
|
|
66
|
+
/// UnboundedQueue.
|
|
67
|
+
///
|
|
68
|
+
/// Setting capacity
|
|
69
|
+
/// - The general rule is to set the capacity as high as acceptable.
|
|
70
|
+
/// The queue performs best when it is not near full capacity.
|
|
71
|
+
/// - The implementation may allow extra slack in capacity (~10%) for
|
|
72
|
+
/// amortizing some costly steps. Therefore, precise capacity is not
|
|
73
|
+
/// guaranteed and cannot be relied on for synchronization; i.e.,
|
|
74
|
+
/// this queue cannot be used as a semaphore.
|
|
75
|
+
///
|
|
76
|
+
/// Performance expectations:
|
|
77
|
+
/// - As long as the queue size is below capacity in the common case,
|
|
78
|
+
/// performance is comparable to MPMCQueue and better in cases of
|
|
79
|
+
/// higher producer demand.
|
|
80
|
+
/// - Performance degrades gracefully at full capacity.
|
|
81
|
+
/// - It is recommended to measure performance with different variants
|
|
82
|
+
/// when applicable, e.g., DMPMC vs DMPSC. Depending on the use
|
|
83
|
+
/// case, sometimes the variant with the higher sequential overhead
|
|
84
|
+
/// may yield better results due to, for example, more favorable
|
|
85
|
+
/// producer-consumer balance or favorable timing for avoiding
|
|
86
|
+
/// costly blocking.
|
|
87
|
+
/// - See DynamicBoundedQueueTest.cpp for some benchmark results.
|
|
88
|
+
///
|
|
89
|
+
/// Template parameters:
|
|
90
|
+
/// - T: element type
|
|
91
|
+
/// - SingleProducer: true if there can be only one producer at a
|
|
92
|
+
/// time.
|
|
93
|
+
/// - SingleConsumer: true if there can be only one consumer at a
|
|
94
|
+
/// time.
|
|
95
|
+
/// - MayBlock: true if producers or consumers may block.
|
|
96
|
+
/// - LgSegmentSize (default 8): Log base 2 of number of elements per
|
|
97
|
+
/// UnboundedQueue segment.
|
|
98
|
+
/// - LgAlign (default 7): Log base 2 of alignment directive; can be
|
|
99
|
+
/// used to balance scalability (avoidance of false sharing) with
|
|
100
|
+
/// memory efficiency.
|
|
101
|
+
/// - WeightFn (DefaultWeightFn<T>): A customizable weight computing type
|
|
102
|
+
/// for computing the weights of elements. The default weight is 1.
|
|
103
|
+
///
|
|
104
|
+
/// Template Aliases:
|
|
105
|
+
/// DSPSCQueue<T, MayBlock, LgSegmentSize, LgAlign>
|
|
106
|
+
/// DMPSCQueue<T, MayBlock, LgSegmentSize, LgAlign>
|
|
107
|
+
/// DSPMCQueue<T, MayBlock, LgSegmentSize, LgAlign>
|
|
108
|
+
/// DMPMCQueue<T, MayBlock, LgSegmentSize, LgAlign>
|
|
109
|
+
///
|
|
110
|
+
/// Functions:
|
|
111
|
+
/// Constructor
|
|
112
|
+
/// Takes a capacity value as an argument.
|
|
113
|
+
///
|
|
114
|
+
/// Producer functions:
|
|
115
|
+
/// void enqueue(const T&);
|
|
116
|
+
/// void enqueue(T&&);
|
|
117
|
+
/// Adds an element to the end of the queue. Waits until
|
|
118
|
+
/// capacity is available if necessary.
|
|
119
|
+
/// bool try_enqueue(const T&);
|
|
120
|
+
/// bool try_enqueue(T&&);
|
|
121
|
+
/// Tries to add an element to the end of the queue if
|
|
122
|
+
/// capacity allows it. Returns true if successful. Otherwise
|
|
123
|
+
/// Returns false.
|
|
124
|
+
/// bool try_enqueue_until(const T&, time_point& deadline);
|
|
125
|
+
/// bool try_enqueue_until(T&&, time_point& deadline);
|
|
126
|
+
/// Tries to add an element to the end of the queue if
|
|
127
|
+
/// capacity allows it until the specified deadline. Returns
|
|
128
|
+
/// true if successful, otherwise false.
|
|
129
|
+
/// bool try_enqueue_for(const T&, duration&);
|
|
130
|
+
/// bool try_enqueue_for(T&&, duration&);
|
|
131
|
+
/// Tries to add an element to the end of the queue if
|
|
132
|
+
/// capacity allows until the expiration of the specified
|
|
133
|
+
/// duration. Returns true if successful, otherwise false.
|
|
134
|
+
///
|
|
135
|
+
/// Consumer functions:
|
|
136
|
+
/// void dequeue(T&);
|
|
137
|
+
/// Extracts an element from the front of the queue. Waits
|
|
138
|
+
/// until an element is available if necessary.
|
|
139
|
+
/// bool try_dequeue(T&);
|
|
140
|
+
/// Tries to extracts an element from the front of the queue
|
|
141
|
+
/// if available. Returns true if successful, otherwise false.
|
|
142
|
+
/// bool try_dequeue_until(T&, time_point& deadline);
|
|
143
|
+
/// Tries to extracts an element from the front of the queue
|
|
144
|
+
/// if available until the specified daedline. Returns true
|
|
145
|
+
/// if successful. Otherwise Returns false.
|
|
146
|
+
/// bool try_dequeue_for(T&, duration&);
|
|
147
|
+
/// Tries to extracts an element from the front of the queue
|
|
148
|
+
/// if available until the expiration of the specified
|
|
149
|
+
/// duration. Returns true if successful. Otherwise Returns
|
|
150
|
+
/// false.
|
|
151
|
+
///
|
|
152
|
+
/// Secondary functions:
|
|
153
|
+
/// void reset_capacity(size_t capacity);
|
|
154
|
+
/// Changes the capacity of the queue. Does not affect the
|
|
155
|
+
/// current contents of the queue. Guaranteed only to affect
|
|
156
|
+
/// subsequent enqueue operations. May or may not affect
|
|
157
|
+
/// concurrent operations. Capacity must be at least 1000.
|
|
158
|
+
/// Weight weight();
|
|
159
|
+
/// Returns an estimate of the total weight of the elements in
|
|
160
|
+
/// the queue.
|
|
161
|
+
/// size_t size();
|
|
162
|
+
/// Returns an estimate of the total number of elements.
|
|
163
|
+
/// bool empty();
|
|
164
|
+
/// Returns true only if the queue was empty during the call.
|
|
165
|
+
/// Note: weight(), size(), and empty() are guaranteed to be
|
|
166
|
+
/// accurate only if there are no concurrent changes to the queue.
|
|
167
|
+
///
|
|
168
|
+
/// Usage example with default weight:
|
|
169
|
+
/// @code
|
|
170
|
+
/// /* DMPSC, doesn't block, 1024 int elements per segment */
|
|
171
|
+
/// DMPSCQueue<int, false, 10> q(100000);
|
|
172
|
+
/// ASSERT_TRUE(q.empty());
|
|
173
|
+
/// ASSERT_EQ(q.size(), 0);
|
|
174
|
+
/// q.enqueue(1));
|
|
175
|
+
/// ASSERT_TRUE(q.try_enqueue(2));
|
|
176
|
+
/// ASSERT_TRUE(q.try_enqueue_until(3, deadline));
|
|
177
|
+
/// ASSERT_TRUE(q.try_enqueue(4, duration));
|
|
178
|
+
/// // ... enqueue more elements until capacity is full
|
|
179
|
+
/// // See above comments about imprecise capacity guarantees
|
|
180
|
+
/// ASSERT_FALSE(q.try_enqueue(100001)); // can't enqueue but can't wait
|
|
181
|
+
/// size_t sz = q.size();
|
|
182
|
+
/// ASSERT_GE(sz, 100000);
|
|
183
|
+
/// q.reset_capacity(1000000000); // set huge capacity
|
|
184
|
+
/// ASSERT_TRUE(q.try_enqueue(100001)); // now enqueue succeeds
|
|
185
|
+
/// q.reset_capacity(100000); // set capacity back to 100,000
|
|
186
|
+
/// ASSERT_FALSE(q.try_enqueue(100002));
|
|
187
|
+
/// ASSERT_EQ(q.size(), sz + 1);
|
|
188
|
+
/// int v;
|
|
189
|
+
/// q.dequeue(v);
|
|
190
|
+
/// ASSERT_EQ(v, 1);
|
|
191
|
+
/// ASSERT_TRUE(q.try_dequeue(v));
|
|
192
|
+
/// ASSERT_EQ(v, 2);
|
|
193
|
+
/// ASSERT_TRUE(q.try_dequeue_until(v, deadline));
|
|
194
|
+
/// ASSERT_EQ(v, 3);
|
|
195
|
+
/// ASSERT_TRUE(q.try_dequeue_for(v, duration));
|
|
196
|
+
/// ASSERT_EQ(v, 4);
|
|
197
|
+
/// ASSERT_EQ(q.size(), sz - 3);
|
|
198
|
+
/// @endcode
|
|
199
|
+
///
|
|
200
|
+
/// Usage example with custom weights:
|
|
201
|
+
/// @code
|
|
202
|
+
/// struct CustomWeightFn {
|
|
203
|
+
/// uint64_t operator()(int val) { return val / 100; }
|
|
204
|
+
/// };
|
|
205
|
+
/// DMPMCQueue<int, false, 10, CustomWeightFn> q(20);
|
|
206
|
+
/// ASSERT_TRUE(q.empty());
|
|
207
|
+
/// q.enqueue(100);
|
|
208
|
+
/// ASSERT_TRUE(q.try_enqueue(200));
|
|
209
|
+
/// ASSERT_TRUE(q.try_enqueue_until(500, now() + seconds(1)));
|
|
210
|
+
/// ASSERT_EQ(q.size(), 3);
|
|
211
|
+
/// ASSERT_EQ(q.weight(), 8);
|
|
212
|
+
/// ASSERT_FALSE(q.try_enqueue_for(1700, microseconds(1)));
|
|
213
|
+
/// q.reset_capacity(1000000); // set capacity to 1000000 instead of 20
|
|
214
|
+
/// ASSERT_TRUE(q.try_enqueue_for(1700, microseconds(1)));
|
|
215
|
+
/// q.reset_capacity(20); // set capacity to 20 again
|
|
216
|
+
/// ASSERT_FALSE(q.try_enqueue(100));
|
|
217
|
+
/// ASSERT_EQ(q.size(), 4);
|
|
218
|
+
/// ASSERT_EQ(q.weight(), 25);
|
|
219
|
+
/// int v;
|
|
220
|
+
/// q.dequeue(v);
|
|
221
|
+
/// ASSERT_EQ(v, 100);
|
|
222
|
+
/// ASSERT_TRUE(q.try_dequeue(v));
|
|
223
|
+
/// ASSERT_EQ(v, 200);
|
|
224
|
+
/// ASSERT_TRUE(q.try_dequeue_until(v, now() + seconds(1)));
|
|
225
|
+
/// ASSERT_EQ(v, 500);
|
|
226
|
+
/// ASSERT_EQ(q.size(), 1);
|
|
227
|
+
/// ASSERT_EQ(q.weight(), 17);
|
|
228
|
+
/// @endcode
|
|
229
|
+
///
|
|
230
|
+
/// Design:
|
|
231
|
+
/// - The implementation is on top of UnboundedQueue.
|
|
232
|
+
/// - The main FIFO functionality is in UnboundedQueue.
|
|
233
|
+
/// DynamicBoundedQueue manages keeping the total queue weight
|
|
234
|
+
/// within the specified capacity.
|
|
235
|
+
/// - For the sake of scalability, the data structures are designed to
|
|
236
|
+
/// minimize interference between producers on one side and
|
|
237
|
+
/// consumers on the other.
|
|
238
|
+
/// - Producers add to a debit variable the weight of the added
|
|
239
|
+
/// element and check capacity.
|
|
240
|
+
/// - Consumers add to a credit variable the weight of the removed
|
|
241
|
+
/// element.
|
|
242
|
+
/// - Producers, for the sake of scalability, use fetch_add to add to
|
|
243
|
+
/// the debit variable and subtract if it exceeded capacity,
|
|
244
|
+
/// rather than using compare_exchange to avoid overshooting.
|
|
245
|
+
/// - Consumers, infrequently, transfer credit to a transfer variable
|
|
246
|
+
/// and unblock any blocked producers. The transfer variable can be
|
|
247
|
+
/// used by producers to decrease their debit when needed.
|
|
248
|
+
/// - Note that a low capacity will trigger frequent credit transfer
|
|
249
|
+
/// by consumers that may degrade performance. Capacity should not
|
|
250
|
+
/// be set too low.
|
|
251
|
+
/// - Transfer of credit by consumers is triggered when the amount of
|
|
252
|
+
/// credit reaches a threshold (1/10 of capacity).
|
|
253
|
+
/// - The waiting of consumers is handled in UnboundedQueue.
|
|
254
|
+
/// The waiting of producers is handled in this template.
|
|
255
|
+
/// - For a producer operation, if the difference between debit and
|
|
256
|
+
/// capacity (plus some slack to account for the transfer threshold)
|
|
257
|
+
/// does not accommodate the weight of the new element, it first
|
|
258
|
+
/// tries to transfer credit that may have already been made
|
|
259
|
+
/// available by consumers. If this is insufficient and MayBlock is
|
|
260
|
+
/// true, then the producer uses a futex to block until new credit
|
|
261
|
+
/// is transferred by a consumer.
|
|
262
|
+
///
|
|
263
|
+
/// Memory Usage:
|
|
264
|
+
/// - Aside from three cache lines for managing capacity, the memory
|
|
265
|
+
/// for queue elements is managed using UnboundedQueue and grows and
|
|
266
|
+
/// shrinks dynamically with the number of elements.
|
|
267
|
+
/// - The template parameter LgAlign can be used to reduce memory usage
|
|
268
|
+
/// at the cost of increased chance of false sharing.
|
|
269
|
+
|
|
270
|
+
template <typename T>
|
|
271
|
+
struct DefaultWeightFn {
|
|
272
|
+
template <typename Arg>
|
|
273
|
+
uint64_t operator()(Arg&&) const noexcept {
|
|
274
|
+
return 1;
|
|
275
|
+
}
|
|
276
|
+
};
|
|
277
|
+
|
|
278
|
+
template <
|
|
279
|
+
typename T,
|
|
280
|
+
bool SingleProducer,
|
|
281
|
+
bool SingleConsumer,
|
|
282
|
+
bool MayBlock,
|
|
283
|
+
size_t LgSegmentSize = 8,
|
|
284
|
+
size_t LgAlign = 7,
|
|
285
|
+
typename WeightFn = DefaultWeightFn<T>,
|
|
286
|
+
template <typename> class Atom = std::atomic>
|
|
287
|
+
class DynamicBoundedQueue {
|
|
288
|
+
using Weight = uint64_t;
|
|
289
|
+
|
|
290
|
+
enum WaitingState : uint32_t {
|
|
291
|
+
NOTWAITING = 0,
|
|
292
|
+
WAITING = 1,
|
|
293
|
+
};
|
|
294
|
+
|
|
295
|
+
static constexpr bool SPSC = SingleProducer && SingleConsumer;
|
|
296
|
+
static constexpr size_t Align = 1u << LgAlign;
|
|
297
|
+
|
|
298
|
+
static_assert(LgAlign < 16, "LgAlign must be < 16");
|
|
299
|
+
|
|
300
|
+
/// Data members
|
|
301
|
+
|
|
302
|
+
// Read mostly by producers
|
|
303
|
+
alignas(Align) Atom<Weight> debit_; // written frequently only by producers
|
|
304
|
+
Atom<Weight> capacity_; // written rarely by capacity resets
|
|
305
|
+
|
|
306
|
+
// Read mostly by consumers
|
|
307
|
+
alignas(Align) Atom<Weight> credit_; // written frequently only by consumers
|
|
308
|
+
Atom<Weight> threshold_; // written rarely only by capacity resets
|
|
309
|
+
|
|
310
|
+
// Normally written and read rarely by producers and consumers
|
|
311
|
+
// May be read frequently by producers when capacity is full
|
|
312
|
+
alignas(Align) Atom<Weight> transfer_;
|
|
313
|
+
detail::Futex<Atom> waiting_;
|
|
314
|
+
|
|
315
|
+
// Underlying unbounded queue
|
|
316
|
+
UnboundedQueue<
|
|
317
|
+
T,
|
|
318
|
+
SingleProducer,
|
|
319
|
+
SingleConsumer,
|
|
320
|
+
MayBlock,
|
|
321
|
+
LgSegmentSize,
|
|
322
|
+
LgAlign,
|
|
323
|
+
Atom>
|
|
324
|
+
q_;
|
|
325
|
+
|
|
326
|
+
public:
|
|
327
|
+
using value_type = T;
|
|
328
|
+
using size_type = size_t;
|
|
329
|
+
|
|
330
|
+
/** constructor */
|
|
331
|
+
explicit DynamicBoundedQueue(Weight capacity)
|
|
332
|
+
: debit_(0),
|
|
333
|
+
capacity_(capacity + threshold(capacity)), // capacity slack
|
|
334
|
+
credit_(0),
|
|
335
|
+
threshold_(threshold(capacity)),
|
|
336
|
+
transfer_(0),
|
|
337
|
+
waiting_(0) {}
|
|
338
|
+
|
|
339
|
+
/** destructor */
|
|
340
|
+
~DynamicBoundedQueue() {}
|
|
341
|
+
|
|
342
|
+
/// Enqueue functions
|
|
343
|
+
|
|
344
|
+
/** enqueue */
|
|
345
|
+
FOLLY_ALWAYS_INLINE void enqueue(const T& v) { enqueueImpl(v); }
|
|
346
|
+
|
|
347
|
+
FOLLY_ALWAYS_INLINE void enqueue(T&& v) { enqueueImpl(std::move(v)); }
|
|
348
|
+
|
|
349
|
+
/** try_enqueue */
|
|
350
|
+
FOLLY_ALWAYS_INLINE bool try_enqueue(const T& v) { return tryEnqueueImpl(v); }
|
|
351
|
+
|
|
352
|
+
FOLLY_ALWAYS_INLINE bool try_enqueue(T&& v) {
|
|
353
|
+
return tryEnqueueImpl(std::move(v));
|
|
354
|
+
}
|
|
355
|
+
|
|
356
|
+
/** try_enqueue_until */
|
|
357
|
+
template <typename Clock, typename Duration>
|
|
358
|
+
FOLLY_ALWAYS_INLINE bool try_enqueue_until(
|
|
359
|
+
const T& v, const std::chrono::time_point<Clock, Duration>& deadline) {
|
|
360
|
+
return tryEnqueueUntilImpl(v, deadline);
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
template <typename Clock, typename Duration>
|
|
364
|
+
FOLLY_ALWAYS_INLINE bool try_enqueue_until(
|
|
365
|
+
T&& v, const std::chrono::time_point<Clock, Duration>& deadline) {
|
|
366
|
+
return tryEnqueueUntilImpl(std::move(v), deadline);
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
/** try_enqueue_for */
|
|
370
|
+
template <typename Rep, typename Period>
|
|
371
|
+
FOLLY_ALWAYS_INLINE bool try_enqueue_for(
|
|
372
|
+
const T& v, const std::chrono::duration<Rep, Period>& duration) {
|
|
373
|
+
return tryEnqueueForImpl(v, duration);
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
template <typename Rep, typename Period>
|
|
377
|
+
FOLLY_ALWAYS_INLINE bool try_enqueue_for(
|
|
378
|
+
T&& v, const std::chrono::duration<Rep, Period>& duration) {
|
|
379
|
+
return tryEnqueueForImpl(std::move(v), duration);
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
/// Dequeue functions
|
|
383
|
+
|
|
384
|
+
/** dequeue */
|
|
385
|
+
FOLLY_ALWAYS_INLINE void dequeue(T& elem) {
|
|
386
|
+
q_.dequeue(elem);
|
|
387
|
+
addCredit(WeightFn()(elem));
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
/** try_dequeue */
|
|
391
|
+
FOLLY_ALWAYS_INLINE bool try_dequeue(T& elem) {
|
|
392
|
+
if (q_.try_dequeue(elem)) {
|
|
393
|
+
addCredit(WeightFn()(elem));
|
|
394
|
+
return true;
|
|
395
|
+
}
|
|
396
|
+
return false;
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
FOLLY_ALWAYS_INLINE folly::Optional<T> try_dequeue() {
|
|
400
|
+
auto elem = q_.try_dequeue();
|
|
401
|
+
if (elem.hasValue()) {
|
|
402
|
+
addCredit(WeightFn()(*elem));
|
|
403
|
+
}
|
|
404
|
+
return elem;
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
/** try_dequeue_until */
|
|
408
|
+
template <typename Clock, typename Duration>
|
|
409
|
+
FOLLY_ALWAYS_INLINE bool try_dequeue_until(
|
|
410
|
+
T& elem, const std::chrono::time_point<Clock, Duration>& deadline) {
|
|
411
|
+
if (q_.try_dequeue_until(elem, deadline)) {
|
|
412
|
+
addCredit(WeightFn()(elem));
|
|
413
|
+
return true;
|
|
414
|
+
}
|
|
415
|
+
return false;
|
|
416
|
+
}
|
|
417
|
+
|
|
418
|
+
template <typename Clock, typename Duration>
|
|
419
|
+
FOLLY_ALWAYS_INLINE folly::Optional<T> try_dequeue_until(
|
|
420
|
+
const std::chrono::time_point<Clock, Duration>& deadline) {
|
|
421
|
+
auto elem = q_.try_dequeue_until(deadline);
|
|
422
|
+
if (elem.hasValue()) {
|
|
423
|
+
addCredit(WeightFn()(*elem));
|
|
424
|
+
}
|
|
425
|
+
return elem;
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
/** try_dequeue_for */
|
|
429
|
+
template <typename Rep, typename Period>
|
|
430
|
+
FOLLY_ALWAYS_INLINE bool try_dequeue_for(
|
|
431
|
+
T& elem, const std::chrono::duration<Rep, Period>& duration) {
|
|
432
|
+
if (q_.try_dequeue_for(elem, duration)) {
|
|
433
|
+
addCredit(WeightFn()(elem));
|
|
434
|
+
return true;
|
|
435
|
+
}
|
|
436
|
+
return false;
|
|
437
|
+
}
|
|
438
|
+
|
|
439
|
+
template <typename Rep, typename Period>
|
|
440
|
+
FOLLY_ALWAYS_INLINE folly::Optional<T> try_dequeue_for(
|
|
441
|
+
const std::chrono::duration<Rep, Period>& duration) {
|
|
442
|
+
auto elem = q_.try_dequeue_for(duration);
|
|
443
|
+
if (elem.hasValue()) {
|
|
444
|
+
addCredit(WeightFn()(*elem));
|
|
445
|
+
}
|
|
446
|
+
return elem;
|
|
447
|
+
}
|
|
448
|
+
|
|
449
|
+
/// Secondary functions
|
|
450
|
+
|
|
451
|
+
/** reset_capacity */
|
|
452
|
+
void reset_capacity(Weight capacity) noexcept {
|
|
453
|
+
Weight thresh = threshold(capacity);
|
|
454
|
+
capacity_.store(capacity + thresh, std::memory_order_release);
|
|
455
|
+
threshold_.store(thresh, std::memory_order_release);
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
/** weight */
|
|
459
|
+
Weight weight() const noexcept {
|
|
460
|
+
auto d = getDebit();
|
|
461
|
+
auto c = getCredit();
|
|
462
|
+
auto t = getTransfer();
|
|
463
|
+
return d > (c + t) ? d - (c + t) : 0;
|
|
464
|
+
}
|
|
465
|
+
|
|
466
|
+
/** size */
|
|
467
|
+
size_t size() const noexcept { return q_.size(); }
|
|
468
|
+
|
|
469
|
+
/** empty */
|
|
470
|
+
bool empty() const noexcept { return q_.empty(); }
|
|
471
|
+
|
|
472
|
+
private:
|
|
473
|
+
/// Private functions ///
|
|
474
|
+
|
|
475
|
+
// Calculation of threshold to move credits in bulk from consumers
|
|
476
|
+
// to producers
|
|
477
|
+
constexpr Weight threshold(Weight capacity) const noexcept {
|
|
478
|
+
return (capacity + 9) / 10;
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
// Functions called frequently by producers
|
|
482
|
+
|
|
483
|
+
template <typename Arg>
|
|
484
|
+
FOLLY_ALWAYS_INLINE void enqueueImpl(Arg&& v) {
|
|
485
|
+
tryEnqueueUntilImpl(
|
|
486
|
+
std::forward<Arg>(v), std::chrono::steady_clock::time_point::max());
|
|
487
|
+
}
|
|
488
|
+
|
|
489
|
+
template <typename Arg>
|
|
490
|
+
FOLLY_ALWAYS_INLINE bool tryEnqueueImpl(Arg&& v) {
|
|
491
|
+
return tryEnqueueUntilImpl(
|
|
492
|
+
std::forward<Arg>(v), std::chrono::steady_clock::time_point::min());
|
|
493
|
+
}
|
|
494
|
+
|
|
495
|
+
template <typename Clock, typename Duration, typename Arg>
|
|
496
|
+
FOLLY_ALWAYS_INLINE bool tryEnqueueUntilImpl(
|
|
497
|
+
Arg&& v, const std::chrono::time_point<Clock, Duration>& deadline) {
|
|
498
|
+
Weight weight = WeightFn()(std::forward<Arg>(v));
|
|
499
|
+
if (FOLLY_LIKELY(tryAddDebit(weight))) {
|
|
500
|
+
q_.enqueue(std::forward<Arg>(v));
|
|
501
|
+
return true;
|
|
502
|
+
}
|
|
503
|
+
return tryEnqueueUntilSlow(std::forward<Arg>(v), deadline);
|
|
504
|
+
}
|
|
505
|
+
|
|
506
|
+
template <typename Rep, typename Period, typename Arg>
|
|
507
|
+
FOLLY_ALWAYS_INLINE bool tryEnqueueForImpl(
|
|
508
|
+
Arg&& v, const std::chrono::duration<Rep, Period>& duration) {
|
|
509
|
+
if (FOLLY_LIKELY(tryEnqueueImpl(std::forward<Arg>(v)))) {
|
|
510
|
+
return true;
|
|
511
|
+
}
|
|
512
|
+
auto deadline = std::chrono::steady_clock::now() + duration;
|
|
513
|
+
return tryEnqueueUntilSlow(std::forward<Arg>(v), deadline);
|
|
514
|
+
}
|
|
515
|
+
|
|
516
|
+
FOLLY_ALWAYS_INLINE bool tryAddDebit(Weight weight) noexcept {
|
|
517
|
+
Weight capacity = getCapacity();
|
|
518
|
+
Weight before = fetchAddDebit(weight);
|
|
519
|
+
if (FOLLY_LIKELY(before + weight <= capacity)) {
|
|
520
|
+
return true;
|
|
521
|
+
} else {
|
|
522
|
+
subDebit(weight);
|
|
523
|
+
return false;
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
|
|
527
|
+
FOLLY_ALWAYS_INLINE Weight getCapacity() const noexcept {
|
|
528
|
+
return capacity_.load(std::memory_order_acquire);
|
|
529
|
+
}
|
|
530
|
+
|
|
531
|
+
FOLLY_ALWAYS_INLINE Weight fetchAddDebit(Weight weight) noexcept {
|
|
532
|
+
Weight before;
|
|
533
|
+
if (SingleProducer) {
|
|
534
|
+
before = getDebit();
|
|
535
|
+
debit_.store(before + weight, std::memory_order_relaxed);
|
|
536
|
+
} else {
|
|
537
|
+
before = debit_.fetch_add(weight, std::memory_order_acq_rel);
|
|
538
|
+
}
|
|
539
|
+
return before;
|
|
540
|
+
}
|
|
541
|
+
|
|
542
|
+
FOLLY_ALWAYS_INLINE Weight getDebit() const noexcept {
|
|
543
|
+
return debit_.load(std::memory_order_acquire);
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
// Functions called frequently by consumers
|
|
547
|
+
|
|
548
|
+
FOLLY_ALWAYS_INLINE void addCredit(Weight weight) noexcept {
|
|
549
|
+
Weight before = fetchAddCredit(weight);
|
|
550
|
+
Weight thresh = getThreshold();
|
|
551
|
+
if (before + weight >= thresh && before < thresh) {
|
|
552
|
+
transferCredit();
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
|
|
556
|
+
FOLLY_ALWAYS_INLINE Weight fetchAddCredit(Weight weight) noexcept {
|
|
557
|
+
Weight before;
|
|
558
|
+
if (SingleConsumer) {
|
|
559
|
+
before = getCredit();
|
|
560
|
+
credit_.store(before + weight, std::memory_order_relaxed);
|
|
561
|
+
} else {
|
|
562
|
+
before = credit_.fetch_add(weight, std::memory_order_acq_rel);
|
|
563
|
+
}
|
|
564
|
+
return before;
|
|
565
|
+
}
|
|
566
|
+
|
|
567
|
+
FOLLY_ALWAYS_INLINE Weight getCredit() const noexcept {
|
|
568
|
+
return credit_.load(std::memory_order_acquire);
|
|
569
|
+
}
|
|
570
|
+
|
|
571
|
+
FOLLY_ALWAYS_INLINE Weight getThreshold() const noexcept {
|
|
572
|
+
return threshold_.load(std::memory_order_acquire);
|
|
573
|
+
}
|
|
574
|
+
|
|
575
|
+
/** Functions called infrequently by producers */
|
|
576
|
+
|
|
577
|
+
void subDebit(Weight weight) noexcept {
|
|
578
|
+
Weight before;
|
|
579
|
+
if (SingleProducer) {
|
|
580
|
+
before = getDebit();
|
|
581
|
+
debit_.store(before - weight, std::memory_order_relaxed);
|
|
582
|
+
} else {
|
|
583
|
+
before = debit_.fetch_sub(weight, std::memory_order_acq_rel);
|
|
584
|
+
}
|
|
585
|
+
DCHECK_GE(before, weight);
|
|
586
|
+
}
|
|
587
|
+
|
|
588
|
+
template <typename Clock, typename Duration, typename Arg>
|
|
589
|
+
bool tryEnqueueUntilSlow(
|
|
590
|
+
Arg&& v, const std::chrono::time_point<Clock, Duration>& deadline) {
|
|
591
|
+
Weight weight = WeightFn()(std::forward<Arg>(v));
|
|
592
|
+
if (canEnqueue(deadline, weight)) {
|
|
593
|
+
q_.enqueue(std::forward<Arg>(v));
|
|
594
|
+
return true;
|
|
595
|
+
} else {
|
|
596
|
+
return false;
|
|
597
|
+
}
|
|
598
|
+
}
|
|
599
|
+
|
|
600
|
+
template <typename Clock, typename Duration>
|
|
601
|
+
bool canEnqueue(
|
|
602
|
+
const std::chrono::time_point<Clock, Duration>& deadline,
|
|
603
|
+
Weight weight) noexcept {
|
|
604
|
+
Weight capacity = getCapacity();
|
|
605
|
+
while (true) {
|
|
606
|
+
tryReduceDebit();
|
|
607
|
+
Weight debit = getDebit();
|
|
608
|
+
if ((debit + weight <= capacity) && tryAddDebit(weight)) {
|
|
609
|
+
return true;
|
|
610
|
+
}
|
|
611
|
+
if (deadline < Clock::time_point::max() && Clock::now() >= deadline) {
|
|
612
|
+
return false;
|
|
613
|
+
}
|
|
614
|
+
if (MayBlock) {
|
|
615
|
+
if (canBlock(weight, capacity)) {
|
|
616
|
+
detail::futexWaitUntil(&waiting_, WAITING, deadline);
|
|
617
|
+
}
|
|
618
|
+
} else {
|
|
619
|
+
asm_volatile_pause();
|
|
620
|
+
}
|
|
621
|
+
}
|
|
622
|
+
}
|
|
623
|
+
|
|
624
|
+
bool canBlock(Weight weight, Weight capacity) noexcept {
|
|
625
|
+
waiting_.store(WAITING, std::memory_order_relaxed);
|
|
626
|
+
std::atomic_thread_fence(std::memory_order_seq_cst);
|
|
627
|
+
tryReduceDebit();
|
|
628
|
+
Weight debit = getDebit();
|
|
629
|
+
return debit + weight > capacity;
|
|
630
|
+
}
|
|
631
|
+
|
|
632
|
+
bool tryReduceDebit() noexcept {
|
|
633
|
+
Weight w = takeTransfer();
|
|
634
|
+
if (w > 0) {
|
|
635
|
+
subDebit(w);
|
|
636
|
+
}
|
|
637
|
+
return w > 0;
|
|
638
|
+
}
|
|
639
|
+
|
|
640
|
+
Weight takeTransfer() noexcept {
|
|
641
|
+
Weight w = getTransfer();
|
|
642
|
+
if (w > 0) {
|
|
643
|
+
w = transfer_.exchange(0, std::memory_order_acq_rel);
|
|
644
|
+
}
|
|
645
|
+
return w;
|
|
646
|
+
}
|
|
647
|
+
|
|
648
|
+
Weight getTransfer() const noexcept {
|
|
649
|
+
return transfer_.load(std::memory_order_acquire);
|
|
650
|
+
}
|
|
651
|
+
|
|
652
|
+
/** Functions called infrequently by consumers */
|
|
653
|
+
|
|
654
|
+
void transferCredit() noexcept {
|
|
655
|
+
Weight credit = takeCredit();
|
|
656
|
+
transfer_.fetch_add(credit, std::memory_order_acq_rel);
|
|
657
|
+
if (MayBlock) {
|
|
658
|
+
std::atomic_thread_fence(std::memory_order_seq_cst);
|
|
659
|
+
waiting_.store(NOTWAITING, std::memory_order_relaxed);
|
|
660
|
+
detail::futexWake(&waiting_);
|
|
661
|
+
}
|
|
662
|
+
}
|
|
663
|
+
|
|
664
|
+
Weight takeCredit() noexcept {
|
|
665
|
+
Weight credit;
|
|
666
|
+
if (SingleConsumer) {
|
|
667
|
+
credit = credit_.load(std::memory_order_relaxed);
|
|
668
|
+
credit_.store(0, std::memory_order_relaxed);
|
|
669
|
+
} else {
|
|
670
|
+
credit = credit_.exchange(0, std::memory_order_acq_rel);
|
|
671
|
+
}
|
|
672
|
+
return credit;
|
|
673
|
+
}
|
|
674
|
+
|
|
675
|
+
}; // DynamicBoundedQueue
|
|
676
|
+
|
|
677
|
+
/// Aliases
|
|
678
|
+
|
|
679
|
+
/** DSPSCQueue */
|
|
680
|
+
template <
|
|
681
|
+
typename T,
|
|
682
|
+
bool MayBlock,
|
|
683
|
+
size_t LgSegmentSize = 8,
|
|
684
|
+
size_t LgAlign = 7,
|
|
685
|
+
typename WeightFn = DefaultWeightFn<T>,
|
|
686
|
+
template <typename> class Atom = std::atomic>
|
|
687
|
+
using DSPSCQueue = DynamicBoundedQueue<
|
|
688
|
+
T,
|
|
689
|
+
true,
|
|
690
|
+
true,
|
|
691
|
+
MayBlock,
|
|
692
|
+
LgSegmentSize,
|
|
693
|
+
LgAlign,
|
|
694
|
+
WeightFn,
|
|
695
|
+
Atom>;
|
|
696
|
+
|
|
697
|
+
/** DMPSCQueue */
|
|
698
|
+
template <
|
|
699
|
+
typename T,
|
|
700
|
+
bool MayBlock,
|
|
701
|
+
size_t LgSegmentSize = 8,
|
|
702
|
+
size_t LgAlign = 7,
|
|
703
|
+
typename WeightFn = DefaultWeightFn<T>,
|
|
704
|
+
template <typename> class Atom = std::atomic>
|
|
705
|
+
using DMPSCQueue = DynamicBoundedQueue<
|
|
706
|
+
T,
|
|
707
|
+
false,
|
|
708
|
+
true,
|
|
709
|
+
MayBlock,
|
|
710
|
+
LgSegmentSize,
|
|
711
|
+
LgAlign,
|
|
712
|
+
WeightFn,
|
|
713
|
+
Atom>;
|
|
714
|
+
|
|
715
|
+
/** DSPMCQueue */
|
|
716
|
+
template <
|
|
717
|
+
typename T,
|
|
718
|
+
bool MayBlock,
|
|
719
|
+
size_t LgSegmentSize = 8,
|
|
720
|
+
size_t LgAlign = 7,
|
|
721
|
+
typename WeightFn = DefaultWeightFn<T>,
|
|
722
|
+
template <typename> class Atom = std::atomic>
|
|
723
|
+
using DSPMCQueue = DynamicBoundedQueue<
|
|
724
|
+
T,
|
|
725
|
+
true,
|
|
726
|
+
false,
|
|
727
|
+
MayBlock,
|
|
728
|
+
LgSegmentSize,
|
|
729
|
+
LgAlign,
|
|
730
|
+
WeightFn,
|
|
731
|
+
Atom>;
|
|
732
|
+
|
|
733
|
+
/** DMPMCQueue */
|
|
734
|
+
template <
|
|
735
|
+
typename T,
|
|
736
|
+
bool MayBlock,
|
|
737
|
+
size_t LgSegmentSize = 8,
|
|
738
|
+
size_t LgAlign = 7,
|
|
739
|
+
typename WeightFn = DefaultWeightFn<T>,
|
|
740
|
+
template <typename> class Atom = std::atomic>
|
|
741
|
+
using DMPMCQueue = DynamicBoundedQueue<
|
|
742
|
+
T,
|
|
743
|
+
false,
|
|
744
|
+
false,
|
|
745
|
+
MayBlock,
|
|
746
|
+
LgSegmentSize,
|
|
747
|
+
LgAlign,
|
|
748
|
+
WeightFn,
|
|
749
|
+
Atom>;
|
|
750
|
+
|
|
751
|
+
} // namespace folly
|