- 21 Jun, 2018 1 commit
-
-
Yedidya Feldblum authored
Summary: [Folly] Fix narrowing conversion in `folly::popcount`. Reviewed By: ot, nbronson Differential Revision: D8555467 fbshipit-source-id: fdef83fc05e3e595087e7b8a3aba98400e5a954a
-
- 20 Jun, 2018 15 commits
-
-
Xiao Shi authored
Summary: Previously, `visitContiguousRanges` for fallback F14 sets did not build and `visitAllocationClasses` was invoking the visitor with the wrong order. This diff fixes these bugs and moves the tests so that it'll get run regardless of whether vector intrinsics are available. Reviewed By: nbronson Differential Revision: D8542771 fbshipit-source-id: 3aee3ab9e3278110ec8349bd9c858d19df779eb1
-
Giuseppe Ottaviano authored
Summary: There should be no expectations on what hash is internally used in dynamic, so we don't need to maintain compatibility with `FBString`, which hasn't been used as string storage in `dynamic` for quite a while. Reviewed By: yfeldblum Differential Revision: D8304491 fbshipit-source-id: 9988e9012c31b894746488494dd644054492def3
-
Daniel Xu authored
Summary: GCC 8 introduces a new `class-memaccess` warning. The compiler rightly complains about `memcpy`-ing a non-POD datatype even though we know it's ok. Casting to `void*` before `memcpy` silences the compiler warning. Closes https://github.com/facebook/folly/pull/869 Reviewed By: simpkins Differential Revision: D8475831 Pulled By: danobi fbshipit-source-id: c0f4eb9a653803cc912be1c6148f50ab71a8c6ab
-
Nathan Bronson authored
Summary: The tdigest_test is sometimes timing out on the Travis CI build, perhaps because it runs the tests sequentially rather than in parallel as under buck. This diff reduces the size of the random tests. At the reduced size it was slightly exceeding the hard-coded expected accuracy bounds, so the diff also loosens those. This is a test-only change. Reviewed By: yfeldblum Differential Revision: D8548385 fbshipit-source-id: f78aee6aa22d59b297c2aef757da1dc9e0831052
-
Daniel Xu authored
Summary: The folly logging library introduced a new shared library: libfollylogging. folly::init recently started to depend on on libfollylogging's initLoggingOrDie(). The problem is that libfolly is never linked with libfollylogging, leading to the following error upon application link time: /usr/local/lib/libfolly.so: undefined reference to folly::initLoggingOrDie(folly::Range<char const*>) This patch forces libfollylogging to implicitly link with libfolly through the removal of libfollylogging altogether. Note that logging/InitWeak.cpp has been added to the source list. This was previously omitted. Closes https://github.com/facebook/folly/pull/872 Reviewed By: simpkins Differential Revision: D8530795 Pulled By: danobi fbshipit-source-id: 280fbc2170364621e9a682ae38cf812c23bde5e5
-
Yedidya Feldblum authored
Summary: [Folly] Better control over ASAN disabling in `Range` SSE42 functions. Just disable ASAN for the specific loads which are at risk of reading memory slightly past the end of the given buffers. Reviewed By: ot, nbronson Differential Revision: D8473594 fbshipit-source-id: a93565137feae7500e1588eb239ff21f01530e25
-
Yedidya Feldblum authored
Summary: [Folly] Smaller implementations for `findFirstSet`, `findLastSet`. Reviewed By: nbronson Differential Revision: D8471816 fbshipit-source-id: 699af98d404e6dd76df02e344d09c850abc1c32f
-
Yedidya Feldblum authored
Summary: [Folly] Split BitIterator test and bench, improving the benchmark in some small ways, and fixing missing `std::iterator_traits` applications along the way. Reviewed By: nbronson Differential Revision: D8509129 fbshipit-source-id: 0fad0ce4d1c5abf76e33e04e98db36912e9cb651
-
Nathan Bronson authored
Summary: Before this diff the vector storage policy for F14 allocated the chunk array and the value_type array via separate calls to the allocator. After this diff they are performed via a single allocation using a byte allocator rebound from the original value allocator. This will halve the number of calls to malloc and free from a majority of F14FastMap-s and F14FastSet-s (and from all F14VectorMap and F14VectorSet). The optimization is likely to be most important for small sets and maps. In a microbenchmark that just creates and destroys 1-element F14VectorMap-s, this diff was a 20% CPU win. This diff is not pure win. The unified allocation of `(64+10*sizeof(value_type))*N` causes more internal fragmentation in jemalloc for most value_type sizes than separate allocations of `64*N` and `10*sizeof(value_type)*N`. 48-byte value_type is probably the most affected in practice; this diff will increase the memory footprint of vector-policy tables with 48-byte keys by 13% once internal memory fragmentation is taken into account. Taking into account the default jemalloc allocation classes, sizeof(value_type) | footprint change --------------------|-------------------- 24 | 1.03797 32 | 1. 40 | 1.07462 48 | 1.1273 56 | 1.0185 64 | 1.06558 72 | 1.02742 80 | 1.02672 88 | 1. 96 | 1. 104 | 1.05961 112 | 1.05849 120 | 0.965071 128 | 1.10305 136 | 0.942188 144 | 0.942984 152 | 1.05624 160 | 1.05549 168 | 0.927757 176 | 1.0238 184 | 1.02353 192 | 1.02327 200 | 1.08255 208 | 1.08173 216 | 1.08093 224 | 1.08015 232 | 0.981946 240 | 0.982102 248 | 0.982255 256 | 1.12316 Reviewed By: yfeldblum Differential Revision: D8485933 fbshipit-source-id: 1a7df390e11e71e1f56f23527aebec4806eb03d1
-
Xiao Shi authored
Summary: Restrict F14 availability (and use the fallback version) on 32-bit platforms until we audit the code, removing assumptions such as `size_t` is 64-bit and finding a mixer that does not require `__int128`. Reviewed By: nbronson Differential Revision: D8525351 fbshipit-source-id: 54fce48fe94235c8525074216426cf254db26b4e
-
Dan Melnic authored
Summary: Fix broken build due to "missing braces around initializer" error Reviewed By: nbronson Differential Revision: D8541080 fbshipit-source-id: f73f973c575b6d3dad999a454d1306f7608122c7
-
Xiao Shi authored
Summary: If RTTI is disabled for the compilation unit, simply skip recording the type of F14Policy in computeStats. This diff also contains a few fixes for when folly is built without RTTI. Reviewed By: nbronson Differential Revision: D8523618 fbshipit-source-id: dfbfa93ec462c0ff72c06b9f65d61b081e361f41
-
Caleb Marchent authored
Summary: The headerfile was removed from the source tree, but is still referenced, causing autotools based builds to fail. Closes https://github.com/facebook/folly/pull/874 Reviewed By: nbronson Differential Revision: D8531520 Pulled By: calebmarchent fbshipit-source-id: 33844e57f4551a66dd13ab9ec03a441c7779c41e
-
Alex Guzman authored
Summary: Adds header to the test headers exported by folly Reviewed By: yfeldblum Differential Revision: D8524926 fbshipit-source-id: 06983789c3ee9e403211fb5335365663878c2590
-
Jorge Lopez Silva authored
Summary: Extend AsyncUDPServerSocket to support dynamically pausing/resuming reading from the underlying socket. This functionality already exists for AsyncServerSocket but not for UDP server sockets. Reviewed By: djwatson Differential Revision: D8358256 fbshipit-source-id: 7d5cf14b656ef9280747515b23cd0ae2899ec38b
-
- 19 Jun, 2018 11 commits
-
-
Jason Fried authored
Summary: Sometimes get_executor gets called from threads where there is no asyncio evenloop. In those cases return NULL. The caller is responsible for this situation. Reviewed By: yfeldblum Differential Revision: D8492709 fbshipit-source-id: 325689ecd4541b9ba097cfe1cb4d6d61ad81cb43
-
Nathan Bronson authored
Summary: Using the alignment bits to store the index for a packed iterator is one of the steps toward better support of 32-bit platforms (and pointer authentication in future platforms, such as ARMv8.3-A). Previously this was complicated by a desire to make construction of a packed ItemIter as cheap as possible. The ItemPtr has a variable number of bits available due to alignment, which may not be sufficient to encode the index. This diff observes that we can piggyback on the chunk alignment to efficiently deduce the remaining bits of the index. If sizeof(Item) gives us only 2 bits of alignment, for example, then we can deduce 2 bits of the index from the Item*. Differential Revision: D8452991 fbshipit-source-id: 40dfd9957da3733090bb947646c553620cc7d33d
-
Maged Michael authored
Summary: Cleanup checks if the current thread has retired objects during bulk reclaim. It does so by flushing the thread local set of retired objects and checking if domain's list of retired objects. Reviewed By: djwatson Differential Revision: D8503159 fbshipit-source-id: 59ddd29d8ae1429b62b5bc9511b84e4c9e7128f2
-
Maged Michael authored
Summary: Add shutdown indicator to domain to be checked in retire to avoid accessing thread local private list of objects at shutdown time when the thread local structure may be already destroyed. Reviewed By: djwatson Differential Revision: D8501530 fbshipit-source-id: 16adef34f2fd265f35851c792bd9e62a2f19b81a
-
Nikhil Gupta authored
Summary: As title Reviewed By: yfeldblum Differential Revision: D8517773 fbshipit-source-id: 971178184e446c9de476cf43f65e04f49f05e0ad
-
Andrii Grynenko authored
Summary: facepaw Reviewed By: yfeldblum Differential Revision: D8465375 fbshipit-source-id: 9cbd00286963366e8e987b7fe865ec5d334e65b3
-
Giuseppe Ottaviano authored
Reviewed By: shixiao Differential Revision: D8516223 fbshipit-source-id: 0e259ce65183d779f066869091cdea837b7bd237
-
Giuseppe Ottaviano authored
Summary: Sometimes unit tests compare the JSON output of a component. We want a simple way to compare them semantically and also to ignore numerical errors for double values. Reviewed By: yfeldblum Differential Revision: D8505209 fbshipit-source-id: 04da89889f08a595e8296716f71b9a22156e3506
-
Yedidya Feldblum authored
Summary: [Folly] Let `window` work with functions returning `SemiFuture`. Reviewed By: LeeHowes Differential Revision: D8505836 fbshipit-source-id: 51c14b131760528eb6c367298cb23c4deec30ab3
-
Yedidya Feldblum authored
Summary: [Folly] Let `makeSemiFutureWith` accept functions returning `Future`, joining what would otherwise be the resulting `SemiFuture<Future<...>>` into `SemiFuture<...>`. Reviewed By: LeeHowes Differential Revision: D8505834 fbshipit-source-id: 10b626fae00b5002877295b59716066f089cb6a8
-
Nathan Bronson authored
Summary: rehash's max_size check was previously relying on the optimizer to inline and then remove a loop whose value could be determined at compile time. It failed to do this even in some trivial cases, wasting about 10 nanoseconds per rehash. This code moves the max_size check lower (more than 6 entries) and removes the loop entirely. Reviewed By: ot Differential Revision: D8499582 fbshipit-source-id: 8f5c288d3922b094da81ee9261254c729e8cb1b9
-
- 18 Jun, 2018 4 commits
-
-
Andrii Grynenko authored
Summary: exception_wrapper requires the actual exception object to be passed in for any std::exception. Reviewed By: memorybank Differential Revision: D8501214 fbshipit-source-id: 034a4c7df9979711dcb3740ca5c4313944f29cb6
-
Steve O'Brien authored
Summary: The `glog/logging.h` header is a bit expensive here considering its size, and how frequently `Range.h` is used. Replace the `DCHECK_${comparison}` macro usage with macros defined in this file. Reviewed By: yfeldblum Differential Revision: D8473303 fbshipit-source-id: cc2a7e9eabab2c1f83a377de5191f708f1c9f317
-
Dan Melnic authored
Summary: Adjust the growth factor based on the StaticMetaBase::head_::elementsCapacity Reviewed By: yfeldblum Differential Revision: D8409650 fbshipit-source-id: 189b839e19a1d3f2f1ac8e4b35a2f11a4d319ad7
-
Maged Michael authored
Summary: - Use the hazard pointer library under folly/synchronization. - NodeT derived from hazptr_obj_base_linked. - Bucket heads are hazptr_root-s with dtor that automatically unlinks nodes - Provides support for uncertain removal of NodeT-s both from NodeT and Buckets - As intended, hazptr_cleanup reclaims all unprotected removed objects even if they have not been determined to be retirable at the start of cleanup. Fixes the following: - The pattern of calling h.get_protected(node->next_), when hazptr_holder h is protecting node is unsafe because try_protect (inside get_protected) may fail and we end protecting neither node nor next. This diff uses a different hazptr_holder to protect the next node. A correct pattern is to call h2.get_protected(node->next_) then h.swap(h2); h2.reset(); - The pattern of calling h2.reset(node) then h1.reset() to continue protecting a node already protected by h1 is unsafe because h2's protection may be too late after node was retired. A correct pattern is h2.swap(h1). Reviewed By: djwatson Differential Revision: D7708325 fbshipit-source-id: 617dcfe19410071888abafa32f0e1ada9d123983
-
- 16 Jun, 2018 2 commits
-
-
Yedidya Feldblum authored
Summary: [Folly] `bool_constant` (C++17 backport) and `index_constant`. Reviewed By: aary Differential Revision: D8440131 fbshipit-source-id: 2bc4fae1e2d1f404d4060c209ee325beebe2a415
-
Alex Lambert authored
Summary: A comment to `FutureAlreadyContinued` to explain to readers in what circumstance it is thrown. (Note: this ignores all push blocking failures!) Reviewed By: yfeldblum Differential Revision: D8460097 fbshipit-source-id: 49657e030efe72c026c1c3eea3612952746bb0e1
-
- 15 Jun, 2018 5 commits
-
-
Marshall Cline authored
Summary: Add `explicit` to `MoveCtorOnly::MoveCtorOnly(int)` in FutureTest.cpp Reviewed By: yfeldblum Differential Revision: D8439496 fbshipit-source-id: 51217f186aa9b79d342a7be7f460d0a9c3f070c1
-
Nathan Bronson authored
Summary: When passing elements of a set or map through a bulk API that understands arrays, it is a useful optimization to be able to iterator or visit contiguous ranges rather than individual elements. This diff adds visitContiguousRanges to F14 maps and sets, which repeatedly passes a contiguous range to the visitor. The range is identified with a begin and end value_type const*. Each value_type of the table will be included in exactly one of the passed ranges, and the number of ranges will be minimized whenever possible. Reviewed By: yfeldblum Differential Revision: D8332897 fbshipit-source-id: a7cd5d670b14faeeef97497cccd4cb0a3b07dd50
-
Nathan Bronson authored
Summary: vshrn_n_u16 can be used to efficiently get a bit of information from every byte in a 16-byte vector into an 8-byte vector, which is better than the previous NEON sequence used during tag matching. The resulting code is faster and smaller on aarch64. x86_64 code is refactored but should compile to the same assembly. Reviewed By: shixiao Differential Revision: D8420917 fbshipit-source-id: 21a9f920f55ffc479b20fee6882a5987b626c89a
-
Marshall Cline authored
Summary: Add rvalue-qualified overloads of Future::get() and get(dur) which invalidate their this-object. Reviewed By: yfeldblum Differential Revision: D8242442 fbshipit-source-id: 4dea8a41878d59f6088504df2b8b3e686d581c89
-
Marshall Cline authored
Summary: Codemod non-pointer expressions: - expr.get() ==> std::move(expr).get() - expr.get(dur) ==> std::move(expr).get(dur) when expr is not already an xvalue. Reviewed By: yfeldblum Differential Revision: D8430137 fbshipit-source-id: 20da463f9cceb5cb1e71a7226f3b11d1e8007011
-
- 14 Jun, 2018 2 commits
-
-
Maged Michael authored
Summary: When hazptr_priv dtor pushes objects to the domain and that happens to trigger (either due to timed cleanup or reaching the bulk reclaim threshold) bulk reclamation that retires objects. These newly retired objects should be pushed to the domain and not into the hazptr_priv. Reviewed By: djwatson Differential Revision: D8410795 fbshipit-source-id: c7af01cc41a1d82896bd3700fa072f698c0aa77b
-
Andrii Grynenko authored
Summary: Currently the implementation just relies on futures::sleep. Ideally it should be able to use Executor's timer if available. Reviewed By: yfeldblum Differential Revision: D8404592 fbshipit-source-id: e952a0cc3d99bc528ea14ff5c68835d63a71e685
-