commit | e4f08827095c1352ae35206a6a253b034a9b4b27 | [log] [tgz] |
---|---|---|
author | Jens Johansen <jensj@google.com> | Fri Jan 27 08:27:48 2023 +0000 |
committer | Commit Queue <dart-scoped@luci-project-accounts.iam.gserviceaccount.com> | Fri Jan 27 08:27:48 2023 +0000 |
tree | 01f5293e6f7241412032ee4327edd9c17f106261 | |
parent | 70f185870092aac340fc9f93ef003d07a5fc4777 [diff] |
[analyzer] Speedup some completion queries When getting completions, some of the "contributers" basically do a walk of the AST and almost add everything they see, and the list is then later pruned based on the user query. This CL introduces a "first pruning" (a copy of the first part of what is done in the subsequent pruning) so only the things has could match the user query is added. Benchmarks for this: Notes: - All of these numbers are with the timeout increased a lot (to a point where there effectivley isn't any timeout). - I have an external project too, but only in Android Studio as it's a Flutter project and my VSCode then uses the dart included in flutter. I don't know how to make it not do that. Summary: Android Studio, bin/server.dart --- `print(CallHierarchyK^);` Difference at 95.0% confidence -46.45 +/- 10.0349 -45.7861% +/- 9.8915% (Student's t, pooled s = 15.6785) Android Studio, bin/server.dart --- `starter.^;` No difference proven at 95.0% confidence Android Studio, Other project --- `print(Cryptm^);` Difference at 95.0% confidence -90.3 +/- 10.9506 -58.0894% +/- 7.04448% (Student's t, pooled s = 17.1092) VSCode, bin/server.dart --- `print(CallHierarchyK^);` Difference at 95.0% confidence -61.45 +/- 5.41501 -51.4226% +/- 4.53139% (Student's t, pooled s = 8.46036) VSCode, bin/server.dart --- `starter.^;` Difference at 95.0% confidence 6.4 +/- 5.08317 15.4217% +/- 12.2486% (Student's t, pooled s = 7.94189) So for several queries it's ~50% faster. For a single one it slightly slower. Raw numbers: BEFORE: Android Studio, bin/server.dart --- `print(CallHierarchyK^);` 90 ms 88 ms 89 ms 85 ms 139 ms 92 ms 86 ms 101 ms 87 ms 84 ms 112 ms 110 ms 128 ms 99 ms 99 ms 104 ms 98 ms 88 ms 106 ms 144 ms Android Studio, bin/server.dart --- `starter.^;` 38 ms 38 ms 34 ms 30 ms 35 ms 34 ms 29 ms 31 ms 35 ms 60 ms 53 ms 37 ms 54 ms 31 ms 51 ms 33 ms 39 ms 68 ms 75 ms 91 ms Android Studio, Other project --- `print(Cryptm^);` 150 ms 146 ms 142 ms 138 ms 150 ms 213 ms 147 ms 143 ms 149 ms 147 ms 153 ms 147 ms 136 ms 151 ms 151 ms 186 ms 160 ms 153 ms 150 ms 197 ms VSCode, bin/server.dart --- `print(CallHierarchyK^);` 122 ms 113 ms 115 ms 118 ms 124 ms 116 ms 116 ms 114 ms 118 ms 125 ms 130 ms 117 ms 104 ms 119 ms 121 ms 120 ms 127 ms 123 ms 117 ms 131 ms VSCode, bin/server.dart --- `starter.^;` 38 ms 45 ms 35 ms 37 ms 37 ms 59 ms 39 ms 38 ms 37 ms 44 ms 41 ms 41 ms 43 ms 41 ms 39 ms 40 ms 42 ms 43 ms 49 ms 42 ms WITH CL: Android Studio, bin/server.dart --- `print(CallHierarchyK^);` 65 ms 59 ms 41 ms 41 ms 70 ms 38 ms 56 ms 66 ms 64 ms 44 ms 47 ms 56 ms 46 ms 38 ms 46 ms 64 ms 57 ms 44 ms 69 ms 89 ms Android Studio, bin/server.dart --- `starter.^;` 36 ms 36 ms 38 ms 35 ms 37 ms 43 ms 32 ms 30 ms 34 ms 39 ms 32 ms 40 ms 35 ms 34 ms 35 ms 39 ms 46 ms 54 ms 56 ms 78 ms Android Studio, Other project --- `print(Cryptm^);` 59 ms 63 ms 61 ms 80 ms 98 ms 56 ms 60 ms 61 ms 57 ms 61 ms 57 ms 61 ms 59 ms 59 ms 57 ms 64 ms 60 ms 65 ms 58 ms 107 ms VSCode, bin/server.dart --- `print(CallHierarchyK^);` 55 ms 54 ms 50 ms 47 ms 59 ms 55 ms 53 ms 53 ms 67 ms 67 ms 54 ms 54 ms 50 ms 62 ms 54 ms 54 ms 56 ms 59 ms 63 ms 95 ms VSCode, bin/server.dart --- `starter.^;` 57 ms 41 ms 57 ms 40 ms 45 ms 47 ms 40 ms 44 ms 43 ms 43 ms 41 ms 40 ms 42 ms 49 ms 40 ms 46 ms 57 ms 49 ms 81 ms 56 ms https://github.com/flutter/flutter-intellij/issues/6470 Change-Id: I1e34ce04774cafcb47f4e8590b990400a7b0f0ad Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/279389 Reviewed-by: Konstantin Shcheglov <scheglov@google.com> Commit-Queue: Jens Johansen <jensj@google.com> Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Dart is:
Optimized for UI: Develop with a programming language specialized around the needs of user interface creation.
Productive: Make changes iteratively: use hot reload to see the result instantly in your running app.
Fast on all platforms: Compile to ARM & x64 machine code for mobile, desktop, and backend. Or compile to JavaScript for the web.
Dart's flexible compiler technology lets you run Dart code in different ways, depending on your target platform and goals:
Dart Native: For programs targeting devices (mobile, desktop, server, and more), Dart Native includes both a Dart VM with JIT (just-in-time) compilation and an AOT (ahead-of-time) compiler for producing machine code.
Dart Web: For programs targeting the web, Dart Web includes both a development time compiler (dartdevc) and a production time compiler (dart2js).
Dart is free and open source.
See LICENSE and PATENT_GRANT.
Visit dart.dev to learn more about the language, tools, and to find codelabs.
Browse pub.dev for more packages and libraries contributed by the community and the Dart team.
Our API reference documentation is published at api.dart.dev, based on the stable release. (We also publish docs from our beta and dev channels, as well as from the primary development branch).
If you want to build Dart yourself, here is a guide to getting the source, preparing your machine to build the SDK, and building.
There are more documents on our wiki.
The easiest way to contribute to Dart is to file issues.
You can also contribute patches, as described in Contributing.