Project

General

Profile

« Previous | Next » 

Revision 5c8c88a3

Added by normal over 9 years ago

cont.c: Optimize fiber_switch callees

Remove some unnecessary VALUE/struct conversions and aggressively inline
functions used during fiber_switch. Either of these changes alone does
not yield significant performance increase, but in combination they
improve performance by ~6%.

Arguably, removal of separate VALUE/rb_fiber_t* variables also makes the
code more readable in a few places.

  • vm_core.h: declare rb_fiber_t typedef
    (rb_thread_t): fiber and root_fiber become rb_fiber_t * (from VALUE)
  • vm.c (rb_thread_mark): use rb_fiber_mark_self
  • cont.c (rb_fiber_t): prev becomes rb_fiber_t * (from VALUE)
    (cont_mark, cont_free): simplify conditions
    (rb_fiber_mark_self): new function
    (fiber_mark): use rb_fiber_mark_self
    (cont_save_thread, cont_restore_thread): inline
    (cont_restore_thread): simplify
    (fiber_setcontext): simplify conditions
    (rb_cont_call): remove dereference
    (fiber_t_alloc): update for rb_fiber_t->prev type change
    (rb_fiber_start): ditto
    (fiber_current): extract from rb_fiber_current
    (return_fiber): move, simplify type checks
    (rb_fiber_current): use fiber_current
    (fiber_store): simplify type checks
    (fiber_switch): ditto, simplify call to fiber_setcontext,
    use fiber_current
    (rb_fiber_transfer): update for type changes
    (rb_fiber_terminate): move, use fiber_switch
    (rb_fiber_resume): update for type changes
    (rb_fiber_reset_root_local_storage): ditto
    (rb_fiber_yield): use rb_fiber_switch instead of rb_fiber_transfer
    (rb_fiber_m_transfer): ditto
    [ruby-core:65518] [Feature #10341]

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