-
Notifications
You must be signed in to change notification settings - Fork 29.2k
Description
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.