Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ファイル読み込み高速化(行レイアウト幅算出を1回だけにする) #1992

Merged

Conversation

suconbu
Copy link
Member

@suconbu suconbu commented Feb 12, 2025

PR対象

  • アプリ(サクラエディタ本体)

カテゴリ

  • 改善

PR の背景

#1988 の第1弾対応です。

以前 #1951 を対応した際、タイプ別設定の折り返し方法に「折り返さない」が選択されている場合において、行ごとのレイアウト幅を求める処理が CLoadAgent::OnLoad と CLoadAgent::OnAfterLoad とで都合2回実行されていることに気づきました。

ファイル読み込み時のフレームグラフ:
image

2回やる意味はない (と考えている) ので CLoadAgent::OnAfterLoad 側 (↑の右側の赤枠) ではやらないようにします。

仕様・動作説明

対応内容:

  1. CLoadAgent::OnAfterLoad でテキスト最大幅を取得する時、各行のレイアウト幅の再計算をしないようにします。

  2. CLayoutMgr::_MakeOneLine のループ処理においてタブ幅を取得する際、TSV/CSVモードを考慮するよう修正します。(従来「1」で算出していたレイアウト幅と同じになるようにする)

  3. CLayoutMgr::CalculateTextWidth を呼び出しているすべての箇所を確認し、不要なレイアウト幅の再計算をする箇所があれば「1」同様に修正します。

本PRの効果として、

  • 折り返し方法に「折り返さない」が選択されている場合におけるファイルの読み込み時間が 20% ぐらい短くなります。
    ➡ プログレスバーが二度走った後の謎(?)の待ち時間の分がなくなります。
対応前 (0cef7da) 本PR対応後
fileopen_progress_master fileopen_progress_work

各区間の処理時間 (計測条件などは #1988 を参照):

区間 対応前 (85cb1bf) 本PR対応後
A. CLoadAgent::OnLoad 開始から ReadFile_To_CDocLineMgr 完了まで 1526.136 1528.936
B. そこから CLoadAgent::OnLoad 完了まで (レイアウトデータ化処理) 4269.241 4469.037
C. CLoadAgent::OnAfterLoad 開始から完了まで 2665.548 9.104
合計 8460.925 6007.077 (-29%)

また、PRの趣旨とは関係のない副産物として、

  • CSV/TSVモードにおいて、折り返し位置がおかしくなってしまう不具合が直りました。
    ➡ 「2」の変更により、CLayoutMgr::_MakeOneLine でのレイアウト幅計算でCSV/TSVモードが考慮されるようになったため。
対応前 (0cef7da) 本PR対応後
image image

PR の影響範囲

「2」の変更の影響ですが、折り返し方法が「折り返さない」以外の場合は読み込み時間が少しだけ増えてしまいます。

テスト内容

CLayoutMgr::_MakeOneLine の変更によって既存機能に弊害が出ていないことを確認します。

  • 折り返し方法が「折り返さない」の時の水平スクロールバーのつまみの位置が正しい※こと。
    ※最も長い行の右端を100%とした位置につまみが表示されることが期待動作
  • 指定桁数での折り返しが正常に動作すること。
  • 改行/句読点ぶら下げがそれぞれ正常に動作すること。
  • CSV/TSVモードがそれぞれ正常に動作すること。

関連 issue, PR

参考資料

Copy link

Quality Gate Failed Quality Gate failed

Failed conditions
58.8% Coverage on New Code (required ≥ 80%)

See analysis details on SonarQube Cloud

@AppVeyorBot
Copy link

Build sakura 1.0.4398 completed (commit f473ca3921 by @suconbu)

@suconbu
Copy link
Member Author

suconbu commented Feb 14, 2025

Approveありがとうございます。マージします。

@suconbu suconbu merged commit d9d3242 into sakura-editor:master Feb 14, 2025
24 of 25 checks passed
@suconbu suconbu added the 🚅 speed up 🚀 高速化 label Feb 14, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants