| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Fixes #22376.
JRuby 9.0.5.0 will support ObjectSpace.each_object against a
class's singleton class, since that's essentially just walking an
internal subclasses structure we already maintain. This test was
too narrow, requiring that each_object support an arbitrary class
but only actually needing it to work against a class's singleton.
This improves performance of Class.descendants by nearly two orders
of magnitude when run against JRuby 9.0.5.0:
```ruby
5.times { puts Benchmark.measure { 100_000.times { Numeric.descendants } } }
```
Before:
```
11.510000 0.140000 11.650000 ( 10.082384)
9.990000 0.020000 10.010000 ( 9.931233)
10.520000 0.040000 10.560000 ( 10.502978)
10.290000 0.030000 10.320000 ( 10.276027)
10.000000 0.030000 10.030000 ( 9.942429)
```
After:
```
1.380000 0.040000 1.420000 ( 0.365850)
0.210000 0.000000 0.210000 ( 0.149574)
0.180000 0.020000 0.200000 ( 0.141094)
0.140000 0.000000 0.140000 ( 0.140634)
0.190000 0.010000 0.200000 ( 0.147962)
```
|
|
|
|
|
|
|
|
|
|
|
| |
This method needs to ensure that if a change happens, it is going to be registered.
With this refactor suggested by @matthewd race conditions do not matter because if
no file is watched, nothing is done. And as long as some invocation sets the flag
to true, it will stay true.
The refactor leaves a race condition in which two simultaneous threads that watch
some of the files passed do the actual work in `any?`, whereas the mutex guaranteed
that was done at most once. But this is considered to be a better tradeoff.
|
| |
|
|
|
|
| |
listen is calling us from its own thread, we need to synchronize reads and writes to this flag.
|
|\
| |
| | |
add deprecations for a smooth transition after #22215
|
| | |
|
|\ \
| | |
| | | |
Change Enumerable#sum to use inject(:sym) specification
|
| |/
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| | |
Not only does this make for simpler, more obvious code, it's also more performant:
require 'benchmark/ips'
module Enumerable
def old_sum(identity = 0, &block)
if block_given?
map(&block).old_sum(identity)
else
inject { |sum, element| sum + element } || identity
end
end
def new_sum(identity = 0, &block)
if block_given?
map(&block).new_sum(identity)
else
inject(:+) || identity
end
end
end
summable = (1..100).to_a # sum is 5050
Benchmark.ips do |x|
x.report("old_sum") { summable.old_sum }
x.report("new_sum") { summable.new_sum }
x.compare!
end
# Calculating -------------------------------------
# old_sum 10.674k i/100ms
# new_sum 14.542k i/100ms
# -------------------------------------------------
# old_sum 117.350k (± 7.1%) i/s - 587.070k
# new_sum 154.712k (± 3.8%) i/s - 785.268k
#
# Comparison:
# new_sum: 154712.1 i/s
# old_sum: 117350.0 i/s - 1.32x slower
More benchmarks [here](https://gist.github.com/tjschuck/b3fe4e8c812712376648), including summing strings and passing blocks. The performance gains are less for those, but this version still always wins.
|
|/
|
|
| |
Fixes #22311
|
| |
|
|\
| |
| | |
send normalized keys to the cache backends so they do not need to man…
|
| | |
|
| |
| |
| |
| | |
this themselves
|
| |\
| | |
| | | |
fast and consistent return when local_cache does not exist
|
| | | |
|
| |\ \
| | | |
| | | | |
Add days_in_year method to Time class
|
| | | | |
|
| |/ / |
|
| | | |
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
Before
./Users/Juan/dev/rails/activesupport/test/file_update_checker_shared_tests.rb:20: warning: instance variable @tmpdir not initialized
After
No warnings
|
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | |
| | | |
A small rewrite in a last attempt at writing obvious and portable code
without manual string manipulation.
Note that Pathname#== uses string comparison on Windows, so if client
code passes "C:\foo" and "c:/foo/bar" the predicate won't see the
former is an ascendant of the latter. Risky business.
|
| | |
| | |
| | | |
This can make use of the FileEventedUpdateChecker, if available.
|
| | |
| | |
| | |
| | |
| | |
| | | |
Whatever the inner loop selects, we already know is a descendant and
can be filtered out right away from dirs_sorted_by_nparts to skip
useless iterations.
|
| | | |
|
| | | |
|
| | | |
|
| | | |
|
| | | |
|
| | | |
|
| | | |
|
| | | |
|
| | | |
|
| | | |
|
| | | |
|
| | | |
|
| | | |
|
| | | |
|
| | | |
|
| | | |
|
| | | |
|
| | | |
|
| | | |
|
| | | |
|
| | | |
|
| | | |
|
| | | |
|
| | |
| | |
| | |
| | | |
"checker" is the name being used everywhere.
|
| | |
| | |
| | |
| | | |
This sucks, but otherwise I get occasional Fs on Mac OS X.
|
| | |
| | |
| | |
| | |
| | | |
Mac OS X tries by all means to hide that /var is /private/var, and that is
what FSEvents reports back.
|
| | | |
|