From 0313826cef64ca89058f32e3c8a2868e8f9e98df Mon Sep 17 00:00:00 2001 From: Joshua Haberman Date: Sun, 6 Feb 2011 12:42:35 -0800 Subject: Benchmarks compile and run again! --- benchmarks/parsestream.upb_table.c | 68 +++++++++++--------------------------- 1 file changed, 20 insertions(+), 48 deletions(-) (limited to 'benchmarks') diff --git a/benchmarks/parsestream.upb_table.c b/benchmarks/parsestream.upb_table.c index 16979b0..a646999 100644 --- a/benchmarks/parsestream.upb_table.c +++ b/benchmarks/parsestream.upb_table.c @@ -4,12 +4,13 @@ #include "upb_def.h" #include "upb_decoder.h" #include "upb_strstream.h" +#include "upb_glue.h" -static upb_stringsrc *stringsrc; static upb_string *input_str; -static upb_string *tmp_str; static upb_msgdef *def; -static upb_decoder *decoder; +static upb_decoder decoder; +static upb_stringsrc stringsrc; +upb_handlers handlers; static bool initialize() { @@ -29,13 +30,8 @@ static bool initialize() upb_printerr(&status); return false; } - - upb_stringsrc *ssrc = upb_stringsrc_new(); - upb_stringsrc_reset(ssrc, fds_str); - upb_decoder *d = upb_decoder_new(upb_downcast_msgdef(fds_def)); - upb_decoder_reset(d, upb_stringsrc_bytesrc(ssrc)); - - upb_symtab_addfds(s, upb_decoder_src(d), &status); + upb_parsedesc(s, fds_str, &status); + upb_string_unref(fds_str); if(!upb_ok(&status)) { fprintf(stderr, "Error importing " MESSAGE_DESCRIPTOR_FILE ":"); @@ -43,12 +39,7 @@ static bool initialize() return false; } - upb_string_unref(fds_str); - upb_decoder_free(d); - upb_stringsrc_free(ssrc); - upb_def_unref(fds_def); - - def = upb_downcast_msgdef(upb_symtab_lookup(s, UPB_STRLIT(MESSAGE_NAME))); + def = upb_dyncast_msgdef(upb_symtab_lookup(s, UPB_STRLIT(MESSAGE_NAME))); if(!def) { fprintf(stderr, "Error finding symbol '" UPB_STRFMT "'.\n", UPB_STRARG(UPB_STRLIT(MESSAGE_NAME))); @@ -62,55 +53,36 @@ static bool initialize() fprintf(stderr, "Error reading " MESSAGE_FILE "\n"); return false; } - tmp_str = NULL; - decoder = upb_decoder_new(def); - stringsrc = upb_stringsrc_new(); + upb_decoder_init(&decoder, def); + upb_stringsrc_init(&stringsrc); + upb_handlers_init(&handlers); + static upb_handlerset handlerset = {}; // Empty handlers. + upb_register_handlerset(&handlers, &handlerset); return true; } static void cleanup() { upb_string_unref(input_str); - upb_string_unref(tmp_str); upb_def_unref(UPB_UPCAST(def)); - upb_decoder_free(decoder); - upb_stringsrc_free(stringsrc); + upb_decoder_uninit(&decoder); + upb_stringsrc_uninit(&stringsrc); } static size_t run(int i) { (void)i; upb_status status = UPB_STATUS_INIT; - upb_stringsrc_reset(stringsrc, input_str); - upb_decoder_reset(decoder, upb_stringsrc_bytesrc(stringsrc)); - upb_src *src = upb_decoder_src(decoder); - upb_fielddef *f; - int depth = 0; - while(1) { - while(!upb_src_eof(src) && (f = upb_src_getdef(src)) != NULL) { - if(upb_issubmsg(f)) { - upb_src_startmsg(src); - ++depth; - } else if(upb_isstring(f)) { - tmp_str = upb_string_tryrecycle(tmp_str); - upb_src_getstr(src, tmp_str); - } else { - // Primitive type. - upb_value val; - upb_src_getval(src, upb_value_addrof(&val)); - } - } - // If we're not EOF now, the loop terminated due to an error. - if (!upb_src_eof(src)) goto err; - if (depth == 0) break; - --depth; - upb_src_endmsg(src); - } + upb_stringsrc_reset(&stringsrc, input_str); + upb_decoder_reset(&decoder, upb_stringsrc_bytesrc(&stringsrc)); + upb_src *src = upb_decoder_src(&decoder); + upb_src_sethandlers(src, &handlers); + upb_src_run(src, &status); if(!upb_ok(&status)) goto err; return upb_string_len(input_str); err: - fprintf(stderr, "Decode error"); + fprintf(stderr, "Decode error: "); upb_printerr(&status); return 0; } -- cgit v1.2.3