550 Commits

Author SHA1 Message Date
Romain Guy
0aa87bbfc4 Fix crash with new LookupGammaFontRenderer
Bug #6853934

Change-Id: I15e6ca73bfe00eff1a37c4b9d2f7f709ee018eb6
2012-07-20 11:14:32 -07:00
Romain Guy
eb61cd8296 Optimize gradient textures
Compute the size of the backing textures based on the maximum possible
number of shades in the gradient.

Change-Id: I2d7f20477d31b81e9735f2c1d83ebdd0dbcbe340
2012-07-18 20:39:45 -07:00
Romain Guy
6355347813 Remove vendor specific precision qualifier
Change-Id: I0a56ca7a5a399ec94993d3cea0c4aff6c0f86e39
2012-07-18 20:04:14 -07:00
Romain Guy
8e025de5fb Note to self
Change-Id: Ic5699bdbf880ad68748c827bb5b4976b12d4d413
2012-07-18 19:12:11 -07:00
Romain Guy
04299385c6 Clip lines, AA rects and points correctly
Change-Id: I900dd986f397b66f133e6021aa4c2539e7abc2b9
2012-07-18 17:15:41 -07:00
Romain Guy
dfab50d8b9 Tweak text gamma correction
Change-Id: Icd3326e6a054d6020c3ed61c8459394bc87401dd
2012-07-18 17:06:37 -07:00
Romain Guy
6e25e38e43 Add a new method for text gamma correction
To select the gamma correction method, adb shell setprop hwui.text_gamma_correction
with one of the following values:

lookup3
lookup
shader3
shader

See Properties.h for more information about these different methods.
You can also control gamma correction using the following properties:

hwui.text_gamma
hwui.text_gamma.black_threshold
hwui.text_gamma.white_threshold

Change-Id: I47970b804d2c590c37d3da5008db094241579e25
2012-07-18 16:28:44 -07:00
Romain Guy
95c21d0546 Correctly pre-clip paths when recording display lists
External bug: http://code.google.com/p/android/issues/detail?id=34946

DisplayListRenderer::drawPath was not invoking quickReject() properly,
passing x,y,width,height instead of left,top,right,bottom. A path
could thus get rejected when it should be drawn instead.

While working on this change I found a similar issue with another
drawing command, drawBitmapData().

Change-Id: I56484e8c101768cde6a78625290872f7849dd5ee
2012-07-17 17:48:04 -07:00
Romain Guy
8a4ac610e1 Don't clear the dirty clip flag if it's not applied
Bug #6833979

Change-Id: I0ea78b7f31a557a335de10d910d03b0520029080
2012-07-17 17:32:48 -07:00
Romain Guy
4121063313 Add shader-based text gamma correction
To enable it, the system property ro.hwui.text_gamma_shader must be
set to true. For testing, DEBUG_FONT_RENDERER_FORCE_SHADER_GAMMA
can be set to 1 in libhwui/Debug.h.

Change-Id: If345c6b71b67ecf1ef2e8847b71f30f3ef251a27
2012-07-16 17:04:24 -07:00
Romain Guy
157bd5749f Add makefile flags for perf
Change-Id: Ibcb6e1c883551273c3392cdaa40cd0b71a3bfa70
2012-07-16 15:17:38 -07:00
Romain Guy
be6f9dc1e7 Don't copy paints for 9patches
Change-Id: I863100a0dc53fec1a3a1b2acbdeb76e6049ffe58
2012-07-16 12:41:17 -07:00
Romain Guy
b1d0a4ed21 Refactor GammaFontRenderer
This change is the first step to a shader-based text antialias
gamma correction.

Change-Id: I9eb02d4c56cb95d05219f712290c865b46141954
2012-07-13 18:25:35 -07:00
Romain Guy
c9cf9e5459 Merge "Improve rendering speed by disabling scissor tests" 2012-07-13 15:31:30 -07:00
Romain Guy
586cae3ac6 Improve rendering speed by disabling scissor tests
This change improves execution of display lists, particularly on
tiled renderers. The goal is to disable the scissor test as
often as possible. Drawing commands are rarely clipped by View
bounds so most of them can be drawn without doing a scissor test.

The speed improvements scale with the number of views and drawing
commands.

Change-Id: Ibd9b5e051a3e4300562463805acc4fd744ba6266
2012-07-13 15:28:31 -07:00
Romain Guy
489041dd41 Merge "Text shadow alpha handling incorrect" 2012-07-13 12:21:32 -07:00
Romain Guy
9c0b188e42 Text shadow alpha handling incorrect
External bug: http://code.google.com/p/android/issues/detail?id=34879

This CL also fixes a bug where a View's alpha would be applied twice.

Change-Id: I13a1546228f44d4c169259414b6fa103a6e4a0fa
2012-07-13 12:13:07 -07:00
Romain Guy
401b1f8574 Merge "Remove obsolete optimization" 2012-07-12 18:02:37 -07:00
Romain Guy
f877308f77 Remove obsolete optimization
Change-Id: I2d43c009c62a7f4a4a2e0a6303bdfa692c4b8c8c
2012-07-12 18:01:00 -07:00
Romain Guy
f0af1d5cb2 Remove unused View.flushLayer() API
Change-Id: I5d4c7388afb5265964ab6b769cc0abfee9745c84
2012-07-11 18:31:21 -07:00
Romain Guy
16c8808525 Textured text calls could be invisible
Bug #6597730

Text would sometimes not appear when rendered with textured content
(BitmapShader, LinearGradientShader, etc.) This was due to a misuse
of OpenGL texture unit in FontRenderer. Textured text normally uses
two texture units:
- texture unit 0 for the font cache
- texture unit 1 for the textured content (gradient, etc.)

Recent changes to the font renderer allow it to bind new textures
while processing the text's geometry (this happens when caches get
full or when switching font size for instance.) The bindings were
done without ensuring the texture unit was the correct one
(unit 0), thus replacing the content of another texture unit
(unit 1).

This lead to text being drawn using the font cache itself as the
content texture, making the text invisible.

Change-Id: I392b4c884f09223305f6cbc6253e2ef9a98944c9
2012-06-11 16:11:56 -07:00
Chet Haase
44b2fe3fc1 Track canvas clearing for swap buffers logic.
A previous fix made it necessary for a frame to render something to GL
in order to cause a call to eglSwapBuffers(). Besides the calls being
tracked as part of issuing a DisplayList, there is also a potential call
to clear the canvas (via glClear()) on non-opaque surfaces. This call is also
good to track, since a surface that gets cleared without any other drawing operations
is worth flipping to the screen (to erase old contents on that surface).

This fix tracks the status of the pre-draw operations to find out whether
glClear() was called and then sets the drawing status appropriately.

Issue #6606422 QuickContact dismissal is janky again (Tracking)

Change-Id: I5fcaccfdc9293dd46b83f2fc279730a5d2740ebf
2012-06-07 06:25:04 -07:00
Chris Craik
932b7f6765 Revert "Add more temporary logging for investigating detachFunctor"
bug:6608646

This reverts commit 8857b2f76abad1e4ec742dfd85d0c997880be376

Change-Id: I1563b5974c52b84201ae448298f804eb0dcc235d
2012-06-06 14:02:55 -07:00
Chris Craik
8857b2f76a Add more temporary logging for investigating detachFunctor
bug:6596807
Change-Id: Ic9e34e323b12a887f2e8df0773a6155627b6a64f
2012-06-05 11:24:46 -07:00
Chet Haase
486590963e Skip eglSwapBuffers() call when we do not draw to GL
The fix is to track when we issue GL drawing commands, and to skip the
call to eglSwapBuffers() when a DisplayList does not result in
any actual rendering calls to GL.

Issue #6364143 QuickMuni list items and buttons flicker instead of fade

Change-Id: I60a02c61a58c32d92481a1e814b4c8a49c6a37a3
2012-05-31 17:22:27 -07:00
Chris Craik
3534e13486 Merge "Avoid crash if onDetachedFromWindow called after destroy" into jb-dev 2012-05-22 17:20:07 -07:00
Chris Craik
9e08012869 Avoid crash if onDetachedFromWindow called after destroy
This also removes the temporary logging from commit
f8dafa14e058cdc2f408b59be7911abaceb73c47.

bug:6535911
Change-Id: Icf1d0438b349a0e92e7d9cefed57a252eed2b9b0
2012-05-22 16:52:00 -07:00
Chris Craik
7a9328a311 Merge "Add temporary functor lifetime logging" into jb-dev 2012-05-22 14:39:13 -07:00
Romain Guy
e5a4a3dc16 Merge "Ensure we always set the proper blending mode Bug #6527305" into jb-dev 2012-05-22 14:28:58 -07:00
Chris Craik
f8dafa14e0 Add temporary functor lifetime logging
bug:6535911

Change-Id: Ida5cc1def7fe1fc314317bbc5df50e1465753deb
2012-05-22 14:26:15 -07:00
Romain Guy
ddf7437361 Ensure we always set the proper blending mode
Bug #6527305

At the beginning of a frame, always set the blending mode that we
think GL is using just in case it was modified by another entity
(for instance a WebView functor.)

Change-Id: I0e1d0abee8a2abb2b8e7622aed28346e89562c06
2012-05-22 14:08:10 -07:00
Chris Craik
c8538ade8d Don't clear the functor at every draw
instead clear functors at invoke time, and let them detach themselves as needed.

bug:6511995
Change-Id: I9115fcadffb27eb850c1d1773c098d3d2e22788b
2012-05-22 11:54:06 -07:00
Romain Guy
f26c8be01b Sanitize display list properties
The comparisons used in the various properties setters could fail badly
in some specific conditions. The scale properties in particular did not
use the same comparisons.

This change also clamps alpha to the 0..1 range which avoids overflow
issues with lowp registers in GLSL computations.

Change-Id: I3e73b584e907a14e2c33d0865ca0d2d4d5bff31d
2012-05-18 10:58:45 -07:00
Romain Guy
49c5fc0b9e Avoid unnecessary copy when invoking drawBitmap(int[])
Bug #6483390

Change-Id: I4d2d725ef50c9401b4bd998b6160128102b40745
2012-05-15 11:15:24 -07:00
Romain Guy
e651cc6239 Remove all Dalvik allocations from Cavnas.drawBitmap(int[], ...)
Change-Id: Ie28538a2104d21154fdc78a56525e7403f08287d
2012-05-14 19:44:40 -07:00
Romain Guy
99a6ddd4cd Forget the name of a texture after freeing
Bug #6408362

FontRenderer allocates large font textures when more room is needed
to store all the glyphs used by an application. Thse large textures
are the first to be freed when memory needs to be reclaimed by the
system. When freeing a texture, the renderer would however not set
the texture name to an invalid name, leading future allocations to
be performed on the same texture name. That name could have by then
be recycled by the driver and returned by a call to glGenTexture
and used to create an entirely different texture. This would cause
the font renderer to point to the wrong texture, thus leading to
the "corruptions."

Change-Id: I8a1e80e5b79e8f21d1baf5320c090df4f2066cd4
2012-05-14 15:32:18 -07:00
Romain Guy
9d9758ae30 Fix two memory leaks
Bug #6408362

Change-Id: I58543938e7b64d83504e11e97b0dd21ef8ebf3b6
2012-05-14 15:19:58 -07:00
Romain Guy
ae91c4cbc7 Properly pre-cache latin glyphs
Bug #6408362

Change-Id: Ie11644c5a9e2d87d3b851b7e619e5f04b60a7e02
2012-05-14 14:06:02 -07:00
Romain Guy
dfa1046eca Add call sites for OpenGL's debug label extension
Change-Id: I9c689127e8166cbef92c935f8aa07217ab806dda
2012-05-12 16:22:35 -07:00
Chris Craik
aa9972943c Merge "Revert "Add temporary functor lifetime logging"" into jb-dev 2012-05-08 13:35:09 -07:00
Chris Craik
12d434a9be Revert "Add temporary functor lifetime logging"
bug:6445573

This reverts commit 2fe99801e81bb7c0ff846b536cbb7a12707410ed
2012-05-08 13:07:13 -07:00
Chet Haase
4bbcae7eb8 Merge "Fix issue where scale-animating text would jump temporarily a few pixels" into jb-dev 2012-05-07 13:20:00 -07:00
Chet Haase
d3efd6920e Fix issue where scale-animating text would jump temporarily a few pixels
Some logic in the native matrix code would determine that a matrix was
'pureTranslate' based on the scale values of a matrix being close-enough to 1,
which was within a very small epsilon. This works in general, because screen space
coordinates make that epsilon value irrelevant, so close-enough really is close-enough.

However, TextView, when centering text, works in a coordinate system that is quite
huge, with left/right values about 500,000. These numbers multiplied times that small
epsilon value would give a result that was significant, and would cause a miscalculation
of up to 4-5 pixels, causing the snap that we'd see for a couple of frames as the
scale got "close enough" to 1.

The fix is to remove the optimization of "close enough". What we really need the matrix to
do is to identify itself as being translate-only when no scale as been set (which is the
default). For the purposes of that check, it is good enough to simply check the values against
1 directly. Similarly, the bounds-check logic needs to check against 0 and 1 directly.

Issue #6452687: Glitch when changing scale of a view containing text

Change-Id: I167fb45d02201fb879deea0e5a7ca95e38128e17
2012-05-07 12:18:19 -07:00
Chet Haase
d34dd71800 Fix hang/crash in native path code
An optimization for paths is to only create a texture for the original native
Path object, and have all copies of that object use that texture. This works in
most cases, but sometimes that original path object may get destroyed (when the
SDK path object is finalized) while we are still referencing and using that object
in the DisplayList code. This causes undefined errors such as crashes and hanging
as we iterate through the operations of a destroyed (and garbage-filled) path object.

The fix is to use the existing ResourceCache to refcount the original path until
we are done with it.

Issue #6414050 Analytics Dogfood App crashes reliably on Jellybean

Change-Id: I5dbec5c069f7d6a1e68c13424f454976a7d188e9
2012-05-03 11:14:50 -07:00
Chris Craik
2fe99801e8 Add temporary functor lifetime logging
bug:6405861

Note: revert once the above bug is verified fixed

Change-Id: Iae04ec6ffa73a2711f96e128d60011bcb5864b5c
2012-05-02 16:37:24 -07:00
Chet Haase
6f9ad204cc Fix launcher invisibility bug
There was a bug in the DisplayList code for layers where we would
set the alpha value for a layer only if the alpha were non-1. This works
most of the time (since the value is usually 1 and doesn't need to
be set at all, and if the value is non-1, it is set correctly). But when
the value has been set to a non-1 value, setting alpha back to 1 cannot happen
due to this logic. This caused launcher to have some invisible pages when
returning to Home because those pages previously had an alpha value of 0, and
setting the alpha to 1 had no effect due to this DisplayList code.

The fix is to simply remove the check for non-1 values; we should
always set the alpha value of layers to handle all cases.

Issue #6413892 alpha value is messed up after AlphaAnimation

Change-Id: Ia51acb2eaaf0609ea7189998ed449bdd9ea7e05f
2012-05-01 10:05:13 -07:00
Romain Guy
665a376d24 Merge "Work-around for a Skia rasterization bug Bug #6411457" into jb-dev 2012-04-27 15:20:04 -07:00
Romain Guy
fdd6fc1beb Work-around for a Skia rasterization bug
Bug #6411457

Skia does not generates the bottom right pixel of a rect when
drawing a rect as an SkPath into an alpha8 bitmap.

Change-Id: Ifb5286ae67745c9e44ee387b6d6ad607a9a2e6ce
2012-04-27 11:47:13 -07:00
Romain Guy
8bd12ea800 Merge "Decode common GL error codes when logging frame error status" into jb-dev 2012-04-26 14:06:41 -07:00
Romain Guy
a44a63ac5c Decode common GL error codes when logging frame error status
Change-Id: I38b333eea53aef20340ce48dfcb0dd30a223f7a8
2012-04-26 14:05:02 -07:00