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

Unified Diff: chrome/browser/prerender/prerender_unittest.cc

Issue 10802024: Make three simultanious prerenders the default maximum in Canary and Dev only. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: add an histogram Created 8 years, 5 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
Index: chrome/browser/prerender/prerender_unittest.cc
diff --git a/chrome/browser/prerender/prerender_unittest.cc b/chrome/browser/prerender/prerender_unittest.cc
index 07684df586572a5f9167273e235767bdc62d226b..240f745305703d94df07e71cd191f158e5b0923b 100644
--- a/chrome/browser/prerender/prerender_unittest.cc
+++ b/chrome/browser/prerender/prerender_unittest.cc
@@ -5,6 +5,7 @@
#include "base/command_line.h"
#include "base/memory/scoped_vector.h"
#include "base/message_loop.h"
+#include "base/stringprintf.h"
#include "base/time.h"
#include "chrome/browser/prerender/prerender_contents.h"
#include "chrome/browser/prerender/prerender_handle.h"
@@ -74,6 +75,7 @@ const gfx::Size kSize(640, 480);
class UnitTestPrerenderManager : public PrerenderManager {
public:
+ using PrerenderManager::kMinTimeBetweenPrerendersMs;
using PrerenderManager::kNavigationRecordWindowMs;
using PrerenderManager::GetMaxAge;
@@ -386,67 +388,49 @@ TEST_F(PrerenderTest, ExpireTest) {
ASSERT_EQ(null, prerender_manager()->FindEntry(url));
}
-// LRU Test. Make sure that if we prerender more than one request, that
+// LRU Test. Make sure that if we prerender more requests than we support, that
// the oldest one will be dropped.
TEST_F(PrerenderTest, DropOldestRequestTest) {
- GURL url("http://www.google.com/");
- DummyPrerenderContents* prerender_contents =
- prerender_manager()->CreateNextPrerenderContents(
- url,
- FINAL_STATUS_EVICTED);
- DummyPrerenderContents* null = NULL;
- EXPECT_TRUE(AddSimplePrerender(url));
- EXPECT_EQ(null, prerender_manager()->next_prerender_contents());
- EXPECT_TRUE(prerender_contents->prerendering_has_started());
-
- GURL url1("http://news.google.com/");
- DummyPrerenderContents* prerender_contents1 =
- prerender_manager()->CreateNextPrerenderContents(
- url1,
- FINAL_STATUS_USED);
- EXPECT_TRUE(AddSimplePrerender(url1));
- EXPECT_EQ(null, prerender_manager()->next_prerender_contents());
- EXPECT_TRUE(prerender_contents1->prerendering_has_started());
-
- ASSERT_EQ(null, prerender_manager()->FindEntry(url));
- ASSERT_EQ(prerender_contents1, prerender_manager()->FindAndUseEntry(url1));
-}
+ std::vector<int> concurrencies_to_test(3);
+ concurrencies_to_test.at(0) = prerender_manager()->config().max_concurrency;
dominich 2012/07/19 16:04:38 concurrencies_to_test[0] = ... or concurrencies_t
gavinp 2012/07/23 18:35:21 Done. Although I really like vector<>::at() for it
+ concurrencies_to_test.at(1) = 1;
+ concurrencies_to_test.at(2) = 2;
-// Two element prerender test. Ensure that the LRU operates correctly if we
-// permit 2 elements to be kept prerendered.
-TEST_F(PrerenderTest, TwoElementPrerenderTest) {
- prerender_manager()->mutable_config().max_elements = 2;
- GURL url("http://www.google.com/");
- DummyPrerenderContents* prerender_contents =
- prerender_manager()->CreateNextPrerenderContents(
- url,
- FINAL_STATUS_EVICTED);
DummyPrerenderContents* null = NULL;
- EXPECT_TRUE(AddSimplePrerender(url));
- EXPECT_EQ(null, prerender_manager()->next_prerender_contents());
- EXPECT_TRUE(prerender_contents->prerendering_has_started());
-
- GURL url1("http://news.google.com/");
- DummyPrerenderContents* prerender_contents1 =
- prerender_manager()->CreateNextPrerenderContents(
- url1,
- FINAL_STATUS_USED);
- EXPECT_TRUE(AddSimplePrerender(url1));
- EXPECT_EQ(null, prerender_manager()->next_prerender_contents());
- EXPECT_TRUE(prerender_contents1->prerendering_has_started());
-
- GURL url2("http://images.google.com/");
- DummyPrerenderContents* prerender_contents2 =
- prerender_manager()->CreateNextPrerenderContents(
- url2,
- FINAL_STATUS_USED);
- EXPECT_TRUE(AddSimplePrerender(url2));
- EXPECT_EQ(null, prerender_manager()->next_prerender_contents());
- EXPECT_TRUE(prerender_contents2->prerendering_has_started());
+ GURL url_to_evict("http://www.google.com/evictme");
+
+ for (std::vector<int>::size_type i = 0;
dominich 2012/07/19 16:04:38 iterator loop would be better here.
gavinp 2012/07/23 18:35:21 Done.
+ i < concurrencies_to_test.size();
+ ++i) {
+ const int max_concurrency = concurrencies_to_test.at(i);
+ prerender_manager()->mutable_config().max_concurrency = max_concurrency;
+
+ DummyPrerenderContents* prerender_contents_to_evict =
+ prerender_manager()->CreateNextPrerenderContents(
+ url_to_evict, FINAL_STATUS_EVICTED);
+ EXPECT_TRUE(AddSimplePrerender(url_to_evict));
+ EXPECT_EQ(null, prerender_manager()->next_prerender_contents());
+ EXPECT_TRUE(prerender_contents_to_evict->prerendering_has_started());
+
+ std::vector<GURL> urls;
+ std::vector<PrerenderContents*> prerender_contentses;
dominich 2012/07/19 16:04:38 what's he got in his prerender contentses, my prec
gavinp 2012/07/23 18:35:21 I could have stayed with prerender_contents, but t
+
+ for (int j = 0; j < max_concurrency; ++j) {
+ urls.push_back(GURL(base::StringPrintf("http://google.com/use#%d", j)));
+ prerender_contentses.push_back(
+ prerender_manager()->CreateNextPrerenderContents(urls.back(),
+ FINAL_STATUS_USED));
+ EXPECT_TRUE(AddSimplePrerender(urls.back()));
+ EXPECT_EQ(null, prerender_manager()->next_prerender_contents());
+ EXPECT_TRUE(prerender_contentses.back()->prerendering_has_started());
+ }
- ASSERT_EQ(null, prerender_manager()->FindEntry(url));
- ASSERT_EQ(prerender_contents1, prerender_manager()->FindAndUseEntry(url1));
- ASSERT_EQ(prerender_contents2, prerender_manager()->FindAndUseEntry(url2));
+ ASSERT_EQ(null, prerender_manager()->FindEntry(url_to_evict));
+ for (int j = 0; j < max_concurrency; ++j) {
+ ASSERT_EQ(prerender_contentses.at(j),
dominich 2012/07/19 16:04:38 prerender_contentses[j]
gavinp 2012/07/23 18:35:21 Done.
+ prerender_manager()->FindAndUseEntry(urls.at(j)));
dominich 2012/07/19 16:04:38 urls[j]
gavinp 2012/07/23 18:35:21 Done.
+ }
+ }
}
TEST_F(PrerenderTest, AliasURLTest) {
@@ -511,6 +495,10 @@ TEST_F(PrerenderTest, RateLimitInWindowTest) {
// Ensure that we don't ignore prerender requests outside the rate limit.
TEST_F(PrerenderTest, RateLimitOutsideWindowTest) {
+ // Setting concurrency to one lets us force eviction by adding only one more
+ // prerender.
+ prerender_manager()->mutable_config().max_concurrency = 1;
+
GURL url("http://www.google.com/");
DummyPrerenderContents* prerender_contents =
prerender_manager()->CreateNextPrerenderContents(
@@ -523,7 +511,8 @@ TEST_F(PrerenderTest, RateLimitOutsideWindowTest) {
prerender_manager()->set_rate_limit_enabled(true);
prerender_manager()->AdvanceTimeTicks(
- base::TimeDelta::FromMilliseconds(2000));
+ base::TimeDelta::FromMilliseconds(
+ UnitTestPrerenderManager::kMinTimeBetweenPrerendersMs + 500));
GURL url1("http://news.google.com/");
DummyPrerenderContents* rate_limit_prerender_contents =

Powered by Google App Engine
This is Rietveld 408576698