Messages in this thread |  | | Date | Mon, 2 Sep 1996 09:57:33 +0200 (MET DST) | From | Bernd Schmidt <> | Subject | Speeding up screen output for dialog |
| |
I've been wondering why some dialog-based applications (e.g. menuconfig) take so long even on a P90 to draw the screen. So I made some investigations with strace. I found that ncurses writes to the screen in rather large blocks of bytes, but these get broken up in write_chan() in n_tty.c into single byte writes to the console, which is inefficient (I assume that setting the cursor after each write is the most time-consuming part). So I came up with a hack: Instead of calling opost() for each byte, I wrote a new function opost_block() that examines the buffer and returns the number of bytes that can be directly written. These are then passed to con_write() instead of put_char().
I've attached a patch. Comments are welcome. I didn't try very hard to make opost_block() return the maximum number of characters that can be written, there may be some room for improvement. Even so, there is a substantial speed increase for menuconfig (I made the Makefile link lxdialog statically for good measure). It's almost enjoyable now :)
Bernd
begin 644 fast_opost.diff M9&EF9B`M=7)D(&QI;G5X+6]R:6<O9')I=F5R<R]C:&%R+VY?='1Y+F,@;&EN M=7@O9')I=F5R<R]C:&%R+VY?='1Y+F,*+2TM(&QI;G5X+6]R:6<O9')I=F5R M<R]C:&%R+VY?='1Y+F,)5V5D($IU;"`R-"`P.3HT.3HU,R`Q.3DV"BLK*R!L M:6YU>"]D<FEV97)S+V-H87(O;E]T='DN8PE3=6X@4V5P("`Q(#$V.C0R.C$Y M(#$Y.38*0$`@+3$U-2PV("LQ-34L,S@@0$`*(`ER971U<FX@,#L*('T*(`HK M<W1A=&EC(&EN="!O<&]S=%]B;&]C:RAS=')U8W0@='1Y7W-T<G5C="`J('1T M>2P**PD)("`@("`@(&-O;G-T('5N<VEG;F5D(&-H87(@*B!B=68L('5N<VEG M;F5D(&EN="!N<BD**WL**PEI;G0@<W!A8V4["BL):6YT(&D["BL**PES<&%C M92`]('1T>2T^9')I=F5R+G=R:71E7W)O;VTH='1Y*3L**PEI9B`H(7-P86-E M*0HK"0ER971U<FX@+3$["BL):68@*&YR(#X@<W!A8V4I"BL)"6YR(#T@<W!A M8V4["BL)9F]R("AI(#T@,#L@:2`\(&YR.R!I*RLI('L**PD)=6YS:6=N960@ M8VAA<B!C(#T@9V5T7W5S97(H8G5F("L@:2D["BL**PD):68@*&,@/3T@)UQN M)RD@>PHK"0D):68@*$]?3TY,0U(H='1Y*2D**PD)"0EB<F5A:SL**PHK"0D) M:68@*$]?3TY,4D54*'1T>2DI"BL)"0D)='1Y+3YC;VQU;6X@/2`P.PHK"0D) M='1Y+3YC86YO;E]C;VQU;6X@/2!T='DM/F-O;'5M;CL**PD)?2!E;'-E(&EF M("AC(#T]("=<<B<@?'P@8R`]/2`G7'0G('Q\(&,@/3T@)UQB)R!\?"!I<V-N M=')L*&,I*2!["BL)"0EB<F5A:SL**PD)?2!E;'-E('L**PD)"6EF("A/7T], M0U5#*'1T>2D@)B8@=&]U<'!E<BAC*2`A/2!C*0HK"0D)"6)R96%K.PHK"0D) M='1Y+3YC;VQU;6XK*SL**PD)?0HK"7T**PER971U<FX@:3L**WT**PH@<W1A M=&EC(&EN;&EN92!V;VED('!U=%]C:&%R*'5N<VEG;F5D(&-H87(@8RP@<W1R M=6-T('1T>5]S=')U8W0@*G1T>2D*('L*(`ET='DM/F1R:79E<BYP=71?8VAA M<BAT='DL(&,I.PI`0"`M.34P+#8@*SDX,BPQ-2!`0`H@"0E]"B`)"6EF("A/ M7T]03U-4*'1T>2DI('L*(`D)"7=H:6QE("AN<B`^(#`I('L**PD)"0EI;G0@ M;G)?;F]R;6%L(#T@;W!O<W1?8FQO8VLH='1Y+"!B+"!N<BD["BL)"0D):68@ M*&YR7VYO<FUA;"`^(#`I('L**PD)"0D):68@*'1T>2T^9')I=F5R+F9L=7-H M7V-H87)S*0HK"0D)"0D)='1Y+3YD<FEV97(N9FQU<VA?8VAA<G,H='1Y*3L* M*PD)"0D);G)?;F]R;6%L(#T@='1Y+3YD<FEV97(N=W)I=&4H='1Y+"`Q+"!B M+"!N<E]N;W)M86PI.PHK"0D)"0EB("L](&YR7VYO<FUA;#L@;G(@+3T@;G)? M;F]R;6%L.PHK"0D)"7T**PD)"0EI9B`H;G(@/3T@,"D**PD)"0D)8G)E86L[ M"B`)"0D)8R`](&=E=%]U<V5R*&(I.PH@"0D)"6EF("AO<&]S="AC+"!T='DI M(#P@,"D*(`D)"0D)8G)E86L["D!`("TY-C(L-R`K,3`P,RPW($!`"B`)"0EB M("L](&,["B`)"0EN<B`M/2!C.PH@"0E]"BT)"6EF("@A;G(I"BL)"6EF("AN M<B`]/2`P*0H@"0D)8G)E86L["B`)"6EF("AF:6QE+3YF7V9L86=S("8@3U]. M3TY"3$]#2RD@>PH@"0D)<F5T=F%L(#T@+45!1T%)3CL*9&EF9B`M=7)D(&QI M;G5X+6]R:6<O<V-R:7!T<R]L>&1I86QO9R]-86ME9FEL92!L:6YU>"]S8W)I M<'1S+VQX9&EA;&]G+TUA:V5F:6QE"BTM+2!L:6YU>"UO<FEG+W-C<FEP=',O M;'AD:6%L;V<O36%K969I;&4)4V%T($%P<B`R,"`Q,#HQ.#HQ-"`Q.3DV"BLK M*R!L:6YU>"]S8W)I<'1S+VQX9&EA;&]G+TUA:V5F:6QE"5-U;B!397`@(#$@ M,3<Z,3DZ,S0@,3DY-@I`0"`M,RPW("LS+#<@0$`*($]05$E-(#T@+4\R("U7 M86QL("UF;VUI="UF<F%M92UP;VEN=&5R"B`*($-&3$%'4R`]("0H3U!424TI M("U$3$]#04Q%(`HM3$1&3$%'4R`]("US("U,("X**TQ$1DQ!1U,@/2`M<R`M M<W1A=&EC("U,("X*($Q$3$E"4R`]("UL;F-U<G-E<PH@"B!I9F5Q("@O=7-R M+VEN8VQU9&4O;F-U<G-E<R]N8W5R<V5S+F@L("0H=VEL9&-A<F0@+W5S<B]I ;;F-L=61E+VYC=7)S97,O;F-U<G-E<RYH*2D* ` end
|  |