Skip to content

Show error message in release mode when box is not laid out without losing performance #126303

@fzyzcjy

Description

@fzyzcjy

Please see description in #126302 :)

Copied from #126302

When I encounter bugs in production environment saying null pointer error on return _size!, I wish I could know more information! However, currently the information is revealed by assert(hasSize, 'RenderBox was not laid out: $this');, thus only in debug mode can I know what is this (and/or more information that can be added), while in release mode I can only see a stack trace saying it is RenderBox.size that throws - nothing more :/

Therefore, it is intuitive to add this extra information in release mode. However, will it affect performance? We all know this is in critical path and should be quite careful. Thus I did some experiments: https://godbolt.org/z/zPPPf5969 From my naive understanding of assembly, the two versions of code (size! vs size ?? throw) has the same assembly, except that they throw different types of errors. In other words, when there is no error, both code should be equivalent; when there is an error, surely the new code will be slower since it calls this.toString(), but the error handling process is rare and already heavy, so this is not a problem.

image

Metadata

Metadata

Assignees

No one assigned

    Labels

    P2Important issues not at the top of the work lista: error messageError messages from the Flutter frameworka: productionIssues experienced in live production appsc: proposalA detailed proposal for a change to Flutterframeworkflutter/packages/flutter repository. See also f: labels.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions