summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHenri Sara <hesara@vaadin.com>2013-08-22 11:28:39 +0300
committerVaadin Code Review <review@vaadin.com>2013-08-27 09:20:21 +0000
commitb83240f9026489a241430e5d33ffbebdf93d14a5 (patch)
tree907a1d17e1ca040868892de86ddb46354a8f93e5
parentbd4442bf6746bffdefb321a70e8a204a24946361 (diff)
downloadvaadin-framework-b83240f9026489a241430e5d33ffbebdf93d14a5.tar.gz
vaadin-framework-b83240f9026489a241430e5d33ffbebdf93d14a5.zip
Optimize CssLayout hierarchy update (#11284)
This change also adds some profiling for CssLayoutConnector. Change-Id: Ia567c2c0ed2cff2c73a9019cea0f9a0240955dc7
-rw-r--r--client/src/com/vaadin/client/ui/VCssLayout.java3
-rw-r--r--client/src/com/vaadin/client/ui/csslayout/CssLayoutConnector.java15
2 files changed, 15 insertions, 3 deletions
diff --git a/client/src/com/vaadin/client/ui/VCssLayout.java b/client/src/com/vaadin/client/ui/VCssLayout.java
index 4357116707..c073c18ccb 100644
--- a/client/src/com/vaadin/client/ui/VCssLayout.java
+++ b/client/src/com/vaadin/client/ui/VCssLayout.java
@@ -40,7 +40,10 @@ public class VCssLayout extends FlowPanel {
/**
* For internal use only. May be removed or replaced in the future.
+ *
+ * @deprecated since 7.1.4 no longer used by the framework, might be removed
*/
+ @Deprecated
public void addOrMove(Widget child, int index) {
Profiler.enter("VCssLayout.addOrMove");
if (child.getParent() == this) {
diff --git a/client/src/com/vaadin/client/ui/csslayout/CssLayoutConnector.java b/client/src/com/vaadin/client/ui/csslayout/CssLayoutConnector.java
index 4c8d1a3ecc..b6dfffcc55 100644
--- a/client/src/com/vaadin/client/ui/csslayout/CssLayoutConnector.java
+++ b/client/src/com/vaadin/client/ui/csslayout/CssLayoutConnector.java
@@ -22,6 +22,7 @@ import com.vaadin.client.BrowserInfo;
import com.vaadin.client.ComponentConnector;
import com.vaadin.client.ConnectorHierarchyChangeEvent;
import com.vaadin.client.FastStringMap;
+import com.vaadin.client.Profiler;
import com.vaadin.client.Util;
import com.vaadin.client.VCaption;
import com.vaadin.client.communication.StateChangeEvent;
@@ -120,17 +121,23 @@ public class CssLayoutConnector extends AbstractLayoutConnector {
*/
@Override
public void onConnectorHierarchyChange(ConnectorHierarchyChangeEvent event) {
- int index = 0;
+ Profiler.enter("CssLayoutConnector.onConnectorHierarchyChange");
+ Profiler.enter("CssLayoutConnector.onConnectorHierarchyChange add children");
+ // for large layouts, significantly faster to clear the list and always
+ // append to the end than to move the children around
+ getWidget().clear();
for (ComponentConnector child : getChildComponents()) {
VCaption childCaption = childIdToCaption
.get(child.getConnectorId());
if (childCaption != null) {
- getWidget().addOrMove(childCaption, index++);
+ getWidget().add(childCaption);
}
- getWidget().addOrMove(child.getWidget(), index++);
+ getWidget().add(child.getWidget());
}
+ Profiler.leave("CssLayoutConnector.onConnectorHierarchyChange add children");
// Detach old child widgets and possibly their caption
+ Profiler.enter("CssLayoutConnector.onConnectorHierarchyChange remove old children");
for (ComponentConnector child : event.getOldChildren()) {
if (child.getParent() == this) {
// Skip current children
@@ -143,6 +150,8 @@ public class CssLayoutConnector extends AbstractLayoutConnector {
getWidget().remove(vCaption);
}
}
+ Profiler.leave("CssLayoutConnector.onConnectorHierarchyChange remove old children");
+ Profiler.leave("CssLayoutConnector.onConnectorHierarchyChange");
}
/**