問題タブ [surfaceflinger]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - SDLでfb1の内容を画面に描画する
私は、2 つのコンポジターを 2 つの異なるフレーム バッファーに描画する Android アプリの互換性プロジェクトに取り組んでいます。メイン コンポジター (リップスティック、ウェイランド コンポジター) は fb0 に描画されます。/dev/graphics/fb0 が fb1 を指している fb スワップの後、Surfaceflinger は fb1 に描画します。おそらくSDLを使用して、fb1のコンテンツを取得して画面に描画するアプリケーションを作成したいと思います。しかし、これがどのように行われるのかわかりません。
android - デバイスが静止しているときに触れたときの Android アニメーションのパフォーマンス低下
私のアプリは、フレームごとにいくつかの非常に単純なビュー (回転、平行移動) のプロパティを変更します。Android のパフォーマンスに関する記事でアドバイスされているように、systrace を使用して、フレームがドロップしているかどうかを確認しました。
本当に予想外のことが起きました。デバイスが静止しているとき (画面に触れていても)、CPU 使用率が高くなり、systrace でアラートが発生し、GPU レンダリング プロファイラーの赤い部分が長くなりました。デバイスを非常に速く回転させたり振ったりすると、すべて問題ありませんでした。
以下、結果のリンクです。Shake
デバイスを非常に速く回転させたno_shake
とき、机の上に置いたままにしたときです。
ソース コードという 1 つの翻訳アニメーションを使用する、非常に単純なテスト アプリを作成しました。
フレームレートがスムーズなシェイク systrace を見ると、HW_VSYNC_0 および HW_VSYNC_ON_0 ラインにデータがないのはなぜですか? CPU 周波数を読み取るにはどうすればよいですか (トレースをキャプチャするときにオプションを有効にしました)。
この問題に関して、私の理論では、デバイスが CPU 周波数を下げている可能性があります。systrace でこれを読み取るにはどうすればよいですか? この仮説をテストするためにサードパーティのアプリを使用しましたが、以下に示すように真実です。では、この問題を回避するにはどうすればよいでしょうか。
デバイスがこれを行う理由は何ですか? 最初は、デバイスが加速度計のデータを使用して使用されていないかどうかを理解し、CPU 周波数を下げたと思いました。しかし、CPU 周波数を上げるには、デバイスを激しく振る必要があります。通常の人のようにそれを保持しても、CPU 周波数は増加しません。
たくさんの質問があることは承知していますが、Android グラフィックス パイプラインに関する関連記事をすべて読んだので、アイデアがありません。
この問題は、Android 5.1 を実行している Sony Xperia Z3 で発生しました。この問題は、Android 6 を実行している Nexus 5 では再現できませんでした。
アップデート
パフォーマンスの問題は、CPU/GPU スロットリングが原因のようです。同じデバイスの Xperia Z3 で Android 4.4 を実行すると、クロック速度は低下しますが、Systrace によるとパフォーマンスが向上します。また、振っても速度が上がりません。
CPU 速度を上げるために必要なシェイク ジェスチャに関しては、デバイスを縦向きから横向きに、またはその逆に回転させようとすると、(アプリの向きが変わらなくても) CPU クロックが増加することに気付きました。したがって、このジェスチャーが監視される理由は、考えられる向きの変更を高速化するためだと思います。
android - surfaceflinger の gid を変更するための Android init.rc のステートメント
Android ファイルシステムでは、init.rc スクリプトに、以下のように surfaceflinger のユーザーとグループを変更または追加するステートメントがあります。
ところで興味深いのは、ユーザーはシステムですが、グループにはシステムがないということです。上記のスクリプトのように、グループにはグラフィックスと drmrpc しかありません。
システムグループが設定されていないのはなぜですか?
何らかの理由でシステムグループを設定した場合。それは何かを妥協しますか?
android - ビデオがAndroidプラットフォームで再生されているかどうかを検出する方法は?
一部のビデオが Android プラットフォームで再生されているかどうかを知るための API またはメソッドはありますか?
ビデオがフォアグラウンドで再生されているときに、バックグラウンド ジョブを停止したいと考えています。
API またはメソッドは、surfaceflinger、ウィンドウ マネージャー サービスなどのフレームワーク モジュールから取得したほうがよいでしょう。
ありがとう。
android - Android Surface Flinger テスト プログラム: サイズ変更
aosp(marshmallow - 6.0.1) フォルダー "frameworks/native/services/surfaceflinger/tests/resize" で SurfaceFlinger テスト プログラムをコンパイル (mm) すると "resize" になります。
次のエラーが表示されます。
助けて。
android - Layer::drawWithOpenGL が呼び出されないのはなぜですか?
Android レンダリング コードをもう少し理解しようとしています。そこで、SurfaceFlinger の一部である Layer::drawWithOpenGL() 関数にログを追加します。しかし、それは決して呼び出されないようです。なぜこれが当てはまるのか、誰かが光を当てることができますか?
ありがとう。
android - Android x86 Nougat の仮想フレーム バッファで使用するバッファ メモリを割り当てると、SurfaceFlinger/gralloc メモリ不足エラーが発生する
Android x86 Nougat (Android v7.1) プロジェクトのフォークをカスタマイズしています。私たちのシステムにはビデオ ディスプレイ ハードウェアがないため、仮想フレーム バッファ (VFB) をセットアップして、カスタムの方法でビデオ ディスプレイを処理できるようにします (たとえば、VNC サーバーを介してビデオ ディスプレイをルーティングするなど)。
システムが起動すると、SurfaceError が初期化を試み、graloc を使用してメモリを割り当てようとすると失敗します。以下は、logcat の抜粋です。
完全なログへのリンクは次のとおりです。
初期化ログ (dmesg): http://pastebin.com/sr1rAK43
Logcat: http://pastebin.com/SVYhvgu5
物事を実行するために行ったこと:
kernel/arch/x86/configs/android-x86_defconfig でオプションを設定します: CONFIG_FB_VIRTUAL を VFB モジュール モードの M に設定します</p>
kernel/drivers/video/fbdev/vfb.c で、フレーム バッファ サイズを最大 64MB に更新: #define VIDEOMEMSIZE (64*1024*1024) </p>
device/generic/common/init.sh で、VFB を開始し、UVESA フレーム バッファリングを無効にします。
関数 do_init()
# init_hal_gralloc
modprobe vfb vfb_enable=1 </p>
そして、「return 0」の前のファイルの終わりにある同じ init.sh で:
/system/bin/fbset 360 480 20 </p>
知りたい:
1) メモリ不足エラーを解決するにはどうすればよいですか?
2) カーネル コマンド ラインから vfb を有効にする方法を教えてください。</p>
3) Android 7.x のカーネル 4.4 で VFB を動作させるために見逃した可能性のある構成/セットアップ