Closed
Bug 281137
Opened 20 years ago
Closed 19 years ago
Add profiling column for functions excluding other functions running
Categories
(Other Applications Graveyard :: Venkman JS Debugger, enhancement)
Tracking
(Not tracked)
RESOLVED
FIXED
People
(Reporter: WeirdAl, Assigned: bugzilla-mozilla-20000923)
Details
Attachments
(1 file, 4 obsolete files)
|
630 bytes,
application/xhtml+xml
|
Details |
When Venkman profiles an application where function call other functions, it's impossible to tell how long we spent in the caller function as opposed to the callee without examining the source code of the caller. We may not even know from a profile run which is the caller and which is the callee. This becomes troublesome when we try to profile a full-size application to determine which functions are bottlenecks. There could be a stack of thirty JavaScript functions or more at any given time. Thus it is equally troublesome to determine just how long it takes for the application to execute its JS code. (My company is asking me to figure out how much time we spend in JS execution.) This bug is an RFE to record two timings for each JS function: one including calls to other functions, and one excluding them. Assigning to silver per #developers, with cc to rginda. Possibly related to bug 204628, so cc'ing pschwartau as well.
| Reporter | ||
Comment 1•20 years ago
|
||
Testcase steps: (1) about:config, set dom.max_script_run_time to 1000000 or some other high value. (Just in case.) (2) Open JavaScript Debugger. (3) Debug > Exclude Browser Files (4) Profile > Clear Profile Data (5) Profile > Collect Profile Data checked. (6) Open Mozilla Navigator window. (7) Load the testcase. (8) Click the button labeled "Delay browser for five seconds." You may get multiple unresponsive script warnings. Just click Continue through all of them; they're irrelevant to the test. (9) Switch to JavaScript Debugger window, Profile > Collect Profile Data unchecked. (10) Profile > Save Profile Data, save as .csv, open in your favorite spreadsheet program. Expected results: Total time column will have in two rows a value over 5000. A second column will have only one of the two rows with a value over 5000; the other will be very close to zero. Actual results: Total time column will have in two rows a value over 5000.
| Assignee | ||
Comment 2•20 years ago
|
||
Preliminary jsd changes: http://twpol.dyndns.org/temp/jsd_real_time.patch
| Assignee | ||
Comment 3•20 years ago
|
||
| Assignee | ||
Comment 4•20 years ago
|
||
| Assignee | ||
Comment 5•20 years ago
|
||
Comment on attachment 173487 [details] [diff] [review] jsd part of the changes Ok, ignore the timeout stuff, that's slipped through from a different bug. :)
| Reporter | ||
Comment 6•20 years ago
|
||
A few concerns about these patches: * jsdebug.h has javadoc-like comments. Your jsd patch excludes them for the added functions. * The UI changes all assume "#define JSD_PROFILE_EXCLUDE_CALLS 1". If that's not defined, you may create a ton of strict warnings referring to things like jsdScript.totalRealExecutionTime being undefined. * The IDL file changes assume "#define JSD_PROFILE_EXCLUDE_CALLS 1". I'm still learning IDL, but if it's not defined, then could we have an exception or for trying to access the properties the IDL file adds? * And, of course, the timeout code leakage. Who should review this?
| Assignee | ||
Comment 7•20 years ago
|
||
(In reply to comment #6) > A few concerns about these patches: > [snip annoying comments on unfinished code] > > Who should review this? No-one, currently, because it is only "what I have here". It is not meant to be considered finished in any way at all, especially WRT comments and the #define(s).
| Assignee | ||
Comment 8•20 years ago
|
||
Ok, so I've sorted out some stuff, and probably want the next version to get some real review. The big question is, what should this stuff be called? Currently I'm calling it "minRealExecution" and such, but I'm not sure 'real' quite conveys what it really is (time spent just in that function, i.e. excluding time spent in any called functions).
Comment 9•20 years ago
|
||
The perl profiler doesn't have a catchy name, but...
-E (default) Display all subroutine times exclusive of child subrou-
tine times.
So maybe "exclusive" or a short synonym like "own" or "solo" would be good to
work in there.| Assignee | ||
Updated•20 years ago
|
Attachment #173487 -
Attachment is obsolete: true
| Assignee | ||
Updated•20 years ago
|
Attachment #173488 -
Attachment is obsolete: true
| Assignee | ||
Comment 10•20 years ago
|
||
| Assignee | ||
Comment 11•20 years ago
|
||
| Assignee | ||
Comment 12•20 years ago
|
||
Also not I've fixed the 0ms time bug (probably showing up in bug 204628 if nowhere else), where if a call takes 0ms then the next one overwrites the min time even if it took longer.
| Assignee | ||
Updated•20 years ago
|
Attachment #175854 -
Flags: review?(shaver)
| Assignee | ||
Updated•20 years ago
|
Attachment #175856 -
Flags: review?(rginda)
Comment 13•20 years ago
|
||
Comment on attachment 175856 [details] [diff] [review] Patch v2: Venkman part r=rginda
Attachment #175856 -
Flags: review?(rginda) → review+
Comment 14•20 years ago
|
||
Comment on attachment 175854 [details] [diff] [review] Patch v2: jsd part > struct JSDProfileData > { >+ JSDProfileData* caller; > int64 lastCallStart; >+ int64 runningTime; Pls reindent the struct def'n to maintain purity of whitespace alignment. >+ /* If we last returned from a function (as opposed to >+ * having last entered this function), we need to inc. >+ * the running total by the time delta since the last >+ * return, and use the running total instead of the >+ * delta calculated above. */ >+ if (!JSLL_IS_ZERO(jsdc->lastReturnTime)) >+ { >+ // Add last chunk to running time, and use total >+ // running time as 'delta'. >+ JSLL_SUB(ll_delta, now, jsdc->lastReturnTime); >+ pdata->runningTime += ll_delta; >+ JSLL_L2D(delta, pdata->runningTime); >+ delta /= 1000.0; >+ } Can we rejig this logic such that we don't compute the first delta and then throw it away, in this case? >+ pdata->totalOwnExecutionTime += delta; >+ /* See minExecutionTime comment above. */ >+ if ((0 == pdata->callCount) || >+ delta < pdata->minOwnExecutionTime) >+ { >+ pdata->minOwnExecutionTime = delta; >+ } That brace wants to be on the previous line, if I read this file's style correctly. r=shaver with the nits fixed, and I'd be willing to re-review if you re-structure the delta-computation logic to avoid discarding the computation.
Attachment #175854 -
Flags: review?(shaver) → review+
| Assignee | ||
Comment 15•20 years ago
|
||
I'm a little confused by the delta comments; the previous delta is used prior to
being replaced. The code does this:
delta = {time since this function started}
totalRunTime += delta
{update min/max run times}
if { we returned from a nested call during this function }
delta = {time since that return}
ownRunTime += delta
{update own min/max run times}
Should I add/change the comments to make this clearer? (or did I miss it?)| Assignee | ||
Comment 16•20 years ago
|
||
CCing shaver so he knows about my previous comment. :)
Comment 17•20 years ago
|
||
No, you're right; I must have missed the earlier use, though it's plainly there in the diff! Sorry about that.
| Assignee | ||
Updated•19 years ago
|
Attachment #175854 -
Flags: superreview?(dmose)
Comment 18•19 years ago
|
||
Comment on attachment 175856 [details] [diff] [review] Patch v2: Venkman part sr=dmose
Attachment #175856 -
Flags: superreview+
Comment 19•19 years ago
|
||
Comment on attachment 175854 [details] [diff] [review] Patch v2: jsd part sr=dmose
Attachment #175854 -
Flags: superreview?(dmose) → superreview+
| Reporter | ||
Updated•19 years ago
|
Attachment #175854 -
Flags: approval1.8b4?
| Reporter | ||
Updated•19 years ago
|
Attachment #175856 -
Flags: approval1.8b4?
Updated•19 years ago
|
Attachment #175854 -
Flags: approval1.8b4? → approval1.8b4+
Updated•19 years ago
|
Attachment #175856 -
Flags: approval1.8b4? → approval1.8b4+
Comment 20•19 years ago
|
||
Comment on attachment 175854 [details] [diff] [review] Patch v2: jsd part mozilla/js/jsd/idl/jsdIDebuggerService.idl 1.32 mozilla/js/jsd/jsdebug.h 3.19 mozilla/js/jsd/jsdebug.c 3.15 mozilla/js/jsd/jsd_xpc.cpp 1.72 mozilla/js/jsd/jsd_step.c 3.13 mozilla/js/jsd/jsd_scpt.c 3.13 mozilla/js/jsd/jsd.h 3.19 mozilla/js/jsd/jsd_step.c 3.14 mozilla/js/jsd/jsd_step.c 3.15
Attachment #175854 -
Attachment is obsolete: true
Comment 21•19 years ago
|
||
Comment on attachment 175856 [details] [diff] [review] Patch v2: Venkman part mozilla/extensions/venkman/resources/locale/en-US/venkman.properties 1.57 mozilla/extensions/venkman/resources/locale/en-US/profile.xml.tpl 1.2 mozilla/extensions/venkman/resources/locale/en-US/profile.txt.tpl 1.2 mozilla/extensions/venkman/resources/locale/en-US/profile.csv.tpl 1.2 mozilla/extensions/venkman/resources/content/venkman-profiler.js 1.7
Attachment #175856 -
Attachment is obsolete: true
| Reporter | ||
Comment 22•19 years ago
|
||
Isn't this fixed? :)
| Assignee | ||
Comment 23•19 years ago
|
||
Belated FIXED.
Status: NEW → RESOLVED
Closed: 19 years ago
Resolution: --- → FIXED
Updated•6 years ago
|
Product: Other Applications → Other Applications Graveyard
You need to log in
before you can comment on or make changes to this bug.
Description
•