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

Side by Side Diff: components/visitedlink/test/visitedlink_perftest.cc

Issue 2358063002: Preparing components_perftests (Closed)
Patch Set: minimal chages Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <algorithm> 5 #include <algorithm>
6 #include <string> 6 #include <string>
7 #include <vector> 7 #include <vector>
8 8
9 #include "base/files/file_path.h" 9 #include "base/files/file_path.h"
10 #include "base/files/file_util.h" 10 #include "base/files/file_util.h"
11 #include "base/strings/stringprintf.h" 11 #include "base/strings/stringprintf.h"
12 #include "base/test/perf_log.h"
13 #include "base/test/perf_time_logger.h"
14 #include "base/test/test_file_util.h" 12 #include "base/test/test_file_util.h"
15 #include "base/timer/elapsed_timer.h" 13 #include "base/timer/elapsed_timer.h"
16 #include "components/visitedlink/browser/visitedlink_master.h" 14 #include "components/visitedlink/browser/visitedlink_master.h"
17 #include "content/public/test/test_browser_thread_bundle.h" 15 #include "content/public/test/test_browser_thread_bundle.h"
18 #include "content/public/test/test_utils.h" 16 #include "content/public/test/test_utils.h"
19 #include "testing/gtest/include/gtest/gtest.h" 17 #include "testing/gtest/include/gtest/gtest.h"
18 #include "testing/perf/perf_test.h"
20 #include "url/gurl.h" 19 #include "url/gurl.h"
21 20
22 using base::TimeDelta; 21 using base::TimeDelta;
23 22
24 namespace visitedlink { 23 namespace visitedlink {
25 24
26 namespace { 25 namespace {
27 26
27 // designed like base/test/perf_time_logger, but uses different output strategy.
Peter Kasting 2016/10/17 18:44:46 Nit: Initial capital You might want to describe w
28 class TimeLogger {
29 public:
30 explicit TimeLogger(std::string test_name);
31 ~TimeLogger();
32 void Done();
33
34 private:
35 bool logged_;
36 std::string test_name_;
37 base::ElapsedTimer timer_;
38
39 DISALLOW_COPY_AND_ASSIGN(TimeLogger);
40 };
41
42 TimeLogger::TimeLogger(std::string test_name)
43 : logged_(false), test_name_(std::move(test_name)) {}
44
45 TimeLogger::~TimeLogger() {
46 if (!logged_)
47 Done();
48 }
49
50 void TimeLogger::Done() {
51 // we use a floating-point millisecond value because it is more
52 // intuitive than microseconds and we want more precision than
53 // integer milliseconds
Peter Kasting 2016/10/17 18:44:45 Nit: Add trailing period
54 perf_test::PrintResult(test_name_, "", "", timer_.Elapsed().InMillisecondsF(),
Peter Kasting 2016/10/17 18:44:46 Nit: "" -> std::string()
55 "ms", true);
56 logged_ = true;
57 }
58
28 // how we generate URLs, note that the two strings should be the same length 59 // how we generate URLs, note that the two strings should be the same length
29 const int add_count = 10000; 60 const int add_count = 10000;
30 const int load_test_add_count = 250000; 61 const int load_test_add_count = 250000;
31 const char added_prefix[] = "http://www.google.com/stuff/something/foo?session=8 5025602345625&id=1345142319023&seq="; 62 const char added_prefix[] = "http://www.google.com/stuff/something/foo?session=8 5025602345625&id=1345142319023&seq=";
32 const char unadded_prefix[] = "http://www.google.org/stuff/something/foo?session =39586739476365&id=2347624314402&seq="; 63 const char unadded_prefix[] = "http://www.google.org/stuff/something/foo?session =39586739476365&id=2347624314402&seq=";
33 64
34 // Returns a URL with the given prefix and index 65 // Returns a URL with the given prefix and index
35 GURL TestURL(const char* prefix, int i) { 66 GURL TestURL(const char* prefix, int i) {
36 return GURL(base::StringPrintf("%s%d", prefix, i)); 67 return GURL(base::StringPrintf("%s%d", prefix, i));
37 } 68 }
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
79 // is the total time to do all the operations, and as such, it is only 110 // is the total time to do all the operations, and as such, it is only
80 // useful for a regression test. If there is a regression, it might be 111 // useful for a regression test. If there is a regression, it might be
81 // useful to make another set of tests to test these things in isolation. 112 // useful to make another set of tests to test these things in isolation.
82 TEST_F(VisitedLink, TestAddAndQuery) { 113 TEST_F(VisitedLink, TestAddAndQuery) {
83 // init 114 // init
84 VisitedLinkMaster master(new DummyVisitedLinkEventListener(), 115 VisitedLinkMaster master(new DummyVisitedLinkEventListener(),
85 NULL, true, true, db_path_, 0); 116 NULL, true, true, db_path_, 0);
86 ASSERT_TRUE(master.Init()); 117 ASSERT_TRUE(master.Init());
87 content::RunAllBlockingPoolTasksUntilIdle(); 118 content::RunAllBlockingPoolTasksUntilIdle();
88 119
89 base::PerfTimeLogger timer("Visited_link_add_and_query"); 120 TimeLogger timer("Visited_link_add_and_query");
90 121
91 // first check without anything in the table 122 // first check without anything in the table
92 CheckVisited(master, added_prefix, 0, add_count); 123 CheckVisited(master, added_prefix, 0, add_count);
93 124
94 // now fill half the table 125 // now fill half the table
95 const int half_size = add_count / 2; 126 const int half_size = add_count / 2;
96 FillTable(master, added_prefix, 0, half_size); 127 FillTable(master, added_prefix, 0, half_size);
97 128
98 // check the table again, half of these URLs will be visited, the other half 129 // check the table again, half of these URLs will be visited, the other half
99 // will not 130 // will not
100 CheckVisited(master, added_prefix, 0, add_count); 131 CheckVisited(master, added_prefix, 0, add_count);
101 132
102 // fill the rest of the table 133 // fill the rest of the table
103 FillTable(master, added_prefix, half_size, add_count); 134 FillTable(master, added_prefix, half_size, add_count);
104 135
105 // check URLs, doing half visited, half unvisited 136 // check URLs, doing half visited, half unvisited
106 CheckVisited(master, added_prefix, 0, add_count); 137 CheckVisited(master, added_prefix, 0, add_count);
107 CheckVisited(master, unadded_prefix, 0, add_count); 138 CheckVisited(master, unadded_prefix, 0, add_count);
108 } 139 }
109 140
110 // Tests how long it takes to write and read a large database to and from disk. 141 // Tests how long it takes to write and read a large database to and from disk.
111 TEST_F(VisitedLink, TestLoad) { 142 TEST_F(VisitedLink, TestLoad) {
112 // create a big DB 143 // create a big DB
113 { 144 {
114 base::PerfTimeLogger table_initialization_timer("Table_initialization"); 145 TimeLogger table_initialization_timer("Table_initialization");
115 146
116 VisitedLinkMaster master(new DummyVisitedLinkEventListener(), 147 VisitedLinkMaster master(new DummyVisitedLinkEventListener(),
117 NULL, true, true, db_path_, 0); 148 NULL, true, true, db_path_, 0);
118 149
119 // time init with empty table 150 // time init with empty table
120 base::PerfTimeLogger initTimer("Empty_visited_link_init"); 151 TimeLogger initTimer("Empty_visited_link_init");
121 bool success = master.Init(); 152 bool success = master.Init();
122 content::RunAllBlockingPoolTasksUntilIdle(); 153 content::RunAllBlockingPoolTasksUntilIdle();
123 initTimer.Done(); 154 initTimer.Done();
124 ASSERT_TRUE(success); 155 ASSERT_TRUE(success);
125 156
126 // add a bunch of stuff 157 // add a bunch of stuff
127 // TODO(maruel): This is very inefficient because the file gets rewritten 158 // TODO(maruel): This is very inefficient because the file gets rewritten
128 // many time and this is the actual bottleneck of this test. The file should 159 // many time and this is the actual bottleneck of this test. The file should
129 // only get written that the end of the FillTable call, not 4169(!) times. 160 // only get written that the end of the FillTable call, not 4169(!) times.
130 FillTable(master, added_prefix, 0, load_test_add_count); 161 FillTable(master, added_prefix, 0, load_test_add_count);
131 162
132 // time writing the file out out 163 // time writing the file out out
133 base::PerfTimeLogger flushTimer("Visited_link_database_flush"); 164 TimeLogger flushTimer("Visited_link_database_flush");
134 master.RewriteFile(); 165 master.RewriteFile();
135 // TODO(maruel): Without calling FlushFileBuffers(master.file_); you don't 166 // TODO(maruel): Without calling FlushFileBuffers(master.file_); you don't
136 // know really how much time it took to write the file. 167 // know really how much time it took to write the file.
137 flushTimer.Done(); 168 flushTimer.Done();
138 169
139 table_initialization_timer.Done(); 170 table_initialization_timer.Done();
140 } 171 }
141 172
142 // test loading the DB back, we do this several times since the flushing is 173 // test loading the DB back, we do this several times since the flushing is
143 // not very reliable. 174 // not very reliable.
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
189 cold_load_times.erase(std::max_element(cold_load_times.begin(), 220 cold_load_times.erase(std::max_element(cold_load_times.begin(),
190 cold_load_times.end())); 221 cold_load_times.end()));
191 hot_load_times.erase(std::max_element(hot_load_times.begin(), 222 hot_load_times.erase(std::max_element(hot_load_times.begin(),
192 hot_load_times.end())); 223 hot_load_times.end()));
193 224
194 double cold_sum = 0, hot_sum = 0; 225 double cold_sum = 0, hot_sum = 0;
195 for (int i = 0; i < static_cast<int>(cold_load_times.size()); i++) { 226 for (int i = 0; i < static_cast<int>(cold_load_times.size()); i++) {
196 cold_sum += cold_load_times[i]; 227 cold_sum += cold_load_times[i];
197 hot_sum += hot_load_times[i]; 228 hot_sum += hot_load_times[i];
198 } 229 }
199 base::LogPerfResult( 230
200 "Visited_link_cold_load_time", cold_sum / cold_load_times.size(), "ms"); 231 perf_test::PrintResult("Visited_link_cold_load_time", "", "",
Peter Kasting 2016/10/17 18:44:45 Nit: "" -> std::string (2 places)
201 base::LogPerfResult( 232 cold_sum / cold_load_times.size(), "ms", true);
202 "Visited_link_hot_load_time", hot_sum / hot_load_times.size(), "ms"); 233 perf_test::PrintResult("Visited_link_hot_load_time", "", "",
234 hot_sum / hot_load_times.size(), "ms", true);
203 } 235 }
204 236
205 } // namespace visitedlink 237 } // namespace visitedlink
OLDNEW
« components/test/components_test_suite.h ('K') | « components/test/run_all_unittests.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698