The motivation is an API change: FloatMath is going to be
deprecated and/or removed. Performance is not the goal of
this change.
That said...
Math is faster than FloatMath with AOT compilation.
While making the change, occurances of:
{Float}Math.sqrt(x * x + y * y) and
{Float}Math.sqrt({Float}Math.pow(x, 2) + {Float}Math.pow(y, 2))
have been replaced with:
{(float)} Math.hypot(x, y)
Right now there is no runtime intrinsic for hypot so is not faster
in all cases for AOT compilation:
Math.sqrt(x * x + y * y) is faster than Math.hypot(x, y) with
AOT, but all other combinations of FloatMath, use of pow() etc.
are slower than hypot().
hypot() has the advantage of being self documenting and
could be optimized in future. None of the behavior differences
around NaN and rounding appear to be important for the cases
looked at: they all assume results and arguments are in range
and usually the results are cast to float.
Different implementations measured on hammerhead / L:
AOT compiled:
[FloatMath.hypot(x, y)]
benchmark=Hypot_FloatMathHypot} 633.85 ns; σ=0.32 ns @ 3 trials
[FloatMath.sqrt(x*x + y*y)]
benchmark=Hypot_FloatMathSqrtMult} 684.17 ns; σ=4.83 ns @ 3 trials
[FloatMath.sqrt(FloatMath.pow(x, 2) + FloatMath.pow(y, 2))]
benchmark=Hypot_FloatMathSqrtPow} 1270.65 ns; σ=12.20 ns @ 6 trials
[(float) Math.hypot(x, y)]
benchmark=Hypot_MathHypot} 96.80 ns; σ=0.05 ns @ 3 trials
[(float) Math.sqrt(x*x + y*y)]
benchmark=Hypot_MathSqrtMult} 23.97 ns; σ=0.01 ns @ 3 trials
[(float) Math.sqrt(Math.pow(x, 2) + Math.pow(y, 2))]
benchmark=Hypot_MathSqrtPow} 156.19 ns; σ=0.12 ns @ 3 trials
Interpreter:
benchmark=Hypot_FloatMathHypot} 1180.54 ns; σ=5.13 ns @ 3 trials
benchmark=Hypot_FloatMathSqrtMult} 1121.05 ns; σ=3.80 ns @ 3 trials
benchmark=Hypot_FloatMathSqrtPow} 3327.14 ns; σ=7.33 ns @ 3 trials
benchmark=Hypot_MathHypot} 856.57 ns; σ=1.41 ns @ 3 trials
benchmark=Hypot_MathSqrtMult} 1028.92 ns; σ=9.11 ns @ 3 trials
benchmark=Hypot_MathSqrtPow} 2539.47 ns; σ=24.44 ns @ 3 trials
Bug: https://code.google.com/p/android/issues/detail?id=36199
Change-Id: I06c91f682095e627cb547d60d936ef87941be692
We missed the alpha for the vector drawable root level in the documentation.
And the animation target can be vector drawable itself for the alpha value,
which is more than path and group object.
b/17696183
Change-Id: Ic9d441fbdf411dad92718ae5adbc6655fe708453
bug:17693526
With this change, outline opacity isn't published by default, as was
intended. Default behavior for custom drawables is to have a
rectangular outline, but not cast a shadow, e.g. as a button
background.
Change-Id: If80a256ff359bcb58f3f593ec9018f2df5fc4e44
Ripple alpha is supposed to be split evenly between the foreground
ripple layer and the background layer, but the background alpha wasn't
getting adjusted properly.
BUG: 17658817
Change-Id: I7af2f2ed38400a40d4a17da020363c7ae5c71a7b
The risk is low since most of them are just matching the naming to xml.
And this update won't cause build breakage.
b/17623982
Change-Id: I1eda0b8314ec7b94bc03976cdc365a7dc1039f4c
We only need to force a transparent draw after canceling a render
thread accelerated animation, and then we can draw again without
the transparency to avoid overdraw in the display list.
BUG: 17451761
Change-Id: I640f9a29d0940a93802f14a15f27d2c2072755ce
Adds a missing JNI binding to AssetManager, ensures drawables have
default tint modes as documented, and updates vector tint appropriately
when state changes.
BUG: 17385604
Change-Id: Ice92885989ebc13b95952f5dc3b7904cc956da12