| Index: chrome/test/ui/dromaeo_benchmark_uitest.cc
|
| diff --git a/chrome/test/ui/dromaeo_benchmark_uitest.cc b/chrome/test/ui/dromaeo_benchmark_uitest.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..74d853514b06b077144ca44f291ecc0a508ff959
|
| --- /dev/null
|
| +++ b/chrome/test/ui/dromaeo_benchmark_uitest.cc
|
| @@ -0,0 +1,156 @@
|
| +// Copyright (c) 2009 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/command_line.h"
|
| +#include "base/file_path.h"
|
| +#include "base/file_util.h"
|
| +#include "base/path_service.h"
|
| +#include "base/string_util.h"
|
| +#include "base/values.h"
|
| +#include "chrome/common/chrome_paths.h"
|
| +#include "chrome/common/chrome_switches.h"
|
| +#include "chrome/common/json_value_serializer.h"
|
| +#include "chrome/test/automation/tab_proxy.h"
|
| +#include "chrome/test/ui/javascript_test_util.h"
|
| +#include "chrome/test/ui/ui_test.h"
|
| +#include "googleurl/src/gurl.h"
|
| +#include "net/base/net_util.h"
|
| +
|
| +namespace {
|
| +
|
| +static const FilePath::CharType kStartFile[] =
|
| + FILE_PATH_LITERAL("index.html?dom|jslib&automated");
|
| +
|
| +const wchar_t kRunDromaeo[] = L"run-dromaeo-benchmark";
|
| +
|
| +class DromaeoTest : public UITest {
|
| + public:
|
| + typedef std::map<std::string, std::string> ResultsMap;
|
| +
|
| + DromaeoTest() : reference_(false) {
|
| + dom_automation_enabled_ = true;
|
| + show_window_ = true;
|
| + }
|
| +
|
| + void RunTest() {
|
| + FilePath::StringType start_file(kStartFile);
|
| + FilePath test_path = GetDromaeoDir();
|
| + test_path = test_path.Append(start_file);
|
| + GURL test_url(net::FilePathToFileURL(test_path));
|
| +
|
| + scoped_refptr<TabProxy> tab(GetActiveTab());
|
| + tab->NavigateToURL(test_url);
|
| +
|
| + // Wait for the test to finish.
|
| + ASSERT_TRUE(WaitUntilTestCompletes(tab.get(), test_url));
|
| +
|
| + PrintResults(tab.get());
|
| + }
|
| +
|
| + protected:
|
| + bool reference_; // True if this is a reference build.
|
| +
|
| + private:
|
| + // Return the path to the dromaeo benchmark directory on the local filesystem.
|
| + FilePath GetDromaeoDir() {
|
| + FilePath test_dir;
|
| + PathService::Get(chrome::DIR_TEST_DATA, &test_dir);
|
| + return test_dir.AppendASCII("dromaeo");
|
| + }
|
| +
|
| + bool WaitUntilTestCompletes(TabProxy* tab, const GURL& test_url) {
|
| + return WaitUntilCookieValue(tab, test_url, "__done", 1000,
|
| + UITest::test_timeout_ms(), "1");
|
| + }
|
| +
|
| + bool GetScore(TabProxy* tab, std::string* score) {
|
| + std::wstring score_wide;
|
| + bool succeeded = tab->ExecuteAndExtractString(L"",
|
| + L"window.domAutomationController.send(automation.GetScore());",
|
| + &score_wide);
|
| +
|
| + // Note that we don't use ASSERT_TRUE here (and in some other places) as it
|
| + // doesn't work inside a function with a return type other than void.
|
| + EXPECT_TRUE(succeeded);
|
| + if (!succeeded)
|
| + return false;
|
| +
|
| + score->assign(WideToUTF8(score_wide));
|
| + return true;
|
| + }
|
| +
|
| + bool GetResults(TabProxy* tab, ResultsMap* results) {
|
| + std::wstring json_wide;
|
| + bool succeeded = tab->ExecuteAndExtractString(L"",
|
| + L"window.domAutomationController.send("
|
| + L" JSON.stringify(automation.GetResults()));",
|
| + &json_wide);
|
| +
|
| + EXPECT_TRUE(succeeded);
|
| + if (!succeeded)
|
| + return false;
|
| +
|
| + std::string json = WideToUTF8(json_wide);
|
| + return JsonDictionaryToMap(json, results);
|
| + }
|
| +
|
| + void PrintResults(TabProxy* tab) {
|
| + std::string score;
|
| + ASSERT_TRUE(GetScore(tab, &score));
|
| +
|
| + ResultsMap results;
|
| + ASSERT_TRUE(GetResults(tab, &results));
|
| +
|
| + std::string trace_name = reference_ ? "score_ref" : "score";
|
| + std::string unit_name = "runs/s";
|
| +
|
| + PrintResult("score", "", trace_name, score, unit_name, true);
|
| +
|
| + ResultsMap::const_iterator it = results.begin();
|
| + for (; it != results.end(); ++it)
|
| + PrintResult(it->first, "", trace_name, it->second, unit_name, false);
|
| + }
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(DromaeoTest);
|
| +};
|
| +
|
| +class DromaeoReferenceTest : public DromaeoTest {
|
| + public:
|
| + DromaeoReferenceTest() : DromaeoTest() {
|
| + reference_ = true;
|
| + }
|
| +
|
| + // Override the browser directory that is used by UITest::SetUp to cause it
|
| + // to use the reference build instead.
|
| + void SetUp() {
|
| + FilePath dir;
|
| + PathService::Get(chrome::DIR_TEST_TOOLS, &dir);
|
| + dir = dir.AppendASCII("reference_build");
|
| +#if defined(OS_WIN)
|
| + dir = dir.AppendASCII("chrome");
|
| +#elif defined(OS_LINUX)
|
| + dir = dir.AppendASCII("chrome_linux");
|
| +#elif defined(OS_MACOSX)
|
| + dir = dir.AppendASCII("chrome_mac");
|
| +#endif
|
| + browser_directory_ = dir;
|
| + UITest::SetUp();
|
| + }
|
| +};
|
| +
|
| +TEST_F(DromaeoTest, Perf) {
|
| + if (!CommandLine::ForCurrentProcess()->HasSwitch(kRunDromaeo))
|
| + return;
|
| +
|
| + RunTest();
|
| +}
|
| +
|
| +TEST_F(DromaeoReferenceTest, Perf) {
|
| + if (!CommandLine::ForCurrentProcess()->HasSwitch(kRunDromaeo))
|
| + return;
|
| +
|
| + RunTest();
|
| +}
|
| +
|
| +} // namespace
|
|
|