From f0c079c8739042aa147df884e8474cc6c056ef35 Mon Sep 17 00:00:00 2001 From: Thomas Watson Date: Wed, 24 Jul 2019 16:53:28 -0500 Subject: Bug 549547 - [region] small optimizations for loading from cache Change-Id: I06e7f89dd8c4c927afb14755e486c06df170cf2a Signed-off-by: Thomas Watson --- .../region/StandardRegionDigraphPersistence.java | 11 +++++++--- .../region/StandardRegionFilterBuilder.java | 25 +++++++++++----------- 2 files changed, 20 insertions(+), 16 deletions(-) diff --git a/bundles/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/StandardRegionDigraphPersistence.java b/bundles/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/StandardRegionDigraphPersistence.java index c26ecda06..79447a21e 100644 --- a/bundles/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/StandardRegionDigraphPersistence.java +++ b/bundles/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/StandardRegionDigraphPersistence.java @@ -159,7 +159,7 @@ public final class StandardRegionDigraphPersistence implements RegionDigraphPers if (head == null) throw new IOException("Could not find head region: " + headName); //$NON-NLS-1$ // read the sharing policy - RegionFilterBuilder builder = digraph.createRegionFilterBuilder(); + Map> filters = new HashMap<>(); // read the number of name spaces int numSpaces = in.readInt(); // read each name space policy @@ -170,10 +170,15 @@ public final class StandardRegionDigraphPersistence implements RegionDigraphPers int numFilters = in.readInt(); for (int j = 0; j < numFilters; j++) { String filter = in.readUTF(); - builder.allow(namespace, filter); + Collection namespaceFilters = filters.get(namespace); + if (namespaceFilters == null) { + namespaceFilters = new ArrayList<>(numFilters); + filters.put(namespace, namespaceFilters); + } + namespaceFilters.add(FrameworkUtil.createFilter(filter)); } } - digraph.connect(tail, builder.build(), head); + digraph.connect(tail, new StandardRegionFilter(filters), head); } /** diff --git a/bundles/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/StandardRegionFilterBuilder.java b/bundles/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/StandardRegionFilterBuilder.java index befd81493..b6cf224f0 100644 --- a/bundles/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/StandardRegionFilterBuilder.java +++ b/bundles/org.eclipse.equinox.region/src/org/eclipse/equinox/internal/region/StandardRegionFilterBuilder.java @@ -36,13 +36,7 @@ public final class StandardRegionFilterBuilder implements RegionFilterBuilder { if (filter == null) throw new IllegalArgumentException("The filter must not be null."); //$NON-NLS-1$ synchronized (this.monitor) { - Collection namespaceFilters = policy.get(namespace); - if (namespaceFilters == null) { - // use set to avoid duplicates - namespaceFilters = new LinkedHashSet(); - policy.put(namespace, namespaceFilters); - } - + Collection namespaceFilters = getNamespaceFilters(namespace); namespaceFilters.add(createFilter(filter)); } if (VISIBLE_SERVICE_NAMESPACE.equals(namespace)) { @@ -64,12 +58,7 @@ public final class StandardRegionFilterBuilder implements RegionFilterBuilder { if (namespace == null) throw new IllegalArgumentException("The namespace must not be null."); //$NON-NLS-1$ synchronized (this.monitor) { - Collection namespaceFilters = policy.get(namespace); - if (namespaceFilters == null) { - // use set to avoid duplicates - namespaceFilters = new LinkedHashSet(); - policy.put(namespace, namespaceFilters); - } + Collection namespaceFilters = getNamespaceFilters(namespace); // remove any other filters since this will override them all. namespaceFilters.clear(); namespaceFilters.add(StandardRegionFilter.ALL); @@ -81,6 +70,16 @@ public final class StandardRegionFilterBuilder implements RegionFilterBuilder { return this; } + private Collection getNamespaceFilters(String namespace) { + Collection namespaceFilters = policy.get(namespace); + if (namespaceFilters == null) { + // use set to avoid duplicates + namespaceFilters = new LinkedHashSet(); + policy.put(namespace, namespaceFilters); + } + return namespaceFilters; + } + @Override public RegionFilter build() { synchronized (this.monitor) { -- cgit v1.2.3