11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright (c) 2011 The Chromium Authors. All rights reserved. 21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Use of this source code is governed by a BSD-style license that can be 31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// found in the LICENSE file. 41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include <string> 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/message_loop/message_loop.h" 81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "components/web_cache/browser/web_cache_manager.h" 91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "content/public/test/test_browser_thread.h" 101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "testing/gtest/include/gtest/gtest.h" 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciusing base::Time; 131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciusing base::TimeDelta; 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciusing content::BrowserThread; 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciusing blink::WebCache; 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace web_cache { 181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass WebCacheManagerTest : public testing::Test { 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci protected: 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci typedef WebCacheManager::StatsMap StatsMap; 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci typedef WebCacheManager::Allocation Allocation; 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci typedef WebCacheManager::AllocationStrategy AllocationStrategy; 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci static const int kRendererID; 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci static const int kRendererID2; 271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci static const WebCache::UsageStats kStats; 281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci static const WebCache::UsageStats kStats2; 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci WebCacheManagerTest() 311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci : ui_thread_(BrowserThread::UI, &message_loop_) { 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Thunks to access protected members of WebCacheManager 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci static std::map<int, WebCacheManager::RendererInfo>& stats( 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci WebCacheManager* h) { 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return h->stats_; 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci static void SimulateInactivity(WebCacheManager* h, int renderer_id) { 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci stats(h)[renderer_id].access = Time::Now() - TimeDelta::FromMinutes( 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci WebCacheManager::kRendererInactiveThresholdMinutes); 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci h->FindInactiveRenderers(); 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci static std::set<int>& active_renderers(WebCacheManager* h) { 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return h->active_renderers_; 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci static std::set<int>& inactive_renderers(WebCacheManager* h) { 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return h->inactive_renderers_; 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci static void GatherStats(WebCacheManager* h, 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::set<int> renderers, 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci WebCache::UsageStats* stats) { 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci h->GatherStats(renderers, stats); 561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci static size_t GetSize(int tactic, 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const WebCache::UsageStats& stats) { 591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return WebCacheManager::GetSize( 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci static_cast<WebCacheManager::AllocationTactic>(tactic), stats); 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci static bool AttemptTactic(WebCacheManager* h, 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int active_tactic, 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const WebCache::UsageStats& active_stats, 651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int inactive_tactic, 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const WebCache::UsageStats& inactive_stats, 671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::list< std::pair<int,size_t> >* strategy) { 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return h->AttemptTactic( 691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci static_cast<WebCacheManager::AllocationTactic>(active_tactic), 701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci active_stats, 711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci static_cast<WebCacheManager::AllocationTactic>(inactive_tactic), 721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci inactive_stats, 731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci strategy); 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci static void AddToStrategy(WebCacheManager* h, 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::set<int> renderers, 771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci int tactic, 781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci size_t extra_bytes_to_allocate, 791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::list< std::pair<int,size_t> >* strategy) { 801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci h->AddToStrategy(renderers, 811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci static_cast<WebCacheManager::AllocationTactic>(tactic), 821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci extra_bytes_to_allocate, 831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci strategy); 841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci enum { 871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DIVIDE_EVENLY = WebCacheManager::DIVIDE_EVENLY, 881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci KEEP_CURRENT_WITH_HEADROOM = WebCacheManager::KEEP_CURRENT_WITH_HEADROOM, 891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci KEEP_CURRENT = WebCacheManager::KEEP_CURRENT, 901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci KEEP_LIVE_WITH_HEADROOM = WebCacheManager::KEEP_LIVE_WITH_HEADROOM, 911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci KEEP_LIVE = WebCacheManager::KEEP_LIVE, 921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }; 931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci WebCacheManager* manager() { return &manager_; } 951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private: 971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci WebCacheManager manager_; 981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::MessageLoop message_loop_; 991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci content::TestBrowserThread ui_thread_; 1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}; 1011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// static 1031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst int WebCacheManagerTest::kRendererID = 146; 1041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// static 1061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst int WebCacheManagerTest::kRendererID2 = 245; 1071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// static 1091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst WebCache::UsageStats WebCacheManagerTest::kStats = { 1101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 1111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1024 * 1024, 1121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1024 * 1024, 1131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 256 * 1024, 1141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 512, 1151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }; 1161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// static 1181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciconst WebCache::UsageStats WebCacheManagerTest::kStats2 = { 1191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 0, 1201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2 * 1024 * 1024, 1211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2 * 1024 * 1024, 1221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2 * 256 * 1024, 1231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2 * 512, 1241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci }; 1251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccistatic bool operator==(const WebCache::UsageStats& lhs, 1271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const WebCache::UsageStats& rhs) { 1281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci return !::memcmp(&lhs, &rhs, sizeof(WebCache::UsageStats)); 1291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(WebCacheManagerTest, AddRemoveRendererTest) { 1321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0U, active_renderers(manager()).size()); 1331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0U, inactive_renderers(manager()).size()); 1341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->Add(kRendererID); 1361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1U, active_renderers(manager()).count(kRendererID)); 1371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0U, inactive_renderers(manager()).count(kRendererID)); 1381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->Remove(kRendererID); 1401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0U, active_renderers(manager()).size()); 1411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0U, inactive_renderers(manager()).size()); 1421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(WebCacheManagerTest, ActiveInactiveTest) { 1451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->Add(kRendererID); 1461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->ObserveActivity(kRendererID); 1481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1U, active_renderers(manager()).count(kRendererID)); 1491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0U, inactive_renderers(manager()).count(kRendererID)); 1501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SimulateInactivity(manager(), kRendererID); 1521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0U, active_renderers(manager()).count(kRendererID)); 1531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1U, inactive_renderers(manager()).count(kRendererID)); 1541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->ObserveActivity(kRendererID); 1561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1U, active_renderers(manager()).count(kRendererID)); 1571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0U, inactive_renderers(manager()).count(kRendererID)); 1581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->Remove(kRendererID); 1601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(WebCacheManagerTest, ObserveStatsTest) { 1631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->Add(kRendererID); 1641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1U, stats(manager()).size()); 1661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->ObserveStats(kRendererID, kStats); 1681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(1U, stats(manager()).size()); 1701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(kStats == stats(manager())[kRendererID]); 1711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->Remove(kRendererID); 1731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(WebCacheManagerTest, SetGlobalSizeLimitTest) { 1761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci size_t limit = manager()->GetDefaultGlobalSizeLimit(); 1771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->SetGlobalSizeLimit(limit); 1781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(limit, manager()->global_size_limit()); 1791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->SetGlobalSizeLimit(0); 1811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0U, manager()->global_size_limit()); 1821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 1831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(WebCacheManagerTest, GatherStatsTest) { 1851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->Add(kRendererID); 1861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->Add(kRendererID2); 1871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->ObserveStats(kRendererID, kStats); 1891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->ObserveStats(kRendererID2, kStats2); 1901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::set<int> renderer_set; 1921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci renderer_set.insert(kRendererID); 1931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci WebCache::UsageStats stats; 1951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GatherStats(manager(), renderer_set, &stats); 1961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(kStats == stats); 1981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 1991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci renderer_set.insert(kRendererID2); 2001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci GatherStats(manager(), renderer_set, &stats); 2011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci WebCache::UsageStats expected_stats = kStats; 2031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expected_stats.minDeadCapacity += kStats2.minDeadCapacity; 2041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expected_stats.maxDeadCapacity += kStats2.maxDeadCapacity; 2051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expected_stats.capacity += kStats2.capacity; 2061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expected_stats.liveSize += kStats2.liveSize; 2071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci expected_stats.deadSize += kStats2.deadSize; 2081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(expected_stats == stats); 2101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->Remove(kRendererID); 2121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->Remove(kRendererID2); 2131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 2141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(WebCacheManagerTest, GetSizeTest) { 2161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0U, GetSize(DIVIDE_EVENLY, kStats)); 2171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_LT(256 * 1024u + 512, GetSize(KEEP_CURRENT_WITH_HEADROOM, kStats)); 2181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(256 * 1024u + 512, GetSize(KEEP_CURRENT, kStats)); 2191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_LT(256 * 1024u, GetSize(KEEP_LIVE_WITH_HEADROOM, kStats)); 2201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(256 * 1024u, GetSize(KEEP_LIVE, kStats)); 2211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 2221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(WebCacheManagerTest, AttemptTacticTest) { 2241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->Add(kRendererID); 2251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->Add(kRendererID2); 2261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->ObserveActivity(kRendererID); 2281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci SimulateInactivity(manager(), kRendererID2); 2291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->ObserveStats(kRendererID, kStats); 2311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->ObserveStats(kRendererID2, kStats2); 2321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->SetGlobalSizeLimit(kStats.liveSize + kStats.deadSize + 2341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kStats2.liveSize + kStats2.deadSize/2); 2351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AllocationStrategy strategy; 2371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_FALSE(AttemptTactic(manager(), 2391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci KEEP_CURRENT, 2401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kStats, 2411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci KEEP_CURRENT, 2421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kStats2, 2431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci &strategy)); 2441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(strategy.empty()); 2451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_TRUE(AttemptTactic(manager(), 2471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci KEEP_CURRENT, 2481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kStats, 2491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci KEEP_LIVE, 2501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kStats2, 2511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci &strategy)); 2521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(2U, strategy.size()); 2531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AllocationStrategy::iterator iter = strategy.begin(); 2551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci while (iter != strategy.end()) { 2561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (iter->first == kRendererID) 2571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_LE(kStats.liveSize + kStats.deadSize, iter->second); 2581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci else if (iter->first == kRendererID2) 2591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_LE(kStats2.liveSize, iter->second); 2601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci else 2611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ADD_FAILURE(); // Unexpected entry in strategy. 2621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ++iter; 2631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 2641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->Remove(kRendererID); 2661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->Remove(kRendererID2); 2671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 2681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(WebCacheManagerTest, AddToStrategyTest) { 2701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->Add(kRendererID); 2711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->Add(kRendererID2); 2721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci std::set<int> renderer_set; 2741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci renderer_set.insert(kRendererID); 2751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci renderer_set.insert(kRendererID2); 2761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->ObserveStats(kRendererID, kStats); 2781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->ObserveStats(kRendererID2, kStats2); 2791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const size_t kExtraBytesToAllocate = 10 * 1024; 2811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AllocationStrategy strategy; 2831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AddToStrategy(manager(), 2841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci renderer_set, 2851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci KEEP_CURRENT, 2861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kExtraBytesToAllocate, 2871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci &strategy); 2881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(2U, strategy.size()); 2901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci size_t total_bytes = 0; 2921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci AllocationStrategy::iterator iter = strategy.begin(); 2931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci while (iter != strategy.end()) { 2941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci total_bytes += iter->second; 2951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 2961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci if (iter->first == kRendererID) 2971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_LE(kStats.liveSize + kStats.deadSize, iter->second); 2981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci else if (iter->first == kRendererID2) 2991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_LE(kStats2.liveSize + kStats2.deadSize, iter->second); 3001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci else 3011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ADD_FAILURE(); // Unexpected entry in strategy. 3021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ++iter; 3031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 3041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci size_t expected_total_bytes = kExtraBytesToAllocate + 3061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kStats.liveSize + kStats.deadSize + 3071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci kStats2.liveSize + kStats2.deadSize; 3081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_GE(expected_total_bytes, total_bytes); 3101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->Remove(kRendererID); 3121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->Remove(kRendererID2); 3131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 3141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Regression test for http://crbug.com/12362. 3161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// There are three operations in the following order will cause the crash: 3171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Remove(kRendererID) -> ObserveActivity(kRendererID) -> Remove(kRendererID2) 3181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// To prevent similar failures in the future, 6 tests are added in total to 3191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// cover all the possible orderings of these three operations. 3201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(WebCacheManagerTest, 3211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CallRemoveRendererAndObserveActivityInAnyOrderShouldNotCrashTest_1) { 3221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0U, active_renderers(manager()).size()); 3231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0U, inactive_renderers(manager()).size()); 3241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Add, Remove, and ObserveActivity trigger deferred 3261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // calls to ReviseAllocationStrategy and that we call it directly after each 3271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // operation to sidestep the need to wait for an unobservable background 3281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // operation. 3291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->Add(kRendererID); 3301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->ReviseAllocationStrategy(); 3311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->Add(kRendererID2); 3321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->ReviseAllocationStrategy(); 3331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // The following order will cause a crash in http://crbug.com/12362. 3351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->Remove(kRendererID); 3361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->ReviseAllocationStrategy(); 3371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->ObserveActivity(kRendererID); 3391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->ReviseAllocationStrategy(); 3401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->Remove(kRendererID2); 3421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->ReviseAllocationStrategy(); 3431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 3441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(WebCacheManagerTest, 3461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CallRemoveRendererAndObserveActivityInAnyOrderShouldNotCrashTest_2) { 3471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0U, active_renderers(manager()).size()); 3481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0U, inactive_renderers(manager()).size()); 3491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Add, Remove, and ObserveActivity trigger deferred 3511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // calls to ReviseAllocationStrategy and that we call it directly after each 3521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // operation to sidestep the need to wait for an unobservable background 3531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // operation. 3541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->Add(kRendererID); 3551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->ReviseAllocationStrategy(); 3561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->Add(kRendererID2); 3571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->ReviseAllocationStrategy(); 3581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->Remove(kRendererID); 3601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->ReviseAllocationStrategy(); 3611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->Remove(kRendererID2); 3631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->ReviseAllocationStrategy(); 3641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->ObserveActivity(kRendererID); 3661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->ReviseAllocationStrategy(); 3671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 3691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(WebCacheManagerTest, 3711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CallRemoveRendererAndObserveActivityInAnyOrderShouldNotCrashTest_3) { 3721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0U, active_renderers(manager()).size()); 3731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0U, inactive_renderers(manager()).size()); 3741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Add, Remove, and ObserveActivity trigger deferred 3761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // calls to ReviseAllocationStrategy and that we call it directly after each 3771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // operation to sidestep the need to wait for an unobservable background 3781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // operation. 3791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->Add(kRendererID); 3801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->ReviseAllocationStrategy(); 3811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->Add(kRendererID2); 3821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->ReviseAllocationStrategy(); 3831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->ObserveActivity(kRendererID); 3851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0U, inactive_renderers(manager()).size()); 3861320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3871320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->Remove(kRendererID); 3881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->ReviseAllocationStrategy(); 3891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->Remove(kRendererID2); 3911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->ReviseAllocationStrategy(); 3921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 3931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(WebCacheManagerTest, 3951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CallRemoveRendererAndObserveActivityInAnyOrderShouldNotCrashTest_4) { 3961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0U, active_renderers(manager()).size()); 3971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0U, inactive_renderers(manager()).size()); 3981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 3991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Add, Remove, and ObserveActivity trigger deferred 4001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // calls to ReviseAllocationStrategy and that we call it directly after each 4011320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // operation to sidestep the need to wait for an unobservable background 4021320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // operation. 4031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->Add(kRendererID); 4041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->ReviseAllocationStrategy(); 4051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->Add(kRendererID2); 4061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->ReviseAllocationStrategy(); 4071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4081320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->ObserveActivity(kRendererID); 4091320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0U, inactive_renderers(manager()).size()); 4101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->Remove(kRendererID2); 4121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->ReviseAllocationStrategy(); 4131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->Remove(kRendererID); 4151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->ReviseAllocationStrategy(); 4161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 4171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(WebCacheManagerTest, 4191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CallRemoveRendererAndObserveActivityInAnyOrderShouldNotCrashTest_5) { 4201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0U, active_renderers(manager()).size()); 4211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0U, inactive_renderers(manager()).size()); 4221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Add, Remove, and ObserveActivity trigger deferred 4241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // calls to ReviseAllocationStrategy and that we call it directly after each 4251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // operation to sidestep the need to wait for an unobservable background 4261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // operation. 4271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->Add(kRendererID); 4281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->ReviseAllocationStrategy(); 4291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->Add(kRendererID2); 4301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->ReviseAllocationStrategy(); 4311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->Remove(kRendererID2); 4331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->ReviseAllocationStrategy(); 4341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->ObserveActivity(kRendererID); 4361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->ReviseAllocationStrategy(); 4371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->Remove(kRendererID); 4391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->ReviseAllocationStrategy(); 4401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 4411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciTEST_F(WebCacheManagerTest, 4431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CallRemoveRendererAndObserveActivityInAnyOrderShouldNotCrashTest_6) { 4441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0U, active_renderers(manager()).size()); 4451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci EXPECT_EQ(0U, inactive_renderers(manager()).size()); 4461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Add, Remove, and ObserveActivity trigger deferred 4481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // calls to ReviseAllocationStrategy and that we call it directly after each 4491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // operation to sidestep the need to wait for an unobservable background 4501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // operation. 4511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->Add(kRendererID); 4521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->ReviseAllocationStrategy(); 4531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->Add(kRendererID2); 4541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->ReviseAllocationStrategy(); 4551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4561320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->Remove(kRendererID2); 4571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->ReviseAllocationStrategy(); 4581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4591320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->Remove(kRendererID); 4601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->ReviseAllocationStrategy(); 4611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->ObserveActivity(kRendererID); 4631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci manager()->ReviseAllocationStrategy(); 4641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 4651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 4661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} // namespace web_cache 467