| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 library fn; | 5 library fn; |
| 6 | 6 |
| 7 import 'dart:async'; | 7 import 'dart:async'; |
| 8 import 'dart:collection'; | 8 import 'dart:collection'; |
| 9 import 'dart:sky' as sky; | 9 import 'dart:sky' as sky; |
| 10 import 'reflect.dart' as reflect; | 10 import 'reflect.dart' as reflect; |
| (...skipping 170 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 181 List<EventHandler> newHandlers = events._handlers; | 181 List<EventHandler> newHandlers = events._handlers; |
| 182 int newStartIndex = 0; | 182 int newStartIndex = 0; |
| 183 int newEndIndex = newHandlers.length; | 183 int newEndIndex = newHandlers.length; |
| 184 | 184 |
| 185 List<EventHandler> oldHandlers = old.events._handlers; | 185 List<EventHandler> oldHandlers = old.events._handlers; |
| 186 int oldStartIndex = 0; | 186 int oldStartIndex = 0; |
| 187 int oldEndIndex = oldHandlers.length; | 187 int oldEndIndex = oldHandlers.length; |
| 188 | 188 |
| 189 // Skip over leading handlers that match. | 189 // Skip over leading handlers that match. |
| 190 while (newStartIndex < newEndIndex && oldStartIndex < oldEndIndex) { | 190 while (newStartIndex < newEndIndex && oldStartIndex < oldEndIndex) { |
| 191 EventHandler newHander = newHandlers[newStartIndex]; | 191 EventHandler newHandler = newHandlers[newStartIndex]; |
| 192 EventHandler oldHandler = oldHandlers[oldStartIndex]; | 192 EventHandler oldHandler = oldHandlers[oldStartIndex]; |
| 193 if (newHander.type != oldHandler.type | 193 if (newHandler.type != oldHandler.type |
| 194 || newHander.listener != oldHandler.listener) | 194 || newHandler.listener != oldHandler.listener) |
| 195 break; | 195 break; |
| 196 ++newStartIndex; | 196 ++newStartIndex; |
| 197 ++oldStartIndex; | 197 ++oldStartIndex; |
| 198 } | 198 } |
| 199 | 199 |
| 200 // Skip over trailing handlers that match. | 200 // Skip over trailing handlers that match. |
| 201 while (newStartIndex < newEndIndex && oldStartIndex < oldEndIndex) { | 201 while (newStartIndex < newEndIndex && oldStartIndex < oldEndIndex) { |
| 202 EventHandler newHander = newHandlers[newEndIndex - 1]; | 202 EventHandler newHandler = newHandlers[newEndIndex - 1]; |
| 203 EventHandler oldHandler = oldHandlers[oldEndIndex - 1]; | 203 EventHandler oldHandler = oldHandlers[oldEndIndex - 1]; |
| 204 if (newHander.type != oldHandler.type | 204 if (newHandler.type != oldHandler.type |
| 205 || newHander.listener != oldHandler.listener) | 205 || newHandler.listener != oldHandler.listener) |
| 206 break; | 206 break; |
| 207 --newEndIndex; | 207 --newEndIndex; |
| 208 --oldEndIndex; | 208 --oldEndIndex; |
| 209 } | 209 } |
| 210 | 210 |
| 211 sky.Element root = _root as sky.Element; | 211 sky.Element root = _root as sky.Element; |
| 212 | 212 |
| 213 for (int i = oldStartIndex; i < oldEndIndex; ++i) { | 213 for (int i = oldStartIndex; i < oldEndIndex; ++i) { |
| 214 EventHandler oldHandler = oldHandlers[i]; | 214 EventHandler oldHandler = oldHandlers[i]; |
| 215 root.removeEventListener(oldHandler.type, oldHandler.listener); | 215 root.removeEventListener(oldHandler.type, oldHandler.listener); |
| 216 } | 216 } |
| 217 | 217 |
| 218 for (int i = newStartIndex; i < newEndIndex; ++i) { | 218 for (int i = newStartIndex; i < newEndIndex; ++i) { |
| 219 EventHandler newHander = newHandlers[i]; | 219 EventHandler newHandler = newHandlers[i]; |
| 220 root.addEventListener(newHander.type, newHander.listener); | 220 root.addEventListener(newHandler.type, newHandler.listener); |
| 221 } | 221 } |
| 222 } | 222 } |
| 223 | 223 |
| 224 void _syncNode([Element old]) { | 224 void _syncNode([Element old]) { |
| 225 if (old == null) { | 225 if (old == null) { |
| 226 old = _emptyElement; | 226 old = _emptyElement; |
| 227 } | 227 } |
| 228 | 228 |
| 229 _syncEvents(old); | 229 _syncEvents(old); |
| 230 | 230 |
| (...skipping 366 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 597 _currentOrder = _order; | 597 _currentOrder = _order; |
| 598 _currentlyRendering = this; | 598 _currentlyRendering = this; |
| 599 _rendered = render(); | 599 _rendered = render(); |
| 600 _currentlyRendering = null; | 600 _currentlyRendering = null; |
| 601 _currentOrder = lastOrder; | 601 _currentOrder = lastOrder; |
| 602 | 602 |
| 603 _rendered.events.addAll(events); | 603 _rendered.events.addAll(events); |
| 604 | 604 |
| 605 _dirty = false; | 605 _dirty = false; |
| 606 | 606 |
| 607 // TODO(rafaelw): This prevents components from returning different node | 607 if (oldRendered != null && _rendered.runtimeType != oldRendered.runtimeType) |
| 608 // types as their root node at different times. Consider relaxing. | 608 oldRendered = null; |
| 609 assert(oldRendered == null || | |
| 610 _rendered.runtimeType == oldRendered.runtimeType); | |
| 611 | 609 |
| 612 if (_rendered._sync(oldRendered, host, insertBefore)) { | 610 if (_rendered._sync(oldRendered, host, insertBefore)) { |
| 613 _rendered = oldRendered; // retain stateful component | 611 _rendered = oldRendered; // retain stateful component |
| 614 } | 612 } |
| 615 _root = _rendered._root; | 613 _root = _rendered._root; |
| 616 assert(_rendered._root is sky.Node); | 614 assert(_rendered._root is sky.Node); |
| 617 } | 615 } |
| 618 | 616 |
| 619 void _renderIfDirty() { | 617 void _renderIfDirty() { |
| 620 assert(_rendered != null); | 618 assert(_rendered != null); |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 653 | 651 |
| 654 _sync(null, _host, null); | 652 _sync(null, _host, null); |
| 655 assert(_root is sky.Node); | 653 assert(_root is sky.Node); |
| 656 | 654 |
| 657 sw.stop(); | 655 sw.stop(); |
| 658 if (_shouldLogRenderDuration) | 656 if (_shouldLogRenderDuration) |
| 659 print("Initial render: ${sw.elapsedMicroseconds} microseconds"); | 657 print("Initial render: ${sw.elapsedMicroseconds} microseconds"); |
| 660 }); | 658 }); |
| 661 } | 659 } |
| 662 } | 660 } |
| OLD | NEW |