Commit Graph

33071 Commits

Author SHA1 Message Date
Neil Fuller
dfcf065505 am 09fd5a18: Merge "Replacing FloatMath native implementation with calls to Math"
* commit '09fd5a1873fa1ab51f4e428b1b909fea35091a51':
  Replacing FloatMath native implementation with calls to Math
2014-10-20 10:10:34 +00:00
Neil Fuller
09fd5a1873 Merge "Replacing FloatMath native implementation with calls to Math" 2014-10-20 10:08:11 +00:00
Nick Kralevich
7b3db39aa4 Replacing FloatMath native implementation with calls to Math
On modern versions of Android running in AOT mode
FloatMath is slower than Math. Calls to Math.sqrt(),
etc. are replaced by intrinsics which can be as small
as a single CPU opcode.

When running in interpreted mode the new
implementation is unfortunately slower, but I'm
judging this acceptable and likely to be improved
over time. This change saves a small amount of native
code.

Example timings:

Mako AOSP AOT:

Method: Original / New / Direct call to Math
ceil: 596ns / 146.ns / 111ns
sqrt: 694ns / 56ns / 25ns

Mako AOSP interpreted:

Method: Original / New / Direct call to Math
ceil: 1900ns / 2307ns / 1485ns
sqrt: 1998ns / 2603ns / 1788ns

Other calls Mako AOT:

Method: Original / New
cos: 635ns / 270ns
exp: 566ns / 324ns
floor: 604ns / 150ns
hypot: 631ns / 232ns
pow: 936ns / 643ns
sin: 641ns / 299ns

The advice to use Math directly, in preference to
FloatMath, is still good. FloatMath will be deprecated
separately.

Bug: https://code.google.com/p/android/issues/detail?id=36199
Change-Id: If07fcbd78543d13bc6d75f9743f999860e8d58d7
2014-10-20 09:24:11 +01:00
Elliott Hughes
84e6d466ed am 4cd671e4: Merge "Revert "Replacing FloatMath native implementation with calls to Math""
* commit '4cd671e4d27befdd576fa86051956c3cafad6808':
  Revert "Replacing FloatMath native implementation with calls to Math"
2014-10-18 20:48:03 +00:00
Elliott Hughes
4cd671e4d2 Merge "Revert "Replacing FloatMath native implementation with calls to Math"" 2014-10-18 20:43:07 +00:00
Elliott Hughes
b3b68d0333 Revert "Replacing FloatMath native implementation with calls to Math"
This reverts commit 32b88b48da.

Change-Id: I40ea17f3a68f2b53eb013aebd3ba1becdc724f94
2014-10-18 20:41:27 +00:00
Neil Fuller
9b0109eb05 am c7aa8fe6: Merge "Removing some more FloatMath references"
* commit 'c7aa8fe62356fc09962941140c8bb7ed8bab2f8f':
  Removing some more FloatMath references
2014-10-17 14:54:17 +00:00
Neil Fuller
c7aa8fe623 Merge "Removing some more FloatMath references" 2014-10-17 14:48:17 +00:00
Neil Fuller
8a3785cafe am fd2d41b7: Merge "Replacing FloatMath native implementation with calls to Math"
* commit 'fd2d41b742339d278f4a66f78a7c161108985ed8':
  Replacing FloatMath native implementation with calls to Math
2014-10-16 09:24:18 +00:00
Neil Fuller
fd2d41b742 Merge "Replacing FloatMath native implementation with calls to Math" 2014-10-16 08:16:24 +00:00
Neil Fuller
1802567a79 am e4625cc1: Merge "Fix Time docs to document various error cases"
* commit 'e4625cc1a861615f4b3447e2a4d4990590d51470':
  Fix Time docs to document various error cases
2014-10-15 16:01:01 +00:00
Neil Fuller
e4625cc1a8 Merge "Fix Time docs to document various error cases" 2014-10-15 15:56:06 +00:00
Neil Fuller
7079f2003c Fix Time docs to document various error cases
Bug: https://code.google.com/p/android/issues/detail?id=76386
Change-Id: Ibb71405b70453d5abaf45426ec4e36261b6695cf
2014-10-15 12:08:05 +01:00
Neil Fuller
32b88b48da Replacing FloatMath native implementation with calls to Math
On modern versions of Android running in AOT mode
FloatMath is slower than Math. Calls to Math.sqrt(),
etc. are replaced by intrinsics which can be as small
as a single CPU opcode.

When running in interpreted mode the new
implementation is unfortunately slower, but I'm
judging this acceptable and likely to be improved
over time. This change saves a small amount of native
code.

Example timings:

Mako AOSP AOT:

Method: Original / New / Direct call to Math
ceil: 596ns / 146.ns / 111ns
sqrt: 694ns / 56ns / 25ns

Mako AOSP interpreted:

Method: Original / New / Direct call to Math
ceil: 1900ns / 2307ns / 1485ns
sqrt: 1998ns / 2603ns / 1788ns

Other calls Mako AOT:

Method: Original / New
cos: 635ns / 270ns
exp: 566ns / 324ns
floor: 604ns / 150ns
hypot: 631ns / 232ns
pow: 936ns / 643ns
sin: 641ns / 299ns

The advice to use Math directly, in preference to
FloatMath, is still good. FloatMath will be deprecated
separately.

Bug: https://code.google.com/p/android/issues/detail?id=36199
Change-Id: I8d1947d88b3c576643138b1df589fb9da7c1ab88
2014-10-15 11:47:58 +01:00
Neil Fuller
6de42dac43 Removing some more FloatMath references
See frameworks/base commit 33253a4baa
for details.

Bug: https://code.google.com/p/android/issues/detail?id=36199
Change-Id: I46d4ee4c4be7972e3bcc6782fb50f024b6fff1ee
2014-10-15 11:45:45 +01:00
Neil Fuller
ee665151a4 am 0c1faf43: Merge "Switch from FloatMath -> Math and Math.hypot where possible"
* commit '0c1faf43aecadc37b78c4ad6cb669eb351d21385':
  Switch from FloatMath -> Math and Math.hypot where possible
2014-10-02 10:18:29 +00:00
Neil Fuller
33253a4baa Switch from FloatMath -> Math and Math.hypot where possible
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
2014-10-01 14:04:15 +01:00
Andreas Gampe
dfdabe3728 am 6f954cf2: Merge "Frameworks/base: Early init native bridge"
* commit '6f954cf2eb2baadf26bc0aba6272ef19b5dd45a0':
  Frameworks/base: Early init native bridge
2014-09-24 22:10:15 +00:00
Andreas Gampe
6f954cf2eb Merge "Frameworks/base: Early init native bridge" 2014-09-24 21:59:51 +00:00
jgu21
2eacd06bfb Frameworks/base: Early init native bridge
Add the app directory to the arguments for starting a process.
Add a check for NeedsNativeBridge and a call to PreInitializeBridge
in the native fork code.

Change-Id: I0b93da93251c6b4638de786bf98cf99df07c3fc2
2014-09-22 16:04:37 -07:00
Elliott Hughes
4fec1b4887 am 600ca140: Merge "Use constants instead of resources for ellipsis."
* commit '600ca140e2e31e76f9bef7d484387ea366812cb3':
  Use constants instead of resources for ellipsis.
2014-09-19 22:14:48 +00:00
Ian Rogers
ad64befd25 am 296a712e: Merge "Make a field final."
* commit '296a712e6b3fd48b5ace1128fa68547fdb8de84d':
  Make a field final.
2014-09-19 22:14:33 +00:00
Elliott Hughes
600ca140e2 Merge "Use constants instead of resources for ellipsis." 2014-09-19 22:02:45 +00:00
Igor Viarheichyk
ed0daa93e4 Use constants instead of resources for ellipsis.
All supported locales use only U+2025 and U+2026 to represent
ellipses, and it will unlikely change in future. Given translated
resources are inconsistent and often use three dots it is safer
to use constants instead of resources.

Change-Id: I51a6cb903f62f739fbadd6b78e5765c0028d641a
2014-09-19 22:02:08 +00:00
Ian Rogers
296a712e6b Merge "Make a field final." 2014-09-11 20:01:22 +00:00
Elliott Hughes
2008cff73b am ab94a167: Merge "Small documentation fixes across many files."
* commit 'ab94a1676e6280f1b6d83e0f8b02849ff62faf4f':
  Small documentation fixes across many files.
2014-09-08 18:51:22 +00:00
Elliott Hughes
ab94a1676e Merge "Small documentation fixes across many files." 2014-09-08 18:44:14 +00:00
Mark Doliner
d0646dca40 Small documentation fixes across many files.
Change-Id: I3e8787ce4bc6018ea1dc9aef2a2cd4e0a8dde663
2014-09-05 13:57:51 -07:00
Andreas Gampe
82ad9ec3d1 am 523afd15: Merge "Frameworks/base: Add native bridge post-fork initialization"
* commit '523afd157be99ddce8c0f643caceb9db4a9227bb':
  Frameworks/base: Add native bridge post-fork initialization
2014-09-04 21:55:34 +00:00
Andreas Gampe
aec67dcc02 Frameworks/base: Add native bridge post-fork initialization
Change-Id: I5a20de1cb68dd1802937b369b14c50c9c1031c67
2014-09-03 21:38:34 -07:00
Marcin Kosiba
b1ad72c484 am 25d928f6: Merge "Update WebViewFactory.java to compile in AOSP."
* commit '25d928f687408058f007051878574ea66691d9dc':
  Update WebViewFactory.java to compile in AOSP.
2014-09-01 09:13:45 +00:00
Marcin Kosiba
0b0c8c0a26 am 5ddbe722: Merge "Load the WebView Java code via createPackageContext."
* commit '5ddbe722befa58db3b14bcbec55bf5313cd80962':
  Load the WebView Java code via createPackageContext.
2014-09-01 09:13:40 +00:00
Marcin Kosiba
f524961949 am 2453f611: Merge "Remove WebView library preloading mechanism."
* commit '2453f611d9b7c60c4ae9766b4bad42b9e1d13777':
  Remove WebView library preloading mechanism.
2014-09-01 09:13:35 +00:00
Marcin Kosiba
25d928f687 Merge "Update WebViewFactory.java to compile in AOSP." 2014-09-01 08:50:25 +00:00
Marcin Kosiba
5ddbe722be Merge "Load the WebView Java code via createPackageContext." 2014-09-01 08:50:10 +00:00
Marcin Kosiba
2453f611d9 Merge "Remove WebView library preloading mechanism." 2014-09-01 08:48:50 +00:00
Neil Fuller
23f6a4ab5d am 8178edfc: Merge "Fixing android.text.format.Time for non-English locales"
* commit '8178edfc096e797917257c8cbc715f0a31fe551a':
  Fixing android.text.format.Time for non-English locales
2014-08-29 09:16:50 +00:00
Neil Fuller
788cb18f65 Fixing android.text.format.Time for non-English locales
The test fixes for bug 17262063 showed up a real issue for
non-English locales with the Time.format() method:
If the Android string resources that contain the pattern use
non-ASCII characters then a '?' would be output instead of
those characters.

For example, in France the pattern for '%c' includes a 'à'
(a with a grave accent) and Japan includes 日.

The problem was due to converting the pattern to bytes using
the US_ASCII character set, which turns non-ASCII characters
into '?'. The code has been changed to use char throughout
and avoid bytes.

Internal documentation has been improved.

Some calls to modifyAndAppend() have been replaced with a
direct call to outputBuilder.append() because the
modify step is guaranteed to a no-op for the literals given.

The formatter has been changed to use Locale.US because it
is only used for outputting numbers. It has been renamed
to make this more obvious and the locale field has been
removed.

Bug: 17262063
Change-Id: I32b92f7f7e3e6931d3514d87f1d9a38f136d4021
2014-08-29 09:08:47 +01:00
Ian Rogers
d8e34a6a0d Make a field final.
Make a field that can be final, final.

Change-Id: I597ef43bad5045a63e7e9fe6eedd8e0f0a637ca4
2014-08-27 16:32:57 -07:00
Adam Powell
8432e77baa am dafcc610: Merge "Don\'t unnecessarily set LayoutParams on children"
* commit 'dafcc61078cca409abd77516ce7ccee1eb60db2a':
  Don't unnecessarily set LayoutParams on children
2014-08-11 17:52:03 +00:00
Adam Powell
dafcc61078 Merge "Don't unnecessarily set LayoutParams on children" 2014-08-08 20:41:34 +00:00
Marcin Kosiba
3c4b2273ac Update WebViewFactory.java to compile in AOSP.
Change-Id: I076ef48a3205969f1945bff93ea0305e9907b20a
2014-08-05 11:00:49 +01:00
Torne (Richard Coles)
a7e4fe9af0 Load the WebView Java code via createPackageContext.
Bug: 16329371
Change-Id: I94b4bb0df46a373454eb8ee9742413e13ce1e6a8
2014-08-05 09:26:58 +01:00
Torne (Richard Coles)
3d9bcc066f Remove WebView library preloading mechanism.
We don't want to preload the WebView library in the zygote process any
more, as loading an updatable WebView in the zygote is a stability risk.
The memory benefits of preloading will be obtained in other ways.

Bug: 13005501
Change-Id: Ic89f2a1d057dc92b01fb775bf326b47ac2d4caa2
2014-08-05 09:26:54 +01:00
John Reck
a4c5ddf6e6 am 8c57cead: Merge "[View] Clear Hardware-Layers before system destroys HardwareRenderer​."
* commit '8c57cead83105ce273351024bfa745c979f9dc48':
  [View] Clear Hardware-Layers before system destroys HardwareRenderer​.
2014-07-31 18:32:45 +00:00
Narayan Kamath
8b2de134a6 am bb97753b: Merge "Switch TextUtils over to new ICU API."
* commit 'bb97753bc546c7725652b68e6611a75350573466':
  Switch TextUtils over to new ICU API.
2014-07-31 11:34:49 +00:00
John Reck
8c57cead83 Merge "[View] Clear Hardware-Layers before system destroys HardwareRenderer​." 2014-07-29 22:52:28 +00:00
Narayan Kamath
08b3516984 Switch TextUtils over to new ICU API.
.. and use Locale.getScript() instead of ICU.getScript.

bug: 15876704
Change-Id: Idf9462d8ef568dbc88c95e65a971184952e97872
2014-07-31 11:29:44 +00:00
henry.uh_chen
a199720190 [View] Clear Hardware-Layers before system destroys HardwareRenderer​.
Symptom: Sometimes HardwareLayer display is corrupted.

Root Cause: In some cases, ViewRootImpl destroys HardwareRenderer​ without
clearing HardwareLayers in the view hirarchy. If the system trims memory fully
and kill the glContext at the same time, HardwareLayer may corrupt.

Solution: Clear Hardware-Layers before system destroys HardwareRenderer​.

Reproduce steps: Modify the cache's trim memory mechanism to make it easier to
trim fully, HardwareLayers implemented in app will easily be corrupted.
Modification of the cache is not required but make it easier to reproduce.

Change-Id: If57c802cdacf8dc37cbbcc199e74f9482834f981
2014-07-25 18:07:24 +08:00
Neil Fuller
1a4290473d am fc6346d4: Merge "Rewriting android.text.format.Time without the native _tz functions"
* commit 'fc6346d461c9ed9b499643db830885241cc82838':
  Rewriting android.text.format.Time without the native _tz functions
2014-07-22 15:29:08 +00:00