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

Unified Diff: chrome/test/page_cycler/page_cycler_test.cc

Issue 7578004: Move more files from chrome/test to chrome/test/base, part #7 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: '' Created 9 years, 4 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/test/memory_test/memory_test.cc ('k') | chrome/test/perf/dom_checker_uitest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/test/page_cycler/page_cycler_test.cc
===================================================================
--- chrome/test/page_cycler/page_cycler_test.cc (revision 95438)
+++ chrome/test/page_cycler/page_cycler_test.cc (working copy)
@@ -1,536 +0,0 @@
-// Copyright (c) 2011 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/command_line.h"
-#include "base/file_path.h"
-#include "base/file_util.h"
-#include "base/path_service.h"
-#include "base/process_util.h"
-#include "base/string_number_conversions.h"
-#include "base/sys_string_conversions.h"
-#include "base/test/test_timeouts.h"
-#include "base/utf_string_conversions.h"
-#include "chrome/browser/net/url_fixer_upper.h"
-#include "chrome/common/chrome_constants.h"
-#include "chrome/common/chrome_paths.h"
-#include "chrome/common/chrome_switches.h"
-#include "chrome/test/automation/tab_proxy.h"
-#include "chrome/test/automation/window_proxy.h"
-#include "chrome/test/base/chrome_process_util.h"
-#include "chrome/test/base/test_switches.h"
-#include "chrome/test/ui/ui_perf_test.h"
-#include "googleurl/src/gurl.h"
-#include "net/base/net_util.h"
-
-#ifndef NDEBUG
-static const int kTestIterations = 2;
-static const int kDatabaseTestIterations = 2;
-#else
-static const int kTestIterations = 10;
-// For some unknown reason, the DB perf tests are much much slower on the
-// Vista perf bot, so we have to cut down the number of iterations to 5
-// to make sure each test finishes in less than 10 minutes.
-static const int kDatabaseTestIterations = 5;
-#endif
-static const int kIDBTestIterations = 5;
-
-// URL at which data files may be found for HTTP tests. The document root of
-// this URL's server should point to data/page_cycler/.
-static const char kBaseUrl[] = "http://localhost:8000/";
-
-namespace {
-
-void PopulateBufferCache(const FilePath& test_dir) {
- // This will recursively walk the directory given and read all the
- // files it finds. This is done so the system file cache is likely
- // to have as much loaded as possible. Without this, the tests of
- // this build gets one set of timings and then the reference build
- // test, gets slightly faster ones (even if the reference build is
- // the same binary). The hope is by forcing all the possible data
- // into the cache we equalize the tests for comparing timing data.
-
- // We don't want to walk into .svn dirs, so we have to do the tree walk
- // ourselves.
-
- std::vector<FilePath> dirs;
- dirs.push_back(test_dir);
- const FilePath svn_dir(FILE_PATH_LITERAL(".svn"));
-
- for (size_t idx = 0; idx < dirs.size(); ++idx) {
- file_util::FileEnumerator dir_enumerator(dirs[idx], false,
- file_util::FileEnumerator::DIRECTORIES);
- FilePath path;
- for (path = dir_enumerator.Next();
- !path.empty();
- path = dir_enumerator.Next()) {
- if (path.BaseName() != svn_dir)
- dirs.push_back(path);
- }
- }
-
- unsigned int loaded = 0;
-
- // We seem to have some files in the data dirs that are just there for
- // reference, make a quick attempt to skip them by matching suffixes.
- std::vector<FilePath::StringType> ignore_suffixes;
- ignore_suffixes.push_back(FILE_PATH_LITERAL(".orig.html"));
- ignore_suffixes.push_back(FILE_PATH_LITERAL(".html-original"));
-
- std::vector<FilePath>::const_iterator iter;
- for (iter = dirs.begin(); iter != dirs.end(); ++iter) {
- file_util::FileEnumerator file_enumerator(*iter, false,
- file_util::FileEnumerator::FILES);
- FilePath path;
- for (path = file_enumerator.Next();
- !path.empty();
- path = file_enumerator.Next()) {
- const FilePath base_name = path.BaseName();
- const size_t base_name_size = base_name.value().size();
-
- bool should_skip = false;
- std::vector<FilePath::StringType>::const_iterator ignore_iter;
- for (ignore_iter = ignore_suffixes.begin();
- ignore_iter != ignore_suffixes.end();
- ++ignore_iter) {
- const FilePath::StringType &suffix = *ignore_iter;
-
- if ((base_name_size > suffix.size()) &&
- (base_name.value().compare(base_name_size - suffix.size(),
- suffix.size(), suffix) == 0)) {
- should_skip = true;
- break;
- }
- }
- if (should_skip)
- continue;
-
- // Read the file fully to get it into the cache.
- // We don't care what the contents are.
- if (file_util::ReadFileToString(path, NULL))
- ++loaded;
- }
- }
- VLOG(1) << "Buffer cache should be primed with " << loaded << " files.";
-}
-
-class PageCyclerTest : public UIPerfTest {
- protected:
- bool print_times_only_;
- int num_test_iterations_;
- public:
- PageCyclerTest()
- : print_times_only_(false) {
- show_window_ = true;
- dom_automation_enabled_ = true;
-
- const CommandLine& parsed_command_line = *CommandLine::ForCurrentProcess();
- num_test_iterations_ = kTestIterations;
-
- if (parsed_command_line.HasSwitch(switches::kPageCyclerIterations)) {
- std::string str = parsed_command_line.GetSwitchValueASCII(
- switches::kPageCyclerIterations);
- base::StringToInt(str, &num_test_iterations_);
- }
-
- // Expose garbage collection for the page cycler tests.
- launch_arguments_.AppendSwitchASCII(switches::kJavaScriptFlags,
- "--expose_gc");
- }
-
- virtual FilePath GetDataPath(const char* name) {
- // Make sure the test data is checked out
- FilePath test_path;
- PathService::Get(base::DIR_SOURCE_ROOT, &test_path);
- test_path = test_path.Append(FILE_PATH_LITERAL("data"));
- test_path = test_path.Append(FILE_PATH_LITERAL("page_cycler"));
- test_path = test_path.AppendASCII(name);
- return test_path;
- }
-
- virtual bool HasErrors(const std::string /*timings*/) {
- return false;
- }
-
- virtual int GetTestIterations() {
- return num_test_iterations_;
- }
-
- // For HTTP tests, the name must be safe for use in a URL without escaping.
- void RunPageCycler(const char* name, std::wstring* pages,
- std::string* timings, bool use_http) {
- FilePath test_path = GetDataPath(name);
- ASSERT_TRUE(file_util::DirectoryExists(test_path))
- << "Missing test directory " << test_path.value();
-
- PopulateBufferCache(test_path);
-
- GURL test_url;
- if (use_http) {
- test_url = GURL(std::string(kBaseUrl) + name + "/start.html");
- } else {
- test_path = test_path.Append(FILE_PATH_LITERAL("start.html"));
- test_url = net::FilePathToFileURL(test_path);
- }
-
- // run N iterations
- GURL::Replacements replacements;
- const std::string query_string =
- "iterations=" + base::IntToString(GetTestIterations()) + "&auto=1";
- replacements.SetQuery(
- query_string.c_str(),
- url_parse::Component(0, query_string.length()));
- test_url = test_url.ReplaceComponents(replacements);
-
- scoped_refptr<TabProxy> tab(GetActiveTab());
- ASSERT_TRUE(tab.get());
- ASSERT_EQ(AUTOMATION_MSG_NAVIGATION_SUCCESS, tab->NavigateToURL(test_url));
-
- // Wait for the test to finish.
- ASSERT_TRUE(WaitUntilCookieValue(
- tab.get(), test_url, "__pc_done",
- TestTimeouts::huge_test_timeout_ms(), "1"));
-
- std::string cookie;
- ASSERT_TRUE(tab->GetCookieByName(test_url, "__pc_pages", &cookie));
- pages->assign(UTF8ToWide(cookie));
- ASSERT_FALSE(pages->empty());
-
- // Get the timing cookie value from the DOM automation.
- std::wstring wcookie;
- ASSERT_TRUE(tab->ExecuteAndExtractString(L"",
- L"window.domAutomationController.send("
- L"JSON.stringify(__get_timings()));",
- &wcookie));
- cookie = base::SysWideToNativeMB(wcookie);
-
- // JSON.stringify() encapsulates the returned string in quotes, strip them.
- std::string::size_type start_idx = cookie.find("\"");
- std::string::size_type end_idx = cookie.find_last_of("\"");
- if (start_idx != std::string::npos &&
- end_idx != std::string::npos &&
- start_idx < end_idx) {
- cookie = cookie.substr(start_idx+1, end_idx-start_idx-1);
- }
-
- timings->assign(cookie);
- ASSERT_FALSE(timings->empty());
- }
-
- // When use_http is true, the test name passed here will be used directly in
- // the path to the test data, so it must be safe for use in a URL without
- // escaping. (No pound (#), question mark (?), semicolon (;), non-ASCII, or
- // other funny stuff.)
- void RunTestWithSuffix(const char* graph, const char* name, bool use_http,
- const char* suffix) {
- std::wstring pages;
- std::string timings;
- size_t start_size = base::GetSystemCommitCharge();
- RunPageCycler(name, &pages, &timings, use_http);
- if (timings.empty() || HasErrors(timings))
- return;
- size_t stop_size = base::GetSystemCommitCharge();
-
- if (!print_times_only_) {
- PrintMemoryUsageInfo(suffix);
- PrintIOPerfInfo(suffix);
- PrintSystemCommitCharge(suffix, stop_size - start_size,
- false /* not important */);
- }
-
- std::string trace_name = "t" + std::string(suffix);
-
- printf("Pages: [%s]\n", base::SysWideToNativeMB(pages).c_str());
-
- PrintResultList(graph, "", trace_name, timings, "ms",
- true /* important */);
- }
-
- void RunTest(const char* graph, const char* name, bool use_http) {
- RunTestWithSuffix(graph, name, use_http, "");
- }
-};
-
-class PageCyclerReferenceTest : public PageCyclerTest {
- public:
- void SetUp() {
- UseReferenceBuild();
- PageCyclerTest::SetUp();
- }
-
- void RunTest(const char* graph, const char* name, bool use_http) {
- // Run the test.
- PageCyclerTest::RunTestWithSuffix(graph, name, use_http, "_ref");
- }
-};
-
-class PageCyclerExtensionTest : public PageCyclerTest {
- public:
- // Note: we delay the SetUp until RunTest is called so that we can set
- // the user_data_dir based on the test name.
- virtual void SetUp() {}
- void RunTest(const char* graph, const char* extension_profile,
- const char* output_suffix, const char* name, bool use_http) {
- // Set up the extension profile directory.
- ASSERT_TRUE(extension_profile != NULL);
- FilePath data_dir;
- PathService::Get(chrome::DIR_TEST_DATA, &data_dir);
- data_dir = data_dir.AppendASCII("extensions").AppendASCII("profiles").
- AppendASCII(extension_profile);
- ASSERT_TRUE(file_util::DirectoryExists(data_dir));
- set_template_user_data(data_dir);
-
- // Now run the test.
- PageCyclerTest::SetUp();
- PageCyclerTest::RunTestWithSuffix(graph, name, use_http, output_suffix);
- }
-};
-
-class PageCyclerExtensionWebRequestTest : public PageCyclerExtensionTest {
- public:
- PageCyclerExtensionWebRequestTest()
- : PageCyclerExtensionTest()
- {
- // Enable experimental extension APIs for webrequest tests.
- launch_arguments_.AppendSwitch(switches::kEnableExperimentalExtensionApis);
- }
-};
-
-static FilePath GetDatabaseDataPath(const char* name) {
- FilePath test_path;
- PathService::Get(base::DIR_SOURCE_ROOT, &test_path);
- test_path = test_path.Append(FILE_PATH_LITERAL("tools"));
- test_path = test_path.Append(FILE_PATH_LITERAL("page_cycler"));
- test_path = test_path.Append(FILE_PATH_LITERAL("database"));
- test_path = test_path.AppendASCII(name);
- return test_path;
-}
-
-static FilePath GetIndexedDatabaseDataPath(const char* name) {
- FilePath test_path;
- PathService::Get(base::DIR_SOURCE_ROOT, &test_path);
- test_path = test_path.Append(FILE_PATH_LITERAL("tools"));
- test_path = test_path.Append(FILE_PATH_LITERAL("page_cycler"));
- test_path = test_path.Append(FILE_PATH_LITERAL("indexed_db"));
- test_path = test_path.AppendASCII(name);
- return test_path;
-}
-
-static bool HasDatabaseErrors(const std::string timings) {
- size_t pos = 0;
- size_t new_pos = 0;
- std::string time_str;
- int time = 0;
- do {
- new_pos = timings.find(',', pos);
- if (new_pos == std::string::npos)
- new_pos = timings.length();
- if (!base::StringToInt(timings.begin() + pos,
- timings.begin() + new_pos,
- &time)) {
- LOG(ERROR) << "Invalid time reported: " << time_str;
- return true;
- }
- if (time < 0) {
- switch (time) {
- case -1:
- LOG(ERROR) << "Error while opening the database.";
- break;
- case -2:
- LOG(ERROR) << "Error while setting up the database.";
- break;
- case -3:
- LOG(ERROR) << "Error while running the transactions.";
- break;
- default:
- LOG(ERROR) << "Unknown error: " << time;
- }
- return true;
- }
-
- pos = new_pos + 1;
- } while (pos < timings.length());
-
- return false;
-}
-
-class PageCyclerDatabaseTest : public PageCyclerTest {
- public:
- PageCyclerDatabaseTest() {
- print_times_only_ = true;
- }
-
- virtual FilePath GetDataPath(const char* name) {
- return GetDatabaseDataPath(name);
- }
-
- virtual bool HasErrors(const std::string timings) {
- return HasDatabaseErrors(timings);
- }
-
- virtual int GetTestIterations() {
- return kDatabaseTestIterations;
- }
-};
-
-class PageCyclerDatabaseReferenceTest : public PageCyclerReferenceTest {
- public:
- PageCyclerDatabaseReferenceTest() {
- print_times_only_ = true;
- }
-
- virtual FilePath GetDataPath(const char* name) {
- return GetDatabaseDataPath(name);
- }
-
- virtual bool HasErrors(const std::string timings) {
- return HasDatabaseErrors(timings);
- }
-
- virtual int GetTestIterations() {
- return kDatabaseTestIterations;
- }
-};
-
-class PageCyclerIndexedDatabaseTest : public PageCyclerTest {
- public:
- PageCyclerIndexedDatabaseTest() {
- print_times_only_ = true;
- }
-
- virtual FilePath GetDataPath(const char* name) {
- return GetIndexedDatabaseDataPath(name);
- }
-
- virtual bool HasErrors(const std::string timings) {
- return HasDatabaseErrors(timings);
- }
-
- virtual int GetTestIterations() {
- return kIDBTestIterations;
- }
-};
-
-class PageCyclerIndexedDatabaseReferenceTest : public PageCyclerReferenceTest {
- public:
- PageCyclerIndexedDatabaseReferenceTest() {
- print_times_only_ = true;
- }
-
- virtual FilePath GetDataPath(const char* name) {
- return GetIndexedDatabaseDataPath(name);
- }
-
- virtual bool HasErrors(const std::string timings) {
- return HasDatabaseErrors(timings);
- }
-
- virtual int GetTestIterations() {
- return kIDBTestIterations;
- }
-};
-
-// This macro simplifies setting up regular and reference build tests.
-#define PAGE_CYCLER_TESTS(test, name, use_http) \
-TEST_F(PageCyclerTest, name) { \
- RunTest("times", test, use_http); \
-} \
-TEST_F(PageCyclerReferenceTest, name) { \
- RunTest("times", test, use_http); \
-}
-
-// This macro simplifies setting up regular and reference build tests
-// for HTML5 database tests.
-// FLAKY http://crbug.com/67918
-#define PAGE_CYCLER_DATABASE_TESTS(test, name) \
-TEST_F(PageCyclerDatabaseTest, FLAKY_Database##name##File) { \
- RunTest(test, test, false); \
-} \
-TEST_F(PageCyclerDatabaseReferenceTest, FLAKY_Database##name##File) { \
- RunTest(test, test, false); \
-}
-
-// This macro simplifies setting up regular and reference build tests
-// for HTML5 Indexed DB tests.
-// FLAKY http://crbug.com/67918
-#define PAGE_CYCLER_IDB_TESTS(test, name) \
-TEST_F(PageCyclerIndexedDatabaseTest, FLAKY_IndexedDB##name##File) { \
- RunTest(test, test, false); \
-} \
-TEST_F(PageCyclerIndexedDatabaseReferenceTest, IndexedDB##name##File) { \
- RunTest(test, test, false); \
-}
-
-// These are shorthand for File vs. Http tests.
-#define PAGE_CYCLER_FILE_TESTS(test, name) \
- PAGE_CYCLER_TESTS(test, name, false)
-#define PAGE_CYCLER_HTTP_TESTS(test, name) \
- PAGE_CYCLER_TESTS(test, name, true)
-
-// This macro lets us define tests with 1 and 10 extensions with 1 content
-// script each. The name for the 10-extension case is changed so as not
-// to run by default on the buildbots.
-#define PAGE_CYCLER_EXTENSIONS_FILE_TESTS(test, name) \
-TEST_F(PageCyclerExtensionTest, name) { \
- RunTest("times", "content_scripts1", "_extcs1", test, false); \
-} \
-TEST_F(PageCyclerExtensionTest, name##10) { \
- RunTest("times", "content_scripts10", "_extcs10", test, false); \
-}
-
-// This macro lets us define tests with an extension that listens to the
-// webrequest.onBeforeRequest. It measures the effect that a blocking event
-// for every request has on page cycle time.
-#define PAGE_CYCLER_EXTENSIONS_WEBREQUEST_FILE_TESTS(test, name) \
-TEST_F(PageCyclerExtensionWebRequestTest, name) { \
- RunTest("times", "extension_webrequest", "_extwr", test, false); \
-}
-
-// file-URL tests
-PAGE_CYCLER_FILE_TESTS("moz", MozFile);
-PAGE_CYCLER_EXTENSIONS_FILE_TESTS("moz", MozFile);
-PAGE_CYCLER_EXTENSIONS_WEBREQUEST_FILE_TESTS("moz", MozFile)
-PAGE_CYCLER_FILE_TESTS("intl1", Intl1File);
-PAGE_CYCLER_FILE_TESTS("intl2", Intl2File);
-PAGE_CYCLER_EXTENSIONS_WEBREQUEST_FILE_TESTS("intl2", Intl2File);
-PAGE_CYCLER_FILE_TESTS("dom", DomFile);
-PAGE_CYCLER_FILE_TESTS("dhtml", DhtmlFile);
-PAGE_CYCLER_FILE_TESTS("morejs", MorejsFile);
-PAGE_CYCLER_EXTENSIONS_FILE_TESTS("morejs", MorejsFile);
-// added more tests here:
-PAGE_CYCLER_FILE_TESTS("alexa_us", Alexa_usFile);
-PAGE_CYCLER_FILE_TESTS("moz2", Moz2File);
-PAGE_CYCLER_FILE_TESTS("morejsnp", MorejsnpFile);
-PAGE_CYCLER_FILE_TESTS("bloat", BloatFile);
-
-// http (localhost) tests
-PAGE_CYCLER_HTTP_TESTS("moz", MozHttp);
-PAGE_CYCLER_HTTP_TESTS("intl1", Intl1Http);
-PAGE_CYCLER_HTTP_TESTS("intl2", Intl2Http);
-PAGE_CYCLER_HTTP_TESTS("dom", DomHttp);
-PAGE_CYCLER_HTTP_TESTS("bloat", BloatHttp);
-
-// HTML5 database tests
-// These tests are _really_ slow on XP/Vista.
-#if !defined(OS_WIN)
-PAGE_CYCLER_DATABASE_TESTS("select-transactions",
- SelectTransactions);
-PAGE_CYCLER_DATABASE_TESTS("select-readtransactions",
- SelectReadTransactions);
-PAGE_CYCLER_DATABASE_TESTS("select-readtransactions-read-results",
- SelectReadTransactionsReadResults);
-PAGE_CYCLER_DATABASE_TESTS("insert-transactions",
- InsertTransactions);
-PAGE_CYCLER_DATABASE_TESTS("update-transactions",
- UpdateTransactions);
-PAGE_CYCLER_DATABASE_TESTS("delete-transactions",
- DeleteTransactions);
-PAGE_CYCLER_DATABASE_TESTS("pseudo-random-transactions",
- PseudoRandomTransactions);
-#endif
-
-// Indexed DB tests.
-PAGE_CYCLER_IDB_TESTS("basic_insert", BasicInsert);
-
-} // namespace
« no previous file with comments | « chrome/test/memory_test/memory_test.cc ('k') | chrome/test/perf/dom_checker_uitest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698