Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(5)

Side by Side Diff: tools/dom/templates/html/impl/impl_HTMLDocument.darttemplate

Issue 1832713002: Optimize dartium dart:html bindings so real world application performance is acceptable. Improves d… (Closed) Base URL: git@github.com:dart-lang/sdk.git@master
Patch Set: Created 4 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file 1 // Copyright (c) 2012, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a 2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file. 3 // BSD-style license that can be found in the LICENSE file.
4 4
5 // WARNING: Do not edit - generated code. 5 // WARNING: Do not edit - generated code.
6 6
7 part of $LIBRARYNAME; 7 part of $LIBRARYNAME;
8 8
9 $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS { 9 $(ANNOTATIONS)$(NATIVESPEC)$(CLASS_MODIFIERS)class $CLASSNAME$EXTENDS$IMPLEMENTS {
10 $!MEMBERS 10 $!MEMBERS
(...skipping 395 matching lines...) Expand 10 before | Expand all | Expand 10 after
406 // 406 //
407 // var myProto = Object.create(HTMLElement.prototype); 407 // var myProto = Object.create(HTMLElement.prototype);
408 // var myElement = document.registerElement('x-foo', {prototype: myPro to}); 408 // var myElement = document.registerElement('x-foo', {prototype: myPro to});
409 var baseElement = js.JsNative.getProperty(js.context, jsClassName); 409 var baseElement = js.JsNative.getProperty(js.context, jsClassName);
410 if (baseElement == null) { 410 if (baseElement == null) {
411 // Couldn't find the HTML element so use a generic one. 411 // Couldn't find the HTML element so use a generic one.
412 baseElement = js.JsNative.getProperty(js.context, 'HTMLElement'); 412 baseElement = js.JsNative.getProperty(js.context, 'HTMLElement');
413 } 413 }
414 var elemProto = js.JsNative.callMethod(js.JsNative.getProperty(js.context, 'Object'), "create", [js.JsNative.getProperty(baseElement, 'prototype')]); 414 var elemProto = js.JsNative.callMethod(js.JsNative.getProperty(js.context, 'Object'), "create", [js.JsNative.getProperty(baseElement, 'prototype')]);
415 415
416 // Remember for any upgrading done in wrap_jso.
417 addCustomElementType(tag, customElementClass, extendsTag); 416 addCustomElementType(tag, customElementClass, extendsTag);
418 417
419 // TODO(terry): Hack to stop recursion re-creating custom element when the 418 // TODO(terry): Hack to stop recursion re-creating custom element when the
420 // created() constructor of the custom element does e.g., 419 // created() constructor of the custom element does e.g.,
421 // 420 //
422 // MyElement.created() : super.created() { 421 // MyElement.created() : super.created() {
423 // this.innerHtml = "<b>I'm an x-foo-with-markup!</b>"; 422 // this.innerHtml = "<b>I'm an x-foo-with-markup!</b>";
424 // } 423 // }
425 // 424 //
426 // sanitizing causes custom element to created recursively 425 // sanitizing causes custom element to created recursively
427 // until stack overflow. 426 // until stack overflow.
428 // 427 //
429 // See https://github.com/dart-lang/sdk/issues/23666 428 // See https://github.com/dart-lang/sdk/issues/23666
430 int creating = 0; 429 int creating = 0;
431 430
432 // If any JS code is hooked we want to call it too. 431 // If any JS code is hooked we want to call it too.
433 var oldCreatedCallback = elemProto['createdCallback']; 432 var oldCreatedCallback = js.JsNative.getProperty(elemProto, 'createdCallba ck');
434 var oldAttributeChangedCallback = elemProto['attributeChangedCallback']; 433 var oldAttributeChangedCallback = js.JsNative.getProperty(elemProto, 'attr ibuteChangedCallback');
435 var oldAttachedCallback = elemProto['attachedCallback']; 434 var oldAttachedCallback = js.JsNative.getProperty(elemProto, 'attachedCall back');
436 var oldDetachedCallback = elemProto['detachedCallback']; 435 var oldDetachedCallback = js.JsNative.getProperty(elemProto, 'detachedCall back');
437 436
438 // TODO(jacobr): warning: 437 // TODO(jacobr): this code seems far more complex than it should be
439 elemProto['createdCallback'] = js.JsNative.withThis(($this) { 438 // unless I am missing something.
439 js.JsNative.setProperty(elemProto, 'createdCallback', js.allowInteropCaptu reThis(($this) {
440 if (_getJSClassName(reflectClass(customElementClass).superclass) != null && creating < 2) { 440 if (_getJSClassName(reflectClass(customElementClass).superclass) != null && creating < 2) {
441 creating++; 441 creating++;
442 442
443 var dartClass; 443 var dartClass;
444 try { 444 try {
445 if (extendsTag != null) { 445 if (extendsTag != null) {
446 // If we're extending a native element then create that element. 446 // If we're extending a native element then create that element.
447 // Then upgrade that element to the customElementClass through 447 // Then upgrade that element to the customElementClass through
448 // normal flow. 448 // normal flow.
449 dartClass = document.createElement(extendsTag); 449 dartClass = document.createElement(extendsTag);
450 js.setDartHtmlWrapperFor($this, dartClass); 450 // TODO(jacobr): THIS MAKES NO SENSE. WAAT?
451 dartClass.blink_jsObject = $this; 451
452 $this = js.JsNative.$setInstanceInterceptor($this, dartClass.runti meType);
453 dartClass = $this; // THIS IS CRAZY CODE CODE BUT IT MATCHES WHAT HAD. WTH.. THIS CODE JUST SEEMS WRONG.
452 } 454 }
453 455
454 // Upgrade to the CustomElement Dart class. 456 // Upgrade to the CustomElement Dart class.
455 dartClass = _blink.Blink_Utils.constructElement(customElementClass, $this); 457 dartClass = _blink.Blink_Utils.constructElement(customElementClass, $this);
456 } catch (e) { 458 } catch (e) {
457 // Got a problem make it an HtmlElement and rethrow the error. 459 // Got a problem make it an HtmlElement and rethrow the error.
458 dartClass = HtmlElement.internalCreateHtmlElement(); 460 dartClass = js.JsNative.$setInstanceInterceptor($this, new HtmlEleme nt.internalCreateHtmlElement().runtimeType);
459 // We need to remember the JS object (because constructElement faile d
460 // it normally sets up the blink_jsObject.
461 dartClass.blink_jsObject = $this;
462 461
463 // Mark to only try this once don't try upgrading from HtmlElement 462 // Mark to only try this once don't try upgrading from HtmlElement
464 // to the user's Dart class - we had a problem. 463 // to the user's Dart class - we had a problem.
465 dartClass._badUpgrade(); 464 dartClass._badUpgrade();
466 throw e; 465 throw e;
467 } finally { 466 } finally {
468 // Need to remember the Dart class that was created for this custom so 467 // Need to remember the Dart class that was created for this custom so
469 // return it and setup the blink_jsObject to the $this that we'll be working 468 // return it and setup the blink_jsObject to the $this that we'll be working
470 // with as we talk to blink. 469 // with as we talk to blink.
471 js.setDartHtmlWrapperFor($this, dartClass); 470 js.setDartHtmlWrapperFor($this, dartClass);
472 471 // TODO(jacobr) THIS MAKES NO SENSE BUT MATCHES WHAT WE HAD BEFORE.
472 js.JsNative.$setInstanceInterceptor($this, dartClass.runtimeType);
473 creating--; 473 creating--;
474 } 474 }
475 } 475 }
476 476
477 if (oldCreatedCallback != null) 477 if (oldCreatedCallback != null)
478 oldCreatedCallback.apply([], thisArg: unwrap_jso($this)); 478 oldCreatedCallback.apply([], thisArg: $this);
479 }); 479 }));
480 elemProto['attributeChangedCallback'] = new js.JsFunction.withThis(($this, attrName, oldVal, newVal) { 480 js.JsNative.setProperty(elemProto, 'attributeChangedCallback', js.allowInt eropCaptureThis(($this, attrName, oldVal, newVal) {
481 $this.attributeChanged(attrName, oldVal, newVal); 481 $this.attributeChanged(attrName, oldVal, newVal);
482 482
483 if (oldAttributeChangedCallback != null) 483 if (oldAttributeChangedCallback != null)
484 oldAttributeChangedCallback.apply([], thisArg: unwrap_jso($this)); 484 oldAttributeChangedCallback.apply([], thisArg: $this);
485 }); 485 }));
486 elemProto['attachedCallback'] = new js.JsFunction.withThis(($this) { 486 js.JsNative.setProperty(elemProto, 'attachedCallback', js.allowInteropCapt ureThis(($this) {
487 $this.attached(); 487 $this.attached();
488 488
489 if (oldAttachedCallback != null) 489 if (oldAttachedCallback != null)
490 oldAttachedCallback.apply([], thisArg: unwrap_jso($this)); 490 oldAttachedCallback.apply([], thisArg: $this);
491 }); 491 }));
492 elemProto['detachedCallback'] = new js.JsFunction.withThis(($this) { 492 js.JsNative.setProperty(elemProto, 'detachedCallback', js.allowInteropCapt ureThis(($this) {
493 $this.detached(); 493 $this.detached();
494 494
495 if (oldDetachedCallback != null) 495 if (oldDetachedCallback != null)
496 oldDetachedCallback.apply([], thisArg: unwrap_jso($this)); 496 oldDetachedCallback.apply([], thisArg: $this);
497 }); 497 }));
498 // document.registerElement('x-foo', {prototype: elemProto, extends: exten dsTag}); 498 // document.registerElement('x-foo', {prototype: elemProto, extends: exten dsTag});
499 var jsMap = new js.JsObject.jsify({'prototype': elemProto, 'extends': exte ndsTag}); 499 var jsMap = new js.JsObject.jsify({'prototype': elemProto, 'extends': exte ndsTag});
500 js.JsNative.callMethod(js.JsNative.getProperty(js.context, 'document'), 'r egisterElement', [tag, jsMap]); 500 js.JsNative.callMethod(document, 'registerElement', [tag, jsMap]);
501 } 501 }
502 $endif 502 $endif
503 } 503 }
504 504
505 /** *Deprecated*: use [registerElement] instead. */ 505 /** *Deprecated*: use [registerElement] instead. */
506 @deprecated 506 @deprecated
507 @Experimental() 507 @Experimental()
508 void register(String tag, Type customElementClass, {String extendsTag}) { 508 void register(String tag, Type customElementClass, {String extendsTag}) {
509 return registerElement(tag, customElementClass, extendsTag: extendsTag); 509 return registerElement(tag, customElementClass, extendsTag: extendsTag);
510 } 510 }
(...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after
559 /// parameter must be provided. 559 /// parameter must be provided.
560 @Experimental() 560 @Experimental()
561 ElementUpgrader createElementUpgrader(Type type, {String extendsTag}) { 561 ElementUpgrader createElementUpgrader(Type type, {String extendsTag}) {
562 $if DART2JS 562 $if DART2JS
563 return new _JSElementUpgrader(this, type, extendsTag); 563 return new _JSElementUpgrader(this, type, extendsTag);
564 $else 564 $else
565 return new _VMElementUpgrader(this, type, extendsTag); 565 return new _VMElementUpgrader(this, type, extendsTag);
566 $endif 566 $endif
567 } 567 }
568 } 568 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698