仲村です。

>>> In message Mon, 02 Aug 1999 11:00:08 +0900
   "[ruby-ext:00366] Re: Ruby/Gtk + Imlib patch"
   Hiroshi Igarashi <igarashi / ueda.info.waseda.ac.jp> writes:

> いがらしです。

> > > GCはあまり頻繁にやっても良い
> > > と手放しで言えるほどには軽くないので、たとえば画像のサイズの
> > > 合計をとっておいてある一定の大きさを越えた時点でGCする(この
> > > 場合の閾値はカンと経験で決める)とかいう手が使えるかもしれま
> > > せん。
> > 
> > やっぱりGCはそれなりのコストがかかるんですね。。
> > # 頭を使わなくてすむ簡単な方法があったらラクチンだったんですが。(^^;
> 
> この修正、よろしくお願いします。

ruby-gtk-SNAPSHOT-19990802.tar.gz へのパッチで送ります。
一応、付属のGdkImlibサンプルは、全部動くことを確認しました。
修正メモもつけてあります。

画像サイズの総計を計算するという方法ではなく、GdkImlib::Image#render 
が実行された回数をカウントしておいて、カウントが一定数を越えたらGCを発
生させるようにしました。
で、GdkImlib::Image#render以外でもGCを発生させたほうがいいと思われると
こでもGC発生させるようにしておきました。

ただし、mallocからみでImlibのソースを眺めていたら、Imlibのほうで、メモ
リ割り当てに失敗したときの対処が考えられていないとこが結構ありました。
なので、このパッチの修正だけでは完璧ではないです。Imlibを修正した上で
rbgdkimlib.cを修正しないと。。



> それから
>     http://www.ueda.info.waseda.ac.jp/~igarashi/ruby/api-ja/gtk.html
> にGdkImlibモジュールとGdkImlib::Imageクラスを追加しておきました。
> メソッド名で意見のある方はどうぞ。

これですが、GdkImlib::Image のメソッド名に "image" と入っているものは、
"image"を省いたメソッド名にしたほうがいいですかね。
いがらしさんにクラス名を指摘されたあとであらためてメソッド名を眺めてみ
ると、冗長に感じてしまって。

-- 
仲村秀樹  deki / yk.rim.or.jp

begin 644 ruby-gtk-SNAPSHOT-19990802-deki.patch.gz M'XL("(3/I3<``W)U8GDM9W1K+5-.05!32$]4+3$Y.3DP.#`R+61E:VDN<&%T M8V@`Q5=M4QO7%?YL_8H[]C0CH9702D(@T22V,2&D0%+`:6?:CF8MK<0.TBZS MDFH[B7^,Z%DWM>7!QKA$YM78!2%L.9E)[$S;J5M/7FQPFQGPIT[MZ;GW[DJ[ M0A!HG7890'OO>7W.<\Z]2BJI%/$5AG22SH_[-3W=/M@[^*ZO/YM1SM`EVZO+ MY_.UD#HR4E#).X4,"7:0@!@+=<7$#B)&HU&7U^MM,G%DM""3$X4T(2$JVQ&- MA:)<]OAQXA,%L8MX12$4),>/N[C&K4KY)3PR_F8\9G+MG>U!T>5MN=75'BJ7 MEV9=Q$7FILOWBK]UD3;")'VB/^KO(.M?K%R%&E\B[^E:6I>R65G/D;Z"DI0) M;%,UV(!96+WY#[@-2\7?4!-ZX<QYM!#R=PC\,^;D"_B#`8$H#>L"314_!OTB M@35CU2@;E?F5N3]3&RYOS]LGAOIZB<_G\K;Q:`-=[8&0RTN(,64\-<IW%ZN? ME<OTG9"^Y#B+,1;CH5K/Y"7GGI266RJ<U/2DK.]2X,LM-0:UI))24,>I82VW MU!F1?BWWJRFM2<=:;JTS)DW(NU-ARRXO5>GK@>W*U/(G<`/F8`N>P$56$"R% M^^3IOI$WYZ87*QY:8O9&`26T1GWY\5CL/>5<5IKPJ_)9(CA6<G*>P,;*I]=> M0AFV9KY<>N["&-SZ&2Q95LDE_(G8!).,*ZJ25Z2,\H'L]@C$7$1UM\<#&_.; ML`T`SV`5)C&V4G$2KD.-QDC-077ZY0I`;>X/U1>P!O2IP67X#G^?0A4`B>!E MB?/R(Y&C'"/R"\8J^5P^%@B$PN%?P1JW7'VQ482UE6\7OUE_",M0@4M(RFO% M>7B,%DUZTN33R?$X8R+4%I[._&MZ8>')O1>P79RDV?@3F/JM"CS"9MG!N)HB MAZJY]XA'S3+YGT5NBPNH)VSF!>.VL0XE&B>5HD\]/U:>^(2$?9MS>]C,B(2% M"/%V=@E!-C1H]->Q0NBS.,G8!:75E^ARU70PBWVY:OP5UNY^M;*)U*I:;FCW M)C0UI:0)5,S&MMZWYRJH78)K&/TS_/F457<'O5R#=<SX*]A$K)8PZB<P!=^Q M*.K8'08]M%I"O5ED_PYL+,#R#3J,&&H7,:\*"]A>>1GA8"3%(&<OPV;U`5,` M#`,!H+/1V)RKW/NL=A<-KZ-1_+WU`C[F,CQS1&3*V#0>&A6HW?X&UK`'_;F\ MI&//E&FR9AFKC80QY2K,O^G(RQIG^%RM3L]#K5Y+Y$2KKC:S6^+XF$_3>#MF M]G+3JBZK=,`)^R@F,IHJMU!EZ_%<0LK(2=S>SX*N3<0E-1EG*J9@O>1(<I;` M?>.RL6/\T;B"Q;M??,!*_K">$F=@#?Y$$RY.9J5,1DNXZ2BYN?8Y31Y+>@4M MT7XMW9J!*3Q_/F8D,_F*^]>A9#FGO5NC>%ZOW#&PM)\87Q?GC2WJFG&0XEIJ ML,Y2J\(E+$%K##'HR>&3?:=^TC\XT'\R/MP[=*IW.#[0/]@_BGV``5PT_H+T M^#MLF-:6']W9Q#+R"+>F=Y:>5TOS*^7/V=H65+#4)5;J<GU\5\W^VZKC8JP9 M7QB_,[:0<O>)&`@0?NKRIJ?8+CV?^R?<OUFZL8T)TX0F*3I0*SZ8N63#EQ,< M:HM35&CFSN^O4/KND:G5(&4;X;=9Z&4+J:W%9^5O>759!-MW9I:OTDS62_<> M\J&$C?T88WUF#L;DKOM33D^TX\F2'&<S!,<OO0(U+SKN4LV;1P8UE=^2@NR6 M),:"8>>-:I>&\UX5#L?"(?N]*D*O59UL0!Y34DDY1=X^\7YOW"H['2;'%#61 M*>`UZ&@ZHYV1,OZQHRYO??''LJZKFG_L#2KZ_HF!T[TDRT#NMEX3[)4AWLV\ M1IG7@"`&F%^[E'6O:%*VK@[=],:$<:HTT#W(B0*XJV"/[\5>I!4*8>V5%+8" M906_#;2YV-BTP./CT\W_>?B!PX/B2SP9,1A&_+QB,"J('$<E&Z=F<N=S_)1P MY^1,RJ%/%S"5#UT^NJ;+^8*NDE-27HK_3,=;Q4A>+R3R;AMN`F%7RGA*E^6& M8<%V_CD]>CS=G+CIQ)BDD[;Z3K?5^_45\OK>5DPC2LIM$W^=#)T>&/!\V!B0 M.BHFZM*'M7[AP$YT2<G)>#>+R\,%-:]DY5Y=UW2!'.W15%7+T^(U//]2/=KD MX;_`N?X13:(Y9'I[&Z]^J).1N2-HL=E^8#";I$W)4MZR'27K0"2C24G\B%+N MD='A8`_^<:>4C.RQ04]5.!SDM=<(ZS:ZT#OT+GY[VK\,A_5VP0S2[A0]D"/[ M@9_4"`6?&B<_RB'L`MEEG7#K#+%PIR`&$;)(1`C6&X9/8M8I`CDKD+%=_<*7 M6==P`N>EO)(@!36GI%4\L?$H3A-N)I[0,$1,/4#IOE=%>'\H*(C$J!>H9TQ. MC,='ST_(;O0W&G^K_^=#IP>M%&R[8XY=ULB,67U(<I-8/&R':\HN2QQA;M3& M!$#)"@2-!ON'1MUG/8W/8QX/+4B`UMMB<R-5K[=!%P<$;^PU`_?G30L8;7W$ M_QX\6:OY'%S\_GSM*>59\H?F_W_L],(NW]_;!MRVKB`+9;K$YP^QM94Y?WZJ M*AE^=$3$(!T>D7#$&AY<\.#0,G&\"4\XTN0W6=[HC0I@,ES2'"8??;0+3+(O MF@?TTQ@B=G<''2/\=LYL.A!D>`6[&%Z1B'W8[MF3KQ!+_JV@GNH!./N#0'W( M,%Y%)<SO0WL4I(,5I#,0>,4$=GS!:I'O.5N^YSW_AW*\V@!_F);Y-V"9C$/! #%0`` ` end