• Chris Gaffney's avatar
    ruby: Improve performance of Google::Protobuf::Timestamp#to_time (#6360) · 7da7bec4
    Chris Gaffney authored
    This changes to_time to use Ruby's built in Time.at with nanos support
    rather than calculating a float and passing it to Time.at. The new
    version runs about 3 times faster than the original version and
    allocates fewer objects.
    
    Warming up --------------------------------------
        protobuf#to_time    57.296k i/100ms
          faster#to_time   133.229k i/100ms
    Calculating -------------------------------------
        protobuf#to_time    635.361k (± 2.1%) i/s -      3.209M in   5.052169s
          faster#to_time      1.873M (± 3.3%) i/s -      9.459M in   5.055169s
    
    Comparison:
          faster#to_time:  1873368.8 i/s
        protobuf#to_time:   635361.4 i/s - 2.95x  slower
    
    Calculating -------------------------------------
        protobuf#to_time   326.000  memsize (   126.000  retained)
                             7.000  objects (     2.000  retained)
                             0.000  strings (     0.000  retained)
          faster#to_time    86.000  memsize (     0.000  retained)
                             1.000  objects (     0.000  retained)
                             0.000  strings (     0.000  retained)
    
    Comparison:
          faster#to_time:         86 allocated
        protobuf#to_time:        326 allocated - 3.79x more
    7da7bec4
Name
Last commit
Last update
.github Loading commit data...
benchmarks Loading commit data...
cmake Loading commit data...
conformance Loading commit data...
csharp Loading commit data...
docs Loading commit data...
editors Loading commit data...
examples Loading commit data...
java Loading commit data...
js Loading commit data...
kokoro Loading commit data...
m4 Loading commit data...
objectivec Loading commit data...
php Loading commit data...
protoc-artifacts Loading commit data...
python Loading commit data...
ruby Loading commit data...
src Loading commit data...
third_party Loading commit data...
util/python Loading commit data...
.gitignore Loading commit data...
.gitmodules Loading commit data...
BUILD Loading commit data...
CHANGES.txt Loading commit data...
CONTRIBUTING.md Loading commit data...
CONTRIBUTORS.txt Loading commit data...
LICENSE Loading commit data...
Makefile.am Loading commit data...
Protobuf.podspec Loading commit data...
README.md Loading commit data...
WORKSPACE Loading commit data...
appveyor.bat Loading commit data...
appveyor.yml Loading commit data...
autogen.sh Loading commit data...
compiler_config_setting.bzl Loading commit data...
composer.json Loading commit data...
configure.ac Loading commit data...
generate_changelog.py Loading commit data...
generate_descriptor_proto.sh Loading commit data...
global.json Loading commit data...
post_process_dist.sh Loading commit data...
protobuf-lite.pc.in Loading commit data...
protobuf.bzl Loading commit data...
protobuf.pc.in Loading commit data...
protobuf_deps.bzl Loading commit data...
six.BUILD Loading commit data...
tests.sh Loading commit data...
update_file_lists.sh Loading commit data...
update_version.py Loading commit data...