171 Commits

Author SHA1 Message Date
Jason Simmons
36d2135ad0
Redo a fix for cull rect calculation on TransformLayers with a perspective transform (#8528)
This was originally implemented in d217a95126
but was not retained when cull rects were removed from the SceneBuilder.

Fixes https://github.com/flutter/flutter/issues/30819
2019-04-10 13:00:05 -07:00
reed-at-google
df707c6f1f
switch to newer APIs for shaders and filters (#8511)
* switch to newer APIs for shaders and filters

* fix formatting
2019-04-09 11:00:36 -04:00
David Worsham
ff1bcdc009
Add Views V2 support for Fuchsia (#8115) 2019-04-07 01:18:59 -07:00
liyuqian
0c2a2c1c44
Initialize OpacityLayer's matrix to identity (#8467)
Should have https://github.com/flutter/flutter/issues/30586 fixed once the engine rolls.
2019-04-05 18:34:05 -07:00
liyuqian
9d7167516e
Ensure OpacityLayer to have a single child (#8362)
It ensures that every OpacityLayer can be optimized by retained
rendering.

Tested with `flutter test --local-engine=host_debug_unopt` in
flutter/flutter/packages/flutter.

Related issues: #21756 #23535
2019-03-29 17:58:30 -07:00
liyuqian
5088735e5f
Clip to clip_rect instead of paint bounds (#8183)
Otherwise, we'll have issues such as https://github.com/flutter/flutter/issues/29070

The engine roll that includes this PR needs a tiny golden image update. Will do a manual roll.
2019-03-18 12:43:41 -07:00
Dan Field
fdad56f5fb
Anti-Aliasing for shape layers (#8157) 2019-03-13 14:26:42 -07:00
liyuqian
0f19b2de06
Reland PerformanceOverlayLayer golden test (#8140)
This reverts commit f1f19bba8f0089490962316867bd222727510ac5.

Now we shouldn't break the engine build as https://chromium-review.googlesource.com/c/chromium/tools/build/+/1480746 is landed. The golden test is disabled by default and we'll enable it later in our recipe and test it in presubmit tests.
2019-03-12 14:10:11 -07:00
liyuqian
56d8634c51
Improve shadow doc in PhysicalShapeLayer (#8114)
The old x is confusing as it often refers to x-axis in 2D graphics.
Replace it with t which has a nice interpretation of tangent.
2019-03-11 14:30:07 -07:00
Dan Field
b30f9897b9
Improve elevation bounds for physical shape layers (#8044)
* improve elevation bounds calculation and add diagram
2019-03-05 16:32:22 -08:00
Chris Bracken
f1f19bba8f
Revert "Revert "Revert "Reland PerformanceOverlayLayer golden test (#7863)" (#7895)" (#7911)" (#7916)
This breaks the Linux build with:
```
[ RUN      ] PerformanceOverlayLayer.Gold
../../flutter/flow/layers/performance_overlay_layer_unittests.cc:70: Failure
Value of: golden_data != nullptr
  Actual: false
Expected: true
Golden file not found: "/b/s/w/ir/k/src/flutter/testing/resources"/performance_overlay_gold.png.
Please either set --golden-dir, or make sure that the unit test is run from the right directory (e.g., flutter/engine/src).
```

This reverts commit 3f0ce769e296b977cd0bcd8f4f7390f207ef50a8.
2019-02-21 17:04:34 -08:00
liyuqian
3f0ce769e2
Revert "Revert "Reland PerformanceOverlayLayer golden test (#7863)" (#7895)" (#7911)
This reverts commit 6d8bd99afb16f7a1ebb59a2657ec76802606a581.
2019-02-21 15:27:37 -08:00
Chris Bracken
6d8bd99afb
Revert "Reland PerformanceOverlayLayer golden test (#7863)" (#7895)
Reverting this broke the flow tests for the performance overlay:

```
../../flutter/flow/layers/performance_overlay_layer_unittests.cc:70: Failure
Value of: golden_data != nullptr
  Actual: false
Expected: true
```

This reverts commit 8427d73c8340c9e51492689ee66261a4a72cac9e.
2019-02-20 20:45:39 -08:00
liyuqian
8427d73c83
Reland PerformanceOverlayLayer golden test (#7863)
* Revert "Revert "Add mock capability to PerformanceOverlayLayer (#7537)" (#7765)"

This reverts commit 693645e4645001ae460d5794fa6f5c7066677955.

* Add command line args for golden dir and font file
2019-02-20 16:49:39 -08:00
Josh Gargus
347d690b29
Add support for new Scenic clip planes. (#7804)
Uses SetClipPlanesCmd in addition to the old clipping approach.
Flutter will use both clipping methods during a transition period
(Scenic will select internally which one to use).
2019-02-12 18:33:14 -08:00
Dan Field
693645e464
Revert "Add mock capability to PerformanceOverlayLayer (#7537)" (#7765)
This reverts commit 5f3f3bd9839b0d4e185a13de05fc6b9a24e6067f.
2019-02-09 00:13:14 -08:00
liyuqian
5f3f3bd983
Add mock capability to PerformanceOverlayLayer (#7537)
So we can do golden test on PerformanceOverlay to avoid regression like
https://github.com/flutter/flutter/issues/26387
2019-02-08 14:47:22 -08:00
Adam Barth
c40d6dacc7
[fuchsia] Update scenic include (#7708)
This header is now spelled thusly.
2019-02-07 10:45:21 -08:00
liyuqian
4812a2af11
DCHECK that clip layer's behavior isn't none (#7659)
This will further guard that the framework won't forget to set the
clip behavior.

This has been tested with the flutter/flutter framework
`flutter test --local-engine=host_debug_unopt`
to ensure a successful engine roll.
2019-02-04 13:31:21 -08:00
liyuqian
eaae8a67bc
Retained rendering in Fuchsia PhysicalShapeLayer (#6558)
For flutter/flutter#23535

When this lands/rolls into Fuchsia, a manual roll with https://fuchsia-review.googlesource.com/c/topaz/+/241557 is needed.
2019-02-04 13:31:10 -08:00
liyuqian
2972c71f3a Fix typos in Fuchsia (#7563) 2019-01-23 13:27:51 -08:00
liyuqian
5ce5ace6ea
Avg ms/frame instead of FPS in performance overlay (#7443)
Computing FPS from max ms/frame is misleading and we're no longer
just using 60 FPS displays.
2019-01-15 07:16:24 +08:00
reed-at-google
fea645b801 update site to use SkFont for text fields (#7464) 2019-01-14 11:22:58 -05:00
Jason Simmons
0c11836c9c
Use anti-aliasing when drawing text in the performance overlay (#7445)
The engine dropped the ability to draw non anti-aliased text in
a10b062df0

Fixes https://github.com/flutter/flutter/issues/26387
2019-01-10 15:28:48 -08:00
liyuqian
ba117366ef
Compute cull_rect and optimize in Layer::Preroll (#6923)
This PR replaces the unused `PrerollContext::child_paint_bounds` with `PrerollContext::cull_rect` so we can prune unnecessary preroll tasks (especially cache) based on clips. This PR fixes https://github.com/flutter/flutter/issues/24712

Performance test has been added (https://github.com/flutter/flutter/pull/25381) to make sure that we won't regress again in the future.

Note that the cull_rect here is very similar to those removed in https://github.com/flutter/engine/pull/6352 .     We can't compute cull rects in SceneBuilder because of retained layers. But we can still compute and use them to optimize performance in Preroll.
2018-12-18 09:54:52 -08:00
Brian Salomon
e5195ee479 Remove unnecessary includes of Ganesh headers (#7189) 2018-12-12 10:58:14 -05:00
Michael Goderbauer
09ef73ff6e
Fix code smells reported by chrome's clang plugin (#6833) 2018-11-12 19:59:29 -08:00
liyuqian
b1b58911f6
Respect offset in OpacityLayer's paint bounds (#6826)
This fixes https://github.com/flutter/flutter/issues/23890

I'll add unit tests to flutter/flutter shortly.
2018-11-12 12:52:18 -08:00
Amir Hardon
5646e86a6f
Use the internal_nodes_canvas for all leaf node operations. (#6804)
This also renames the PaintContext's canvas to lead_nodes_canvas so that it
is more explicit on the call sites which canvas is being used.
2018-11-09 12:10:29 -08:00
Amir Hardon
387ca2ef86
Add an internal_nodes_canvas to PaintContext. (#6728)
When we visit a PlatformViewLayer during the paint traversal it replaces
the PaintContext's canvas with a new one that is painted ontop of the
embedded view.
We need to make sure that operations applied by parent layers are also
applied to the new canvas.

To achieve this we collect all the canvases in a SkNWayCanvas and use
this canvas by non leaf nodes. Leaf nodes still paint only to the "current"
canvas.

This PR moves the overlay canvas creation from the paint phase to the
preroll phase, collects them into a SkNWayCanvas and set it in
PaintContext.

To keep this PR focused, I only used the internal_nodes_canvas in the
tranform_layer.
Will followup with a PR that changes all internal layers to use the
internal_nodes_canvas.
2018-11-08 09:31:40 -08:00
Michael Goderbauer
70a1106b50
Unify copyright lines (#6757) 2018-11-07 12:24:35 -08:00
Amir Hardon
fa4c01ee6a
Add an Info.plist flag to enable the embedded iOS views preview. (#6756)
When the flag is true, we currently use a single thread configuration,
and disabled the raster cache for opacity layers.

The flag's name is 'io.flutter_embedded_views_preview'.
2018-11-05 20:08:25 -08:00
Amir Hardon
9e1f546a85
Add an overlay surface on top of embedded UIViews. (#6726)
The overlay surfaces are going to be the same IOSSurface implementation
with the platform views controller set to null (so these are surfaces
that don't support embedding platform views to them).

  * Adds a FlutterOverlayView which is a UIView that's showing an
    overlay surface.
  * Creates an overlay surface for each embedded UIView (done in
    FlutterPlatformViewsController).
  * Changes CompositeEmbeddedView to return a new canvas.
  * Makes the PlatformViewLayer replace the PaintContext's canvas with
    the canvas for the overlay view.
  * Changed canvas in PaintContext to be a pointer so it can be changed.

TBD in following PRs:
  * Copy the current canvas state when replacing a canvas in PaintContext.
  * Make FlutterOverlayView work with a GL backend (currently it only
    works with software rendering)
2018-11-01 17:45:16 -07:00
Chinmay Garde
ba8f6aa71c
Handle Windows headers defining ERROR to 0 in log levels. (#6677) 2018-10-26 16:47:14 -07:00
Amir Hardon
6c2a0b3a6d
Undefine ERROR in platform_view_layer.cc (#6675)
On Windows the ERROR macro is defined by some headers which breaks the
FML_LOG(ERROR).
2018-10-26 16:06:39 -07:00
Amir Hardon
f7970048dd
Attach and position embedded UIVIews (#6614) 2018-10-26 14:45:17 -07:00
Amir Hardon
df85722fa0
Plumb the iOS PlatformViewsController into flow. (#6603)
For flow to manipulate the embedded UIViews during the paint traversal
it needs some hook in PaintContext.
This PR introduces a ViewEmbeder interface that is implemented by the
iOS PlatformViewsController and plumbs it into PaintContext.

The ViewEmbedder interface is mainly a place holder at this point, as
this PR is focused on just the plumbing.
2018-10-26 14:26:59 -07:00
liyuqian
e79d77f6e6
Add offset to engine OpacityLayer (#6594)
See https://github.com/flutter/flutter/pull/22566#discussion_r226082171
for why we add this.
2018-10-19 11:46:12 -07:00
Amir Hardon
a1bbea77cf
Add a no-op platform view layer. (#6505)
This will be used for embedding UIViews on iOS.

Landing a no-op layer as a first incremental step to keep PRs small.
2018-10-12 19:40:21 -07:00
liyuqian
e44c10c962
Reland "Share engine layers with the framework" (#6412) (#6468)
This reverts commit 74662ab695238af0e7402f41c4bf9ad862bd37d2.

This should land after https://github.com/flutter/engine/pull/6442

* Add pragma vm:entry-point

Otherwise, an object may be both null and an instance of EnginieLayer at
the same time in Dart.
2018-10-12 07:45:42 -07:00
liyuqian
daf4447a2e
Reland "Allow raster caching any layer subtree (#6442)" (#6507)
* Revert "Revert "Allow raster caching any layer subtree (#6442)" (#6506)"

This reverts commit c6e6da512a54c1bb33a584b117bcf300ce71b166.

* Use raw pointer for RasterCacheKey

So we won't depend on whether it's a std::unique_ptr or std::shared_ptr.
2018-10-11 15:09:09 -07:00
liyuqian
c6e6da512a
Revert "Allow raster caching any layer subtree (#6442)" (#6506)
Reverts flutter/engine#6442

container_layer.h file is not synced which broke the bots
2018-10-11 14:18:22 -07:00
liyuqian
6447418f76
Allow raster caching any layer subtree (#6442)
We first test this with OpacityLayer. This test alone (without retained rendering) should have ~30% speedup as we'll have fewer render target switches by snapshoting in the Preroll instead of saveLayer in the Paint.

In my local flutter_gallery transition perf tests, the average frame time drops from ~16ms to ~12ms.

https://github.com/flutter/flutter/issues/21756
2018-10-11 13:24:33 -07:00
liyuqian
74662ab695
Revert "Share engine layers with the framework" (#6412)
Reverts flutter/engine#6406

We need to fix the SkiaGPUObject issue of the raster cache SkImage before merging this PR.
2018-10-02 16:51:47 -07:00
liyuqian
9ccc96625f
Share engine layers with the framework (#6406)
To make the PR minimal, we currently only share the engine layer when `pushPhysicalShape` (for Fuchsia) or `pushOffset` (for `RepaintBoundary` and `Opacity`) are called. They should be sufficient for our short-term perf goal. In the future, we can incrementally share more engine layers with the framework.

https://github.com/flutter/flutter/issues/21756
2018-10-02 14:02:10 -07:00
Mehmet Fidanboylu
a8890fdccd
SkImageFilter needs to be imported in the header (#6296) 2018-09-20 16:45:23 -07:00
Jason Simmons
ba7752917f
Ensure that Layer::AutoSaveLayer objects are not immediately destructed (#6264)
Fixes https://github.com/flutter/flutter/issues/20859
2018-09-17 11:43:41 -07:00
liyuqian
b43b3e8702
Remove LayerBuilder and DefaultLayerBuilder (#6256)
This essentially reverts https://github.com/flutter/engine/pull/4197/
as no one is (or soon will be) implementing an alternative LayerBuilder.
Let's just put everything in SceneBuilder to reduce the YAGNI
(you aren't gonna need it) smell. This will also make retained rendering
API changes much easier.
2018-09-14 15:13:00 -07:00
liyuqian
7ac3345c65
Remove root_surface_transformation from PaintContext (#6213)
It should be sufficient to provide the matrix to preroll.
2018-09-11 15:29:08 -07:00
Gary Qian
93dac2a88d
Always save canvas and correctly pass antialias boolean in ClipRects. (#6199) 2018-09-07 14:02:39 -07:00