You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by cz...@apache.org on 2015/04/27 13:23:03 UTC
svn commit: r1676239 - in
/sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl:
CRUDMergingResourceProvider.java MergingResourceProvider.java
Author: cziegeler
Date: Mon Apr 27 11:23:03 2015
New Revision: 1676239
URL: http://svn.apache.org/r1676239
Log:
SLING-4568 : Performance: MergingResourceProvider.ParentHidingHandler adds about 30pp rendering overhead. Apply slightly modified patch from Joel Richard
Modified:
sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/CRUDMergingResourceProvider.java
sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/MergingResourceProvider.java
Modified: sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/CRUDMergingResourceProvider.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/CRUDMergingResourceProvider.java?rev=1676239&r1=1676238&r2=1676239&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/CRUDMergingResourceProvider.java (original)
+++ sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/CRUDMergingResourceProvider.java Mon Apr 27 11:23:03 2015
@@ -63,22 +63,30 @@ public class CRUDMergingResourceProvider
holder.count = 0;
// Loop over resources
+ boolean isUnderlying = true;
final Iterator<Resource> iter = this.picker.pickResources(resolver, relativePath).iterator();
while ( iter.hasNext() ) {
final Resource rsrc = iter.next();
holder.count++;
holder.highestResourcePath = rsrc.getPath();
- if ( !ResourceUtil.isNonExistingResource(rsrc) ) {
- // check parent for hiding
- final Resource parent = rsrc.getParent();
- if ( parent != null ) {
- final boolean hidden = new ParentHidingHandler(parent, this.traverseHierarchie).isHidden(holder.name);
- if ( hidden ) {
- holder.resources.clear();
- } else {
- holder.resources.add(rsrc);
- }
+
+ if (!ResourceUtil.isNonExistingResource(rsrc)) {
+ final boolean hidden;
+ if (isUnderlying) {
+ hidden = false;
+ } else {
+ // check parent for hiding
+ // SLING 3521 : if parent is not readable, nothing is hidden
+ final Resource parent = rsrc.getParent();
+ hidden = (parent == null ? false : new ParentHidingHandler(parent, this.traverseHierarchie).isHidden(holder.name));
+ }
+ if (hidden) {
+ holder.resources.clear();
+ } else {
+ holder.resources.add(rsrc);
}
+ } else {
+ isUnderlying = false;
}
}
Modified: sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/MergingResourceProvider.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/MergingResourceProvider.java?rev=1676239&r1=1676238&r2=1676239&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/MergingResourceProvider.java (original)
+++ sling/trunk/contrib/extensions/resourcemerger/src/main/java/org/apache/sling/resourcemerger/impl/MergingResourceProvider.java Mon Apr 27 11:23:03 2015
@@ -70,6 +70,10 @@ class MergingResourceProvider implements
}
}
+ /**
+ * Class to check whether a child resource must be hidden. It should not be instantiated for the underlying resource
+ * tree (which is /libs by default) because this check is expensive.
+ */
protected static final class ParentHidingHandler {
private List<ExcludeEntry> entries = new ArrayList<ExcludeEntry>();
@@ -213,16 +217,14 @@ class MergingResourceProvider implements
return null;
}
- boolean first = true;
+ boolean isUnderlying = true;
while (resources.hasNext()) {
final Resource resource = resources.next();
final boolean hidden;
- if (first) {
- // The ParentHidingHandler does not have to be executed for the first resource because it isn't an
- // overlay. This can drastically improve the performance in some cases.
+ if (isUnderlying) {
hidden = false;
- first = false;
+ isUnderlying = false;
} else {
// check parent for hiding
// SLING 3521 : if parent is not readable, nothing is hidden
@@ -254,9 +256,12 @@ class MergingResourceProvider implements
final Iterator<Resource> resources = picker.pickResources(resolver, relativePath).iterator();
+ boolean isUnderlying = true;
while (resources.hasNext()) {
Resource parentResource = resources.next();
- final ParentHidingHandler handler = new ParentHidingHandler(parentResource, this.traverseHierarchie);
+ final ParentHidingHandler handler = !isUnderlying ? new ParentHidingHandler(parentResource, this.traverseHierarchie) : null;
+ isUnderlying = false;
+
for (final Resource child : parentResource.getChildren()) {
final String rsrcName = child.getName();
ResourceHolder holder = null;
@@ -294,11 +299,13 @@ class MergingResourceProvider implements
candidates.remove(candidates.size() - 1);
}
}
- final Iterator<ResourceHolder> iter = candidates.iterator();
- while (iter.hasNext()) {
- final ResourceHolder holder = iter.next();
- if (handler.isHidden(holder.name)) {
- iter.remove();
+ if (handler != null) {
+ final Iterator<ResourceHolder> iter = candidates.iterator();
+ while (iter.hasNext()) {
+ final ResourceHolder holder = iter.next();
+ if (handler.isHidden(holder.name)) {
+ iter.remove();
+ }
}
}
}