Lively Kernel canvas runfalsenulltruefalsetruenull seealsohttp://lively-kernel.org/repository/webwerkstatt/projects/HTML5/listBenchmark.xhtml?useFlattenedHTMLRenderingLayer=true2 ListBenchmark createlistplainfalsenulltruefalsetruenull results:clickedsomewhereintestList:46msclickedsomewhereintestList:154msclickedsomewhereintestList:264msclickedsomewhereintestList:255msclickedsomewhereintestList:442msclickedsomewhereintestList:820msclickedsomewhereintestList:147msclickedsomewhereintestList:129msclickedsomewhereintestList:135msclickedsomewhereintestList:128msclickedsomewhereintestList:132msclickedsomewhereintestList:224msclickedsomewhereintestList:130msclickedsomewhereintestList:150msclickedsomewhereintestList:55msclickedsomewhereintestList:298msclickedsomewhereintestList:162msclickedsomewhereintestList:163msclickedsomewhereintestList:288msclickedsomewhereintestList:4msclickedsomewhereintestList:6msclickedsomewhereintestList:6msclickedsomewhereintestList:7msclickedsomewhereintestList:7msclickedsomewhereintestList:66msclickedsomewhereintestList:60msclickedsomewhereintestList:62msclickedsomewhereintestList:63msclickedsomewhereintestList:120msclickedsomewhereintestList:130msclickedsomewhereintestList:122msclickedsomewhereintestList:49msclickedsomewhereintestList:53msclickedsomewhereintestList:54msclickedsomewhereintestList:87msclickedsomewhereintestList:171msmousemove1mousemove2msmousemove1msmousemove1msmousemove2msmousemove2msmousemove1msmousemove2msmousemove2msmousemove1ms46 nullfalsetruenull TabCompletion.js:TabCompletionLayerfalsenulltruefalse false false false nullfalse http://lively-kernel.org/repository/webwerkstatt/truetruetruetruetrue truetrue 00.11 true true codebasefalsenulltruefalsetrue localfalsenulltruefalsetrue Localcodefalsefalsetruefalsetrue0false test1.js(notparsed)falsefalsetruefalsetrue0false test2.js(notparsed)falsefalsetruefalsetrue0false208.000015null-1nullnulltruetruetrue 00.11 true null null null nulltrue true -----falsefalsetruefalsetrue0false208.000015null -1nullnulltruetruetrue 00.11 true null null null nulltrue true -----falsefalsetruefalsetrue0false208.000015null -1nullnulltruetruetrue 00.11 true null null null nulltrue true -----falsefalsetruefalsetrue0false208.000015null -1nullnulltruetruetrue 00.11 true null null null nulltrue true 20null truetrue2000000 0.5 truetrue 00.11 true true 20null truetrue truetrue 00.11 true true Addmodulefalsenulltruefalsetrue Loadallfalsenulltruefalsetrue LineNofalsenulltruefalsetrue Refreshfalsenulltruefalsetrue Evalonfalsenulltruefalsetrue Sortfalsenulltruefalsetrue Viewas...falsenulltruefalsetrue truetrue falsenullnullnullnullfalse Morph.prototype.localize=function(pt){if(pt==null)console.log('nullpt');if(this.world()==null){//console.log('ERRORin'+this.id()+'localize:'+pt+'this.world()isnull');//printStack();returnpt;}returnpt.matrixTransform(this.world().transformToMorph(this));}Morph.prototype.changed=function(){//Notemostmorphsdon'tneedthisinSVG,buttextneedsthe//callonbounds()totriggerlayoutonnewboundsif(this.owner)this.owner.invalidRect(this.bounds());} 15 createlistfalsenulltruefalsetrue cop.create('DraftLayer').refineClass(WorldMorph,{morphToGrabOrReceive:function(evt,droppingMorph,checkForDnD){//IfcheckForDnDisfalse,returnthemorphtoreceivethismouseevent(ornull)//IfcheckForDnDistrue,returnthemorphtograbfromamousedownevent(ornull)//IfdroppingMorphisnotnull,thencheckthatthisisawillingrecipient(elsenull)if(this.isEpimorph)returnnull;if(!this.fullContainsWorldPoint(evt.mousePoint))returnnull;//notcontainedanywhere//Firstcheckallthesubmorphs,frontfirstfor(vari=this.submorphs.length-1;i>=0;i--){varhit=this.submorphs[i].morphToGrabOrReceive(evt,droppingMorph,checkForDnD);if(hit!=null){returnhit;//hitasubmorph}};//Checkifit'sreallyinthismorph(notjustfullBounds)if(!this.containsWorldPoint(evt.mousePoint))returnnull;//IfnoDnDcheck,thenwehaveahit(unlessnohandlerinwhichcaseamiss)if(!checkForDnD)returnthis.mouseHandler?this:null;//Ondrops,checkthatthisisawillingrecipientif(droppingMorph!=null){returnthis.acceptsDropping(droppingMorph)?this:null;}else{//Ongrabs,can'tpickuptheworldormorphsthathandlemousedown//DI:Ithinktheworldisadequatelycheckedfornowelsewhere//elsereturn(!evt.isCommandKey()&&this===this.world())?null:this;returnthis;}}});= 0; i--) {\n\t\t\tvar hit = this.submorphs[i].morphToGrabOrReceive(evt, droppingMorph, checkForDnD); \n\t\t\tif (hit != null) { \n\t\t\t\treturn hit; // hit a submorph\n\t\t\t}\n\t\t};\n\n\t\t// Check if it's really in this morph (not just fullBounds)\n\t\tif (!this.containsWorldPoint(evt.mousePoint)) return null;\n\n\t\t// If no DnD check, then we have a hit (unless no handler in which case a miss)\n\t\tif (!checkForDnD) return this.mouseHandler ? this : null;\n\n\t\t// On drops, check that this is a willing recipient\n\t\tif (droppingMorph != null) {\n\t\t\treturn this.acceptsDropping(droppingMorph) ? this : null;\n\t\t} else {\n\t\t\t// On grabs, can't pick up the world or morphs that handle mousedown\n\t\t\t// DI: I think the world is adequately checked for now elsewhere\n\t\t\t// else return (!evt.isCommandKey() && this === this.world()) ? null : this; \n\t\t\treturn this;\n\t\t}\n\n\t}\n});"]]>= 0; i--) {\n\t\t\tvar hit = this.submorphs[i].morphToGrabOrReceive(evt, droppingMorph, checkForDnD); \n\t\t\tif (hit != null) { \n\t\t\t\treturn hit; // hit a submorph\n\t\t\t}\n\t\t};\n\n\t\t// Check if it's really in this morph (not just fullBounds)\n\t\tif (!this.containsWorldPoint(evt.mousePoint)) return null;\n\n\t\t// If no DnD check, then we have a hit (unless no handler in which case a miss)\n\t\tif (!checkForDnD) return this.mouseHandler ? this : null;\n\n\t\t// On drops, check that this is a willing recipient\n\t\tif (droppingMorph != null) {\n\t\t\treturn this.acceptsDropping(droppingMorph) ? this : null;\n\t\t} else {\n\t\t\t// On grabs, can't pick up the world or morphs that handle mousedown\n\t\t\t// DI: I think the world is adequately checked for now elsewhere\n\t\t\t// else return (!evt.isCommandKey() && this === this.world()) ? null : this; \n\t\t\treturn this;\n\t\t}\n\n\t}\n});"]]>35 m=$morph('testList');Functions.timeToRun(function(){m.localize(pt(100,100))})2 everyadditionalbrowsertaks300ms.Why? 00000falsefalsetruefalsetrue0false 11111falsefalsetruefalsetrue0false 22222falsefalsetruefalsetrue0false 33333falsefalsetruefalsetrue0false 44444falsefalsetruefalsetrue0false 55555falsefalsetruefalsetrue0false 66666falsefalsetruefalsetrue0false 77777falsefalsetruefalsetrue0false 88888falsefalsetruefalsetrue0false 99999falsefalsetruefalsetrue0false 1010101010falsefalsetruefalsetrue0false200 2nullfalse //25%this.transformToMorphfunction(other){//getTransformToElementhasissuesonsomeplatformsdbgOn(!other);if(Config.useGetTransformToElement){returnthis.rawNode.getTransformToElement(other.rawNode);}else{vartfm=this.getGlobalTransform();varinv=other.getGlobalTransform().createInverse();//console.log("ownglobal:"+tfm+"otherinverse"+inv);tfm.preConcatenate(inv);//console.log("transforming"+this+"to"+tfm);returntfm;}}//50%EventaddMousePointaddMousePoint:function(evtOrTouch){varpos=pt(evtOrTouch.pageX||evtOrTouch.clientX,evtOrTouch.pageY||evtOrTouch.clientY);this.mousePoint=pos.subPt(this.offset());this.priorPoint=this.mousePoint;},Core.jssetupEventsEventoffset:function(){//notethatFFdoesn'tdoesntcalculateoffsetLeft/offsetTopearlyenoughwedon'tprecomputethesevaluesvartopElement=this.canvas;if(Config.isEmbedded){varoffsetX=0;varoffsetY=-3;do{offsetX+=topElement.offsetLeftoffsetY+=topElement.offsetToptopElement=topElement.offsetParent;}while(topElement&&topElement.tagName!='BODY');returnpt(offsetX,offsetY);}else{returnpt(topElement.offsetLeft||0,(topElement.offsetTop||0)-3);}},43 WorldMorph.prototype.morphToGrabOrReceivecop.create('DraftLayer').refineClass(ClipMorph,{morphToGrabOrReceive:function(evt,droppingMorph,checkForDnD){returnnull}})cop.create('DraftLayer').refineClass(WindowMorph,{morphToGrabOrReceive:function(evt,droppingMorph,checkForDnD){returnnull}})cop.create('DraftLayer').refineClass(TextListMorph,{morphToGrabOrReceive:function(evt,droppingMorph,checkForDnD){returnnull}})enableLayer(DraftLayer)disableLayer(DraftLayer)23 browser=newSimpleBrowser();//shouldcheckforvalidclassnamebrowser.openIn(this.world(),pt(700,50));browser.getModel().setClassName("Morph");2 mousemovefalsenulltruetruetrue Config.ignoredepricatedProceed=true this.canvas().offsetLeftthis.canvas().offsetTop2 Wikicontroltruetrue null99