diff options
author | mame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-12-20 04:24:14 +0000 |
---|---|---|
committer | mame <mame@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2017-12-20 04:24:14 +0000 |
commit | c08e8886badd47890a54bdc54f1c09de7ad5c8e8 (patch) | |
tree | 4e6482561ec1853289c3cdba8c77251728418d17 /vm_core.h | |
parent | e7464561b5151501beb356fc750d5dd1a88014f7 (diff) | |
download | ruby-c08e8886badd47890a54bdc54f1c09de7ad5c8e8.tar.gz |
compile.c: add a RUBY_EVENT_COVERAGE_LINE event for line coverage
2.5's line coverage measurement was about two times slower than 2.4
because of two reasons; (1) vm_trace uses rb_iseq_event_flags (which
takes O(n) currently where n is the length of iseq) to get an event
type, and (2) RUBY_EVENT_LINE uses setjmp to call an event hook.
This change adds a special event for line coverage,
RUBY_EVENT_COVERAGE_LINE, and adds `tracecoverage` instructions where
the event occurs in iseq.
`tracecoverage` instruction calls an event hook without vm_trace.
And, RUBY_EVENT_COVERAGE_LINE is an internal event which does not
use setjmp.
This change also cancells lineno change due to the deletion of trace
instructions [Feature #14104]. So fixes [Bug #14191].
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@61350 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'vm_core.h')
-rw-r--r-- | vm_core.h | 3 |
1 files changed, 2 insertions, 1 deletions
@@ -1755,7 +1755,8 @@ RUBY_SYMBOL_EXPORT_BEGIN int rb_thread_check_trap_pending(void); /* #define RUBY_EVENT_RESERVED_FOR_INTERNAL_USE 0x030000 */ /* from vm_core.h */ -#define RUBY_EVENT_COVERAGE_BRANCH 0x010000 +#define RUBY_EVENT_COVERAGE_LINE 0x010000 +#define RUBY_EVENT_COVERAGE_BRANCH 0x020000 extern VALUE rb_get_coverages(void); extern void rb_set_coverages(VALUE, int, VALUE); |