History log of /frameworks/base/libs/hwui/RecordedOp.h
Revision Date Author Comments (<<< Hide modified files) (Show modified files >>>)
3e9999bd866fac71c72e6b484a9836c87c328a08 20-Jan-2017 sergeyv <sergeyv@google.com> Explicitly destroy Layer in DeferredLayerUpdater on destroyHardwareResources()

Change-Id: I0987104eabda9a2a302b9e765213aad48f93aea4
Test: refactoring CL. Existing tests still pass
bug:33753499
/frameworks/base/libs/hwui/RecordedOp.h
8cd3edfa15cc9cdbffa935d19ab894426b08d174 09-Jan-2017 Greg Daniel <egdaniel@google.com> Break Layer class into Gl and Vulkan subclasses

Test: manual testing
Change-Id: Ibd2beed39de3ac6da7448e96496253cfe427dfbb
/frameworks/base/libs/hwui/RecordedOp.h
ec4a4b13eae2241d1613890c1c1c096bed891845 21-Oct-2016 sergeyv <sergeyv@google.com> Use Bitmap in DisplayList & RecordedOps instead of SkBitmap
Test: refactoring cl.
bug:32216791

Change-Id: I1d8a9a6e772e2176b6c2409409a910478b45f8db
/frameworks/base/libs/hwui/RecordedOp.h
260ab726486317496bc12a57d599ea96dcde3284 07-Oct-2016 Mike Reed <reed@google.com> use SkBlendMode instead of SkXfermode
use sk_sp versions of paint setters/getters

Change-Id: I86591a0a8ec92e6039776cbf00424ea24f585b28
/frameworks/base/libs/hwui/RecordedOp.h
253f2c213f6ecda63b6872aee77bd30d5ec07c82 29-Sep-2016 Romain Guy <romainguy@google.com> Linear blending, step 1

NOTE: Linear blending is currently disabled in this CL as the
feature is still a work in progress

Android currently performs all blending (any kind of linear math
on colors really) on gamma-encoded colors. Since Android assumes
that the default color space is sRGB, all bitmaps and colors
are encoded with the sRGB Opto-Electronic Conversion Function
(OECF, which can be approximated with a power function). Since
the power curve is not linear, our linear math is incorrect.
The result is that we generate colors that tend to be too dark;
this affects blending but also anti-aliasing, gradients, blurs,
etc.

The solution is to convert gamma-encoded colors back to linear
space before doing any math on them, using the sRGB Electo-Optical
Conversion Function (EOCF). This is achieved in different
ways in different parts of the pipeline:

- Using hardware conversions when sampling from OpenGL textures
or writing into OpenGL frame buffers
- Using software conversion functions, to translate app-supplied
colors to and from sRGB
- Using Skia's color spaces

Any type of processing on colors must roughly ollow these steps:

[sRGB input]->EOCF->[linear data]->[processing]->OECF->[sRGB output]

For the sRGB color space, the conversion functions are defined as
follows:

OECF(linear) :=
linear <= 0.0031308 ? linear * 12.92 : (pow(linear, 1/2.4) * 1.055) - 0.055

EOCF(srgb) :=
srgb <= 0.04045 ? srgb / 12.92 : pow((srgb + 0.055) / 1.055, 2.4)

The EOCF is simply the reciprocal of the OECF.
While it is highly recommended to use the exact sRGB conversion
functions everywhere possible, it is sometimes useful or beneficial
to rely on approximations:

- pow(x,2.2) and pow(x,1/2.2)
- x^2 and sqrt(x)

The latter is particularly useful in fragment shaders (for instance
to apply dithering in sRGB space), especially if the sqrt() can be
replaced with an inversesqrt().

Here is a fairly exhaustive list of modifications implemented
in this CL:

- Set TARGET_ENABLE_LINEAR_BLENDING := false in BoardConfig.mk
to disable linear blending. This is only for GLES 2.0 GPUs
with no hardware sRGB support. This flag is currently assumed
to be false (see note above)
- sRGB writes are disabled when entering a functor (WebView).
This will need to be fixed at some point
- Skia bitmaps are created with the sRGB color space
- Bitmaps using a 565 config are expanded to 888
- Linear blending is disabled when entering a functor
- External textures are not properly sampled (see below)
- Gradients are interpolated in linear space
- Texture-based dithering was replaced with analytical dithering
- Dithering is done in the quantization color space, which is
why we must do EOCF(OECF(color)+dither)
- Text is now gamma corrected differently depending on the luminance
of the source pixel. The asumption is that a bright pixel will be
blended on a dark background and the other way around. The source
alpha is gamma corrected to thicken dark on bright and thin
bright on dark to match the intended design of fonts. This also
matches the behavior of popular design/drawing applications
- Removed the asset atlas. It did not contain anything useful and
could not be sampled in sRGB without a yet-to-be-defined GL
extension
- The last column of color matrices is converted to linear space
because its value are added to linear colors

Missing features:
- Resource qualifier?
- Regeneration of goldeng images for automated tests
- Handle alpha8/grey8 properly
- Disable sRGB write for layers with external textures

Test: Manual testing while work in progress
Bug: 29940137

Change-Id: I6a07b15ab49b554377cd33a36b6d9971a15e9a0b
/frameworks/base/libs/hwui/RecordedOp.h
25c9f6cede5705406294a5043363952c316facb2 01-Sep-2016 Chih-hung Hsieh <chh@google.com> Merge "Fix google-explicit-constructor warnings in libs/hwui." am: 7207562ff7 am: d7a69e04eb am: 842f1e48e7
am: 1f50f80aab

Change-Id: I713bd07fee150cc684e630045e02872b23062a5a
a619ec70cf765d9166f0862e74653711b87307b3 29-Aug-2016 Chih-Hung Hsieh <chh@google.com> Fix google-explicit-constructor warnings in libs/hwui.

* Add explicit keyword to conversion constructors,
or add NOLINT for implicit converters.
Bug: 28341362
Test: build with WITH_TIDY=1

Change-Id: Id8ca42433a4fc3652e4cb13787c4cb169f20d9a9
/frameworks/base/libs/hwui/RecordedOp.h
5e00c7ce063116c11315639f0035aca8ad73e8cc 07-Jul-2016 Chris Craik <ccraik@google.com> Delete old rendering pipeline

fixes: 30002246

Change-Id: I45df0e924708526cee045b14c291bd23aa1a92db
/frameworks/base/libs/hwui/RecordedOp.h
74af6e282f8a8f75928a071e8200039517cf5c12 05-Apr-2016 Chris Craik <ccraik@google.com> Fix OffscreenBuffer leak

Fixes: 27941148

Make OffscreenBuffer lifecycle an explicit (and tested) contract between
FrameBuilder and BakedOpRenderer, entirely separate from dispatch. This
makes it safe to reject any rendering work via overdraw content
rejection (before it gets to a BakedOpDispatcher).

Adds a couple tests around OffscreenBuffer leaks, and switches
OffscreenBuffer tests to RENDERTHREAD_TEST macro, as appropriate.

Change-Id: Id114b835d042708ae921028fb4b17e5fa485fe64
/frameworks/base/libs/hwui/RecordedOp.h
aafb01d8ade0def3f51b74ae3bbc610c4ab33044 26-Mar-2016 Chris Craik <ccraik@google.com> Consume TextureView matrix safely

Fixes: 27825042

TextureView's matrix may not be set at record time - delay using it
until on RenderThread, when deferring the op.

Change-Id: Icf8b55d656e304ec049ca803b042dc2359482db2
/frameworks/base/libs/hwui/RecordedOp.h
a204848b1dc63877a12e2d24108e9d8e1e691e28 25-Mar-2016 Chris Craik <ccraik@google.com> Create first class unbounded ColorOp

bug:27810783

Previous drawColor->drawPaint conversion failed to preserve unbounded
nature of drawColor from old pipeline.

Change-Id: Ifd7a7b9d645f0887e252e48ca95d3195ee31615f
/frameworks/base/libs/hwui/RecordedOp.h
4c3980b6e43cc7c0541f54b8e7e2d9d6108be622 15-Mar-2016 Chris Craik <ccraik@google.com> Handle unbounded drawPaint/drawGLFunction operations safely

bug:26591194

Also, revert to using current clip bounds as drawColor/drawPaint bounds
for simplicity in new pipeline.

Change-Id: I1a6b3f9716b564b46df41d57dfe14475fdd24de0
/frameworks/base/libs/hwui/RecordedOp.h
91eff22b5d7f8fe551bae01331948858ce932a96 22-Feb-2016 Chris Craik <ccraik@google.com> Support op dumping in new pipeline

bug:26565102

Change-Id: I266e420a2f18ba9ad62942b8a0de295dfa3a2a88
/frameworks/base/libs/hwui/RecordedOp.h
766431aa57c16ece8842287a92b2e7208e3b8ac3 04-Feb-2016 Doris Liu <tianliu@google.com> Revert "Revert "VectorDrawable native rendering - Step 4 of MANY""

This reverts commit 5a11e8d0ba21624025b89ac63bbd18befa55be0e.

Change-Id: I7a48b59c4f930dad65ddc8590c25a12636244ea2
/frameworks/base/libs/hwui/RecordedOp.h
5a11e8d0ba21624025b89ac63bbd18befa55be0e 04-Feb-2016 Doris Liu <tianliu@google.com> Revert "VectorDrawable native rendering - Step 4 of MANY"

b/26949340 and b/26975469, b/26975079 as well

This reverts commit f276acd98457bcaabc9e79a17a736b3b484f005e.

Change-Id: I4b55177daf0d289bc03604c71fd4bf579f65073a
/frameworks/base/libs/hwui/RecordedOp.h
bcda2da5fe9ab9ee1fe765e1e80a49c12c86cdca 03-Feb-2016 Chris Craik <ccraik@google.com> Merge "Early kickoff of shadow tasks"
6e068c0182f6f85bccb855a647510724d1c65a13 16-Jan-2016 Chris Craik <ccraik@google.com> Early kickoff of shadow tasks

bug:26562703

Change-Id: I7cdf18f2c662380bd31c7ffeefd5c3f569e5c1c6
/frameworks/base/libs/hwui/RecordedOp.h
f276acd98457bcaabc9e79a17a736b3b484f005e 07-Jan-2016 Doris Liu <tianliu@google.com> VectorDrawable native rendering - Step 4 of MANY

This CL runs VectorDrawable animation on RenderThread. The changes in this CL
include:
- Convert all the animators in AnimatorSet for AVD into a set of RenderNodeAnimators.
- Hook up the new animators with RenderThread
- Add drawOp in RecordingCanvas for drawing VD so that during the animation
on RenderThread, all the property changes on VD can be reflected on the screen.

TODO:
- Implement reverse and reset for AVD.

Change-Id: I2df1d754f2db0ad098d9c15dde4bb2bdfafc2315
/frameworks/base/libs/hwui/RecordedOp.h
b87eadda1818034ce03d85f30388384d1ac65916 06-Jan-2016 Chris Craik <ccraik@google.com> Partial unclipped save layer support

Not yet implemented in renderer.

Change-Id: I491ec6e7886bfa313d1db71dd5981690d45b78a9
/frameworks/base/libs/hwui/RecordedOp.h
7cbf63da4f29e5a6b131796eb3b67fd9ff1521b8 06-Jan-2016 Chris Craik <ccraik@google.com> Rework op macros

Makes it simpler to add defer-only or render-only opps.

Change-Id: I6c8ec64e76d419635429055cff6d96360d21706d
/frameworks/base/libs/hwui/RecordedOp.h
e5b50197e870aa6d22c3893f5d25f4279f06e5c3 05-Jan-2016 Chris Craik <ccraik@google.com> Support for stencil clipping in layers

bug:22480459

Change-Id: Ic9e8652379524ccc46d8722ce49f9190b08a2abc
/frameworks/base/libs/hwui/RecordedOp.h
e4db79de127cfe961195f52907af8451026eaa20 23-Dec-2015 Chris Craik <ccraik@google.com> Stencil support in new recorder/reorderer

bug:22480459
bug:26358504

Adds complex (non-rectangular) clipping support, and overdraw
visualization. Doesn't support stencil clipping in layers.

Change-Id: I8d10c7f1d2769ab5756774ca672344cc09901f87
/frameworks/base/libs/hwui/RecordedOp.h
d2dfd8f128b632ed99418ab2b32949c939a9a369 16-Dec-2015 Chris Craik <ccraik@google.com> Add TextureView support to new renderer/reorderer

bug:22480459

Change-Id: I2e4c0bc6b904706132f3f5087ededc9cac9b40fb
/frameworks/base/libs/hwui/RecordedOp.h
d7448e65e243754f31890baef29dff187dc2e5e5 15-Dec-2015 Chris Craik <ccraik@google.com> Add TextOnPath support to new reorderer/renderer

bug:22480459

Change-Id: I302048ec09901420c15003e21e44a551cc59c7ad
/frameworks/base/libs/hwui/RecordedOp.h
e29ce6f51d681af7649c0a7cddee97c471e43eb5 11-Dec-2015 Chris Craik <ccraik@google.com> Add functor support to new reorderer/renderer

bug:22480459

Change-Id: I95df7e0504f62d254e8ffbd8d65ed5d763080b9c
/frameworks/base/libs/hwui/RecordedOp.h
4c1b495f4f9b05e34a2583eb4537cebdda981d4f 15-Dec-2015 Chris Craik <ccraik@google.com> Merge "Avoid unneeded rect params"
5430ab220b231a96b71c3e030d0303d9ce008b05 11-Dec-2015 Chris Craik <ccraik@google.com> Avoid unneeded rect params

Change-Id: I2d8dcf6b09fdc554a403ac74763bf856b5f5d9fa
/frameworks/base/libs/hwui/RecordedOp.h
268a9c0f29c16a64d5819c7dbe8b0633baedab83 10-Dec-2015 Chris Craik <ccraik@google.com> Add property animations to new reorderer/renderer

bug:22480459

Change-Id: Id8091038004245a56deb48bf3625edfd08ab8681
/frameworks/base/libs/hwui/RecordedOp.h
f09ff5aa57bff01cb17595fb7ca8e48d238a6acd 09-Dec-2015 Chris Craik <ccraik@google.com> Add bitmapmesh, rect, and patch rendering

bug:22480459

Change-Id: Id9e9146997dd018b3e4e785c2bc13689e3cf7c3c
/frameworks/base/libs/hwui/RecordedOp.h
386aa031793bb037ec43b6cdbd8908c343cc86cb 08-Dec-2015 Chris Craik <ccraik@google.com> Add more shape drawing to new reorderer/renderer

bug:22480459

Add support for outsetting final bounds based on stroke.

Change-Id: I659318ccec51882bba1906ce3c7042288ce35c30
/frameworks/base/libs/hwui/RecordedOp.h
15c3f19a445b8df575911a16e8a6dba755a084b5 03-Dec-2015 Chris Craik <ccraik@google.com> Merged op dispatch in OpReorderer

bug:22480459

Also switches std::functions to function pointers on OpReorderer, and
switches AssetAtlas' entry getter methods to using pixelRef pointers,
so it's clear they're the keys.

Change-Id: I3040ce5ff4e178a8364e0fd7ab0876ada7d4de05
/frameworks/base/libs/hwui/RecordedOp.h
8d1f2120fe80b23ab03c7168e3b6b2d13bafe2e7 25-Nov-2015 Chris Craik <ccraik@google.com> Support projection in OpReorderer

bug:22480459

Change-Id: Iceb71732dc50957cfb47fa1ba9b8e18e6fc51132
/frameworks/base/libs/hwui/RecordedOp.h
a1717271caac5e8ea3808c331d4141ac01a42134 19-Nov-2015 Chris Craik <ccraik@google.com> Initial text support in new reorderer/renderer

Removes obsolete drawPosText codepath, and unifies text decoration behavior.

Change-Id: I9c563249ab688a3394445a0e7fe1b9d0661f6f7c
/frameworks/base/libs/hwui/RecordedOp.h
98787e6c9b2c10b1ab7820bdac168686025b924a 13-Nov-2015 Chris Craik <ccraik@google.com> Finish shadow support in new reorderer/renderer

Now passes alphas and light radius, and correctly transforms light
center for layers.

Also fixes begin-frame/layer clears to be damage rect aware.

Change-Id: I3b1415cd7bf1518c510145ebebdb745f494a2542
/frameworks/base/libs/hwui/RecordedOp.h
d3daa3198e2212c985c634821682d5819346b653 06-Nov-2015 Chris Craik <ccraik@google.com> Add shadow support to new reorderer/renderer

Doesn't yet use correct lighting info (esp. in layers), or
tessellate shadows asynchronously

Change-Id: I9ccec24b28869be42138a9bb234b1af874291a44
/frameworks/base/libs/hwui/RecordedOp.h
161f54b2d4160b8d3f3da9eba5746da5162e4821 05-Nov-2015 Chris Craik <ccraik@google.com> Add z-reordering support to OpReorderer

Change-Id: I3fa969fe53cf648d145810f69fa7dada376c0b9a
/frameworks/base/libs/hwui/RecordedOp.h
0b7e8245db728d127ada698be63d78b33fc6e4da 29-Oct-2015 Chris Craik <ccraik@google.com> Initial HW layer support in new reorderer/renderer

Shares vast majority of clipped savelayer code, with only minor
differences in lifecycle.

Doesn't yet handle fill region, resize, or window transform.

Change-Id: Iabdd71811590d2b937eb11e1b01ce556ade54a5a
/frameworks/base/libs/hwui/RecordedOp.h
5854b34881b1a747ac80b5077869ef270a92b1f4 26-Oct-2015 Chris Craik <ccraik@google.com> Rework receiver/dispatcher design slightly, and replace Layer usage.

Switched from 'renderer/info' to 'dispatcher/renderer' to make their
interaction more natural. The new BakedOpRenderer is more similar in
responsibilities to the OpenGLRenderer, as it manages layer and frame
lifecycles, and performs the actual rendering.

However, it's still simpler because the BakedOpDispatcher handles
mapping Canvas drawing ops to Glops, and the OpReorderer handles almost
all canvas state operations.

Also switch BakedOpRenderer to use the new OffscreenBuffer, which
serves as a lightweight Layer replacement, with a much simpler
lifecycle.

Change-Id: Ie0e2e248503400041d49729d813d485d28c76eb3
/frameworks/base/libs/hwui/RecordedOp.h
818c9fbf1d76d5df19253ba4eb964efa939ec9ec 23-Oct-2015 Chris Craik <ccraik@google.com> Initial version of clipped saveLayer in new pipeline

Additionally disables usage of FBO cache, so FBO destruction safely
interacts with renderstate caching.

Change-Id: I25c277cb7afec2ca33bf226445d6c8867a15a915
/frameworks/base/libs/hwui/RecordedOp.h
6fe991e5e76f9af9dab960100d5768d96d5f4daa 20-Oct-2015 Chris Craik <ccraik@google.com> Work to support saveLayer in new pipeline

clipped SaveLayers will now be pulled to the beginning of the frame,
prior to drawing FBO 0. This will remove the need for switching FBOs
mid-frame.

Change-Id: I4d8dc1f845e84e9b49d5acdf4f4703eef4a9cb06
/frameworks/base/libs/hwui/RecordedOp.h
b565df13a9e5c7b1d7d93bdfa4a793752d66d3cc 05-Oct-2015 Chris Craik <ccraik@google.com> Initial commit of new Canvas operation recording / replay

Done:
- drawRect, drawBitmap, drawColor, drawPaint, drawRenderNode, drawRegion
- Recording with new DisplayList format
- batching & reordering
- Stateless op reorder
- Stateless op rendering
- Frame lifecycle (clear, geterror, cleanup)

Not done:
- SaveLayer (clipped and unclipped)
- HW layers
- Complex clipping
- Ripple projection
- Z reordering
- Z shadows
- onDefer prefetching (text + task kickoff)
- round rect clip
- linear allocation for std collections
- AssetAtlas support

Change-Id: Iaf98c1a3aeab5fa47cc8f9c6d964420abc0e7691
/frameworks/base/libs/hwui/RecordedOp.h