Armadilloフォーラム

文字の表示で抜けが発生する現象について

yousuke-mibu

2018年6月6日 17時01分

お世話になります。

Armadillo440でQtを使用したアプリを実行していたところ、
画面の文字表示に抜けが出る現象が発生しました。
三か月ほど問題なく動作していたのですが、
突然発生し、以降時々発生するようになりました。

この現象の原因はどのようなものが考えられるでしょうか。
お手数ですが、ご教授をお願い致します。

ファイル ファイルの説明
ポップアップ.jpg
エラー.jpg
コメント

> お世話になります。
>
> Armadillo440でQtを使用したアプリを実行していたところ、
> 画面の文字表示に抜けが出る現象が発生しました。
> 三か月ほど問題なく動作していたのですが、
> 突然発生し、以降時々発生するようになりました。
>
> この現象の原因はどのようなものが考えられるでしょうか。
> お手数ですが、ご教授をお願い致します。

フォントキャッシュが壊れているような気もするのですが、
同じグリフが消えているのかわからないので、消えていない状態の
原文を教えてもらえますか。

> > お世話になります。
> >
> > Armadillo440でQtを使用したアプリを実行していたところ、
> > 画面の文字表示に抜けが出る現象が発生しました。
> > 三か月ほど問題なく動作していたのですが、
> > 突然発生し、以降時々発生するようになりました。
> >
> > この現象の原因はどのようなものが考えられるでしょうか。
> > お手数ですが、ご教授をお願い致します。
>
> フォントキャッシュが壊れているような気もするのですが、
> 同じグリフが消えているのかわからないので、消えていない状態の
> 原文を教えてもらえますか。

カウンタークリア
カウンターの表示をクリアします
クリアしますか?

SDカードが読み取れません
サービス担当者に連絡してください。

になります。
よろしくお願い致します。

原文ありがとうございます。

> カウンタークリア
> カウンターの表示をクリアします
> クリアしますか?

ここで”カウンタークリア” と ”カウンターの表示を…"の2箇所は
同じフォントに見えますが、一方がBoldで一方がNormalでしょうか。
"タ"と"ー"(長音)が一方で消え、一方で表示されているので、
フォント自体が壊れているのか、何か別の理由か気になっています。

また、このアプリケーションで利用しているフォントは
SDカード等から読み込んでいるでしょうか。
例えば、QFontDatabase::addApplicationFont() で読み込んでいるので
あれば、引数にフォントファイルへのパスが指定されています。
当該のフォントファイルが壊れていないかmd5sum等でチェックサムを
確認することはできるでしょうか。

> SDカードが読み取れません
> サービス担当者に連絡してください。
>
> になります。
> よろしくお願い致します。
>

> 原文ありがとうございます。
>
> > カウンタークリア
> > カウンターの表示をクリアします
> > クリアしますか?
>
> ここで”カウンタークリア” と ”カウンターの表示を…"の2箇所は
> 同じフォントに見えますが、一方がBoldで一方がNormalでしょうか。
> "タ"と"ー"(長音)が一方で消え、一方で表示されているので、
> フォント自体が壊れているのか、何か別の理由か気になっています。
>
> また、このアプリケーションで利用しているフォントは
> SDカード等から読み込んでいるでしょうか。
> 例えば、QFontDatabase::addApplicationFont() で読み込んでいるので
> あれば、引数にフォントファイルへのパスが指定されています。
> 当該のフォントファイルが壊れていないかmd5sum等でチェックサムを
> 確認することはできるでしょうか。
>
>
> > SDカードが読み取れません
> > サービス担当者に連絡してください。
> >
> > になります。
> > よろしくお願い致します。
> >

> 同じフォントに見えますが、一方がBoldで一方がNormalでしょうか。
いいえ。
同一フォントでサイズが異なっています。

> SDカード等から読み込んでいるでしょうか。
いいえ。
QFontDatabase::addApplicationFont()は使用していません。
デフォルトで入っているTakaoPGothicを使用しています。

横から失礼します。
投稿者と共同で調査を行っております高田と申します。
補足説明させていただきます。

> > "タ"と"ー"(長音)が一方で消え、一方で表示されているので、
> > フォント自体が壊れているのか、何か別の理由か気になっています。

> > 当該のフォントファイルが壊れていないかmd5sum等でチェックサムを
> > 確認することはできるでしょうか。

現象が発生している装置は客先にあり、手元で調査ができない状況です。
したがって、チェックサムの確認ができません。
フォントファイル破損の可能性ですが、NAND上のイメージに含まれるフォントファイルは破損していないと思います。
現象の再現率は100%ではなく、「発生するときがある」のため、
フォントファイルが破損していた場合は必ず表示されないと思います。
また、例えば「タ」という文字は同一フォントを表示しているので、
一方のみ表示されないという状況からもフォントファイル破損は無いと思われます。

ソフトウェアのおおざっぱな構造は以下という認識ですが、
①ユーザーアプリ
②Qt
③OS
今回の現象は②もしくは③の表示イメージを格納するバッファが破損していると考えています。

上記仮定が正しいとすると、ユーザーアプリから②、③のバッファを破壊する可能性はあるのでしょうか。
メモリリーク等でヒープを食っていき、バッファを破壊するなど。

また、ハードウェア要因でこのような現象が発生する可能性は考えられますでしょうか。

質問ばかりで恐縮ですが、よろしくお願いいたします。

> ①ユーザーアプリ
> ②Qt
> ③OS
> 今回の現象は②もしくは③の表示イメージを格納するバッファが破損していると考えています。

フォントファイル全体が読めなかったり、フォントのグリフ(特定の字)が統一的に破壊するので
あれば、フォントファイルの破壊を疑うのですが、伺った限りどちらも違うようです。

一方で、Armadillo-400で動作しているQtは(Howtoと同じ方法であれば)Qtに含まれるQt独自の
Window SyestemであるQWSが描画を担っています。フォントの読み込みと描画の処理は
QWS側の実装なので、この実装を疑ってみる必要があると思います。

バグの可能性について、Qt4.8.3(A440向けHowtoで公開)から4系の最終版の4.8.7までの
bugfix情報を見てみたのですが、フォント関連でこの状況に一致しそうなものは見付かり
ませんでした。

いくつかの条件でフォントキャッシュのメモリリークやディスクリプタのリークになる
ことについてのbugfixはあるのですが、リークしてもメモリやディスクリプタが不足して
openやallocに失敗することになるので、この文字が消える状況とは一致しないと思います。

Qt4のアップデート差分リスト(リンク内バージョンの数字):
https://wiki.qt.io/Qt_4_versions

この状況はアプリケーションを終了し、再度実行すると再現しなくなると思うのですが、
そういう挙動であっていますか?

お世話になります。
高田です。

Qt bugfix情報のご確認ありがとうございます。
本件に繋がるような不具合はないとのこと、承知いたしました。

> この状況はアプリケーションを終了し、再度実行すると再現しなくなると思うのですが、
> そういう挙動であっていますか?

残念ながら現場からの情報が少なく、どのような状態で再現するのかがわかりません。
現在、現場に詳細を確認中ですので、入手できましたら共有させていただきます。
ハード(RAMなど?)破損の可能性も視野に調査したいと思います。

よろしくお願いいたします。

お世話になります。

> > この状況はアプリケーションを終了し、再度実行すると再現しなくなると思うのですが、
> > そういう挙動であっていますか?
現場から情報をいただきましたので報告致します。

・特にタイミングや状況は関係なく稀に発生しているそうです。
 また、電源の入切りも影響は変わらず、再現率も100%ではないようです。
・現象は、QDialogを継承したダイアログ画面でのみ起きているそうです。
・関係があるかは不明ですが、現象が起きるのと同時期に、SDカードのアクセスでエラーが
 発生する現象も発生するようになったそうです。
 (マウント、オープン、ライト、クローズのどこで起きているかは不明です。)

あまり有益な情報にならず申し訳ありません。

よろしくお願い致します。