Posts Tagged ‘パフォーマンス’

Androidでプロファイリング(traceview)

No Comments »

プログラマの皆さん、今回はAndroidのプロファイラの使い方をご紹介したいと思います。

デバッガツール(プロファイラなどを含む)を使うことは非常に大事です。ここをうまく使いこなせるかどうかがプログラムの品質、開発スピードに大きく影響すると思っています。
めんどくさいと思わず積極的に使いましょう。

ということでAndroidアプリのプロファイラであるtraceviewというものを使ってみたいと思います。

これは、android-sdkをダウンロードしたディレクトリ以下にあります。
(Android Home)/tools/traceview

では使ってみましょう。

Read the rest of this entry »


Android NDKを使用してJava言語とC言語で速度比較をする(IO編)

No Comments »

こんにちはBig iguchiです。

早速ですがみなさん、
Androidは画像の読み込みが遅いと思ったことはありませんか?
それ以前に、Androidは大きな画像を読み込むとすぐに落ちると思ったことはありませんか?

今日はそんな問題を解決するための方法を一つ紹介しようと思います。

そうです。Android NDKです。

しつこくてすいません。Javaでも出来ると言う方はご紹介ください。

Android NDKを使用すればJavaのヒープメモリを使用せずCのヒープメモリを使用するため、落ちることやGCによるストップザワールのようなことが発生しないと予測しました。

方法は、1920×1080の画像を読み込みRGBのデータを取得できるところまでの時間を測定します。実機はHT-03Aを使用しました。使用した画像は以下です。
sample720x480

取得してから画像を扱うところのパフォーマンスは画像処理編で試しているので省きます。

ではさっそく試してみましょう。

Read the rest of this entry »


Adapterの高速化

4 Comments »

Xperia発売されましたね。
うちのPICTRHYTHMもよろしくね!
http://www.techfirm.co.jp/pictrhythm/

と、宣伝もそこそこに今回は、Adapterの高速化にトライします。

Read the rest of this entry »


CacheオブジェクトにはSoftReferenceを

5 Comments »

Android、いかがですか。
今日もOut Of Memory、出していますでしょうか。

そんなあなたに朗報です。
少しでもメモリにやさしいプログラムを。

今日はSoftReferenceのお話です。

Read the rest of this entry »


パフォーマンス向上に役立つ情報いろいろ

No Comments »

A3へ参加するためにアプリを作っていますが、なかなかパフォーマンスが出ずに苦労しています。
そこでいろいろ探しまわった所、パフォーマンス向上に役立つ情報をいろいろ見つけたのでご紹介。

Read the rest of this entry »


Android NDKを使用してJava言語とC言語で速度比較をする(画像処理編)

2 Comments »

こんにちはBig iguchiです。

前回の「Android NDKを使用してJava言語とC言語で速度比較をする」に引き続きAndroid NDKで遊んでみます。

今回はただ、計算するだけでなく少し実用的に画像の平均RGBを取得するコードをJavaとC言語で比較しようと思います。

まずは、ちょっと画像の説明。。。。

Androidの場合、画像データをBitmapで扱うことが多いのですが、このままだとC言語で扱いにくいので、「Bitmap.setPixel()をsetPixels()に変えたら3倍速くなったよ」でdaichi1128が言っているようにgetPixelsでint型の配列として色情報を取得します。以下になります。
bitmap.getPixels(pixels, 0, originalWidth, 0, 0, originalWidth, originalHeight);

getPixelsの第1引数にはbitmapの色情報がint型で以下のフォーマットで返ってきます。
0xFFFFFFFF

24~31ビット alpha
16~23ビット red
8~15ビット green
0~7ビット blue

つまり、以下のコードでピクセル毎にRGBカラーを取得できるということですね。

つぎに、配列をJavaからC言語に渡すときの説明。。。。

この処理をC言語で行いたいために、この第1引数のint配列をJavaからC言語に渡せればいいですね。方法は以下のようにしました。
・Java言語側

・C言語側

同様な処理をJavaでも記述して、前回と同様に実行してみました。

結果は以下になります。。。。

result
JavaとNativeで答えも一致してますね。海の画像を使ってみたんですがblueとgreenの平均値が高いのできちんと解析できてますね。そして速度もNativeの方がかなり早い。画像処理にもAndroid NDKは十分使えそうです。
これを応用すれば、「Androidでモザイク画像を作ってみる」のモザイク処理や他の画像処理も高速化出来ると思います。皆さんぜひやってみてください。

今回は以上となります。
海に行きたい。


Bitmap.setPixel()をsetPixels()に変えたら3倍速くなったよ

No Comments »

ずいぶん前に画像をモザイク風に加工するエントリを書きましたが、あれを少しいじったらだいぶ早くなりましたよ、というご報告です。

こんなコードでモザイク処理に350~360msくらいかかってました

Android開発でのパフォーマンスTips(1) | Techfirm Android Lab
を見直して、ループ前にgetterなどで参照する値はローカル変数にキャッシュしてみると、

310~320msになりました。
少しでも早くなると、テンションが上がる。

でもこのコードはまだまだ早くなれるはずだ。

今はループの中でbitmap.getPixelしてsetPixelして1ピクセル単位で読み書きしてるのでこれをガバッと一発で配列に取り出して、ループ内では配列を操作して、ループ後にsetPixelsで配列をセットするように変更してみる。

これだと、90~110msまで早くなった。

bitmap.getPixes()に引数は順番に
1.色の配列。int[]ここにピクセルデータが入ってくる
2.offset。int配列のどこから書きこむか。
3.謎
4.ビットマップのピクセルを読み始めるX座標
5.ビットマップのピクセルを読み始めるY座標
6.ビットマップの幅
7.ビットマップの高さ

ということなので、getPixelsの前にnew int[width * height]している。
Androidでは1ピクセルのカラー情報はintで表わすので、それを横×縦分の配列で受け取っている。

setPixelsはgetPixelsの逆。
第一引数のint配列をbitmap上のどこに書くかを指定する。

copyPixelsToBufferや copyPixelsFromBuffer の方が早いかもしれないがまだ試していない。
きっとBig iguchiがやってくれるに違いない。


Android NDKを使用してJava言語とC言語で速度比較をする

17 Comments »

今回はAndroid NDKを使用して、JavaコードとC言語で記述されたNativeコードで速度の比較を行おうと思います。

まずはNDKをインストールします。以下のリンクからndkをダウンロードします。

http://developer.android.com/intl/ja/sdk/ndk/1.6_r1/index.html

ダウンロードしてきたら以下を実行しインストールします。
$(NDKROOT)/build/host-setup.sh

これでインストールが完了です。簡単ですね。

早速、Javaのコードを書いて速度比較していきましょう。

Read the rest of this entry »


Android開発でのパフォーマンスTips(2)

2 Comments »

AndroidパフォーマンスTips、前回の続きです。
Android開発でのパフォーマンスTips(1) | Techfirm Android Lab

Read the rest of this entry »


Android開発でのパフォーマンスTips(1)

7 Comments »

googleは公式ドキュメントとしてAndroid開発におけるパフォーマンス設計のベストプラクティスを公開しています。
Designing for Performance | Android Developers

どんなに優れたUIであってもパフォーマンスの悪いアプリはユーザにとって使いにくいものになってしまいます。
アプリのパフォーマンスチューニングは重要です。

今回は公式ドキュメントをベースにパフォーマンス設計のベストプラクティスのご紹介です。
Javaの世界で当たり前だったものが、Androidの世界では通用しないものも多々あるので覚えておきたいです。
Read the rest of this entry »