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

[WIP] CGraphics 関連の最適化 #998

Closed
wants to merge 3 commits into from
Closed

[WIP] CGraphics 関連の最適化 #998

wants to merge 3 commits into from

Conversation

beru
Copy link
Contributor

@beru beru commented Aug 16, 2019

PR の目的

描画処理を高速化してCPU負荷を減らすのが目的です。

カテゴリ

  • 速度向上
  • リファクタリング

PR の背景

従来実装では CGraphics クラスの構築時にクリッピング領域の取得操作が毎回行われており、その処理にいくらか時間を浪費していました。

各種GDIオブジェクトの保存と復帰処理の実装がいくらか煩雑な記述になっていました。このPRでは SaveDC と RestoreDC を使う事で保存復帰処理を単純化しました。

追記:while ループ内で呼び出す CEditView::DrawLogicLine メソッド内で CGraphics 型のインスタンスの生成と破棄を 行うのはコストが高いので、ループの外に用意して使いまわすようにしました。

PR のメリット

描画処理が少し速くなります、体感で分かるかというと微妙かもです…。

CGraphics クラスの実装がシンプルになります。

PR のデメリット (トレードオフとかあれば)

特にないはずです。

PR の影響範囲

描画処理で CGraphics を使用している箇所

関連チケット

強いて挙げるなら #699

従来実装に比べて元のクリッピング領域の取得を行わないため処理負荷が軽減される
@beru beru added the 🚅 speed up 🚀 高速化 label Aug 16, 2019
@AppVeyorBot
Copy link

Build sakura 1.0.2152 completed (commit 23cfadc897 by @)

beru added 2 commits August 17, 2019 01:22
… while ループの外側で確保するように変更

CGraphics 型の生成と破棄のコストが大きい事への対策
@beru beru changed the title CGraphics の実装で SaveDC と RestoreDC を使う事で保存復帰処理の単純化 CGraphics 関連の最適化 Aug 16, 2019
@AppVeyorBot
Copy link

Build sakura 1.0.2153 completed (commit 7216d8c43a by @beru)

@AppVeyorBot
Copy link

Build sakura 1.0.2154 completed (commit 7261f4904c by @beru)

@beru
Copy link
Contributor Author

beru commented Aug 17, 2019

こちら処理時間出力して差異が出るか確認してみましたが、どうも有意な差が確認出来ないですね。。
改行や文字列の描画にも手を入れないと処理時間短縮に繋がらないかも…。

@beru beru changed the title CGraphics 関連の最適化 [WIP] CGraphics 関連の最適化 Aug 17, 2019
@berryzplus
Copy link
Contributor

改行や文字列の描画にも手を入れないと処理時間短縮に繋がらないかも…。

その辺りに手を入れる改修を準備中です。

このPRの改修対象には、 CEditView::DrawLogicLine メソッドが含まれていると思います。

  • CEditView::DrawLogicLine
    • CEditView::DrawLayoutLine
      • CFigureManager::GetFigure

という呼出階層になっています。

文字や改行記号などの「図形(=Figure)」を描画するためのクラスがCFigureです。
CFigureManager::GetFigureは、これから描画しようとしている文字列が、どんなパターンの「図形」で表現されるかを判定するメソッドです。

GetFigureの呼出箇所と実装部分には「高速化可能」と注釈が付いています。

機能追加と問題整理と高速化、どれを優先して作業しようかはまだ考え中です。

@berryzplus
Copy link
Contributor

このPRは賞味期限切れだと思うので閉じておきます。

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