New issue
Advanced search Search tips

Issue 751085 link

Starred by 2 users

Issue metadata

Status: Fixed
Owner:
Closed: Oct 2017
Cc:
Components:
EstimatedDays: ----
NextAction: ----
OS: All
Pri: 2
Type: Bug



Sign in to add a comment

DevTools: JS code coverage can have mixed granularity

Project Member Reported by jgruber@chromium.org, Aug 1 2017

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.
 
block-coverage-screen-recording.ogv
4.7 MB View Download
Friendly ping, any updates on this?
Project Member

Comment 2 by bugdroid1@chromium.org, 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

Comment 3 by caseq@chromium.org, Oct 3 2017

Status: Fixed (was: Assigned)

Sign in to add a comment