summaryrefslogtreecommitdiff
path: root/src/upb_msg.c
AgeCommit message (Collapse)Author
2011-07-15Directory restructure.Joshua Haberman
Includes are now via upb/foo.h. Files specific to the protobuf format are now in upb/pb (the core library is concerned with message definitions, handlers, and byte streams, but knows nothing about any particular serializationf format).
2011-07-14Major refactoring: upb_string is gone in favor of upb_strref.Joshua Haberman
2011-06-17Major refactoring: abandon upb_msg, add upb_accessors.Joshua Haberman
Next on the chopping block is upb_string.
2011-05-21Make all handlers objects refcounted.Joshua Haberman
I'm realizing that basically all upb objects will need to be refcounted to be sharable across languages, but *not* messages which are on their way out so we can get out of the business of data representations. Things which must be refcounted: - encoders, decoders - handlers objects - defs
2011-05-20Add startseq/endseq handlers.Joshua Haberman
Startseq/endseq handlers are called at the beginning and end of a sequence of repeated values. Protobuf does not really have direct support for this (repeated primitive fields do not delimit "begin" and "end" of the sequence) but we can infer them from the bytestream. The benefit of supporting them explicitly is that they get their own stack frame and closure, so we can avoid having to find the array's address over and over and deciding if we need to initialize it. This will also pave the way for better support of JSON, which does have explicit "startseq/endseq" markers: [].
2011-05-19Change dispatcher error handling model.Joshua Haberman
Now the dispatcher will call error handlers instaed of returning statuses that the caller has to constantly check.
2011-05-10Vastly improved/simplified the upb_handlers API.Joshua Haberman
2011-05-08Documentation, some type renaming, nix unknown handler for now.Joshua Haberman
2011-05-08Decoder redesign in preparation for packed fields and start/endseq.Joshua Haberman
2011-04-04Speed up parsetostruct by using type-specialized callbacks.Joshua Haberman
2011-04-02JIT passes all tests!Joshua Haberman
2011-04-01First rough version of the JIT.Joshua Haberman
It can successfully parse SpeedMessage1. Preliminary results: 750MB/s on Core2 2.4GHz. This number is 2.5x proto2. This isn't apples-to-apples, because proto2 is parsing to a struct and we are just doing stream parsing, but for apps that are currently using proto2, this is the improvement they would see if they could move to stream-based processing. Unfortunately perf-regression-test.py is broken, and I'm not 100% sure why. It would be nice to fix it first (to ensure that there are no performance regressions for the table-based decoder) but I'm really impatient to get the JIT checked in.
2011-03-26Small semantics changes in the decoder.Josh Haberman
Simplified some of the semantics around the decoder's data structures, in anticipation of sharing them between the regular C decoder and a JIT-ted decoder.
2011-03-20Update copyright to be Google Inc.Josh Haberman
This doesn't reflect any material change in how I will be working on upb, and I have no problem making this change. It's still open source under the BSD license, and I'll still be working on it well beyond the hours that constitute a normal job.
2011-03-20upb_stream: all callbacks registered ahead-of-time.Josh Haberman
This is a significant change to the upb_stream protocol, and should hopefully be the last significant change. All callbacks are now registered ahead-of-time instead of having delegated callbacks registered at runtime, which makes it much easier to aggressively optimize ahead-of-time (like with a JIT). Other impacts of this change: - You no longer need to have loaded descriptor.proto as a upb_def to load other descriptors! This means the special-case code we used for bootstrapping is no longer necessary, and we no longer need to link the descriptor for descriptor.proto into upb. - A client can now register any upb_value as what will be delivered to their value callback, not just a upb_fielddef*. This should allow for other clients to get more bang out of the streaming decoder. This change unfortunately causes a bit of a performance regression -- I think largely due to highly suboptimal code that GCC generates when structs are returned by value. See: http://blog.reverberate.org/2011/03/19/when-a-compilers-slow-code-actually-bites-you/ On the other hand, once we have a JIT this should no longer matter. Performance numbers: plain.parsestream_googlemessage1.upb_table: 374 -> 396 (5.88) plain.parsestream_googlemessage2.upb_table: 616 -> 449 (-27.11) plain.parsetostruct_googlemessage1.upb_table_byref: 268 -> 269 (0.37) plain.parsetostruct_googlemessage1.upb_table_byval: 215 -> 204 (-5.12) plain.parsetostruct_googlemessage2.upb_table_byref: 307 -> 281 (-8.47) plain.parsetostruct_googlemessage2.upb_table_byval: 297 -> 272 (-8.42) omitfp.parsestream_googlemessage1.upb_table: 423 -> 410 (-3.07) omitfp.parsestream_googlemessage2.upb_table: 679 -> 483 (-28.87) omitfp.parsetostruct_googlemessage1.upb_table_byref: 287 -> 282 (-1.74) omitfp.parsetostruct_googlemessage1.upb_table_byval: 226 -> 219 (-3.10) omitfp.parsetostruct_googlemessage2.upb_table_byref: 315 -> 298 (-5.40) omitfp.parsetostruct_googlemessage2.upb_table_byval: 297 -> 287 (-3.37)
2011-02-25Implemented upb_stringsink, upb_msgtotext, and exposed the latter to Lua.Joshua Haberman
2011-02-24Pass the upb_fielddef* to the endmsg callback.Joshua Haberman
2011-02-23Added proper support for enum default values.Joshua Haberman
2011-02-22Prevent the default message from getting mutated.Joshua Haberman
If a Lua program references the default message, it will be copied into a mutable object.
2011-02-22Major work on Lua extension and default values.Joshua Haberman
Default values are now supported, and the Lua extension can now create and modify individual protobuf objects.
2011-02-13Merged core/ and stream/ -> src/. The split wasn't worth it.Joshua Haberman
2009-12-21In the midst of a major refactoring.Joshua Haberman
2009-12-05Scheme for collecting circular refs.Joshua Haberman
"make descriptorgen" is now valgrind-clean again.
2009-12-05Make defs refcounted, rename upb_context->upbsymtab.Joshua Haberman
There is currently a memory leak when type definitions form cycles. This will need to be dealt with.
2009-11-28Overhaul defs to derive from a common base.Joshua Haberman
2009-11-26Make upb_msgdef own all its data.Joshua Haberman
This is in anticipation of making upb_msgdef's easy to dup. This involved removing all traces of any descriptors from the defs.
2009-11-14Changed parse API to know about msgdefs.Joshua Haberman
This should make it both easier to use and easier to optimize, in exchange for a small amount of generality. In practice, any remotely normal case is still very natural.
2009-11-14Renamed upb_msg_fielddef -> upb_fielddef, upb_enum -> upb_enumdef.Joshua Haberman
2009-11-14Refactoring: split defs into their own file, move private parsing funcs out ↵Joshua Haberman
of .h file.
2009-09-26Use a status object for errors so a message can be returned.Joshua Haberman
Also delay deletion of subfields until the entire message is deleted.
2009-08-31Change upb_msg to work with messages that have 0 fields.Joshua Haberman
2009-08-30Properly free dynamic memory that has not been reused during parsing.Joshua Haberman
2009-08-28Incremental improvements to cbparser, and a test.Joshua Haberman
2009-08-27Renamed upb_stream_parser -> upb_cbparser, and API cleanup.Joshua Haberman
2009-08-27Some cleanup and reformatting, fixed the benchmarks.Joshua Haberman
2009-08-24Significant memory-management refactoring any Python extension.Joshua Haberman
2009-08-16Various fixes.Joshua Haberman
2009-08-15Add refcounting and thread-safety to message definitions.Joshua Haberman
2009-08-12Refactoring: unify upb_msg.Joshua Haberman
The cost is that a upb_msg will now always have an overhead of 2*sizeof(void*). This is comparable to proto2 overhead. The benefit is that upb_msg is now self-describing, and read-only algorithms can now operate on a upb_msg regardless of the memory-management scheme. Also, upb_array and upb_string now know inherently if they own their associated memory, and upb_array has a generic pointer for memory management purposes like upb_msg does.
2009-08-07Fixed memory leaks in upbc.Joshua Haberman
2009-08-07Major refactoring of upb_msg. Temporary functionality regression.Joshua Haberman
There is significant refactoring here, as well as some more trivial name changes. upb_msg has become upb_msgdef, to reflect the fact that a upb_msg is not *itself* a message, it describes a message. There are other renamings, such as upb_parse_state -> upb_stream_parser. More significantly, the upb_msg class and parser have been refactored to reflect my recent realization about how memory management should work. upb_msg now has no memory management, and a memory mangement scheme (that works beautifully with multiple language runtimes) will be layered on top of it. This iteration has the new, read-only upb_msg. upb_mm_msg (a memory-managed message class) will come in the next change.
2009-08-04Fix a few small compile warnings.Joshua Haberman
2009-08-01Sketches of serialization.Joshua Haberman
2009-08-01Added calculation of sizes for serialization (untested).Joshua Haberman
2009-07-29Updated parser semantics to better support streaming.Joshua Haberman
2009-07-25Move parsing functions to header file in anticipation of code generation ↵Joshua Haberman
(want them inlined).
2009-07-23Re-enable checks for set_flags now that upbc emits them.Joshua Haberman
2009-07-23upb is fully self-hosting (except for text->descriptor)!Joshua Haberman
2009-07-22Compiler finally works (except string arrays). Untested. Holy crap that ↵Joshua Haberman
was a lot of work.
2009-07-21Properly initialize the fqname member of upb_msg.Joshua Haberman
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback