[prev in list] [next in list] [prev in thread] [next in thread] 

List:       openjdk-openjfx-dev
Subject:    Withdrawn: 8090110: Very bad TextArea of performance in a language environment that uses the Chinese
From:       duke <duke () openjdk ! org>
Date:       2023-04-29 2:59:30
Message-ID: Yczvs3EWVWcAA1qL_ooSNF55Yis2AS_oA4fVa18XV7M=.7d8ce24a-4613-4eca-a99d-79d8ef8b3181 () github ! com
[Download RAW message or body]

On Wed, 23 Sep 2020 15:41:43 GMT, yosbits <duke@openjdk.org> wrote:

> * https://bugs.openjdk.java.net/browse/JDK-8090110
> * https://bugs.openjdk.java.net/browse/JDK-8089418
> 
> TextArea slows down as the number of characters increases. This problem can be \
> greatly improved by setting the clip of the display area. It also improves \
> performance when increasing the font size. 
> The TextArea performance improvement from this change can be seen even when dealing \
> with Latin characters only. 
> In the change, the Clip area is bound only vertically. When binding horizontally, a \
> stack overflow occurs when resizing the window.This looks like a potential problem \
> with the Text control. 
> A fix for this problem can be found in the next test.
> 
> ``` Java
> import java.util.Random;
> 
> import javafx.application.Application;
> import javafx.geometry.Insets;
> import javafx.geometry.Pos;
> import javafx.scene.Scene;
> import javafx.scene.control.Button;
> import javafx.scene.control.CheckBox;
> import javafx.scene.control.TextArea;
> import javafx.scene.layout.BorderPane;
> import javafx.scene.layout.HBox;
> import javafx.scene.text.Font;
> import javafx.stage.Stage;
> 
> public class BigTextAreaTest extends Application {
> 
> //	private static final int TEST_TEXT_LENGTH = 1*1024*1024; // 1MB
> 	private static final int TEST_TEXT_LENGTH = 100*1024; // 100KB
> 
> 	private static final String alpha = \
> "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz";   private static final \
> String number = "0123456789";  private static final String hiragana = \
> "あいうえおかきくけこさしすせそたちつてとなにぬねのはひふへほまみむめもやゆよらりるれろわをん"; \
>   private static final String katakana = \
> "アイウエオカキクケコサシスセソタチツテトナニヌネノハヒフヘホマミ \
> メモヤユヨラリルレロワヲン";    private static final String jis_lv1 = \
> "亜唖娃阿哀愛挨姶逢葵茜穐悪握渥旭葦芦鯵梓圧斡扱宛姐虻飴 \
> 綾鮎或粟袷安庵按暗案闇鞍杏以伊位依偉囲夷委威尉惟意慰易 \
> 為畏異移維緯胃萎衣謂違遺医井亥域育郁磯一壱溢逸稲茨芋鰯允印咽員 \
> 姻引飲淫胤蔭院陰 \
> 韻吋右宇烏羽迂雨卯鵜窺丑碓臼渦嘘唄欝蔚鰻姥厩浦瓜閏噂云運雲荏餌叡営嬰影 \
> 曳 永泳洩瑛盈穎 英衛 鋭液疫益駅悦謁越閲榎厭円園 \
> 奄宴延怨掩援沿演炎焔煙燕猿縁艶苑薗 \
> 鉛鴛塩於汚甥凹央奥往応押旺横欧殴王翁襖鴬鴎黄岡沖荻億屋憶臆桶牡乙俺卸恩温穏音下化仮何伽価佳 \
> 可嘉夏嫁家寡科暇果架歌河火珂禍禾稼箇花苛茄荷華菓蝦課嘩貨 \
> 迦過霞蚊俄峨我牙画臥芽蛾賀雅餓駕介会解回塊壊廻快怪悔恢懐 \
> 戒拐改魁晦械海灰界皆絵芥蟹開階貝凱劾外咳害崖慨概涯碍蓋街該鎧骸浬馨蛙垣柿蛎鈎劃
> 
 各廓拡撹  殻獲確穫覚角赫較郭閣隔革学岳楽額顎掛 \
樫橿梶鰍潟割喝恰括活渇滑葛褐轄且鰹叶椛樺鞄 \
兜竃蒲釜鎌噛鴨 茅萱粥刈苅瓦乾侃 寒刊勘勧巻喚 \
姦完官寛干幹患感慣憾換敢柑桓棺款歓汗漢澗潅環甘監看竿管簡 \
缶翰肝艦莞観諌貫還鑑間閑関陥韓館舘丸含岸巌玩癌眼岩翫贋雁 \
顔願企伎危喜器基奇嬉寄岐希幾忌揮机旗既期棋棄機帰毅気汽畿祈季稀紀徽規記貴起軌輝飢騎鬼亀偽儀妓宜戯技擬欺 \
疑祇義蟻誼議掬菊 吉吃喫桔橘詰 \
杵黍却客脚虐逆丘久仇休及吸宮弓急救朽求汲泣灸球究窮笈級糾給旧牛去居巨拒 \
挙 虚許距鋸漁禦魚亨享京供 \
僑兇競共凶協匡卿叫喬境峡強彊怯恐恭挟教橋況狂狭矯胸脅興蕎 \
鏡響饗驚仰凝尭暁業局曲極玉桐粁僅勤均巾錦斤欣欽琴禁禽筋緊 \
菌衿襟謹近金吟銀九倶句区狗玖矩苦躯駆駈駒具愚虞喰空偶寓  \
遇隅串櫛釧屑屈掘窟沓靴轡窪熊隈粂 \
繰桑鍬勲君薫訓群軍郡卦袈祁係傾刑兄啓圭珪型契形径恵慶慧憩掲携敬景桂渓畦稽系経継繋罫茎荊蛍計詣警軽 \
鶏芸迎鯨劇戟撃激隙桁傑 \
決潔穴結血訣月件倹倦健兼券剣喧圏 嫌建憲懸拳捲検権牽犬献 \
硯絹県肩見謙賢軒遣鍵険顕験鹸元原厳幻弦減源玄現絃舷言諺限 \
個古呼固姑孤己庫弧戸故枯湖狐糊袴股胡菰虎誇跨鈷雇顧鼓五互 \
伍午呉吾娯後御悟梧檎瑚碁語誤護醐乞鯉交佼侯候倖光公功効勾 \
口向后喉坑垢好孔孝宏工巧巷幸広庚康弘恒慌抗拘控攻昂晃更杭 \
梗構江洪浩港溝甲皇硬稿 \
紅紘絞綱耕考肯肱腔膏航荒行衡講貢購郊酵鉱 鋼閤降 \
香高鴻剛劫号合壕拷 豪轟麹克刻告国穀酷 \
黒獄漉腰甑忽惚骨狛込此 今困坤墾婚恨懇昏昆 \
梱混痕紺艮魂些佐叉唆嵯左差査沙瑳 \
詐鎖裟坐座挫債催再最哉塞妻宰  才採 歳済災采犀  \
祭斎細菜裁載際剤在材罪財冴坂阪 \
榊肴咲崎埼碕鷺作削咋搾昨朔柵窄策索錯桜鮭笹匙冊刷察拶撮擦 \
殺薩雑皐鯖捌錆鮫皿晒三傘参山惨撒散桟燦珊産算纂蚕讃賛酸餐 \
斬暫残仕仔伺使刺司史嗣四士始姉姿子屍市師志思指支孜斯施旨 \
止死氏獅祉私糸紙紫肢脂至視詞詩試誌諮資賜雌飼歯事似侍児字 \
慈持時次滋治爾璽痔磁示而耳自蒔辞汐鹿式識鴫竺軸宍雫七叱執失嫉室悉湿漆疾質実蔀 \
偲柴芝屡蕊縞舎写射捨赦斜煮社紗者謝車遮蛇邪借勺尺杓灼爵酌釈錫若寂弱惹主取守手朱殊狩 \
種腫趣酒首儒受呪寿授樹綬需囚収周宗就州修愁拾洲秀秋終繍習 \
舟蒐衆襲讐蹴輯週酋酬集醜什住充十従戎柔汁渋獣縦重銃叔夙宿 \
祝縮粛塾熟出術述俊峻春瞬竣舜駿准循旬楯殉淳準潤盾純巡遵醇 \
処初所暑曙渚庶緒署書薯藷諸助叙女序徐恕鋤除傷  勝 \
升召哨商唱嘗奨妾娼宵将小少尚庄床 \
彰承抄招掌捷昇昌昭晶松梢樟樵沼消渉湘焼焦照症省硝礁祥称 \
笑粧紹肖菖蒋蕉衝裳訟証詔詳象賞醤鉦鍾鐘障鞘上丈丞乗冗剰城 \
壌嬢常情擾条杖浄状畳穣蒸譲醸 \
嘱埴飾拭植殖燭織職色触食蝕辱尻伸信侵唇 \
寝審心慎振新晋森榛浸深申疹真神秦紳臣芯薪親診身辛進針震人仁刃塵壬尋甚尽腎訊迅陣靭笥諏 \
酢図厨逗吹垂帥推水炊睡粋 \
衰遂酔錐錘随瑞髄崇嵩数枢趨雛据杉椙菅 \
雀裾澄摺寸世瀬畝是凄制勢姓征性成政整星晴棲 \
正清牲生盛精聖声製西 \
誓請逝醒青静斉税脆隻席惜戚斥昔析石積籍績脊責赤跡蹟碩切拙接摂折設窃節説雪絶舌蝉仙先千 \
宣専尖川戦扇撰  \
泉浅洗染潜煎煽旋穿箭線繊羨腺舛船薦詮賎践選遷銭銑閃鮮前善漸然全禅繕膳糎噌塑岨措曾曽楚狙疏疎礎祖租粗 \
組蘇訴阻遡 僧創双叢倉  \
喪壮奏爽宋層匝惣想捜掃挿掻操早曹巣槍槽漕燥争痩相窓糟総綜聡草荘葬蒼藻装走送遭鎗霜騒像増憎臓蔵贈 \
促側則即息捉束測足速俗属賊族続卒袖其揃存孫尊損村遜他多太汰詑唾 \
妥惰打柁舵楕陀駄騨体 対耐岱帯待 \
態戴替泰滞胎腿苔袋貸退逮隊黛鯛代台大第醍題鷹滝瀧卓啄宅托 \
拓沢濯琢託鐸濁諾茸凧蛸只叩但達辰奪脱巽竪辿棚谷狸鱈樽誰丹 \
嘆坦担探旦歎淡湛炭短端箪綻耽胆蛋誕鍛団壇弾断暖檀段男談値知地弛恥智 \
痴稚置致蜘遅馳築畜竹筑蓄逐秩窒茶嫡着中仲宙 \
抽昼柱注虫衷註酎鋳駐樗瀦猪苧著貯丁兆凋喋寵帖帳庁弔張彫徴懲挑暢朝潮牒町眺聴脹腸蝶調諜超跳銚長 \
鳥勅捗直朕沈珍賃鎮陳津墜椎槌追鎚痛通塚 \
掴槻佃漬柘辻蔦綴鍔椿潰坪壷嬬紬爪吊釣鶴亭低停偵剃貞呈 \
定帝底庭廷弟悌抵挺提梯汀碇禎程 艇訂諦蹄逓邸鄭釘鼎泥摘  \
敵滴的笛適鏑溺哲徹撤轍迭鉄典填天展店添纏甜貼転顛点伝殿澱田電兎吐 \
塗妬 徒斗杜渡登菟賭途都鍍  \
努度土奴怒倒党冬凍刀唐塔塘套宕島嶋悼投搭東桃梼棟盗淘湯涛灯燈当痘祷等答筒糖統到董蕩藤討謄豆踏逃透鐙陶 \
騰闘働動同 導憧撞洞瞳童胴萄道銅 \
鴇匿得徳涜特督禿篤毒独読 \
橡凸突椴届鳶苫寅酉瀞噸屯惇敦沌豚遁 \
呑曇鈍奈那内乍凪薙謎灘捺鍋楢馴縄畷南 \
軟難汝二尼弐迩匂賑肉虹廿日乳入如尿韮任妊忍認濡禰祢寧葱猫 \
年念捻撚燃粘乃廼之埜嚢悩濃納能脳膿農覗蚤巴把播覇杷波派琶 \
婆罵芭馬俳廃拝排敗杯盃牌背肺輩配倍培媒梅楳煤狽買売 \
陪這蝿秤矧萩伯剥博拍柏泊白箔粕舶薄迫曝 \
爆縛莫駁麦函箱硲箸肇筈櫨幡肌畑 \
八鉢溌発醗髪伐罰抜筏閥鳩噺塙蛤隼伴判半反叛帆搬斑板氾汎版犯班畔繁般藩販範釆煩 \
飯挽晩番盤磐  \
蛮匪卑否妃庇彼悲扉批披斐比泌疲皮碑秘緋罷肥被誹費避非飛樋 \
備尾微枇毘琵眉美鼻柊稗匹疋髭彦膝菱肘弼必畢筆逼桧姫媛紐百 \
謬俵彪標氷漂瓢票表評豹廟描病秒苗錨鋲蒜蛭鰭品彬斌浜瀕貧賓 \
敏瓶不付 夫婦富冨布府怖扶敷斧普浮父符腐膚芙譜 \
賦赴阜附侮撫武舞葡蕪部封楓風葺蕗伏副復幅服福腹複覆淵弗払 \
仏物鮒分吻噴墳憤扮焚奮粉糞紛雰文聞丙併兵塀幣平弊柄並蔽閉陛米 \
僻壁癖碧別瞥蔑箆偏変片篇編辺返遍便勉娩弁鞭保舗鋪圃捕歩甫補輔穂募墓慕戊暮母簿菩倣俸包呆 \
奉宝峰峯崩庖抱捧放方朋法泡烹 \
縫胞芳萌蓬蜂褒訪豊邦鋒飽鳳鵬乏亡傍剖坊妨帽忘忙房暴望某棒冒紡肪膨謀貌貿鉾防 \
 北僕卜墨撲朴牧睦穆釦勃没殆 \
幌奔本翻凡盆摩磨魔麻埋妹昧枚毎哩槙幕膜枕鮪柾鱒桝亦俣又抹末沫迄侭繭麿万慢満漫蔓味未魅巳箕岬密蜜湊蓑稔
  脈妙粍民 務夢無牟矛霧鵡椋婿娘冥名命明盟迷銘鳴姪牝滅免棉 \
綿緬面麺摸模茂妄孟毛猛盲網耗蒙儲木黙目杢勿餅尤戻籾貰問悶 \
門匁也冶夜爺耶野弥矢厄役約薬訳躍靖柳薮鑓愉愈油癒諭輸唯佑優勇友宥幽 \
憂揖有柚湧涌猶猷由祐裕誘遊邑郵雄融夕予余与誉輿 \
傭幼妖容庸揚揺擁曜楊様洋溶熔用窯羊耀葉蓉要謡踊遥陽養慾抑欲沃浴翌翼淀羅螺裸来莱 \
雷洛絡落酪乱卵嵐欄濫藍蘭覧利吏履李梨理璃痢裏裡里離陸律率立葎 \
略劉流溜琉留硫粒隆竜龍侶慮旅虜了亮僚両凌寮料梁涼猟療瞭稜糧良諒遼量陵 \
力緑倫厘林淋燐琳臨輪隣鱗麟 \
塁涙累類令伶例冷励嶺怜玲礼苓鈴隷零霊麗齢暦歴列劣烈裂廉恋 \
漣煉簾練聯蓮連錬呂魯櫓炉賂路露労婁廊弄朗楼榔浪漏牢狼篭老聾蝋郎六麓禄肋録論倭和話歪賄脇惑 \
鷲亙亘鰐詫藁蕨椀湾碗腕";
> 
> 	@Override
> 	public void start(Stage stage) throws Exception {
> 				
> 		BorderPane pane = new BorderPane();
> 		CheckBox padding = new CheckBox("Padding");
> 		CheckBox wrap = new CheckBox("Wrap");
> 		CheckBox hugeFont = new CheckBox("Huge font");
> 		Button recreate = new Button("recreate");
> 		
> 		HBox header = new HBox(8, wrap, hugeFont, padding, recreate);
> 		header.setAlignment(Pos.CENTER);
> 		pane.setTop(header);
> 		Scene scene = new Scene(pane, 700, 300);
> 		stage.setScene(scene);
> 		stage.show();
> 		
> 		padding.selectedProperty().addListener((on,oldValue,newValue)->{
> 			((TextArea)pane.getCenter()).setPadding(new \
> Insets(newValue.booleanValue()?20:0));  });
> 		wrap.selectedProperty().addListener((on,oldValue,newValue)->{
> 			((TextArea)pane.getCenter()).setWrapText(newValue.booleanValue());
> 		});
> 		hugeFont.selectedProperty().addListener((on,oldValue,newValue)->{
> 			((TextArea)pane.getCenter()).setFont(Font.font(Font.getDefault().getFamily(), \
> newValue.booleanValue()?120:12));  });
> 		recreate.setOnAction(e->pane.setCenter(createTextArea()));
> 
> 		pane.setCenter(createTextArea());
> 	}
> 
> 	public static void main(String[] args) {
> 		Application.launch(args);
> 	}
> 	
> 	TextArea createTextArea(){
> 		TextArea textArea = new TextArea();
> 		StringBuilder buf = new StringBuilder();
> //		String testchar = alpha;
> //		String testchar = hiragana;
> //		String testchar = katakana;
> //		String testchar = jis_lv1;
> 		String testchar = alpha + number + hiragana + katakana + jis_lv1; 
> 		
> 		Random r = new Random();
> 		for(int i=0; i<TEST_TEXT_LENGTH; i++){
> 			buf.append(testchar.charAt(Math.abs(r.nextInt())%testchar.length()));
> 			if(i>0 && i%100 == 0){
> 				buf.append("\n");
> 			}
> 		}
> 
> 		textArea.setFont(Font.getDefault().font(15.0)); 
> 		textArea.setText(buf.toString());
> 		return textArea;
> 	}
> }
> 
> 
> **Next Step:**
> 
> This is a proposal for the next step, but I think it may be included in this Pull \
> Request. 
> MULTIPLE_NODES mode is not as responsive as this Pull Request change for the \
> following reasons: 
> * In MULTIPLE_NODES mode, the number of nodes becomes huge and the response \
>                 deteriorates without virtualization.
> * Implementation of MULTIPLE_NODES mode is in progress (probably giving up)
> 
> It is suggested that the existing implementation of MULTIPLE_NODES mode be \
> discarded as it is not worth leaving at all.

This pull request has been closed without being integrated.

-------------

PR: https://git.openjdk.org/jfx/pull/307


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic