Feature #13667


Add Coverage.running? to quickly check if Coverage is enabled.

Added by burke (Burke Libbey) over 4 years ago. Updated almost 3 years ago.

Target version:


Since we can't RubyVM::InstructionSequence#to_binary when Coverage is running, it is useful to be able to ask ruby if coverage is active.

This is possible with Coverage.peek_result, but not efficient, since it involves quite a bit of data copying.

I've used the private symbol rb_get_coverages in bootsnap for now but this feels worth exposing publicly.

> Benchmark.realtime { 100.times{ Coverage.peek_result } }
=> 1.3659249999909662
> Benchmark.realtime { 100.times{ Bootsnap::CompileCache::Native.coverage_running? } }
=> 5.099998088553548e-05

Example usage:

class RubyVM::InstructionSequence
  def load_iseq(path)
    return nil if defined?(Coverage) && Coverage.running?
    # ...


Updated by hsbt (Hiroshi SHIBATA) over 4 years ago

  • Assignee set to mame (Yusuke Endoh)
  • Status changed from Open to Assigned

Updated by mame (Yusuke Endoh) over 4 years ago

Sorry for the late reply. I'm positive for this proposal.

There is the same request #13838, which reminds me of this ticket. That issue proposes Coverage.enabled?. I'm unsure, but running? seems a bit better to me because the starting API is not Coverage.enabled = true but Coverage.start.

Any opinions? If there is no strong objection, I will choose running?.

Updated by yui-knk (Kaneko Yuichiro) over 4 years ago

I also think running? is better. And I feel #test_coverage_running? is good enough :)

Actions #4

Updated by mame (Yusuke Endoh) about 4 years ago

  • Status changed from Assigned to Closed

Applied in changeset trunk|r59716.

ext/coverage/coverage.c: add Coverage.enabled?

  • ext/coverage/coverage.c (rb_coverage_running): add to quickly check if coverage is enabled. patched by Burke Libbey in [ruby-core:81726]. [Feature #13667]

Updated by mame (Yusuke Endoh) about 4 years ago

  • Status changed from Closed to Feedback

I applied the patch proposed. After that, however, I'm now considering reverting it.

I noticed that this feature may be dangerous. By using this, we can easily write a program that changes its behavior only under coverage measurement. It brings difficulties to testing with coverage measurement. I don't see such a bad program released into the wild.

Could you elaborate your use case that beats the disadvantage? If any, I will remain the feature, but otherwise, I will revert it.

Updated by mame (Yusuke Endoh) almost 3 years ago

  • Status changed from Feedback to Closed

I have forgotten why the status of this ticket is feedback :-) Anyway, it is already released, so there is no change to remove it. Closing.


Also available in: Atom PDF