1

最初は奇妙な質問のように聞こえますが、ご容赦ください。

私は setTimeout ベースのベンチマーク ( stats.jsに似ています) を書きました - アイデアは、アニメーションがさまざまな条件下でどのように実行されているかを比較するものを持つことでした (さまざまな CSS3 プロパティを追加するなど)。(単純な)例として、回転とボックス シャドウをアニメーション化したものを用意し、2 回目の実行で回転を削除し、3 回目の実行でボックス シャドウを削除します。その後、これらの各アニメーションのパフォーマンスを比較するために、3 つのベンチマーク番号を取得します。

アニメーションが GPU アクセラレーションされていない限り、これはうまく機能します (明らかな理由で、ハードウェア アクセラレーションにより、ページの単一プロセス構造からアニメーションが削除されます)。

しかし、それはまた私に何百万ドルもの質問をもたらします.GPUアクセラレーションなしで何かをより良く実行するように最適化すると、同じ最適化されたアニメーションは、GPUアクセラレーションがオンになっていると(より速く、またはより少ないメモリ使用量で)より良く実行されることを意味しますか? それとも別のルールが適用されますか?

もっと簡単な例を挙げましょう。CSS3 の box-shadow は、ほとんどすべてのアニメーションでパフォーマンスを低下させます。単純なケースでは、CSS3 box-shadow を同様の影のラスタライズ (PNG?) 画像に置き換えることでパフォーマンスを向上させることができます。ただし、GPU をオンにすると、両方のアニメーションがほぼ同じ速度で実行されるように見えるため、その利点は肉眼では明らかではありません (繰り返しになりますが、GPU をオンにした場合のパフォーマンスの変化を追跡することはできません)。繰り返しになりますが、同じルールが GPU オンとオフに適用されますか?

私の最初の衝動は、何かが最適化されると、GPU のオンまたはオフに関係なく、より良く動作することでした。ただし、以下のコメントで述べたように (これが間違っていることを理解している場合は訂正してください)、ハードウェア アクセラレーションされた要素は GPU で事前にレンダリングされたラスター テクスチャとしてキャッシュされます。それが本当なら、私の影が CSS3 ボックスの影か画像ベースの PNG の影である場合、なぜ違いが生じるのでしょうか? これらの要素はどちらも、GPU をオンにすると、とにかくラスタライズされたテクスチャに変換されるということですか? 私の最適化は、GPU をオンにすると意味がなくなりますか? (またメモリ使用量に何らかの違いがなければ...)

4

1 に答える 1

1

そのとおり。GPU アクセラレーションが何に影響し、何に影響しないかについては、こちらを参照してください。しかし、一般的な考え方は、はい、ほとんどの最適化が維持されるということです。さて、特定の最適化が GPU オフロード後のパフォーマンスに相対的にどの程度影響するか..これは答えるのが難しい質問です。

于 2012-07-27T15:04:52.593 に答える