RESOLVED WONTFIX 48820
nrwt - checkpoint multiprocess work
https://bugs.webkit.org/show_bug.cgi?id=48820
Summary nrwt - checkpoint multiprocess work
Dirk Pranke
Reported 2010-11-01 23:42:45 PDT
nrwt - checkpoint multiprocess work
Attachments
Patch (79.93 KB, patch)
2010-11-01 23:43 PDT, Dirk Pranke
no flags
Patch (84.33 KB, patch)
2010-11-06 20:45 PDT, Dirk Pranke
no flags
Patch (84.19 KB, patch)
2010-11-06 20:53 PDT, Dirk Pranke
no flags
merge to head (r71474) (84.79 KB, patch)
2010-11-06 21:05 PDT, Dirk Pranke
no flags
merge from trunk@71580 (85.30 KB, patch)
2010-11-08 15:59 PST, Dirk Pranke
no flags
cleanup, merge to tip of tree as of r71873 (82.57 KB, patch)
2010-11-12 02:01 PST, Dirk Pranke
no flags
change default # of child processes for test port back to 1, merge to ToT as of r72041 (81.92 KB, patch)
2010-11-15 15:34 PST, Dirk Pranke
no flags
Patch (78.87 KB, patch)
2010-11-17 17:07 PST, Dirk Pranke
no flags
Patch (77.56 KB, patch)
2010-11-18 14:49 PST, Dirk Pranke
no flags
sync to r72641 + patch to bug 49779 (59.36 KB, patch)
2010-11-23 19:03 PST, Dirk Pranke
no flags
sync to r72708 (54.21 KB, patch)
2010-11-24 17:13 PST, Dirk Pranke
no flags
sync to r73080, clean up broker abstraction a bunch, clean up dump_render_tree_thread to track bug 50367 (75.52 KB, patch)
2010-12-01 20:02 PST, Dirk Pranke
no flags
Patch - merge to r73080 plus the chain of bugs from 50367 .. 50381 (85.89 KB, patch)
2010-12-02 03:01 PST, Dirk Pranke
no flags
Patch (101.26 KB, patch)
2010-12-07 20:45 PST, Dirk Pranke
no flags
Dirk Pranke
Comment 1 2010-11-01 23:43:41 PDT
Dirk Pranke
Comment 2 2010-11-01 23:44:29 PDT
checkpointing work in progress. The code seems to work and not wedge any more. But, it needs a lot more testing and cleanup, and then it needs to be broken into multiple chunks for review / landing.
Dirk Pranke
Comment 3 2010-11-06 20:45:21 PDT
Dirk Pranke
Comment 4 2010-11-06 20:53:23 PDT
Dirk Pranke
Comment 5 2010-11-06 21:05:43 PDT
Created attachment 73186 [details] merge to head (r71474)
Dirk Pranke
Comment 6 2010-11-08 15:59:37 PST
Created attachment 73301 [details] merge from trunk@71580
Dirk Pranke
Comment 7 2010-11-12 02:01:36 PST
Created attachment 73722 [details] cleanup, merge to tip of tree as of r71873
Dirk Pranke
Comment 8 2010-11-12 02:05:03 PST
Note that the code as it stands works fine on Mac and Linux (I think) if you want to apply it and start playing with it. We get a near-linear speed up on the tests up to at least 16 workers/processes (threads top out somewhere between 4 and 8, assuming things don't wedge) ...
Eric Seidel (no email)
Comment 9 2010-11-12 11:25:15 PST
Comment on attachment 73722 [details] cleanup, merge to tip of tree as of r71873 View in context: https://bugs.webkit.org/attachment.cgi?id=73722&action=review > WebKitTools/ChangeLog:10 > + * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py: So this isn't actually really a thread anymore? I assume we'll fix the naming later. > WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:53 > +from webkitpy.layout_tests.test_types import test_type_base > +from webkitpy.layout_tests.test_types import text_diff > +from webkitpy.layout_tests.test_types import image_diff Isn't this just one import line with commas? > WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:94 > + _log.debug("%s Stacktrace for %s:\n%s" % (name, test_name, error)) > + filename = os.path.join(options.results_directory, test_name) Seems you're fixing path handling in this change as well as process/thread devisions which is slightly confusing. > WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:160 > + self._driver.run_test(test_info.uri, test_info.timeout, > + test_info.image_checksum) Seems we're almost just passing test_info, maybe that's the eventual goal. > WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:172 > +class Worker(object): I'm assuming this object is in the parent process? We should definitely separate parent vs. child classes in separate files. > WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:182 > + self._container = container It's probably more accurately a test_queue or input_queue? > WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:186 > + self._name = 'worker-%d' % worker_number Seems name() is just a function which uses worker_number. > WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:216 > + if self._options.pixel_tests: > + png_path = os.path.join(self._options.results_directory, > + "png_result%s.png" % > + self._worker_number) > + test_args.png_path = png_path It's always struck me as strange that CrDRT uses this file to pass the png data back to the parent instead of the parent just telling it where to write the final png. But this is a long-standing design issue. I guess other DRTs pass the data over the pipe, which has its own quirks.
Dirk Pranke
Comment 10 2010-11-12 11:58:20 PST
(In reply to comment #9) > (From update of attachment 73722 [details]) > View in context: https://bugs.webkit.org/attachment.cgi?id=73722&action=review > > > WebKitTools/ChangeLog:10 > > + * Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py: > > So this isn't actually really a thread anymore? I assume we'll fix the naming later. > Yes (that was in the email). > > WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:53 > > +from webkitpy.layout_tests.test_types import test_type_base > > +from webkitpy.layout_tests.test_types import text_diff > > +from webkitpy.layout_tests.test_types import image_diff > > Isn't this just one import line with commas? > Could be. I usually import one package per line. > > WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:94 > > + _log.debug("%s Stacktrace for %s:\n%s" % (name, test_name, error)) > > + filename = os.path.join(options.results_directory, test_name) > > Seems you're fixing path handling in this change as well as process/thread devisions which is slightly confusing. > > > WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:160 > > + self._driver.run_test(test_info.uri, test_info.timeout, > > + test_info.image_checksum) > > Seems we're almost just passing test_info, maybe that's the eventual goal. > Yes, exactly. I told Ito-san that in a separate patch last night, and I think he might be making that change. > > WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:172 > > +class Worker(object): > > I'm assuming this object is in the parent process? We should definitely separate parent vs. child classes in separate files. > No. Worker objects are owned by the (perhaps not yet well named) WorkerThunk object in router.py. WorkerThunk is a base class subclassed by WorkerThread or WorkerProcess (also in router.py). But, yes, they're in separate files. > > WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:182 > > + self._container = container > > It's probably more accurately a test_queue or input_queue? > No, it's a container, in the JSEE sense, if that means anything to you. It's the WorkerThread/Process. > > WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:186 > > + self._name = 'worker-%d' % worker_number > > Seems name() is just a function which uses worker_number. > Sure. > > WebKitTools/Scripts/webkitpy/layout_tests/layout_package/dump_render_tree_thread.py:216 > > + if self._options.pixel_tests: > > + png_path = os.path.join(self._options.results_directory, > > + "png_result%s.png" % > > + self._worker_number) > > + test_args.png_path = png_path > > It's always struck me as strange that CrDRT uses this file to pass the png data back to the parent instead of the parent just telling it where to write the final png. But this is a long-standing design issue. I guess other DRTs pass the data over the pipe, which has its own quirks. Yes, I also want to change this so that DRT's abstraction is the one we use. This approach is lame because it makes us have to write the data we get from DRT into a file, which we then read back into memory so we can write it over a pipe to ImageDiff. It's design for Chromium's implementation, and we need to change it to the WebKit default. See that same patch that Ito-san is working on for reftests.
Dirk Pranke
Comment 11 2010-11-15 15:34:15 PST
Created attachment 73937 [details] change default # of child processes for test port back to 1, merge to ToT as of r72041
Dirk Pranke
Comment 12 2010-11-17 17:07:49 PST
Dirk Pranke
Comment 13 2010-11-18 14:49:43 PST
Dirk Pranke
Comment 14 2010-11-23 19:03:22 PST
Created attachment 74718 [details] sync to r72641 + patch to bug 49779
Dirk Pranke
Comment 15 2010-11-24 17:13:53 PST
Dirk Pranke
Comment 16 2010-12-01 20:02:54 PST
Created attachment 75348 [details] sync to r73080, clean up broker abstraction a bunch, clean up dump_render_tree_thread to track bug 50367
Dirk Pranke
Comment 17 2010-12-02 03:01:44 PST
Created attachment 75364 [details] Patch - merge to r73080 plus the chain of bugs from 50367 .. 50381
Dirk Pranke
Comment 18 2010-12-07 20:45:26 PST
Dirk Pranke
Comment 19 2010-12-07 20:46:53 PST
merged in latest patch changes from bugs 50557, 50375, and 50381, plus a few other minor changes/cleanup discovered in testing. Sync to ToT as of r73469.
Note You need to log in before you can comment on or make changes to this bug.