Re: Android版 ( No.1 ) |
- 名前:管理人 日時:2017/07/05 00:28
ご報告ありがとうございます
すみません、幾つかご質問させてください m(_ _;m
1.「自動で動していると」とのことですが、具体的にはどのような処理をされているのでしょうか?
2.Windows版ではその症状はでないとのことですが、Windows版のビルドは 64bit でしょうか?
( 仮にその場合、使用できるメモリが Android 端末よりも多いので、メモリリークが原因の場合は
単にメモリが不足するまでの時間が Windows版の方が長いだけ、という可能性があります… )
3.強制終了した際の Log.txt の最後の方はどのような出力になっていますでしょうか?
|
Re: Android版 ( No.2 ) |
- 名前:ギウ 日時:2017/07/05 05:50
有難うございます。
試しに、曲と効果音をOFFにして7時間くらい動かしてみましたが、止まってませんでした。
曲か効果音のメモリリークかもですね。こちらの処理も確認してみます。
>1.「自動で動していると」とのことですが、具体的にはどのような処理をされているのでしょうか?
あとで送っておきます。
>Windows版ではその症状はでないとのことですが、Windows版のビルドは 64bit でしょうか?
64bitです。
>強制終了した際の Log.txt の最後の方はどのような出力になっていますでしょうか?
お。なるほど。
Log.txtはOFFにしてましたので、ONにして試してみます。
|
Re: Android版 ( No.3 ) |
- 名前:ギウ 日時:2017/07/05 10:32
BGMとSEを有効にした状態で、1〜2時間で止まりました。
Log.txtはこんな感じです↓(一部を抜粋)
=======================
459:シェーダーコード関係の初期化.... 成功
508:グラフィックを復帰します
509:グラフィックの復帰が完了しました
41310:OpenSL ES のサウンド出力セットアップが失敗しました
41480:OpenSL ES のサウンド出力セットアップが失敗しました
41644:OpenSL ES のサウンド出力セットアップが失敗しました
41672:OpenSL ES のサウンド出力セットアップが失敗しました
42528:OpenSL ES のサウンド出力セットアップが失敗しました
42529:OpenSL ES のサウンド出力セットアップが失敗しました
64998:OpenSL ES のサウンド出力セットアップが失敗しました
:
:(以下、7200行まで行って終了)
=======================
これが続いた後に止まってます。
こちらの処理は、
読み込む際、データが有る時は、
StopSoundMem
DeleteSoundMem
を行った後、
LoadSoundMemByMemImage
を実行してます。
この辺りは大丈夫でしょうか?
|
Re: Android版 ( No.4 ) |
- 名前:管理人 日時:2017/07/06 01:10
ご返答ありがとうございます
> 試しに、曲と効果音をOFFにして7時間くらい動かしてみましたが、止まってませんでした。
> 曲か効果音のメモリリークかもですね。こちらの処理も確認してみます。
> 41310:OpenSL ES のサウンド出力セットアップが失敗しました
> 41480:OpenSL ES のサウンド出力セットアップが失敗しました
間違いなくサウンド関連が原因ですね…
ただ、『OpenSL ES のサウンド出力セットアップが失敗しました』と出力される原因が複数あるので
現時点ではまだ原因が特定できていません…
『OpenSL ES のサウンド出力セットアップが失敗しました』と出力される原因についてより詳しいログが
出力されるようにしたバージョンを作成してみましたので、大変お手数で申し訳ありませんが
よろしければこちらのバージョンで再度エラー終了してしまった際の Log.txt を作成していただけないでしょうか? m(_ _;m
https://dxlib.xsrv.jp/temp/DxLibAndroidTest_ARM.exe // Android版 ARM用
> こちらの処理は、
> 読み込む際、データが有る時は、
> StopSoundMem
> DeleteSoundMem
> を行った後、
> LoadSoundMemByMemImage
> を実行してます。
>
> この辺りは大丈夫でしょうか?
すみません、作業をする時間が確保できていなくて、確認できていません
ただ、『OpenSL ES のサウンド出力セットアップが失敗しました』と出力されるのは
同時に再生されている音の数が一定数を越えた場合なので、サウンドの削除などが原因で
ある可能性はあまり高くないとは思います
|
Re: Android版 ( No.5 ) |
- 名前:ギウ 日時:2017/07/06 04:09
了解です。試してみます。
> 同時に再生されている音の数が一定数を越えた場合なので、サウンドの削除などが原因で
> ある可能性はあまり高くないとは思います
それを踏まえると、「1フレーム中に読み込み済みの同じ音を何度も再生してることがある」んですが
(いくつかはそうならないようにしてるんですが、いくつかは面倒だったのでそのままにしてあります;)、
関係してるでしょうか。
その結果、少しずつ何かが溜まっていってるとか。
Log.txtが出来ましたらまたお知らせします。
|
Re: Android版 ( No.6 ) |
- 名前:ギウ 日時:2017/07/06 07:40
今のところ止まらないので、もしかしたら直ってるかもしれません。
(こちらのバージョンが古かったとか)
因みに、↓の関数がエラーになってて、
SetAndroidLostFocusCallbackCallbackFunction(p,0);
SetAndroidGainedFocusCallbackCallbackFunction(p,0);
↓にしたらコンパイル通りました。
SetAndroidLostFocusCallbackFunction(p,0);
SetAndroidGainedFocusCallbackFunction(p,0);
ゲームは暫く回しておきます。
|
Re: Android版 ( No.7 ) |
- 名前:ギウ 日時:2017/07/07 09:27
もう大丈夫かなと思って、Log.txtをOFFにしてたら止まりました。(30分くらいで)
Log.txtをONにした状態だと10時間以上動かしてても止まらなかったんですけど。
LogのON/OFFによる違いがあるんでしょうか。
|
Re: Android版 ( No.8 ) |
- 名前:ギウ 日時:2017/07/07 10:21
すみません、止まってない状態のLOGが出力されてましたので送りしておきました。
下記は一部です。
===========
373:シェーダーコード関係の初期化.... 成功
416:グラフィックを復帰します
418:グラフィックの復帰が完了しました
46208:OpenSL ES のプレイヤーオブジェクトの作成に失敗しました エラーコード:0x00000003
46443:OpenSL ES のプレイヤーオブジェクトの作成に失敗しました エラーコード:0x00000003
46541:OpenSL ES のプレイヤーオブジェクトの作成に失敗しました エラーコード:0x00000003
46572:OpenSL ES のプレイヤーオブジェクトの作成に失敗しました エラーコード:0x00000003
46574:OpenSL ES のサウンド出力セットアップエラー、セットアップされていて且つ使用されていない要素が見つかりませんでした( 同時再生数:15 )
46581:OpenSL ES のプレイヤーオブジェクトの作成に失敗しました エラーコード:0x00000003
46583:OpenSL ES のサウンド出力セットアップエラー、セットアップされていて且つ使用されていない要素が見つかりませんでした( 同時再生数:15 )
46640:OpenSL ES のプレイヤーオブジェクトの作成に失敗しました エラーコード:0x00000003
46706:OpenSL ES のプレイヤーオブジェクトの作成に失敗しました エラーコード:0x00000003
===========
同時に再生し過ぎとかでしょうか?
|
Re: Android版 ( No.9 ) |
- 名前:管理人 日時:2017/07/07 22:17
お試しいただきありがとうございます
Log.txt もお送りいただきありがとうございます
OpenSL ES でエラーが発生している箇所は毎回同じようですね…
> もう大丈夫かなと思って、Log.txtをOFFにしてたら止まりました。(30分くらいで)
> Log.txtをONにした状態だと10時間以上動かしてても止まらなかったんですけど。
ログ出力は時間のかかる処理なので、ログの内容を変更したことによって再生処理の
タイミングが変化してエラーの原因となる状況が発生しにくくなったのかもしれません
> 同時に再生し過ぎとかでしょうか?
確かに OpenSL ES でエラーが発生している原因は同時再生数が多いことですが、
DXライブラリとしては同時に再生する数が多くてもエラー終了しないようにしたいところです…
Android のサウンド再生に使用している OpenSL ES はギウさんの環境では同時に15個前後の
サウンド再生を行うのが限界のようで( 限界数は恐らく環境に依存します )再生処理をする際は
1.既に作成済みの OpenSL ES 再生プレイヤーがあり、且つ使用されていなければそれを使って再生する
2.無ければ新たに OpenSL ES 再生プレイヤーを作成して、それを使って再生する
という処理になっていて、再生プレイヤーの限界数に達した状態で 2 の処理を行うと
OpenSL ES のAPI呼び出しがエラーとなり再生処理を行えないのですが、
もしかしたらAPI呼び出しでエラーが発生した際に何かメモリリーク的なものが発生して
それが蓄積されているのかもしれません
なので、上記の処理を以下のように変更して、無駄に OpenSL ES のエラーを発生しないようにしてみました
1.既に作成済みの OpenSL ES 再生プレイヤーがあり、且つ使用されていなければそれを使って再生する
2.作成済みの OpenSL ES 再生プレイヤーの数がエラーが発生した数に達していたら再生プレイヤーの
作成を試みることなくエラー扱いにして、手順3は行わない
3.新たに OpenSL ES プレイヤーを作成して、それを使って再生する、エラーが発生したら
そのときのプレイヤーの数を記録しておく
OpenSL ES のAPI呼び出しエラーを頻発させることが本件の原因であれば今回の変更で
本件の現象が解消されると思いますので、何度も申し訳ありませんがよろしければ
上記の変更を加えたこちらのバージョンをお試しください m(_ _;m
https://dxlib.xsrv.jp/temp/DxLibAndroidTest_ARM.exe // Android版 ARM用
> 因みに、↓の関数がエラーになってて、
> SetAndroidLostFocusCallbackCallbackFunction(p,0);
> SetAndroidGainedFocusCallbackCallbackFunction(p,0);
>
> ↓にしたらコンパイル通りました。
> SetAndroidLostFocusCallbackFunction(p,0);
> SetAndroidGainedFocusCallbackFunction(p,0);
すみません、SetAndroidLostFocusCallbackCallbackFunction と SetAndroidGainedFocusCallbackCallbackFunction は
関数名が間違っていた( Callback という単語が2連続になってしまっていた )ので、修正しました
|