mirror of
https://github.com/klzgrad/naiveproxy.git
synced 2024-11-29 00:36:10 +03:00
136 lines
4.7 KiB
C++
136 lines
4.7 KiB
C++
// Copyright (c) 2006-2008 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/strings/string_piece.h"
|
|
#include "base/test/perf_time_logger.h"
|
|
#include "testing/gtest/include/gtest/gtest.h"
|
|
#include "url/gurl.h"
|
|
#include "url/third_party/mozilla/url_parse.h"
|
|
#include "url/url_canon.h"
|
|
#include "url/url_canon_stdstring.h"
|
|
|
|
namespace {
|
|
|
|
TEST(URLParse, FullURL) {
|
|
constexpr base::StringPiece kUrl =
|
|
"http://me:pass@host/foo/bar.html;param?query=yes#ref";
|
|
|
|
url::Parsed parsed;
|
|
base::PerfTimeLogger timer("Full_URL_Parse_AMillion");
|
|
|
|
for (int i = 0; i < 1000000; i++)
|
|
url::ParseStandardURL(kUrl.data(), kUrl.size(), &parsed);
|
|
timer.Done();
|
|
}
|
|
|
|
constexpr base::StringPiece kTypicalUrl1 =
|
|
"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";
|
|
|
|
constexpr base::StringPiece kTypicalUrl2 =
|
|
"http://www.amazon.com/Stephen-King-Thrillers-Horror-People/dp/0766012336/"
|
|
"ref=sr_1_2/133-4144931-4505264?ie=UTF8&s=books&qid=2144880915&sr=8-2";
|
|
|
|
constexpr base::StringPiece kTypicalUrl3 =
|
|
"http://store.apple.com/1-800-MY-APPLE/WebObjects/AppleStore.woa/wa/"
|
|
"RSLID?nnmm=browse&mco=578E9744&node=home/desktop/mac_pro";
|
|
|
|
TEST(URLParse, TypicalURLParse) {
|
|
url::Parsed parsed1;
|
|
url::Parsed parsed2;
|
|
url::Parsed parsed3;
|
|
|
|
// Do this 1/3 of a million times since we do 3 different URLs.
|
|
base::PerfTimeLogger parse_timer("Typical_URL_Parse_AMillion");
|
|
for (int i = 0; i < 333333; i++) {
|
|
url::ParseStandardURL(kTypicalUrl1.data(), kTypicalUrl1.size(), &parsed1);
|
|
url::ParseStandardURL(kTypicalUrl2.data(), kTypicalUrl2.size(), &parsed2);
|
|
url::ParseStandardURL(kTypicalUrl3.data(), kTypicalUrl3.size(), &parsed3);
|
|
}
|
|
parse_timer.Done();
|
|
}
|
|
|
|
// Includes both parsing and canonicalization with no mallocs.
|
|
TEST(URLParse, TypicalURLParseCanon) {
|
|
url::Parsed parsed1;
|
|
url::Parsed parsed2;
|
|
url::Parsed parsed3;
|
|
|
|
base::PerfTimeLogger canon_timer("Typical_Parse_Canon_AMillion");
|
|
url::Parsed out_parsed;
|
|
url::RawCanonOutput<1024> output;
|
|
for (int i = 0; i < 333333; i++) { // divide by 3 so we get 1M
|
|
url::ParseStandardURL(kTypicalUrl1.data(), kTypicalUrl1.size(), &parsed1);
|
|
output.set_length(0);
|
|
url::CanonicalizeStandardURL(
|
|
kTypicalUrl1.data(), kTypicalUrl1.size(), parsed1,
|
|
url::SCHEME_WITH_HOST_PORT_AND_USER_INFORMATION, nullptr, &output,
|
|
&out_parsed);
|
|
|
|
url::ParseStandardURL(kTypicalUrl2.data(), kTypicalUrl2.size(), &parsed2);
|
|
output.set_length(0);
|
|
url::CanonicalizeStandardURL(
|
|
kTypicalUrl2.data(), kTypicalUrl2.size(), parsed2,
|
|
url::SCHEME_WITH_HOST_PORT_AND_USER_INFORMATION, nullptr, &output,
|
|
&out_parsed);
|
|
|
|
url::ParseStandardURL(kTypicalUrl3.data(), kTypicalUrl3.size(), &parsed3);
|
|
output.set_length(0);
|
|
url::CanonicalizeStandardURL(
|
|
kTypicalUrl3.data(), kTypicalUrl3.size(), parsed3,
|
|
url::SCHEME_WITH_HOST_PORT_AND_USER_INFORMATION, nullptr, &output,
|
|
&out_parsed);
|
|
}
|
|
canon_timer.Done();
|
|
}
|
|
|
|
// Includes both parsing and canonicalization, and mallocs for the output.
|
|
TEST(URLParse, TypicalURLParseCanonStdString) {
|
|
url::Parsed parsed1;
|
|
url::Parsed parsed2;
|
|
url::Parsed parsed3;
|
|
|
|
base::PerfTimeLogger canon_timer("Typical_Parse_Canon_AMillion");
|
|
url::Parsed out_parsed;
|
|
for (int i = 0; i < 333333; i++) { // divide by 3 so we get 1M
|
|
url::ParseStandardURL(kTypicalUrl1.data(), kTypicalUrl1.size(), &parsed1);
|
|
std::string out1;
|
|
url::StdStringCanonOutput output1(&out1);
|
|
url::CanonicalizeStandardURL(
|
|
kTypicalUrl1.data(), kTypicalUrl1.size(), parsed1,
|
|
url::SCHEME_WITH_HOST_PORT_AND_USER_INFORMATION, nullptr, &output1,
|
|
&out_parsed);
|
|
|
|
url::ParseStandardURL(kTypicalUrl2.data(), kTypicalUrl2.size(), &parsed2);
|
|
std::string out2;
|
|
url::StdStringCanonOutput output2(&out2);
|
|
url::CanonicalizeStandardURL(
|
|
kTypicalUrl2.data(), kTypicalUrl2.size(), parsed2,
|
|
url::SCHEME_WITH_HOST_PORT_AND_USER_INFORMATION, nullptr, &output2,
|
|
&out_parsed);
|
|
|
|
url::ParseStandardURL(kTypicalUrl3.data(), kTypicalUrl3.size(), &parsed3);
|
|
std::string out3;
|
|
url::StdStringCanonOutput output3(&out3);
|
|
url::CanonicalizeStandardURL(
|
|
kTypicalUrl3.data(), kTypicalUrl3.size(), parsed3,
|
|
url::SCHEME_WITH_HOST_PORT_AND_USER_INFORMATION, nullptr, &output3,
|
|
&out_parsed);
|
|
}
|
|
canon_timer.Done();
|
|
}
|
|
|
|
TEST(URLParse, GURL) {
|
|
base::PerfTimeLogger gurl_timer("Typical_GURL_AMillion");
|
|
for (int i = 0; i < 333333; i++) { // divide by 3 so we get 1M
|
|
GURL gurl1(kTypicalUrl1);
|
|
GURL gurl2(kTypicalUrl2);
|
|
GURL gurl3(kTypicalUrl3);
|
|
}
|
|
gurl_timer.Done();
|
|
}
|
|
|
|
} // namespace
|