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

画面描画が遅くなる #994

Closed
koron opened this issue Dec 14, 2016 · 9 comments
Closed

画面描画が遅くなる #994

koron opened this issue Dec 14, 2016 · 9 comments

Comments

@koron
Copy link
Member

koron commented Dec 14, 2016

報告の内容

Windows 10 の gvim において、ウィンドウ(正確には Vim text area) の下端が、ある線を超えると画面描画が遅くなります。その度合は様々な条件で異なりますが、最終的なトリガーはそこでした。

また ある線 はタスクバー(の上端の位置?)に依存しているようです。1920x1200のモニターにおいて、タスクバーを常時表示したデフォルトの状態ではウィンドウの下端がY座標 1130 以上になった場合に症状が発生していたのですが、タスクバーを自動的に隠す設定に変えた際にはその閾値が 1170 に引き上がりました。

遅くなるのが顕著な条件は以下のとおりです。実際にどのくらい遅くなるのかは計測していませんが、これらの条件を満たすと、一度スクリーンがクリアされた後に行単位で描画されているのを目視で確認できるほどです。

  • DirectXによる描画をしている (:set renderoptions=type:directx)

  • vsplit 状態

  • Ctrl + F のような順方向の1画面スクロール実行時(逆方向では観測できない)

  • Vimのウィンドウの下端を、画面下部のタスクバーの上端に近い場所に配置する

    (逆にそこから離す(=上に移動させる)と症状は観測されなくなる)

加えて以下の設定がこの症状に影響を与えないこと、は確認済みです。

  • ウィンドウの影の有無
  • タスクバーの背景が半透明かどうか

また DirectX を使わない pure GDI による描画においても、 DirectX 使用時ほどではないですが描画遅延は発生しているようです。

とりあえず気になって調査したので記録のためにissue化しておきました。

Vimのバージョン

  • 8.0.95 (+kaoriya)
  • 8.0.133 (vim-win32-installer)

OSの種類/ディストリ/バージョン

  • Windows 10 Pro 64bit (バージョン 1607)

その他

将来の調査に際しては、以下の点がいとぐちになる可能性があります。

  • ウィンドウの下端の位置がトリガーになっている
  • pure GDIでも発生している
  • DirectXのほうが相当に速度低下が激しい
  • columns の値には関係なく :vsplit すると顕著になる

またこの症状は、グラフィックボード(RADEON HD7700系)を積んだデスクトップPCと、CPU (Core m5) に内蔵のGPUのノートPC、2つで確認しました。よってグラフィックボードやドライバーへの依存はないと推測されます。

@koron
Copy link
Member Author

koron commented Dec 15, 2016

これ、描画そのものよりもクリアのほうに時間かかってるかもしれない。

@koron
Copy link
Member Author

koron commented Jan 6, 2017

vsplit していなければさほど遅くない例

vsplitしていなければさほど遅くない

vsplit しちゃうとえらく遅い例

vsplit しちゃうとえらく遅い例

@mattn
Copy link
Member

mattn commented Jan 6, 2017

ずいぶん目立ちますね。分割右側は再描画掛かってないすね。

@koron
Copy link
Member Author

koron commented Jan 7, 2017

なんか不思議ですよね。
よく見てみると描画そのものよりもクリアのほうが遅いように見えてきます。

@koron
Copy link
Member Author

koron commented Nov 28, 2017

gui_w32.c の get_scroll_flags() がウィンドウが縦に大きくなった際に SW_INVALIDATE を返すようになってました。で、これは ScrollWindowEx の最後の引数になってて、全体の再描画を発生させるんじゃないかなぁと。

@koron
Copy link
Member Author

koron commented Apr 4, 2019

2019/04/04 現在、自分の主な環境では再現しなくなりました。

  • Win10 (1809)
  • GTX750Ti 及び GTX1050Ti (+最新の(GEFORCE GAME READY)ドライバー: 419.67)
  • Vim 8.1.1048 +kaoriya (gvim)
  • gfn=Cica:h9 linespace=1 rop=type:directx,renmode:5 enc=utf-8

帰宅後Intelの内蔵グラフィック (Surface Go等)でも試す予定。

現時点で考えられる可能性は3つ。

  • Vim の方になにかしらの修正が入った (gui_w32.c をチェックすればわかるはず)
  • Win 10 の更新により修正された (再現条件を整えるのは私にはほぼ不可能)
  • グラボの変更で解消された=特定のドライバでは問題が発生しない (ノートPCで動作確認が可能)

@k-takata
Copy link
Member

k-takata commented Apr 4, 2019

そもそも、8.0.1343 のカラー絵文字対応&DirectX高速化パッチ、および 8.0.1476 までの複数の高速化パッチでかなり状況が変わっているはず。スクロールも 8.0.1449 以降はDirect2Dを使っていますし。

@ghost
Copy link

ghost commented Apr 4, 2019

私は set ttyscroll=1 で様子を見ています。デフォルトは =999 のはずです。

@koron
Copy link
Member Author

koron commented Apr 11, 2019

では解消されたってことで、本 issue は閉じます。再発した人がいたら再度開くってことで。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

3 participants