OLD | NEW |
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/test/perftimer.h" | 5 #include "base/test/perf_time_logger.h" |
6 #include "testing/gtest/include/gtest/gtest.h" | 6 #include "testing/gtest/include/gtest/gtest.h" |
7 #include "url/gurl.h" | 7 #include "url/gurl.h" |
8 #include "url/url_canon.h" | 8 #include "url/url_canon.h" |
9 #include "url/url_canon_stdstring.h" | 9 #include "url/url_canon_stdstring.h" |
10 #include "url/url_parse.h" | 10 #include "url/url_parse.h" |
11 | 11 |
12 // TODO(darin): chrome code should not depend on WebCore innards | 12 // TODO(darin): chrome code should not depend on WebCore innards |
13 #if 0 | 13 #if 0 |
14 #pragma warning(push, 0) | 14 #pragma warning(push, 0) |
15 | 15 |
16 // This is because we have multiple headers called "CString.h" and KURL.cpp | 16 // This is because we have multiple headers called "CString.h" and KURL.cpp |
17 // can grab the wrong one. | 17 // can grab the wrong one. |
18 #include "webkit/third_party/WebCore/platform/CString.h" | 18 #include "webkit/third_party/WebCore/platform/CString.h" |
19 | 19 |
20 #define KURL WebKitKURL | 20 #define KURL WebKitKURL |
21 #include "KURL.cpp" | 21 #include "KURL.cpp" |
22 #include "KURL.h" | 22 #include "KURL.h" |
23 #pragma warning(pop) | 23 #pragma warning(pop) |
24 | 24 |
25 TEST(URLParse, FullURL) { | 25 TEST(URLParse, FullURL) { |
26 const char url[] = "http://me:pass@host/foo/bar.html;param?query=yes#ref"; | 26 const char url[] = "http://me:pass@host/foo/bar.html;param?query=yes#ref"; |
27 int url_len = static_cast<int>(strlen(url)); | 27 int url_len = static_cast<int>(strlen(url)); |
28 | 28 |
29 url_parse::Parsed parsed; | 29 url_parse::Parsed parsed; |
30 PerfTimeLogger timer("Full_URL_Parse_AMillion"); | 30 base::PerfTimeLogger timer("Full_URL_Parse_AMillion"); |
31 | 31 |
32 for (int i = 0; i < 1000000; i++) | 32 for (int i = 0; i < 1000000; i++) |
33 url_parse::ParseStandardURL(url, url_len, &parsed); | 33 url_parse::ParseStandardURL(url, url_len, &parsed); |
34 timer.Done(); | 34 timer.Done(); |
35 } | 35 } |
36 | 36 |
37 namespace { | 37 namespace { |
38 | 38 |
39 const char typical_url1[] = "http://www.google.com/search?q=url+parsing&ie=utf-8
&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firefox-a"; | 39 const char typical_url1[] = "http://www.google.com/search?q=url+parsing&ie=utf-8
&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firefox-a"; |
40 int typical_url1_len = static_cast<int>(strlen(typical_url1)); | 40 int typical_url1_len = static_cast<int>(strlen(typical_url1)); |
41 | 41 |
42 const char typical_url2[] = "http://www.amazon.com/Stephen-King-Thrillers-Horror
-People/dp/0766012336/ref=sr_1_2/133-4144931-4505264?ie=UTF8&s=books&qid=2144880
915&sr=8-2"; | 42 const char typical_url2[] = "http://www.amazon.com/Stephen-King-Thrillers-Horror
-People/dp/0766012336/ref=sr_1_2/133-4144931-4505264?ie=UTF8&s=books&qid=2144880
915&sr=8-2"; |
43 int typical_url2_len = static_cast<int>(strlen(typical_url2)); | 43 int typical_url2_len = static_cast<int>(strlen(typical_url2)); |
44 | 44 |
45 const char typical_url3[] = "http://store.apple.com/1-800-MY-APPLE/WebObjects/Ap
pleStore.woa/wa/RSLID?nnmm=browse&mco=578E9744&node=home/desktop/mac_pro"; | 45 const char typical_url3[] = "http://store.apple.com/1-800-MY-APPLE/WebObjects/Ap
pleStore.woa/wa/RSLID?nnmm=browse&mco=578E9744&node=home/desktop/mac_pro"; |
46 int typical_url3_len = static_cast<int>(strlen(typical_url3)); | 46 int typical_url3_len = static_cast<int>(strlen(typical_url3)); |
47 | 47 |
48 } // namespace | 48 } // namespace |
49 | 49 |
50 TEST(URLParse, TypicalURLParse) { | 50 TEST(URLParse, TypicalURLParse) { |
51 url_parse::Parsed parsed1; | 51 url_parse::Parsed parsed1; |
52 url_parse::Parsed parsed2; | 52 url_parse::Parsed parsed2; |
53 url_parse::Parsed parsed3; | 53 url_parse::Parsed parsed3; |
54 | 54 |
55 // Do this 1/3 of a million times since we do 3 different URLs. | 55 // Do this 1/3 of a million times since we do 3 different URLs. |
56 PerfTimeLogger parse_timer("Typical_URL_Parse_AMillion"); | 56 base::PerfTimeLogger parse_timer("Typical_URL_Parse_AMillion"); |
57 for (int i = 0; i < 333333; i++) { | 57 for (int i = 0; i < 333333; i++) { |
58 url_parse::ParseStandardURL(typical_url1, typical_url1_len, &parsed1); | 58 url_parse::ParseStandardURL(typical_url1, typical_url1_len, &parsed1); |
59 url_parse::ParseStandardURL(typical_url2, typical_url2_len, &parsed2); | 59 url_parse::ParseStandardURL(typical_url2, typical_url2_len, &parsed2); |
60 url_parse::ParseStandardURL(typical_url3, typical_url3_len, &parsed3); | 60 url_parse::ParseStandardURL(typical_url3, typical_url3_len, &parsed3); |
61 } | 61 } |
62 parse_timer.Done(); | 62 parse_timer.Done(); |
63 } | 63 } |
64 | 64 |
65 // Includes both parsing and canonicalization with no mallocs. | 65 // Includes both parsing and canonicalization with no mallocs. |
66 TEST(URLParse, TypicalURLParseCanon) { | 66 TEST(URLParse, TypicalURLParseCanon) { |
67 url_parse::Parsed parsed1; | 67 url_parse::Parsed parsed1; |
68 url_parse::Parsed parsed2; | 68 url_parse::Parsed parsed2; |
69 url_parse::Parsed parsed3; | 69 url_parse::Parsed parsed3; |
70 | 70 |
71 PerfTimeLogger canon_timer("Typical_Parse_Canon_AMillion"); | 71 base::PerfTimeLogger canon_timer("Typical_Parse_Canon_AMillion"); |
72 url_parse::Parsed out_parsed; | 72 url_parse::Parsed out_parsed; |
73 url_canon::RawCanonOutput<1024> output; | 73 url_canon::RawCanonOutput<1024> output; |
74 for (int i = 0; i < 333333; i++) { // divide by 3 so we get 1M | 74 for (int i = 0; i < 333333; i++) { // divide by 3 so we get 1M |
75 url_parse::ParseStandardURL(typical_url1, typical_url1_len, &parsed1); | 75 url_parse::ParseStandardURL(typical_url1, typical_url1_len, &parsed1); |
76 output.set_length(0); | 76 output.set_length(0); |
77 url_canon::CanonicalizeStandardURL(typical_url1, typical_url1_len, parsed1, | 77 url_canon::CanonicalizeStandardURL(typical_url1, typical_url1_len, parsed1, |
78 NULL, &output, &out_parsed); | 78 NULL, &output, &out_parsed); |
79 | 79 |
80 url_parse::ParseStandardURL(typical_url2, typical_url2_len, &parsed2); | 80 url_parse::ParseStandardURL(typical_url2, typical_url2_len, &parsed2); |
81 output.set_length(0); | 81 output.set_length(0); |
82 url_canon::CanonicalizeStandardURL(typical_url2, typical_url2_len, parsed2, | 82 url_canon::CanonicalizeStandardURL(typical_url2, typical_url2_len, parsed2, |
83 NULL, &output, &out_parsed); | 83 NULL, &output, &out_parsed); |
84 | 84 |
85 url_parse::ParseStandardURL(typical_url3, typical_url3_len, &parsed3); | 85 url_parse::ParseStandardURL(typical_url3, typical_url3_len, &parsed3); |
86 output.set_length(0); | 86 output.set_length(0); |
87 url_canon::CanonicalizeStandardURL(typical_url3, typical_url3_len, parsed3, | 87 url_canon::CanonicalizeStandardURL(typical_url3, typical_url3_len, parsed3, |
88 NULL, &output, &out_parsed); | 88 NULL, &output, &out_parsed); |
89 } | 89 } |
90 canon_timer.Done(); | 90 canon_timer.Done(); |
91 } | 91 } |
92 | 92 |
93 // Includes both parsing and canonicalization, and mallocs for the output. | 93 // Includes both parsing and canonicalization, and mallocs for the output. |
94 TEST(URLParse, TypicalURLParseCanonStdString) { | 94 TEST(URLParse, TypicalURLParseCanonStdString) { |
95 url_parse::Parsed parsed1; | 95 url_parse::Parsed parsed1; |
96 url_parse::Parsed parsed2; | 96 url_parse::Parsed parsed2; |
97 url_parse::Parsed parsed3; | 97 url_parse::Parsed parsed3; |
98 | 98 |
99 PerfTimeLogger canon_timer("Typical_Parse_Canon_AMillion"); | 99 base::PerfTimeLogger canon_timer("Typical_Parse_Canon_AMillion"); |
100 url_parse::Parsed out_parsed; | 100 url_parse::Parsed out_parsed; |
101 for (int i = 0; i < 333333; i++) { // divide by 3 so we get 1M | 101 for (int i = 0; i < 333333; i++) { // divide by 3 so we get 1M |
102 url_parse::ParseStandardURL(typical_url1, typical_url1_len, &parsed1); | 102 url_parse::ParseStandardURL(typical_url1, typical_url1_len, &parsed1); |
103 std::string out1; | 103 std::string out1; |
104 url_canon::StdStringCanonOutput output1(&out1); | 104 url_canon::StdStringCanonOutput output1(&out1); |
105 url_canon::CanonicalizeStandardURL(typical_url1, typical_url1_len, parsed1, | 105 url_canon::CanonicalizeStandardURL(typical_url1, typical_url1_len, parsed1, |
106 NULL, &output1, &out_parsed); | 106 NULL, &output1, &out_parsed); |
107 | 107 |
108 url_parse::ParseStandardURL(typical_url2, typical_url2_len, &parsed2); | 108 url_parse::ParseStandardURL(typical_url2, typical_url2_len, &parsed2); |
109 std::string out2; | 109 std::string out2; |
110 url_canon::StdStringCanonOutput output2(&out2); | 110 url_canon::StdStringCanonOutput output2(&out2); |
111 url_canon::CanonicalizeStandardURL(typical_url2, typical_url2_len, parsed2, | 111 url_canon::CanonicalizeStandardURL(typical_url2, typical_url2_len, parsed2, |
112 NULL, &output2, &out_parsed); | 112 NULL, &output2, &out_parsed); |
113 | 113 |
114 url_parse::ParseStandardURL(typical_url3, typical_url3_len, &parsed3); | 114 url_parse::ParseStandardURL(typical_url3, typical_url3_len, &parsed3); |
115 std::string out3; | 115 std::string out3; |
116 url_canon::StdStringCanonOutput output3(&out3); | 116 url_canon::StdStringCanonOutput output3(&out3); |
117 url_canon::CanonicalizeStandardURL(typical_url3, typical_url3_len, parsed3, | 117 url_canon::CanonicalizeStandardURL(typical_url3, typical_url3_len, parsed3, |
118 NULL, &output3, &out_parsed); | 118 NULL, &output3, &out_parsed); |
119 } | 119 } |
120 canon_timer.Done(); | 120 canon_timer.Done(); |
121 } | 121 } |
122 | 122 |
123 TEST(URLParse, GURL) { | 123 TEST(URLParse, GURL) { |
124 // Don't want to time creating the input strings. | 124 // Don't want to time creating the input strings. |
125 std::string stdurl1(typical_url1); | 125 std::string stdurl1(typical_url1); |
126 std::string stdurl2(typical_url2); | 126 std::string stdurl2(typical_url2); |
127 std::string stdurl3(typical_url3); | 127 std::string stdurl3(typical_url3); |
128 | 128 |
129 PerfTimeLogger gurl_timer("Typical_GURL_AMillion"); | 129 base::PerfTimeLogger gurl_timer("Typical_GURL_AMillion"); |
130 for (int i = 0; i < 333333; i++) { // divide by 3 so we get 1M | 130 for (int i = 0; i < 333333; i++) { // divide by 3 so we get 1M |
131 GURL gurl1(stdurl1); | 131 GURL gurl1(stdurl1); |
132 GURL gurl2(stdurl2); | 132 GURL gurl2(stdurl2); |
133 GURL gurl3(stdurl3); | 133 GURL gurl3(stdurl3); |
134 } | 134 } |
135 gurl_timer.Done(); | 135 gurl_timer.Done(); |
136 } | 136 } |
137 | 137 |
138 // TODO(darin): chrome code should not depend on WebCore innards | 138 // TODO(darin): chrome code should not depend on WebCore innards |
139 TEST(URLParse, KURL) { | 139 TEST(URLParse, KURL) { |
140 PerfTimeLogger timer_kurl("Typical_KURL_AMillion"); | 140 base::PerfTimeLogger timer_kurl("Typical_KURL_AMillion"); |
141 for (int i = 0; i < 333333; i++) { // divide by 3 so we get 1M | 141 for (int i = 0; i < 333333; i++) { // divide by 3 so we get 1M |
142 WebCore::WebKitKURL kurl1(typical_url1); | 142 WebCore::WebKitKURL kurl1(typical_url1); |
143 WebCore::WebKitKURL kurl2(typical_url2); | 143 WebCore::WebKitKURL kurl2(typical_url2); |
144 WebCore::WebKitKURL kurl3(typical_url3); | 144 WebCore::WebKitKURL kurl3(typical_url3); |
145 } | 145 } |
146 timer_kurl.Done(); | 146 timer_kurl.Done(); |
147 } | 147 } |
148 | 148 |
149 #endif | 149 #endif |
OLD | NEW |