typed_urls_sync_perf_test.cc revision a02191e04bc25c4935f804f2c080ae28663d096d
1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "base/basictypes.h"
6#include "base/strings/stringprintf.h"
7#include "chrome/browser/sync/test/integration/performance/sync_timing_helper.h"
8#include "chrome/browser/sync/test/integration/profile_sync_service_harness.h"
9#include "chrome/browser/sync/test/integration/sync_test.h"
10#include "chrome/browser/sync/test/integration/typed_urls_helper.h"
11#include "sync/sessions/sync_session_context.h"
12
13using typed_urls_helper::AddUrlToHistory;
14using typed_urls_helper::DeleteUrlsFromHistory;
15using typed_urls_helper::GetTypedUrlsFromClient;
16
17// This number should be as far away from a multiple of
18// kDefaultMaxCommitBatchSize as possible, so that sync cycle counts
19// for batch operations stay the same even if some batches end up not
20// being completely full.
21static const int kNumUrls = 163;
22// This compile assert basically asserts that kNumUrls is right in the
23// middle between two multiples of kDefaultMaxCommitBatchSize.
24COMPILE_ASSERT(
25    ((kNumUrls % syncer::kDefaultMaxCommitBatchSize) >=
26     (syncer::kDefaultMaxCommitBatchSize / 2)) &&
27    ((kNumUrls % syncer::kDefaultMaxCommitBatchSize) <=
28     ((syncer::kDefaultMaxCommitBatchSize + 1) / 2)),
29    kNumUrlsShouldBeBetweenTwoMultiplesOfkDefaultMaxCommitBatchSize);
30
31class TypedUrlsSyncPerfTest : public SyncTest {
32 public:
33  TypedUrlsSyncPerfTest()
34      : SyncTest(TWO_CLIENT),
35        url_number_(0) {}
36
37  // Adds |num_urls| new unique typed urls to |profile|.
38  void AddURLs(int profile, int num_urls);
39
40  // Update all typed urls in |profile| by visiting them once again.
41  void UpdateURLs(int profile);
42
43  // Removes all typed urls for |profile|.
44  void RemoveURLs(int profile);
45
46  // Returns the number of typed urls stored in |profile|.
47  int GetURLCount(int profile);
48
49 private:
50  // Returns a new unique typed URL.
51  GURL NextURL();
52
53  // Returns a unique URL according to the integer |n|.
54  GURL IntToURL(int n);
55
56  int url_number_;
57  DISALLOW_COPY_AND_ASSIGN(TypedUrlsSyncPerfTest);
58};
59
60void TypedUrlsSyncPerfTest::AddURLs(int profile, int num_urls) {
61  for (int i = 0; i < num_urls; ++i) {
62    AddUrlToHistory(profile, NextURL());
63  }
64}
65
66void TypedUrlsSyncPerfTest::UpdateURLs(int profile) {
67  history::URLRows urls = GetTypedUrlsFromClient(profile);
68  for (history::URLRows::const_iterator it = urls.begin(); it != urls.end();
69       ++it) {
70    AddUrlToHistory(profile, it->url());
71  }
72}
73
74void TypedUrlsSyncPerfTest::RemoveURLs(int profile) {
75  const history::URLRows& urls = GetTypedUrlsFromClient(profile);
76  std::vector<GURL> gurls;
77  for (history::URLRows::const_iterator it = urls.begin(); it != urls.end();
78       ++it) {
79    gurls.push_back(it->url());
80  }
81  DeleteUrlsFromHistory(profile, gurls);
82}
83
84int TypedUrlsSyncPerfTest::GetURLCount(int profile) {
85  return GetTypedUrlsFromClient(profile).size();
86}
87
88GURL TypedUrlsSyncPerfTest::NextURL() {
89  return IntToURL(url_number_++);
90}
91
92GURL TypedUrlsSyncPerfTest::IntToURL(int n) {
93  return GURL(base::StringPrintf("http://history%d.google.com/", n));
94}
95
96IN_PROC_BROWSER_TEST_F(TypedUrlsSyncPerfTest, P0) {
97  ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
98
99  // TCM ID - 7985716.
100  AddURLs(0, kNumUrls);
101  base::TimeDelta dt =
102      SyncTimingHelper::TimeMutualSyncCycle(GetClient(0), GetClient(1));
103  ASSERT_EQ(kNumUrls, GetURLCount(1));
104  SyncTimingHelper::PrintResult("typed_urls", "add_typed_urls", dt);
105
106  // TCM ID - 7981755.
107  UpdateURLs(0);
108  dt = SyncTimingHelper::TimeMutualSyncCycle(GetClient(0), GetClient(1));
109  ASSERT_EQ(kNumUrls, GetURLCount(1));
110  SyncTimingHelper::PrintResult("typed_urls", "update_typed_urls", dt);
111
112  // TCM ID - 7651271.
113  RemoveURLs(0);
114  dt = SyncTimingHelper::TimeMutualSyncCycle(GetClient(0), GetClient(1));
115  ASSERT_EQ(0, GetURLCount(1));
116  SyncTimingHelper::PrintResult("typed_urls", "delete_typed_urls", dt);
117}
118