Skip to content

showPerformanceOverlay=true in MaterialApp throws UnimplementedError on web with no clear “not supported” message #172405

@RocksteadyDog

Description

@RocksteadyDog

Use case

Hello!

A small proposal

Enabling the performance overlay in a Flutter web app by setting:

MaterialApp(
  showPerformanceOverlay: true,
  // …
)

results in the following UnimplementedError:

══╡ EXCEPTION CAUGHT BY SCHEDULER LIBRARY ╞═════════════════════════════════════════════════════════
The following UnimplementedError was thrown during a scheduler callback:
UnimplementedError

When the exception was thrown, this was the stack:
dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/errors.dart 266:3       throw_
errors.dart:266
dart-sdk/lib/_internal/js_dev_runtime/private/profile.dart 117:39                 addPerformanceOverlay
profile.dart:117
package:flutter/src/rendering/layer.dart 1056:12                                  addToScene
layer.dart:1056
package:flutter/src/rendering/layer.dart 711:5                                    [_addToSceneWithRetainedRendering]
layer.dart:711
package:flutter/src/rendering/layer.dart 1372:12                                  addChildrenToScene
layer.dart:1372
package:flutter/src/rendering/layer.dart 2083:5                                   addToScene
layer.dart:2083
package:flutter/src/rendering/layer.dart 1120:5                                   buildScene
layer.dart:1120
package:flutter/src/rendering/view.dart 358:30                                    compositeFrame
view.dart:358
package:flutter/src/rendering/binding.dart 634:19                                 drawFrame
binding.dart:634
package:flutter/src/widgets/binding.dart 1242:13                                  drawFrame
binding.dart:1242
package:flutter/src/rendering/binding.dart 495:5                                  [_handlePersistentFrameCallback]
binding.dart:495
dart-sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart 117:77  tear
operations.dart:117
package:flutter/src/scheduler/binding.dart 1438:7                                 [_invokeFrameCallback]
binding.dart:1438
package:flutter/src/scheduler/binding.dart 1351:9                                 handleDrawFrame
binding.dart:1351
package:flutter/src/scheduler/binding.dart 1060:9                                 <fn>
binding.dart:1060
lib/_engine/engine/frame_service.dart 147:9                                       <fn>
frame_service.dart:147
dart-sdk/lib/_internal/js_dev_runtime/private/isolate_helper.dart 47:11           internalCallback
isolate_helper.dart:47
════════════════════════════════════════════════════════════════════════════════════════════════════
128
Another exception was thrown: UnimplementedError

The stack trace doesn't indicate that this flag is simply not supported on the web, which makes it time consuming to find the root cause. I forgot that showPerformanceOverlay was enabled in the project😀

Proposal

When showPerformanceOverlay is enabled on the web platform, the framework should log a clear warning such as:

showPerformanceOverlay is not supported on web

Metadata

Metadata

Assignees

No one assigned

    Labels

    P3Issues that are less important to the Flutter projecta: error messageError messages from the Flutter frameworkc: proposalA detailed proposal for a change to Flutterframeworkflutter/packages/flutter repository. See also f: labels.good first issueRelatively approachable for first-time contributorsplatform-webWeb applications specificallyr: fixedIssue is closed as already fixed in a newer versionteam-webOwned by Web platform teamtriaged-webTriaged by Web platform team

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions