693 Commits

Author SHA1 Message Date
Jason Simmons
4ecfa62735
Hold a reference to the Skia unref queue in UIDartState (#13239)
Obtaining the SkiaUnrefQueue through the IOManager is unsafe because
UIDartState has a weak pointer to the IOManager that can not be dereferenced
on the UI thread.
2019-10-21 14:15:03 -07:00
Gary Qian
8318d5f386
Update ui.instantiateImageCodec docs to reflect what it does. (#13233) 2019-10-21 12:29:19 -07:00
Jason Simmons
8882bf3c73
Avoid dereferencing IO manager weak pointers on the UI thread (#13232)
UI thread APIs that need to access the IO thread's resource context should
obtain a weak pointer to the IO manager and pass that to the IO thread.
2019-10-18 16:01:55 -07:00
George Wright
8b9761940b
Re-enable WeakPtr ThreadChecker and fix associated failures (#12257)
This re-enables thread safety checks for WeakPtr. WeakPtrs can't be used on a thread other than the one the WeakPtrFactory was created on.

This fixes the unit tests and adds a getUnsafe() method to WeakPtr to work around the remaining unresolved locations where we are using WeakPtr unsafely.
2019-10-17 14:10:16 -07:00
Chinmay Garde
a925df1898
Remove incomplete static thread safety annotations. (#13151)
Fixes https://github.com/flutter/flutter/issues/42704.
2019-10-16 17:28:31 -07:00
Dan Field
5b5b1c4b9f
ColorFilter matrix docs (#13100) 2019-10-11 16:01:16 -07:00
Chinmay Garde
86e3ebb748
Allow embedders to specify arbitrary data to the isolate on launch. (#13047)
Since this is currently only meant to be used by the embedding internally, the setter in Objective-C is only exposed via the FlutterDartProject private class extension. Unit tests have been added to the shell_unittests harness.

Fixes https://github.com/flutter/flutter/issues/37641
2019-10-10 12:31:14 -07:00
Greg Spencer
77252d2371
Add missing focusable testing info (#13013)
This adds a couple of instances of semantic node isFocusable info that were missing that the framework testing depends upon.
2019-10-09 09:00:24 -07:00
Kate Lovett
58d7b84177
Re-land Adding Link Semantics (#12972) 2019-10-08 11:27:56 -07:00
Sebastian Roth
32ca0cc7d3
Fix typo on channel buffer debug output. (#12960) 2019-10-08 18:06:32 +01:00
gaaclarke
3a445edda9
Made _printDebug only happen on debug builds of the engine for now. (#12980) 2019-10-08 10:05:48 -07:00
Gary Qian
eec8d5e733 Unpublicize kDoNotResizeDimension (#12989) 2019-10-08 00:31:34 -07:00
Dan Field
4a849e0f8d
Color matrix doc (#12982) 2019-10-07 17:22:01 -07:00
Kate Lovett
ac45051f2a
Revert "Adding Link SemanticsFlag (#12453)" (#12815)
This reverts commit 974ca210f5275aee0775b363e9c3416e1603cf73.
2019-10-04 17:06:32 -07:00
Kate Lovett
974ca210f5
Adding Link SemanticsFlag (#12453) 2019-10-04 12:51:10 -07:00
gaaclarke
f407e06970
Resize channel buffers (#12402)
Made it so you can resize channel buffers by sending messages to them.
2019-10-01 10:31:25 -07:00
Greg Spencer
05f4b33cd2
Add isFocusable to SemanticsFlag (#12618)
This adds an isFocusable to SemanticsFlag so that the framework can tell the engine what semantics nodes are allowed to be focused, which will affect what platform flags are applied to the semantics information.

This flag is not yet in use by the frame
2019-09-30 09:46:48 -07:00
liyuqian
7c3dcee2e9
Revert "[fuchsia] Wire up OpacityLayer to Scenic (#11322)" (#12610)
This reverts commit fcc4ab32301396986dd5103d6d444bff35fe0f63.

Fixes https://github.com/flutter/flutter/issues/41394 and other
related correctness issues.

TBR: @arbreng @jason-simmons @mehmetf
2019-09-27 16:50:43 -07:00
Jonah Williams
6f5eb1332f
Add support for JIT release mode (#12446) 2019-09-27 11:20:54 -07:00
Gary Qian
0018135a1c
Make kDoNotResizeDimension public so framework can use it directly (#12448) 2019-09-26 17:07:16 -04:00
Chinmay Garde
5b5fd7508c
Revert "Support accessibility labels on iOS switches. (#12404)" (#12466)
This reverts commit 147d0c3805499f5302f763da01fc40259b1a22ee.
2019-09-26 12:52:52 -07:00
brandondiamond
147d0c3805 Support accessibility labels on iOS switches. (#12404) 2019-09-26 11:14:44 -07:00
David Worsham
fcc4ab3230
[fuchsia] Wire up OpacityLayer to Scenic (#11322)
On Fuchsia, add a build flag for compositing OpacityLayers using the system
compositor vs Skia, which exposes a fastpath for opacity via Scenic.
This will only work under certain circumstances, in particular nested
OpacityLayers will not render correctly!

On Fuchsia, add a build flag for compositing PhysicalShapeLayers using
the system compositor vs Skia. Set to off by default, which restores
performant shadows on Fuchsia.

Remove the opacity exposed from ChildView, as that was added mistakenly.

Finally, we centralize the logic for switching between the
system-composited and in-process-composited paths inside of
ContainerLayer. We also centralize the logic for computing elevation
there. This allows the removal of many OS_FUCHSIA-specific code-paths.

Test: Ran workstation on Fuchsia; benchmarked before and after
Bug: 23711
Bug: 24163

* Fix broken tests
2019-09-25 12:48:42 -04:00
Chinmay Garde
1c7300ed1e
Account for root surface transformation on the surfaces managed by the external view embedder. (#11384)
The earlier design speculated that embedders could affect the same
transformations on the layers post engine compositor presentation but before
final composition.

However, the linked issue points out that this design is not suitable for use
with hardware overlay planes. When rendering to the same, to affect the
transformation before composition, embedders would have to render to an
off-screen render target and then apply the transformation before presentation.
This patch negates the need for that off-screen render pass.

To be clear, the previous architecture is still fully viable. Embedders still
have full control over layer transformations before composition. This is an
optimization for the hardware overlay planes use-case.

Fixes b/139758641
2019-09-17 15:16:59 -07:00
gaaclarke
0a455a8207
Channel buffers (#12167)
Added channel buffers to 'ui' so that messages have a place to
go until message handling is setup.
2019-09-17 12:22:00 -07:00
Michael Goderbauer
ef7bcafd5c
a11y: expose max character count for text fields (#12269) 2019-09-16 09:37:25 -07:00
liyuqian
4243324a03
Revert "Add a BroadcastStream to FrameTiming (#11041)" (#11841)
This reverts commit e97ed36e580c9b4c4a3d768cfe1a520f7bf8161d.

Reason for revert: Stream is considered a bad API: https://github.com/flutter/engine/pull/11041#issuecomment-526892247
2019-09-05 10:41:55 -07:00
gaaclarke
daf1a27d46
Started logging warnings if we drop platform messages. (#11792) 2019-08-30 12:48:03 -07:00
Gary Qian
13ece5c7fc
Update the ui.LineMetrics.height metric to be more useful to external users (#11456) 2019-08-28 12:26:42 -07:00
Chris Bracken
bf86d08102
Add missing newline at EOF (#11473)
This was required by the C++ spec pre-C++11 and still gets picked up in
the Fuchsia tree due to -Wnewline-eof. It fixes:

    ../../third_party/flutter/lib/ui/text/line_metrics.h:75:47: error: no newline at end of file [-Werror,-Wnewline-eof]
    #endif  // FLUTTER_LIB_UI_TEXT_LINE_METRICS_H_
2019-08-26 21:11:57 -07:00
Gary Qian
9f1eab2f1f
Expose LineMetrics in dart:ui (#10670) 2019-08-26 13:40:22 -07:00
Chinmay Garde
b7d03138ed
Remove deprecated ThreadTest::GetThreadTaskRunner and use the newer CreateNewThread API. (#11395)
We will end up creating fewer threads in tests.
2019-08-23 12:21:46 -07:00
liyuqian
e97ed36e58
Add a BroadcastStream to FrameTiming (#11041)
Without this, developers have to override `onReportTimings` to listen for `FrameTiming`.
That can potentially break previous `onReportTimings` listeners if they forget to call
the old listener in their new callback.

This PR replaces the similar RP in the framework: https://github.com/flutter/flutter/pull/38574

Once this PR landed, we'll have to create another framework PR to use the stream to replace
`onReportTimings` usages.

Once that's done, we can then propose the breaking change of removing the deprecated
`onReportTimings`.
2019-08-19 10:52:16 -07:00
Shi-Hao Hong
014ab76ad0
Pass Android Q insets.systemGestureInsets to Window (#10413)
* Pass Android Q system gesture inset information from insets.systemGestureInsets to Window.systemGestureInsets
2019-08-16 13:42:56 -04:00
Brian Osman
646b594d5e
Remove unused dstColorSpace argument to MakeCrossContextFromPixmap (#11052) 2019-08-16 12:57:53 -04:00
Jason Simmons
33d168f99f
Remove the ParagraphImpl class from the text API (#11012)
ParagraphImpl was used to switch between libtxt and Blink implementations
of text rendering and is now obsolete.
2019-08-15 15:23:00 -07:00
Chinmay Garde
e8f954409d
Allow embedder controlled composition of Flutter layers. (#10195)
This patch allows embedders to split the Flutter layer tree into multiple
chunks. These chunks are meant to be composed one on top of another. This gives
embedders a chance to interleave their own contents between these chunks.

The Flutter embedder API already provides hooks for the specification of
textures for the Flutter engine to compose within its own hierarchy (for camera
feeds, video, etc..). However, not all embedders can render the contents of such
sources into textures the Flutter engine can accept. Moreover, this composition
model may have overheads that are non-trivial for certain use cases. In such
cases, the embedder may choose to specify multiple render target for Flutter to
render into instead of just one.

The use of this API allows embedders to perform composition very similar to the
iOS embedder. This composition model is used on that platform for the embedding
of UIKit view such and web view and map views within the Flutter hierarchy.
However, do note that iOS also has threading configurations that are currently
not available to custom embedders.

The embedder API updates in this patch are ABI stable and existing embedders
will continue to work are normal. For embedders that want to enable this
composition mode, the API is designed to make it easy to opt into the same in an
incremental manner.

Rendering of contents into the “root” rendering surface remains unchanged.
However, now the application can push “platform views” via a scene builder.
These platform views need to handled by a FlutterCompositor specified in a new
field at the end of the FlutterProjectArgs struct.

When a new platform view in introduced within the layer tree, the compositor
will ask the embedder to create a new render target for that platform view.
Render targets can currently be OpenGL framebuffers, OpenGL textures or software
buffers. The type of the render target returned by the embedder must be
compatible with the root render surface. That is, if the root render surface is
an OpenGL framebuffer, the render target for each platform view must either be a
texture or a framebuffer in the same OpenGL context. New render target types as
well as root renderers for newer APIs like Metal & Vulkan can and will be added
in the future. The addition of these APIs will be done in an ABI & API stable
manner.

As Flutter renders frames, it gives the embedder a callback with information
about the position of the various platform views in the effective hierarchy.
The embedder is then meant to put the contents of the render targets that it
setup and had previously given to the engine onto the screen (of course
interleaving the contents of the platform views).

Unit-tests have been added that test not only the structure and properties of
layer hierarchy given to the compositor, but also the contents of the texels
rendered by a test compositor using both the OpenGL and software rendering
backends.

Fixes b/132812775
Fixes flutter/flutter#35410
2019-08-13 14:53:19 -07:00
Dan Field
63b253d907
expose max depth on Window (#10414) 2019-08-02 20:37:24 -07:00
Jason Simmons
59ac63d3e1
Ensure that the SingleFrameCodec stays alive until the ImageDecoder invokes its callback (#10297)
SingleFrameCodec had been holding a persistent handle to the peer Dart object
while waiting for the decoder callback.  However, Dart code could call
Codec.dispose during that interval, which would cause the Dart peer to drop
its reference to the SingleFrameCodec and potentially delete the
SingleFrameCodec.

Fixes https://github.com/flutter/flutter/issues/36631
2019-07-31 14:58:44 -07:00
Jason Simmons
f7e0614b88
Change ParagraphBuilder to replace the parent style's font families with the child style's font families (#10074)
Previously ParagraphBuilder was concatenating the child's fonts to the
parent's font list, causing the parent's fonts to take precedence.

Fixes https://github.com/flutter/flutter/issues/35992
2019-07-23 17:57:56 -07:00
Jason Simmons
8d28215c8b
Fix caching of Locale.toString (#9920) 2019-07-19 15:57:28 -07:00
Jason Simmons
678ce2e87d
Fix reentrancy handling in SingleFrameCodec (#9931)
After the frame is decoded SingleFrameCodec will invoke pending callbacks
from calls to getNextFrame.  The callbacks could result in more calls to
getNextFrame.  Those calls should receive the frame instead of being added
to the pending list.
2019-07-18 15:54:21 -07:00
Jason Simmons
5ed71f19b5
Handle decompressed images in InstantiateImageCodec (#9901)
Fixes https://github.com/flutter/flutter/issues/36312
2019-07-18 14:50:45 -07:00
Jason Simmons
f20e9350d2
Fix failure of the onReportTimings window hook test (#9923) 2019-07-18 14:42:33 -07:00
Mouad Debbar
ae14f04613
Add the isMultiline semantics flag to values (#9894) 2019-07-18 13:14:11 -07:00
Chinmay Garde
fd2cb81503
Respect EXIF information while decompressing images. (#9905)
Adds a unit-test asserting this behavior.
2019-07-17 19:14:01 -07:00
Jason Simmons
b7b791b3fa
In a single frame codec, release the compressed image buffer after giving it to the decoder (#9825)
The codec will retain a reference to the decoded frame so it can be returned
in repeated calls to getNextFrame.

Also change the compressed image buffer to use an anonymous mapping on Android.
This is a workaround for high consumption of native heap pages by Android's
malloc when buffers are allocated on one thread and freed on another thread.

See https://github.com/flutter/flutter/issues/36079
2019-07-17 13:34:40 -07:00
Mouad Debbar
8849d3092d
Add multi-line flag to semantics (#9850) 2019-07-17 09:51:09 -07:00
gaaclarke
78a8ca0f62
Made Picture::toImage happen on the IO thread with no need for an onscreen surface. (#9813)
Made Picture::toImage happen on the IO thread with no need for a surface.
2019-07-15 17:16:20 -07:00
Tim Sneath
418fe5b2d5
Document FontFeature class (#9808)
Add typography sample from the Flutter 1.7 announcement blog.
2019-07-15 10:55:20 -07:00