スクロール時のゴミ表示についてNo.07939
jechabon さん 13/05/21 15:15
 
jechabonです。

画面をマウスホイールまたはスクロールバーで行末から先頭方向に
スクロールすると、ルーラーの一部がテキストの上に残ったまま
スクロールされてしまうゴミが表示される事があります。

普段は時々しか発生しないのですが、描画更新を頻繁に行うソフト
を起動すると、多発するようになります。
(ターミナルソフトや動画再生など)

画面の中にカーソル行が表示されている場合は発生しませんが、
カーソル行が画面外にある時に発生します。

トラブル対策の設定を色々試して見たところ、唯一効果があったのが
「アクセラレータなしマシン用のスクロール方式」をONにした場合
でした。
しかし、この対策をONにすると、スクロール時にCPU負荷が一気に
跳ね上がるようになります。

何か他に対策方法はないでしょうか?

環境
 OS:Windows7(64bit)
 秀丸:32bit版 Ver8.22 および 8.30β41
 GPU :Intel HD Graphics 4000 (Ver 9.17.10.2843)

[ ]
RE:07939 スクロール時のゴミ表示についてNo.07941
秀丸担当 さん 13/05/21 16:50
 

バグ情報ありがとうございます。
縦スクロールのことだと思うのですが、行末からということは横スクロールでし
ょうか。
ルーラーの残骸があるとしたら縦スクロールのときで、ルーラーと一緒にスク
ロールしてしまっていて、その後差分が描画されまいまま次のスクロールになっ
ているような状況のような気がします。

「アクセラレータなしマシン用のスクロール方式」をOFFのときのスクロールを
調べてみたところでは、スクロールだけして差分を再描画しない時点で止めてみ
てもルーラーが一緒にスクロールするケースが見つけられず、そういうスクロー
ルのされ方が発生するのかどうかわかりませんでした。

いろいろ設定の組み合わせが関係しているかもしれず、もし差支えなければ設定
内容をファイルに保存したものとサンプルとなるファイルを送っていただけると
助かります。
もし送っていただける場合は"PEH00775@nifty.com"まで秀丸担当宛であることを
書いて送ってほしいです。

あと、Windows Vista ではスクロール時はメモリ上のビットマップをCPUでコ
ピーしているだけだったのがWindows7ではGPUのアクセラレータが効くようにな
っているらしいので、GPUのドライバを更新してみると変化がある可能性もある
と思います。

[ ]
RE:07941 スクロール時のゴミ表示についてNo.07942
jechabon さん 13/05/21 17:16
 
jechabonです。

テキストが上から下に移動する縦スクロールです。
設定ファイルとサンプル画像を送付しました。

[ ]
RE:07942 スクロール時のゴミ表示についてNo.07944
jechabon さん 13/05/21 21:31
 
> あと、Windows Vista ではスクロール時はメモリ上のビットマップをCPUでコ
> ピーしているだけだったのがWindows7ではGPUのアクセラレータが効くようにな
> っているらしいので、GPUのドライバを更新してみると変化がある可能性もある
> と思います。

コンピュータ製造元(Lenovo)から提供されている動作保証済みドライバーと
しては最新バージョンとなっています。
自己責任でIntelから提供されている最新ドライバー(Ver. 9.18.10.3071)を
適用してみましたが、症状は全く変わりませんでした。

[ ]
RE:07944 スクロール時のゴミ表示についてNo.07945
秀丸担当 さん 13/05/22 11:04
 

設定とサンプル画像受け取りました。
ありがとうございます。

全く同じになるであろうhmpv.txtのサンプルで試してみて、スクロールした瞬間
でデバッガで止めてみてもルーラー部分をコピーしてしまうようにはならず、こ
ちらの環境では再現できませんでした。

特徴として、ごみが出ている部分の高さが文字の高さの整数倍になっているとい
うことがあるようです。
画像の1つでは本体のスクロールとは関係ない画像が含まれているものがありま
した。

トラブル対策をONにすると極端に遅くなるというのが気になります。
いただいた設定では強調表示など複雑ではないので、トラブル対策がONのほうが
むしろ高速になりそうですが、そうではないということで、設定でDirectWrite
を使用されていることが関係しているかもしれません。

[そのた]→[動作環境]→[表示/操作]→[文字の描画]→[3Dグラフィックスアクセ
ラレータによる文字の描画]がONになっていることが原因の可能性があると思い
ます。

アンチエイリアスを使われていないようなので、この場合「性能チェック
(K)...」をすると、200%くらいの高速になることが一般的だと思います。
たぶんそちらの環境では、これが低速になっている気がします。(トラブル対策
ONで遅いということなので)
そうだとすると、何らかの理由でDirectWriteが無効になっているか、
DirectWrite関係のモジュールに問題があるのかもしれません。

「3Dグラフィックスアクセラレータによる文字の描画」をOFFにしてみて試して
みるとどうでしょうか。

[ ]
RE:07945 スクロール時のゴミ表示についてNo.07946
jechabon さん 13/05/22 11:56
 
> 「3Dグラフィックスアクセラレータによる文字の描画」をOFFにしてみて試して
> みるとどうでしょうか。

試してみましがた、症状は変わりませんでした。

こちらの環境ではIEやGoogleChromeでYouTubeの動画を5〜6個並べて
再生してみると頻発するようになります。
この時、カーソル行は最下行にして、カーソルが表示されない位置でスクロールしま
す。
ただ、発生頻度が不安定で全く出ない時もあります。

TeraTermを2つ立ち上げて、画面内を常時スクロール表示している時もよく発生しま
す。

一番顕著に頻発したのは、iTunesにiKaraというビジュアライザのプラグインを
インストールして音楽再生した場合でした。
恐らく音量インジケータ(グラフ)が頻繁に描画される影響かと思います。
この状態でiTunesのウィンドウを最小化すると、症状は発生しなくなります。

色々なファイルを試して気づいたのですが、改行幅(1行の文字数)が一定の
ファイルだと、スクロールしてもほとんど発生しないような気がします。

[ ]
RE:07946 スクロール時のゴミ表示についてNo.07947
秀丸担当 さん 13/05/22 13:06
 

DirectWriteは関係なかったようで失礼しました。
Youtubeをいくつか再生してみたり、iTunesとiKaraを入れて再生しながらスク
ロールさせてみたりしても再現できず、そちらの環境と何が違うのかわからなく
なりました。

テスト環境を増やしてもう少し調べてみます。
なお、電気工事の関係で午後からこちらからアクセスできずお返事は明日以降に
なるかもしれないです。

[ ]
RE:07947 スクロール時のゴミ表示についてNo.07948
秀丸担当 さん 13/05/23 08:59
 

その後 Intel HD Graphics 4000 のPCでテストができて、再現もできました。
結果を先に書くと、GPUのバグということで間違いなさそうです。

調べてみたところ、ScrollWindowExを介してGPUのアクセラレータが使われて、
さらに入力イベントに対してかなり高速に処理できている場合に限って再現でき
ました。
その際、他のソフトでも同時に高速に描画処理が行われていると高い確率で再現
します。
他のソフトが何もしていないと起きないです。

Intel HD Graphics 4000でのみ起きて、Intel HD Graphics 無印や、Radeon HD
5450のPCなどでは再現せず、GPU固有の問題ということになると思います。

Visual C++で新規プロジェクトの既定のソースに以下の行を追加するだけでも再
現しました。

case WM_MOUSEMOVE:{
  RECT rc;
  GetClientRect(hWnd,&rc);
  ScrollWindowEx( hWnd, 0, 20, &rc, &rc, NULL, NULL, SW_ERASE |
SW_INVALIDATE );
  return 0;
  }

この場合マウスの動きに対して高速に応答するので再現しやすかったです。
応答が遅い場合は再現しないです。

秀丸エディタの対応としては、基本的にはやはりトラブル対策をONにしていただ
くということになると思います。

ただ回避方法も見つけて、GetPixel()をしてスクロールした部分のピクセルを取
得しようとすると、GPUのキャッシュがフラッシュされるためか回避できました。
ただ取得するだけなので、影響は少ないと思うので、そういう対策も入れてもう
一度β版を出そうと思います。

[ ]
RE:07948 スクロール時のゴミ表示についてNo.07949
jechabon さん 13/05/23 10:39
 
> 結果を先に書くと、GPUのバグということで間違いなさそうです。

詳細な調査ありがとうございます。
結果は何となく予想していました。
GPUバグ対策も検討して頂けるという事で大変ありがたいです。
よろしくお願いします。

[ ]
RE:07949 スクロール時のゴミ表示についてNo.07950
秀丸担当 さん 13/05/23 11:07
 

参考情報として、他のケースも無いか調べてみたところ、メモ帳でスクロール
バーのつまみをドラッグしてスクロールすると、稀ですが再現できました。

メモ帳はホイールスクロールでは再現しにくく、スクロールバーのつまみは再現
しやすいようです。

[ ]
RE:07950 スクロール時のゴミ表示についてNo.07951
jechabon さん 13/05/23 11:38
 
こちらでも、稀ですがOutlook2010で同様の現象がありました。

このGPUの情報をググってみると、かなりバグが多いようですね。
ドライバ側での対応を待つしかないですね。

尚、このドライバはWindows7で標準対応しているため、Intelが
提供する最新の汎用ドライバを適用しても、Windows Updateで
オプション選択してしまうと、元の古いバージョンに戻ってしまう
ようです。

[ ]
RE:07951 スクロール時のゴミ表示についてNo.07953
jechabon さん 13/05/23 20:45
 
> V8.30β42を公開しました。

当方の環境でも、スクロール時の乱れが皆無となりました。
対策ありがとうございました。

[ ]