OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 "base/stringprintf.h" | 5 #include "base/stringprintf.h" |
6 #include "base/utf_string_conversions.h" | 6 #include "base/utf_string_conversions.h" |
7 #include "chrome/browser/autofill/autofill_common_test.h" | 7 #include "chrome/browser/autofill/autofill_common_test.h" |
8 #include "chrome/browser/autofill/autofill_profile.h" | 8 #include "chrome/browser/autofill/autofill_profile.h" |
9 #include "chrome/browser/sync/profile_sync_service_harness.h" | 9 #include "chrome/browser/sync/profile_sync_service_harness.h" |
10 #include "chrome/browser/webdata/autofill_entry.h" | 10 #include "chrome/browser/webdata/autofill_entry.h" |
11 #include "chrome/test/live_sync/autofill_helper.h" | 11 #include "chrome/test/live_sync/autofill_helper.h" |
12 #include "chrome/test/live_sync/live_sync_test.h" | 12 #include "chrome/test/live_sync/live_sync_test.h" |
13 #include "chrome/test/live_sync/performance/sync_timing_helper.h" | 13 #include "chrome/test/live_sync/performance/sync_timing_helper.h" |
14 | 14 |
15 using autofill_helper::AllProfilesMatch; | 15 using autofill_helper::AllProfilesMatch; |
16 using autofill_helper::GetAllKeys; | 16 using autofill_helper::GetAllKeys; |
17 using autofill_helper::GetAllProfiles; | 17 using autofill_helper::GetAllProfiles; |
18 using autofill_helper::GetKeyCount; | 18 using autofill_helper::GetKeyCount; |
19 using autofill_helper::GetProfileCount; | 19 using autofill_helper::GetProfileCount; |
20 using autofill_helper::RemoveKey; | 20 using autofill_helper::RemoveKey; |
21 using autofill_helper::SetProfiles; | 21 using autofill_helper::SetProfiles; |
22 | 22 |
23 // TODO(braffert): Move kNumBenchmarkPoints and kBenchmarkPoints for all | |
24 // datatypes into a performance test base class, once it is possible to do so. | |
25 static const int kNumKeys = 150; | 23 static const int kNumKeys = 150; |
26 static const int kNumProfiles = 150; | 24 static const int kNumProfiles = 150; |
27 static const int kNumBenchmarkPoints = 18; | |
28 static const int kBenchmarkPoints[] = {1, 10, 20, 30, 40, 50, 75, 100, 125, | |
29 150, 175, 200, 225, 250, 300, 350, 400, | |
30 500}; | |
31 | 25 |
32 class AutofillSyncPerfTest : public LiveSyncTest { | 26 class AutofillSyncPerfTest : public LiveSyncTest { |
33 public: | 27 public: |
34 AutofillSyncPerfTest() | 28 AutofillSyncPerfTest() |
35 : LiveSyncTest(TWO_CLIENT), | 29 : LiveSyncTest(TWO_CLIENT), |
36 guid_number_(0), | 30 guid_number_(0), |
37 name_number_(0), | 31 name_number_(0), |
38 value_number_(0) {} | 32 value_number_(0) {} |
39 | 33 |
40 // Adds |num_profiles| new autofill profiles to the sync profile |profile|. | 34 // Adds |num_profiles| new autofill profiles to the sync profile |profile|. |
41 void AddProfiles(int profile, int num_profiles); | 35 void AddProfiles(int profile, int num_profiles); |
42 | 36 |
43 // Updates all autofill profiles for the sync profile |profile|. | 37 // Updates all autofill profiles for the sync profile |profile|. |
44 void UpdateProfiles(int profile); | 38 void UpdateProfiles(int profile); |
45 | 39 |
46 // Removes all autofill profiles from |profile|. | 40 // Removes all autofill profiles from |profile|. |
47 void RemoveProfiles(int profile); | 41 void RemoveProfiles(int profile); |
48 | 42 |
49 // Adds |num_keys| new autofill keys to the sync profile |profile|. | 43 // Adds |num_keys| new autofill keys to the sync profile |profile|. |
50 void AddKeys(int profile, int num_keys); | 44 void AddKeys(int profile, int num_keys); |
51 | 45 |
52 // Removes all autofill keys from |profile|. | 46 // Removes all autofill keys from |profile|. |
53 void RemoveKeys(int profile); | 47 void RemoveKeys(int profile); |
54 | 48 |
55 // Removes all autofill profiles in all sync profiles. Called between | |
56 // benchmark iterations. | |
57 void Cleanup(); | |
58 | |
59 private: | 49 private: |
60 // Returns a new unique autofill profile. | 50 // Returns a new unique autofill profile. |
61 const AutofillProfile NextAutofillProfile(); | 51 const AutofillProfile NextAutofillProfile(); |
62 | 52 |
63 // Returns a new unique autofill key. | 53 // Returns a new unique autofill key. |
64 const AutofillKey NextAutofillKey(); | 54 const AutofillKey NextAutofillKey(); |
65 | 55 |
66 // Returns an unused unique guid. | 56 // Returns an unused unique guid. |
67 const std::string NextGUID(); | 57 const std::string NextGUID(); |
68 | 58 |
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
126 } | 116 } |
127 | 117 |
128 void AutofillSyncPerfTest::RemoveKeys(int profile) { | 118 void AutofillSyncPerfTest::RemoveKeys(int profile) { |
129 std::set<AutofillEntry> keys = GetAllKeys(profile); | 119 std::set<AutofillEntry> keys = GetAllKeys(profile); |
130 for (std::set<AutofillEntry>::const_iterator it = keys.begin(); | 120 for (std::set<AutofillEntry>::const_iterator it = keys.begin(); |
131 it != keys.end(); ++it) { | 121 it != keys.end(); ++it) { |
132 RemoveKey(profile, it->key()); | 122 RemoveKey(profile, it->key()); |
133 } | 123 } |
134 } | 124 } |
135 | 125 |
136 void AutofillSyncPerfTest::Cleanup() { | |
137 for (int i = 0; i < num_clients(); ++i) { | |
138 RemoveProfiles(i); | |
139 } | |
140 ASSERT_TRUE(AwaitQuiescence()); | |
141 } | |
142 | |
143 const AutofillProfile AutofillSyncPerfTest::NextAutofillProfile() { | 126 const AutofillProfile AutofillSyncPerfTest::NextAutofillProfile() { |
144 AutofillProfile profile; | 127 AutofillProfile profile; |
145 autofill_test::SetProfileInfoWithGuid(&profile, NextGUID().c_str(), | 128 autofill_test::SetProfileInfoWithGuid(&profile, NextGUID().c_str(), |
146 NextName().c_str(), "", "", "", "", "", | 129 NextName().c_str(), "", "", "", "", "", |
147 "", "", "", "", "", "", ""); | 130 "", "", "", "", "", "", ""); |
148 return profile; | 131 return profile; |
149 } | 132 } |
150 | 133 |
151 const AutofillKey AutofillSyncPerfTest::NextAutofillKey() { | 134 const AutofillKey AutofillSyncPerfTest::NextAutofillKey() { |
152 return AutofillKey(NextName().c_str(), NextName().c_str()); | 135 return AutofillKey(NextName().c_str(), NextName().c_str()); |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
206 base::TimeDelta dt = | 189 base::TimeDelta dt = |
207 SyncTimingHelper::TimeMutualSyncCycle(GetClient(0), GetClient(1)); | 190 SyncTimingHelper::TimeMutualSyncCycle(GetClient(0), GetClient(1)); |
208 ASSERT_EQ(kNumKeys, GetKeyCount(1)); | 191 ASSERT_EQ(kNumKeys, GetKeyCount(1)); |
209 SyncTimingHelper::PrintResult("autofill", "add_autofill_keys", dt); | 192 SyncTimingHelper::PrintResult("autofill", "add_autofill_keys", dt); |
210 | 193 |
211 RemoveKeys(0); | 194 RemoveKeys(0); |
212 dt = SyncTimingHelper::TimeMutualSyncCycle(GetClient(0), GetClient(1)); | 195 dt = SyncTimingHelper::TimeMutualSyncCycle(GetClient(0), GetClient(1)); |
213 ASSERT_EQ(0, GetKeyCount(1)); | 196 ASSERT_EQ(0, GetKeyCount(1)); |
214 SyncTimingHelper::PrintResult("autofill", "delete_autofill_keys", dt); | 197 SyncTimingHelper::PrintResult("autofill", "delete_autofill_keys", dt); |
215 } | 198 } |
216 | |
217 IN_PROC_BROWSER_TEST_F(AutofillSyncPerfTest, DISABLED_Benchmark) { | |
218 ASSERT_TRUE(SetupSync()) << "SetupSync() failed."; | |
219 | |
220 for (int i = 0; i < kNumBenchmarkPoints; ++i) { | |
221 int num_profiles = kBenchmarkPoints[i]; | |
222 AddProfiles(0, num_profiles); | |
223 base::TimeDelta dt_add = | |
224 SyncTimingHelper::TimeMutualSyncCycle(GetClient(0), GetClient(1)); | |
225 ASSERT_EQ(num_profiles, GetProfileCount(0)); | |
226 ASSERT_TRUE(AllProfilesMatch()); | |
227 VLOG(0) << std::endl << "Add: " << num_profiles << " " | |
228 << dt_add.InSecondsF(); | |
229 | |
230 UpdateProfiles(0); | |
231 base::TimeDelta dt_update = | |
232 SyncTimingHelper::TimeMutualSyncCycle(GetClient(0), GetClient(1)); | |
233 ASSERT_EQ(num_profiles, GetProfileCount(0)); | |
234 ASSERT_TRUE(AllProfilesMatch()); | |
235 VLOG(0) << std::endl << "Update: " << num_profiles << " " | |
236 << dt_update.InSecondsF(); | |
237 | |
238 RemoveProfiles(0); | |
239 base::TimeDelta dt_delete = | |
240 SyncTimingHelper::TimeMutualSyncCycle(GetClient(0), GetClient(1)); | |
241 ASSERT_EQ(0, GetProfileCount(0)); | |
242 ASSERT_TRUE(AllProfilesMatch()); | |
243 VLOG(0) << std::endl << "Delete: " << num_profiles << " " | |
244 << dt_delete.InSecondsF(); | |
245 | |
246 Cleanup(); | |
247 } | |
248 } | |
OLD | NEW |