Closed Bug 1400466 Opened 8 years ago Closed 8 years ago

Save/load structured clone data from JS shell

Categories

(Core :: JavaScript Engine, enhancement, P3)

enhancement

Tracking

()

RESOLVED FIXED
mozilla57
Tracking Status
firefox57 --- fixed

People

(Reporter: sfink, Assigned: sfink)

References

(Blocks 1 open bug)

Details

Attachments

(2 files)

In the hazard analysis, I have some intermediate text files that take quite a while to load, which really slows down the run-test-debug cycle. I tried reading/writing the data as JSON instead of parsing text files, but it really wasn't any faster. So I attempted to use structured cloning, but the current shell API is string-based, which turns out to not work well at all because the data gets mangled by being encoded on the input side, or truncated because it is passed to a C-style write function on the output side.
So I hacked the existing relevant routines to be able to do this, albeit clumsily. With this patch, you can do data = os.file.readFile("...", "binary"); s = serialize(); // hack to get a clonebuffer s.clonebuffer = data.buffer; copy = deserialize(s); I admit it would make more sense to add a more straightforward API, but the existing API is just wrong (mixing up string data and binary data). I can file a followup to make a cleaner API in addition. Maybe removing the string-based stuff too.
Attachment #8908924 - Flags: review?(jcoppeard)
Debugging utility that makes use of the structured cloning functionality. I'm still using text files for the "real" executions; once this properly lands, I'll probably switch over.
Attachment #8908925 - Flags: review?(jcoppeard)
Priority: -- → P3
Comment on attachment 8908924 [details] [diff] [review] Implement minimum necessary to allow saving and loading structured clone data Review of attachment 8908924 [details] [diff] [review]: ----------------------------------------------------------------- This seems fine. Please do file for cleanup/removing the string based API. ::: js/src/builtin/TestingFunctions.cpp @@ +2422,5 @@ > > Rooted<CloneBufferObject*> obj(cx, &args.thisv().toObject().as<CloneBufferObject>()); > + > + uint8_t* data = nullptr; > + auto freeData = mozilla::MakeScopeExit([&] { JS_free(cx, data); }); You can probably use UniquePtr for this.
Attachment #8908924 - Flags: review?(jcoppeard) → review+
Comment on attachment 8908925 [details] [diff] [review] Cache the information loaded from src_comp.xdb into a structured clone buffer Review of attachment 8908925 [details] [diff] [review]: ----------------------------------------------------------------- ::: js/src/devtools/rootAnalysis/callgraph.js @@ +216,5 @@ > xdb.free_string(data); > } > } > + > +function loadTypesWithCache(type_xdb_filename, json_cache) { This shouldn't be called json_cache if it doesn't contain JSON data.
Attachment #8908925 - Flags: review?(jcoppeard) → review+
Blocks: 1400970
(In reply to Jon Coppeard (:jonco) from comment #3) > Comment on attachment 8908924 [details] [diff] [review] > Implement minimum necessary to allow saving and loading structured clone data > > Review of attachment 8908924 [details] [diff] [review]: > ----------------------------------------------------------------- > > This seems fine. Please do file for cleanup/removing the string based API. Bug 1400970 > ::: js/src/builtin/TestingFunctions.cpp > @@ +2422,5 @@ > > > > Rooted<CloneBufferObject*> obj(cx, &args.thisv().toObject().as<CloneBufferObject>()); > > + > > + uint8_t* data = nullptr; > > + auto freeData = mozilla::MakeScopeExit([&] { JS_free(cx, data); }); > > You can probably use UniquePtr for this. Oh, duh. Good point. > ::: js/src/devtools/rootAnalysis/callgraph.js > > + > > +function loadTypesWithCache(type_xdb_filename, json_cache) { > > This shouldn't be called json_cache if it doesn't contain JSON data. Heh. Yeah, I told myself to remember to change this name when I made the switch, but I never went back and did it.
Pushed by sfink@mozilla.com: https://hg.mozilla.org/integration/mozilla-inbound/rev/383a2f567ceb Implement minimum necessary to allow saving and loading structured clone data, r=jonco https://hg.mozilla.org/integration/mozilla-inbound/rev/18af2ea42a1e Cache the information loaded from src_comp.xdb into a structured clone buffer, r=jonco
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: