Closed
Bug 1367763
Opened 8 years ago
Closed 7 years ago
Use grcov immediately after coverage test run
Categories
(Testing :: Code Coverage, enhancement)
Testing
Code Coverage
Tracking
(firefox56 fixed)
RESOLVED
FIXED
mozilla56
Tracking | Status | |
---|---|---|
firefox56 | --- | fixed |
People
(Reporter: ekyle, Assigned: sparky)
References
Details
Attachments
(1 file)
grcov, and all other coverage tools, require the repository and the symlinks to produce source file names in the coverage reports.
Maybe we should run grcov immediately after the tests so it can use the test environment, rather than building its own on a different machine.
Assignee | ||
Comment 1•8 years ago
|
||
There are four steps that I think this task splits into:
1.*
Download GCNO archive onto the test machines.
2.**
Install grcov on the test machines. (Using the pre-action listener I imagine, like running gcov?).
3.**
Run grcov on the test machines. (Using the post-action listener?).
* Could be done at the same time as 2 and 3.
** These could be done differently and at the same time at the end of the test-chunk.
4.
As marco said on IRC, rather than uploading another artifact, we can use chris' work from this bug: https://bugzilla.mozilla.org/show_bug.cgi?id=1349640
This would involve either modifying grcov to use the mappings, or with a script at the end of grcov's run. The former would require less processing time than the latter.
Any thoughts on this breakdown? Am I missing anything?
Comment 2•8 years ago
|
||
The summary looks correct to me.
I'm not sure what we usually do when installing external tools. Do we clone their source code and build them?
I can take care of adding support to grcov for using the mapping introduced in bug 1349640.
Comment 3•8 years ago
|
||
it is best to put binaries up on tooltool, but we can |git clone| and run code; the test machines might not have all the libraries/tools for building, so be careful.
Comment 4•8 years ago
|
||
(In reply to Joel Maher ( :jmaher) from comment #3)
> it is best to put binaries up on tooltool, but we can |git clone| and run
> code; the test machines might not have all the libraries/tools for building,
> so be careful.
If we decide to build, the only dependency should be the Rust compiler.
Comment 5•8 years ago
|
||
(In reply to Marco Castelluccio [:marco] from comment #2)
> I can take care of adding support to grcov for using the mapping introduced
> in bug 1349640.
This is now done.
Assignee | ||
Comment 6•8 years ago
|
||
Great! I'm looking into how we can integrate it but this will depend on where we want to build. Do you have any preferences? I am thinking that using a pre-built version on tooltool will be the easier way.
Flags: needinfo?(mcastelluccio)
Comment 7•8 years ago
|
||
Using a pre-built version sounds fine to me, you can download one from https://github.com/marco-c/grcov/releases (I suggest the grcov-linux-standalone-x86_64.tar.bz2 one, as it doesn't depend on a specific glibc version).
Flags: needinfo?(mcastelluccio)
Assignee | ||
Comment 8•8 years ago
|
||
I don't have sufficient permission to get a token for upload for RelengAPI. Marco, would you be able to do this?
I was following the instructions from here: https://wiki.mozilla.org/ReleaseEngineering/Applications/Tooltool
Flags: needinfo?(mcastelluccio)
Assignee | ||
Comment 10•8 years ago
|
||
Thanks Marco! I should have something going befote the end of the day...assuming my computer cooperates with me.
Comment 11•8 years ago
|
||
(In reply to Greg Mierzwinski [:gmierz] from comment #10)
> Thanks Marco! I should have something going befote the end of the
> day...assuming my computer cooperates with me.
Feel free to ping me should you need any help with grcov.
Assignee | ||
Comment 12•8 years ago
|
||
Here we go: https://treeherder.mozilla.org/#/jobs?repo=try&revision=dcec85b995d7677a1bd5aadd701aead0239d1e05
It's running, and we are gathering output. The output needs to be reformatted though I think as it doesn't have the standard LCOV look to it (there are no new lines).
Comment 13•8 years ago
|
||
(In reply to Greg Mierzwinski [:gmierz] from comment #12)
> Here we go:
> https://treeherder.mozilla.org/#/
> jobs?repo=try&revision=dcec85b995d7677a1bd5aadd701aead0239d1e05
>
> It's running, and we are gathering output. The output needs to be
> reformatted though I think as it doesn't have the standard LCOV look to it
> (there are no new lines).
Are you on Windows? Perhaps the issue is that they are Unix newlines.
Assignee | ||
Comment 14•8 years ago
|
||
Woohoo! :)
Thank you for catching that Marco, it definitely uses linux new lines. So, everything is working great then from what I've seen so far. I'll analyze the data a bit tomorrow to see if there are any problems in it. After that, I'll submit the patch for review.
Comment hidden (mozreview-request) |
Assignee | ||
Comment 16•8 years ago
|
||
Here's a test run with all test suites running: https://treeherder.mozilla.org/#/jobs?repo=try&revision=57727d3955c2c78197ed4290db919cef0ed1c023
Also, looking at the time the test suites took before and after this patch, there seems to be no difference (or very little).
Comment 17•8 years ago
|
||
mozreview-review |
Comment on attachment 8873888 [details]
Bug 1367763 - Run grcov after code coverage collection on linux64-ccov.
https://reviewboard.mozilla.org/r/145282/#review149244
just the one issue
::: testing/mozharness/mozharness/mozilla/testing/codecoverage.py:125
(Diff revision 1)
> self.run_command(command, cwd=rel_topsrcdir)
> +
> + # Run grcov on the zipped .gcno and .gcda files.
> + grcov_command = [os.path.join(self.grcov_dir, 'grcov'), '-t', 'lcov' , '-z', \
> + '-s', rel_topsrcdir, '-p', '/home/worker/workspace/build/src/', \
> + '--path-mapping', os.path.join(self.grcov_dir, 'linked-files-map.json'), \
I see /home/worker/workspace/build/src/ hardcoded, do we need that hardcoded?
Attachment #8873888 -
Flags: review?(jmaher) → review-
Comment 18•8 years ago
|
||
(In reply to Joel Maher ( :jmaher) from comment #17)
> Comment on attachment 8873888 [details]
> Bug 1367763 - Run grcov after code coverage collection on linux64-ccov.
>
> https://reviewboard.mozilla.org/r/145282/#review149244
>
> just the one issue
>
> ::: testing/mozharness/mozharness/mozilla/testing/codecoverage.py:125
> (Diff revision 1)
> > self.run_command(command, cwd=rel_topsrcdir)
> > +
> > + # Run grcov on the zipped .gcno and .gcda files.
> > + grcov_command = [os.path.join(self.grcov_dir, 'grcov'), '-t', 'lcov' , '-z', \
> > + '-s', rel_topsrcdir, '-p', '/home/worker/workspace/build/src/', \
> > + '--path-mapping', os.path.join(self.grcov_dir, 'linked-files-map.json'), \
>
> I see /home/worker/workspace/build/src/ hardcoded, do we need that hardcoded?
The '-p' argument is needed for removing the prefix from the paths (the paths in the gcno/gcda files all start with "/home/worker/workspace/build/src/").
Is there a way to get the prefix without hardcoding? Perhaps |os.cwd()| gives the same result, when running on a test machine?
Assignee | ||
Comment 19•8 years ago
|
||
Thanks for the information Marco, we can use rel_topsrcdir, or one of the directories in dirs.
Is the prefix path ever different between the gcnos and gcdas?
Comment 20•8 years ago
|
||
(In reply to Greg Mierzwinski [:gmierz] from comment #19)
> Thanks for the information Marco, we can use rel_topsrcdir, or one of the
> directories in dirs.
>
> Is the prefix path ever different between the gcnos and gcdas?
So far, I've always seen the same prefix in both gcnos and gcdas.
Assignee | ||
Comment 21•8 years ago
|
||
Ok, I'll be opening a bug to remind us to write some code that can check if the two prefixes are the same or different for us.
I seem to have stumbled upon an interesting problem where grcov is failing for some of the test chunks: https://treeherder.mozilla.org/#/jobs?repo=try&author=gmierz2@outlook.com&selectedJob=104091043
What is odd though is that it is not failing on all the test chunks of a given suite. For example, the link above shows that 'code-coverage-grcov.zip' is 230 bytes, but chunk 4 is fine. (Most of mochitest-plain though is broken). The error output says that gcov was not successfully executed. I'm hoping that it's because the path given to '-s' is incorrect and I'm running a test to see this now: https://treeherder.mozilla.org/#/jobs?repo=try&revision=5c280cb5ec0b58315a691dd25cf1f8689c1d41fd
Assignee | ||
Comment 22•8 years ago
|
||
It seems like the tests which were passing managed to find enough information from within the gcov_dir path which contains the gcda's but doesn't contain any source code. Interestingly enough, it looks like the directory structure was enough to let them pass. I'm running another test now to look at the directories that we have and see if there even is a src directory because it seems like it doesn't exist. (Either it's just not there, or it was deleted before we could get to it).
Here's a link to the test: https://treeherder.mozilla.org/#/jobs?repo=try&revision=3fcbcc1315b0644175e262ec0467cff3ea35763d
Marco, would you have any ideas about this problem? I'm wondering if it's gcov itself that failed to execute properly and caused grcov to fail.
Flags: needinfo?(mcastelluccio)
Assignee | ||
Comment 23•8 years ago
|
||
Also, the test in comment 21 checks directories before runtests is running. The test in comment 22 checks directories after it's run.
Comment 24•8 years ago
|
||
I think the problem is that the 'gcov' binary on test machines is not the same version as the 'gcov' binary in build machines.
Build machines use a newer version of GCC. We should use the same version in test machines.
Flags: needinfo?(mcastelluccio)
Assignee | ||
Comment 25•8 years ago
|
||
Ok, thanks for looking into this Marco, I'm glad it's not grcov that broke. I'll look into getting this fixed.
Assignee | ||
Comment 26•8 years ago
|
||
From my investigation, it's actually the other way around. The build machine uses the older version, at 4.9.4, and the test machine uses the newer version at 5.4.0.
Assignee | ||
Comment 27•8 years ago
|
||
(In reply to Greg Mierzwinski [:gmierz] from comment #26)
> From my investigation, it's actually the other way around. The build machine
> uses the older version, at 4.9.4, and the test machine uses the newer
> version at 5.4.0.
Correction, the GPU test suite uses a newer version than all the others at 5.4.0, the others use an earlier version at 4.6.3.
Assignee | ||
Comment 28•8 years ago
|
||
So, to get this working we will have to migrate all the other test suites to Ubuntu 16.04. We can do it in another way, but the migration would override that change anyway. Here's a test run that shows that mochitest-plain simply needs to be run with ubuntu 16.04 to get the newer gcov binary: https://treeherder.mozilla.org/#/jobs?repo=try&revision=0f300a252772a0cb2f5e2c9644655d6b4962c024
If you look at the uploaded grcov files, they now have data in them. Mochitest-chrome is also failing in this way because it hasn't been migrated yet.
Assignee | ||
Updated•8 years ago
|
Comment 29•8 years ago
|
||
Couldn't GCC be downloaded via tooltool?
In https://github.com/marco-c/grcov/issues/20#issue-223478909, Maja said the build task uses tooltool to fetch gcc 4.9.4.
Assignee | ||
Comment 30•7 years ago
|
||
Yes, we can do that.
But (imo) it's going to be redundant work since the linux64 migration will fix the problem, and there's only a few test left to fix there. Would you rather do it through tooltool for the time being? We could do it at the same time grcov is downloaded and installed.
Comment 31•7 years ago
|
||
(In reply to Greg Mierzwinski [:gmierz] from comment #30)
> Yes, we can do that.
>
> But (imo) it's going to be redundant work since the linux64 migration will
> fix the problem, and there's only a few test left to fix there. Would you
> rather do it through tooltool for the time being? We could do it at the same
> time grcov is downloaded and installed.
Do you know when the migration will happen? If it's going to happen very soon, then I think we can wait.
Comment 32•7 years ago
|
||
it is fixing 3 tests that are highly intermittent, possibly 1 more week and we are good if Greg can focus on those tests.
Comment hidden (mozreview-request) |
Assignee | ||
Comment 34•7 years ago
|
||
Here's the latest test run: https://treeherder.mozilla.org/#/jobs?repo=try&revision=0b8cd116fe06252bff804433d657118857509475
Comment 35•7 years ago
|
||
mozreview-review |
Comment on attachment 8873888 [details]
Bug 1367763 - Run grcov after code coverage collection on linux64-ccov.
https://reviewboard.mozilla.org/r/145282/#review155260
thanks, this is looking really good.
Attachment #8873888 -
Flags: review?(jmaher) → review+
Comment 36•7 years ago
|
||
mozreview-review |
Comment on attachment 8873888 [details]
Bug 1367763 - Run grcov after code coverage collection on linux64-ccov.
https://reviewboard.mozilla.org/r/145282/#review155302
::: testing/mozharness/mozharness/mozilla/testing/codecoverage.py:133
(Diff revision 2)
> + # GRCOV post-processing
> + # Download the gcno fom the build machine.
> + self.download_file(self.url_to_gcno, file_name=None, parent_dir=self.grcov_dir)
> +
> + # Run grcov on the zipped .gcno and .gcda files.
> + grcov_command = [os.path.join(self.grcov_dir, 'grcov'), '-t', 'lcov' , '-z', \
With the latest version of grcov, `-z` won't be needed anymore, and you will be able to directly pass the ZIP containing the GCNO files and the directory to the GCDA files (this will avoid grcov decompressing the GCDA ZIP needlessly).
Let's open a new bug for this, since I also need to upload a new version to tooltool first.
::: testing/mozharness/mozharness/mozilla/testing/codecoverage.py:139
(Diff revision 2)
> + os.path.join(self.grcov_dir, 'target.code-coverage-gcno.zip'), file_path_gcda]
> +
> + # 'grcov_output' will be a tuple, the first variable is the path to the lcov output,
> + # the other is the path to the standard error output.
> + grcov_output = self.get_output_from_command(grcov_command, cwd=self.grcov_dir, \
> + silent=True, tmpfile_base_path=os.path.join(self.grcov_dir, 'grcov_lcov_output'), \
Nit: since the output is a LCOV info file, we could set the extension to ".info".
Attachment #8873888 -
Flags: review?(mcastelluccio) → review+
Assignee | ||
Comment 37•7 years ago
|
||
Assignee | ||
Comment 38•7 years ago
|
||
Comment hidden (mozreview-request) |
Assignee | ||
Comment 40•7 years ago
|
||
mozreview-review-reply |
Comment on attachment 8873888 [details]
Bug 1367763 - Run grcov after code coverage collection on linux64-ccov.
https://reviewboard.mozilla.org/r/145282/#review155302
> With the latest version of grcov, `-z` won't be needed anymore, and you will be able to directly pass the ZIP containing the GCNO files and the directory to the GCDA files (this will avoid grcov decompressing the GCDA ZIP needlessly).
>
> Let's open a new bug for this, since I also need to upload a new version to tooltool first.
Ok, sounds good!
> Nit: since the output is a LCOV info file, we could set the extension to ".info".
Fixed in latest revision.
Assignee | ||
Comment 41•7 years ago
|
||
Comment 38 has the latest try push with the changes that were made in that latest revision. Also, bug 1374663 is for the follow-up work that needs to be done.
Assignee | ||
Comment 42•7 years ago
|
||
Comment hidden (mozreview-request) |
Assignee | ||
Comment 44•7 years ago
|
||
Comment 42 has the try run with the latest changes and this patch is good to go.
Comment 45•7 years ago
|
||
Pushed by jmaher@mozilla.com:
https://hg.mozilla.org/integration/autoland/rev/e8b9b9cabc8c
Run grcov after code coverage collection on linux64-ccov. r=jmaher,marco
Comment 46•7 years ago
|
||
bugherder |
Status: NEW → RESOLVED
Closed: 7 years ago
status-firefox56:
--- → fixed
Resolution: --- → FIXED
Target Milestone: --- → mozilla56
Updated•6 years ago
|
Assignee: nobody → gmierz2
You need to log in
before you can comment on or make changes to this bug.
Description
•