diff options
author | Joshua Haberman <jhaberman@gmail.com> | 2012-03-24 11:24:16 -0700 |
---|---|---|
committer | Joshua Haberman <jhaberman@gmail.com> | 2012-03-24 11:24:16 -0700 |
commit | 86bad61b76a260ffc442acffbe58feee67df45e5 (patch) | |
tree | e375e62ff6d7fea9fb810830e66118e67b4ec2c8 /benchmarks/parsetostruct.upb.c | |
parent | db59a5198f890ecdcac1227b0bb998160acac5c6 (diff) |
Sync from internal Google development.
Many improvements, too many to mention. One significant
perf regression warrants investigation:
omitfp.parsetoproto2_googlemessage1.upb_jit: 343 -> 252 (-26.53)
plain.parsetoproto2_googlemessage1.upb_jit: 334 -> 251 (-24.85)
25% regression for this benchmark is bad, but since I don't think
there's any fundamental design issue that caused it I'm going to
go ahead with the commit anyway. Can investigate and fix later.
Other benchmarks were neutral or showed slight improvement.
Diffstat (limited to 'benchmarks/parsetostruct.upb.c')
-rw-r--r-- | benchmarks/parsetostruct.upb.c | 85 |
1 files changed, 0 insertions, 85 deletions
diff --git a/benchmarks/parsetostruct.upb.c b/benchmarks/parsetostruct.upb.c deleted file mode 100644 index 9487577..0000000 --- a/benchmarks/parsetostruct.upb.c +++ /dev/null @@ -1,85 +0,0 @@ - -#include "main.c" - -#include "upb/bytestream.h" -#include "upb/def.h" -#include "upb/msg.h" -#include "upb/pb/decoder.h" -#include "upb/pb/glue.h" - -static const upb_msgdef *def; -static size_t len; -static void *msg[NUM_MESSAGES]; -static upb_stringsrc strsrc; -static upb_decoder d; -static upb_decoderplan *p; -char *str; - -static bool initialize() -{ - // Initialize upb state, decode descriptor. - upb_status status = UPB_STATUS_INIT; - upb_symtab *s = upb_symtab_new(); - upb_load_descriptor_file_into_symtab(s, MESSAGE_DESCRIPTOR_FILE, &status); - if(!upb_ok(&status)) { - fprintf(stderr, "Error reading descriptor: %s\n", - upb_status_getstr(&status)); - return false; - } - - def = upb_dyncast_msgdef_const(upb_symtab_lookup(s, MESSAGE_NAME)); - if(!def) { - fprintf(stderr, "Error finding symbol '%s'.\n", MESSAGE_NAME); - return false; - } - upb_symtab_unref(s); - - // Read the message data itself. - str = upb_readfile(MESSAGE_FILE, &len); - if(str == NULL) { - fprintf(stderr, "Error reading " MESSAGE_FILE "\n"); - return false; - } - upb_status_uninit(&status); - for (int i = 0; i < NUM_MESSAGES; i++) - msg[i] = upb_stdmsg_new(def); - - upb_stringsrc_init(&strsrc); - upb_handlers *h = upb_handlers_new(); - upb_accessors_reghandlers(h, def); - p = upb_decoderplan_new(h, JIT); - upb_decoder_init(&d); - upb_handlers_unref(h); - upb_decoder_resetplan(&d, p, 0); - - if (!BYREF) { - // TODO: use byref/byval accessors. - } - return true; -} - -static void cleanup() -{ - for (int i = 0; i < NUM_MESSAGES; i++) - upb_stdmsg_free(msg[i], def); - upb_def_unref(UPB_UPCAST(def)); - upb_stringsrc_uninit(&strsrc); - upb_decoder_uninit(&d); - upb_decoderplan_unref(p); - free(str); -} - -static size_t run(int i) -{ - upb_status status = UPB_STATUS_INIT; - i %= NUM_MESSAGES; - upb_msg_clear(msg[i], def); - upb_stringsrc_reset(&strsrc, str, len); - upb_decoder_resetinput(&d, upb_stringsrc_allbytes(&strsrc), msg[i]); - if (upb_decoder_decode(&d) != UPB_OK) goto err; - return len; - -err: - fprintf(stderr, "Decode error: %s", upb_status_getstr(&status)); - return 0; -} |