Feature #13667
closed
Add Coverage.running? to quickly check if Coverage is enabled.
Added by burke (Burke Libbey) over 7 years ago.
Updated almost 6 years ago.
Description
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?
# ...
end
end
Files
- Status changed from Open to Assigned
- Assignee set to mame (Yusuke Endoh)
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?
.
I also think running?
is better. And I feel #test_coverage_running?
is good enough :)
- 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]
- 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.
- 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
Like0
Like0Like0Like0Like0Like0Like0