2019/11/17(日) [n年前の日記]
#1 [gimp][prog] gimp-texturizeのループ高速化ができないか試行錯誤中
昨日、gimp-texturize プラグインのバグを取れた感じになったのだけど。その代わり、処理時間がグンと増えてしまったあたりが気になって。一番深いところのループを少しでも高速化できないかと試行錯誤中。
ループ内の座標値は、プラス方向にのみ増えるだけなのだから、画像の横幅、あるいは縦幅を超えた時だけ、ポインタ等をリセットしてやれば済むのではないか、そのほうが処理も速くなるはず、と予想しつつ書き直しているところ。
もっとも、こういうのは、ちゃんと実測してベンチマークを取ってみないと、たしかなことは分からない…。
ループ内の座標値は、プラス方向にのみ増えるだけなのだから、画像の横幅、あるいは縦幅を超えた時だけ、ポインタ等をリセットしてやれば済むのではないか、そのほうが処理も速くなるはず、と予想しつつ書き直しているところ。
もっとも、こういうのは、ちゃんと実測してベンチマークを取ってみないと、たしかなことは分からない…。
◎ C言語で時間取得。 :
ググってみたら、C言語で開始時間と終了時間を取得する場合、clock() を使うのが手っ取り早いらしい。
しかし、Windows上で使うと、10ms前後の精度しかないそうで。
もっとも、OS上では同時に色んな処理をしているのだから、他のプログラムとの兼ね合いで、実行するたびに処理時間も変わってくるはず。であれば、誤差の範囲だよな…。
#include <time.h> ... int start = clock() ... int end = clock() printf("%f sec.\n", (double)(end - start) / CLOCKS_PER_SEC);
しかし、Windows上で使うと、10ms前後の精度しかないそうで。
もっとも、OS上では同時に色んな処理をしているのだから、他のプログラムとの兼ね合いで、実行するたびに処理時間も変わってくるはず。であれば、誤差の範囲だよな…。
◎ キャンセルボタンを押した際の動作も修正。 :
gimp-texturizeプラグインの動作確認をしていた際、キャンセルボタンを押したらエラーが出ることに気づいた。
main.c を眺めてみたら、キャンセルボタンが押された際に status = GIMP_PDB_CANCEL; をしてるのに、status の値をチェックせず、生成画像が存在することを前提にして後片付けをしているように見えた。キャンセルした時だけ、そのあたりをスキップするように修正。
ただ、このプラグインは、「フィルターの再適用」を呼んだ際にも必ずエラーが出るし、前回の入力値を覚えてくれたりもしないので、どうも GIMP側と連携するあたりが、現状の仕様と合ってない気もする。
元々、GIMP 2.2 時代のプラグインのようだし…。その後、プラグインを書く際のお約束が変わってしまった可能性もありそうだなと…。
main.c を眺めてみたら、キャンセルボタンが押された際に status = GIMP_PDB_CANCEL; をしてるのに、status の値をチェックせず、生成画像が存在することを前提にして後片付けをしているように見えた。キャンセルした時だけ、そのあたりをスキップするように修正。
ただ、このプラグインは、「フィルターの再適用」を呼んだ際にも必ずエラーが出るし、前回の入力値を覚えてくれたりもしないので、どうも GIMP側と連携するあたりが、現状の仕様と合ってない気もする。
元々、GIMP 2.2 時代のプラグインのようだし…。その後、プラグインを書く際のお約束が変わってしまった可能性もありそうだなと…。
[ ツッコむ ]
以上です。