Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Release v6.25.2 #775

Merged
merged 10 commits into from
Feb 7, 2023
Merged

Release v6.25.2 #775

merged 10 commits into from
Feb 7, 2023

Conversation

imjoehaines
Copy link
Contributor

Enhancements

imjoehaines and others added 9 commits January 5, 2023 11:35
Use docker compose exec to run queue commands in maze runner tests
The current implementation checks if `auto_notify` is an instance of
`TrueClass` or `FalseClass` (in that order). As this is a "hot path" as
far as Bugsnag is concerned (runs on all notifications), we can consider
applying the following optimizations:

- `true` and `false` are singleton instances of `TrueClass` and
  `FalseClass`, respectively. Therefore, we can rely on the slightly
  faster `.equal?` check, which relies on object identity.
- `false` is the default for the method, so is likely the most common
  usage, so we can invert the order of the check and check for `false`
  before `true`, to benefit from short circuiting in the more common case.

This new implementation is faster in the `false` and non-boolean cases,
and while it is slower in the `true` case (because of the order
inversion), it is still faster than the previous approach was in the
`false` case.

We can test this using the following benchmark:

    require "benchmark/ips"
    [
      false, # Default    – Probably most common case
      true,  # Override   – Probably accounts for almost all other usage
      {},    # Deprecated – Probably barely any usage
    ].freeze.each do |auto_notify|
      Benchmark.ips do |x|
        x.compare!
        x.report("#{auto_notify}.is_a? TrueClass or #{auto_notify}.is_a? FalseClass (status quo)") do
          auto_notify.is_a? TrueClass or auto_notify.is_a? FalseClass
        end
        x.report("false.equal? #{auto_notify} or true.equal? #{auto_notify}         (proposed)  ") do
          false.equal? auto_notify or true.equal? auto_notify
        end
      end
    end

which produces the following results:

    Implementation                                                              |`false`             |`true`              |`{}`
    ----------------------------------------------------------------------------|--------------------|--------------------|--------------------
    `auto_notify.is_a? TrueClass or auto_notify.is_a? FalseClass` _(status quo)_|11.978M (± 0.6%) i/s|17.122M (± 1.3%) i/s|11.814M (± 0.5%) i/s
    `false.equal? auto_notify or true.equal? auto_notify`         _(proposal)_  |17.955M (± 0.4%) i/s|13.553M (± 1.6%) i/s|13.420M (± 2.5%) i/s
…check

Optimize `auto_notify` boolean check
@imjoehaines imjoehaines merged commit e5afde5 into master Feb 7, 2023
@imjoehaines imjoehaines deleted the release/v6.25.2 branch February 7, 2023 09:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants