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

Side by Side Diff: chrome/browser/renderer_host/backing_store_manager.cc

Issue 6010004: Refactor RenderWidgetHost::set_paint_observer() (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Added comments Created 10 years 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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 "chrome/browser/renderer_host/backing_store_manager.h" 5 #include "chrome/browser/renderer_host/backing_store_manager.h"
6 6
7 #include "base/sys_info.h" 7 #include "base/sys_info.h"
8 #include "base/command_line.h" 8 #include "base/command_line.h"
9 #include "chrome/common/chrome_switches.h" 9 #include "chrome/common/chrome_switches.h"
10 #include "chrome/browser/renderer_host/backing_store.h" 10 #include "chrome/browser/renderer_host/backing_store.h"
11 #include "chrome/browser/renderer_host/render_widget_host.h" 11 #include "chrome/browser/renderer_host/render_widget_host.h"
12 #include "chrome/browser/renderer_host/render_widget_host_painting_observer.h"
13 #include "chrome/common/chrome_constants.h" 12 #include "chrome/common/chrome_constants.h"
14 #include "chrome/common/mru_cache.h" 13 #include "chrome/common/mru_cache.h"
14 #include "chrome/common/notification_service.h"
15 15
16 namespace { 16 namespace {
17 17
18 // There are two separate caches, |large_cache| and |small_cache|. large_cache 18 // There are two separate caches, |large_cache| and |small_cache|. large_cache
19 // is meant for large items (tabs, popup windows), while small_cache is meant 19 // is meant for large items (tabs, popup windows), while small_cache is meant
20 // for small items (extension toolstrips and buttons, etc.). The idea is that 20 // for small items (extension toolstrips and buttons, etc.). The idea is that
21 // we'll almost always try to evict from large_cache first since small_cache 21 // we'll almost always try to evict from large_cache first since small_cache
22 // items will tend to be visible more of the time. 22 // items will tend to be visible more of the time.
23 typedef OwningMRUCache<RenderWidgetHost*, BackingStore*> BackingStoreCache; 23 typedef OwningMRUCache<RenderWidgetHost*, BackingStore*> BackingStoreCache;
24 static BackingStoreCache* large_cache = NULL; 24 static BackingStoreCache* large_cache = NULL;
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
62 62
63 // The maximum about of memory to use for all BackingStoreCache object combined. 63 // The maximum about of memory to use for all BackingStoreCache object combined.
64 static size_t MaxBackingStoreMemory() { 64 static size_t MaxBackingStoreMemory() {
65 // Compute in terms of the number of large monitor's worth of backing-store. 65 // Compute in terms of the number of large monitor's worth of backing-store.
66 return MaxNumberOfBackingStores() * kMemoryMultiplier; 66 return MaxNumberOfBackingStores() * kMemoryMultiplier;
67 } 67 }
68 68
69 // Expires the given |backing_store| from |cache|. 69 // Expires the given |backing_store| from |cache|.
70 void ExpireBackingStoreAt(BackingStoreCache* cache, 70 void ExpireBackingStoreAt(BackingStoreCache* cache,
71 BackingStoreCache::iterator backing_store) { 71 BackingStoreCache::iterator backing_store) {
72 RenderWidgetHost* rwh = backing_store->second->render_widget_host(); 72 NotificationService::current()->Notify(
73 if (rwh->painting_observer()) { 73 NotificationType::RENDER_WIDGET_HOST_WILL_DESTROY_BACKING_STORE,
74 rwh->painting_observer()->WidgetWillDestroyBackingStore( 74 Source<RenderWidgetHost>(backing_store->first),
75 backing_store->first, 75 Details<BackingStore>(backing_store->second));
76 backing_store->second);
77 }
78 cache->Erase(backing_store); 76 cache->Erase(backing_store);
79 } 77 }
80 78
81 size_t ExpireLastBackingStore(BackingStoreCache* cache) { 79 size_t ExpireLastBackingStore(BackingStoreCache* cache) {
82 if (cache->size() < 1) 80 if (cache->size() < 1)
83 return 0; 81 return 0;
84 82
85 // Crazy C++ alert: rbegin.base() is a forward iterator pointing to end(), 83 // Crazy C++ alert: rbegin.base() is a forward iterator pointing to end(),
86 // so we need to do -- to move one back to the actual last item. 84 // so we need to do -- to move one back to the actual last item.
87 BackingStoreCache::iterator entry = --cache->rbegin().base(); 85 BackingStoreCache::iterator entry = --cache->rbegin().base();
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after
279 size_t mem = 0; 277 size_t mem = 0;
280 BackingStoreCache::iterator it; 278 BackingStoreCache::iterator it;
281 for (it = large_cache->begin(); it != large_cache->end(); ++it) 279 for (it = large_cache->begin(); it != large_cache->end(); ++it)
282 mem += it->second->MemorySize(); 280 mem += it->second->MemorySize();
283 281
284 for (it = small_cache->begin(); it != small_cache->end(); ++it) 282 for (it = small_cache->begin(); it != small_cache->end(); ++it)
285 mem += it->second->MemorySize(); 283 mem += it->second->MemorySize();
286 284
287 return mem; 285 return mem;
288 } 286 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698