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