Closed Bug 495329 Opened 15 years ago Closed 15 years ago

Trace JSOP_BINDNAME/JSOP_SETNAME for closures

Categories

(Core :: JavaScript Engine, defect)

defect
Not set
normal

Tracking

()

RESOLVED FIXED
Tracking Status
status1.9.2 --- beta1-fixed

People

(Reporter: dmandelin, Assigned: dmandelin)

References

Details

Attachments

(3 files, 1 obsolete file)

Blocks: 494268, 492918
Blocks: 501472
Blocks: 503470
Dep of blocker means blocker.  I sure hope a lot of sites on the web use closures this way, given how many hoops we're jumping through for Dromaeo.
Flags: blocking1.9.2+
Not just Dromaeo, JQuery too. Also the Go game, IIRC. Probably others. Be good to have a short list.

/be
Attached patch Patch (obsolete) — Splinter Review
Attached file Microbenchmark
The patch gives about a 3.75x speedup on the microbenchmark. It is currently cycling on try.
Attachment #390912 - Flags: review?(gal)
JSOP_BINDNAME Results for the Web (GMail, GDocs, Facebook, CNN, MSNBC, few dromaeo tests) + Browser Startup.
I tested it with "if(obj != JS_GetGlobalForObject(cx, cx->fp->scopeChain))" right before the object is pushed on the stack in the interpreter.

Overall:
bindname obj != global Object: 135735
bindname obj == global Object: 3698
Gregor: Can you print JS_GET_CLASS(cx, obj)->name too?

/be
Attachment #390913 - Attachment mime type: application/x-javascript → text/plain
Attached patch Patch 2Splinter Review
Refreshed to apply on current tip (after native getter/setter patch).
Attachment #390912 - Attachment is obsolete: true
Attachment #390963 - Flags: review?(gal)
Attachment #390912 - Flags: review?(gal)
Comment on attachment 390912 [details] [diff] [review]
Patch

>+/* 

Trailing whitespace waaaahmbulance has been called -- I gave 'em your credit card #.

>+ * js_SetCallArg and js_SetCallVar are extern fastcall copies of the
..12345678901234567890123456789012345678901234567890123456789012345678901234567890

>+ * setter functions. These versions are required in order to set call vars
>+ * from traces.

Wrap before col. 80 but not so early or ragged right as above.

>+ */
>+extern JSBool JS_FASTCALL
>+js_SetCallArg(JSContext *cx, JSObject *obj, jsid id, jsval vp);
>+
>+extern JSBool JS_FASTCALL
>+js_SetCallVar(JSContext *cx, JSObject *obj, jsid id, jsval vp);

Should use v as final parameter's name, not vp.

>+        if (sprop->setter == SetCallArg) {
>+           ci = &js_SetCallArg_ci;

Underindented by one. Whoops, you put up a new patch that fixes this. Closing out this review, hope it's mostly useful still.

>+        } else if (sprop->setter == SetCallVar) {
>+            ci = &js_SetCallVar_ci;
>+        } else {
>+            ABORT_TRACE("can't trace special CallClass setter");
>+        }

No need to brace all of this if-else tree.

>+        

Trailing space, scour the patch for it.

>+        LIns* v_ins = get(&r);
>+        box_jsval(r, v_ins);
>+        LIns* args[] = {
>+            v_ins,
>+            INS_CONST(SPROP_USERID(sprop)),
>+            obj_ins,
>+            cx_ins 
>+        };
>+        LIns* call_ins = lir->insCall(ci, args);
>+        guard(true,
>+              addName(lir->ins2(LIR_eq, call_ins, INS_CONST(JS_TRUE)),

Use false for expected result and lir->ins_eq0 here, eh?

>@@ -10920,8 +10946,15 @@
>         }
>     }
> 
>-    if (obj != globalObj)
>-        ABORT_TRACE("JSOP_BINDNAME must return global object on trace");
>+    /*
>+     * If obj is a js_CallClass object, then we are tracing a reference
>+     * to an upvar in a heavyweight function. We cannot reach this point
>+     * of the trace with a different call object because of the guard
>+     * on the function call, so we can assume the result of the bindname
>+     * is constant on this trace.
..12345678901234567890123456789012345678901234567890123456789012345678901234567890

Hyper-nit: Wrapping could be closer to col. 80 but at least not ragged right. Vim'll rewrap it for you for free.

/be
Comment on attachment 390963 [details] [diff] [review]
Patch 2

r=me with nits picked, thanks.

/be
Attachment #390963 - Flags: review?(gal) → review+
(In reply to comment #6)
> Gregor: Can you print JS_GET_CLASS(cx, obj)->name too?
> 
> /be

Sure...

1323946 Call
   4531 With
      2 XULElement
Pushed with nits fixed as 60a9ef4e1a3d.
http://hg.mozilla.org/mozilla-central/rev/60a9ef4e1a3d
Status: NEW → RESOLVED
Closed: 15 years ago
Resolution: --- → FIXED
Mass change: adding fixed1.9.2 keyword

(This bug was identified as a mozilla1.9.2 blocker which was fixed before the mozilla-1.9.2 repository was branched (August 13th, 2009) as per this query: http://is.gd/2ydcb - if this bug is not actually fixed on mozilla1.9.2, please remove the keyword. Apologies for the bugspam)
Keywords: fixed1.9.2
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: