summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2011-05-08More renaming.Joshua Haberman
2011-05-08Documentation, some type renaming, nix unknown handler for now.Joshua Haberman
2011-05-08Split upb_stream -> upb_bytestream/upb_handlers.Joshua Haberman
2011-05-08Decoder redesign in preparation for packed fields and start/endseq.Joshua Haberman
2011-05-06Refactor varint encoding/decoding.Joshua Haberman
2011-04-25Revise/clarify comment about clear() implementation.Joshua Haberman
2011-04-15Calculate and print string sizes in test messages.Joshua Haberman
2011-04-15Merge branch 'master' of git@github.com:haberman/upbJoshua Haberman
2011-04-14Fix GDB JIT registration on Linux.Joshua Haberman
2011-04-08Small change to make Lua extension compile again.Joshua Haberman
2011-04-06JIT now works on OS X!Joshua Haberman
Had to fix the case where the jump table was allocated in a >4GB address.
2011-04-06Disable GDB JIT interface on OS X.Josh Haberman
OS X doesn't use ELF, so our little trick doesn't work there.
2011-04-05Update README and fix small decoder issue.Joshua Haberman
2011-04-04Speed up parsetostruct by using type-specialized callbacks.Joshua Haberman
2011-04-02JIT passes all tests!Joshua Haberman
2011-04-01Whoops, add src/jit_debug_elf_file.sJoshua 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-28Switch to non-branching varint decoder.Joshua Haberman
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-21Key dispatch table by (num x type), for modest perf improvement.Joshua Haberman
This allows us to remove one type check in the critical path.
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-27Use FDO for benchmarks, which gives a 10-15% improvement.Joshua Haberman
2011-02-27Default to -O3 if user doesn't specify opt.Joshua Haberman
However if the user *does* specify a -O flag, don't override the optimization setting for upb_def.o to -Os like we usually do.
2011-02-27Fix bug in perf-tests.sh (some shells didn't care?)Joshua Haberman
2011-02-27Don't require NASM to build unless using the x64 decoder.Joshua Haberman
2011-02-27Make proto2 benchmarks use ParsePartial, to make results vs upb more comparable.Joshua Haberman
ParsePartial does not check that required fields are set, which upb also currently does not do. This sped up proto2 reflection by 40%, but upb is still 7x faster in a comparable test (instead of 11x, like before).
2011-02-25Added escaping for text output.Joshua Haberman
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-23Rearrange structs to put arrays at the end, for smaller offsets.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-20Split varint decoders into separate .h file.Joshua Haberman
This makes it easier to benchmark and test the multiple possible implementations of varint decoding.
2011-02-19Fix building of Lua extension on OS X.Joshua Haberman
2011-02-18Bring lua extension up to date with new symtab APIs.Joshua Haberman
2011-02-18Change the API for getting the bootstrapped defs.Joshua Haberman
The symtab that contains them is now hidden, and you can look them up by name but there is no access to the symtab itself, so there is no risk of mutating it (by extending it, adding other defs to it, etc).
2011-02-18Fix efficiency bug for major (50% performance improvement!Joshua Haberman
There was a bug with string referencing that prevented strings from being recycled as often as they ought to be.
2011-02-17Return updated buf as second return value, to free up a reg.Joshua Haberman
2011-02-17First version of an assembly language decoder.Joshua Haberman
It is slower than the C decoder for now because it falls off the fast path too often. But it can successfully decode varints, fixed32 and fixed64.
2011-02-17Split inttable into a hash part and an array part.Joshua Haberman
upb_inttable() now supports a "compact" operation that will decide on an array size and put all entries with small enough keys into the array part for faster lookup. Also exposed the upb_itof_ent structure and put a few useful values there, so they are one fewer pointer chase away.
2011-02-17Track buffer end instead of buffer length, for a small perf improvement.Joshua Haberman
2011-02-15Remove upb_dstate and specialize upb_decode_fixed for perf improvement.Joshua Haberman
The compiler wasn't keeping upb_dstate in memory anyway (which was the original goal). This simplifies the decoder. upb_decode_fixed was intended to minimize the number of branches, but since it was calling out to memcpy as a function, this turned out to be a pessimization. Performance is encouraging: plain32.parsestream_googlemessage1.upb_table: 254 -> 242 (-4.72) plain32.parsestream_googlemessage2.upb_table: 357 -> 400 (12.04) plain32.parsetostruct_googlemessage1.upb_table_byref: 143 -> 144 (0.70) plain32.parsetostruct_googlemessage1.upb_table_byval: 122 -> 118 (-3.28) plain32.parsetostruct_googlemessage2.upb_table_byref: 189 -> 200 (5.82) plain32.parsetostruct_googlemessage2.upb_table_byval: 198 -> 200 (1.01) omitfp32.parsestream_googlemessage1.upb_table: 267 -> 265 (-0.75) omitfp32.parsestream_googlemessage2.upb_table: 377 -> 465 (23.34) omitfp32.parsetostruct_googlemessage1.upb_table_byref: 140 -> 151 (7.86) omitfp32.parsetostruct_googlemessage1.upb_table_byval: 131 -> 131 (0.00) omitfp32.parsetostruct_googlemessage2.upb_table_byref: 204 -> 214 (4.90) omitfp32.parsetostruct_googlemessage2.upb_table_byval: 200 -> 206 (3.00) plain.parsestream_googlemessage1.upb_table: 313 -> 317 (1.28) plain.parsestream_googlemessage2.upb_table: 476 -> 541 (13.66) plain.parsetostruct_googlemessage1.upb_table_byref: 189 -> 189 (0.00) plain.parsetostruct_googlemessage1.upb_table_byval: 165 -> 165 (0.00) plain.parsetostruct_googlemessage2.upb_table_byref: 263 -> 270 (2.66) plain.parsetostruct_googlemessage2.upb_table_byval: 248 -> 255 (2.82) omitfp.parsestream_googlemessage1.upb_table: 306 -> 305 (-0.33) omitfp.parsestream_googlemessage2.upb_table: 471 -> 531 (12.74) omitfp.parsetostruct_googlemessage1.upb_table_byref: 189 -> 190 (0.53) omitfp.parsetostruct_googlemessage1.upb_table_byval: 166 -> 172 (3.61) omitfp.parsetostruct_googlemessage2.upb_table_byref: 258 -> 270 (4.65) omitfp.parsetostruct_googlemessage2.upb_table_byval: 248 -> 265 (6.85)
2011-02-15Fix small problem in Makefile.Joshua Haberman
2011-02-15Whoops, fix small bug in Makefile.Joshua Haberman
2011-02-15Make -DUPB_THREAD_UNSAFE the default for now.Joshua Haberman
2011-02-15Support "make Q=" to view full commands.Joshua Haberman
2011-02-15Fixes for building Lua extension.Joshua Haberman
2011-02-14Revive Lua extension.Joshua Haberman
It builds and you can inspect a symtab. Still need to expose streaming and message based interfaces.
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback