388 Commits

Author SHA1 Message Date
Kaushik Iska
f1d8026637
[metrics] Record the frame target time on the layer tree (#17281)
This lets us measure stats on when the frame was
scheduled to be rendered vs when it finished rasterizing.

Note: This isn't propagated to the FrameTimings struct yet,
that is to be followed.
2020-03-24 22:00:21 -07:00
liyuqian
945967054b
Rename GPU to raster thread in PerformanceOverlay (#17148)
Rename GPU to raster thread in PerformanceOverlay and update goldens.
2020-03-24 21:43:16 -07:00
Chinmay Garde
518c9e09cc
Remove checks for the always true using_fuchsia_sdk flag in all GN files. (#17261) 2020-03-23 18:31:02 -07:00
mikejurka
ad8ccf47b1
[Fuchsia] Move physical shape layer compositing to Flutter (#17005)
* [fuchsia] Add labels to Scenic nodes.

* [fuchsia] Skip creating Scenic nodes for identity Transforms.

* [fuchsia] Assign elevation to Scenic nodes based on paint order.

* [fuchsia] Create Scenic OpacityNodes at leaf nodes.

* [fuchsia] Composite PhysicalShapeLayers using Skia, except when they need to float above child views.

In that case, they will still need to be pulled
into separate Scenic nodes to be composited on top
of the child view[s].

* [fuchsia] Add tests for Fuchsia-specific layer behavior.

Inspect commands going to Scenic and make sure
they match what is expected.

Also, restructure code to need less member variables,
and other cleanups based on review feedback.
2020-03-23 16:38:07 -07:00
Chinmay Garde
e56b335ade
Allow external texture sources when using the Metal backend. (#17154) 2020-03-22 22:36:03 -07:00
Emmanuel Garcia
f5d25da83c
Reland: Implement unobstructed Platform Views on iOS (#17237) 2020-03-20 18:58:55 -07:00
Emmanuel Garcia
70f6d18bfa
Revert "Implement unobstructed Platform Views on iOS (#17049)" (#17233)
This reverts commit 2627634be807a28f4d56c5d7cd878c3ff6ce07ac.
2020-03-20 14:46:09 -07:00
Emmanuel Garcia
2627634be8
Implement unobstructed Platform Views on iOS (#17049) 2020-03-20 12:38:58 -07:00
Jim Graham
e48761e5bb
Reland ImageFiltered bounds fix (#17077)
Fix for https://github.com/flutter/flutter/issues/51978 to use the bounds of the filtered result as the layer's paint bounds.
2020-03-13 14:44:27 -07:00
Chinmay Garde
a37560a074
Use the standard [[nodiscard]] attribute instead of an FML macro. (#17100) 2020-03-11 13:36:01 -07:00
Chinmay Garde
17e07c537e
Implement asynchronous texture uploads when using the Metal backend on iOS. (#17046)
This moves the Metal `GrContext` creation utilities from `GPUSurfaceMetal` into
a separate `IOSContext` object subclass. An analogue of this object was used in
the GL regime for the management of onscreen and offscreen contexts that were
not tied to the lifecycle of the `GPUSurface`. This pattern has now been
generalized for use with all backends that need a resource context
(`IOSContextGL` and `IOContextMetal`).

The platform views controller management in the `ExternalViewEmbedder` interface
implementation was repeated three times for [Metal][metal], [OpenGL](opengl) and
[Software](software) rendering. This repetition has been removed and a single
implementation present in the base `IOSSurface` and used on all platforms.
Addition of new client rendering APIs should not affect how the engine renders
into the platform view interleaving levels.

All rendering API selection logic has been moved into a single set of utilities
in `rendering_api_selection.h`. This enables the removal of a lot of code blocks
guarded by `FLUTTER_SHELL_ENABLE_METAL`. The remaining uses of this will be
removed when unified builds are enabled.

The Metal backend now also adds traces similar to the GL backend.

The `IOGLContext` has been renamed to `IOContextGL` to be more in line with the
convention used in this library.

Fixes https://github.com/flutter/flutter/issues/41827
Adds https://github.com/flutter/flutter/issues/52150

[metal]: 1194ba2b21/shell/platform/darwin/ios/ios_surface_metal.mm (L55)
[opengl]: 1194ba2b21/shell/platform/darwin/ios/ios_surface_gl.mm (L95)
[software]: 1194ba2b21/shell/platform/darwin/ios/ios_surface_software.mm (L146)
2020-03-10 16:01:53 -07:00
Emmanuel Garcia
d884e27a68
Add RTree to flow (#16923) 2020-03-10 15:47:17 -07:00
Jim Graham
220039a9c8
Revert "Fix bounds of image_filter_layer (#16960)" (#17074)
This reverts commit 8b6119ec8367bbe3de52fd5f40737219be8d5b8b.
2020-03-10 14:09:10 -07:00
Jim Graham
8b6119ec83
Fix bounds of image_filter_layer (#16960) 2020-03-09 13:58:44 -07:00
Chris Bracken
df942131b8
Revert "Try rasterizing images and layers only once , even when their rasterization fails. Further enforce the same access threshold on layers as on Pictures. Previously layers would always be cached. The latter is a semantic change. (#16545)" (#16889)
This caused regression in several benchmarks, including:
animated_placeholder_perf. Regression tracked in
https://github.com/flutter/flutter/issues/51776.

This reverts commit 01a52b9947054f57398f2aaa2b59e7d501506580.
2020-03-02 11:44:45 -08:00
Sebastian Jeltsch
01a52b9947
Try rasterizing images and layers only once, even when their rasterization fails. Further enforce the same access threshold on layers as on Pictures. Previously layers would always be cached. The latter is a semantic change. (#16545)
If Rasterization fails, i.e. image.is_valid() is false, the cache might try rasterizing the image again on the next frame. Not only is this wasteful put might also prevent other pictures to be cached within the current frame budget.
2020-02-28 12:13:22 -08:00
Sebastian Jeltsch
80be2c43ea
Fix RasterCache LRU logic, opportunistic simplifications. (#16434)
RasterCache::Get() methods were not updating the RasterCache::Entry
access_count and used_this_frame fields, as is done in
RasterCache::Prepare(). This can result in onscreen images being evicted
from the cache as new entries are created (e.g. as new elements scroll
onscreen).
2020-02-06 13:15:51 -08:00
Chinmay Garde
f44f50f3c5
Fix race in SkiaGPUObject unit-tests. (#16351)
There are two issues in the test as written:
* There is a race on the first check to dtor_task_queue_id which might be
  encountered if the calling thread is de-scheduled and the unref queue manages
  to collect the object before the end of the scope.
* Two threads were owning a shared object but we relied on the object to be
  collected on the unref queue.
2020-02-03 19:57:43 -08:00
Chinmay Garde
f7b78e001d
Remove all uses of the redundant flutter_root variable. (#16311)
This was only necessary when the Engine had to build in multiple buildroots
where the sources where checked out at different paths relative to the
buildroot. This is no longer the case and there are already cases GN rules
have been written that mix and match variable usage with the direct
specification of the path to the Flutter sources relative to the sole buildroot.
2020-01-31 21:49:48 -08:00
Dan Field
89f3471fa7
the the fix (#15973) 2020-01-24 12:43:32 -08:00
David Worsham
04274160e6 Fix Opacity performance regression on Fuchsia (#15573)
* Add more profile markers

* Revert FuchsiaSystemCompistedLayer changes

* Re-add opacity w/o elevation changes

* Fix formatting
2020-01-16 15:28:48 -08:00
Jim Graham
929b1edff5
Engine support for ImageFiltered widget (#14491)
web_ui support coming in https://github.com/flutter/flutter/issues/47163
2019-12-19 16:47:08 -08:00
mikejurka
1f7bb9d0c1
Wire up OpacityLayer to Scenic (#14577)
A previous version of this change also removed
system compositing of PhysicalShapeLayers on
Fuchsia. In this reland, keep using system
composting for PhysicalShapeLayers.

Co-authored-by: David Worsham <arbreng@gmail.com>
2019-12-19 23:25:43 +01:00
Kaushik Iska
f2dbeb8aa7
Reland Wire up Opacity on Fuchsia (#14559)
This reverts commit 6ea69a0d4339dd153899bb6c299689f1dd43329d.

On top of the revert, it reverted a commit in the PR:
https://github.com/flutter/engine/pull/14024

This reverts commit ea67e5b0b930ebf552bc7dbd678a35ee6a129c39.
2019-12-18 16:05:38 -08:00
Kaushik Iska
6ea69a0d43
Revert "Wire up Opacity on Fuchsia, round 2 (#14024)" (#14543)
This reverts commit d117ac979c28363a0a6b02d4a54945212a88b6f9.
2019-12-18 10:29:47 -08:00
Jim Graham
85953615eb
Conditionally use offscreen root surface only when needed
Currently helps primarily on iOS when no BackdropFilter is present by lowering energy usage
2019-12-11 15:10:55 -08:00
liyuqian
212fbbaf82
Cleanup the IO thread GrContext (#14265)
Fixes https://github.com/flutter/flutter/issues/19558

This is tested by the devicelab test fast_scroll_large_images__memory
2019-12-10 16:02:02 -08:00
Jason Simmons
af511babc7
Do not paint a layer's children if the children were not prerolled (#14149)
Prerolling a layer can have side effects.  In particular, PlatformViewLayer::Preroll
will call view_embedder->PrerollCompositeEmbeddedView.

Clip layers will check whether the layer's children are all clipped and if so
will skip calling Preroll on the children.  However, the Paint implementation in
these layers was always calling Paint on their children.

This could result in a call to PlatformViewLayer::Paint without a corresponding
call to PlatformViewLayer::Preroll.  This translates to a CompositeEmbeddedView
call without a PrerollCompositeEmbeddedView call on the affected view_id.
The EmbedderExternalViewEmbedder implementation does not allow that.

With this change, clip layers will only call PaintChildren if the preroll
called PrerollChildren.

See https://github.com/flutter/flutter/issues/46111
2019-12-05 16:25:55 -08:00
David Worsham
d117ac979c
Wire up Opacity on Fuchsia, round 2 (#14024)
* Remove erroneous ChildView opacity

* Wire frame metrics through contexts

* Maintain layer stack inside of SceneBuilder

* Remove EnsureSingleChild

* Centralize system-composite and elevation logic

* Wire up OpacityLayer to Scenic
2019-12-04 19:29:31 -08:00
David Worsham
2fc1e1bce1 Relanding: Add Flow unittests and fixtures (#14091) 2019-12-03 14:33:02 -08:00
liyuqian
84bf72917c
Revert PRs to unblock David and Jim's work (#14088)
* Revert "Add flow test fixtures and tests (#13986)"

This reverts commit 620f5281b819f304e8e9e945222e26b17b087cc3.

* Revert "Dynamically determine whether to use offscreen surface based on need (#13976)"

This reverts commit a86ef946563b020108320bbfb974bf7343284fd3.
2019-12-03 12:02:37 -08:00
David Worsham
620f5281b8 Add flow test fixtures and tests (#13986) 2019-12-03 09:43:02 -08:00
Jim Graham
a86ef94656
Dynamically determine whether to use offscreen surface based on need (#13976)
Only use an offscreen surface on iOS if a layer which reads back from the destination surface, such as BackdropFilter, is present.
2019-11-27 15:01:25 -08:00
Chinmay Garde
9f6401362d
Don't crash but warn when the scene builder specifies no layers. (#14008) 2019-11-25 15:38:41 -08:00
Kaushik Iska
584d958688
[fuchsia] Capture SkRRect in scene_update_context by value (#13989)
This was leading to usage of the captured rect after the end
of the lifetime in descrutor of Frame.
2019-11-22 16:29:58 -08:00
gaaclarke
97a23a80e1
Made a way to turn off the OpenGL operations on the IO thread for backgrounded apps (#13908) 2019-11-22 14:08:33 -08:00
gaaclarke
89e395853c
Refactor to passing functions by const ref (#13975)
Moved our code to passing functions by const ref
2019-11-22 12:20:02 -08:00
Kaushik Iska
af2c53ab13
[fuchsia] Ensure we do not initialize nan RoundedRectangles (#13971)
Also initializes physical shape layer vars to empty.
2019-11-21 19:40:06 -08:00
liyuqian
9e6d360177
Fix picture raster cache throttling (#13710)
Previously, we're also counting the pictures that are already raster
cached.

This fixes https://github.com/flutter/flutter/issues/44252 and helps
solving the GPU thread issue of https://github.com/flutter/flutter/issues/43083

https://github.com/flutter/flutter/pull/45050 is a performance test in the framework repo to reveal this bug.
2019-11-20 16:36:23 -08:00
Chinmay Garde
75ea3e2445
Expose the platform view mutator stack to custom compositors. (#13731)
This allows custom compositors to affect scene builder modifications made
to the platform view.

Fixes https://github.com/flutter/flutter/issues/44211
Fixes b/143612326
2019-11-19 10:35:41 -08:00
James Robinson
0832dfde5a [flow][fuchsia] Add more tracing to layers and Fuchsia surface pool (#13864)
This adds more trace events to more layer operations and enhances the
trace counters for the Fuchsia vulkan surface pool to include retained
surface counts, emit stats on recycle events that might change the
surface count, and by separating counters which measure bytes from
counters which measure counts to make analysis simpler.
2019-11-14 15:31:37 -08:00
Michael Klimushyn
8a99d10748
Turn on RasterCache based on view hierarchy (#13762)
This is a duplicate of flutter/engine#13360 with the test switched to use the software backend instead of the GL backend.

After some debugging and testing on another GL embedder I think the issue with the test is some bug having to do with the GL implementation in the test harness specifically. 

Fixes flutter/flutter#38903
2019-11-08 17:14:50 -08:00
Dan Field
0a8bd9dd6f
Fix mDNS for iOS13 (#13451) 2019-11-01 15:29:15 -07:00
Michael Klimushyn
e609577d12
Revert "Turn on RasterCache based on view hierarchy (#13360)" (#13442)
This caused EmbedderTest.VerifyB143464703 to fail after merging into
master.

```
../../flutter/shell/platform/embedder/tests/embedder_unittests.cc:3111: Failure
Value of: ImageMatchesFixture("verifyb143464703.png", renderered_scene)
  Actual: false
Expected: true
[  FAILED  ] EmbedderTest.VerifyB143464703 (2507 ms)
```

This reverts commit 3ad3bc76a5825210603d4afd12013de8ba7d7668.
2019-10-30 11:25:29 -07:00
Michael Klimushyn
3ad3bc76a5
Turn on RasterCache based on view hierarchy (#13360)
Previously the cache was disabled on whether or not PlatformViews were
globally enabled. Instead track their existence in the view hierarchy
and only disable RasterCache if a PlatformView is actually present.
2019-10-30 10:45:15 -07:00
Chinmay Garde
e3aff2c982
Make sure root surface transformations survive resetting the matrix directly in Flow. (#13405)
This used to only be handled correctly for non-root layer backing stores. This
was mostly a side effect of the fact that we used recording canvases instead of
rendering directly into the backing store. We now use recording canvases
consistently.

Fixes b/143464703
Fixes https://github.com/flutter/flutter/issues/43732
2019-10-29 17:44:57 -07:00
Jason Simmons
4f85010d21
Do not attempt to drain the SkiaUnrefQueue in the destructor (#13237)
SkiaUnrefQueue should be empty at destruction time.  If the queue is nonempty,
then there will be a pending drain task that will hold a reference to the
queue.  The queue can only be destructed after the drain completes and the
reference is dropped.

Drains must only be done on the queue's task runner thread, which may not be
the thread where the queue is destructed.
2019-10-21 14:14:18 -07:00
Chinmay Garde
c92613bc49
Re-land "Custom compositor layers must take into account the device pixel ratio."
This reverts commit 6c2381da6070f9e96825841e77e9ffeb376d6aa9 and applies iOS fixes.
2019-10-17 14:07:51 -07:00
Chinmay Garde
6c2381da60
Revert "Custom compositor layers must take into account the device pixel ratio. (#13193)" (#13211)
This reverts commit e53d10c3456ccac1bffabc78a16fd6ce680d0074.
2019-10-17 12:59:27 -07:00
Chinmay Garde
e53d10c345
Custom compositor layers must take into account the device pixel ratio. (#13193)
The contents rendered into the backing stores are already correctly scaled.
The initial implementation assumed this also held true for the metrics obtained
via embedded view parameters.

Fixes b/142699417
2019-10-17 12:04:13 -07:00