WebKit Bugzilla
New
Browse
Log In
×
Sign in with GitHub
or
Remember my login
Create Account
·
Forgot Password
Forgotten password account recovery
RESOLVED FIXED
Bug 118785
[GTK] Implement leak checking with valgrind
https://bugs.webkit.org/show_bug.cgi?id=118785
Summary
[GTK] Implement leak checking with valgrind
Brian Holt
Reported
2013-07-17 02:00:04 PDT
https://bugs.webkit.org/show_bug.cgi?id=116317
is a meta bug for tracking memory leaks found in the Gtk port. It should remain open until all the leaks have been resolved. This bug is to implement the leak checking. 1) launch the DRT under valgrind to generate a xml file with details of leaks found 2) to parse this file and display leak results 3) update the valgrind suppressions file(s) 4) raise bugs for known memory leaks/violations.
Attachments
Patch
(78.66 KB, patch)
2013-07-17 02:58 PDT
,
Brian Holt
no flags
Details
Formatted Diff
Diff
Launch DRT under valgrind
(10.35 KB, patch)
2013-08-02 08:13 PDT
,
Brian Holt
no flags
Details
Formatted Diff
Diff
Patch
(4.96 KB, patch)
2013-08-05 08:46 PDT
,
Brian Holt
no flags
Details
Formatted Diff
Diff
Launch DRT under Valgrind v2
(5.12 KB, patch)
2013-08-05 10:22 PDT
,
Brian Holt
no flags
Details
Formatted Diff
Diff
Show Obsolete
(3)
View All
Add attachment
proposed patch, testcase, etc.
Brian Holt
Comment 1
2013-07-17 02:58:39 PDT
Created
attachment 206874
[details]
Patch
Brian Holt
Comment 2
2013-08-02 08:13:11 PDT
Created
attachment 208021
[details]
Launch DRT under valgrind launch the DRT under valgrind to generate a xml file with details of leaks found. \n run with \n $ Tools/Scripts/run-webkit-tests --gtk --debug --leaks --wrapper=valgrind --run-singly LayoutTests/platform/gtk
Brian Holt
Comment 3
2013-08-02 08:20:59 PDT
Given that the previous patch was large and daunting to review, I'm breaking this up into smaller patches. The first one is to launch the DRT under Valgrind. I will submit another patch (in a new bug) to implement the parsing of the xml files that are generated by Valgrind. This will contain Chromium code, but I will additionally upload diffs with the current Chromium code to assist reviewing.
Mario Sanchez Prada
Comment 4
2013-08-04 15:49:05 PDT
Comment on
attachment 208021
[details]
Launch DRT under valgrind View in context:
https://bugs.webkit.org/attachment.cgi?id=208021&action=review
Thanks for the patch Brian. I'm informally reviewing it now, hope you will find my comments useful. Overall, the patch seems to be fine to me, although I see some things that perhaps might not be needed (e.g. the changes related to is_running) and some minor nits. See my comments below...
> Tools/ChangeLog:15 > + * Scripts/webkitpy/port/base.py: > + (Port.check_for_leaks): Move is_running flag to base class.
I don't really understand why you need to move this here if you are actually not reading this value for gtk, and the same logic could be kept for the mac without having this parameter moved here
> Tools/Scripts/webkitpy/port/base.py:384 > - def check_for_leaks(self, process_name, process_pid): > + def check_for_leaks(self, process_name, process_pid, is_running):
As mentioned above, it seems to me this change is not actually needed.
> Tools/Scripts/webkitpy/port/gtk.py:52 > + raise ValueError('use --wrapper=\"valgrind\" for' > + ' memory leak detection on GTK')
No need to split these line in two
> Tools/Scripts/webkitpy/port/gtk.py:55 > + self.set_option_default("batch_size", 1000)
Where does this 1000 number come from? Is it just personal experience or something else?
> Tools/Scripts/webkitpy/port/gtk.py:70 > + multiplier = 10 if self.get_option("leaks") else 1
I think a brief comment here explaining why having a ten times bigger timeout is needed for the "leaks" case would be helpful
> Tools/Scripts/webkitpy/port/gtk.py:80 > + # we want to be slow on cleanup as well > + # (for things like ASAN, Valgrind, etc.)
Put these two last lines in one. End with a period.
> Tools/Scripts/webkitpy/port/gtk.py:104 > + xmlfile = "".join(('\"', self.results_directory(), "/drt-%p-", > + uuid.uuid1().hex, "-leaks.xml", '\"'))
No need to split this in two lines. Also, I think you could use os.path.join() better here.
> Tools/Scripts/webkitpy/port/gtk.py:112 > + # FIXME: instead we should be using "jhbuild-wrapper --gtk run"
instead -> Instead
> Tools/Scripts/webkitpy/port/gtk.py:115 > + #environment['LD_LIBRARY_PATH'] = self.path_from_webkit_base( > + # 'WebKitBuild', 'Dependencies', 'Root', 'lib64')
Remove these two lines if not needed, otherwise uncomment them and put them in a single line
> Tools/Scripts/webkitpy/port/gtk.py:161 > + def check_for_leaks(self, process_name, process_pid, is_running): > + # With Gtk we initiate memory checking by passing valgrind as a wrapper to the test. > + pass
As mentioned above, you're not actually reading the is_running value here, so it seems like you do not need it for gtk
> Tools/Scripts/webkitpy/port/gtk.py:166 > + # In a subsequent patch the leak xml files will be parsed here.
Add a FIXME: prefix here
> Tools/Scripts/webkitpy/port/mac.py:153 > - def check_for_leaks(self, process_name, process_pid): > - if not self.get_option('leaks'): > + def check_for_leaks(self, process_name, process_pid, is_running): > + # Only bother to check for leaks or stderr if the process is still running. > + if not self.get_option('leaks') or not is_running:
You can't avoid this change, I think, if you just leave the original code in server_process.py untouched, since you are not doing anything special after all in the newly supported port (GTK)
> Tools/Scripts/webkitpy/port/server_process.py:335 > - # Only bother to check for leaks or stderr if the process is still running. > - if self.poll() is None: > - self._port.check_for_leaks(self.name(), self.pid()) > + is_running = self.poll() is None > + self._port.check_for_leaks(self.name(), self.pid(), is_running)
I think you don't need to do this, and so that you can leave the original code here too.
> Tools/Scripts/webkitpy/port/server_process_unittest.py:50 > - def check_for_leaks(self, process_name, process_pid): > + def check_for_leaks(self, process_name, process_pid, is_running):
You don't need this change either
Mario Sanchez Prada
Comment 5
2013-08-04 15:59:27 PDT
Comment on
attachment 208021
[details]
Launch DRT under valgrind View in context:
https://bugs.webkit.org/attachment.cgi?id=208021&action=review
> Tools/Scripts/webkitpy/port/gtk.py:111 > + environment['VALGRIND_OPTS'] = "--tool=memcheck " \ > + "--num-callers=40 --demangle=no --trace-children=no " \ > + "--smc-check=all-non-file --leak-check=yes " \ > + "--leak-resolution=high --show-possibly-lost=no " \ > + "--show-reachable=no --leak-check=full " \ > + " --undef-value-errors=no " \ > + "--gen-suppressions=all --xml=yes --xml-file=%s " % (xmlfile)
Also, please keep only one pair --option=value per line, with the first one (--tool=memcheck) starting in the line following the assignment, to improve readability.
Mario Sanchez Prada
Comment 6
2013-08-04 15:59:29 PDT
Comment on
attachment 208021
[details]
Launch DRT under valgrind View in context:
https://bugs.webkit.org/attachment.cgi?id=208021&action=review
> Tools/Scripts/webkitpy/port/gtk.py:111 > + environment['VALGRIND_OPTS'] = "--tool=memcheck " \ > + "--num-callers=40 --demangle=no --trace-children=no " \ > + "--smc-check=all-non-file --leak-check=yes " \ > + "--leak-resolution=high --show-possibly-lost=no " \ > + "--show-reachable=no --leak-check=full " \ > + " --undef-value-errors=no " \ > + "--gen-suppressions=all --xml=yes --xml-file=%s " % (xmlfile)
Also, please keep only one pair --option=value per line, with the first one (--tool=memcheck) starting in the line following the assignment, to improve readability.
Brian Holt
Comment 7
2013-08-05 08:46:44 PDT
Created
attachment 208129
[details]
Patch Addressed review comments
Brian Holt
Comment 8
2013-08-05 08:49:54 PDT
(In reply to
comment #4
)
> (From update of
attachment 208021
[details]
) > View in context:
https://bugs.webkit.org/attachment.cgi?id=208021&action=review
> > Thanks for the patch Brian. I'm informally reviewing it now, hope you will find my comments useful. >
Thanks for the review! Your comments made me check assumptions I had made along the (long) way of creating this patch and as result I've trimmed it down to a *much* smaller patch.
Mario Sanchez Prada
Comment 9
2013-08-05 10:04:30 PDT
Comment on
attachment 208129
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=208129&action=review
Besides a small nit (which I'm not even sure whether others would agree with anyway), the patch now looks good to me, so I would say an official review would be in place now. It's so beautiful to see it reduced to less than half of the original size! :)
> Tools/Scripts/webkitpy/port/gtk.py:92 > + environment['G_SLICE'] = 'always-malloc'
I understand that forcing malloc() for every single memory allocation is some kind of prerequisite to use valgrind here? If so, a comment explaining the reason would be handy here too, as it's not obvious why we need this.
> Tools/Scripts/webkitpy/port/gtk.py:96 > + environment['VALGRIND_OPTS'] = "--tool=memcheck " \ > + "--num-callers=40 " \
Nit. I would probably move this --tool parameter to the following line, so every option is aligned.
Brian Holt
Comment 10
2013-08-05 10:15:04 PDT
Comment on
attachment 208129
[details]
Patch View in context:
https://bugs.webkit.org/attachment.cgi?id=208129&action=review
Thanks for the review! Since the other changes are so heavily dependent on this getting in I'm going to hold off uploading new versions of them until this gets in (hopefully soon)!
>> Tools/Scripts/webkitpy/port/gtk.py:92 >> + environment['G_SLICE'] = 'always-malloc' > > I understand that forcing malloc() for every single memory allocation is some kind of prerequisite to use valgrind here? > > If so, a comment explaining the reason would be handy here too, as it's not obvious why we need this.
Good point - and in finding a link (
https://wiki.gnome.org/Valgrind
) I've found that I should also set G_DEBUG=gc-friendly.
>> Tools/Scripts/webkitpy/port/gtk.py:96 >> + "--num-callers=40 " \ > > Nit. I would probably move this --tool parameter to the following line, so every option is aligned.
Sorry, you mentioned that last review but I missed it.
Brian Holt
Comment 11
2013-08-05 10:22:36 PDT
Created
attachment 208133
[details]
Launch DRT under Valgrind v2
Mario Sanchez Prada
Comment 12
2013-08-05 12:31:27 PDT
Comment on
attachment 208133
[details]
Launch DRT under Valgrind v2 Thanks Brian for addressing all the comments. I've certainly nothing to add now, so... time for and official review? :-)
Dirk Pranke
Comment 13
2013-08-05 12:33:25 PDT
I will try to take a look shortly :).
Zan Dobersek
Comment 14
2013-08-05 13:01:36 PDT
Comment on
attachment 208133
[details]
Launch DRT under Valgrind v2 View in context:
https://bugs.webkit.org/attachment.cgi?id=208133&action=review
> Tools/Scripts/webkitpy/port/gtk.py:71 > + # Starting an application under Valgrind takes a lot longer than normal > + # so increase the timeout (empirically 10x is enough to avoid timeouts). > + multiplier = 10 if self.get_option("leaks") else 1 > if self.get_option('configuration') == 'Debug': > - return 12 * 1000 > - return 6 * 1000 > + return multiplier * 12 * 1000 > + return multiplier * 6 * 1000
This timeout value covers the maximum time each test is allowed to run, not the amount of time each DumpRenderTree/WebKitTestRunner instance takes to fire up and get ready for testing. I assume that under Valgrind, you'd still want a prolonged timeout value (so applying the multiplier here is OK), but the comment is not technically correct.
Dirk Pranke
Comment 15
2013-08-05 13:02:12 PDT
Comment on
attachment 208133
[details]
Launch DRT under Valgrind v2 This looks fine. I'm basically rubber-stamping the valigrind command line part :).
WebKit Commit Bot
Comment 16
2013-08-05 13:25:16 PDT
Comment on
attachment 208133
[details]
Launch DRT under Valgrind v2 Clearing flags on attachment: 208133 Committed
r153721
: <
http://trac.webkit.org/changeset/153721
>
WebKit Commit Bot
Comment 17
2013-08-05 13:25:20 PDT
All reviewed patches have been landed. Closing bug.
Brian Holt
Comment 18
2013-08-06 02:15:31 PDT
(In reply to
comment #17
)
> All reviewed patches have been landed. Closing bug.
Thanks everyone for the reviews, its much appreciated!
Note
You need to
log in
before you can comment on or make changes to this bug.
Top of Page
Format For Printing
XML
Clone This Bug