summaryrefslogtreecommitdiff
path: root/thread.c
diff options
context:
space:
mode:
authorYusuke Endoh <mame@ruby-lang.org>2021-10-25 20:00:51 +0900
committerGitHub <noreply@github.com>2021-10-25 20:00:51 +0900
commit86e3d77abb8a033650937710d1ab009e98647494 (patch)
tree928732b8a0bb6f9067ceb659f1d72bc32ddcb55b /thread.c
parent54379e3d7d297cc8b3ea61ad98c6cc337dc04882 (diff)
Make Coverage suspendable (#4856)
* Make Coverage suspendable Add `Coverage.suspend`, `Coverage.resume` and some methods. [Feature #18176] [ruby-core:105321]
Notes
Notes: Merged-By: mame <mame@ruby-lang.org>
Diffstat (limited to 'thread.c')
-rw-r--r--thread.c23
1 files changed, 18 insertions, 5 deletions
diff --git a/thread.c b/thread.c
index 336ac7836c..17510b32f2 100644
--- a/thread.c
+++ b/thread.c
@@ -5746,7 +5746,15 @@ void
rb_set_coverages(VALUE coverages, int mode, VALUE me2counter)
{
GET_VM()->coverages = coverages;
+ GET_VM()->me2counter = me2counter;
GET_VM()->coverage_mode = mode;
+}
+
+void
+rb_resume_coverages()
+{
+ int mode = GET_VM()->coverage_mode;
+ VALUE me2counter = GET_VM()->me2counter;
rb_add_event_hook2((rb_event_hook_func_t) update_line_coverage, RUBY_EVENT_COVERAGE_LINE, Qnil, RUBY_EVENT_HOOK_FLAG_SAFE | RUBY_EVENT_HOOK_FLAG_RAW_ARG);
if (mode & COVERAGE_TARGET_BRANCHES) {
rb_add_event_hook2((rb_event_hook_func_t) update_branch_coverage, RUBY_EVENT_COVERAGE_BRANCH, Qnil, RUBY_EVENT_HOOK_FLAG_SAFE | RUBY_EVENT_HOOK_FLAG_RAW_ARG);
@@ -5756,13 +5764,9 @@ rb_set_coverages(VALUE coverages, int mode, VALUE me2counter)
}
}
-/* Make coverage arrays empty so old covered files are no longer tracked. */
void
-rb_reset_coverages(void)
+rb_suspend_coverages()
{
- rb_clear_coverages();
- rb_iseq_remove_coverage_all();
- GET_VM()->coverages = Qfalse;
rb_remove_event_hook((rb_event_hook_func_t) update_line_coverage);
if (GET_VM()->coverage_mode & COVERAGE_TARGET_BRANCHES) {
rb_remove_event_hook((rb_event_hook_func_t) update_branch_coverage);
@@ -5772,6 +5776,15 @@ rb_reset_coverages(void)
}
}
+/* Make coverage arrays empty so old covered files are no longer tracked. */
+void
+rb_reset_coverages(void)
+{
+ rb_clear_coverages();
+ rb_iseq_remove_coverage_all();
+ GET_VM()->coverages = Qfalse;
+}
+
VALUE
rb_default_coverage(int n)
{