From b813156153640bf3ba33cbb0d36639ca791d7ac3 Mon Sep 17 00:00:00 2001 From: Martino Facchin Date: Fri, 23 Jun 2017 16:50:10 +0200 Subject: [PATCH 1/3] Only rescan libraries folders when really needed Scanning libraries is an heavy task if the sketchbook becomes huge; This patch targets two points: - remove the rescan() after setLibrariesFolders(), which already performs a rescan - call setLibrariesFolders() only when the folder list has changed - This ensures that no scan is performed when changing board in the same architecture Could mitigate #6350 --- .../contributions/libraries/LibrariesIndexer.java | 8 ++++++-- arduino-core/src/processing/app/BaseNoGui.java | 9 +++++---- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/arduino-core/src/cc/arduino/contributions/libraries/LibrariesIndexer.java b/arduino-core/src/cc/arduino/contributions/libraries/LibrariesIndexer.java index a09eb2a468f..9f4579a2fab 100644 --- a/arduino-core/src/cc/arduino/contributions/libraries/LibrariesIndexer.java +++ b/arduino-core/src/cc/arduino/contributions/libraries/LibrariesIndexer.java @@ -60,7 +60,7 @@ public class LibrariesIndexer { private LibrariesIndex index; private final LibraryList installedLibraries = new LibraryList(); private final LibraryList installedLibrariesWithDuplicates = new LibraryList(); - private List librariesFolders; + private ArrayList librariesFolders; private final File indexFile; private final File stagingFolder; private File sketchbookLibrariesFolder; @@ -101,11 +101,15 @@ private void parseIndex(File file) throws IOException { } } - public void setLibrariesFolders(List _librariesFolders) { + public void setLibrariesFolders(ArrayList _librariesFolders) { librariesFolders = _librariesFolders; rescanLibraries(); } + public ArrayList getLibrariesFolders() { + return librariesFolders; + } + public void rescanLibraries() { // Clear all installed flags installedLibraries.clear(); diff --git a/arduino-core/src/processing/app/BaseNoGui.java b/arduino-core/src/processing/app/BaseNoGui.java index 62cfd0d687c..98b3a2f7d92 100644 --- a/arduino-core/src/processing/app/BaseNoGui.java +++ b/arduino-core/src/processing/app/BaseNoGui.java @@ -87,7 +87,7 @@ public class BaseNoGui { public static Map importToLibraryTable; // XXX: Remove this field - static private List librariesFolders; + static private ArrayList librariesFolders; static UserNotifier notifier = new BasicUserNotifier(); @@ -245,7 +245,7 @@ static public String getHardwarePath() { return getHardwareFolder().getAbsolutePath(); } - static public List getLibrariesPath() { + static public ArrayList getLibrariesPath() { return librariesFolders; } @@ -679,8 +679,9 @@ static public void onBoardOrPortChange() { // Libraries located in the latest folders on the list can override // other libraries with the same name. librariesIndexer.setSketchbookLibrariesFolder(getSketchbookLibrariesFolder()); - librariesIndexer.setLibrariesFolders(librariesFolders); - librariesIndexer.rescanLibraries(); + if (librariesIndexer.getLibrariesFolders() == null || !librariesIndexer.getLibrariesFolders().equals(librariesFolders)) { + librariesIndexer.setLibrariesFolders(librariesFolders); + } populateImportToLibraryTable(); } From 234c19f369ffc2c645a5123961a118104999d823 Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Fri, 2 Feb 2018 11:58:00 +0100 Subject: [PATCH 2/3] Use List instead of ArrayList where possible --- .../arduino/contributions/libraries/LibrariesIndexer.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/arduino-core/src/cc/arduino/contributions/libraries/LibrariesIndexer.java b/arduino-core/src/cc/arduino/contributions/libraries/LibrariesIndexer.java index 9f4579a2fab..5adcbf20170 100644 --- a/arduino-core/src/cc/arduino/contributions/libraries/LibrariesIndexer.java +++ b/arduino-core/src/cc/arduino/contributions/libraries/LibrariesIndexer.java @@ -60,7 +60,7 @@ public class LibrariesIndexer { private LibrariesIndex index; private final LibraryList installedLibraries = new LibraryList(); private final LibraryList installedLibrariesWithDuplicates = new LibraryList(); - private ArrayList librariesFolders; + private List librariesFolders; private final File indexFile; private final File stagingFolder; private File sketchbookLibrariesFolder; @@ -101,12 +101,12 @@ private void parseIndex(File file) throws IOException { } } - public void setLibrariesFolders(ArrayList _librariesFolders) { + public void setLibrariesFolders(List _librariesFolders) { librariesFolders = _librariesFolders; rescanLibraries(); } - public ArrayList getLibrariesFolders() { + public List getLibrariesFolders() { return librariesFolders; } From f2595d003c3883ca9cfe79b2a5df210a0b8c084f Mon Sep 17 00:00:00 2001 From: Cristian Maglie Date: Fri, 2 Feb 2018 12:15:00 +0100 Subject: [PATCH 3/3] Move the check into setLibrariesFolders() --- .../arduino/contributions/libraries/LibrariesIndexer.java | 6 ++++-- arduino-core/src/processing/app/BaseNoGui.java | 4 +--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/arduino-core/src/cc/arduino/contributions/libraries/LibrariesIndexer.java b/arduino-core/src/cc/arduino/contributions/libraries/LibrariesIndexer.java index 5adcbf20170..d430e7196e7 100644 --- a/arduino-core/src/cc/arduino/contributions/libraries/LibrariesIndexer.java +++ b/arduino-core/src/cc/arduino/contributions/libraries/LibrariesIndexer.java @@ -102,8 +102,10 @@ private void parseIndex(File file) throws IOException { } public void setLibrariesFolders(List _librariesFolders) { - librariesFolders = _librariesFolders; - rescanLibraries(); + if (librariesFolders != _librariesFolders && !librariesFolders.equals(_librariesFolders)) { + librariesFolders = _librariesFolders; + rescanLibraries(); + } } public List getLibrariesFolders() { diff --git a/arduino-core/src/processing/app/BaseNoGui.java b/arduino-core/src/processing/app/BaseNoGui.java index 98b3a2f7d92..1a895e89ea9 100644 --- a/arduino-core/src/processing/app/BaseNoGui.java +++ b/arduino-core/src/processing/app/BaseNoGui.java @@ -679,9 +679,7 @@ static public void onBoardOrPortChange() { // Libraries located in the latest folders on the list can override // other libraries with the same name. librariesIndexer.setSketchbookLibrariesFolder(getSketchbookLibrariesFolder()); - if (librariesIndexer.getLibrariesFolders() == null || !librariesIndexer.getLibrariesFolders().equals(librariesFolders)) { - librariesIndexer.setLibrariesFolders(librariesFolders); - } + librariesIndexer.setLibrariesFolders(librariesFolders); populateImportToLibraryTable(); }