monotime 0.8.1 → 0.8.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +18 -0
- data/README.md +4 -4
- data/lib/monotime/duration.rb +3 -1
- data/lib/monotime/instant.rb +46 -7
- data/lib/monotime/version.rb +1 -1
- data/monotime.gemspec +2 -0
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: fa145221981b5ff0adb6d1cd3aa77a7e9e9a32942ab9a849a2f83a0d434e245d
|
4
|
+
data.tar.gz: c86e6a4ca11e2e9569089574662e96d2cf0ef1b2216ee638832099a5570cd5da
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 78a3a8dc8817cc0f99b67d2839d341e01259815c1fefce78ad0d619f2a4c2739414896a98322a2dd620d105b3b1636f6d355d2250deb71920e3a444d970bc0c4
|
7
|
+
data.tar.gz: 5408bc28e13df38a04228eedd325371f7136c036c6ab57c0775c7adc401d4e516acae375502bf16d1f5e3945fe2aaf9b60e6e8549d57570a16d4ec59b10a5b99
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,22 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## [0.8.2] - 2023-09-22
|
4
|
+
|
5
|
+
### Added
|
6
|
+
|
7
|
+
- `Instant.clock_name` is back and now tracks `clock_id` using reflection.
|
8
|
+
- Explicit minimum Ruby version in gemspec (2.7.0).
|
9
|
+
|
10
|
+
### Changed
|
11
|
+
|
12
|
+
- Clock auto-selection redux. We choose the first available from:
|
13
|
+
|
14
|
+
1. `CLOCK_UPTIME_RAW` on macOS, faster and higher resolution, also used by Rust
|
15
|
+
2. `CLOCK_MONOTONIC`
|
16
|
+
3. `CLOCK_REALTIME`, a non-monotonic fallback that issues a warning on startup
|
17
|
+
|
18
|
+
- Slight performance bump for `Duration.measure` on Ruby <= 3.1
|
19
|
+
|
3
20
|
## [0.8.1] - 2023-09-18
|
4
21
|
|
5
22
|
### Changed
|
@@ -179,6 +196,7 @@
|
|
179
196
|
[0.7.1]: https://github.com/Freaky/monotime/commits/v0.7.0
|
180
197
|
[0.8.0]: https://github.com/Freaky/monotime/commits/v0.8.0
|
181
198
|
[0.8.1]: https://github.com/Freaky/monotime/commits/v0.8.1
|
199
|
+
[0.8.2]: https://github.com/Freaky/monotime/commits/v0.8.2
|
182
200
|
[issue #1]: https://github.com/Freaky/monotime/issues/1
|
183
201
|
[Ruby #16740]: https://bugs.ruby-lang.org/issues/16740
|
184
202
|
[@celsworth]: https://github.com/celsworth
|
data/README.md
CHANGED
@@ -171,11 +171,11 @@ The gem is available as open source under the terms of the [MIT License](https:/
|
|
171
171
|
### Core Ruby
|
172
172
|
|
173
173
|
For a zero-dependency alternative upon which `monotime` is based, see
|
174
|
-
[`Process.clock_gettime`](https://
|
174
|
+
[`Process.clock_gettime`](https://www.rubydoc.info/stdlib/core/Process:clock_gettime).
|
175
175
|
|
176
|
-
`Process::CLOCK_MONOTONIC` is a safe default, but other options may offer
|
177
|
-
behaviour in
|
178
|
-
|
176
|
+
`Process::CLOCK_MONOTONIC` is a safe default, but other options may offer higher
|
177
|
+
resolution or alternative behaviour in light of system suspend/resume or NTP
|
178
|
+
frequency skew.
|
179
179
|
|
180
180
|
### Other Gems
|
181
181
|
|
data/lib/monotime/duration.rb
CHANGED
data/lib/monotime/instant.rb
CHANGED
@@ -31,17 +31,24 @@ module Monotime
|
|
31
31
|
# * +Process::CLOCK_MONOTONIC_PRECISE+
|
32
32
|
# * +Process::CLOCK_MONOTONIC_FAST+
|
33
33
|
# * +Process::CLOCK_MONOTONIC+
|
34
|
+
# * +:MACH_ABSOLUTE_TIME_BASED_CLOCK_MONOTONIC+
|
35
|
+
# * +:TIMES_BASED_CLOCK_MONOTONIC+
|
34
36
|
#
|
35
|
-
# These are platform-dependant and may vary in resolution,
|
36
|
-
# and behaviour
|
37
|
-
# should be selected
|
37
|
+
# These are platform-dependant and may vary in resolution, accuracy,
|
38
|
+
# performance, and behaviour in light of system suspend/resume and NTP
|
39
|
+
# frequency skew. They should be selected carefully based on your specific
|
40
|
+
# needs and environment.
|
38
41
|
#
|
39
42
|
# It is possible to set non-monotonic clock sources here. You probably
|
40
43
|
# shouldn't.
|
41
44
|
#
|
42
|
-
# Defaults to
|
45
|
+
# Defaults to auto-selection from whatever is available from:
|
43
46
|
#
|
44
|
-
#
|
47
|
+
# * +CLOCK_UPTIME_RAW+ (if running under macOS)
|
48
|
+
# * +CLOCK_MONOTONIC+
|
49
|
+
# * +CLOCK_REALTIME+ (non-monotonic fallback, issues a run-time warning)
|
50
|
+
#
|
51
|
+
# @param id [Numeric, Symbol]
|
45
52
|
attr_accessor :clock_id
|
46
53
|
|
47
54
|
# The function used to create +Instant+ instances.
|
@@ -61,16 +68,48 @@ module Monotime
|
|
61
68
|
# Note per Ruby issue #16740, the practical usability of this method is
|
62
69
|
# dubious and non-portable.
|
63
70
|
#
|
64
|
-
# @param clock [Numeric] Optional clock id instead of default.
|
71
|
+
# @param clock [Numeric, Symbol] Optional clock id instead of default.
|
65
72
|
def clock_getres(clock = clock_id)
|
66
73
|
Duration.from_nanos(Process.clock_getres(clock, :nanosecond))
|
67
74
|
rescue SystemCallError
|
68
75
|
# suppress errors
|
69
76
|
end
|
77
|
+
|
78
|
+
# The symbolic name of the currently-selected +clock_id+, if available.
|
79
|
+
#
|
80
|
+
# @return [Symbol, nil]
|
81
|
+
def clock_name
|
82
|
+
return clock_id if clock_id.is_a? Symbol
|
83
|
+
|
84
|
+
Process.constants.find do |c|
|
85
|
+
c.to_s.start_with?('CLOCK_') && Process.const_get(c) == clock_id
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
89
|
+
private
|
90
|
+
|
91
|
+
def select_clock_id
|
92
|
+
if RUBY_PLATFORM.include?('darwin') && Process.const_defined?(:CLOCK_UPTIME_RAW)
|
93
|
+
# Offers nanosecond resolution and appears to be slightly faster on two
|
94
|
+
# different Macs (M1 and x64)
|
95
|
+
#
|
96
|
+
# There is also :MACH_ABSOLUTE_TIME_BASED_CLOCK_MONOTONIC which calls
|
97
|
+
# mach_absolute_time() directly, but documentation for that recommends
|
98
|
+
# CLOCK_UPTIME_RAW, and the performance difference is minimal.
|
99
|
+
Process::CLOCK_UPTIME_RAW
|
100
|
+
elsif Process.const_defined?(:CLOCK_MONOTONIC)
|
101
|
+
Process::CLOCK_MONOTONIC
|
102
|
+
else
|
103
|
+
# There is also :TIMES_BASED_CLOCK_MONOTONIC, but having seen it just return
|
104
|
+
# 0 instead of an error on a MSVC build this may be the safer option.
|
105
|
+
warn 'No monotonic clock source detected, falling back to CLOCK_REALTIME'
|
106
|
+
Process::CLOCK_REALTIME
|
107
|
+
end
|
108
|
+
end
|
70
109
|
end
|
71
110
|
|
72
111
|
self.monotonic_function = -> { Process.clock_gettime(clock_id, :nanosecond) }
|
73
|
-
self.clock_id =
|
112
|
+
self.clock_id = select_clock_id
|
74
113
|
|
75
114
|
# Create a new +Instant+ from an optional nanosecond measurement.
|
76
115
|
#
|
data/lib/monotime/version.rb
CHANGED
data/monotime.gemspec
CHANGED
@@ -13,6 +13,8 @@ Gem::Specification.new do |spec|
|
|
13
13
|
spec.homepage = "https://github.com/Freaky/monotime"
|
14
14
|
spec.license = "MIT"
|
15
15
|
|
16
|
+
spec.required_ruby_version = '>= 2.7.0'
|
17
|
+
|
16
18
|
# Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
|
17
19
|
# to allow pushing to a single host or delete this section to allow pushing to any host.
|
18
20
|
if spec.respond_to?(:metadata)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: monotime
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.8.
|
4
|
+
version: 0.8.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Thomas Hurst
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-09-
|
11
|
+
date: 2023-09-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -102,7 +102,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
102
102
|
requirements:
|
103
103
|
- - ">="
|
104
104
|
- !ruby/object:Gem::Version
|
105
|
-
version:
|
105
|
+
version: 2.7.0
|
106
106
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
108
|
- - ">="
|