153 Commits

Author SHA1 Message Date
Chinmay Garde
b132baa447
Ensure that platform messages without response handles can be dispatched. (#9698) 2019-07-06 14:57:36 -07:00
Chinmay Garde
b84f89b44b
Allow embedders to add callbacks for responses to platform messages from the framework. (#9655)
Fixes https://github.com/flutter/flutter/issues/18852
2019-07-03 15:44:39 -07:00
Jason Simmons
b3fe3e95d4 Fix a race in the embedder accessibility unit test (#9585) 2019-06-30 12:50:44 -07:00
Chinmay Garde
7483665e6c
Re-enable embedder_unittests. (#9482)
This was disabled in https://github.com/flutter/engine/pull/6798 waiting for
a Dart SDK patch to land e6d3a45b6a
which has long since been addressed.
2019-06-27 16:49:22 -07:00
chunhtai
9ab6550b45
Introduce read only text field semantics (#9281) 2019-06-19 09:42:23 -07:00
Jason Simmons
ea7ca9804a
Send the isolate service ID from the engine to the embedder (#9324)
Applications can use an embedder API to obtain the isolate ID and then use it
in calls to the Dart service protocol.
2019-06-17 16:02:26 -07:00
Chinmay Garde
96a1a843cb
Replace lock_guard with scoped_lock and use class template argument deduction. (#9338) 2019-06-17 10:08:45 -07:00
Jason Simmons
7283ae3a7e
Handle one-way platform messages in the embedder library (#9331)
Messages sent to the embedder host may be one-way messages with no response
handler.  If the host calls FlutterEngineSendPlatformMessageResponse on a
one-way message, then just delete the message response handle.

Also update the documentation to indicate that
FlutterEngineSendPlatformMessageResponse must be called for all messages.
Previously the docs implied that some FlutterPlatformMessage objects may
have a null response_handle.  The embedder will now set a response_handle for
every message (even if the sender does not expect a response).
2019-06-14 13:58:09 -07:00
Jason Simmons
031c2dc987
Only build embedder unit tests for host builds (#9315)
Linux target builds for non-x86/x64 platforms were failing due to the
dependency on SwiftShader
2019-06-13 12:49:10 -07:00
Chinmay Garde
7bb5b9aea5
Wire up Swiftshader based OpenGL ES unit-tests on hosts. (#9264)
Currently, all our host unit-tests that have rendering concerns use the software backend because of OpenGL ES availability and stability issues on the various platforms where we run host tests. Unfortunately, entire subsystems are disabled (and not tested) when rendering with the software backend. This patch pulls in SwiftShader and via pending patches in the buildroot, configures the host unit-tests to optionally use OpenGL ES in a stable manner without relying on the OpenGL drivers being present (and functional).

I have wired up the embedder test fixture in this patch to use the SwiftShader based OpenGL ES driver. I will update the shell and runtime unittests in a subsequent patch as well. The on and offscreen surfaces are configured as 1x1 pbuffer surface because we should be able to write pixel tests using OpenGL directly wihout having to deal with surfaces.
2019-06-12 12:32:09 -07:00
Zachary Anderson
0a2e28d797
Revert tracing changes (#9296)
* Revert "[fuchsia] Fix alignment of Fuchsia/non-Fuchsia tracing (#9289)"

This reverts commit f80ac5f571479053b134e60bca77603269b2ce2a.

* Revert "Align fuchsia and non-fuchsia tracing (#9199)"

This reverts commit 78265484623037c6544dfd5380367bca29fa27b0.
2019-06-12 10:25:49 -07:00
liyuqian
9f088c65ee
Add onReportTimings and FrameRasterizedCallback API (#8983)
Using it, a Flutter app can monitor missing frames in the release mode, and a custom Flutter runner (e.g., Fuchsia) can add a custom FrameRasterizedCallback.

Related issues:
https://github.com/flutter/flutter/issues/26154
https://github.com/flutter/flutter/issues/31444
https://github.com/flutter/flutter/issues/32447

Need review as soon as possible so we can merge this before the end of May to catch the milestone.

Tests added:
* NoNeedToReportTimingsByDefault
* NeedsReportTimingsIsSetWithCallback
* ReportTimingsIsCalled
* FrameRasterizedCallbackIsCalled
* FrameTimingSetsAndGetsProperly
* onReportTimings preserves callback zone
* FrameTiming.toString has the correct format

This will need a manual engine roll as the TestWindow defined in the framework needs to implement onReportTimings.
2019-06-06 10:42:48 -07:00
Dan Field
7826548462
Align fuchsia and non-fuchsia tracing (#9199) 2019-06-05 15:14:27 -07:00
Chinmay Garde
37b367e4d2
Allow specifying both Dart and non-Dart fixtures in engine unit-tests. (#9113)
* Allow specifying both Dart and non-Dart fixtures in engine unittests.

This fixes numerous issues in the way in which fixtures were managed
in the engine unit-tests.

* Instead of only being able to specify Dart fixtures, unit-tests may specify
  non-Dart fixtures as well. These are simply copied over to the fixtures
  directory known to the unit-test at runtime.
* An issue where numerous Dart files could be given to the kernel snapshotter
  has been addressed. It was anticipated that such a (legal) invocation to the
  kernel snapshotter would produce a snapshot with the contents of all the Dart
  files added to the root library. This is incorrect and the behavior in this
  case is undefined.
* Dart files referenced by the main Dart file are correctly tracked via a
  depfile.
* The snapshotter arguments have been cleaned up to get rid of unused
  arguments (`—strong`) and  the use of the VM product mode argument has been
  corrected to no longer depend on the Flutter product mode.
2019-05-28 19:11:47 -07:00
Chris Bracken
0f1ff3bdb3
Correct typos, adopt US spellings (#9081)
Corects a bnuch of typeos throughout teh engien codebsae. Also makes
a couple minor Commonwealth -> US spelling adjustments for consistency
with the rest of Flutter's codebase.

Made use of `misspell` tool:
https://github.com/client9/misspell
2019-05-25 13:14:46 -07:00
stuartmorgan
4dbb9ba388
Expose pointer type and buttons in embedder.h (#9034)
Rather than hard-coding the type of incoming events to mouse, and
synthesizing a primary button press for kDown/kUp, expose device kind
and buttons in the API.

For backwards compatibility, if the type is not set, the old behavior is
used. If an embedder sets the type to mouse explicitly, however, they
must also set correct button information.

For the touch type, the API abstracts away the framework's internal
expectation that a button is set for touch down/move for simplicity.

Fixes flutter/flutter#32854
2019-05-22 11:30:32 -04:00
Matthew Dempsky
e40768c63a
Initialize next_pointer_flow_id_ to 0 (#9026)
This member variable was added to three classes in #7807, but only
initialized to 0 in one of them. Initialize to 0 in the other two.
2019-05-20 16:52:16 -07:00
Jason Simmons
b3b817a9b3
Add a minimal set of symbols to the dynamic symbol table for Linux executables (#8937)
This will reduce executable size.
2019-05-13 16:12:58 -07:00
Chinmay Garde
5526884e78
Wire up the Skia Metal backend on iOS. (#8936) 2019-05-11 15:21:26 -07:00
Tong Mu
6e3c043141
Synthesize buttons for embedders (#8873)
* Synthesize a buttons = kPrimaryButton for events of down and move
* Add PointerEventButtons
2019-05-10 12:12:51 -07:00
Dan Field
2b1f9925e4
new lints (#8849)
Dart lints added:
* Avoid optional new
* Avoid optional const
* Prefer single quotes
* Prefer default assignment `=`
2019-05-07 16:10:21 -07:00
liyuqian
1c9457cedc
Revert "Only allow mappings for ICU initialization. (#8656)" (#8682)
This reverts commit bd8c5b135e4d41842d0d5d42ff4943a18b8f4f0c.

Reverts flutter/engine#8656

Reason:  https://github.com/flutter/engine/pull/8656 seems to break the framework windows tests and the engine roll (see https://cirrus-ci.com/task/4704667236827136 and https://github.com/flutter/flutter/pull/31330). The failure has been consistent for 7 consecutive engine-to-framework auto-rolls.

TBR: @chinmaygarde
2019-04-22 10:28:54 -07:00
Chinmay Garde
2e4f0a4a72
Put the testing lib in the flutter namespace. (#8661) 2019-04-20 20:42:46 -07:00
Chinmay Garde
bd8c5b135e
Only allow mappings for ICU initialization. (#8656)
If the mapping callback is not set or it the callback returns invalid data, ICU initialization will be embedder responsibility.

This affects all embedders and the following have been audited:
* Android: Via a symbol mapping.
* iOS: Via a file mapping.
* Embedder: Via a file mapping.
* Fuchsia: Via a VMO mapping
* Test shells and Flutter tester: Via file mapping with ICU data needing to be next to the executable.
2019-04-19 15:01:40 -07:00
Chinmay Garde
6257dfeb53
Add factory methods to FileMapping that make it easy to create common mappings. (#8652)
The GetMapping calls removed in this patch had the same code and had to be repeated across different test harnesses as well as in dart_snapshot.cc. Just make this a factory method so the code is less verbose.
2019-04-19 12:48:53 -07:00
liyuqian
8ff631f3df
Rename flow namespace to flutter (#8615)
This follows our namespace change from shell to flutter: https://github.com/flutter/engine/pull/8520.
2019-04-17 14:38:45 -07:00
Qxyat
28a46d51a0 Composite Embedded Views with the correct GrContext
PaintRecorder Canvases are not associated with GrContexts.
2019-04-16 14:13:34 -07:00
stuartmorgan
9aa7c9a48e
Export extern constants in embedder.h (#8550)
PR #8498 made these constants extern, but forgot to export them so they
would be public symbols.
2019-04-11 23:32:29 -07:00
stuartmorgan
72986c39ea
Move constant definitions out embedder.h (#8498) 2019-04-10 10:03:10 -07:00
Chinmay Garde
56052c70af
Rename the shell namespace to flutter. (#8520) 2019-04-09 17:10:46 -07:00
Chinmay Garde
eec74e5c92
Rename the blink namespace to flutter. (#8517)
Some components in the Flutter engine were derived from the forked blink codebase. While the forked components have either been removed or rewritten, the use of the blink namespace has mostly (and inconsistently) remained. This renames the blink namesapce to flutter for consistency. There are no functional changes in this patch.
2019-04-09 12:44:42 -07:00
Chinmay Garde
ce7c21ce9b
Log the correct function on error in the embedder. (#8461) 2019-04-05 15:16:07 -07:00
Chinmay Garde
131cc625a1
Allow native entrypoint registration for runtime unittests. (#8379) 2019-03-29 17:53:49 -07:00
Chinmay Garde
86f4b741b8
Move libdart selection into its own target in //flutter/runtime. (#8373)
Cleanup repeated rules.
2019-03-29 14:29:09 -07:00
Chinmay Garde
8d56284cda
Remove the standalone a11y test runners and merge its tests into embedder_unittests. (#8338)
Also cleans up the a11y unittests to use the new builder API and avoids polluting the global namespace with state for assertions.
2019-03-28 11:22:06 -07:00
Chinmay Garde
975fe8776c
Reset min log levels on each engine launch. (#8343) 2019-03-28 11:21:25 -07:00
Chinmay Garde
68002458f4
Fix Windows build. (#8336) 2019-03-27 16:43:08 -07:00
Chinmay Garde
cb8eb801a4
Allow embedders to specify their own task runner interfaces. (#8273)
Currently, all Flutter threads are managed by the engine itself. This works for
all threads except the platform thread. On this thread, the engine cannot see
the underlying event multiplexing mechanism. Using the new task runner
interfaces, the engine can relinquish the task of setting up the event
multiplexing mechanism and instead have the embedder provide one for it during
setup.

This scheme is only wired up for the platform thread. But, the eventual goal
is to expose this message loop interoperability for all threads.
2019-03-27 16:16:59 -07:00
Chinmay Garde
3a3f707d5a
Reland "Allow specification of std::functions as native entrypoints from Dart code." (#8329)
This reverts commit 7e77d5c484a08cc1c189619e80ae71a7f1df62fb after fixing Windows issues.
2019-03-27 12:22:48 -07:00
Chinmay Garde
7e77d5c484
Revert "Allow specification of std::functions as native entrypoints from Dart code. (#8309)" (#8312)
This reverts commit 400a86a62efd3c8504672b8a63323cc837282135.
2019-03-26 13:49:41 -07:00
Chinmay Garde
400a86a62e
Allow specification of std::functions as native entrypoints from Dart code. (#8309)
This allows for the specification of std::functions (using EmbedderContext::NativeEntry) with their captures as native entrypoints. Earlier, only C functions we allowed which meant that there were no captures and assertions had to use globals which could introduce bugs when used with gtest_repeat.
2019-03-26 12:56:23 -07:00
Chinmay Garde
78de8dcb42
Enable lambda like native callbacks in tests and add support for custom entrypoints. (#8299) 2019-03-26 11:29:08 -07:00
Chinmay Garde
22ee8ee08f
Migrate existing embedder unit tests to use the fixture. (#8296)
Also allows tests to specify their own embedder contexts.
2019-03-25 15:10:24 -07:00
Chinmay Garde
d6ead18f43
Make it easy to write embedder unit tests by creating a fixture and config builder. (#8276)
All embedder unit-tests have to setup the Flutter project arguments from scratch
before launching the engine. The boilerplate and having to deal with the low
level C API during each engine launch is a hinderance to writing tests.

This patch introduces an EmbedderTest fixture that sets up all the embedder side snapshots before allowing the unit test to create a FlutterConfigBuilder` that
the test can use to incrementally build and edit the Flutter project
configuration. From the given state state of a configuration, multiple engines
can be launched with their lifecylces managed by appropriate RAII wrappers.

This allows the a fully configured Flutter engine to be launched using 4 lines
of code in a fixture.

```
EmbedderConfigBuilder builder;
builder.SetSoftwareRendererConfig();
builder.SetAssetsPathFromFixture(this);
builder.SetSnapshotsFromFixture(this);
auto engine = builder.LaunchEngine();
```
2019-03-25 11:58:38 -07:00
Chinmay Garde
4b01d795fe
Add frame and target time metadata to vsync events and connect platform vsync events using flows. (#8172)
This will allow us to easily visualize the time the platform informed the engine of a vsync event, its arguments, and when the engine began its UI thread workload using this information.
2019-03-14 16:48:01 -07:00
Chinmay Garde
246f0e3f4a
Add an allocator specific check to ensure that strings passed to the timeline are not heap allocated. (#8168)
Verified that the tests fail on issues like https://github.com/flutter/engine/pull/8166. Unfortunately, there is no x-platform way to perform this check but this should gate incorrect traces being added to the engine.
2019-03-14 14:15:46 -07:00
Dan Field
0d2cf5857b
Fix the Windows build (#8106)
* Make macro for logging embedder errors build on Windows
2019-03-10 10:46:27 -07:00
Chinmay Garde
a28b530073
Log non-kSuccess returns from embedder API calls. (#8096)
Embedders don’t realize that some calls to the API return an error and don’t handle the same. Log such erroneous returns.
2019-03-09 20:04:16 -08:00
Chinmay Garde
03d5f3c2d1
Clarify arguments to FlutterEngineOnVsync (#8093) 2019-03-08 18:09:17 -08:00
Chinmay Garde
3c8ef04e91
Allow embedders to post tasks onto the render thread. (#8089)
Some embedders may have to wait on fences asynchronously before committing
contents. This allows them to post a task onto the engine managed thread used
for rendering.
2019-03-08 16:30:48 -08:00