996fe656340ede058a6f0e6b18f9ec525ddb4e27 |
|
21-Sep-2013 |
Chris Craik <ccraik@google.com> |
Correct bitmap merging logic bug:10863163 This fixes two issues The check for pure translation was incorrect. It was fixed and renamed for clarity. Certain matrix paths weren't setting kTypePositiveScale. For simplicity (and because positive scale is simple to check) removed flag in favor of dynamic checking. Change-Id: Ic5ce235653ef49a68b8b242bd89fc2e95874ecc9
/frameworks/base/libs/hwui/DisplayListOp.h
|
d965bc5823d878a3fd056b8a95fb4eb578ed3fe4 |
|
16-Sep-2013 |
Chris Craik <ccraik@google.com> |
Disallow negative scale matrices in merged Bitmap drawing bug:10622962 Change-Id: I55ac18ad56b53dc9e6e6ea14cd3ec4bdafa98ac3
/frameworks/base/libs/hwui/DisplayListOp.h
|
c1c5f0870282b56dafe5a4d756e4b9e6884655a7 |
|
12-Sep-2013 |
Chris Craik <ccraik@google.com> |
Move DeferredDisplayState out of ops bug:9969358 Instead of storing DeferredDisplayState within an op (thus forcing ops to be tied to a single state instance), associate each op with a new state at DeferredDisplayList insertion time. Now, DisplayLists (and the ops within) can be reused in a single DeferredDisplayList draw call, as ops will use different state instances at different points in the frame. Change-Id: I525ab2abe0c3883679f2fa00b219b293e9ec53d9
/frameworks/base/libs/hwui/DisplayListOp.h
|
9b5a1a28c327e6113d68302b1f0eed1d1c6f6183 |
|
09-Aug-2013 |
Romain Guy <romainguy@google.com> |
Take shadow bounds into account for quick rejects Bug #8634346 Change-Id: I995c5205c2959d8e4da638ae47fedcda92eb1b36
/frameworks/base/libs/hwui/DisplayListOp.h
|
7f6d6b0370df4b5a9e0f45bffc31ea6caeeb509d |
|
06-Aug-2013 |
Romain Guy <romainguy@google.com> |
Split assets atlas batches Bug #10185769 The assets atlas contains assets that need to be blended and assets that do not need to be blended. With a single merge id, currently set to be the pointer to the atlas itself, draw ops merging could generate batches of commands containing both opaque and translucent assets. The blend state was chosen from only one of the assets in the batch, leading either to inefficiencies (blending large opaque assets) or incorrect behaviors (not blending translucent assets.) This change introduces two new merge ids in the atlas: an opaque key and a blend key. These keys are simple booleans set to false and true respectively (the values do not matter really.) Their memory addresses are used as the merge ids when createing draw ops batches, allowing all opaque ops to be batched together and all translucent ops to be batched together. Change-Id: I114dba0533c44987e53864b471ccb28c811f2025
/frameworks/base/libs/hwui/DisplayListOp.h
|
b213cec0ce659c1e35c3e7f60a61bae38d94482a |
|
02-Aug-2013 |
Chris Craik <ccraik@google.com> |
Merge "Fix quickReject's handling of AA ramp geometry"
|
5e49b307eb99269db2db257760508b8efd7bb97d |
|
31-Jul-2013 |
Chris Craik <ccraik@google.com> |
Fix quickReject's handling of AA ramp geometry By having quickReject round out the window-space geometry bounds, we prevent the AA perimeter (which falls outside the local bounds passed in) from drawing outside the clip. Change-Id: I8ee36be9039a9c47906815ee2f0dbaa5eb910b82
/frameworks/base/libs/hwui/DisplayListOp.h
|
b7b93e00893f5c690a96bd3e0e10583bc5721f83 |
|
02-Aug-2013 |
Romain Guy <romainguy@google.com> |
Fix region clipping bugs See external bug #58344 Change-Id: Iecd6c41fc8076cd76add2335d3442a6dd8878f12
/frameworks/base/libs/hwui/DisplayListOp.h
|
4e7b772b733593fbe25c733e95b8dcea293234b6 |
|
16-Jul-2013 |
Romain Guy <romainguy@google.com> |
Fix crashes in setMatrix() and concat() setMatrix() was crashing in native code, only with hw acceleration on. concat() would throw a NullPointerException. It now ignores null matrices. Change-Id: Iebd8b410a957d2ba501570c6fbb3f680ff4a1a23
/frameworks/base/libs/hwui/DisplayListOp.h
|
55b6f95ee4ace96c97508bcd14483fb4e9dbeaa0 |
|
28-Jun-2013 |
Romain Guy <romainguy@google.com> |
Track the atlas' generation ID Bug #9589379 If the atlas is terminated/reinitialized and a view does not invalidate in between it might end up using a stale AssetAtlas::Entry. This change is similar to how 9patch meshes are cached in DrawPatchOp: we simply track the generation ID of the cache to make sure we always use the latest data. Change-Id: Ib5abb3769d2ce0eabe9adc04e320ca27c422019e
/frameworks/base/libs/hwui/DisplayListOp.h
|
2c290392c9a934f9ac48364af01c848b01ba8e80 |
|
21-Jun-2013 |
Romain Guy <romainguy@google.com> |
Merge "Batch 9-patches in a single mesh whenever possible"
|
03c00b5a135e68d22ca5bb829b899ebda6ed7e9d |
|
21-Jun-2013 |
Romain Guy <romainguy@google.com> |
Batch 9-patches in a single mesh whenever possible This change also fixes the way batched bitmaps were handled inside a layer. The layer is now correctly dirtied to minimize the amount of pixels to blend. Fix alpha, mode and opaque computations for DrawPatchOp. Change-Id: I1b6cd581c0f0db66c1002bb4fb1a9811e55bfa78
/frameworks/base/libs/hwui/DisplayListOp.h
|
c5493fb7fa1f6995955c667d4377f2337f2cf465 |
|
20-Jun-2013 |
Chris Craik <ccraik@google.com> |
Make op outputting const, for more general logging Change-Id: Iaf78985ee5558e0b5d32d7bc1cd039eaffc820e5
/frameworks/base/libs/hwui/DisplayListOp.h
|
49cc5d71192cbd776e237488218aea18a3ed14b1 |
|
18-Jun-2013 |
Chris Craik <ccraik@google.com> |
Merge "Handle all text bounds as post-translated"
|
f09b746acb266a849f3421df1604ebec161bb93d |
|
18-Jun-2013 |
Chris Craik <ccraik@google.com> |
Handle all text bounds as post-translated We were treating immediate mode bounds as pre translate, which is inconsistent with using them for quickRejection. This fixes the overdraw counter not drawing correctly (since it uses immediate mode drawing. Change-Id: I1c734d367a00942bd7d9b041822c0a9f284e70a8
/frameworks/base/libs/hwui/DisplayListOp.h
|
d72b73cea49f29c41661e55eb6bfdbc04f09d809 |
|
17-Jun-2013 |
Chris Craik <ccraik@google.com> |
Better handle op size edge cases bug:9464358 Previously, empty and unknown sized ops are assumed to fully cover their clip. This is now corrected such that empty sized ops are pre-rejected before defer. Additionally, unknown sized ops disable overdraw avoidance. Change-Id: Icf2ce24f98be5ea6299e24ffcf826790373564a1
/frameworks/base/libs/hwui/DisplayListOp.h
|
5216c3b05fc6c7bacd74be67b932fe3aba89cc8e |
|
15-Jun-2013 |
Romain Guy <romainguy@google.com> |
Merge more 9patches Change-Id: If8b16af84f0ee42afc406922d15897e51d833e68
/frameworks/base/libs/hwui/DisplayListOp.h
|
28ce94a4ffc7576f40776d212f1ada79fafaa061 |
|
31-May-2013 |
Chris Craik <ccraik@google.com> |
Overdraw avoidance and merging of clipped ops bug:8951267 If an opaque op, or group of opaque ops covers the invalidate region, skip draw operations that precede it. Clipped operations may now be merged, but only if they share a clipRect - this is a very case for e.g. ListView, where all background elements may now be a part of the same MergingDrawBatch. It is this more aggressive merging that groups together clipped background elements in the ListView case, enabling the overdraw avoidance skipping the window background. Change-Id: Ib0961977e272c5ac37f59e4c67d828467422d259
/frameworks/base/libs/hwui/DisplayListOp.h
|
4c2547fa9244e78115cde0a259291053108c3dc7 |
|
12-Jun-2013 |
Romain Guy <romainguy@google.com> |
Avoid 9patch cache lookups when possible This optimization saves up to 0.3ms per frame on the Play Store's front page, on a Nexus 4 device. Change-Id: Iaa4ef33c6e3b37e175efd5b9eea9ef59b43f14f3
/frameworks/base/libs/hwui/DisplayListOp.h
|
7f77736599c39cdd5540168fc652cf6846799a33 |
|
22-May-2013 |
Romain Guy <romainguy@google.com> |
Merge "Merge scaled bitmaps with translated bitmaps"
|
2db5e993b626794eb07a0ff354269f9a77da81b3 |
|
22-May-2013 |
Romain Guy <romainguy@google.com> |
Merge scaled bitmaps with translated bitmaps Change-Id: I03089f48f97b69fcb4a0171984d3ff548d41c4a8
/frameworks/base/libs/hwui/DisplayListOp.h
|
41541825bc90dac740e424cdd41a8c997e15cdb7 |
|
04-May-2013 |
Chris Craik <ccraik@google.com> |
Use individual glyph positions to determine text bounds. bug:8766924 Previously text bounds were calculated to be from 0 to totalAdvance in the X, and from the font's top to bottom. These are incorrect, especially in light of the font fallback mechanism. Now, we calculate the bounds of the text as we layout each glyph. Since these are much tighter bounds in the common case, this significantly reduces the amount of clipping required (which in turn enables more aggressive text merging). Change-Id: I172e5466bf5975bf837af894a9964c41db538746
/frameworks/base/libs/hwui/DisplayListOp.h
|
3b748a44c6bd2ea05fe16839caf73dbe50bd7ae9 |
|
18-Apr-2013 |
Romain Guy <romainguy@google.com> |
Pack preloaded framework assets in a texture atlas When the Android runtime starts, the system preloads a series of assets in the Zygote process. These assets are shared across all processes. Unfortunately, each one of these assets is later uploaded in its own OpenGL texture, once per process. This wastes memory and generates unnecessary OpenGL state changes. This CL introduces an asset server that provides an atlas to all processes. Note: bitmaps used by skia shaders are *not* sampled from the atlas. It's an uncommon use case and would require extra texture transforms in the GL shaders. WHAT IS THE ASSETS ATLAS The "assets atlas" is a single, shareable graphic buffer that contains all the system's preloaded bitmap drawables (this includes 9-patches.) The atlas is made of two distinct objects: the graphic buffer that contains the actual pixels and the map which indicates where each preloaded bitmap can be found in the atlas (essentially a pair of x and y coordinates.) HOW IS THE ASSETS ATLAS GENERATED Because we need to support a wide variety of devices and because it is easy to change the list of preloaded drawables, the atlas is generated at runtime, during the startup phase of the system process. There are several steps that lead to the atlas generation: 1. If the device is booting for the first time, or if the device was updated, we need to find the best atlas configuration. To do so, the atlas service tries a number of width, height and algorithm variations that allows us to pack as many assets as possible while using as little memory as possible. Once a best configuration is found, it gets written to disk in /data/system/framework_atlas 2. Given a best configuration (algorithm variant, dimensions and number of bitmaps that can be packed in the atlas), the atlas service packs all the preloaded bitmaps into a single graphic buffer object. 3. The packing is done using Skia in a temporary native bitmap. The Skia bitmap is then copied into the graphic buffer using OpenGL ES to benefit from texture swizzling. HOW PROCESSES USE THE ATLAS Whenever a process' hardware renderer initializes its EGL context, it queries the atlas service for the graphic buffer and the map. It is important to remember that both the context and the map will be valid for the lifetime of the hardware renderer (if the system process goes down, all apps get killed as well.) Every time the hardware renderer needs to render a bitmap, it first checks whether the bitmap can be found in the assets atlas. When the bitmap is part of the atlas, texture coordinates are remapped appropriately before rendering. Change-Id: I8eaecf53e7f6a33d90da3d0047c5ceec89ea3af0
/frameworks/base/libs/hwui/DisplayListOp.h
|
dd671599bed9d3ca28e2c744e8c224e1e15bc914 |
|
19-Apr-2013 |
Chet Haase <chet@google.com> |
Fix quickReject logic to account for setClipChildren() setting The rendering code optimizes by rejecting drawing operations that lie outside of the bounds of their views. This works in most situations, but breaks down when containers have called setClipChildren(false), because we reject drawing that is outside of that container, but which should be drawn anyway. Fix is to pass in the value of that flag to the DisplayList drawing routines which take that flag into account when deciding whether to quickReject any particular operation. Issue #8659277 animation clipping Change-Id: Ief568e4db01b533a97b3c5ea5ad777c03c0eea71
/frameworks/base/libs/hwui/DisplayListOp.h
|
ee5b2c6de7fb32d945a5a1303012a5f94b719dfa |
|
18-Apr-2013 |
Chris Craik <ccraik@google.com> |
Prevent transformed ops from merging in the first place bug:8649215 Previously we prevented ops with non-translate transforms from merging, but missed the case of the first op in a merging batch containing a non-translate transform. This fulfills the assumption of drawText's non-immediate mode that merged ops will have pure translate transforms. Change-Id: I6f6db341aff3f7e84e74b4c3ccf970d585a2db1a
/frameworks/base/libs/hwui/DisplayListOp.h
|
527a3aace1dd72432c2e0472a570e030ad04bf16 |
|
04-Mar-2013 |
Chris Craik <ccraik@google.com> |
Draw Operation merging Merge simple bitmap draw operations and text operations to avoid issuing individual gl draws for each operation. Merging other ops to be done eventually. The methods are different - the bitmap merging generates a single mesh for reused, unclipped images (esp. repeated images in a listview) The text approach queries just defers the normal font rendering until the last drawText in the sequence that can share the same shader. Patches are sorted and merged, but don't yet have a multiDraw implementation. For now, the pretending-to-merge gives better sorting behavior by keeping similar patches together. Change-Id: Ic300cdab0a53814cf7b09c58bf54b1bf0f58ccd6
/frameworks/base/libs/hwui/DisplayListOp.h
|
e7c69c6fe3eac1fb01126ede550e5dc32979804a |
|
03-Apr-2013 |
Chris Craik <ccraik@google.com> |
Account for hairlines in quick rejection logic bug:8531373 Change-Id: I35444014f23fc61da687694fccc0d13bce718793
/frameworks/base/libs/hwui/DisplayListOp.h
|
7273daace9303f4662444111c40bb83d3ead4a92 |
|
28-Mar-2013 |
Chris Craik <ccraik@google.com> |
Fix issues related to saveLayer/restore deferral bug:8464795 Changes drawModifiers and alpha to be restored for all operations, since saveLayer/restore use these values, not just draw operations Also forces a renderer state restoration before a deferred restore op is played back, in case it is associated with a saveLayer that doesn't have the save_clip flag set Change-Id: I9da5d44fefbfffdee164c98f4f139843dacf85df
/frameworks/base/libs/hwui/DisplayListOp.h
|
d90144db52c7297879b950cbbc85137ed123ab5b |
|
19-Mar-2013 |
Chris Craik <ccraik@google.com> |
Update snapshot upon saveLayer deferral bug:8409891 In order to defer fbo-targetting saveLayer operations, it's necessary to update the snapshot at defer time so that deferred display state (namely, clip and transform) are fbo relative. Re-enables deferring, as the issues with saveLayer are fixed. Change-Id: I74b0779bc732675c747208f0757c3ea85f6dfbed
/frameworks/base/libs/hwui/DisplayListOp.h
|
4494599e5a4931426d5649e1d1c4f9db83824ae8 |
|
20-Mar-2013 |
Chris Craik <ccraik@google.com> |
Merge "Use snapshot alpha for layers" into jb-mr2-dev
|
a08f95cfeca7217f9c533b03663bf0dceedd259a |
|
16-Mar-2013 |
Chris Craik <ccraik@google.com> |
Use snapshot alpha for layers Removes mMultipliedAlpha, using the snapshot alpha for all non-overlapping display list alpha control. Additionally, fixes opacity issues where children of hasOverlappingRendering=false displaylists (both hw layer sublists and other sublists with hasOverlappingRendering=false) Change-Id: I6adc16da855835f9f518f8967628e5d0135c789b
/frameworks/base/libs/hwui/DisplayListOp.h
|
f40b8a939fef0a19b40188f007a3364311d6dabf |
|
15-Mar-2013 |
Chris Craik <ccraik@google.com> |
Merge "Fully deferred displaylist replay" into jb-mr2-dev
|
ff78583d8a73ca35ce65b5d2592570ff6fb9901b |
|
08-Mar-2013 |
Chris Craik <ccraik@google.com> |
Fully deferred displaylist replay bug:8037003 A recursive drawDisplayList call is now entirely deferred before playing back to the screen and issuing GL commands. This way, the entire stream can be inspected, optimized, and batch work (such as uploading textures) before issuing commands. Additionally, this fixes an issue where operations draw could move across restores corresponding to saveLayer(alpha). Those and other similar cases (such as complex clipping, requiring the stencil) are now treated as batching barriers, with the operations that change renderer state in a way that's difficult to defer are just re-issued at flush time. Change-Id: Ie7348166662a5ad89fb9b1e87558334fb826b01e
/frameworks/base/libs/hwui/DisplayListOp.h
|
bd3055f95e67a55648fd84a125e939293115171b |
|
14-Mar-2013 |
Romain Guy <romainguy@google.com> |
Less aggressive glyphs precaching The renderer used to pre-cache glyphs at record time. This then changed to pre-caching at the beginning of every frame. This unfortunately entails a lot of duplicate work on every frame, which amounts to 0.5 to 1ms in some stock applications. This change is somewhere in the middle: pre-caching happens the first time a DrawTextOp is deferred or every time the screen-space transform is different from the last pre-caching operation. Change-Id: Id6d9e2599d90a5b75010b0f0a28746befbf3c205
/frameworks/base/libs/hwui/DisplayListOp.h
|
ca89e2a68703bd428e8b66547d033a6ed35b3595 |
|
09-Mar-2013 |
Romain Guy <romainguy@google.com> |
Precache paths from a worker thread Change-Id: I3e7b53d67e0e03e403beaf55c39350ead7f1e309
/frameworks/base/libs/hwui/DisplayListOp.h
|
624234f69b2a4781d24f3e4c6ae6450729e38397 |
|
06-Mar-2013 |
Romain Guy <romainguy@google.com> |
Take only the scale params into account to rasterize text This change extracts the scale parameters of the current transform to pass then to the font renderer. Rotation and perspective are applied to the generated mesh inside the vertex shader. This limits the number of glyphs we have to create in the font cache and thus reduces memory churn. Change-Id: Ic5b3bae2b2b0e0250a8ee723b071a1709725c749
/frameworks/base/libs/hwui/DisplayListOp.h
|
0f6675332c04c74909425d1d328f02b32c0ff40e |
|
01-Mar-2013 |
Romain Guy <romainguy@google.com> |
Precache glyphs at final raster size The deferred display lists model now allows us to precache glyphs at their exact size on screen. This change also removes debug markers when the renderer defers and reorders display lists. It also adds a flush event marker. Change-Id: I66ec5216dc12b93ecfdad52a7146b1cfb31fbeb4
/frameworks/base/libs/hwui/DisplayListOp.h
|
d6960a49b40703e8af55c1fb628a2e0c5d2b40cf |
|
28-Feb-2013 |
Chris Craik <ccraik@google.com> |
Account for text alignment in Op bounds calculation bug:8243821 Previously this wasn't done for deferred clipping + reordering, so non-left-aligned text would be clipped at defer time, when it wouldn't have been at draw time (in OpenGLRenderer::quickReject()) Change-Id: Ic96949c2dca4378f284606b37d9411ed42f8d203
/frameworks/base/libs/hwui/DisplayListOp.h
|
758724fd09a1599f2c55130f81953cfa6c17c300 |
|
27-Feb-2013 |
Romain Guy <romainguy@google.com> |
Don't increment the paint's generation ID when drawing bitmaps When the renderer draws a bitmap as part of a display list with an alpha < 1.0f, the paint is temporarily modified to alter the opacity of the bitmap. This has the side effect of increasing the paint's generation ID counter which can break paint caching. Change-Id: I5055d059ad1639829fa50af3d946e296c4dab877
/frameworks/base/libs/hwui/DisplayListOp.h
|
505d1d64eda6e47caabf8701cb39ec9b176b3238 |
|
22-Feb-2013 |
Romain Guy <romainguy@google.com> |
Merge "Prettify display lists logging"
|
7031ff68bb998dbbd7caf3b2fd75eef747a86725 |
|
22-Feb-2013 |
Romain Guy <romainguy@google.com> |
Prettify display lists logging This change makes it a lot easier to see the tree structure. Change-Id: I4969abd1eb010f1d529671f8d86dc4c930be24f6
/frameworks/base/libs/hwui/DisplayListOp.h
|
b98a016c6769b9e80d392df22fe77a2fca048d9f |
|
21-Feb-2013 |
Chris Craik <ccraik@google.com> |
Fix clipping and stencil layer issues bug:8235699 Ensure rectangle clipping operations disable deferring when necessary (i.e., when the op might create a non-rect region), including in DisplayList::setViewProperties Additionally, makes clipping with a kUnion always use a region, for consistency with software rendering Change-Id: I6730f1a80250bcf3f91cd4afde646d470a12dbc2
/frameworks/base/libs/hwui/DisplayListOp.h
|
5d11676414b3606792e23c269cf75b44faa1a2af |
|
20-Feb-2013 |
Chris Craik <ccraik@google.com> |
Clean up clipping and deferral logic bug:8037003 -Merges replay methods -Bounds checking for DrawBitmapMesh, DrawRects and DrawDisplayList -Use clip as bounds for otherwise unbounded draw operations Clip-as-bounds is correct for drawColor and functor, but other draw operations (pos text, text on path, and layers) still need true bounds calculation Change-Id: I5d5149d2c624f01e3fe46628bf156e835e69b9d5
/frameworks/base/libs/hwui/DisplayListOp.h
|
c3566d06421c8acc0aafb18f7e307e5725ce87e1 |
|
05-Feb-2013 |
Chris Craik <ccraik@google.com> |
DisplayList draw operation reordering bug:8037003 The reordering enables similar operations to draw together, minimizing the OpenGL state change operations that go inbetween draws. Eventually, multiple complete canvas draw operations will be merged (into a single glDrawArrays call, for example) Reorders DisplayList draw operations when: -They can move backwards in the command stream to be after similar operations without violating draw ordering -The OpenGLRenderer is in a simple, replayable state (no complex clip, or filter/shadow etc) Also adds two system properties to control the deferral/reordering: "debug.hwui.disable_draw_defer" "debug.hwui.disable_draw_reorder" which can be set to "true" to control the display list manipulation Change-Id: I5e89f3cb0ea2d2afd3e15c64d7f32b8406777a32
/frameworks/base/libs/hwui/DisplayListOp.h
|
0776a6069365bdea83855db154fa2d37f9d1d808 |
|
15-Feb-2013 |
Chris Craik <ccraik@google.com> |
Move DisplayList to its own cpp file Change-Id: Ic9c1bbf4673ad5c756f3908b2ab7e699edd6a119
/frameworks/base/libs/hwui/DisplayListOp.h
|
3dc553babe515fbf9bd042dd63a792e5de578ecd |
|
04-Feb-2013 |
Chris Craik <ccraik@google.com> |
Simplify display list logging, removing pointers Also fix save indents Change-Id: Ia1add83422fbc200b85fd6688f5be60292b0f178
/frameworks/base/libs/hwui/DisplayListOp.h
|
2af4635e4a9e448a65ff541252f8f94bc6ac48e0 |
|
27-Nov-2012 |
Chris Craik <ccraik@google.com> |
Object-based DisplayList recording bug:8037003 Changes the DisplayList from using stream read/write commands to use an array of objects manually allocated on a linear buffer. Depends on frameworks/native change https://googleplex-android-review.googlesource.com/#/c/257695/ which adds LinearAllocator Also changes drawRects to use float count instead of rect count, to be more like drawLines/drawPoints Change-Id: Ia2e4a11acd8f0a757042a05cbc9e7563cb73ee47
/frameworks/base/libs/hwui/DisplayListOp.h
|