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

Side by Side Diff: chrome/test/live_sync/performance_live_bookmarks_sync_test.cc

Issue 7171003: Performance tests for bookmark sync. (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Fixing lint errors. Created 9 years, 6 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 | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright 2011 Google Inc. All Rights Reserved.
2 // Author: braffert@google.com (Ben Rafferty)
Raghu Simha 2011/06/15 18:38:16 Use the standard chromium header. See any other fi
braffert 2011/06/16 00:59:24 Done.
3
4 #include "base/time.h"
5 #include "chrome/browser/profiles/profile.h"
6 #include "chrome/browser/sync/profile_sync_service_harness.h"
7 #include "chrome/test/live_sync/live_bookmarks_sync_test.h"
8
9 static const int kNumBookmarks = 150;
10
11 // TODO(braffert): Consider the range / resolution of these test points.
Raghu Simha 2011/06/15 18:38:16 How long does it take to run through all points on
braffert 2011/06/16 00:59:24 I can't say for sure - It depends on whether the P
Raghu Simha 2011/06/16 22:42:54 SGTM.
12 static const int kNumBenchmarkPoints = 18;
13 static const int kBenchmarkPoints[] = {1, 10, 20, 30, 40, 50, 75, 100, 125,
14 150, 175, 200, 225, 250, 300, 350, 400,
15 500};
16
17 // TODO(braffert): Move this class into its own .h/.cc files. Maybe.
Raghu Simha 2011/06/15 18:38:16 s/Maybe/Yes/ :) It's much cleaner, and will allow
braffert 2011/06/16 00:59:24 I've split up the declaration and definition here
18 class PerformanceLiveBookmarksSyncTest
19 : public TwoClientLiveBookmarksSyncTest {
20 public:
21 PerformanceLiveBookmarksSyncTest() : urlNumber(0), urlTitleNumber(0) {}
22
23 void AddURLs(int profile, int nURLs) {
24 for (int i = 0; i < nURLs; ++i) {
25 ASSERT_TRUE(AddURL(
26 profile, 0, NextIndexedURLTitle(), NextIndexedURL()) != NULL);
27 }
28 }
29
30 void UpdateURLs(int profile) {
31 for (int i = 0; i < GetBookmarkBarNode(profile)->child_count(); ++i) {
32 ASSERT_TRUE(SetURL(profile, GetBookmarkBarNode(profile)->GetChild(i),
33 NextIndexedURL()));
34 }
35 }
36
37 void RemoveURLs(int profile) {
38 while (GetBookmarkBarNode(profile)->child_count()) {
39 Remove(profile, GetBookmarkBarNode(profile), 0);
40 }
41 }
42
43 void Cleanup() {
Raghu Simha 2011/06/15 18:38:16 I'm wondering if this method is really necessary,
braffert 2011/06/16 00:59:24 Cleanup() is called between benchmark iterations t
Raghu Simha 2011/06/16 22:42:54 SGTM.
44 for (int i = 0; i < num_clients(); ++i) {
45 RemoveURLs(i);
46 }
47 ASSERT_TRUE(AwaitQuiescence());
48 ASSERT_EQ(0, GetBookmarkBarNode(0)->child_count());
49 ASSERT_TRUE(AllModelsMatch());
50 }
51
52 // TODO(braffert): Move timing methods somewhere that they can be used by
53 // the performance test class for all datatypes.
Raghu Simha 2011/06/15 18:38:16 To be able to use these across datatypes, how abou
braffert 2011/06/16 00:59:24 Done. This required overriding the SetUp method o
Raghu Simha 2011/06/16 22:42:54 In other comments, I've suggested some changes to
54 base::TimeDelta TimeSyncCycle(ProfileSyncServiceHarness* client) {
55 base::Time start = base::Time::Now();
56 EXPECT_TRUE(client->AwaitSyncCycleCompletion("Timing sync cycle."));
57 return base::Time::Now() - start;
58 }
59
60 base::TimeDelta TimeMutualSyncCycle(ProfileSyncServiceHarness* client,
61 ProfileSyncServiceHarness* partner) {
62 base::Time start = base::Time::Now();
63 EXPECT_TRUE(client->AwaitMutualSyncCycleCompletion(partner));
64 return base::Time::Now() - start;
65 }
66
67 base::TimeDelta TimeUntilQuiescence() {
68 base::Time start = base::Time::Now();
69 EXPECT_TRUE(AwaitQuiescence());
70 return base::Time::Now() - start;
71 }
72
73 private:
74 GURL NextIndexedURL() {
75 return GURL(IndexedURL(urlNumber++));
76 }
77
78 std::wstring NextIndexedURLTitle() {
79 return IndexedURLTitle(urlTitleNumber++);
80 }
81
82 int urlNumber;
83 int urlTitleNumber;
84 DISALLOW_COPY_AND_ASSIGN(PerformanceLiveBookmarksSyncTest);
85 };
86
87 // TODO(braffert): Possibly split each of these into separate up / down test
88 // cases?
89 IN_PROC_BROWSER_TEST_F(PerformanceLiveBookmarksSyncTest, Add) {
90 ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
91 DisableVerifier();
92
93 DisableNetwork(GetProfile(1));
94 AddURLs(0, kNumBookmarks);
95 base::TimeDelta dt_up = TimeSyncCycle(GetClient(0));
96 ASSERT_EQ(kNumBookmarks, GetBookmarkBarNode(0)->child_count());
97 ASSERT_EQ(0, GetBookmarkBarNode(1)->child_count());
98
99 EnableNetwork(GetProfile(1));
100 base::TimeDelta dt_down = TimeUntilQuiescence();
Raghu Simha 2011/06/15 18:38:16 TimeUntilQuiescence(1) will include any sync cycle
braffert 2011/06/16 00:59:24 Calling TimeSyncCycle(1) instead of AwaitQuiescenc
101 ASSERT_EQ(kNumBookmarks, GetBookmarkBarNode(0)->child_count());
102 ASSERT_TRUE(AllModelsMatch());
103
104 // TODO(braffert): Compare timings against some target value.
105 }
106
107 IN_PROC_BROWSER_TEST_F(PerformanceLiveBookmarksSyncTest, Update) {
108 ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
109 DisableVerifier();
110
111 AddURLs(0, kNumBookmarks);
112 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
113 ASSERT_TRUE(AllModelsMatch());
114
115 DisableNetwork(GetProfile(1));
116 UpdateURLs(0);
117 base::TimeDelta dt_up = TimeSyncCycle(GetClient(0));
118 ASSERT_EQ(kNumBookmarks, GetBookmarkBarNode(0)->child_count());
119 ASSERT_EQ(kNumBookmarks, GetBookmarkBarNode(1)->child_count());
120 ASSERT_FALSE(AllModelsMatch());
121
122 EnableNetwork(GetProfile(1));
123 base::TimeDelta dt_down = TimeUntilQuiescence();
124 ASSERT_EQ(kNumBookmarks, GetBookmarkBarNode(0)->child_count());
125 ASSERT_EQ(kNumBookmarks, GetBookmarkBarNode(1)->child_count());
126
127 // TODO(braffert): Compare timings against some target value.
128 }
129
130 IN_PROC_BROWSER_TEST_F(PerformanceLiveBookmarksSyncTest, Delete) {
131 ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
132 DisableVerifier();
133
134 AddURLs(0, kNumBookmarks);
135 ASSERT_TRUE(GetClient(0)->AwaitMutualSyncCycleCompletion(GetClient(1)));
136 ASSERT_TRUE(AllModelsMatch());
137
138 DisableNetwork(GetProfile(1));
139 RemoveURLs(0);
140 base::TimeDelta dt_up = TimeSyncCycle(GetClient(0));
141 ASSERT_EQ(0, GetBookmarkBarNode(0)->child_count());
142 ASSERT_EQ(kNumBookmarks, GetBookmarkBarNode(1)->child_count());
143
144 EnableNetwork(GetProfile(1));
145 base::TimeDelta dt_down = TimeUntilQuiescence();
146 ASSERT_EQ(0, GetBookmarkBarNode(0)->child_count());
147 ASSERT_EQ(0, GetBookmarkBarNode(1)->child_count());
148
149 // TODO(braffert): Compare timings against some target value.
150 }
151
152 IN_PROC_BROWSER_TEST_F(PerformanceLiveBookmarksSyncTest, Benchmark) {
153 ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
154 DisableVerifier();
155
156 for (int i = 0; i < kNumBenchmarkPoints; ++i) {
157 int numBookmarks = kBenchmarkPoints[i];
158
159 // Disable client 1. Add bookmarks and time commit by client 0.
160 DisableNetwork(GetProfile(1));
161 AddURLs(0, numBookmarks);
162 base::TimeDelta dt_up = TimeSyncCycle(GetClient(0));
163 ASSERT_EQ(numBookmarks, GetBookmarkBarNode(0)->child_count());
164 ASSERT_EQ(0, GetBookmarkBarNode(1)->child_count());
165
166 // Enable client 1 and time update (new bookmarks).
167 EnableNetwork(GetProfile(1));
168 base::TimeDelta dt_down = TimeUntilQuiescence();
169 ASSERT_EQ(numBookmarks, GetBookmarkBarNode(0)->child_count());
170 ASSERT_TRUE(AllModelsMatch());
171
172 VLOG(0) << "Add: " << numBookmarks << " " <<
173 static_cast<double>(numBookmarks) / dt_up.InSecondsF() << " " <<
174 static_cast<double>(numBookmarks) / dt_down.InSecondsF();
175
176 // Disable client 1. Modify bookmarks and time commit by client 0.
177 DisableNetwork(GetProfile(1));
178 UpdateURLs(0);
179 dt_up = TimeSyncCycle(GetClient(0));
180 ASSERT_EQ(numBookmarks, GetBookmarkBarNode(0)->child_count());
181 ASSERT_EQ(numBookmarks, GetBookmarkBarNode(1)->child_count());
182 ASSERT_FALSE(AllModelsMatch());
183
184 // Enable client 1 and time update (changed bookmarks).
185 EnableNetwork(GetProfile(1));
186 dt_down = TimeUntilQuiescence();
187 ASSERT_EQ(numBookmarks, GetBookmarkBarNode(0)->child_count());
188 ASSERT_TRUE(AllModelsMatch());
189
190 VLOG(0) << "Update: " << numBookmarks << " " <<
191 static_cast<double>(numBookmarks) / dt_up.InSecondsF() << " " <<
192 static_cast<double>(numBookmarks) / dt_down.InSecondsF();
193
194 // Disable client 1. Delete bookmarks and time commit by client 0.
195 DisableNetwork(GetProfile(1));
196 RemoveURLs(0);
197 dt_up = TimeSyncCycle(GetClient(0));
198 ASSERT_EQ(0, GetBookmarkBarNode(0)->child_count());
199 ASSERT_EQ(numBookmarks, GetBookmarkBarNode(1)->child_count());
200
201 // Enable client 1 and time update (deleted bookmarks).
202 EnableNetwork(GetProfile(1));
203 dt_down = TimeUntilQuiescence();
204 ASSERT_EQ(0, GetBookmarkBarNode(0)->child_count());
205 ASSERT_EQ(0, GetBookmarkBarNode(1)->child_count());
206
207 VLOG(0) << "Delete: " << numBookmarks << " " <<
208 static_cast<double>(numBookmarks) / dt_up.InSecondsF() << " " <<
209 static_cast<double>(numBookmarks) / dt_down.InSecondsF();
210
211 Cleanup();
212 }
213 }
214
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698