2011/05/19

CADisplayLinkもNSTimerもみっくみくにしてやんよ

UDPログ取得部分を作っていて、なんだか疑問に思ったこと。

20FPS(0.05秒サイクルのNSTimer出力@Mac上のエミュレーター
-----------------------
2011/05/18 20:00:13.999
2011/05/18 20:00:14.048
2011/05/18 20:00:14.099
2011/05/18 20:00:14.148
2011/05/18 20:00:14.199
2011/05/18 20:00:14.249
2011/05/18 20:00:14.299
2011/05/18 20:00:14.349
2011/05/18 20:00:14.399
2011/05/18 20:00:14.449
2011/05/18 20:00:14.499
2011/05/18 20:00:14.549
2011/05/18 20:00:14.599
2011/05/18 20:00:14.649
2011/05/18 20:00:14.699
2011/05/18 20:00:14.749
2011/05/18 20:00:14.799
2011/05/18 20:00:14.849
2011/05/18 20:00:14.898
2011/05/18 20:00:14.949
2011/05/18 20:00:14.999
2011/05/18 20:00:15.049
------------------------
だいたい20Hz




20FPS(0.05秒サイクルのNSTimer出力@iPodTouch4G実機

------------------------
2011/05/18 20:05:04.968
2011/05/18 20:05:05.018
2011/05/18 20:05:05.068
2011/05/18 20:05:05.118
2011/05/18 20:05:05.168
2011/05/18 20:05:05.218
2011/05/18 20:05:05.268
2011/05/18 20:05:05.318
2011/05/18 20:05:05.368
2011/05/18 20:05:05.418
2011/05/18 20:05:05.468
2011/05/18 20:05:05.518
2011/05/18 20:05:05.568
2011/05/18 20:05:05.618
2011/05/18 20:05:05.668
2011/05/18 20:05:05.718
2011/05/18 20:05:05.768
2011/05/18 20:05:05.818
2011/05/18 20:05:05.868
2011/05/18 20:05:05.918
2011/05/18 20:05:05.969
2011/05/18 20:05:06.018
------------------------
だいたい20Hz


あれ?NSTimerのRunLoopからの応答が結構早い?


歌詞ウインドウでもたつくのはNSRunLoopでの詰まりだと思ってたけど、
そーでもないらしい。

実機で歌詞チェック吐いてる時のログ。CADisplayLink@60Hz(0.016秒) 
曲:Connect
----------------------------
2011-05-18 22:07:50.498
2011-05-18 22:07:50.790
2011-05-18 22:07:51.048
2011-05-18 22:07:51.382
2011-05-18 22:07:51.634
2011-05-18 22:07:51.885
2011-05-18 22:07:52.134
2011-05-18 22:07:52.479
2011-05-18 22:07:52.733
2011-05-18 22:07:52.993
2011-05-18 22:07:53.330
2011-05-18 22:07:53.621
2011-05-18 22:07:53.872
2011-05-18 22:07:54.119
2011-05-18 22:07:54.458
2011-05-18 22:07:54.711
2011-05-18 22:07:54.966
2011-05-18 22:07:55.307
2011-05-18 22:07:55.558
2011-05-18 22:07:55.809
2011-05-18 22:07:56.084
2011-05-18 22:07:56.453
2011-05-18 22:07:56.710
2011-05-18 22:07:56.967
--------------------------
2~4Hzくらい。遅い。


実機で歌詞チェック吐いてる時のログ。CADisplayLink@60Hz(0.016秒) 
曲:初音ミクの消失
--------------------------
2011-05-18 22:10:22.948
2011-05-18 22:10:23.819
2011-05-18 22:10:24.452
2011-05-18 22:10:24.985
2011-05-18 22:10:25.702
2011-05-18 22:10:26.528
2011-05-18 22:10:27.228
2011-05-18 22:10:28.119
2011-05-18 22:10:28.967
2011-05-18 22:10:29.625
2011-05-18 22:10:30.570
2011-05-18 22:10:31.540
2011-05-18 22:10:32.432
2011-05-18 22:10:33.191
2011-05-18 22:10:34.080
2011-05-18 22:10:34.763
2011-05-18 22:10:35.702
2011-05-18 22:10:36.627
2011-05-18 22:10:37.213
2011-05-18 22:10:37.891
2011-05-18 22:10:38.903
2011-05-18 22:10:39.786
2011-05-18 22:10:40.485
2011-05-18 22:10:41.164
--------------------------
1~2Hzくらい。遅い。超遅い。


どうも曲テンポが早い曲ほど、処理が遅れる。

【推論】
 以前、曲選択をした時に、iPod制御などの関数を呼ぶと、
 親の関数抜けるまでCATransactionが開始されないので、
 サブルーチンにしたことがあったけど、
 CATransactionがNSRunLoopに悪影響を及ぼしている?
 曲テンポが早い曲程、CATransactionの遅延が積み重なるとか?
 ↓
【調整】
 歌詞チェック周辺のCATransactionのdurationを0.0に変更
 ↓
【結果】
 ほとんど変わらない。


あれぇ?




あらまぁ、外したか。
そーするとロジックが重いのかな。
歌詞チェックは歌詞と位置をミリ秒でチェックに行くので、
NSMutableArrayを毎回舐める。

行の反転チェックと、行移動を厳密にやるので各2回全配列ループ。

画面変更などの処理だときちんとやらないとずれるので、
画面変更と通常のフェッチ処理の時と、
判断して処理量をギリギリまでチューニング。

普通の量のテキストで処理量を1/20くらいのしてみる。


<BEFORE>

実機で歌詞チェック吐いてる時のログ。CADisplayLink@60Hz(0.016秒) 
曲:初音ミクの消失
-----------------------
2011-05-18 22:10:22.948
2011-05-18 22:10:23.819
2011-05-18 22:10:24.452
2011-05-18 22:10:24.985
2011-05-18 22:10:25.702
2011-05-18 22:10:26.528
2011-05-18 22:10:27.228
2011-05-18 22:10:28.119
2011-05-18 22:10:28.967
2011-05-18 22:10:29.625
2011-05-18 22:10:30.570
2011-05-18 22:10:31.540
2011-05-18 22:10:32.432
2011-05-18 22:10:33.191
2011-05-18 22:10:34.080
2011-05-18 22:10:34.763
2011-05-18 22:10:35.702
2011-05-18 22:10:36.627
2011-05-18 22:10:37.213
2011-05-18 22:10:37.891
2011-05-18 22:10:38.903
2011-05-18 22:10:39.786
2011-05-18 22:10:40.485
2011-05-18 22:10:41.164
-----------------------
1~2Hzくらい。遅い。超遅い。

<AFTER>



-----------------------
2011-05-18 22:42:54.836
2011-05-18 22:42:55.333
2011-05-18 22:42:55.478
2011-05-18 22:42:55.616
2011-05-18 22:42:55.827
2011-05-18 22:42:55.998
2011-05-18 22:42:56.152
2011-05-18 22:42:56.452
2011-05-18 22:42:56.927
2011-05-18 22:42:57.169
2011-05-18 22:42:57.456
2011-05-18 22:42:57.633
2011-05-18 22:42:57.802
2011-05-18 22:42:58.098
2011-05-18 22:42:58.270
2011-05-18 22:42:58.436
2011-05-18 22:42:58.629
2011-05-18 22:42:58.819
2011-05-18 22:42:59.118
2011-05-18 22:42:59.306
2011-05-18 22:42:59.478
2011-05-18 22:42:59.486
2011-05-18 22:42:59.493
2011-05-18 22:42:59.968
2011-05-18 22:43:00.285
-----------------------
4~6Hzくらいに。




【結果】
初音ミクの消失の歌詞処理が、
余裕で間に合うように。

先読みでタグを打っていた(速い曲)
歌詞ファイルが全部打ち直し。

まぁこれで歌詞は正確に表示されるようになったし、
歌詞ファイルなど打ち直せばいいか。

たった252曲だし。。。



推論だけで疑わずに、きちんと確認するべきということね。

UDP関連の表示の方やる前でよかったかな。
あちらも綺麗に処理できそうな気がしてきた。

0 件のコメント:

コメントを投稿