Author: rombert
Date: Tue Feb 17 22:49:19 2015
New Revision: 1660526
URL: http://svn.apache.org/r1660526
Log:
SLING-4105 - Content Navigator should not read all the jcr_root when
initialized
Add performance tracing in call sites which can block the UI.
Modified:
sling/trunk/tooling/ide/api/src/org/apache/sling/ide/log/Logger.java
sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/debug/impl/Tracer.java
sling/trunk/tooling/ide/eclipse-ui/.options
sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/JcrContentContentProvider.java
sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/JcrContentLabelProvider.java
sling/trunk/tooling/ide/impl-vlt-test/src/test/java/org/apache/sling/ide/impl/vlt/Slf4jLogger.java
Modified: sling/trunk/tooling/ide/api/src/org/apache/sling/ide/log/Logger.java
URL:
http://svn.apache.org/viewvc/sling/trunk/tooling/ide/api/src/org/apache/sling/ide/log/Logger.java?rev=1660526&r1=1660525&r2=1660526&view=diff
==============================================================================
--- sling/trunk/tooling/ide/api/src/org/apache/sling/ide/log/Logger.java
(original)
+++ sling/trunk/tooling/ide/api/src/org/apache/sling/ide/log/Logger.java Tue
Feb 17 22:49:19 2015
@@ -89,4 +89,17 @@ public interface Logger {
* @param error the error that occured
*/
void trace(String message, Throwable error);
+
+ /**
+ * Sends a performance trace message
+ *
+ * <p>
+ * Note that implementations may choose to not display performance entries
which take less than a predefined
+ * threshold
+ *
+ * @param message A string message
+ * @param duration The operation's duration in milliseconds
+ * @param arguments an optional array of arguments
+ */
+ void tracePerformance(String message, long duration, Object... arguments);
}
Modified:
sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/debug/impl/Tracer.java
URL:
http://svn.apache.org/viewvc/sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/debug/impl/Tracer.java?rev=1660526&r1=1660525&r2=1660526&view=diff
==============================================================================
---
sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/debug/impl/Tracer.java
(original)
+++
sling/trunk/tooling/ide/eclipse-core/src/org/apache/sling/ide/eclipse/core/debug/impl/Tracer.java
Tue Feb 17 22:49:19 2015
@@ -32,9 +32,12 @@ import org.eclipse.osgi.util.NLS;
*/
public class Tracer implements DebugOptionsListener, Logger {
+ private static final long PERF_IGNORE_THRESHOLD = 50;
+
private final Plugin plugin;
private boolean debugEnabled;
private boolean consoleEnabled;
+ private boolean performanceEnabled;
private DebugTrace trace;
public Tracer(Plugin plugin) {
@@ -48,6 +51,7 @@ public class Tracer implements DebugOpti
debugEnabled = options.getBooleanOption(pluginId + "/debug", false);
consoleEnabled = options.getBooleanOption(pluginId + "/debug/console",
false) && debugEnabled;
+ performanceEnabled = options.getBooleanOption(pluginId +
"/debug/performance", false) && debugEnabled;
trace = options.newDebugTrace(pluginId, getClass());
}
@@ -105,6 +109,26 @@ public class Tracer implements DebugOpti
logInternal(IStatus.ERROR, message, cause);
}
+ @Override
+ public void tracePerformance(String message, long duration, Object...
arguments) {
+ if (!performanceEnabled)
+ return;
+
+ if (duration < PERF_IGNORE_THRESHOLD) {
+ return;
+ }
+
+ if (arguments.length > 0)
+ message = NLS.bind(message, arguments);
+
+ String fullMessage = message + " took " + duration + " ms";
+
+ trace.trace("/debug/performance", fullMessage);
+
+ if (consoleEnabled)
+ writeToConsole(fullMessage, null);
+ }
+
private void logInternal(int statusCode, String message, Throwable cause) {
plugin.getLog().log(new Status(statusCode,
plugin.getBundle().getSymbolicName(), message, cause));
}
Modified: sling/trunk/tooling/ide/eclipse-ui/.options
URL:
http://svn.apache.org/viewvc/sling/trunk/tooling/ide/eclipse-ui/.options?rev=1660526&r1=1660525&r2=1660526&view=diff
==============================================================================
--- sling/trunk/tooling/ide/eclipse-ui/.options (original)
+++ sling/trunk/tooling/ide/eclipse-ui/.options Tue Feb 17 22:49:19 2015
@@ -1,2 +1,3 @@
org.apache.sling.ide.eclipse-ui/debug=false
-org.apache.sling.ide.eclipse-ui/debug/console=false
\ No newline at end of file
+org.apache.sling.ide.eclipse-ui/debug/console=false
+org.apache.sling.ide.eclipse-ui/debug/performance=false
\ No newline at end of file
Modified:
sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/JcrContentContentProvider.java
URL:
http://svn.apache.org/viewvc/sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/JcrContentContentProvider.java?rev=1660526&r1=1660525&r2=1660526&view=diff
==============================================================================
---
sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/JcrContentContentProvider.java
(original)
+++
sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/JcrContentContentProvider.java
Tue Feb 17 22:49:19 2015
@@ -17,13 +17,13 @@
package org.apache.sling.ide.eclipse.ui.nav;
import java.util.Arrays;
+import java.util.HashSet;
import java.util.Iterator;
-import java.util.LinkedList;
-import java.util.List;
import java.util.Set;
import org.apache.sling.ide.eclipse.core.ProjectUtil;
import org.apache.sling.ide.eclipse.core.internal.ProjectHelper;
+import org.apache.sling.ide.eclipse.ui.internal.Activator;
import org.apache.sling.ide.eclipse.ui.nav.model.JcrNode;
import org.apache.sling.ide.eclipse.ui.nav.model.SyncDir;
import org.eclipse.core.resources.IContainer;
@@ -58,7 +58,7 @@ public class JcrContentContentProvider i
return;
}
try {
- final List<IResource> toBeRefreshed = new
LinkedList<IResource>();
+ final Set<IProject> toBeRefreshed = new HashSet<IProject>();
event.getDelta().accept(new IResourceDeltaVisitor() {
@Override
@@ -75,17 +75,17 @@ public class JcrContentContentProvider i
return true;
}
});
- if (toBeRefreshed.size()==0) {
- return;
- }
- for (Iterator<IResource> it = toBeRefreshed.iterator();
it
- .hasNext();) {
- final IResource iResource = it.next();
+
+ for (final IProject project : toBeRefreshed) {
viewer.getTree().getDisplay().asyncExec(new
Runnable() {
@Override
public void run() {
-
viewer.refresh(iResource.getProject(), true);
+ long start = System.currentTimeMillis();
+ viewer.refresh(project, true);
+ long end = System.currentTimeMillis();
+ Activator.getDefault().getPluginLogger()
+ .tracePerformance("viewer.refresh({0},true)",
(end - start), project);
}
});
}
@@ -116,8 +116,13 @@ public class JcrContentContentProvider i
if (parentElement instanceof IProject) {
return projectGetChildren((IProject)parentElement);
} else if (parentElement instanceof JcrNode) {
+ long start = System.currentTimeMillis();
JcrNode node = (JcrNode)parentElement;
- return node.getChildren(true);
+ Object[] children = node.getChildren(true);
+ long end = System.currentTimeMillis();
+ Activator.getDefault().getPluginLogger()
+ .tracePerformance("node.getChildren for node at {0}", (end
- start), node.getJcrPath());
+ return children;
} else {
return null;
}
Modified:
sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/JcrContentLabelProvider.java
URL:
http://svn.apache.org/viewvc/sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/JcrContentLabelProvider.java?rev=1660526&r1=1660525&r2=1660526&view=diff
==============================================================================
---
sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/JcrContentLabelProvider.java
(original)
+++
sling/trunk/tooling/ide/eclipse-ui/src/org/apache/sling/ide/eclipse/ui/nav/JcrContentLabelProvider.java
Tue Feb 17 22:49:19 2015
@@ -16,6 +16,7 @@
*/
package org.apache.sling.ide.eclipse.ui.nav;
+import org.apache.sling.ide.eclipse.ui.internal.Activator;
import org.apache.sling.ide.eclipse.ui.nav.model.JcrNode;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ILabelProviderListener;
@@ -53,7 +54,12 @@ public class JcrContentLabelProvider imp
public Image getImage(Object element) {
if (element instanceof JcrNode) {
JcrNode jcrNode = (JcrNode)element;
- return jcrNode.getImage();
+ long start = System.currentTimeMillis();
+ Image image = jcrNode.getImage();
+ long end = System.currentTimeMillis();
+ Activator.getDefault().getPluginLogger()
+ .tracePerformance("getImage for node at {0}", (end -
start), jcrNode.getJcrPath());
+ return image;
} else {
// fallback to default
return null;
Modified:
sling/trunk/tooling/ide/impl-vlt-test/src/test/java/org/apache/sling/ide/impl/vlt/Slf4jLogger.java
URL:
http://svn.apache.org/viewvc/sling/trunk/tooling/ide/impl-vlt-test/src/test/java/org/apache/sling/ide/impl/vlt/Slf4jLogger.java?rev=1660526&r1=1660525&r2=1660526&view=diff
==============================================================================
---
sling/trunk/tooling/ide/impl-vlt-test/src/test/java/org/apache/sling/ide/impl/vlt/Slf4jLogger.java
(original)
+++
sling/trunk/tooling/ide/impl-vlt-test/src/test/java/org/apache/sling/ide/impl/vlt/Slf4jLogger.java
Tue Feb 17 22:49:19 2015
@@ -29,6 +29,8 @@ import org.slf4j.LoggerFactory;
*/
class Slf4jLogger implements Logger {
+ private static final long PERF_IGNORE_THRESHOLD = 50;
+
private final org.slf4j.Logger wrapped =
LoggerFactory.getLogger(Slf4jLogger.class);
@Override
@@ -66,4 +68,12 @@ class Slf4jLogger implements Logger {
public void error(String message) {
wrapped.error(message);
}
+
+ @Override
+ public void tracePerformance(String message, long duration, Object...
arguments) {
+ if (duration < PERF_IGNORE_THRESHOLD) {
+ return;
+ }
+ trace(message + " took " + duration + " ms", arguments);
+ }
}
\ No newline at end of file