This re-lands #20496 and #21780 after fixing the semantics-enabling code that was causing the post-submit web_smoke_test to fail.
Below is the description from the original PR:
This is a PR for converting the dart:ui code in the engine to use a multi-window API. The goal here is to convert from the window singleton to an API that has the concept of multiple windows. Also, I'm matching up the new PlatformDispatcher class to talk directly to the PlatformConfiguration class in the engine. I'm not attempting to actually enable creating multiple windows here, just migrate to an API that has a concept of multiple windows. The multi-window API in this PR currently only ever creates one window.
The design doc for this change is here.
The major changes in this PR:
Move the platfom-specific attributes out of Window, and into the new PlatformDispatcher class that holds all of the platform state, so that the platform code need only update the configuration on this class.
Create FlutterView, FlutterWindow, and SingletonFlutterWindow classes to separate out the concepts of a view (of which there may be multiple in a window), a window (of which there may be multiple on a screen, and they host views), and a window where there is only ever expected to be one (this hosts the entire API of the former Window class, and will eventually be the type of the window singleton).
Next step after this PR lands:
Remove the Window class entirely (it is replaced by SingletonFlutterWindow). Some minor changes in the Framework are needed to switch to using SingletonFlutterWindow directly first.
The Window class still exists in this PR, but will be removed as soon as the framework is converted to point to the SingletonFlutterWindow class instead. They share the same API, just have different names (Window is currently a subclass of SingletonFlutterWindow). The intention is that the Window name will be freed up to use as a widget class name in the framework for managing windows. The singleton called window will remain, and keep the same API it has now.
Snapshots compiled with sound null-safety enabled require changes to the way in
which isolates are launched. Specifically, the `Dart_IsolateFlags::null_safety`
field needs to be known upfront. The value of this field can only be determined
once the kernel snapshot is available. This poses a problem in the engine
because the engine used to launch the isolate at shell initialization and only
need the kernel mappings later at isolate launch (when transitioning the root
isolate to the `DartIsolate::Phase::Running` phase). This patch delays launch of
the isolate on the UI task runner till a kernel mapping is available. The side
effects of this delay (callers no longer having access to the non-running
isolate handle) have been addressed in this patch. The DartIsolate API has also
been amended to hide the method that could return a non-running isolate to the
caller. Instead, it has been replaced with a method that requires a valid
isolate configuration that returns a running root isolate. The isolate will be
launched by asking the isolate configuration for its null-safety
characteristics.
A side effect of enabling null-safety is that Dart APIs that work with legacy
types will now terminate the process if used with an isolate that has sound
null-safety enabled. These APIs may no longer be used in the engine. This
primarily affects the Dart Convertors in Tonic that convert certain C++ objects
into the Dart counterparts. All known Dart Converters have been updated to
convert C++ objects to non-nullable Dart types inferred using type traits of the
corresponding C++ object. The few spots in the engine that used the old Dart
APIs directly have been manually updated. To ensure that no usage of the legacy
APIs remain in the engine (as these would cause runtime process terminations),
the legacy APIs were prefixed with the `DART_LEGACY_API` macro and the macro
defined to `[[deprecated]]` in all engine translation units. While the engine
now primarily works with non-nullable Dart types, callers can still use
`Dart_TypeToNonNullableType` to acquire nullable types for use directly or with
Tonic. One use case that is not addressed with the Tonic Dart Convertors is the
creation of non-nullable lists of nullable types. This hasn’t come up so far in
the engine.
A minor related change is reworking tonic to define a single library target.
This allows the various tonic subsystems to depend on one another. Primarily,
this is used to make the Dart convertors use the logging utilities. This now
allows errors to be more descriptive as the presence of error handles is caught
(and logged) earlier.
Fixes https://github.com/flutter/flutter/issues/59879
* Revert "Fix documentation build for window changes. (#21780)"
This reverts commit 931a04683d6eb49fc92059b2384ac5b1618d5422.
* Revert "Migration to PlatformDispatcher and multi-window (#20496)"
This reverts commit 85b0031f73544e448354047dc6a236c0b0808252.
This is a PR for converting the dart:ui code in the engine to use a multi-window API. The goal here is to convert from the window singleton to an API that has the concept of multiple windows. Also, I'm matching up the new PlatformDispatcher class to talk directly to the PlatformConfiguration class in the engine. I'm not attempting to actually enable creating multiple windows here, just migrate to an API that has a concept of multiple windows. The multi-window API in this PR currently only ever creates one window.
The design doc for this change is here.
The major changes in this PR:
Move the platfom-specific attributes out of Window, and into the new PlatformDispatcher class that holds all of the platform state, so that the platform code need only update the configuration on this class.
Create FlutterView, FlutterWindow, and SingletonFlutterWindow classes to separate out the concepts of a view (of which there may be multiple in a window), a window (of which there may be multiple on a screen, and they host views), and a window where there is only ever expected to be one (this hosts the entire API of the former Window class, and will eventually be the type of the window singleton).
Next step after this PR lands:
Remove the Window class entirely (it is replaced by SingletonFlutterWindow). Some minor changes in the Framework are needed to switch to using SingletonFlutterWindow directly first.
The Window class still exists in this PR, but will be removed as soon as the framework is converted to point to the SingletonFlutterWindow class instead. They share the same API, just have different names (Window is currently a subclass of SingletonFlutterWindow). The intention is that the Window name will be freed up to use as a widget class name in the framework for managing windows. The singleton called window will remain, and keep the same API it has now.
Reland #19396 with a fix for improper scale that was affecting internal tests
Tested: Ran all unittests, ran internal tests, and ran workstation on Fuchsia
BUG: 53062, 53063
The fuchsia code around metrics and sizing was just sending this
information through a side-channel, when the engine already had the
information available. So, delete all of it to make future CLs simpler.
Additionally, the SceneUpdateContext has many unneccesary dependencies
re: metrics and PaintTasks. Break those to make future CLs simpler.
Tested: Ran all unittests and ran workstation on Fuchsia
BUG: 53062, 53063
* Manual merge or Dart into flutter a3815b6590...24c7666def
dart-lang/sdk@24c7666def Update tests that have the current version number hardcoded
dart-lang/sdk@f88ce7aef5 Increase Dart version to 2.10
* Update language version.
* Update license.
* Hpdate language version.
* Update license.
This change makes it so that we track all the motion events encountered by `FlutterView` and all of its subviews in the `MotionEventTracker` class, indexed by a unique `MotionEventId`. This identifier is then passed to the Flutter framework as seen in https://github.com/flutter/flutter/pull/60930. Once the gestures take part in gesture disambiguation and are sent back to the engine, we look-up the original motion event using the `MotionEventId` and dispatch it to the platform.
Bug: https://github.com/flutter/flutter/issues/58837
These were added in 7e5d63513a7ae854605dbd38582cead55594e9f0 for use in
_handleNavigationMessage. That function was deleted in
f37aafd456fc6a1c2dba5bc1b63123b0e665e6cd, but the support methods were
left in the code. `// ignore: unused` annotations were added to all
private native entry points by dnfield (to work around what is arguably
a bug) in 6179ac637724e8f93b7f3c8dcfda93a6b9b7995e, and were applied to
these two methods, I suspect unintentionally.
In any case, they appear entirely unused at present.
git log 1402e8e1a42d..e21c4353006d665e7c4378413ad4d237f18437e0 --date=short --first-parent --format='%ad %ae %s'
2020-03-30 jsimmons@google.com [dart:io] Fuchsia version of SocketBase::AvailableDatagram
2020-03-30 jwren@google.com Fix the dart help test output by implementing printUsage() in the test command
2020-03-30 sstrickl@google.com [vm/aot] Drop some Function objects not needed at runtime.
2020-03-30 mit@google.com Roll pub to latest version
2020-03-30 scheglov@google.com Document differences in inheritance tests between CFE and analyzer.
2020-03-30 scheglov@google.com Revert "Fix the result type of binary expression with the left TypeParameter extends num type."
2020-03-30 johnniwinther@google.com [cfe] Handle member signatures from dill in class hierarchy builder
2020-03-30 eernst@google.com [cfe] Add missing .next in endImplicitCreationExpression
2020-03-30 jensj@google.com [CFE] Add api to get language version for uri
2020-03-30 johnniwinther@google.com [cfe] Don't include member signature in id testing by default.
2020-03-30 johnniwinther@google.com [kernel] Make verbose qualified names conditional in toStringInternal
2020-03-30 devoncarew@google.com [dartdev] test the dartdev analyze --fatal-warnings option
2020-03-30 brianwilkerson@google.com Enable omit_local_variable_types in analyzer_plugin
2020-03-30 brianwilkerson@google.com Enable omit_loval_variable_types in analysis_server_client
2020-03-30 brianwilkerson@google.com Enable omit_local_variable_types in analysis_server
2020-03-30 keertip@google.com Add guard code for exceptions from ResourceProvider when reading contents.
2020-03-29 scheglov@google.com Fix the result type of binary expression with the left TypeParameter extends num type.
2020-03-28 scheglov@google.com Fix for creating a setter when the target is in a part without a library.
2020-03-28 brianwilkerson@google.com Remove the need for a --corpus flag from completion_metrics
2020-03-28 brianwilkerson@google.com Remove the need for a --corpus flag from relevance_metrics
2020-03-28 brianwilkerson@google.com Remove an unused variable in AstBuilder
2020-03-28 brianwilkerson@google.com Sort non-generated files in analyis_server and add a test to ensure they stay that way
2020-03-28 scheglov@google.com Add LibraryElement.languageVersionMajor/Minor
2020-03-28 scheglov@google.com Report exceptions with the file content for getResult().
2020-03-28 scheglov@google.com Fix crash in index when the invoked element is multiply defined.
2020-03-28 eernst@google.com Add implementation of several parts of non-function type aliases
2020-03-28 johnniwinther@google.com [cfe] Groups standard tests in update_expectations.dart
2020-03-28 sra@google.com [dart2js] Specialize is- and as- tests for nullable types
2020-03-28 rmacnak@google.com [vm] Do not allocate when evaluating arguments to StorePointer.
2020-03-28 rmacnak@google.com [vm] Fix some data races with profiler samples.
2020-03-28 alexmarkov@google.com Revert "[analyzer] Remove deprecated language version API"
2020-03-27 nshahan@google.com [ddc] Cleanup cast in dart:_runtime lib
2020-03-27 brianwilkerson@google.com New relevance values for UriContributor
2020-03-27 brianwilkerson@google.com New relevance values for KeywordContributor
2020-03-27 brianwilkerson@google.com New relevance values for VariableNameContributor
2020-03-27 paulberry@google.com Migration: don't use union edges for field formal parameters
2020-03-27 rmacnak@google.com [vm] Fix memory leak in profiler when some samples are in native functions without a dynamic symbol.
2020-03-27 bkonyi@google.com [ package:dds ] Fixed smoke_test.dart which was unable to launch smoke.dart due to use of a relative path.
2020-03-27 zichangguo@google.com [dart:io] Fix parsing the response of the HTTP connect method
2020-03-27 mfairhurst@google.com [nnbd_migration] Add confirm dialog to "apply migration" button
2020-03-27 rmacnak@google.com [test] Update use of Null as a bottom type to Never.
2020-03-27 eernst@google.com Added new tests.
2020-03-27 alexmarkov@google.com [vm/nnbd/aot/tfa] Support NNBD strong mode in type flow analysis
2020-03-27 mfairhurst@google.com [analyzer] Remove deprecated language version API
2020-03-27 brianwilkerson@google.com Update relevance computations in LocalReferenceContributor
2020-03-27 brianwilkerson@google.com Update relevance values for LocalLibraryContributor and ImportedReferenceContributor
2020-03-27 sigurdm@google.com Bump pub version
2020-03-27 sigmund@google.com [dart2js] Update test-matrix to specify the libraries.json to dart2js batch runner
2020-03-27 jcollins@google.com Update dartdoc to 0.30.3.
2020-03-27 alexmarkov@google.com [vm/nnbd] Fix marking static fields as late
2020-03-27 scheglov@google.com Fix for completion in formal parameters of GenericFunctionType.
2020-03-27 mfairhurst@google.com [nnbd_migration] Add a "rerun from sources" button.
2020-03-27 mfairhurst@google.com Revert "[analyzer] Copy result of allSupertypes for now."
2020-03-27 scheglov@google.com Merge types during instance member inference.
2020-03-27 scheglov@google.com Catch linking exceptions and include the cycle file contents.
2020-03-27 johnniwinther@google.com [cfe] Handle throw in return type inference
2020-03-27 alexmarkov@google.com [vm/aot/tfa] Fix tracking of parameters in async_op closures
2020-03-27 zichangguo@google.com Reland "[dart:io] Fix hanging on zero-length datagram"
2020-03-27 athom@google.com [infra] Update checked-in SDKs to 2.8.0-dev.18.0
2020-03-27 johnniwinther@google.com [cfe] Add tool for updating all id-tests and expectation tests
2020-03-27 athom@google.com [homebrew] Add support for the beta channel formula
2020-03-27 brianwilkerson@google.com Sort files in analysis_server_client and analyzer_plugin and add tests to keep them that way
2020-03-27 askesc@google.com [benchmark] Benchmark for UTF-8 decoding with typical data.
2020-03-27 jensj@google.com [parser] Change recovery for constructor; report errors in bad constructors
2020-03-27 johnniwinther@google.com [cfe] Use legacy erasure before argument inference
2020-03-27 jensj@google.com [kernel] Polish toString implementation on AST nodes
2020-03-27 sra@google.com [dart2js] Print non-minified init object as multiline
2020-03-27 karlklose@google.com [infra] Handle test steps with no tested configuration
2020-03-27 zichangguo@google.com [dart:io] remove available at _NativeSocket::Read
2020-03-27 nbosch@google.com Remove a stale TODO comment
2020-03-27 rnystrom@google.com Add other breaking changes to CHANGELOG.
2020-03-27 liama@google.com [nnbd/test] Fix tests that are failing in strong mode
2020-03-26 rnystrom@google.com Fix Markdown link in CHANGELOG and remove duplicate entry.
2020-03-26 brianwilkerson@google.com Compute new relevance in LocalConstructorContributor
2020-03-26 kevmoo@google.com DEPS: remove references to pkg:package_resolver
2020-03-26 jcollins@google.com Add a way for analysis_server to open communication via a IsolateChannel.
2020-03-26 scheglov@google.com Use NNBD_TOP_MERGE to combine signatures of the inherited members.
2020-03-26 nshahan@google.com [ddc] Update types in JSArray operations
2020-03-26 srawlins@google.com Migrator: Add an auth token for the preview site
2020-03-26 dacoharkes@google.com [vm] Add Reachability Fence Instruction
2020-03-26 sra@google.com [benchmark] Make BigIntPrintParse be NNBD-agnostic
2020-03-26 rnystrom@google.com Bump the SDK constraint on dart_internal to permit Dart 2.8.0.
2020-03-26 kevmoo@google.com Update changelog with dart2js --package-root removal
2020-03-26 alexmarkov@google.com [vm/corelib] Specify types explicitly in convert_patch.dart
2020-03-26 scheglov@google.com Update checkForWrongTypeParameterVarianceInMethod(), fix NPE.
2020-03-26 mfairhurst@google.com [analyzer] Copy result of allSupertypes for now.
2020-03-26 scheglov@google.com Add more data to debug crash in buildExportNamespace().
2020-03-26 scheglov@google.com Fix for crash when FieldFormalParameter in a local function has annotations.
2020-03-26 bkonyi@google.com [ VM / DartDev ] Disable DartDev for the 2.8 release
2020-03-26 kevmoo@google.com Remove unused package-root option and configuration from dart2js
2020-03-26 srujzs@google.com [dart:html] Add nullability to EventTarget conversion
2020-03-26 kevmoo@google.com DEPS: Bring in latest pub
2020-03-26 dacoharkes@google.com [vm/ffi] Mark Struct as entrypoint
2020-03-26 jensj@google.com [analyzer] Sort entries in error.dart and syntactic_errors.dart
2020-03-26 karlklose@google.com [infra] pkg/smith: custom test runner steps are test steps
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`.
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/26154https://github.com/flutter/flutter/issues/31444https://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.
Adds support for pointer signals, in a way that will support both discrete events (e.g., scroll wheels, flutter/flutter#22762) and continuous gestures (e.g., trackpad scroll, flutter/flutter#21953).
Also exposes these new event options to the embedder. Does not include code to send the
new events from the platform shells.
* Roll back three Dart SDK rolls
Revert "Roll src/third_party/dart 75ee523f91..4cff5a4fd6 (6 commits)"
Revert "Roll src/third_party/dart 5ddd157809..75ee523f91 (19 commits)"
Revert "Roll src/third_party/dart c92d5ca288..5ddd157809 (153 commits)"
`pub upgrade` appears to fail 100% reproducibly on broken on Windows.
This rollback rolls back both what appears to be the breaking roll (61fc178)
and the following roll.
This reverts commit 0053c1d5064931d7a690b3d8888d15d72785a079.
This reverts commit 1cf6b8b64d42aefcbc6e7d78a2e6df706962751a.
This reverts commit 61fc1786fd98f48ee355f800cf5d7aef0fff985b.
* Revert "Revert "Revert "Remove unnecessary entry-point closurization. (#7827)" (#7876)" (#7904)"
This reverts commit 93eeb48baee5c24047a4a3cf5b1db234ecc48683.
This reverts commit 25559ed0779604d56c47c5d2341ffd16b137cd10.
Reason for revert: broken in AOT mode.
@pragma('vm:entry-point') placed on a function only instructs
the compiler to retain the function itself, but does not tell
compiler to generate and retain tear-off for this function.
In this PR _runMainZoned was marked as an entry-point but C++
code was trying to tear it off and use a closure, instead of
invoking it directly, which is not supported.