183
edits
Mnandigama (talk | contribs) mNo edit summary |
Mnandigama (talk | contribs) No edit summary |
||
Line 1: | Line 1: | ||
__TOC__ | |||
== <FONT COLOR=GREEN>What is the progress so far!!</FONT> == | |||
== <FONT COLOR=GREEN>Results and Findings </FONT> == | |||
== <FONT COLOR=GREEN>How to instrument the Mozilla Firefox Browser </FONT> == | |||
In order to perform code coverage exercise on the Firefox browser, we need to go through at least two iterations. | In order to perform code coverage exercise on the Firefox browser, we need to go through at least two iterations. | ||
Line 9: | Line 14: | ||
*STEP 1 | *STEP 1 | ||
Create a .mozconfig file with the following statements | |||
export CFLAGS="-fprofile-arcs -ftest-coverage" | |||
export CXXFLAGS="-fprofile-arcs -ftest-coverage" | |||
export EXTRA_DSO_LDFLAGS="-lgcov -static-libgcc" | |||
export LDFLAGS="-lgcov -static-libgcc" | |||
ac_add_options --enable-application=browser | |||
mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/../mozcentral-dbg | |||
ac_add_options --enable-tests | |||
ac_add_options --enable-mochitest | |||
ac_add_options --enable-debug | |||
ac_add_options --disable-optimize | |||
ac_add_options --enable-jsd | |||
mk_add_options MOZ_MAKE_FLAGS="-j3" | |||
mk_add_options AUTOCONF=autoconf2.13 | |||
Line 50: | Line 55: | ||
Now, come back into your home directory and execute the following command | Now, come back into your home directory and execute the following command | ||
lcov -c -i -d mozcentral-dbg -o app.info | |||
The lcov tool will go through the entire build directory and generates an app.info file in your home directory | The lcov tool will go through the entire build directory and generates an app.info file in your home directory | ||
Line 56: | Line 61: | ||
Then, execute the following command | Then, execute the following command | ||
genhtml app.info | |||
If by any chance the above command fails to complete, use the following option. | |||
genhtml --no-source app.info | |||
Line 72: | Line 77: | ||
So ... here is how to instrument the javascript portion of Firefox. | So ... here is how to instrument the javascript portion of Firefox. | ||
Do not download the binary of the JScoverage from http://siliconforks.com/jscoverage/ | |||
You should check out the source code from its public Subversion repository: | |||
svn co http://svn.siliconforks.com/jscoverage/trunk jscoverage | |||
To compile, run bootstrap.sh (requires Automake and Autoconf): | |||
./bootstrap.sh | |||
Then run make as usual. | |||
Finally execute the make install command so that jscoverage is | |||
installed in the /usr/local/bin | |||
Why not use the binary from the site and why to build our own jscoverage ?? | Why not use the binary from the site and why to build our own jscoverage ?? | ||
The following enhancements are present in our own build with | |||
latest revision. | |||
1. Instrumenting symbolic links in the case where | |||
the destination is a regular file. | |||
* For those who are curious, JSCoverage does not instrument | |||
javascript files that are symbolically referenced. | |||
2. It copies file permissions (so that executable files stay executable). | |||
3. It has the --mozilla option to copy the jscoverage.html file | |||
directly into Firefox's chrome. | |||
The --mozilla option automatically sets the JavaScript version to 180, | |||
so it is not necessary to use both --mozilla | |||
and --js-version at the same time. | |||
NOTE: --js-version=180 would allow instrumenting the symbolic links | |||
So, starting from the top of the Firefox build directory , here are the commands to instrument the whole Firefox directory and run the mochitests with the instrumented version: | So, starting from the top of the Firefox build directory , here are the commands to instrument the whole Firefox directory and run the mochitests with the instrumented version: | ||
cd /dist | |||
mv bin bin-original | |||
jscoverage \ | |||
--mozilla \ | |||
--no-instrument=defaults \ | |||
--no-instrument=greprefs \ | |||
bin-original bin | |||
cd ../_tests/testing/mochitest | |||
python runtests.py | |||
It seems that it is necessary to use --no-instrument on the entire defaults and prefs directories because the preferences .js files should not contain arbitrary JavaScript. | It seems that it is necessary to use --no-instrument on the entire defaults and prefs directories because the preferences .js files should not contain arbitrary JavaScript. | ||
Line 116: | Line 121: | ||
When we run the instrumented Firefox, there is now a "JSCoverage" menu in the "Tools" menu. Tools -> JSCoverage -> View Coverage loads the jscoverage.html file, and Tools -> JSCoverage -> Store Coverage saves the coverage data into a directory named "./jscoverage-report/". | When we run the instrumented Firefox, there is now a "JSCoverage" menu in the "Tools" menu. Tools -> JSCoverage -> View Coverage loads the jscoverage.html file, and Tools -> JSCoverage -> Store Coverage saves the coverage data into a directory named "./jscoverage-report/". | ||
Oh.. by the way ... you don't need to run the mochitests twice to get C/C++ and javascript code coverage. Simply build the Firefox as explained in STEP:1 and then execute the JSCoverage coomand on top of it. Then you can run your tests to get both C/C++ and JavaScript coverage at the same time.. | Oh.. by the way ... you don't need to run the mochitests twice to get C/C++ and javascript code coverage. Simply build the Firefox as explained in STEP:1 and then execute the JSCoverage coomand on top of it. Then you can run your tests to get both C/C++ and JavaScript coverage at the same time.. | ||
Line 122: | Line 127: | ||
http://picasaweb.google.com/murali.nandigama/FirefoxCodeCoverage# | http://picasaweb.google.com/murali.nandigama/FirefoxCodeCoverage# | ||
== <FONT COLOR=GREEN>Scripts and Works around required </FONT> == | |||
== <FONT COLOR=GREEN>How to consolidate / merge results and generate graphs</FONT> == |
edits