bloaty/third_party/re2/re2/testing/regexp_benchmark.cc
Go to the documentation of this file.
1 // Copyright 2006-2008 The RE2 Authors. All Rights Reserved.
2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file.
4 
5 // Benchmarks for regular expression implementations.
6 
7 #include <stdint.h>
8 #include <stdio.h>
9 #include <stdlib.h>
10 #include <string>
11 #include <utility>
12 
13 #include "util/test.h"
14 #include "util/logging.h"
15 #include "util/strutil.h"
16 #include "re2/prog.h"
17 #include "re2/re2.h"
18 #include "re2/regexp.h"
19 #include "util/pcre.h"
20 #include "util/benchmark.h"
21 
22 namespace re2 {
23 void Test();
24 void MemoryUsage();
25 } // namespace re2
26 
28 
29 namespace re2 {
30 
31 void Test() {
32  Regexp* re = Regexp::Parse("(\\d+)-(\\d+)-(\\d+)", Regexp::LikePerl, NULL);
33  CHECK(re);
34  Prog* prog = re->CompileToProg(0);
35  CHECK(prog);
36  CHECK(prog->IsOnePass());
37  CHECK(prog->CanBitState());
38  const char* text = "650-253-0001";
39  StringPiece sp[4];
40  CHECK(prog->SearchOnePass(text, text, Prog::kAnchored, Prog::kFullMatch, sp, 4));
41  CHECK_EQ(sp[0], "650-253-0001");
42  CHECK_EQ(sp[1], "650");
43  CHECK_EQ(sp[2], "253");
44  CHECK_EQ(sp[3], "0001");
45  delete prog;
46  re->Decref();
47  LOG(INFO) << "test passed\n";
48 }
49 
50 void MemoryUsage() {
51  const char* regexp = "(\\d+)-(\\d+)-(\\d+)";
52  const char* text = "650-253-0001";
53  {
55  Regexp* re = Regexp::Parse(regexp, Regexp::LikePerl, NULL);
56  CHECK(re);
57  // Can't pass mc.HeapGrowth() and mc.PeakHeapGrowth() to LOG(INFO) directly,
58  // because LOG(INFO) might do a big allocation before they get evaluated.
59  fprintf(stderr, "Regexp: %7lld bytes (peak=%lld)\n", mc.HeapGrowth(), mc.PeakHeapGrowth());
60  mc.Reset();
61 
62  Prog* prog = re->CompileToProg(0);
63  CHECK(prog);
64  CHECK(prog->IsOnePass());
65  CHECK(prog->CanBitState());
66  fprintf(stderr, "Prog: %7lld bytes (peak=%lld)\n", mc.HeapGrowth(), mc.PeakHeapGrowth());
67  mc.Reset();
68 
69  StringPiece sp[4];
70  CHECK(prog->SearchOnePass(text, text, Prog::kAnchored, Prog::kFullMatch, sp, 4));
71  fprintf(stderr, "Search: %7lld bytes (peak=%lld)\n", mc.HeapGrowth(), mc.PeakHeapGrowth());
72  delete prog;
73  re->Decref();
74  }
75 
76  {
78 
79  PCRE re(regexp, PCRE::UTF8);
80  fprintf(stderr, "RE: %7lld bytes (peak=%lld)\n", mc.HeapGrowth(), mc.PeakHeapGrowth());
81  PCRE::FullMatch(text, re);
82  fprintf(stderr, "RE: %7lld bytes (peak=%lld)\n", mc.HeapGrowth(), mc.PeakHeapGrowth());
83  }
84 
85  {
87 
88  PCRE* re = new PCRE(regexp, PCRE::UTF8);
89  fprintf(stderr, "PCRE*: %7lld bytes (peak=%lld)\n", mc.HeapGrowth(), mc.PeakHeapGrowth());
90  PCRE::FullMatch(text, *re);
91  fprintf(stderr, "PCRE*: %7lld bytes (peak=%lld)\n", mc.HeapGrowth(), mc.PeakHeapGrowth());
92  delete re;
93  }
94 
95  {
97 
98  RE2 re(regexp);
99  fprintf(stderr, "RE2: %7lld bytes (peak=%lld)\n", mc.HeapGrowth(), mc.PeakHeapGrowth());
100  RE2::FullMatch(text, re);
101  fprintf(stderr, "RE2: %7lld bytes (peak=%lld)\n", mc.HeapGrowth(), mc.PeakHeapGrowth());
102  }
103 
104  fprintf(stderr, "sizeof: PCRE=%zd RE2=%zd Prog=%zd Inst=%zd\n",
105  sizeof(PCRE), sizeof(RE2), sizeof(Prog), sizeof(Prog::Inst));
106 }
107 
108 // Regular expression implementation wrappers.
109 // Defined at bottom of file, but they are repetitive
110 // and not interesting.
111 
112 typedef void SearchImpl(int iters, const char* regexp, const StringPiece& text,
113  Prog::Anchor anchor, bool expect_match);
114 
119 
120 typedef void ParseImpl(int iters, const char* regexp, const StringPiece& text);
121 
128 
135 
137 
139 
140 // Benchmark: failed search for regexp in random text.
141 
142 // Generate random text that won't contain the search string,
143 // to test worst-case search behavior.
144 void MakeText(std::string* text, int nbytes) {
145  srand(1);
146  text->resize(nbytes);
147  for (int i = 0; i < nbytes; i++) {
148  // Generate a one-byte rune that isn't a control character (e.g. '\n').
149  // Clipping to 0x20 introduces some bias, but we don't need uniformity.
150  int byte = rand() & 0x7F;
151  if (byte < 0x20)
152  byte = 0x20;
153  (*text)[i] = byte;
154  }
155 }
156 
157 // Makes text of size nbytes, then calls run to search
158 // the text for regexp iters times.
159 void Search(int iters, int nbytes, const char* regexp, SearchImpl* search) {
161  std::string s;
162  MakeText(&s, nbytes);
165  search(iters, regexp, s, Prog::kUnanchored, false);
166  SetBenchmarkBytesProcessed(static_cast<int64_t>(iters)*nbytes);
167 }
168 
169 // These two are easy because they start with an A,
170 // giving the search loop something to memchr for.
171 #define EASY0 "ABCDEFGHIJKLMNOPQRSTUVWXYZ$"
172 #define EASY1 "A[AB]B[BC]C[CD]D[DE]E[EF]F[FG]G[GH]H[HI]I[IJ]J$"
173 
174 // This is a little harder, since it starts with a character class
175 // and thus can't be memchr'ed. Could look for ABC and work backward,
176 // but no one does that.
177 #define MEDIUM "[XYZ]ABCDEFGHIJKLMNOPQRSTUVWXYZ$"
178 
179 // This is a fair amount harder, because of the leading [ -~]*.
180 // A bad backtracking implementation will take O(text^2) time to
181 // figure out there's no match.
182 #define HARD "[ -~]*ABCDEFGHIJKLMNOPQRSTUVWXYZ$"
183 
184 // This has quite a high degree of fanout.
185 // NFA execution will be particularly slow.
186 #define FANOUT "(?:[\\x{80}-\\x{10FFFF}]?){100}[\\x{80}-\\x{10FFFF}]"
187 
188 // This stresses engines that are trying to track parentheses.
189 #define PARENS "([ -~])*(A)(B)(C)(D)(E)(F)(G)(H)(I)(J)(K)(L)(M)" \
190  "(N)(O)(P)(Q)(R)(S)(T)(U)(V)(W)(X)(Y)(Z)$"
191 
196 
197 BENCHMARK_RANGE(Search_Easy0_CachedDFA, 8, 16<<20)->ThreadRange(1, NumCPUs());
198 BENCHMARK_RANGE(Search_Easy0_CachedNFA, 8, 256<<10)->ThreadRange(1, NumCPUs());
199 #ifdef USEPCRE
200 BENCHMARK_RANGE(Search_Easy0_CachedPCRE, 8, 16<<20)->ThreadRange(1, NumCPUs());
201 #endif
202 BENCHMARK_RANGE(Search_Easy0_CachedRE2, 8, 16<<20)->ThreadRange(1, NumCPUs());
203 
208 
209 BENCHMARK_RANGE(Search_Easy1_CachedDFA, 8, 16<<20)->ThreadRange(1, NumCPUs());
210 BENCHMARK_RANGE(Search_Easy1_CachedNFA, 8, 256<<10)->ThreadRange(1, NumCPUs());
211 #ifdef USEPCRE
212 BENCHMARK_RANGE(Search_Easy1_CachedPCRE, 8, 16<<20)->ThreadRange(1, NumCPUs());
213 #endif
214 BENCHMARK_RANGE(Search_Easy1_CachedRE2, 8, 16<<20)->ThreadRange(1, NumCPUs());
215 
220 
221 BENCHMARK_RANGE(Search_Medium_CachedDFA, 8, 16<<20)->ThreadRange(1, NumCPUs());
222 BENCHMARK_RANGE(Search_Medium_CachedNFA, 8, 256<<10)->ThreadRange(1, NumCPUs());
223 #ifdef USEPCRE
224 BENCHMARK_RANGE(Search_Medium_CachedPCRE, 8, 256<<10)->ThreadRange(1, NumCPUs());
225 #endif
226 BENCHMARK_RANGE(Search_Medium_CachedRE2, 8, 16<<20)->ThreadRange(1, NumCPUs());
227 
228 void Search_Hard_CachedDFA(int i, int n) { Search(i, n, HARD, SearchCachedDFA); }
229 void Search_Hard_CachedNFA(int i, int n) { Search(i, n, HARD, SearchCachedNFA); }
231 void Search_Hard_CachedRE2(int i, int n) { Search(i, n, HARD, SearchCachedRE2); }
232 
233 BENCHMARK_RANGE(Search_Hard_CachedDFA, 8, 16<<20)->ThreadRange(1, NumCPUs());
234 BENCHMARK_RANGE(Search_Hard_CachedNFA, 8, 256<<10)->ThreadRange(1, NumCPUs());
235 #ifdef USEPCRE
236 BENCHMARK_RANGE(Search_Hard_CachedPCRE, 8, 4<<10)->ThreadRange(1, NumCPUs());
237 #endif
238 BENCHMARK_RANGE(Search_Hard_CachedRE2, 8, 16<<20)->ThreadRange(1, NumCPUs());
239 
244 
245 BENCHMARK_RANGE(Search_Fanout_CachedDFA, 8, 16<<20)->ThreadRange(1, NumCPUs());
246 BENCHMARK_RANGE(Search_Fanout_CachedNFA, 8, 256<<10)->ThreadRange(1, NumCPUs());
247 #ifdef USEPCRE
248 BENCHMARK_RANGE(Search_Fanout_CachedPCRE, 8, 4<<10)->ThreadRange(1, NumCPUs());
249 #endif
250 BENCHMARK_RANGE(Search_Fanout_CachedRE2, 8, 16<<20)->ThreadRange(1, NumCPUs());
251 
256 
257 BENCHMARK_RANGE(Search_Parens_CachedDFA, 8, 16<<20)->ThreadRange(1, NumCPUs());
258 BENCHMARK_RANGE(Search_Parens_CachedNFA, 8, 256<<10)->ThreadRange(1, NumCPUs());
259 #ifdef USEPCRE
260 BENCHMARK_RANGE(Search_Parens_CachedPCRE, 8, 8)->ThreadRange(1, NumCPUs());
261 #endif
262 BENCHMARK_RANGE(Search_Parens_CachedRE2, 8, 16<<20)->ThreadRange(1, NumCPUs());
263 
264 void SearchBigFixed(int iters, int nbytes, SearchImpl* search) {
266  std::string s;
267  s.append(nbytes/2, 'x');
268  std::string regexp = "^" + s + ".*$";
269  std::string t;
270  MakeText(&t, nbytes/2);
271  s += t;
274  search(iters, regexp.c_str(), s, Prog::kUnanchored, true);
275  SetBenchmarkBytesProcessed(static_cast<int64_t>(iters)*nbytes);
276 }
277 
282 
283 BENCHMARK_RANGE(Search_BigFixed_CachedDFA, 8, 1<<20)->ThreadRange(1, NumCPUs());
284 BENCHMARK_RANGE(Search_BigFixed_CachedNFA, 8, 32<<10)->ThreadRange(1, NumCPUs());
285 #ifdef USEPCRE
286 BENCHMARK_RANGE(Search_BigFixed_CachedPCRE, 8, 32<<10)->ThreadRange(1, NumCPUs());
287 #endif
288 BENCHMARK_RANGE(Search_BigFixed_CachedRE2, 8, 1<<20)->ThreadRange(1, NumCPUs());
289 
290 // Benchmark: FindAndConsume
291 
292 void FindAndConsume(int iters, int nbytes) {
294  std::string s;
295  MakeText(&s, nbytes);
296  s.append("Hello World");
298  RE2 re("((Hello World))");
299  for (int i = 0; i < iters; i++) {
300  StringPiece t = s;
301  StringPiece u;
302  CHECK(RE2::FindAndConsume(&t, re, &u));
303  CHECK_EQ(u, "Hello World");
304  }
305  SetBenchmarkBytesProcessed(static_cast<int64_t>(iters)*nbytes);
306 }
307 
308 BENCHMARK_RANGE(FindAndConsume, 8, 16<<20)->ThreadRange(1, NumCPUs());
309 
310 // Benchmark: successful anchored search.
311 
312 void SearchSuccess(int iters, int nbytes, const char* regexp, SearchImpl* search) {
314  std::string s;
315  MakeText(&s, nbytes);
318  search(iters, regexp, s, Prog::kAnchored, true);
319  SetBenchmarkBytesProcessed(static_cast<int64_t>(iters)*nbytes);
320 }
321 
322 // Unambiguous search (RE2 can use OnePass).
323 
324 void Search_Success_DFA(int i, int n) { SearchSuccess(i, n, ".*$", SearchDFA); }
325 void Search_Success_NFA(int i, int n) { SearchSuccess(i, n, ".*$", SearchNFA); }
326 void Search_Success_PCRE(int i, int n) { SearchSuccess(i, n, ".*$", SearchPCRE); }
327 void Search_Success_RE2(int i, int n) { SearchSuccess(i, n, ".*$", SearchRE2); }
328 void Search_Success_OnePass(int i, int n) { SearchSuccess(i, n, ".*$", SearchOnePass); }
329 
330 BENCHMARK_RANGE(Search_Success_DFA, 8, 16<<20)->ThreadRange(1, NumCPUs());
331 BENCHMARK_RANGE(Search_Success_NFA, 8, 16<<20)->ThreadRange(1, NumCPUs());
332 #ifdef USEPCRE
333 BENCHMARK_RANGE(Search_Success_PCRE, 8, 16<<20)->ThreadRange(1, NumCPUs());
334 #endif
335 BENCHMARK_RANGE(Search_Success_RE2, 8, 16<<20)->ThreadRange(1, NumCPUs());
336 BENCHMARK_RANGE(Search_Success_OnePass, 8, 2<<20)->ThreadRange(1, NumCPUs());
337 
338 void Search_Success_CachedDFA(int i, int n) { SearchSuccess(i, n, ".*$", SearchCachedDFA); }
339 void Search_Success_CachedNFA(int i, int n) { SearchSuccess(i, n, ".*$", SearchCachedNFA); }
340 void Search_Success_CachedPCRE(int i, int n) { SearchSuccess(i, n, ".*$", SearchCachedPCRE); }
341 void Search_Success_CachedRE2(int i, int n) { SearchSuccess(i, n, ".*$", SearchCachedRE2); }
343 
344 BENCHMARK_RANGE(Search_Success_CachedDFA, 8, 16<<20)->ThreadRange(1, NumCPUs());
345 BENCHMARK_RANGE(Search_Success_CachedNFA, 8, 16<<20)->ThreadRange(1, NumCPUs());
346 #ifdef USEPCRE
347 BENCHMARK_RANGE(Search_Success_CachedPCRE, 8, 16<<20)->ThreadRange(1, NumCPUs());
348 #endif
349 BENCHMARK_RANGE(Search_Success_CachedRE2, 8, 16<<20)->ThreadRange(1, NumCPUs());
350 BENCHMARK_RANGE(Search_Success_CachedOnePass, 8, 2<<20)->ThreadRange(1, NumCPUs());
351 
352 // Ambiguous search (RE2 cannot use OnePass).
353 // Used to be ".*.$", but that is coalesced to ".+$" these days.
354 
355 void Search_Success1_DFA(int i, int n) { SearchSuccess(i, n, ".*\\C$", SearchDFA); }
356 void Search_Success1_NFA(int i, int n) { SearchSuccess(i, n, ".*\\C$", SearchNFA); }
357 void Search_Success1_PCRE(int i, int n) { SearchSuccess(i, n, ".*\\C$", SearchPCRE); }
358 void Search_Success1_RE2(int i, int n) { SearchSuccess(i, n, ".*\\C$", SearchRE2); }
359 void Search_Success1_BitState(int i, int n) { SearchSuccess(i, n, ".*\\C$", SearchBitState); }
360 
361 BENCHMARK_RANGE(Search_Success1_DFA, 8, 16<<20)->ThreadRange(1, NumCPUs());
362 BENCHMARK_RANGE(Search_Success1_NFA, 8, 16<<20)->ThreadRange(1, NumCPUs());
363 #ifdef USEPCRE
364 BENCHMARK_RANGE(Search_Success1_PCRE, 8, 16<<20)->ThreadRange(1, NumCPUs());
365 #endif
366 BENCHMARK_RANGE(Search_Success1_RE2, 8, 16<<20)->ThreadRange(1, NumCPUs());
367 BENCHMARK_RANGE(Search_Success1_BitState, 8, 2<<20)->ThreadRange(1, NumCPUs());
368 
369 void Search_Success1_CachedDFA(int i, int n) { SearchSuccess(i, n, ".*\\C$", SearchCachedDFA); }
370 void Search_Success1_CachedNFA(int i, int n) { SearchSuccess(i, n, ".*\\C$", SearchCachedNFA); }
371 void Search_Success1_CachedPCRE(int i, int n) { SearchSuccess(i, n, ".*\\C$", SearchCachedPCRE); }
372 void Search_Success1_CachedRE2(int i, int n) { SearchSuccess(i, n, ".*\\C$", SearchCachedRE2); }
374 
375 BENCHMARK_RANGE(Search_Success1_CachedDFA, 8, 16<<20)->ThreadRange(1, NumCPUs());
376 BENCHMARK_RANGE(Search_Success1_CachedNFA, 8, 16<<20)->ThreadRange(1, NumCPUs());
377 #ifdef USEPCRE
378 BENCHMARK_RANGE(Search_Success1_CachedPCRE, 8, 16<<20)->ThreadRange(1, NumCPUs());
379 #endif
380 BENCHMARK_RANGE(Search_Success1_CachedRE2, 8, 16<<20)->ThreadRange(1, NumCPUs());
381 BENCHMARK_RANGE(Search_Success1_CachedBitState, 8, 2<<20)->ThreadRange(1, NumCPUs());
382 
383 // Benchmark: AltMatch optimisation (just to verify that it works)
384 // Note that OnePass doesn't implement it!
385 
386 void SearchAltMatch(int iters, int nbytes, SearchImpl* search) {
388  std::string s;
389  MakeText(&s, nbytes);
392  search(iters, "\\C*", s, Prog::kAnchored, true);
393  SetBenchmarkBytesProcessed(static_cast<int64_t>(iters)*nbytes);
394 }
395 
396 void Search_AltMatch_DFA(int i, int n) { SearchAltMatch(i, n, SearchDFA); }
397 void Search_AltMatch_NFA(int i, int n) { SearchAltMatch(i, n, SearchNFA); }
401 void Search_AltMatch_RE2(int i, int n) { SearchAltMatch(i, n, SearchRE2); }
402 
403 BENCHMARK_RANGE(Search_AltMatch_DFA, 8, 16<<20)->ThreadRange(1, NumCPUs());
404 BENCHMARK_RANGE(Search_AltMatch_NFA, 8, 16<<20)->ThreadRange(1, NumCPUs());
405 BENCHMARK_RANGE(Search_AltMatch_OnePass, 8, 16<<20)->ThreadRange(1, NumCPUs());
406 BENCHMARK_RANGE(Search_AltMatch_BitState, 8, 16<<20)->ThreadRange(1, NumCPUs());
407 #ifdef USEPCRE
408 BENCHMARK_RANGE(Search_AltMatch_PCRE, 8, 16<<20)->ThreadRange(1, NumCPUs());
409 #endif
410 BENCHMARK_RANGE(Search_AltMatch_RE2, 8, 16<<20)->ThreadRange(1, NumCPUs());
411 
418 
419 BENCHMARK_RANGE(Search_AltMatch_CachedDFA, 8, 16<<20)->ThreadRange(1, NumCPUs());
420 BENCHMARK_RANGE(Search_AltMatch_CachedNFA, 8, 16<<20)->ThreadRange(1, NumCPUs());
421 BENCHMARK_RANGE(Search_AltMatch_CachedOnePass, 8, 16<<20)->ThreadRange(1, NumCPUs());
422 BENCHMARK_RANGE(Search_AltMatch_CachedBitState, 8, 16<<20)->ThreadRange(1, NumCPUs());
423 #ifdef USEPCRE
424 BENCHMARK_RANGE(Search_AltMatch_CachedPCRE, 8, 16<<20)->ThreadRange(1, NumCPUs());
425 #endif
426 BENCHMARK_RANGE(Search_AltMatch_CachedRE2, 8, 16<<20)->ThreadRange(1, NumCPUs());
427 
428 // Benchmark: use regexp to find phone number.
429 
430 void SearchDigits(int iters, SearchImpl* search) {
431  StringPiece s("650-253-0001");
433  search(iters, "([0-9]+)-([0-9]+)-([0-9]+)", s, Prog::kAnchored, true);
435 }
436 
443 
444 BENCHMARK(Search_Digits_DFA)->ThreadRange(1, NumCPUs());
445 BENCHMARK(Search_Digits_NFA)->ThreadRange(1, NumCPUs());
446 BENCHMARK(Search_Digits_OnePass)->ThreadRange(1, NumCPUs());
447 #ifdef USEPCRE
448 BENCHMARK(Search_Digits_PCRE)->ThreadRange(1, NumCPUs());
449 #endif
450 BENCHMARK(Search_Digits_RE2)->ThreadRange(1, NumCPUs());
451 BENCHMARK(Search_Digits_BitState)->ThreadRange(1, NumCPUs());
452 
453 // Benchmark: use regexp to parse digit fields in phone number.
454 
455 void Parse3Digits(int iters,
456  void (*parse3)(int, const char*, const StringPiece&)) {
458  parse3(iters, "([0-9]+)-([0-9]+)-([0-9]+)", "650-253-0001");
460 }
461 
468 
469 BENCHMARK(Parse_Digits_NFA)->ThreadRange(1, NumCPUs());
470 BENCHMARK(Parse_Digits_OnePass)->ThreadRange(1, NumCPUs());
471 #ifdef USEPCRE
472 BENCHMARK(Parse_Digits_PCRE)->ThreadRange(1, NumCPUs());
473 #endif
474 BENCHMARK(Parse_Digits_RE2)->ThreadRange(1, NumCPUs());
475 BENCHMARK(Parse_Digits_Backtrack)->ThreadRange(1, NumCPUs());
476 BENCHMARK(Parse_Digits_BitState)->ThreadRange(1, NumCPUs());
477 
484 
485 BENCHMARK(Parse_CachedDigits_NFA)->ThreadRange(1, NumCPUs());
486 BENCHMARK(Parse_CachedDigits_OnePass)->ThreadRange(1, NumCPUs());
487 #ifdef USEPCRE
488 BENCHMARK(Parse_CachedDigits_PCRE)->ThreadRange(1, NumCPUs());
489 #endif
491 BENCHMARK(Parse_CachedDigits_RE2)->ThreadRange(1, NumCPUs());
492 BENCHMARK(Parse_CachedDigits_BitState)->ThreadRange(1, NumCPUs());
493 
494 void Parse3DigitDs(int iters,
495  void (*parse3)(int, const char*, const StringPiece&)) {
497  parse3(iters, "(\\d+)-(\\d+)-(\\d+)", "650-253-0001");
499 }
500 
507 
508 BENCHMARK(Parse_DigitDs_NFA)->ThreadRange(1, NumCPUs());
509 BENCHMARK(Parse_DigitDs_OnePass)->ThreadRange(1, NumCPUs());
510 #ifdef USEPCRE
511 BENCHMARK(Parse_DigitDs_PCRE)->ThreadRange(1, NumCPUs());
512 #endif
513 BENCHMARK(Parse_DigitDs_RE2)->ThreadRange(1, NumCPUs());
514 BENCHMARK(Parse_DigitDs_Backtrack)->ThreadRange(1, NumCPUs());
515 BENCHMARK(Parse_DigitDs_BitState)->ThreadRange(1, NumCPUs());
516 
523 
524 BENCHMARK(Parse_CachedDigitDs_NFA)->ThreadRange(1, NumCPUs());
525 BENCHMARK(Parse_CachedDigitDs_OnePass)->ThreadRange(1, NumCPUs());
526 #ifdef USEPCRE
527 BENCHMARK(Parse_CachedDigitDs_PCRE)->ThreadRange(1, NumCPUs());
528 #endif
530 BENCHMARK(Parse_CachedDigitDs_RE2)->ThreadRange(1, NumCPUs());
532 
533 // Benchmark: splitting off leading number field.
534 
535 void Parse1Split(int iters,
536  void (*parse1)(int, const char*, const StringPiece&)) {
538  parse1(iters, "[0-9]+-(.*)", "650-253-0001");
540 }
541 
547 
548 BENCHMARK(Parse_Split_NFA)->ThreadRange(1, NumCPUs());
549 BENCHMARK(Parse_Split_OnePass)->ThreadRange(1, NumCPUs());
550 #ifdef USEPCRE
551 BENCHMARK(Parse_Split_PCRE)->ThreadRange(1, NumCPUs());
552 #endif
553 BENCHMARK(Parse_Split_RE2)->ThreadRange(1, NumCPUs());
554 BENCHMARK(Parse_Split_BitState)->ThreadRange(1, NumCPUs());
555 
561 
562 BENCHMARK(Parse_CachedSplit_NFA)->ThreadRange(1, NumCPUs());
563 BENCHMARK(Parse_CachedSplit_OnePass)->ThreadRange(1, NumCPUs());
564 #ifdef USEPCRE
565 BENCHMARK(Parse_CachedSplit_PCRE)->ThreadRange(1, NumCPUs());
566 #endif
567 BENCHMARK(Parse_CachedSplit_RE2)->ThreadRange(1, NumCPUs());
568 BENCHMARK(Parse_CachedSplit_BitState)->ThreadRange(1, NumCPUs());
569 
570 // Benchmark: splitting off leading number field but harder (ambiguous regexp).
571 
572 void Parse1SplitHard(int iters,
573  void (*run)(int, const char*, const StringPiece&)) {
575  run(iters, "[0-9]+.(.*)", "650-253-0001");
577 }
578 
583 
584 #ifdef USEPCRE
585 BENCHMARK(Parse_SplitHard_PCRE)->ThreadRange(1, NumCPUs());
586 #endif
587 BENCHMARK(Parse_SplitHard_RE2)->ThreadRange(1, NumCPUs());
588 BENCHMARK(Parse_SplitHard_BitState)->ThreadRange(1, NumCPUs());
589 BENCHMARK(Parse_SplitHard_NFA)->ThreadRange(1, NumCPUs());
590 
596 
597 #ifdef USEPCRE
598 BENCHMARK(Parse_CachedSplitHard_PCRE)->ThreadRange(1, NumCPUs());
599 #endif
600 BENCHMARK(Parse_CachedSplitHard_RE2)->ThreadRange(1, NumCPUs());
602 BENCHMARK(Parse_CachedSplitHard_NFA)->ThreadRange(1, NumCPUs());
604 
605 // Benchmark: Parse1SplitHard, big text, small match.
606 
607 void Parse1SplitBig1(int iters,
608  void (*run)(int, const char*, const StringPiece&)) {
609  std::string s;
610  s.append(100000, 'x');
611  s.append("650-253-0001");
613  run(iters, "[0-9]+.(.*)", s);
615 }
616 
619 
620 #ifdef USEPCRE
621 BENCHMARK(Parse_CachedSplitBig1_PCRE)->ThreadRange(1, NumCPUs());
622 #endif
623 BENCHMARK(Parse_CachedSplitBig1_RE2)->ThreadRange(1, NumCPUs());
624 
625 // Benchmark: Parse1SplitHard, big text, big match.
626 
627 void Parse1SplitBig2(int iters,
628  void (*run)(int, const char*, const StringPiece&)) {
629  std::string s;
630  s.append("650-253-");
631  s.append(100000, '0');
633  run(iters, "[0-9]+.(.*)", s);
635 }
636 
639 
640 #ifdef USEPCRE
641 BENCHMARK(Parse_CachedSplitBig2_PCRE)->ThreadRange(1, NumCPUs());
642 #endif
643 BENCHMARK(Parse_CachedSplitBig2_RE2)->ThreadRange(1, NumCPUs());
644 
645 // Benchmark: measure time required to parse (but not execute)
646 // a simple regular expression.
647 
648 void ParseRegexp(int iters, const std::string& regexp) {
649  for (int i = 0; i < iters; i++) {
650  Regexp* re = Regexp::Parse(regexp, Regexp::LikePerl, NULL);
651  CHECK(re);
652  re->Decref();
653  }
654 }
655 
656 void SimplifyRegexp(int iters, const std::string& regexp) {
657  for (int i = 0; i < iters; i++) {
658  Regexp* re = Regexp::Parse(regexp, Regexp::LikePerl, NULL);
659  CHECK(re);
660  Regexp* sre = re->Simplify();
661  CHECK(sre);
662  sre->Decref();
663  re->Decref();
664  }
665 }
666 
667 void NullWalkRegexp(int iters, const std::string& regexp) {
668  Regexp* re = Regexp::Parse(regexp, Regexp::LikePerl, NULL);
669  CHECK(re);
670  for (int i = 0; i < iters; i++) {
671  re->NullWalk();
672  }
673  re->Decref();
674 }
675 
676 void SimplifyCompileRegexp(int iters, const std::string& regexp) {
677  for (int i = 0; i < iters; i++) {
678  Regexp* re = Regexp::Parse(regexp, Regexp::LikePerl, NULL);
679  CHECK(re);
680  Regexp* sre = re->Simplify();
681  CHECK(sre);
682  Prog* prog = sre->CompileToProg(0);
683  CHECK(prog);
684  delete prog;
685  sre->Decref();
686  re->Decref();
687  }
688 }
689 
690 void CompileRegexp(int iters, const std::string& regexp) {
691  for (int i = 0; i < iters; i++) {
692  Regexp* re = Regexp::Parse(regexp, Regexp::LikePerl, NULL);
693  CHECK(re);
694  Prog* prog = re->CompileToProg(0);
695  CHECK(prog);
696  delete prog;
697  re->Decref();
698  }
699 }
700 
701 void CompileToProg(int iters, const std::string& regexp) {
702  Regexp* re = Regexp::Parse(regexp, Regexp::LikePerl, NULL);
703  CHECK(re);
704  for (int i = 0; i < iters; i++) {
705  Prog* prog = re->CompileToProg(0);
706  CHECK(prog);
707  delete prog;
708  }
709  re->Decref();
710 }
711 
712 void CompileByteMap(int iters, const std::string& regexp) {
713  Regexp* re = Regexp::Parse(regexp, Regexp::LikePerl, NULL);
714  CHECK(re);
715  Prog* prog = re->CompileToProg(0);
716  CHECK(prog);
717  for (int i = 0; i < iters; i++) {
718  prog->ComputeByteMap();
719  }
720  delete prog;
721  re->Decref();
722 }
723 
724 void CompilePCRE(int iters, const std::string& regexp) {
725  for (int i = 0; i < iters; i++) {
726  PCRE re(regexp, PCRE::UTF8);
727  CHECK_EQ(re.error(), "");
728  }
729 }
730 
731 void CompileRE2(int iters, const std::string& regexp) {
732  for (int i = 0; i < iters; i++) {
733  RE2 re(regexp);
734  CHECK_EQ(re.error(), "");
735  }
736 }
737 
738 void RunBuild(int iters, const std::string& regexp,
739  void (*run)(int, const std::string&)) {
740  run(iters, regexp);
742 }
743 
744 } // namespace re2
745 
746 DEFINE_string(compile_regexp, "(.*)-(\\d+)-of-(\\d+)", "regexp for compile benchmarks");
747 
748 namespace re2 {
749 
750 void BM_PCRE_Compile(int i) { RunBuild(i, FLAGS_compile_regexp, CompilePCRE); }
751 void BM_Regexp_Parse(int i) { RunBuild(i, FLAGS_compile_regexp, ParseRegexp); }
752 void BM_Regexp_Simplify(int i) { RunBuild(i, FLAGS_compile_regexp, SimplifyRegexp); }
753 void BM_CompileToProg(int i) { RunBuild(i, FLAGS_compile_regexp, CompileToProg); }
754 void BM_CompileByteMap(int i) { RunBuild(i, FLAGS_compile_regexp, CompileByteMap); }
755 void BM_Regexp_Compile(int i) { RunBuild(i, FLAGS_compile_regexp, CompileRegexp); }
756 void BM_Regexp_SimplifyCompile(int i) { RunBuild(i, FLAGS_compile_regexp, SimplifyCompileRegexp); }
757 void BM_Regexp_NullWalk(int i) { RunBuild(i, FLAGS_compile_regexp, NullWalkRegexp); }
758 void BM_RE2_Compile(int i) { RunBuild(i, FLAGS_compile_regexp, CompileRE2); }
759 
760 #ifdef USEPCRE
761 BENCHMARK(BM_PCRE_Compile)->ThreadRange(1, NumCPUs());
762 #endif
763 BENCHMARK(BM_Regexp_Parse)->ThreadRange(1, NumCPUs());
764 BENCHMARK(BM_Regexp_Simplify)->ThreadRange(1, NumCPUs());
765 BENCHMARK(BM_CompileToProg)->ThreadRange(1, NumCPUs());
766 BENCHMARK(BM_CompileByteMap)->ThreadRange(1, NumCPUs());
767 BENCHMARK(BM_Regexp_Compile)->ThreadRange(1, NumCPUs());
768 BENCHMARK(BM_Regexp_SimplifyCompile)->ThreadRange(1, NumCPUs());
769 BENCHMARK(BM_Regexp_NullWalk)->ThreadRange(1, NumCPUs());
770 BENCHMARK(BM_RE2_Compile)->ThreadRange(1, NumCPUs());
771 
772 // Makes text of size nbytes, then calls run to search
773 // the text for regexp iters times.
774 void SearchPhone(int iters, int nbytes, ParseImpl* search) {
776  std::string s;
777  MakeText(&s, nbytes);
778  s.append("(650) 253-0001");
781  search(iters, "(\\d{3}-|\\(\\d{3}\\)\\s+)(\\d{3}-\\d{4})", s);
782  SetBenchmarkBytesProcessed(static_cast<int64_t>(iters)*nbytes);
783 }
784 
785 void SearchPhone_CachedPCRE(int i, int n) {
787 }
788 void SearchPhone_CachedRE2(int i, int n) {
790 }
791 
792 #ifdef USEPCRE
793 BENCHMARK_RANGE(SearchPhone_CachedPCRE, 8, 16<<20)->ThreadRange(1, NumCPUs());
794 #endif
795 BENCHMARK_RANGE(SearchPhone_CachedRE2, 8, 16<<20)->ThreadRange(1, NumCPUs());
796 
797 /*
798 TODO(rsc): Make this work again.
799 
800 // Generates and returns a string over binary alphabet {0,1} that contains
801 // all possible binary sequences of length n as subsequences. The obvious
802 // brute force method would generate a string of length n * 2^n, but this
803 // generates a string of length n + 2^n - 1 called a De Bruijn cycle.
804 // See Knuth, The Art of Computer Programming, Vol 2, Exercise 3.2.2 #17.
805 static std::string DeBruijnString(int n) {
806  CHECK_LT(n, 8*sizeof(int));
807  CHECK_GT(n, 0);
808 
809  std::vector<bool> did(1<<n);
810  for (int i = 0; i < 1<<n; i++)
811  did[i] = false;
812 
813  std::string s;
814  for (int i = 0; i < n-1; i++)
815  s.append("0");
816  int bits = 0;
817  int mask = (1<<n) - 1;
818  for (int i = 0; i < (1<<n); i++) {
819  bits <<= 1;
820  bits &= mask;
821  if (!did[bits|1]) {
822  bits |= 1;
823  s.append("1");
824  } else {
825  s.append("0");
826  }
827  CHECK(!did[bits]);
828  did[bits] = true;
829  }
830  return s;
831 }
832 
833 void CacheFill(int iters, int n, SearchImpl *srch) {
834  std::string s = DeBruijnString(n+1);
835  std::string t;
836  for (int i = n+1; i < 20; i++) {
837  t = s + s;
838  using std::swap;
839  swap(s, t);
840  }
841  srch(iters, StringPrintf("0[01]{%d}$", n).c_str(), s,
842  Prog::kUnanchored, true);
843  SetBenchmarkBytesProcessed(static_cast<int64_t>(iters)*s.size());
844 }
845 
846 void CacheFillPCRE(int i, int n) { CacheFill(i, n, SearchCachedPCRE); }
847 void CacheFillRE2(int i, int n) { CacheFill(i, n, SearchCachedRE2); }
848 void CacheFillNFA(int i, int n) { CacheFill(i, n, SearchCachedNFA); }
849 void CacheFillDFA(int i, int n) { CacheFill(i, n, SearchCachedDFA); }
850 
851 // BENCHMARK_WITH_ARG uses __LINE__ to generate distinct identifiers
852 // for the static BenchmarkRegisterer, which makes it unusable inside
853 // a macro like DO24 below. MY_BENCHMARK_WITH_ARG uses the argument a
854 // to make the identifiers distinct (only possible when 'a' is a simple
855 // expression like 2, not like 1+1).
856 #define MY_BENCHMARK_WITH_ARG(n, a) \
857  bool __benchmark_ ## n ## a = \
858  (new ::testing::Benchmark(#n, NewPermanentCallback(&n)))->ThreadRange(1, NumCPUs());
859 
860 #define DO24(A, B) \
861  A(B, 1); A(B, 2); A(B, 3); A(B, 4); A(B, 5); A(B, 6); \
862  A(B, 7); A(B, 8); A(B, 9); A(B, 10); A(B, 11); A(B, 12); \
863  A(B, 13); A(B, 14); A(B, 15); A(B, 16); A(B, 17); A(B, 18); \
864  A(B, 19); A(B, 20); A(B, 21); A(B, 22); A(B, 23); A(B, 24);
865 
866 DO24(MY_BENCHMARK_WITH_ARG, CacheFillPCRE)
867 DO24(MY_BENCHMARK_WITH_ARG, CacheFillNFA)
868 DO24(MY_BENCHMARK_WITH_ARG, CacheFillRE2)
869 DO24(MY_BENCHMARK_WITH_ARG, CacheFillDFA)
870 
871 #undef DO24
872 #undef MY_BENCHMARK_WITH_ARG
873 */
874 
876 //
877 // Implementation routines. Sad that there are so many,
878 // but all the interfaces are slightly different.
879 
880 // Runs implementation to search for regexp in text, iters times.
881 // Expect_match says whether the regexp should be found.
882 // Anchored says whether to run an anchored search.
883 
884 void SearchDFA(int iters, const char* regexp, const StringPiece& text,
885  Prog::Anchor anchor, bool expect_match) {
886  for (int i = 0; i < iters; i++) {
887  Regexp* re = Regexp::Parse(regexp, Regexp::LikePerl, NULL);
888  CHECK(re);
889  Prog* prog = re->CompileToProg(0);
890  CHECK(prog);
891  bool failed = false;
892  CHECK_EQ(prog->SearchDFA(text, StringPiece(), anchor, Prog::kFirstMatch,
893  NULL, &failed, NULL),
894  expect_match);
895  CHECK(!failed);
896  delete prog;
897  re->Decref();
898  }
899 }
900 
901 void SearchNFA(int iters, const char* regexp, const StringPiece& text,
902  Prog::Anchor anchor, bool expect_match) {
903  for (int i = 0; i < iters; i++) {
904  Regexp* re = Regexp::Parse(regexp, Regexp::LikePerl, NULL);
905  CHECK(re);
906  Prog* prog = re->CompileToProg(0);
907  CHECK(prog);
908  CHECK_EQ(prog->SearchNFA(text, StringPiece(), anchor, Prog::kFirstMatch,
909  NULL, 0),
910  expect_match);
911  delete prog;
912  re->Decref();
913  }
914 }
915 
916 void SearchOnePass(int iters, const char* regexp, const StringPiece& text,
917  Prog::Anchor anchor, bool expect_match) {
918  for (int i = 0; i < iters; i++) {
919  Regexp* re = Regexp::Parse(regexp, Regexp::LikePerl, NULL);
920  CHECK(re);
921  Prog* prog = re->CompileToProg(0);
922  CHECK(prog);
923  CHECK(prog->IsOnePass());
924  CHECK_EQ(prog->SearchOnePass(text, text, anchor, Prog::kFirstMatch, NULL, 0),
925  expect_match);
926  delete prog;
927  re->Decref();
928  }
929 }
930 
931 void SearchBitState(int iters, const char* regexp, const StringPiece& text,
932  Prog::Anchor anchor, bool expect_match) {
933  for (int i = 0; i < iters; i++) {
934  Regexp* re = Regexp::Parse(regexp, Regexp::LikePerl, NULL);
935  CHECK(re);
936  Prog* prog = re->CompileToProg(0);
937  CHECK(prog);
938  CHECK(prog->CanBitState());
939  CHECK_EQ(prog->SearchBitState(text, text, anchor, Prog::kFirstMatch, NULL, 0),
940  expect_match);
941  delete prog;
942  re->Decref();
943  }
944 }
945 
946 void SearchPCRE(int iters, const char* regexp, const StringPiece& text,
947  Prog::Anchor anchor, bool expect_match) {
948  for (int i = 0; i < iters; i++) {
949  PCRE re(regexp, PCRE::UTF8);
950  CHECK_EQ(re.error(), "");
951  if (anchor == Prog::kAnchored)
952  CHECK_EQ(PCRE::FullMatch(text, re), expect_match);
953  else
954  CHECK_EQ(PCRE::PartialMatch(text, re), expect_match);
955  }
956 }
957 
958 void SearchRE2(int iters, const char* regexp, const StringPiece& text,
959  Prog::Anchor anchor, bool expect_match) {
960  for (int i = 0; i < iters; i++) {
961  RE2 re(regexp);
962  CHECK_EQ(re.error(), "");
963  if (anchor == Prog::kAnchored)
964  CHECK_EQ(RE2::FullMatch(text, re), expect_match);
965  else
966  CHECK_EQ(RE2::PartialMatch(text, re), expect_match);
967  }
968 }
969 
970 // SearchCachedXXX is like SearchXXX but only does the
971 // regexp parsing and compiling once. This lets us measure
972 // search time without the per-regexp overhead.
973 
974 void SearchCachedDFA(int iters, const char* regexp, const StringPiece& text,
975  Prog::Anchor anchor, bool expect_match) {
976  Regexp* re = Regexp::Parse(regexp, Regexp::LikePerl, NULL);
977  CHECK(re);
978  Prog* prog = re->CompileToProg(1LL<<31);
979  CHECK(prog);
980  for (int i = 0; i < iters; i++) {
981  bool failed = false;
982  CHECK_EQ(prog->SearchDFA(text, StringPiece(), anchor, Prog::kFirstMatch,
983  NULL, &failed, NULL),
984  expect_match);
985  CHECK(!failed);
986  }
987  delete prog;
988  re->Decref();
989 }
990 
991 void SearchCachedNFA(int iters, const char* regexp, const StringPiece& text,
992  Prog::Anchor anchor, bool expect_match) {
993  Regexp* re = Regexp::Parse(regexp, Regexp::LikePerl, NULL);
994  CHECK(re);
995  Prog* prog = re->CompileToProg(0);
996  CHECK(prog);
997  for (int i = 0; i < iters; i++) {
998  CHECK_EQ(prog->SearchNFA(text, StringPiece(), anchor, Prog::kFirstMatch,
999  NULL, 0),
1000  expect_match);
1001  }
1002  delete prog;
1003  re->Decref();
1004 }
1005 
1006 void SearchCachedOnePass(int iters, const char* regexp, const StringPiece& text,
1007  Prog::Anchor anchor, bool expect_match) {
1008  Regexp* re = Regexp::Parse(regexp, Regexp::LikePerl, NULL);
1009  CHECK(re);
1010  Prog* prog = re->CompileToProg(0);
1011  CHECK(prog);
1012  CHECK(prog->IsOnePass());
1013  for (int i = 0; i < iters; i++)
1014  CHECK_EQ(prog->SearchOnePass(text, text, anchor, Prog::kFirstMatch, NULL, 0),
1015  expect_match);
1016  delete prog;
1017  re->Decref();
1018 }
1019 
1020 void SearchCachedBitState(int iters, const char* regexp, const StringPiece& text,
1021  Prog::Anchor anchor, bool expect_match) {
1022  Regexp* re = Regexp::Parse(regexp, Regexp::LikePerl, NULL);
1023  CHECK(re);
1024  Prog* prog = re->CompileToProg(0);
1025  CHECK(prog);
1026  CHECK(prog->CanBitState());
1027  for (int i = 0; i < iters; i++)
1028  CHECK_EQ(prog->SearchBitState(text, text, anchor, Prog::kFirstMatch, NULL, 0),
1029  expect_match);
1030  delete prog;
1031  re->Decref();
1032 }
1033 
1034 void SearchCachedPCRE(int iters, const char* regexp, const StringPiece& text,
1035  Prog::Anchor anchor, bool expect_match) {
1036  PCRE re(regexp, PCRE::UTF8);
1037  CHECK_EQ(re.error(), "");
1038  for (int i = 0; i < iters; i++) {
1039  if (anchor == Prog::kAnchored)
1040  CHECK_EQ(PCRE::FullMatch(text, re), expect_match);
1041  else
1042  CHECK_EQ(PCRE::PartialMatch(text, re), expect_match);
1043  }
1044 }
1045 
1046 void SearchCachedRE2(int iters, const char* regexp, const StringPiece& text,
1047  Prog::Anchor anchor, bool expect_match) {
1048  RE2 re(regexp);
1049  CHECK_EQ(re.error(), "");
1050  for (int i = 0; i < iters; i++) {
1051  if (anchor == Prog::kAnchored)
1052  CHECK_EQ(RE2::FullMatch(text, re), expect_match);
1053  else
1054  CHECK_EQ(RE2::PartialMatch(text, re), expect_match);
1055  }
1056 }
1057 
1058 
1059 // Runs implementation to full match regexp against text,
1060 // extracting three submatches. Expects match always.
1061 
1062 void Parse3NFA(int iters, const char* regexp, const StringPiece& text) {
1063  for (int i = 0; i < iters; i++) {
1064  Regexp* re = Regexp::Parse(regexp, Regexp::LikePerl, NULL);
1065  CHECK(re);
1066  Prog* prog = re->CompileToProg(0);
1067  CHECK(prog);
1068  StringPiece sp[4]; // 4 because sp[0] is whole match.
1069  CHECK(prog->SearchNFA(text, StringPiece(), Prog::kAnchored,
1070  Prog::kFullMatch, sp, 4));
1071  delete prog;
1072  re->Decref();
1073  }
1074 }
1075 
1076 void Parse3OnePass(int iters, const char* regexp, const StringPiece& text) {
1077  for (int i = 0; i < iters; i++) {
1078  Regexp* re = Regexp::Parse(regexp, Regexp::LikePerl, NULL);
1079  CHECK(re);
1080  Prog* prog = re->CompileToProg(0);
1081  CHECK(prog);
1082  CHECK(prog->IsOnePass());
1083  StringPiece sp[4]; // 4 because sp[0] is whole match.
1084  CHECK(prog->SearchOnePass(text, text, Prog::kAnchored, Prog::kFullMatch, sp, 4));
1085  delete prog;
1086  re->Decref();
1087  }
1088 }
1089 
1090 void Parse3BitState(int iters, const char* regexp, const StringPiece& text) {
1091  for (int i = 0; i < iters; i++) {
1092  Regexp* re = Regexp::Parse(regexp, Regexp::LikePerl, NULL);
1093  CHECK(re);
1094  Prog* prog = re->CompileToProg(0);
1095  CHECK(prog);
1096  CHECK(prog->CanBitState());
1097  StringPiece sp[4]; // 4 because sp[0] is whole match.
1098  CHECK(prog->SearchBitState(text, text, Prog::kAnchored, Prog::kFullMatch, sp, 4));
1099  delete prog;
1100  re->Decref();
1101  }
1102 }
1103 
1104 void Parse3Backtrack(int iters, const char* regexp, const StringPiece& text) {
1105  for (int i = 0; i < iters; i++) {
1106  Regexp* re = Regexp::Parse(regexp, Regexp::LikePerl, NULL);
1107  CHECK(re);
1108  Prog* prog = re->CompileToProg(0);
1109  CHECK(prog);
1110  StringPiece sp[4]; // 4 because sp[0] is whole match.
1111  CHECK(prog->UnsafeSearchBacktrack(text, text, Prog::kAnchored, Prog::kFullMatch, sp, 4));
1112  delete prog;
1113  re->Decref();
1114  }
1115 }
1116 
1117 void Parse3PCRE(int iters, const char* regexp, const StringPiece& text) {
1118  for (int i = 0; i < iters; i++) {
1119  PCRE re(regexp, PCRE::UTF8);
1120  CHECK_EQ(re.error(), "");
1121  StringPiece sp1, sp2, sp3;
1122  CHECK(PCRE::FullMatch(text, re, &sp1, &sp2, &sp3));
1123  }
1124 }
1125 
1126 void Parse3RE2(int iters, const char* regexp, const StringPiece& text) {
1127  for (int i = 0; i < iters; i++) {
1128  RE2 re(regexp);
1129  CHECK_EQ(re.error(), "");
1130  StringPiece sp1, sp2, sp3;
1131  CHECK(RE2::FullMatch(text, re, &sp1, &sp2, &sp3));
1132  }
1133 }
1134 
1135 void Parse3CachedNFA(int iters, const char* regexp, const StringPiece& text) {
1136  Regexp* re = Regexp::Parse(regexp, Regexp::LikePerl, NULL);
1137  CHECK(re);
1138  Prog* prog = re->CompileToProg(0);
1139  CHECK(prog);
1140  StringPiece sp[4]; // 4 because sp[0] is whole match.
1141  for (int i = 0; i < iters; i++) {
1142  CHECK(prog->SearchNFA(text, StringPiece(), Prog::kAnchored,
1143  Prog::kFullMatch, sp, 4));
1144  }
1145  delete prog;
1146  re->Decref();
1147 }
1148 
1149 void Parse3CachedOnePass(int iters, const char* regexp, const StringPiece& text) {
1150  Regexp* re = Regexp::Parse(regexp, Regexp::LikePerl, NULL);
1151  CHECK(re);
1152  Prog* prog = re->CompileToProg(0);
1153  CHECK(prog);
1154  CHECK(prog->IsOnePass());
1155  StringPiece sp[4]; // 4 because sp[0] is whole match.
1156  for (int i = 0; i < iters; i++)
1157  CHECK(prog->SearchOnePass(text, text, Prog::kAnchored, Prog::kFullMatch, sp, 4));
1158  delete prog;
1159  re->Decref();
1160 }
1161 
1162 void Parse3CachedBitState(int iters, const char* regexp, const StringPiece& text) {
1163  Regexp* re = Regexp::Parse(regexp, Regexp::LikePerl, NULL);
1164  CHECK(re);
1165  Prog* prog = re->CompileToProg(0);
1166  CHECK(prog);
1167  CHECK(prog->CanBitState());
1168  StringPiece sp[4]; // 4 because sp[0] is whole match.
1169  for (int i = 0; i < iters; i++)
1170  CHECK(prog->SearchBitState(text, text, Prog::kAnchored, Prog::kFullMatch, sp, 4));
1171  delete prog;
1172  re->Decref();
1173 }
1174 
1175 void Parse3CachedBacktrack(int iters, const char* regexp, const StringPiece& text) {
1176  Regexp* re = Regexp::Parse(regexp, Regexp::LikePerl, NULL);
1177  CHECK(re);
1178  Prog* prog = re->CompileToProg(0);
1179  CHECK(prog);
1180  StringPiece sp[4]; // 4 because sp[0] is whole match.
1181  for (int i = 0; i < iters; i++)
1182  CHECK(prog->UnsafeSearchBacktrack(text, text, Prog::kAnchored, Prog::kFullMatch, sp, 4));
1183  delete prog;
1184  re->Decref();
1185 }
1186 
1187 void Parse3CachedPCRE(int iters, const char* regexp, const StringPiece& text) {
1188  PCRE re(regexp, PCRE::UTF8);
1189  CHECK_EQ(re.error(), "");
1190  StringPiece sp1, sp2, sp3;
1191  for (int i = 0; i < iters; i++) {
1192  CHECK(PCRE::FullMatch(text, re, &sp1, &sp2, &sp3));
1193  }
1194 }
1195 
1196 void Parse3CachedRE2(int iters, const char* regexp, const StringPiece& text) {
1197  RE2 re(regexp);
1198  CHECK_EQ(re.error(), "");
1199  StringPiece sp1, sp2, sp3;
1200  for (int i = 0; i < iters; i++) {
1201  CHECK(RE2::FullMatch(text, re, &sp1, &sp2, &sp3));
1202  }
1203 }
1204 
1205 
1206 // Runs implementation to full match regexp against text,
1207 // extracting three submatches. Expects match always.
1208 
1209 void Parse1NFA(int iters, const char* regexp, const StringPiece& text) {
1210  for (int i = 0; i < iters; i++) {
1211  Regexp* re = Regexp::Parse(regexp, Regexp::LikePerl, NULL);
1212  CHECK(re);
1213  Prog* prog = re->CompileToProg(0);
1214  CHECK(prog);
1215  StringPiece sp[2]; // 2 because sp[0] is whole match.
1216  CHECK(prog->SearchNFA(text, StringPiece(), Prog::kAnchored,
1217  Prog::kFullMatch, sp, 2));
1218  delete prog;
1219  re->Decref();
1220  }
1221 }
1222 
1223 void Parse1OnePass(int iters, const char* regexp, const StringPiece& text) {
1224  for (int i = 0; i < iters; i++) {
1225  Regexp* re = Regexp::Parse(regexp, Regexp::LikePerl, NULL);
1226  CHECK(re);
1227  Prog* prog = re->CompileToProg(0);
1228  CHECK(prog);
1229  CHECK(prog->IsOnePass());
1230  StringPiece sp[2]; // 2 because sp[0] is whole match.
1231  CHECK(prog->SearchOnePass(text, text, Prog::kAnchored, Prog::kFullMatch, sp, 2));
1232  delete prog;
1233  re->Decref();
1234  }
1235 }
1236 
1237 void Parse1BitState(int iters, const char* regexp, const StringPiece& text) {
1238  for (int i = 0; i < iters; i++) {
1239  Regexp* re = Regexp::Parse(regexp, Regexp::LikePerl, NULL);
1240  CHECK(re);
1241  Prog* prog = re->CompileToProg(0);
1242  CHECK(prog);
1243  CHECK(prog->CanBitState());
1244  StringPiece sp[2]; // 2 because sp[0] is whole match.
1245  CHECK(prog->SearchBitState(text, text, Prog::kAnchored, Prog::kFullMatch, sp, 2));
1246  delete prog;
1247  re->Decref();
1248  }
1249 }
1250 
1251 void Parse1PCRE(int iters, const char* regexp, const StringPiece& text) {
1252  for (int i = 0; i < iters; i++) {
1253  PCRE re(regexp, PCRE::UTF8);
1254  CHECK_EQ(re.error(), "");
1255  StringPiece sp1;
1256  CHECK(PCRE::FullMatch(text, re, &sp1));
1257  }
1258 }
1259 
1260 void Parse1RE2(int iters, const char* regexp, const StringPiece& text) {
1261  for (int i = 0; i < iters; i++) {
1262  RE2 re(regexp);
1263  CHECK_EQ(re.error(), "");
1264  StringPiece sp1;
1265  CHECK(RE2::FullMatch(text, re, &sp1));
1266  }
1267 }
1268 
1269 void Parse1CachedNFA(int iters, const char* regexp, const StringPiece& text) {
1270  Regexp* re = Regexp::Parse(regexp, Regexp::LikePerl, NULL);
1271  CHECK(re);
1272  Prog* prog = re->CompileToProg(0);
1273  CHECK(prog);
1274  StringPiece sp[2]; // 2 because sp[0] is whole match.
1275  for (int i = 0; i < iters; i++) {
1276  CHECK(prog->SearchNFA(text, StringPiece(), Prog::kAnchored,
1277  Prog::kFullMatch, sp, 2));
1278  }
1279  delete prog;
1280  re->Decref();
1281 }
1282 
1283 void Parse1CachedOnePass(int iters, const char* regexp, const StringPiece& text) {
1284  Regexp* re = Regexp::Parse(regexp, Regexp::LikePerl, NULL);
1285  CHECK(re);
1286  Prog* prog = re->CompileToProg(0);
1287  CHECK(prog);
1288  CHECK(prog->IsOnePass());
1289  StringPiece sp[2]; // 2 because sp[0] is whole match.
1290  for (int i = 0; i < iters; i++)
1291  CHECK(prog->SearchOnePass(text, text, Prog::kAnchored, Prog::kFullMatch, sp, 2));
1292  delete prog;
1293  re->Decref();
1294 }
1295 
1296 void Parse1CachedBitState(int iters, const char* regexp, const StringPiece& text) {
1297  Regexp* re = Regexp::Parse(regexp, Regexp::LikePerl, NULL);
1298  CHECK(re);
1299  Prog* prog = re->CompileToProg(0);
1300  CHECK(prog);
1301  CHECK(prog->CanBitState());
1302  StringPiece sp[2]; // 2 because sp[0] is whole match.
1303  for (int i = 0; i < iters; i++)
1304  CHECK(prog->SearchBitState(text, text, Prog::kAnchored, Prog::kFullMatch, sp, 2));
1305  delete prog;
1306  re->Decref();
1307 }
1308 
1309 void Parse1CachedBacktrack(int iters, const char* regexp, const StringPiece& text) {
1310  Regexp* re = Regexp::Parse(regexp, Regexp::LikePerl, NULL);
1311  CHECK(re);
1312  Prog* prog = re->CompileToProg(0);
1313  CHECK(prog);
1314  StringPiece sp[2]; // 2 because sp[0] is whole match.
1315  for (int i = 0; i < iters; i++)
1316  CHECK(prog->UnsafeSearchBacktrack(text, text, Prog::kAnchored, Prog::kFullMatch, sp, 2));
1317  delete prog;
1318  re->Decref();
1319 }
1320 
1321 void Parse1CachedPCRE(int iters, const char* regexp, const StringPiece& text) {
1322  PCRE re(regexp, PCRE::UTF8);
1323  CHECK_EQ(re.error(), "");
1324  StringPiece sp1;
1325  for (int i = 0; i < iters; i++) {
1326  CHECK(PCRE::FullMatch(text, re, &sp1));
1327  }
1328 }
1329 
1330 void Parse1CachedRE2(int iters, const char* regexp, const StringPiece& text) {
1331  RE2 re(regexp);
1332  CHECK_EQ(re.error(), "");
1333  StringPiece sp1;
1334  for (int i = 0; i < iters; i++) {
1335  CHECK(RE2::FullMatch(text, re, &sp1));
1336  }
1337 }
1338 
1339 void SearchParse2CachedPCRE(int iters, const char* regexp,
1340  const StringPiece& text) {
1341  PCRE re(regexp, PCRE::UTF8);
1342  CHECK_EQ(re.error(), "");
1343  for (int i = 0; i < iters; i++) {
1344  StringPiece sp1, sp2;
1345  CHECK(PCRE::PartialMatch(text, re, &sp1, &sp2));
1346  }
1347 }
1348 
1349 void SearchParse2CachedRE2(int iters, const char* regexp,
1350  const StringPiece& text) {
1351  RE2 re(regexp);
1352  CHECK_EQ(re.error(), "");
1353  for (int i = 0; i < iters; i++) {
1354  StringPiece sp1, sp2;
1355  CHECK(RE2::PartialMatch(text, re, &sp1, &sp2));
1356  }
1357 }
1358 
1359 void SearchParse1CachedPCRE(int iters, const char* regexp,
1360  const StringPiece& text) {
1361  PCRE re(regexp, PCRE::UTF8);
1362  CHECK_EQ(re.error(), "");
1363  for (int i = 0; i < iters; i++) {
1364  StringPiece sp1;
1365  CHECK(PCRE::PartialMatch(text, re, &sp1));
1366  }
1367 }
1368 
1369 void SearchParse1CachedRE2(int iters, const char* regexp,
1370  const StringPiece& text) {
1371  RE2 re(regexp);
1372  CHECK_EQ(re.error(), "");
1373  for (int i = 0; i < iters; i++) {
1374  StringPiece sp1;
1375  CHECK(RE2::PartialMatch(text, re, &sp1));
1376  }
1377 }
1378 
1380  PCRE re("");
1381  for (int i = 0; i < n; i++) {
1382  PCRE::PartialMatch("", re);
1383  }
1384 }
1385 
1387  RE2 re("");
1388  for (int i = 0; i < n; i++) {
1389  RE2::PartialMatch("", re);
1390  }
1391 }
1392 #ifdef USEPCRE
1393 BENCHMARK(EmptyPartialMatchPCRE)->ThreadRange(1, NumCPUs());
1394 #endif
1395 BENCHMARK(EmptyPartialMatchRE2)->ThreadRange(1, NumCPUs());
1396 
1398  PCRE re("abcdefg");
1399  for (int i = 0; i < n; i++) {
1400  PCRE::PartialMatch("abcdefg", re);
1401  }
1402 }
1403 
1405  RE2 re("abcdefg");
1406  for (int i = 0; i < n; i++) {
1407  RE2::PartialMatch("abcdefg", re);
1408  }
1409 }
1410 #ifdef USEPCRE
1411 BENCHMARK(SimplePartialMatchPCRE)->ThreadRange(1, NumCPUs());
1412 #endif
1413 BENCHMARK(SimplePartialMatchRE2)->ThreadRange(1, NumCPUs());
1414 
1416  "GET /asdfhjasdhfasdlfhasdflkjasdfkljasdhflaskdjhf"
1417  "alksdjfhasdlkfhasdlkjfhasdljkfhadsjklf HTTP/1.1";
1418 
1420  StringPiece a;
1421  PCRE re("(?-s)^(?:GET|POST) +([^ ]+) HTTP");
1422  for (int i = 0; i < n; i++) {
1424  }
1425 }
1426 
1427 void HTTPPartialMatchRE2(int n) {
1428  StringPiece a;
1429  RE2 re("(?-s)^(?:GET|POST) +([^ ]+) HTTP");
1430  for (int i = 0; i < n; i++) {
1431  RE2::PartialMatch(http_text, re, &a);
1432  }
1433 }
1434 
1435 #ifdef USEPCRE
1436 BENCHMARK(HTTPPartialMatchPCRE)->ThreadRange(1, NumCPUs());
1437 #endif
1438 BENCHMARK(HTTPPartialMatchRE2)->ThreadRange(1, NumCPUs());
1439 
1441  "GET /abc HTTP/1.1";
1442 
1444  StringPiece a;
1445  PCRE re("(?-s)^(?:GET|POST) +([^ ]+) HTTP");
1446  for (int i = 0; i < n; i++) {
1448  }
1449 }
1450 
1452  StringPiece a;
1453  RE2 re("(?-s)^(?:GET|POST) +([^ ]+) HTTP");
1454  for (int i = 0; i < n; i++) {
1456  }
1457 }
1458 
1459 #ifdef USEPCRE
1460 BENCHMARK(SmallHTTPPartialMatchPCRE)->ThreadRange(1, NumCPUs());
1461 #endif
1462 BENCHMARK(SmallHTTPPartialMatchRE2)->ThreadRange(1, NumCPUs());
1463 
1464 void DotMatchPCRE(int n) {
1465  StringPiece a;
1466  PCRE re("(?-s)^(.+)");
1467  for (int i = 0; i < n; i++) {
1469  }
1470 }
1471 
1472 void DotMatchRE2(int n) {
1473  StringPiece a;
1474  RE2 re("(?-s)^(.+)");
1475  for (int i = 0; i < n; i++) {
1476  RE2::PartialMatch(http_text, re, &a);
1477  }
1478 }
1479 
1480 #ifdef USEPCRE
1481 BENCHMARK(DotMatchPCRE)->ThreadRange(1, NumCPUs());
1482 #endif
1483 BENCHMARK(DotMatchRE2)->ThreadRange(1, NumCPUs());
1484 
1485 void ASCIIMatchPCRE(int n) {
1486  StringPiece a;
1487  PCRE re("(?-s)^([ -~]+)");
1488  for (int i = 0; i < n; i++) {
1490  }
1491 }
1492 
1493 void ASCIIMatchRE2(int n) {
1494  StringPiece a;
1495  RE2 re("(?-s)^([ -~]+)");
1496  for (int i = 0; i < n; i++) {
1497  RE2::PartialMatch(http_text, re, &a);
1498  }
1499 }
1500 
1501 #ifdef USEPCRE
1502 BENCHMARK(ASCIIMatchPCRE)->ThreadRange(1, NumCPUs());
1503 #endif
1504 BENCHMARK(ASCIIMatchRE2)->ThreadRange(1, NumCPUs());
1505 
1506 void FullMatchPCRE(int iter, int n, const char *regexp) {
1508  std::string s;
1509  MakeText(&s, n);
1510  s += "ABCDEFGHIJ";
1512  PCRE re(regexp);
1514  for (int i = 0; i < iter; i++)
1515  CHECK(PCRE::FullMatch(s, re));
1516  SetBenchmarkBytesProcessed(static_cast<int64_t>(iter)*n);
1517 }
1518 
1519 void FullMatchRE2(int iter, int n, const char *regexp) {
1521  std::string s;
1522  MakeText(&s, n);
1523  s += "ABCDEFGHIJ";
1525  RE2 re(regexp, RE2::Latin1);
1527  for (int i = 0; i < iter; i++)
1528  CHECK(RE2::FullMatch(s, re));
1529  SetBenchmarkBytesProcessed(static_cast<int64_t>(iter)*n);
1530 }
1531 
1532 void FullMatch_DotStar_CachedPCRE(int i, int n) { FullMatchPCRE(i, n, "(?s).*"); }
1533 void FullMatch_DotStar_CachedRE2(int i, int n) { FullMatchRE2(i, n, "(?s).*"); }
1534 
1535 void FullMatch_DotStarDollar_CachedPCRE(int i, int n) { FullMatchPCRE(i, n, "(?s).*$"); }
1536 void FullMatch_DotStarDollar_CachedRE2(int i, int n) { FullMatchRE2(i, n, "(?s).*$"); }
1537 
1538 void FullMatch_DotStarCapture_CachedPCRE(int i, int n) { FullMatchPCRE(i, n, "(?s)((.*)()()($))"); }
1539 void FullMatch_DotStarCapture_CachedRE2(int i, int n) { FullMatchRE2(i, n, "(?s)((.*)()()($))"); }
1540 
1541 #ifdef USEPCRE
1543 #endif
1545 
1546 #ifdef USEPCRE
1548 #endif
1550 
1551 #ifdef USEPCRE
1553 #endif
1555 
1556 void PossibleMatchRangeCommon(int iter, const char* regexp) {
1558  RE2 re(regexp);
1560  std::string min;
1561  std::string max;
1562  const int kMaxLen = 16;
1563  for (int i = 0; i < iter; i++) {
1564  CHECK(re.PossibleMatchRange(&min, &max, kMaxLen));
1565  }
1566 }
1567 
1569  PossibleMatchRangeCommon(i, ".*");
1570 }
1572  PossibleMatchRangeCommon(i, "^abc[def]?[gh]{1,2}.*");
1573 }
1575  PossibleMatchRangeCommon(i, "^some_random_prefix.*");
1576 }
1578  PossibleMatchRangeCommon(i, "^some_random_string$");
1579 }
1580 
1585 
1586 } // namespace re2
re2::FullMatchPCRE
void FullMatchPCRE(int iter, int n, const char *regexp)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:1506
re2::Parse_CachedSplitBig1_RE2
void Parse_CachedSplitBig1_RE2(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:618
StopBenchmarkTiming
void StopBenchmarkTiming()
Definition: bloaty/third_party/re2/util/benchmark.cc:51
re2::Parse1CachedNFA
ParseImpl Parse1CachedNFA
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:125
re2::Parse3OnePass
ParseImpl Parse3OnePass
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:129
re2::Parse3BitState
ParseImpl Parse3BitState
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:129
re2::Search_Hard_CachedRE2
void Search_Hard_CachedRE2(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:231
re2::Search_AltMatch_BitState
void Search_AltMatch_BitState(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:399
re2::Parse_Split_RE2
void Parse_Split_RE2(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:545
re2::Search_Parens_CachedDFA
void Search_Parens_CachedDFA(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:252
re2::SearchParse2CachedRE2
ParseImpl SearchParse2CachedRE2
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:136
SetBenchmarkItemsProcessed
void SetBenchmarkItemsProcessed(int n)
Definition: bloaty/third_party/re2/util/benchmark.cc:62
re2::RE2::FullMatch
static bool FullMatch(const StringPiece &text, const RE2 &re, A &&... a)
Definition: bloaty/third_party/re2/re2/re2.h:367
re2::SearchCachedPCRE
SearchImpl SearchCachedPCRE
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:118
re2::http_text
static std::string http_text
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:1415
re2::SimplifyRegexp
void SimplifyRegexp(int iters, const std::string &regexp)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:656
re2::Search_Digits_BitState
void Search_Digits_BitState(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:442
re2::Search_Digits_OnePass
void Search_Digits_OnePass(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:439
prog
char * prog
Definition: bloaty/third_party/zlib/contrib/untgz/untgz.c:125
re2::Parse1CachedRE2
ParseImpl Parse1CachedRE2
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:126
re2::Parse1CachedBacktrack
ParseImpl Parse1CachedBacktrack
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:127
re2::SearchParse2CachedPCRE
ParseImpl SearchParse2CachedPCRE
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:136
re2::Regexp::Decref
void Decref()
Definition: bloaty/third_party/re2/re2/regexp.cc:115
re2::Parse_CachedSplit_BitState
void Parse_CachedSplit_BitState(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:560
re2::NumCPUs
int NumCPUs()
Definition: re2/re2/testing/regexp_benchmark.cc:122
re2::Search_Fanout_CachedDFA
void Search_Fanout_CachedDFA(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:240
re2::SearchPhone_CachedPCRE
void SearchPhone_CachedPCRE(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:785
HARD
#define HARD
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:182
re2::Parse1PCRE
ParseImpl Parse1PCRE
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:123
re2::NullWalkRegexp
void NullWalkRegexp(int iters, const std::string &regexp)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:667
re2::Search_Success1_NFA
void Search_Success1_NFA(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:356
re2::Regexp::NullWalk
void NullWalk()
Definition: bloaty/third_party/re2/re2/testing/null_walker.cc:41
re2::Search_Success_OnePass
void Search_Success_OnePass(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:328
re2::FullMatch_DotStar_CachedPCRE
void FullMatch_DotStar_CachedPCRE(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:1532
re2::Parse_CachedSplitBig1_PCRE
void Parse_CachedSplitBig1_PCRE(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:617
re2::Search_Success1_BitState
void Search_Success1_BitState(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:359
re2::Prog::kFullMatch
@ kFullMatch
Definition: bloaty/third_party/re2/re2/prog.h:195
re2::Parse3CachedRE2
ParseImpl Parse3CachedRE2
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:133
re2::Search_Hard_CachedDFA
void Search_Hard_CachedDFA(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:228
DEFINE_string
DEFINE_string(compile_regexp, "(.*)-(\\d+)-of-(\\d+)", "regexp for compile benchmarks")
re2::Parse_DigitDs_PCRE
void Parse_DigitDs_PCRE(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:503
re2::RE2::PossibleMatchRange
bool PossibleMatchRange(std::string *min, std::string *max, int maxlen) const
Definition: bloaty/third_party/re2/re2/re2.cc:511
re2::Search_Parens_CachedRE2
void Search_Parens_CachedRE2(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:255
re2::Parse_CachedDigits_OnePass
void Parse_CachedDigits_OnePass(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:479
re2::Prog::Inst
Definition: bloaty/third_party/re2/re2/prog.h:62
re2::Prog::Anchor
Anchor
Definition: bloaty/third_party/re2/re2/prog.h:175
re2::EmptyPartialMatchPCRE
void EmptyPartialMatchPCRE(int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:1379
re2::Parse1Split
void Parse1Split(int iters, void(*parse1)(int, const char *, const StringPiece &))
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:535
re2::Regexp
Definition: bloaty/third_party/re2/re2/regexp.h:274
re2::Parse1BitState
ParseImpl Parse1BitState
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:122
re2::PCRE::PartialMatch
static const PartialMatchFunctor PartialMatch
Definition: bloaty/third_party/re2/util/pcre.h:313
CHECK_EQ
#define CHECK_EQ(a, b)
Definition: bloaty/third_party/protobuf/third_party/benchmark/src/check.h:65
re2::SearchSuccess
void SearchSuccess(int iters, int nbytes, const char *regexp, SearchImpl *search)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:312
testing::internal::string
::std::string string
Definition: bloaty/third_party/protobuf/third_party/googletest/googletest/include/gtest/internal/gtest-port.h:881
re2::Parse_SplitHard_BitState
void Parse_SplitHard_BitState(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:582
re2::SmallHTTPPartialMatchRE2
void SmallHTTPPartialMatchRE2(int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:1451
re2::Search_BigFixed_CachedRE2
void Search_BigFixed_CachedRE2(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:281
re2::Parse_CachedSplitHard_RE2
void Parse_CachedSplitHard_RE2(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:593
re2::Search_Success_CachedOnePass
void Search_Success_CachedOnePass(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:342
re2::SimplePartialMatchPCRE
void SimplePartialMatchPCRE(int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:1397
re2::ASCIIMatchPCRE
void ASCIIMatchPCRE(int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:1485
re2::Parse_Digits_Backtrack
void Parse_Digits_Backtrack(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:466
u
OPENSSL_EXPORT pem_password_cb void * u
Definition: pem.h:351
re2::PCRE::error
const std::string & error() const
Definition: bloaty/third_party/re2/util/pcre.h:229
EASY0
#define EASY0
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:171
re2::Parse_DigitDs_BitState
void Parse_DigitDs_BitState(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:506
re2::RE2::error
const std::string & error() const
Definition: bloaty/third_party/re2/re2/re2.h:275
re2::Test
void Test()
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:31
re2::Parse1CachedOnePass
ParseImpl Parse1CachedOnePass
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:125
re2
Definition: bloaty/third_party/re2/re2/bitmap256.h:17
re2::Search_Success1_PCRE
void Search_Success1_PCRE(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:357
re2::Search_AltMatch_NFA
void Search_AltMatch_NFA(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:397
a
int a
Definition: abseil-cpp/absl/container/internal/hash_policy_traits_test.cc:88
re2::Parse_Split_OnePass
void Parse_Split_OnePass(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:543
re2::Regexp::CompileToProg
Prog * CompileToProg(int64_t max_mem)
Definition: bloaty/third_party/re2/re2/compile.cc:1220
re2::Parse_CachedSplit_PCRE
void Parse_CachedSplit_PCRE(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:558
re2::SearchDigits
void SearchDigits(int iters, SearchImpl *search)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:430
re2::Search_AltMatch_CachedRE2
void Search_AltMatch_CachedRE2(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:417
re2::Parse_CachedDigitDs_BitState
void Parse_CachedDigitDs_BitState(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:522
re2::Search_Easy0_CachedRE2
void Search_Easy0_CachedRE2(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:195
BenchmarkMemoryUsage
void BenchmarkMemoryUsage()
Definition: bloaty/third_party/re2/util/benchmark.cc:66
re2::Parse_SplitHard_RE2
void Parse_SplitHard_RE2(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:581
re2::SearchCachedBitState
SearchImpl SearchCachedBitState
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:117
re2::Search
void Search(int iters, int nbytes, const char *regexp, SearchImpl *search)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:159
re2::Parse_CachedSplitHard_Backtrack
void Parse_CachedSplitHard_Backtrack(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:595
re2::Parse_CachedDigitDs_NFA
void Parse_CachedDigitDs_NFA(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:517
re2::Parse_Digits_PCRE
void Parse_Digits_PCRE(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:464
re2::Parse3CachedOnePass
ParseImpl Parse3CachedOnePass
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:132
re2::Parse_CachedDigitDs_PCRE
void Parse_CachedDigitDs_PCRE(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:519
re2::MakeText
void MakeText(std::string *text, int nbytes)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:144
re2::Search_Fanout_CachedNFA
void Search_Fanout_CachedNFA(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:241
re2::Parse_CachedDigits_BitState
void Parse_CachedDigits_BitState(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:483
re2::SearchCachedDFA
SearchImpl SearchCachedDFA
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:117
re2::BM_CompileByteMap
void BM_CompileByteMap(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:754
python_utils.port_server.stderr
stderr
Definition: port_server.py:51
re2::CompileRegexp
void CompileRegexp(int iters, const std::string &regexp)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:690
re2::CompileByteMap
void CompileByteMap(int iters, const std::string &regexp)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:712
re2::Search_Success1_CachedRE2
void Search_Success1_CachedRE2(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:372
re2::SimplePartialMatchRE2
void SimplePartialMatchRE2(int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:1404
re2::Parse_CachedDigits_Backtrack
void Parse_CachedDigits_Backtrack(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:482
re2::RE2::FindAndConsume
static bool FindAndConsume(StringPiece *input, const RE2 &re, A &&... a)
Definition: bloaty/third_party/re2/re2/re2.h:392
testing::MallocCounter::PeakHeapGrowth
long long PeakHeapGrowth()
Definition: bloaty/third_party/re2/util/test.h:53
re2::Parse_CachedDigitDs_OnePass
void Parse_CachedDigitDs_OnePass(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:518
re2::Search_Success_NFA
void Search_Success_NFA(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:325
re2::Search_AltMatch_CachedBitState
void Search_AltMatch_CachedBitState(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:415
re2::BM_RE2_Compile
void BM_RE2_Compile(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:758
re2::smallhttp_text
static std::string smallhttp_text
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:1440
re2::SearchBigFixed
void SearchBigFixed(int iters, int nbytes, SearchImpl *search)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:264
re2::PCRE::FullMatch
static const FullMatchFunctor FullMatch
Definition: bloaty/third_party/re2/util/pcre.h:289
re2::SearchNFA
SearchImpl SearchNFA
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:115
search
Definition: search.py:1
re2::ASCIIMatchRE2
void ASCIIMatchRE2(int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:1493
re2::ParseImpl
void ParseImpl(int iters, const char *regexp, const StringPiece &text)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:120
re2::CompileToProg
void CompileToProg(int iters, const std::string &regexp)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:701
gen_server_registered_method_bad_client_test_body.text
def text
Definition: gen_server_registered_method_bad_client_test_body.py:50
re2::SearchCachedRE2
SearchImpl SearchCachedRE2
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:118
re2::Search_BigFixed_CachedDFA
void Search_BigFixed_CachedDFA(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:278
re2::Parse1Backtrack
ParseImpl Parse1Backtrack
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:124
re2::FullMatch_DotStarCapture_CachedPCRE
void FullMatch_DotStarCapture_CachedPCRE(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:1538
re2::MemoryUsage
void MemoryUsage()
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:50
re2::Parse3RE2
ParseImpl Parse3RE2
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:130
re2::ParseRegexp
void ParseRegexp(int iters, const std::string &regexp)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:648
int64_t
signed __int64 int64_t
Definition: stdint-msvc2008.h:89
re2::BENCHMARK_RANGE
BENCHMARK_RANGE(Search_Easy0_CachedDFA, 8, 16<< 20) -> ThreadRange(1, NumCPUs())
max
int max
Definition: bloaty/third_party/zlib/examples/enough.c:170
python_utils.jobset.INFO
INFO
Definition: jobset.py:111
re2::BM_CompileToProg
void BM_CompileToProg(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:753
re2::Search_Easy1_CachedNFA
void Search_Easy1_CachedNFA(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:205
LOG
#define LOG(severity)
Definition: bloaty/third_party/re2/util/logging.h:53
re2::Parse3CachedNFA
ParseImpl Parse3CachedNFA
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:132
re2::SmallHTTPPartialMatchPCRE
void SmallHTTPPartialMatchPCRE(int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:1443
re2::Search_AltMatch_CachedPCRE
void Search_AltMatch_CachedPCRE(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:416
re2::Parse_DigitDs_NFA
void Parse_DigitDs_NFA(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:501
re2::Search_AltMatch_CachedNFA
void Search_AltMatch_CachedNFA(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:413
re2::FullMatchRE2
void FullMatchRE2(int iter, int n, const char *regexp)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:1519
re2::SearchOnePass
SearchImpl SearchOnePass
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:115
re2::SearchAltMatch
void SearchAltMatch(int iters, int nbytes, SearchImpl *search)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:386
re2::PossibleMatchRange_Prefix
void PossibleMatchRange_Prefix(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:1574
re2::Parse_CachedSplit_RE2
void Parse_CachedSplit_RE2(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:559
re2::Search_AltMatch_DFA
void Search_AltMatch_DFA(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:396
re2::Search_BigFixed_CachedNFA
void Search_BigFixed_CachedNFA(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:279
re2::SearchPhone
void SearchPhone(int iters, int nbytes, ParseImpl *search)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:774
re2::Parse_CachedSplitHard_NFA
void Parse_CachedSplitHard_NFA(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:591
re2::PCRE::UTF8
@ UTF8
Definition: bloaty/third_party/re2/util/pcre.h:206
search.search
def search(target, ideal_distance, stop_event, maximum_hashes, interesting_hamming_distance=None)
Definition: search.py:99
re2::Regexp::Parse
static Regexp * Parse(const StringPiece &s, ParseFlags flags, RegexpStatus *status)
Definition: bloaty/third_party/re2/re2/parse.cc:2200
CHECK
#define CHECK(x)
Definition: bloaty/third_party/protobuf/php/ext/google/protobuf/upb.c:8085
re2::Search_Success_PCRE
void Search_Success_PCRE(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:326
re2::Search_Digits_NFA
void Search_Digits_NFA(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:438
re2::Parse_SplitHard_NFA
void Parse_SplitHard_NFA(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:579
re2::BM_Regexp_Parse
void BM_Regexp_Parse(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:751
re2::Parse1SplitBig1
void Parse1SplitBig1(int iters, void(*run)(int, const char *, const StringPiece &))
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:607
re2::Search_Medium_CachedNFA
void Search_Medium_CachedNFA(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:217
re2::Prog::kAnchored
@ kAnchored
Definition: bloaty/third_party/re2/re2/prog.h:177
re2::Parse_CachedSplitHard_BitState
void Parse_CachedSplitHard_BitState(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:594
re2::BM_PCRE_Compile
void BM_PCRE_Compile(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:750
re2::Search_Parens_CachedPCRE
void Search_Parens_CachedPCRE(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:254
re2::RE2::PartialMatch
static bool PartialMatch(const StringPiece &text, const RE2 &re, A &&... a)
Definition: bloaty/third_party/re2/re2/re2.h:374
re2::Parse_Split_BitState
void Parse_Split_BitState(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:546
re2::HTTPPartialMatchRE2
void HTTPPartialMatchRE2(int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:1427
re2::SearchBitState
SearchImpl SearchBitState
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:115
re2::Search_Fanout_CachedPCRE
void Search_Fanout_CachedPCRE(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:242
re2::Parse3PCRE
ParseImpl Parse3PCRE
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:130
re2::Search_Success1_CachedDFA
void Search_Success1_CachedDFA(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:369
re2::Parse1CachedBitState
ParseImpl Parse1CachedBitState
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:125
re2::Search_Digits_RE2
void Search_Digits_RE2(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:441
min
#define min(a, b)
Definition: qsort.h:83
re2::RE2::Latin1
@ Latin1
Definition: bloaty/third_party/re2/re2/re2.h:249
re2::FullMatch_DotStarDollar_CachedPCRE
void FullMatch_DotStarDollar_CachedPCRE(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:1535
re2::Search_BigFixed_CachedPCRE
void Search_BigFixed_CachedPCRE(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:280
re2::RE2
Definition: bloaty/third_party/re2/re2/re2.h:211
re2::Search_Success_CachedNFA
void Search_Success_CachedNFA(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:339
re2::Search_Parens_CachedNFA
void Search_Parens_CachedNFA(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:253
re2::Search_Success1_RE2
void Search_Success1_RE2(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:358
re2::PossibleMatchRange_Trivial
void PossibleMatchRange_Trivial(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:1568
re2::FullMatch_DotStarDollar_CachedRE2
void FullMatch_DotStarDollar_CachedRE2(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:1536
re2::SearchRE2
SearchImpl SearchRE2
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:116
n
int n
Definition: abseil-cpp/absl/container/btree_test.cc:1080
stdint.h
re2::Search_Medium_CachedDFA
void Search_Medium_CachedDFA(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:216
re2::Search_Success_CachedDFA
void Search_Success_CachedDFA(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:338
re2::Parse1RE2
ParseImpl Parse1RE2
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:123
re2::Parse3NFA
ParseImpl Parse3NFA
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:129
re2::Search_Medium_CachedRE2
void Search_Medium_CachedRE2(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:219
re2::Search_Success_CachedRE2
void Search_Success_CachedRE2(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:341
re2::DotMatchRE2
void DotMatchRE2(int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:1472
re2::Parse_Digits_BitState
void Parse_Digits_BitState(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:467
re2::BM_Regexp_Compile
void BM_Regexp_Compile(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:755
re2::Parse_CachedSplit_NFA
void Parse_CachedSplit_NFA(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:556
MEDIUM
#define MEDIUM
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:177
ares::byte
unsigned char byte
Definition: ares-test.h:33
re2::Parse1NFA
ParseImpl Parse1NFA
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:122
re2::Parse3Backtrack
ParseImpl Parse3Backtrack
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:131
re2::Parse_Digits_NFA
void Parse_Digits_NFA(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:462
re2::Parse_SplitHard_PCRE
void Parse_SplitHard_PCRE(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:580
re2::Search_Success1_CachedNFA
void Search_Success1_CachedNFA(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:370
re2::Search_AltMatch_CachedDFA
void Search_AltMatch_CachedDFA(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:412
re2::Search_AltMatch_CachedOnePass
void Search_AltMatch_CachedOnePass(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:414
SetBenchmarkBytesProcessed
void SetBenchmarkBytesProcessed(int64_t x)
Definition: bloaty/third_party/re2/util/benchmark.cc:47
re2::FullMatch_DotStarCapture_CachedRE2
void FullMatch_DotStarCapture_CachedRE2(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:1539
re2::FullMatch_DotStar_CachedRE2
void FullMatch_DotStar_CachedRE2(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:1533
client.run
def run()
Definition: examples/python/async_streaming/client.py:109
re2::Parse_DigitDs_OnePass
void Parse_DigitDs_OnePass(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:502
re2::SearchPhone_CachedRE2
void SearchPhone_CachedRE2(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:788
re2::Search_Hard_CachedPCRE
void Search_Hard_CachedPCRE(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:230
re2::Search_Easy1_CachedPCRE
void Search_Easy1_CachedPCRE(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:206
re2::Parse3DigitDs
void Parse3DigitDs(int iters, void(*parse3)(int, const char *, const StringPiece &))
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:494
re2::PCRE
Definition: bloaty/third_party/re2/util/pcre.h:186
re2::Parse_Split_PCRE
void Parse_Split_PCRE(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:544
re2::Parse_CachedSplitBig2_PCRE
void Parse_CachedSplitBig2_PCRE(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:637
re2::Parse3CachedPCRE
ParseImpl Parse3CachedPCRE
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:133
re2::Prog
Definition: bloaty/third_party/re2/re2/prog.h:56
re2::Regexp::Simplify
Regexp * Simplify()
Definition: bloaty/third_party/re2/re2/simplify.cc:179
PARENS
#define PARENS
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:189
FANOUT
#define FANOUT
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:186
re2::SearchParse1CachedRE2
ParseImpl SearchParse1CachedRE2
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:138
re2::Parse_CachedDigitDs_RE2
void Parse_CachedDigitDs_RE2(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:520
re2::Search_Easy1_CachedDFA
void Search_Easy1_CachedDFA(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:204
re2::Parse_CachedDigits_PCRE
void Parse_CachedDigits_PCRE(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:480
re2::Parse_DigitDs_RE2
void Parse_DigitDs_RE2(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:504
testing::MallocCounter::Reset
void Reset()
Definition: bloaty/third_party/re2/util/test.h:54
re2::RunBuild
void RunBuild(int iters, const std::string &regexp, void(*run)(int, const std::string &))
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:738
re2::Parse_Digits_OnePass
void Parse_Digits_OnePass(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:463
StartBenchmarkTiming
void StartBenchmarkTiming()
Definition: bloaty/third_party/re2/util/benchmark.cc:57
testing::MallocCounter
Definition: bloaty/third_party/re2/util/test.h:48
re2::PossibleMatchRange_Complex
void PossibleMatchRange_Complex(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:1571
re2::Search_Success1_DFA
void Search_Success1_DFA(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:355
re2::Search_Success1_CachedPCRE
void Search_Success1_CachedPCRE(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:371
re2::Parse_Split_NFA
void Parse_Split_NFA(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:542
re2::SearchPCRE
SearchImpl SearchPCRE
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:116
re2::SearchCachedOnePass
SearchImpl SearchCachedOnePass
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:117
re2::BENCHMARK
BENCHMARK(Search_Digits_DFA) -> ThreadRange(1, NumCPUs())
re2::Prog::kUnanchored
@ kUnanchored
Definition: bloaty/third_party/re2/re2/prog.h:176
re2::Search_Fanout_CachedRE2
void Search_Fanout_CachedRE2(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:243
MallocCounter
testing::MallocCounter MallocCounter
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:27
re2::Search_Success_CachedPCRE
void Search_Success_CachedPCRE(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:340
re2::Parse_CachedDigits_RE2
void Parse_CachedDigits_RE2(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:481
testing::MallocCounter::HeapGrowth
long long HeapGrowth()
Definition: bloaty/third_party/re2/util/test.h:52
re2::Parse1OnePass
ParseImpl Parse1OnePass
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:122
re2::CompileRE2
void CompileRE2(int iters, const std::string &regexp)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:731
re2::Parse_CachedDigitDs_Backtrack
void Parse_CachedDigitDs_Backtrack(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:521
re2::Parse3CachedBitState
ParseImpl Parse3CachedBitState
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:132
re2::FindAndConsume
void FindAndConsume(int iters, int nbytes)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:292
re2::Search_AltMatch_OnePass
void Search_AltMatch_OnePass(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:398
testing::MallocCounter::THIS_THREAD_ONLY
static const int THIS_THREAD_ONLY
Definition: bloaty/third_party/re2/util/test.h:51
re2::Prog::kFirstMatch
@ kFirstMatch
Definition: bloaty/third_party/re2/re2/prog.h:193
re2::CompilePCRE
void CompilePCRE(int iters, const std::string &regexp)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:724
re2::BM_Regexp_Simplify
void BM_Regexp_Simplify(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:752
re2::Parse3CachedBacktrack
ParseImpl Parse3CachedBacktrack
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:134
re2::Parse_CachedDigits_NFA
void Parse_CachedDigits_NFA(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:478
re2::PossibleMatchRange_NoProg
void PossibleMatchRange_NoProg(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:1577
re2::Search_Hard_CachedNFA
void Search_Hard_CachedNFA(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:229
re2::HTTPPartialMatchPCRE
void HTTPPartialMatchPCRE(int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:1419
re2::Search_Easy1_CachedRE2
void Search_Easy1_CachedRE2(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:207
re2::Parse_CachedSplitBig2_RE2
void Parse_CachedSplitBig2_RE2(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:638
re2::SearchImpl
void SearchImpl(int iters, const char *regexp, const StringPiece &text, Prog::Anchor anchor, bool expect_match)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:112
iter
Definition: test_winkernel.cpp:47
re2::DotMatchPCRE
void DotMatchPCRE(int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:1464
re2::Search_Success_DFA
void Search_Success_DFA(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:324
re2::EmptyPartialMatchRE2
void EmptyPartialMatchRE2(int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:1386
re2::Search_AltMatch_PCRE
void Search_AltMatch_PCRE(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:400
re2::SearchDFA
SearchImpl SearchDFA
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:115
re2::PossibleMatchRangeCommon
void PossibleMatchRangeCommon(int iter, const char *regexp)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:1556
re2::Search_Digits_PCRE
void Search_Digits_PCRE(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:440
re2::StringPiece
Definition: bloaty/third_party/re2/re2/stringpiece.h:39
re2::Search_Easy0_CachedNFA
void Search_Easy0_CachedNFA(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:193
re2::SimplifyCompileRegexp
void SimplifyCompileRegexp(int iters, const std::string &regexp)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:676
re2::Parse3Digits
void Parse3Digits(int iters, void(*parse3)(int, const char *, const StringPiece &))
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:455
re2::Parse_CachedSplitHard_PCRE
void Parse_CachedSplitHard_PCRE(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:592
re2::Parse1CachedPCRE
ParseImpl Parse1CachedPCRE
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:126
re2::Parse1SplitBig2
void Parse1SplitBig2(int iters, void(*run)(int, const char *, const StringPiece &))
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:627
re2::BM_Regexp_SimplifyCompile
void BM_Regexp_SimplifyCompile(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:756
re2::Search_Medium_CachedPCRE
void Search_Medium_CachedPCRE(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:218
re2::SearchCachedNFA
SearchImpl SearchCachedNFA
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:117
re2::Search_Success1_CachedBitState
void Search_Success1_CachedBitState(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:373
re2::Search_Digits_DFA
void Search_Digits_DFA(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:437
re2::Search_Easy0_CachedPCRE
void Search_Easy0_CachedPCRE(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:194
re2::Search_AltMatch_RE2
void Search_AltMatch_RE2(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:401
re2::Parse_DigitDs_Backtrack
void Parse_DigitDs_Backtrack(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:505
i
uint64_t i
Definition: abseil-cpp/absl/container/btree_benchmark.cc:230
EASY1
#define EASY1
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:172
re2::Parse_Digits_RE2
void Parse_Digits_RE2(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:465
LL
#define LL(x)
re2::SearchParse1CachedPCRE
ParseImpl SearchParse1CachedPCRE
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:138
re2::Parse1SplitHard
void Parse1SplitHard(int iters, void(*run)(int, const char *, const StringPiece &))
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:572
re2::Regexp::LikePerl
@ LikePerl
Definition: bloaty/third_party/re2/re2/regexp.h:312
re2::Parse_CachedSplit_OnePass
void Parse_CachedSplit_OnePass(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:557
re2::Search_Success_RE2
void Search_Success_RE2(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:327
re2::BM_Regexp_NullWalk
void BM_Regexp_NullWalk(int i)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:757
re2::Search_Easy0_CachedDFA
void Search_Easy0_CachedDFA(int i, int n)
Definition: bloaty/third_party/re2/re2/testing/regexp_benchmark.cc:192


grpc
Author(s):
autogenerated on Fri May 16 2025 03:00:02