1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
// 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/command_line.h"
#include "base/file_util.h"
#include "base/path_service.h"
#include "base/string_util.h"
#include "base/test/test_timeouts.h"
#include "base/utf_string_conversions.h"
#include "base/values.h"
#include "chrome/common/chrome_paths.h"
#include "chrome/test/automation/tab_proxy.h"
#include "chrome/test/perf/perf_test.h"
#include "chrome/test/ui/javascript_test_util.h"
#include "chrome/test/ui/ui_perf_test.h"
#include "googleurl/src/gurl.h"
#include "net/base/net_util.h"
namespace {
const char kRunKraken[] = "run-kraken-benchmark";
class KrakenBenchmarkTest : public UIPerfTest {
public:
typedef std::map<std::string, std::string> ResultsMap;
KrakenBenchmarkTest() : reference_(false) {
dom_automation_enabled_ = true;
show_window_ = true;
}
void RunTest() {
FilePath test_path;
PathService::Get(chrome::DIR_APP, &test_path);
test_path = test_path.AppendASCII("test")
.AppendASCII("data")
.AppendASCII("third_party")
.AppendASCII("kraken")
.AppendASCII("hosted")
.AppendASCII("kraken-1.1")
.Append(FILE_PATH_LITERAL("driver.html"));
GURL test_url(net::FilePathToFileURL(test_path));
scoped_refptr<TabProxy> tab(GetActiveTab());
ASSERT_EQ(AUTOMATION_MSG_NAVIGATION_SUCCESS, 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:
bool WaitUntilTestCompletes(TabProxy* tab, const GURL& test_url) {
return WaitUntilCookieValue(tab, test_url, "__done",
TestTimeouts::large_test_timeout(), "1");
}
bool GetResults(TabProxy* tab, ResultsMap* results) {
std::wstring json_wide;
bool succeeded = tab->ExecuteAndExtractString(L"",
L"window.domAutomationController.send("
L" 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) {
ResultsMap results;
ASSERT_TRUE(GetResults(tab, &results));
std::string trace_name = reference_ ? "score_ref" : "score";
perf_test::PrintResult("score", "", trace_name, results["score"], "ms",
true);
ResultsMap::const_iterator it = results.begin();
for (; it != results.end(); ++it) {
if (it->first == "score")
continue;
perf_test::PrintResult(it->first, "", trace_name, it->second, "ms",
false);
}
}
DISALLOW_COPY_AND_ASSIGN(KrakenBenchmarkTest);
};
class KrakenBenchmarkReferenceTest : public KrakenBenchmarkTest {
public:
KrakenBenchmarkReferenceTest() : KrakenBenchmarkTest() {
reference_ = true;
}
void SetUp() {
UseReferenceBuild();
KrakenBenchmarkTest::SetUp();
}
};
TEST_F(KrakenBenchmarkTest, Perf) {
if (!CommandLine::ForCurrentProcess()->HasSwitch(kRunKraken))
return;
RunTest();
}
TEST_F(KrakenBenchmarkReferenceTest, Perf) {
if (!CommandLine::ForCurrentProcess()->HasSwitch(kRunKraken))
return;
RunTest();
}
} // namespace
|