Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

The IDE code completion is more slow on flutter SDK 2.5 #5761

Closed
luckysmg opened this issue Sep 9, 2021 · 33 comments
Closed

The IDE code completion is more slow on flutter SDK 2.5 #5761

luckysmg opened this issue Sep 9, 2021 · 33 comments
Assignees
Labels
P0 performance General performance issues (not perf tool)
Milestone

Comments

@luckysmg
Copy link

luckysmg commented Sep 9, 2021

My IDE is Idea

I have tried many times.

When i switch to flutter SDK 2.5,the code completion tip will take more time to come out...
But when I switch to flutter SDK 2.2.3,it come out very quickly....

flutter doctor:

Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 2.5.0, on macOS 11.5.2 20G95 darwin-x64, locale
    zh-Hans-CN)
[!] Android toolchain - develop for Android devices (Android SDK version 31.0.0)
    ✗ cmdline-tools component is missing
      Run `path/to/sdkmanager --install "cmdline-tools;latest"`
      See https://developer.android.com/studio/command-line for more details.
    ✗ Android license status unknown.
      Run `flutter doctor --android-licenses` to accept the SDK licenses.
      See https://flutter.dev/docs/get-started/install/macos#android-setup for
      more details.
[✓] Xcode - develop for iOS and macOS
[✓] Chrome - develop for the web
[✓] Android Studio (version 2020.3)
[✓] IntelliJ IDEA Ultimate Edition (version 2021.2.1)
[✓] Connected device (3 available)
@maheshj01
Copy link
Member

Hi @luckysmg, Thanks for filing the issue I could not reproduce the issue, When I hit ctrl+space I see suggestion coming out immediately no difference on flutter 2.2.3 and 2.5.0

Screen.Recording.2021-09-09.at.4.30.21.PM.mov

Also no issue selecting the suggestions

Screen.Recording.2021-09-09.at.4.38.50.PM.mov

Let me know if I am missing anything.

flutter doctor -v
[✓] Flutter (Channel stable, 2.5.0, on macOS 11.5.2 20G95 darwin-arm, locale en-GB)
    • Flutter version 2.5.0 at /Users/mahesh/Documents/flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 4cc385b4b8 (29 hours ago), 2021-09-07 23:01:49 -0700
    • Engine revision f0826da7ef
    • Dart version 2.14.0

[✓] Android toolchain - develop for Android devices (Android SDK version 31.0.0)
    • Android SDK at /Users/mahesh/Library/Android/sdk
    • Platform android-31, build-tools 31.0.0
    • ANDROID_HOME = /Users/mahesh/Library/Android/sdk
    • Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.8+10-b944.6916264)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 12.5.1, Build version 12E507
    • CocoaPods version 1.10.2

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 4.2)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.8+10-b944.6916264)

[✓] IntelliJ IDEA Community Edition (version 2021.2.1)
    • IntelliJ at /Applications/IntelliJ IDEA CE.app
    • Flutter plugin version 60.1.4
    • Dart plugin version 212.5080.8

[✓] VS Code (version 1.59.1)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.26.0

[✓] Connected device (3 available)
    • iPhone 12 Pro (mobile) • B622CBB7-F906-4FA7-8F49-FACEAAC905AB • ios            • com.apple.CoreSimulator.SimRuntime.iOS-14-5 (simulator)
    • macOS (desktop)        • macos                                • darwin-arm64   • macOS 11.5.2 20G95 darwin-arm
    • Chrome (web)           • chrome                               • web-javascript • Google Chrome 93.0.4577.63

• No issues found!

@luckysmg
Copy link
Author

emm,If I write code from nothing,it will be slow.....

here is the video

2.2.3:

2.2.3video.mp4

2.5:

2.5video.mp4

@maheshj01
Copy link
Member

Thanks for the video @luckysmg, I can reproduce it on the stable 2.5 and see a delay, initially, I thought this is the IntelliJ Plugin issue, but since the flutter version is showing the difference this is probably an issue with the tooling,

Intellij Code Completion
Flutter 2.2.3
Screen.Recording.2021-09-10.at.11.48.04.AM.mov
Flutter 2.5.0
Screen.Recording.2021-09-10.at.11.46.37.AM.mov
flutter doctor -v
[✓] Flutter (Channel stable, 2.2.3, on macOS 11.5.2 20G95 darwin-arm, locale en-GB)
    • Flutter version 2.2.3 at /Users/mahesh/Documents/flutter_dev
    • Framework revision f4abaa0735 (2 months ago), 2021-07-01 12:46:11 -0700
    • Engine revision 241c87ad80
    • Dart version 2.13.4

[✓] Android toolchain - develop for Android devices (Android SDK version 31.0.0)
    • Android SDK at /Users/mahesh/Library/Android/sdk
    • Platform android-31, build-tools 31.0.0
    • ANDROID_HOME = /Users/mahesh/Library/Android/sdk
    • Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.8+10-b944.6916264)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 12.5.1, Build version 12E507
    • CocoaPods version 1.10.2

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 4.2)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.8+10-b944.6916264)

[✓] IntelliJ IDEA Community Edition (version 2021.2.1)
    • IntelliJ at /Applications/IntelliJ IDEA CE.app
    • Flutter plugin version 60.1.4
    • Dart plugin version 212.5080.8

[✓] VS Code (version 1.59.1)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.26.0

[✓] Connected device (3 available)
    • iPhone 12 Pro (mobile) • B622CBB7-F906-4FA7-8F49-FACEAAC905AB • ios            •
      com.apple.CoreSimulator.SimRuntime.iOS-14-5 (simulator)
    • macOS (desktop)        • macos                                • darwin-arm64   • macOS 11.5.2 20G95
      darwin-arm
    • Chrome (web)           • chrome                               • web-javascript • Google Chrome
      93.0.4577.63

• No issues found!
[✓] Flutter (Channel stable, 2.5.0, on macOS 11.5.2 20G95 darwin-arm, locale en-GB)
    • Flutter version 2.5.0 at /Users/mahesh/Documents/flutter
    • Upstream repository https://github.com/flutter/flutter.git
    • Framework revision 4cc385b4b8 (2 days ago), 2021-09-07 23:01:49 -0700
    • Engine revision f0826da7ef
    • Dart version 2.14.0

[✓] Android toolchain - develop for Android devices (Android SDK version 31.0.0)
    • Android SDK at /Users/mahesh/Library/Android/sdk
    • Platform android-31, build-tools 31.0.0
    • ANDROID_HOME = /Users/mahesh/Library/Android/sdk
    • Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
    • Java version OpenJDK Runtime Environment (build 11.0.8+10-b944.6916264)
    • All Android licenses accepted.

[✓] Xcode - develop for iOS and macOS
    • Xcode at /Applications/Xcode.app/Contents/Developer
    • Xcode 12.5.1, Build version 12E507
    • CocoaPods version 1.10.2

[✓] Chrome - develop for the web
    • Chrome at /Applications/Google Chrome.app/Contents/MacOS/Google Chrome

[✓] Android Studio (version 4.2)
    • Android Studio at /Applications/Android Studio.app/Contents
    • Flutter plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/9212-flutter
    • Dart plugin can be installed from:
      🔨 https://plugins.jetbrains.com/plugin/6351-dart
    • Java version OpenJDK Runtime Environment (build 11.0.8+10-b944.6916264)

[✓] IntelliJ IDEA Community Edition (version 2021.2.1)
    • IntelliJ at /Applications/IntelliJ IDEA CE.app
    • Flutter plugin version 60.1.4
    • Dart plugin version 212.5080.8

[✓] VS Code (version 1.59.1)
    • VS Code at /Applications/Visual Studio Code.app/Contents
    • Flutter extension version 3.26.0

[✓] Connected device (3 available)
    • iPhone 12 Pro (mobile) • B622CBB7-F906-4FA7-8F49-FACEAAC905AB • ios            •
      com.apple.CoreSimulator.SimRuntime.iOS-14-5 (simulator)
    • macOS (desktop)        • macos                                • darwin-arm64   • macOS 11.5.2 20G95
      darwin-arm
    • Chrome (web)           • chrome                               • web-javascript • Google Chrome
      93.0.4577.63

• No issues found!

@atreeon
Copy link

atreeon commented Sep 13, 2021

Thanks @maheshmnj . A +1 from me here. I was using Flutter 2.2.1 which was a little bit slow but 2.5 is making intellisense and code completion unusable (its easier to type in the results). I do have a large project but it was kind of ok previously.

@xianshui
Copy link

Encountered the same issue(seems OK on vs code), is there any solution for it?

@zanderso
Copy link
Member

/cc @jacob314

@jacob314 jacob314 transferred this issue from flutter/flutter Sep 14, 2021
@jacob314 jacob314 added the performance General performance issues (not perf tool) label Sep 14, 2021
@jacob314
Copy link
Contributor

cc @stevemessick

@stevemessick
Copy link
Member

@jwren Could you look into this? @jacob314 and I were just chatting and realized this is unlikely to be a Flutter plugin issue.

@jwren jwren self-assigned this Sep 16, 2021
@jwren
Copy link
Contributor

jwren commented Sep 16, 2021

Yes, assigned to myself. I will chat with Brian and figure out what has changed in the completion algorithm to fix this.

@stevemessick stevemessick added this to the M61 milestone Sep 16, 2021
@devoncarew
Copy link
Member

From running this locally on a helloworld flutter app (flutter master; dart plugin 212.4746.57; IntelliJ 2021.2 CE):

  • I do see rough wall clock times of ~1s or slightly longer for completions (I did not do exact measurements end-to-end from IntelliJ, but that should be easy enough from the plugin itself)
  • completion times are high for the portion of time just in the analysis server; 300-400ms for the first completion after an edit, and 150ms for 2nd and later completions. even without the likely very high decoding time on the IntelliJ side, this is well past our 100ms completion target

Assuming that the end-to-end times come in where I suspect they are, I think it's safe to say that most dart and flutter developers now see completion times above 1 second.

Screen Shot 2021-09-21 at 11 41 39 PM

@devoncarew devoncarew added the P0 label Sep 22, 2021
@devoncarew
Copy link
Member

We are only computing and sending back ~3000 results, which while high, doesn't seem too bad (I was expecting high decoding costs due to 5k-10k results or something). It would be worth looking at what's being sent back over the wire; is each completion entry expensive - are we sending an unexpected amount of data?

@timsneath
Copy link
Contributor

We're seeing some additional evidence of this from Twitter, with a number of reports / corroborations in this thread: https://twitter.com/MatthewRideout/status/1439972286883315712

@atreeon
Copy link

atreeon commented Sep 22, 2021

Thanks @maheshmnj . A +1 from me here. I was using Flutter 2.2.1 which was a little bit slow but 2.5 is making intellisense and code completion unusable (its easier to type in the results). I do have a large project but it was kind of ok previously.

Just to say that my problem was mostly remedied after I allocated more memory to IntelliJ InteliJ IDEA CE.app.vmoptions, I was previously using the default options which might not be recommended. Possibly my problem is different to the OP's problem. Could 2.5 use more memory? Good news is everything is ok enough for me, still a tiny lag but one that doesn't bother me.

@jwren
Copy link
Contributor

jwren commented Sep 22, 2021

I have been looking into this issue and believe that I have a proposal to fix it. Working with @jacob314 to figure out a path forward to staff the work and get the SDK patched.

@KlausJokisuo
Copy link

Great to see that this is getting attention. I think the sluggishness has been an ongoing issue for a while now, even before this release. VSCode seems to be faster than IntelliJ regarding code completion and code analysis, at least on previous versions.

@Lootwig
Copy link

Lootwig commented Sep 23, 2021

Thanks @maheshmnj . A +1 from me here. I was using Flutter 2.2.1 which was a little bit slow but 2.5 is making intellisense and code completion unusable (its easier to type in the results). I do have a large project but it was kind of ok previously.

Just to say that my problem was mostly remedied after I allocated more memory to IntelliJ InteliJ IDEA CE.app.vmoptions, I was previously using the default options which might not be recommended. Possibly my problem is different to the OP's problem. Could 2.5 use more memory? Good news is everything is ok enough for me, still a tiny lag but one that doesn't bother me.

@atreeon how much? I've got 8GB allocated, of which only 1 is used, and it's just as slow as shown in the videos above

@atreeon
Copy link

atreeon commented Sep 23, 2021

@Lootwig I've got 4GB allocated, if you've got 8GB specified it won't be that! (I've seen it go up to about 1.8gb and mine was previously around 800mb or seomthing like that). Mine is just as slow as in the video but a lot better than it was previously. Interestingly it is slow in a Flutter project but ok in Dart.

@jwren jwren assigned scheglov and unassigned jwren Sep 23, 2021
@jwren
Copy link
Contributor

jwren commented Sep 23, 2021

Re-assigning to Konstantin who is putting together a PR.

copybara-service bot pushed a commit to dart-lang/sdk that referenced this issue Sep 23, 2021
This reverts commit 3cc518b.
Initial CL: https://dart-review.googlesource.com/c/sdk/+/201021

Bug: flutter/flutter-intellij#5761
Change-Id: I62e57deef819f78f1d08934ad924585eaa52223b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/214225
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Jacob Richman <jacobr@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
@scheglov
Copy link
Contributor

Some experiments.
All times are in milliseconds.

  1. Initial state, no filtering.
    1632428517931 [Perf: <request>: 339, getResolvedUnit: 0, computeSuggestions: 85, DartCompletionManager: 85, build DartCompletionRequest: 0, ArgListContributor: 0, CombinatorContributor: 0, ExtensionMemberContributor: 0, FieldFormalContributor: 0, ImportedReferenceContributor: 81, KeywordContributor: 0, LabelContributor: 0, LibraryMemberContributor: 0, LibraryPrefixContributor: 0, LocalLibraryContributor: 0, LocalReferenceContributor: 0, NamedConstructorContributor: 0, OverrideContributor: 0, RedirectingContributor: 0, StaticMemberContributor: 0, TypeMemberContributor: 0, UriContributor: 0, VariableNameContributor: 0, filter: 3 (count: 3250, matchCount: 3250), send notification: 252, ]

  2. Filter using an already typed prefix, in this case M (matches Material widgets). This makes it 4x faster. All of it because we send 20x fewer suggestions - 146 our of 3250.
    1632428638475 [Perf: <request>: 79, getResolvedUnit: 0, computeSuggestions: 69, DartCompletionManager: 69, build DartCompletionRequest: 0, ArgListContributor: 0, CombinatorContributor: 0, ExtensionMemberContributor: 0, FieldFormalContributor: 0, ImportedReferenceContributor: 66, KeywordContributor: 0, LabelContributor: 0, LibraryMemberContributor: 0, LibraryPrefixContributor: 0, LocalLibraryContributor: 0, LocalReferenceContributor: 0, NamedConstructorContributor: 0, OverrideContributor: 0, RedirectingContributor: 0, StaticMemberContributor: 0, TypeMemberContributor: 0, UriContributor: 0, VariableNameContributor: 0, filter: 1 (count: 3250, matchCount: 146), send notification: 7, ]

  3. We can cache CompletionSuggestion instances for Element using Expando in SuggestionBuilder. This makes it another 4x faster. All of it because ImportedReferenceContributor is much faster.
    1632429007472 [Perf: <request>: 20, getResolvedUnit: 1, computeSuggestions: 10, DartCompletionManager: 10, build DartCompletionRequest: 0, ArgListContributor: 0, CombinatorContributor: 0, ExtensionMemberContributor: 0, FieldFormalContributor: 0, ImportedReferenceContributor: 7, KeywordContributor: 0, LabelContributor: 0, LibraryMemberContributor: 0, LibraryPrefixContributor: 0, LocalLibraryContributor: 0, LocalReferenceContributor: 0, NamedConstructorContributor: 0, OverrideContributor: 0, RedirectingContributor: 0, StaticMemberContributor: 0, TypeMemberContributor: 0, UriContributor: 0, VariableNameContributor: 0, filter: 2 (count: 3250, matchCount: 146), send notification: 8, ]

@alexander-doroshko @bwilkerson @DanTup

@scheglov
Copy link
Contributor

Note, that this is not what users could get right now, but just what could be achieved. All completions above were for already resolved file, just typing Ctrl+Space. In most cases however the user types a character, and so two things happen:

  1. All the library elements are discarded and reloaded from summaries, this prevents returning cached CompletionSuggestions in SuggestionBuilder - we have new instances of all elements, so the Expando is empty for them. See ImportedReferenceContributor: 194.
  2. We spend time to resolve the unit where completion happens. See getResolvedUnit: 112 below. I think the number is high because we spend time to build namespaces of large imported libraries.
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';

void f() {^
  print(42);
}

As a result, even with filtering performance is not great.
1632430192285 [Perf: <request>: 337, getResolvedUnit: 112, computeSuggestions: 197, DartCompletionManager: 197, build DartCompletionRequest: 0, ArgListContributor: 0, CombinatorContributor: 0, ExtensionMemberContributor: 0, FieldFormalContributor: 0, ImportedReferenceContributor: 194, KeywordContributor: 0, LabelContributor: 0, LibraryMemberContributor: 0, LibraryPrefixContributor: 0, LocalLibraryContributor: 0, LocalReferenceContributor: 0, NamedConstructorContributor: 0, OverrideContributor: 0, RedirectingContributor: 0, StaticMemberContributor: 0, TypeMemberContributor: 0, UriContributor: 0, VariableNameContributor: 0, filter: 1 (count: 3246, matchCount: 146), send notification: 26, ]

It would have been even worse (on about 200 ms), as what we have today.

Fortunately it could be improved so that completion in the trivial code like above is about 20 ms. We need to improve the analyzer to keep these package:flutter libraries. But it will take a few days to carefully implement it.

@scheglov
Copy link
Contributor

Same as #5761 (comment), but if keeping unaffected library elements: 337 ms turn into 24 ms.
[Perf: <request>: 24, getResolvedUnit: 7, computeSuggestions: 10, DartCompletionManager: 10, build DartCompletionRequest: 0, ArgListContributor: 0, CombinatorContributor: 0, ExtensionMemberContributor: 0, FieldFormalContributor: 0, ImportedReferenceContributor: 6, KeywordContributor: 0, LabelContributor: 0, LibraryMemberContributor: 0, LibraryPrefixContributor: 0, LocalLibraryContributor: 0, LocalReferenceContributor: 0, NamedConstructorContributor: 0, OverrideContributor: 0, RedirectingContributor: 0, StaticMemberContributor: 0, TypeMemberContributor: 0, UriContributor: 0, VariableNameContributor: 0, filter: 2 (count: 3246, matchCount: 146), send notification: 7, ]

copybara-service bot pushed a commit to dart-lang/sdk that referenced this issue Sep 25, 2021
For a small analyzer library the time to analyze it 100 times,
each time changing that file that we are analyzing, so simulating
typing in this file, goes from 1000 ms to 100 ms; for a bigger
library 2400 vs 800 ms.

For a tiny Flutter hello_world the difference is 100x, 5800 vs 50 ms.

Bug: flutter/flutter-intellij#5761
Change-Id: I15c43f4cd66399788ffe6032c52fb365665de7f8
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/214502
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
copybara-service bot pushed a commit to dart-lang/sdk that referenced this issue Sep 29, 2021
This reverts commit 3cc518b.
Initial CL: https://dart-review.googlesource.com/c/sdk/+/201021

Bug: flutter/flutter-intellij#5761
Change-Id: I62e57deef819f78f1d08934ad924585eaa52223b
Reviewed-on: https://dart-review.googlesource.com/c/sdk/+/214225
Reviewed-by: Brian Wilkerson <brianwilkerson@google.com>
Reviewed-by: Jacob Richman <jacobr@google.com>
Commit-Queue: Konstantin Shcheglov <scheglov@google.com>
@mit-mit
Copy link
Member

mit-mit commented Sep 29, 2021

@scheglov it's my understanding that this is fixed in the main/dev channel (as we reverted in dart-lang/sdk@6207d1d), and is being fixed in stable (via cherry-pick dart-lang/sdk#47285), so can this issue be closed?

@Angeloem
Copy link

I thought this was me only....

I found out that invalidating caches and restarting sometimes fixed the problem for such a session! This would happen 2 out of roughly 6 times..

@scheglov
Copy link
Contributor

Yes, we can close this issue.
The acute issue has been fixed.
We have more work planned on code completion in Q4.

@KlausJokisuo
Copy link

KlausJokisuo commented Sep 29, 2021

Ideas when Dart 2.14.3 will be included with Flutter Stable?

Edit: it's out 👍

@xshiwei
Copy link

xshiwei commented Sep 30, 2021

Flutter plans to update the DART version when

@mit-mit
Copy link
Member

mit-mit commented Oct 4, 2021

This is now available in Flutter stable, version 2.5.2.

@SametSahin10
Copy link

SametSahin10 commented Oct 4, 2021

This is now available in Flutter stable, version 2.5.2.

The IntelliJ Dart plugin needs to be updated in order to get this fix. Is that right?

@DanTup
Copy link
Contributor

DanTup commented Oct 4, 2021

@SametSahin10 the change is in the SDK. Upgrading Flutter to v2.5.2 (by running flutter upgrade) and restarting your IDE should be enough.

@KlausJokisuo
Copy link

The problem still exists at least on IntelliJ platform. I've raised another issue regarding this.

#5825

@ldsouza93
Copy link

i'm losing hope, i have a ryzen 7 4800h and 16gb ram, ssd, thermals all fine and android studio is very slow

@mit-mit
Copy link
Member

mit-mit commented Oct 3, 2022

@ldsouza93 sorry to hear that you are having issues. This is a closed, year old issue. Can you kindly file a new issue, and detail what versions you are using, and what you are experiencing?

@jwren
Copy link
Contributor

jwren commented Oct 3, 2022

@ldsouza93 Yes, sorry to hear you are experiencing a slow developer experience. Yes, do create a new issue with more information. With your project in VS Code, with the same analysis server, do you experience the same slowness?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
P0 performance General performance issues (not perf tool)
Projects
None yet
Development

No branches or pull requests