X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Fengraver-group-engraver.cc;h=0cbdd68c08fee9dc0ba2f6a80a51dc0a50a1bd8b;hb=7e72a1e50e94a7f9738d62599de79fe7745f600c;hp=518d277d592fc2ba588bcb834ed02746f3c26cb5;hpb=95692a1ccc0f222354e08743ef3271f24528b2bf;p=lilypond.git diff --git a/lily/engraver-group-engraver.cc b/lily/engraver-group-engraver.cc index 518d277d59..0cbdd68c08 100644 --- a/lily/engraver-group-engraver.cc +++ b/lily/engraver-group-engraver.cc @@ -1,75 +1,44 @@ /* - engravergroup.cc -- implement Engraver_group_engraver - + engraver-group-engraver.cc -- implement Engraver_group_engraver + source file of the GNU LilyPond music typesetter - (c) 1997--2002 Han-Wen Nienhuys + (c) 1997--2004 Han-Wen Nienhuys */ #include "flower-proto.hh" #include "engraver-group-engraver.hh" #include "engraver.hh" -#include "debug.hh" +#include "warn.hh" #include "paper-score.hh" #include "grob.hh" void Engraver_group_engraver::announce_grob (Grob_info info) { - announce_info_arr_.push (info); + announce_infos_.push (info); Engraver::announce_grob (info); } - void -Engraver_group_engraver::create_grobs_in_simple_children () +Engraver_group_engraver::process_acknowledged_grobs_in_simple_children () { - for (SCM p = simple_trans_list_; gh_pair_p (p); p = ly_cdr (p)) + for (SCM p = get_simple_trans_list (); gh_pair_p (p); p = ly_cdr (p)) { Translator * t = unsmob_translator (ly_car (p)); Engraver * eng = dynamic_cast (t); if (eng) - eng->create_grobs (); + eng->process_acknowledged_grobs (); } } -/* - - Done: eliminating useless broadcast/acknowledge - - -One cause for translation slowness: grob broadcasted/acknowledges - (b/a): every grob is b/a-ed to all peer-engravers and all -parent-engravers. This means that lots of (often) useless b/a is done -for large scores (the top-level engravers gets to know every detail of -every voice, thread, etc. Measurements indicate this is 10% of the - interpretation time: - - standchen - -old: (pre 1.5.13) 10.28 -new: 8.73 -speedup: 15 % - -Coriolan: - -new: 197.59 -old: 219.12 seconds -speedup: 10% - - -The cost of this B/A is # of useless engravers * cost of one ack, -which is rather low, since cost of one ack is only an interface check. -The cost of precomputing engraver lists has two elts: computing the -list itself, GC for the structure, looking up the list during the -acks. - -*/ SCM find_acknowledge_engravers (SCM gravlist, SCM meta); +SCM find_accept_engravers (SCM gravlist, SCM music_descr); + void Engraver_group_engraver::acknowledge_grobs () { - if (!announce_info_arr_.size ()) + if (!announce_infos_.size ()) return ; SCM tab = get_property ("acknowledgeHashTable"); @@ -77,11 +46,11 @@ Engraver_group_engraver::acknowledge_grobs () SCM meta_sym = ly_symbol2scm ("meta"); - for (int j =0; j < announce_info_arr_.size (); j++) + for (int j =0; j < announce_infos_.size (); j++) { - Grob_info info = announce_info_arr_[j]; + Grob_info info = announce_infos_[j]; - SCM meta = info.grob_l_->internal_get_grob_property (meta_sym); + SCM meta = info.grob_->internal_get_grob_property (meta_sym); SCM nm = scm_assoc (name_sym, meta); if (gh_pair_p (nm)) nm = ly_cdr (nm); @@ -102,7 +71,7 @@ Engraver_group_engraver::acknowledge_grobs () SCM acklist = scm_hashq_ref (tab, nm, SCM_UNDEFINED); if (acklist == SCM_BOOL_F) { - acklist= find_acknowledge_engravers (gh_cons (self_scm (), simple_trans_list_), meta); + acklist = find_acknowledge_engravers (gh_cons (self_scm (), get_simple_trans_list ()), meta); scm_hashq_set_x (tab, nm, acklist); } @@ -110,7 +79,7 @@ Engraver_group_engraver::acknowledge_grobs () { Translator * t = unsmob_translator (ly_car (p)); Engraver * eng = dynamic_cast (t); - if (eng && eng!= info.origin_trans_l_) + if (eng && eng!= info.origin_trans_) eng->acknowledge_grob (info); } } @@ -125,14 +94,15 @@ Engraver_group_engraver::do_announces () dynamic_cast (t)->do_announces (); } - // create_grobs_in_simple_children (); + process_acknowledged_grobs_in_simple_children (); - while (announce_info_arr_.size ()) + do { acknowledge_grobs (); - announce_info_arr_.clear (); - create_grobs_in_simple_children (); + announce_infos_.clear (); + process_acknowledged_grobs_in_simple_children (); } + while (announce_infos_.size ()); } @@ -143,7 +113,7 @@ Engraver_group_engraver::do_announces () void Engraver_group_engraver::process_music () { - for (SCM p = simple_trans_list_; gh_pair_p (p); p =ly_cdr (p)) + for (SCM p = get_simple_trans_list (); gh_pair_p (p); p =ly_cdr (p)) { Translator * t = unsmob_translator (ly_car (p)); Engraver * eng = dynamic_cast (t); @@ -163,7 +133,11 @@ Engraver_group_engraver::process_music () void Engraver_group_engraver::initialize () { - SCM tab = scm_make_vector (gh_int2scm (61), SCM_BOOL_F); // magic -> + /* + docme: why bool_f. + + */ + SCM tab = scm_make_vector (gh_int2scm (61), SCM_BOOL_F); set_property ("acknowledgeHashTable", tab); Translator_group::initialize (); @@ -174,7 +148,8 @@ Engraver_group_engraver::Engraver_group_engraver() {} ENTER_DESCRIPTION(Engraver_group_engraver, /* descr */ "A group of engravers taken together", /* creats*/ "", -/* acks */ "", +/* accepts */ "", +/* acks */ "", /* reads */ "", /* write */ ""); @@ -183,7 +158,8 @@ ENTER_DESCRIPTION(Engraver_group_engraver, /*****************/ -bool engraver_valid (Translator*tr, SCM ifaces) +bool +engraver_valid (Translator*tr, SCM ifaces) { SCM ack_ifs = scm_assoc (ly_symbol2scm ("interfaces-acked"), tr->translator_description()); ack_ifs = gh_cdr (ack_ifs); @@ -194,6 +170,7 @@ bool engraver_valid (Translator*tr, SCM ifaces) } + SCM find_acknowledge_engravers (SCM gravlist, SCM meta_alist) { @@ -210,3 +187,5 @@ find_acknowledge_engravers (SCM gravlist, SCM meta_alist) return l; } + +