Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(129)

Issue 2793993002: [subresource_filter] Replace KMP by std::search. (Closed)

Created:
3 years, 8 months ago by pkalinnikov
Modified:
3 years, 8 months ago
CC:
chromium-reviews, fuzzing_chromium.org, subresource-filter-reviews_chromium.org
Target Ref:
refs/heads/master
Project:
chromium
Visibility:
Public.

Description

[subresource_filter] Replace KMP by std::search. This CL replaces Knuth-Morris-Pratt algorithm in IndexedRuleset with a naive string searching algorithm, i.e. base::StringPiece::find/std::search. This reduces the size of the IndexedRuleset by 500+ kB, because currently that much space is needed to store failure functions for all the (sub-)patterns. This also improves performance of IndexedRuleset by 40%, as measured by stress-testing. This is explained as follows: * The subresource_filter's patterns are inherently simple. In the worst case of a URL the matching will make 4-5 comparisons per character. * The real world URLs are usually not worst-case, and the real average number drops down to 1-2 comparisons per character. BUG=708458 Review-Url: https://codereview.chromium.org/2793993002 Cr-Commit-Position: refs/heads/master@{#462131} Committed: https://chromium.googlesource.com/chromium/src/+/35d1881dac3470d2ed891feae0c1cfcf30025a0b

Patch Set 1 #

Patch Set 2 : Clean up for review. #

Patch Set 3 : Fix tests. #

Total comments: 17

Patch Set 4 : Address comments from csharrison@ #

Total comments: 35

Patch Set 5 : Address comments. #

Patch Set 6 : Clean up. #

Total comments: 9

Patch Set 7 : Final clean up. #

Patch Set 8 : Fix DCHECK. #

Unified diffs Side-by-side diffs Delta from patch set Stats (+356 lines, -1173 lines) Patch
M components/subresource_filter/core/browser/BUILD.gn View 1 2 1 chunk +1 line, -0 lines 0 comments Download
M components/subresource_filter/core/browser/ruleset_service_unittest.cc View 1 2 3 4 2 chunks +6 lines, -5 lines 0 comments Download
M components/subresource_filter/core/common/BUILD.gn View 3 chunks +1 line, -4 lines 0 comments Download
M components/subresource_filter/core/common/flat/rules.fbs View 1 chunk +0 lines, -16 lines 0 comments Download
M components/subresource_filter/core/common/fuzzy_pattern_matching.h View 1 2 3 4 5 6 2 chunks +5 lines, -96 lines 0 comments Download
M components/subresource_filter/core/common/fuzzy_pattern_matching.cc View 1 2 3 4 2 chunks +21 lines, -0 lines 0 comments Download
M components/subresource_filter/core/common/fuzzy_pattern_matching_unittest.cc View 1 2 3 4 5 6 4 chunks +26 lines, -23 lines 0 comments Download
M components/subresource_filter/core/common/indexed_ruleset.cc View 1 7 chunks +9 lines, -32 lines 0 comments Download
M components/subresource_filter/core/common/indexed_ruleset_unittest.cc View 2 chunks +7 lines, -8 lines 0 comments Download
D components/subresource_filter/core/common/knuth_morris_pratt.h View 1 chunk +0 lines, -249 lines 0 comments Download
D components/subresource_filter/core/common/knuth_morris_pratt_unittest.cc View 1 chunk +0 lines, -218 lines 0 comments Download
M components/subresource_filter/core/common/test_ruleset_creator.h View 1 2 3 4 1 chunk +2 lines, -0 lines 0 comments Download
M components/subresource_filter/core/common/test_ruleset_creator.cc View 1 2 3 4 3 chunks +10 lines, -8 lines 0 comments Download
M components/subresource_filter/core/common/test_ruleset_utils.h View 1 2 3 4 1 chunk +5 lines, -0 lines 0 comments Download
M components/subresource_filter/core/common/unindexed_ruleset_unittest.cc View 1 chunk +5 lines, -5 lines 0 comments Download
M components/subresource_filter/core/common/url_pattern.h View 1 2 3 4 3 chunks +34 lines, -8 lines 0 comments Download
M components/subresource_filter/core/common/url_pattern.cc View 1 2 3 4 5 6 7 2 chunks +195 lines, -15 lines 0 comments Download
D components/subresource_filter/core/common/url_pattern_matching.h View 1 chunk +0 lines, -277 lines 0 comments Download
D components/subresource_filter/core/common/url_pattern_matching_unittest.cc View 1 chunk +0 lines, -152 lines 0 comments Download
A + components/subresource_filter/core/common/url_pattern_unittest.cc View 1 2 3 4 chunks +29 lines, -57 lines 0 comments Download

Messages

Total messages: 56 (38 generated)
pkalinnikov
PTAL. https://codereview.chromium.org/2793993002/diff/60001/components/subresource_filter/core/common/url_pattern_unittest.cc File components/subresource_filter/core/common/url_pattern_unittest.cc (right): https://codereview.chromium.org/2793993002/diff/60001/components/subresource_filter/core/common/url_pattern_unittest.cc#newcode7 components/subresource_filter/core/common/url_pattern_unittest.cc:7: #include <vector> nit: Not used.
3 years, 8 months ago (2017-04-04 10:06:48 UTC) #15
engedy
Charlie, do you want to take a first look?
3 years, 8 months ago (2017-04-04 12:29:32 UTC) #18
Charlie Harrison
On 2017/04/04 12:29:32, engedy wrote: > Charlie, do you want to take a first look? ...
3 years, 8 months ago (2017-04-04 12:59:17 UTC) #19
Charlie Harrison
It looks pretty good to me, just nits and a few requests for comments. Overall ...
3 years, 8 months ago (2017-04-04 13:58:26 UTC) #20
pkalinnikov
Thank you Charlie! Addressed all your comments. Feel free to make another round, or to ...
3 years, 8 months ago (2017-04-04 16:42:59 UTC) #23
Charlie Harrison
LGTM % nit assuming engedy is happy https://codereview.chromium.org/2793993002/diff/60001/components/subresource_filter/core/common/url_pattern.cc File components/subresource_filter/core/common/url_pattern.cc (right): https://codereview.chromium.org/2793993002/diff/60001/components/subresource_filter/core/common/url_pattern.cc#newcode176 components/subresource_filter/core/common/url_pattern.cc:176: base::StringPiece subpattern ...
3 years, 8 months ago (2017-04-04 16:49:40 UTC) #24
engedy
LGTM % comments, thanks! https://codereview.chromium.org/2793993002/diff/80001/components/subresource_filter/core/common/test_ruleset_creator.cc File components/subresource_filter/core/common/test_ruleset_creator.cc (right): https://codereview.chromium.org/2793993002/diff/80001/components/subresource_filter/core/common/test_ruleset_creator.cc#newcode124 components/subresource_filter/core/common/test_ruleset_creator.cc:124: CreateRulesetWithRules({suffix_rule}, test_unindexed_ruleset); nit: Enclose this ...
3 years, 8 months ago (2017-04-05 10:55:11 UTC) #28
engedy
Also, I find it hard to believe the 500+ Mb savings in the CL description. ...
3 years, 8 months ago (2017-04-05 10:57:13 UTC) #29
engedy
https://codereview.chromium.org/2793993002/diff/80001/components/subresource_filter/core/common/url_pattern_unittest.cc File components/subresource_filter/core/common/url_pattern_unittest.cc (right): https://codereview.chromium.org/2793993002/diff/80001/components/subresource_filter/core/common/url_pattern_unittest.cc#newcode28 components/subresource_filter/core/common/url_pattern_unittest.cc:28: {{"", kBoundary, kAnchorNone}, "http://ex.com/", true}, nit: Could you please ...
3 years, 8 months ago (2017-04-05 11:40:30 UTC) #30
pkalinnikov
Addressed all comments, thanks! Balazs, can you make a final round? https://codereview.chromium.org/2793993002/diff/80001/components/subresource_filter/core/common/test_ruleset_creator.cc File components/subresource_filter/core/common/test_ruleset_creator.cc (right): ...
3 years, 8 months ago (2017-04-05 13:29:22 UTC) #36
pkalinnikov
https://codereview.chromium.org/2793993002/diff/120001/components/subresource_filter/core/common/fuzzy_pattern_matching_unittest.cc File components/subresource_filter/core/common/fuzzy_pattern_matching_unittest.cc (right): https://codereview.chromium.org/2793993002/diff/120001/components/subresource_filter/core/common/fuzzy_pattern_matching_unittest.cc#newcode60 components/subresource_filter/core/common/fuzzy_pattern_matching_unittest.cc:60: TEST(FuzzyPatternMatchingTest, AllOccurrences) { nit: Add "SubresourceFilter" prefix. https://codereview.chromium.org/2793993002/diff/120001/components/subresource_filter/core/common/fuzzy_pattern_matching_unittest.cc#newcode97 components/subresource_filter/core/common/fuzzy_pattern_matching_unittest.cc:97: ...
3 years, 8 months ago (2017-04-05 13:30:57 UTC) #37
engedy
LGTM % one comment and one nit. https://codereview.chromium.org/2793993002/diff/80001/components/subresource_filter/core/common/test_ruleset_utils.h File components/subresource_filter/core/common/test_ruleset_utils.h (right): https://codereview.chromium.org/2793993002/diff/80001/components/subresource_filter/core/common/test_ruleset_utils.h#newcode18 components/subresource_filter/core/common/test_ruleset_utils.h:18: // Creates ...
3 years, 8 months ago (2017-04-05 13:41:34 UTC) #38
pkalinnikov
Addressed, thanks! https://codereview.chromium.org/2793993002/diff/120001/components/subresource_filter/core/common/fuzzy_pattern_matching.h File components/subresource_filter/core/common/fuzzy_pattern_matching.h (right): https://codereview.chromium.org/2793993002/diff/120001/components/subresource_filter/core/common/fuzzy_pattern_matching.h#newcode61 components/subresource_filter/core/common/fuzzy_pattern_matching.h:61: // the |text|, starting |from| the specified ...
3 years, 8 months ago (2017-04-05 13:48:47 UTC) #41
engedy
https://codereview.chromium.org/2793993002/diff/120001/components/subresource_filter/core/common/url_pattern.cc File components/subresource_filter/core/common/url_pattern.cc (right): https://codereview.chromium.org/2793993002/diff/120001/components/subresource_filter/core/common/url_pattern.cc#newcode107 components/subresource_filter/core/common/url_pattern.cc:107: if (position == base::StringPiece::npos || On 2017/04/05 13:48:47, pkalinnikov ...
3 years, 8 months ago (2017-04-05 13:55:40 UTC) #42
pkalinnikov
Fixed DCHECK condition. Balazs, can I submit?
3 years, 8 months ago (2017-04-05 15:53:08 UTC) #47
engedy
Yeah, go ahead.
3 years, 8 months ago (2017-04-05 16:20:28 UTC) #48
commit-bot: I haz the power
CQ is trying da patch. Follow status at https://chromium-cq-status.appspot.com/v2/patch-status/codereview.chromium.org/2793993002/160001
3 years, 8 months ago (2017-04-05 17:19:03 UTC) #53
commit-bot: I haz the power
3 years, 8 months ago (2017-04-05 17:29:14 UTC) #56
Message was sent while issue was closed.
Committed patchset #8 (id:160001) as
https://chromium.googlesource.com/chromium/src/+/35d1881dac3470d2ed891feae0c1...

Powered by Google App Engine
This is Rietveld 408576698