From a837570d02dca2ad94ff5046b13592d84a12a345 Mon Sep 17 00:00:00 2001 From: Hadriel Kaplan Date: Fri, 6 Feb 2015 13:52:37 -0500 Subject: Combine SSE and pre-compiled patterns for faster pbrk This combines the SSE4.2 instructions usage, with pre-compiled pattern searching usage, for a faster pbrk search method. Testing against large files of HTTP and SIP, there is about a 5% performance improvement by using pre-"compiled" patterns for guint8_pbrk() instead of passing it the search string and having it build the match array every time. Similar to regular expressions, "compiling" the pattern match array in advance only once and using the "compiled" patterns for the searches is faster than compiling it every time. Change-Id: Ifcbc14a6c93f32d15663a10d974bacdca5119a8e Ping-Bug: 10798 Reviewed-on: https://code.wireshark.org/review/6990 Petri-Dish: Hadriel Kaplan Tested-by: Petri Dish Buildbot Reviewed-by: Anders Broman --- epan/dissectors/packet-cups.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'epan/dissectors/packet-cups.c') diff --git a/epan/dissectors/packet-cups.c b/epan/dissectors/packet-cups.c index 1414548fbf..255bf970c5 100644 --- a/epan/dissectors/packet-cups.c +++ b/epan/dissectors/packet-cups.c @@ -103,6 +103,9 @@ static int hf_cups_make_model = -1; static gint ett_cups = -1; static gint ett_cups_ptype = -1; +/* patterns used for tvb_pbrk_pattern_guint8 */ +static tvb_pbrk_pattern pbrk_whitespace = INIT_PBRK_PATTERN; + /* This protocol is heavily related to IPP, but it is CUPS-specific and non-standard. */ #define UDP_PORT_CUPS 631 @@ -286,7 +289,7 @@ get_unquoted_string(tvbuff_t *tvb, gint offset, gint *next_offset, guint *len) guint l = 0; gint o; - o = tvb_pbrk_guint8(tvb, offset, -1, " \t\r\n", NULL); + o = tvb_pbrk_pattern_guint8(tvb, offset, -1, &pbrk_whitespace, NULL); if (o != -1) { l = o - offset; s = tvb_get_string_enc(wmem_packet_scope(), tvb, offset, l, ENC_ASCII); @@ -389,6 +392,9 @@ proto_register_cups(void) "CUPS", "cups"); proto_register_field_array(proto_cups, hf, array_length(hf)); proto_register_subtree_array(ett, array_length(ett)); + + /* compile patterns */ + tvb_pbrk_compile(&pbrk_whitespace, " \t\r\n"); } void -- cgit v1.2.3