Closed
Bug 1164252
Opened 10 years ago
Closed 9 years ago
Profiler should be able to parse evaluated location sites
Categories
(DevTools :: Performance Tools (Profiler/Timeline), defect, P3)
Tracking
(firefox47 fixed)
RESOLVED
FIXED
Firefox 47
Tracking | Status | |
---|---|---|
firefox47 | --- | fixed |
People
(Reporter: jsantell, Assigned: gregtatum)
References
Details
(Whiteboard: [devtools-platform])
Attachments
(1 file, 2 obsolete files)
5.76 KB,
patch
|
jsantell
:
review+
|
Details | Diff | Splinter Review |
These eval'd frames appear in octane tests, and are not parsed properly.
".l (http://localhost:8888/octane-benchmark/zlib-data.js line 65 > eval:1)"
"http://localhost:8888/octane-benchmark/zlib-data.js line 65 > eval:1"
Reporter | ||
Comment 1•10 years ago
|
||
By not parsed properly, I mean the file name is "zlib-data%20line%65%20>%20eval:1", and same with the full URL, with the line 65 > eval:1 stuff being a part of it.
Reporter | ||
Updated•10 years ago
|
Blocks: perf-tool-papercuts
Priority: -- → P3
Reporter | ||
Updated•10 years ago
|
Blocks: perf-tool-profilertree
Updated•10 years ago
|
Whiteboard: [devtools-platform]
Reporter | ||
Comment 2•9 years ago
|
||
The function `parseLocation` in `gecko/devtools/client/performance/modules/logic/frame-utils.js` needs to handle the scenario of parsing a frame location of
".l (http://localhost:8888/octane-benchmark/zlib-data.js line 65 > eval:1)"
and the fileName returned should be "zlib-data.js line 65 > eval:1" -- should be escaped.
Tests for this function can be found at `devtools/client/performance/test/unit/test_frame-utils-01.js`
Assignee: nobody → gtatum
Assignee | ||
Comment 3•9 years ago
|
||
Let's see if I did this patch correctly.
Attachment #8712761 -
Flags: review+
Assignee | ||
Updated•9 years ago
|
Attachment #8712761 -
Flags: review+ → review?(jsantell)
Reporter | ||
Comment 4•9 years ago
|
||
Comment on attachment 8712761 [details] [diff] [review]
Bug1164252.patch
Review of attachment 8712761 [details] [diff] [review]:
-----------------------------------------------------------------
Looks good! Some comments on readability and performance and assertions -- r? again once these changes are made and I'll send this up to try. Thanks!
::: devtools/client/performance/modules/logic/frame-utils.js
@@ +151,5 @@
> host = parsedUrl.host;
> +
> + // Check for the case of the filename containing eval
> + // e.g. "file.js%20line%2065%20%3E%20eval"
> + if (fileName.substring(fileName.length - 13, fileName.length) === "%20%3E%20eval") {
We can store a constant (can be at the top of the file too, with all the others) so we don't have a magic number 13 here, as well as stick to comparing numbers without generating new strings (this piece of code is still hot and the conditional will get hit often) -- the fastest way would put this in a function and check the char codes like other functions in this file, but this way is more legible and I'm sure fast enough (should run some tests though)
```
const EVAL_TOKEN = "%20%3E%20eval";
if (fileName.indexOf(EVAL_TOKEN) === (fileName.length - EVAL_TOKEN.length)) {
```
I'm sure there's an off by one error in my code snippet
@@ +153,5 @@
> + // Check for the case of the filename containing eval
> + // e.g. "file.js%20line%2065%20%3E%20eval"
> + if (fileName.substring(fileName.length - 13, fileName.length) === "%20%3E%20eval") {
> + // Match the filename
> + let matches = fileName.match(/(.+)(%20line%20(\d+)%20%3E%20eval)/);
We can use destructuring here to provide a bit more clarity:
`let [_, _fileName, _, _line] = fileName.match(/(.+)(%20line%20(\d+)%20%3E%20eval)/) || [];`
In what scenario would the EVAL_TOKEN is found, but no matches occur? Profiler data is always a fun surprise, so good to play it safe/defensive here even if we always assume a scenario, but let's log something incase this isn't true at some point in the future.
Check out the `assert` function from `devtools/shared/DevToolsUtils` which can log an error if `!matches === true`
@@ +161,5 @@
> + line = matches[3];
> + }
> +
> + // Match the url as well
> + matches = url.match(/(.+)( line (\d+) > eval)/);
Same thing as the above matching; log an error if this assumption is ever untrue with assert
Attachment #8712761 -
Flags: review?(jsantell)
Assignee | ||
Comment 5•9 years ago
|
||
Attachment #8712761 -
Attachment is obsolete: true
Attachment #8712840 -
Flags: review?(jsantell)
Reporter | ||
Comment 6•9 years ago
|
||
Comment on attachment 8712840 [details] [diff] [review]
Bug1164252.patch
Review of attachment 8712840 [details] [diff] [review]:
-----------------------------------------------------------------
Looks good! Pushing to try:
https://treeherder.mozilla.org/#/jobs?repo=try&revision=c6016324b010
Attachment #8712840 -
Flags: review?(jsantell) → review+
Assignee | ||
Comment 7•9 years ago
|
||
let evalIndex = fileName.indexOf(EVAL_TOKEN);
if (evalIndex !== -1 && evalIndex === (fileName.length - EVAL_TOKEN.length))
I wasn't checking for the case that the EVAL_TOKEN wasn't found.
Attachment #8712840 -
Attachment is obsolete: true
Attachment #8713228 -
Flags: review?(jsantell)
Reporter | ||
Comment 8•9 years ago
|
||
Comment on attachment 8713228 [details] [diff] [review]
Bug1164252.patch
Review of attachment 8713228 [details] [diff] [review]:
-----------------------------------------------------------------
https://treeherder.mozilla.org/#/jobs?repo=try&revision=a8894a4f80a3
Attachment #8713228 -
Flags: review?(jsantell) → review+
Reporter | ||
Updated•9 years ago
|
Keywords: checkin-needed
Keywords: checkin-needed
Comment 10•9 years ago
|
||
bugherder |
Status: NEW → RESOLVED
Closed: 9 years ago
status-firefox47:
--- → fixed
Resolution: --- → FIXED
Target Milestone: --- → Firefox 47
Updated•7 years ago
|
Product: Firefox → DevTools
You need to log in
before you can comment on or make changes to this bug.
Description
•