DevTools: JS code coverage can have mixed granularity |
||
Issue description
Version: current ToT.
With block coverage enabled in V8, it's now possible for functions to have mixed-granularity coverage in DevTools. This may be problematic if we initially collect block-granularity coverage, and later switch to function-granularity - in this case, block-coverage is still displayed but never updated.
See attached screen capture for more details.
1. The sequence from 0:36 to 1:00 shows the problematic workflow that happens when first collecting *with reload*, stopping collection, and then collecting *without reload*.
2. The source display seems to be bugged and does not display coverage information when restarting coverage collection at 0:32. It only works after restarting collection a second time. I've seen this a couple of times.
Full protocol:
0:02: Start instrumenting coverage and reload
Note how the ranges are displayed in the source pane.
0:25: Clear all
0:32: Start instrumenting coverage and reload
Note that the source pane seems to be bugged and does not display any ranges.
0:36: Clear all, Start instrumenting coverage and reload
This time it works.
"Hello" and "Bye" buttons clicked, compiling both functions and collecting partial coverage.
0:46: Clear all
0:49: Start instrumenting coverage *without reload*
"Goodbye" and "Hi" buttons are clicked. Expected outcome: coverage should be updated.
Actual outcome: coverage is not updated
because we are now at function-granularity (the previous click on 'Stop collection' has deleted
all information needed to collect block-granularity coverage).
One possible solution that I could imagine is removing the 'Clear all' button and making it implicit at the beginning of both 'Start instrumenting' options. The downside is that we'd lose any previously recorded best-effort coverage.
,
Oct 1 2017
The following revision refers to this bug: https://chromium.googlesource.com/chromium/src.git/+/3851c772ecbfe9decbc099161a26d9eb88694a65 commit 3851c772ecbfe9decbc099161a26d9eb88694a65 Author: Andrey Kosyakov <caseq@chromium.org> Date: Sun Oct 01 07:39:23 2017 DevTools: expose block/function-level coverage in UI - provide an indication when the coverage is function level, along with a hint to reload the page for block-level coverage; - clear all coverage upon page reload, mixing coverage of old and new resources is confusing; - request "best effort" coverage once upon start of coverage, this gets us something to show if "prcise" coverage is empty; Bug: 751085 Change-Id: I0c5149469347276c3301324c9bf956a7c4eba32c Reviewed-on: https://chromium-review.googlesource.com/693045 Commit-Queue: Andrey Kosyakov <caseq@chromium.org> Reviewed-by: Alexei Filippov <alph@chromium.org> Cr-Commit-Position: refs/heads/master@{#505512} [modify] https://crrev.com/3851c772ecbfe9decbc099161a26d9eb88694a65/third_party/WebKit/LayoutTests/http/tests/devtools/coverage/coverage-repeated-expected.txt [modify] https://crrev.com/3851c772ecbfe9decbc099161a26d9eb88694a65/third_party/WebKit/LayoutTests/http/tests/devtools/coverage/coverage-view-expected.txt [modify] https://crrev.com/3851c772ecbfe9decbc099161a26d9eb88694a65/third_party/WebKit/LayoutTests/http/tests/devtools/coverage/coverage-view-filter-expected.txt [modify] https://crrev.com/3851c772ecbfe9decbc099161a26d9eb88694a65/third_party/WebKit/LayoutTests/http/tests/devtools/coverage/coverage-view.html [modify] https://crrev.com/3851c772ecbfe9decbc099161a26d9eb88694a65/third_party/WebKit/LayoutTests/http/tests/devtools/coverage/decorations-after-script-formatter-expected.txt [modify] https://crrev.com/3851c772ecbfe9decbc099161a26d9eb88694a65/third_party/WebKit/LayoutTests/http/tests/devtools/coverage/gutter-js-expected.txt [modify] https://crrev.com/3851c772ecbfe9decbc099161a26d9eb88694a65/third_party/WebKit/LayoutTests/http/tests/devtools/coverage/multiple-instances-merge-expected.txt [modify] https://crrev.com/3851c772ecbfe9decbc099161a26d9eb88694a65/third_party/WebKit/LayoutTests/http/tests/devtools/coverage/resources/coverage.js [modify] https://crrev.com/3851c772ecbfe9decbc099161a26d9eb88694a65/third_party/WebKit/LayoutTests/http/tests/devtools/resources/coverage-test.js [modify] https://crrev.com/3851c772ecbfe9decbc099161a26d9eb88694a65/third_party/WebKit/Source/devtools/front_end/coverage/CoverageDecorationManager.js [modify] https://crrev.com/3851c772ecbfe9decbc099161a26d9eb88694a65/third_party/WebKit/Source/devtools/front_end/coverage/CoverageListView.js [modify] https://crrev.com/3851c772ecbfe9decbc099161a26d9eb88694a65/third_party/WebKit/Source/devtools/front_end/coverage/CoverageModel.js [modify] https://crrev.com/3851c772ecbfe9decbc099161a26d9eb88694a65/third_party/WebKit/Source/devtools/front_end/coverage/CoverageView.js [modify] https://crrev.com/3851c772ecbfe9decbc099161a26d9eb88694a65/third_party/WebKit/Source/devtools/front_end/coverage_test_runner/CoverageTestRunner.js [modify] https://crrev.com/3851c772ecbfe9decbc099161a26d9eb88694a65/third_party/WebKit/Source/devtools/front_end/sdk/CPUProfilerModel.js
,
Oct 3 2017
|
||
►
Sign in to add a comment |
||
Comment 1 by jgruber@chromium.org
, Sep 4 2017