blob: 49bd90ac8fe6601235be5cf960027b869d90aea0 [file] [log] [blame]
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "base/basictypes.h"
#include "base/strings/stringprintf.h"
#include "chrome/browser/sync/test/integration/performance/sync_timing_helper.h"
#include "chrome/browser/sync/test/integration/profile_sync_service_harness.h"
#include "chrome/browser/sync/test/integration/sync_test.h"
#include "chrome/browser/sync/test/integration/typed_urls_helper.h"
#include "sync/sessions/sync_session_context.h"
using typed_urls_helper::AddUrlToHistory;
using typed_urls_helper::AssertAllProfilesHaveSameURLsAsVerifier;
using typed_urls_helper::DeleteUrlsFromHistory;
using typed_urls_helper::GetTypedUrlsFromClient;
// This number should be as far away from a multiple of
// kDefaultMaxCommitBatchSize as possible, so that sync cycle counts
// for batch operations stay the same even if some batches end up not
// being completely full.
static const int kNumUrls = 163;
// This compile assert basically asserts that kNumUrls is right in the
// middle between two multiples of kDefaultMaxCommitBatchSize.
COMPILE_ASSERT(
((kNumUrls % syncer::kDefaultMaxCommitBatchSize) >=
(syncer::kDefaultMaxCommitBatchSize / 2)) &&
((kNumUrls % syncer::kDefaultMaxCommitBatchSize) <=
((syncer::kDefaultMaxCommitBatchSize + 1) / 2)),
kNumUrlsShouldBeBetweenTwoMultiplesOfkDefaultMaxCommitBatchSize);
class TypedUrlsSyncPerfTest : public SyncTest {
public:
TypedUrlsSyncPerfTest()
: SyncTest(TWO_CLIENT),
url_number_(0) {}
// Adds |num_urls| new unique typed urls to |profile|.
void AddURLs(int profile, int num_urls);
// Update all typed urls in |profile| by visiting them once again.
void UpdateURLs(int profile);
// Removes all typed urls for |profile|.
void RemoveURLs(int profile);
// Returns the number of typed urls stored in |profile|.
int GetURLCount(int profile);
private:
// Returns a new unique typed URL.
GURL NextURL();
// Returns a unique URL according to the integer |n|.
GURL IntToURL(int n);
int url_number_;
DISALLOW_COPY_AND_ASSIGN(TypedUrlsSyncPerfTest);
};
void TypedUrlsSyncPerfTest::AddURLs(int profile, int num_urls) {
for (int i = 0; i < num_urls; ++i) {
AddUrlToHistory(profile, NextURL());
}
}
void TypedUrlsSyncPerfTest::UpdateURLs(int profile) {
history::URLRows urls = GetTypedUrlsFromClient(profile);
for (history::URLRows::const_iterator it = urls.begin(); it != urls.end();
++it) {
AddUrlToHistory(profile, it->url());
}
}
void TypedUrlsSyncPerfTest::RemoveURLs(int profile) {
const history::URLRows& urls = GetTypedUrlsFromClient(profile);
std::vector<GURL> gurls;
for (history::URLRows::const_iterator it = urls.begin(); it != urls.end();
++it) {
gurls.push_back(it->url());
}
DeleteUrlsFromHistory(profile, gurls);
}
int TypedUrlsSyncPerfTest::GetURLCount(int profile) {
return GetTypedUrlsFromClient(profile).size();
}
GURL TypedUrlsSyncPerfTest::NextURL() {
return IntToURL(url_number_++);
}
GURL TypedUrlsSyncPerfTest::IntToURL(int n) {
return GURL(base::StringPrintf("http://history%d.google.com/", n));
}
IN_PROC_BROWSER_TEST_F(TypedUrlsSyncPerfTest, P0) {
ASSERT_TRUE(SetupSync()) << "SetupSync() failed.";
// TCM ID - 7985716.
AddURLs(0, kNumUrls);
base::TimeDelta dt =
SyncTimingHelper::TimeMutualSyncCycle(GetClient(0), GetClient(1));
ASSERT_EQ(kNumUrls, GetURLCount(1));
SyncTimingHelper::PrintResult("typed_urls", "add_typed_urls", dt);
// TCM ID - 7981755.
UpdateURLs(0);
dt = SyncTimingHelper::TimeMutualSyncCycle(GetClient(0), GetClient(1));
ASSERT_EQ(kNumUrls, GetURLCount(1));
SyncTimingHelper::PrintResult("typed_urls", "update_typed_urls", dt);
// TCM ID - 7651271.
RemoveURLs(0);
dt = SyncTimingHelper::TimeMutualSyncCycle(GetClient(0), GetClient(1));
ASSERT_EQ(0, GetURLCount(1));
SyncTimingHelper::PrintResult("typed_urls", "delete_typed_urls", dt);
}