Project

General

Profile

Feature #13667

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

Added by burke (Burke Libbey) almost 2 years ago. Updated 3 months ago.

Status:
Closed
Priority:
Normal
Target version:
-
[ruby-core:81726]

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

Associated revisions

Revision 95d949d5
Added by mame (Yusuke Endoh) over 1 year ago

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]

git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@59716 b2dd03c8-39d4-4d8f-98ff-823fe69b080e

Revision 59716
Added by mame (Yusuke Endoh) over 1 year ago

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]

Revision 59716
Added by mame (Yusuke Endoh) over 1 year ago

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]

Revision 59716
Added by mame (Yusuke Endoh) over 1 year ago

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]

History

Updated by hsbt (Hiroshi SHIBATA) almost 2 years ago

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

Updated by mame (Yusuke Endoh) over 1 year 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 1 year ago

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

#4

Updated by mame (Yusuke Endoh) over 1 year 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) over 1 year 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) 3 months 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