summaryrefslogtreecommitdiff
path: root/benchmarks/parsetostruct.upb_table.c
diff options
context:
space:
mode:
authorJoshua Haberman <joshua@reverberate.org>2009-08-04 19:46:42 -0700
committerJoshua Haberman <joshua@reverberate.org>2009-08-04 19:46:42 -0700
commit84cd1538ee20b934c6892f38578a08106a934fe8 (patch)
treeecfc5baa4d47a276bf1509243778ae7940e08e83 /benchmarks/parsetostruct.upb_table.c
parent2aaea5390a841e2682a318746e90aebbe8a955b9 (diff)
Integrated benchmarks into main Makefile.
Diffstat (limited to 'benchmarks/parsetostruct.upb_table.c')
-rw-r--r--benchmarks/parsetostruct.upb_table.c67
1 files changed, 67 insertions, 0 deletions
diff --git a/benchmarks/parsetostruct.upb_table.c b/benchmarks/parsetostruct.upb_table.c
new file mode 100644
index 0000000..f93a6a7
--- /dev/null
+++ b/benchmarks/parsetostruct.upb_table.c
@@ -0,0 +1,67 @@
+
+#include "main.c"
+
+#include "upb_context.h"
+#include "upb_msg.h"
+
+static struct upb_context c;
+static struct upb_string str;
+static struct upb_msg_parse_state s;
+static struct upb_msg *m;
+static void *data;
+
+static bool initialize()
+{
+ /* Initialize upb state, parse descriptor. */
+ upb_context_init(&c);
+ struct upb_string fds;
+ if(!upb_strreadfile(MESSAGE_DESCRIPTOR_FILE, &fds)) {
+ fprintf(stderr, "Couldn't read " MESSAGE_DESCRIPTOR_FILE ".\n");
+ return false;
+ }
+ if(!upb_context_parsefds(&c, &fds)) {
+ fprintf(stderr, "Error importing " MESSAGE_DESCRIPTOR_FILE ".\n");
+ return false;
+ }
+ upb_strfree(fds);
+
+ char class_name[] = MESSAGE_NAME;
+ struct upb_string proto_name;
+ proto_name.ptr = class_name;
+ proto_name.byte_len = sizeof(class_name)-1;
+ struct upb_symtab_entry *e = upb_context_lookup(&c, &proto_name);
+ if(!e || e->type != UPB_SYM_MESSAGE) {
+ fprintf(stderr, "Error finding symbol '" UPB_STRFMT "'.\n",
+ UPB_STRARG(proto_name));
+ return false;
+ }
+
+ m = e->ref.msg;
+ data = upb_msgdata_new(m);
+ upb_msg_parse_init(&s, data, m, false, true);
+
+ /* Read the message data itself. */
+ if(!upb_strreadfile(MESSAGE_FILE, &str)) {
+ fprintf(stderr, "Error reading " MESSAGE_FILE "\n");
+ return false;
+ }
+ return true;
+}
+
+static void cleanup()
+{
+ upb_strfree(str);
+ upb_context_free(&c);
+}
+
+static size_t run()
+{
+ size_t read;
+ upb_msg_parse_reset(&s, data, m, false, BYREF);
+ upb_status_t status = upb_msg_parse(&s, str.ptr, str.byte_len, &read);
+ if(status != UPB_STATUS_OK && read != str.byte_len) {
+ fprintf(stderr, "Error. :( error=%d, read=%lu\n", status, read);
+ return 0;
+ }
+ return read;
+}
generated by cgit on debian on lair
contact matthew@masot.net with questions or feedback