Commit Graph

262 Commits

Author SHA1 Message Date
TreeHugger Robot
413a3c3812 Merge "Remove dead code" 2018-04-10 01:16:30 +00:00
John Reck
617673f83f Remove dead code
Remove an old protobuf serialization experiement, skp capture
does this better

Test: builds

Change-Id: Icd875eabee6b517729f901841e48e579d0e8de4d
2018-04-09 14:50:40 -07:00
John Reck
ec100976e0 Add support for render-ahead
For periods of time during which latency is less important
allow a client to request a deeper render-ahead pipeline.

The latency tradeoff results in less overall visual jank

Test: none, only used by macrobench

Change-Id: I516203b70bdc75b6415fa08bf9c4fb1b598b0102
2018-04-09 10:58:15 -07:00
John Reck
6f75da0474 Remove old workaround for display issues
Bug: 76086140
Test: A bunch of systraces, things looked OK
Change-Id: I447e976a937160c0bb3b52afd57661e7ffa0c9ec
2018-03-21 14:43:40 -07:00
John Reck
9f51644abf Extreme battery saver: Allow lowering framerate for experiments.
Bug: 68769804
Test: manual
Change-Id: Ic0c95f32c7ba6d86a997997e480e6d8a5f228f25
2017-12-06 13:59:19 -08:00
John Reck
1bcacfdcab Format the world (or just HWUI)
Test: No code changes, just ran through clang-format
Change-Id: Id23aa4ec7eebc0446fe3a30260f33e7fd455bb8c
2017-11-03 10:57:44 -07:00
John Reck
f8441e6552 Switch to a fancy new queue
Test: unit tests & benchmarks pass/faster

Change-Id: I9521432172d6dd6039c5280b1265479a36a86247
2017-10-27 13:39:55 -07:00
Stan Iliev
47fed6ba6a Fix crash in "Tree::updateBitmapCache"
Fix crash caused by updating vectordrawable cache for objects
from previous frames, which may have been deleted.

Bug: 67940327
Test: Ran CtsUiRenderingTestCases test
Change-Id: I4466235e78e9b7937a0d4428240574d9e3d0989f
2017-10-20 16:03:25 -04:00
John Reck
34781b2530 Move frame history into jank tracker
Test: hwui_unit_tests & manual
Change-Id: If761947652750640268217cd8cd97c8382441b44
2017-07-05 16:48:09 -07:00
Romain Guy
07ae505d40 Use RGBA16F layers when wide color gamut rendering is on
Layers created using View.setLayerType() or Canvas.saveLayer() need
to be RGBA16F/scRGB-nl when within a window that requested wide color
gamut rendering.

Bug: 29940137
Test: CtsUiRenderingTestCases, CtsGraphicsTestCases, hwui_unit_tests
Change-Id: I42fd6355448c92041491a7109e3ac8a153d38bf9
2017-06-14 13:44:08 -07:00
Derek Sollenberger
f9e45d1d81 Implement CacheManager for the Skia pipelines.
The core of the implementation is complete and provides heuristic
cache sizing based on the size of the surface being used. This CL
will also be used to add the following features in the future...

1) Support Vulkan pipeline reporting on the size of the surface.
2) Complete the VectorDrawableAtlas stub code
3) Automatic purging of stale resources for low memory devices.

Test: hwui_unit_tests (new test added) and CtsUiRendering
Bug: 62260637
Change-Id: Ib85159cca28b646fe249f2190b07f1b7e0f50d8f
2017-06-06 14:19:37 -04:00
TreeHugger Robot
0ecc0ff5e0 Merge "Enable wide color gamut rendering" 2017-06-02 20:07:56 +00:00
Romain Guy
26a2b97dbe Enable wide color gamut rendering
When wide color gamut rendering is requested, hwui will now
use an rgba16f scRGB-nl surface for rendering. This change
also fixes the way screenshots are handled in the platform
to behave properly with wide gamut rendering.

This change does not affect hardware layers. They also
need to use rgba16f scRGB-nl; this will be addressed in
another CL.

Bug: 29940137
Test: CtsUiRenderingTestCases, CtsGraphicsTestCases

Change-Id: I68fd96c451652136c566ec48fb0e97c2a7a257c5
2017-06-02 11:02:13 -07:00
John Reck
a67b62e15e Fix ANR & Crash on Ryu
Fixes impossible dequeue crash as the wrong
start point of the frame was used. We need
to use the start point for RT, not the start
point for the frame.

Workaround for sysui ANR caused by what appears
to be a driver bug. Drivers with the bug
will have transiently higher memory usage.
Drivers without the bug will be unaffected.

Bug: 62213889
Bug: 62250550
Test: Manual

Change-Id: I9992b224f84bc1c40834bafff7e0013b38270ae0
2017-06-01 13:00:34 -07:00
John Reck
32414eea3e Fix dequeus outside of frame drawing
Bug: 62213889
Test: Repro steps in bug
Change-Id: I8fc407b280ba82c669fc2bb03750cab139adb965
2017-05-31 14:02:50 -07:00
John Reck
df1742ed47 Overhaul GraphicsStatsService
* LRU cache of recently-used is dead, replaced
  disk storage
* ASHMEM size is read from native by the system service,
  no longer requires keeping a sizeof() in sync with a
  constant in Java
* Supports dumping in proto format by passing --proto
* Rotates logs on a daily basis
* Keeps a history of the most recent 3 days

Bug: 33705836
Test: Manual. Verified log rotating works by setting it up to
rotate every minute instead of day. Confirmed /data/system/graphicsstats
only has the most recent 3 entries after several minutes

Change-Id: Ib84bafb26c58701cc86f123236de4fff01aaa4aa
2017-02-21 09:49:10 -08:00
sergeyv
c3f1316961 Clean up deferredLayers only onGpuContextDestroyed.
Test: manual
bug:34919311
Change-Id: I5488b0845ec3922424f5893943e4f42675dfc9fd
2017-02-06 11:45:14 -08:00
sergeyv
3e9999bd86 Explicitly destroy Layer in DeferredLayerUpdater on destroyHardwareResources()
Change-Id: I0987104eabda9a2a302b9e765213aad48f93aea4
Test: refactoring CL. Existing tests still pass
bug:33753499
2017-01-30 16:42:41 -08:00
John Reck
2de950d5a8 Overhaul RenderNode's DisplayList management
* Move mValid to native
* Have destroyHardwareResources destroy everything
* Remove flaky mParentCount checks in setStaging
* All tree updates have an internal observer to
  ensure onRemovedFromTree() is a reliable signal
* onRemovedFromTree() immediately releases resources
  to avoid displaylist "leaks"

Test: Unit tests for validity added & pass, manually
verified that b/34072929 doesn't repro

Bug: 34072929

Change-Id: I856534b4ed1b7f009fc4b7cd13209b97fa42a71c
2017-01-25 12:24:40 -08:00
Greg Daniel
cd55852fcd Make buffer age work in Vulkan
Test: manual testing in skiavk mode

Change-Id: I5b9d8af7d9cecf2f022ef104ec33a5b7477e9e0c
2016-12-09 15:45:15 +00:00
Stan Iliev
500a0c30d4 Implement Skia pipelines for OpenGL and Vulkan.
Implement Skia pipelines for OpenGL and Vulkan:
base SkiaPipeline, SkiaOpenGLPipeline and SkiaVulkanPipeline.
Write unit tests for SkiaPipeline.

Test: Built and run manually on angler-eng.
Change-Id: Ie02583426cb3547541ad9bf91700602a6163ff58
2016-11-03 13:28:49 -04:00
Derek Sollenberger
050bb6a2b0 Minor cleanup of unused headers and overly described functions.
Test: local compile
Change-Id: I5b794c9473f6d3a9e1d4f9365c951c7ce9dade50
2016-10-28 11:08:27 -04:00
Derek Sollenberger
daf7229047 Move OpenGL specific details behind renderPipeline interface.
Test: new and existing unit tests still pass.
Change-Id: I6164f30f45ebe450788ed8d949eca5af9a44e585
2016-10-26 12:46:57 +00:00
Romain Guy
253f2c213f 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
2016-10-11 17:47:58 -07:00
Derek Sollenberger
6a21ca5a4c Move Layer creation/deletion into the RenderPipeline.
Test: refactoring. existing tests still pass.
Change-Id: I032c33896a0cb74c91e2a913a584373518466b88
2016-10-03 16:30:19 -04:00
sergeyv
dcbc0e9e25 resolve merge conflicts of 0ec2fd7 to master
Change-Id: I113ede26ab42e3f9a36a52a756c38d365731e16d
2016-09-14 09:15:15 -07:00
sergeyv
af102bee51 HWUI: track upload & recent usage in font cache
FontCacheHistoryTracker should be turned off before shipping: b/31438876

bug:30427106
Change-Id: Ic26b25e790d4ee69e484ca0cb23dc9cc522b2ed3
2016-09-12 15:45:26 -07:00
TreeHugger Robot
471a63ee35 Merge "Fix texture leak" 2016-09-02 20:48:27 +00:00
Chris Craik
7cae510f41 Wait on frame work fences when frames are dropped am: 06e2e9cf4c am: 7a14f5aeb9
am: b53c60876a

Change-Id: Ib9c5be43f65379770b17260c34be90fccb360277
2016-09-02 20:10:06 +00:00
John Reck
3053ac7f12 Fix texture leak
Bug: 31251593
Change-Id: Ic86729eb6089239134213588d80459d14227ade6
2016-09-02 10:14:39 -07:00
Chris Craik
06e2e9cf4c Wait on frame work fences when frames are dropped
bug:30895941

Prevents a race where frame work could interleave between frames,
causing SurfaceView position updates to be delivered out of order.

Change-Id: I01e4cc557b69dcf33e877a0e16c0d115ec95e4cc
2016-08-31 17:32:47 -07:00
John Reck
0ddfbc46c4 Ensure Dequeue/Queue duration is always set am: 70e89c9c37 am: ed343def3e
am: 77e5333520

Change-Id: I0c51b04c0dd7bafecf03c42417c4247fd281c325
2016-08-08 15:13:25 +00:00
John Reck
70e89c9c37 Ensure Dequeue/Queue duration is always set
Bug: 30662749
Change-Id: I35a4c26ce78536fc7a506ec2f92a8b9eecb12ec2
2016-08-05 10:50:36 -07:00
Doris Liu
2e729ebf5f Put VD animators on paused list when RT stops drawing am: c82e879e56 am: 70b6080cd7
am: 4ec05be535

Change-Id: I22e66e33aa51064230351f1fd24e5fb200511213
2016-08-02 18:32:18 +00:00
Doris Liu
70b6080cd7 Put VD animators on paused list when RT stops drawing
am: c82e879e56

Change-Id: I9f0202c8e69e681014253842b2a2de75d372616b
2016-08-02 18:15:44 +00:00
Doris Liu
0cf4d47a40 Merge "Put VD animators on paused list when RT stops drawing" into nyc-mr1-dev 2016-08-02 18:08:05 +00:00
John Reck
56f9ccfa15 Fix null deref crash am: 882d515cd5 am: ed93e111c5
am: 86e700ebc9

Change-Id: I97412741a5f41fa0c5bec56795cf7f7b8875f738
2016-08-02 02:23:48 +00:00
John Reck
882d515cd5 Fix null deref crash
Bug: 30560152
Change-Id: Ic4bae380e27de5bea80cec484e83d205e078ec43
2016-08-01 14:52:25 -07:00
Doris Liu
c82e879e56 Put VD animators on paused list when RT stops drawing
When we stop scheduling for new frames on RenderThread, we should
put the running animations on pause, rather than purge the list
of the running animations, such that in the next full
sync, the animations that were paused will continue to run.

BUG: 30226711
Change-Id: I36ff6f5d26ffa7999f60ca0ff676a35157577dc2
2016-08-01 21:42:15 +00:00
Hugo Benichi
63d8aa930f Merge \\\"Fix missing IpConnectivity metrics\\\" into nyc-mr1-dev am: 66e7752ad1 am: b2db402899
am: fb5c675b7e

Change-Id: Iba1f81a892acd9f541b9dd564203bfebc56c9c73
2016-07-31 02:13:00 +00:00
John Reck
67daab6a1e Teach JankTracker about new swap behaviors
am: 2d5b8d7392

Change-Id: I28afc748f8a43944863bd752c3bd2cb983d19c23
2016-07-29 16:31:38 +00:00
TreeHugger Robot
34921ac110 Merge "Teach JankTracker about new swap behaviors" into nyc-mr1-dev 2016-07-29 16:25:51 +00:00
John Reck
b5405b171c Drop less aggressively am: a3d795a34a am: 62ec371a9e
am: fd6bf88724

Change-Id: I4a6bd075a1989b942c2531048d5d5335a24874f4
2016-07-29 16:10:15 +00:00
John Reck
2d5b8d7392 Teach JankTracker about new swap behaviors
Bug: 30440166

If we are using HWC2, there's a change in timing
when in triple buffering with the pipelined offsets.
This changes JankTracker to recognize that and silently
erase that from the total duration

Change-Id: Ib1fd4209070f17dbd2baed707c8cf73fb11c3cf2
2016-07-29 07:56:02 -07:00
John Reck
a3d795a34a Drop less aggressively
Bug: 30342762

Frame dropping was too frequent and would trigger
during normal triple buffering steady state. Bump
the threshold to drop from 3ms stall to 6ms stall.

Change-Id: I5c1faeaabf0d02323a28e697a4af4105fbcf1c53
2016-07-27 19:28:05 -07:00
Derek Sollenberger
56ad6ec42f Remove LayerRenderer.
There is only one caller each for the static functions here so this
CL moves the logic to the caller.  Also by moving some of the code
into the pipeline it makes it easier for future changes to configure
how a pipeline handles a layer.

Change-Id: Ib735b5154325cbb658fd151f7a19dbf434ab44b7
2016-07-26 13:05:13 -04:00
Chris Craik
cf3e1a7fa8 Merge \\"Change swap chain stuffed detection logic\\" into nyc-mr1-dev am: 433a19e8bf
am: 3c37412900

Change-Id: Id7e0d1d1dfb5448dd927c29361fb98aabf0cfe10
2016-07-21 00:59:49 +00:00
Chris Craik
3163568806 Change swap chain stuffed detection logic
bug:29771461
bug:29413700
bug:30181577

Changes frame interval gap detection to look for wider gaps, as they
were incorrectly firing all the time.

Also adds a 500ms minimum gap between frames dropped because of stuffed
swap chain, to prevent dropping too often.

Change-Id: If16ed637d54bf37015704be102c5c2e3731a0824
2016-07-20 16:47:03 -07:00
Tim Murray
44b7f75587 Merge changes I15da2563,I7845542d into nyc-mr1-dev am: 7b8b1aab93
am: 619682b960

Change-Id: I98afd5bead70cf25ca43e49c1215ccef1e472a83
2016-07-19 00:33:04 +00:00
Tim Murray
ffde6274f7 add tracepoint for when the display chain is stuffed
bug 30173296

Change-Id: I7845542d4e5c19ccb7c3ee6498cc2d70278b5397
2016-07-18 15:35:36 -07:00