Skip to content

Conversation

@devoncarew
Copy link
Contributor

Description

Redux of #34243

  • update the Flutter.Frame event - sent over the VM service protocol - to use newly available engine apis. This will make the data match that reported via the Timeline events, and allows us to include timing info for both the dart and gpu portions of the frame

Related Issues

none

Tests

I added the following tests:

  • validate that we fire a Flutter.Frame event in the binding tests
  • update a devicelab test to fix an existing race condition - tickled by changes to when Flutter.Frame events are fired (JSON-RPC error 103: Stream already subscribed)

Checklist

Before you create this PR confirm that it meets all requirements listed below by checking the relevant checkboxes ([x]). This will ensure a smooth and quick review process.

  • I read the Contributor Guide and followed the process outlined there for submitting PRs.
  • I signed the CLA.
  • I read and followed the Flutter Style Guide, including Features we expect every widget to implement.
  • I updated/added relevant documentation (doc comments with ///).
  • All existing and new tests are passing.
  • The analyzer (flutter analyze --flutter-repo) does not report any problems on my PR.
  • I am willing to follow-up on review comments in a timely manner.

Breaking Change

Does your PR require Flutter developers to manually update their apps to accommodate your change?

  • Yes, this is a breaking change (Please read Handling breaking changes). Replace this with a link to the e-mail where you asked for input on this proposed change.
  • No, this is not a breaking change.

@devoncarew devoncarew requested a review from liyuqian June 12, 2019 22:56
@goderbauer goderbauer added the framework flutter/packages/flutter repository. See also f: labels. label Jun 12, 2019
if (!kReleaseMode) {
int frameNumber = 0;

window.onReportTimings = (List<FrameTiming> timings) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If the app has already set a window.onReportTimings listener, will this make it not work? Maybe we should also call the original onReportTimings if it's not null.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is called pretty early in app initialization; I don't know how likely it is that we'll lose the race condition with user code.

If a user of the API is responsible for delegating to the last person who set onReportTimings, how would that user know to stop calling the previous closure when that closure was no longer interested in events?

If we're concerned about this, I think an option here is to adjust the API to use a broadcast stream based approach (Stream<FrameTiming> get onFrameTimings). Clients could add themselves as a listener to the stream, and remove themselves, without having to worry about other potential users of the API interfering with them.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Right, I think I'll keep the current API for a simple engine-to-framework communication, and add a broadcast stream for flexibility later as a pure framework pull request.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

OK, makes sense.

Copy link
Contributor

@liyuqian liyuqian left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

if (!kReleaseMode) {
int frameNumber = 0;

window.onReportTimings = (List<FrameTiming> timings) {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Right, I think I'll keep the current API for a simple engine-to-framework communication, and add a broadcast stream for flexibility later as a pure framework pull request.

@devoncarew devoncarew merged commit ceb09b8 into flutter:master Jun 14, 2019
keertip added a commit that referenced this pull request Jun 14, 2019
keertip added a commit that referenced this pull request Jun 14, 2019
dnfield added a commit that referenced this pull request Jun 15, 2019
dnfield added a commit that referenced this pull request Jun 15, 2019
tango5614 added a commit to tango5614/flutter that referenced this pull request Jun 17, 2019
* master:
  retry on HttpException (flutter#34526)
  308c113 Roll src/third_party/skia 057a32d9a2c8..5fe7429babe2 (1 commits) (flutter/engine#9342) (flutter#34583)
  Add back ability to override the local engine in Gradle (flutter#34460)
  Added customizable padding for the segmented controll (flutter#34555)
  466a1d8 Roll src/third_party/skia 3721688f64a5..057a32d9a2c8 (1 commits) (flutter/engine#9340) (flutter#34558)
  Handles parsing APK manifests with additional namespaces or attributes (flutter#34535)
  add route information to Flutter.Navigation events (flutter#34508)
  Separate web and io implementations of network image (flutter#34112)
  pass .packages path to snapshot invocation (flutter#34517)
  [Material] Fix TextDirection and selected thumb for RangeSliderThumbShape and RangeSliderValueIndicatorShape (flutter#34501)
  redux of a change to use new engine APIs for Flutter.Frame events (flutter#34521)
  Roll engine b0757e6..f44b7b5 (4 commits) (flutter#34533)
  Roll engine 2589785..b0757e6 (6 commits) (flutter#34522)
  Revert "Revert "redux of a change to use new engine APIs for Flutter.Frame events (flutter#34365)" (flutter#34514)" (flutter#34530)
  Make sure fab semantics end up on top (flutter#34512)
  Revert "redux of a change to use new engine APIs for Flutter.Frame events (flutter#34365)" (flutter#34514)
  redux of a change to use new engine APIs for Flutter.Frame events (flutter#34365)
@github-actions github-actions bot locked as resolved and limited conversation to collaborators Aug 6, 2021
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

framework flutter/packages/flutter repository. See also f: labels.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants