Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2009 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/renderer/render_thread.h" | 5 #include "chrome/renderer/render_thread.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <map> | 8 #include <map> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| 11 #if defined(USE_SYSTEM_SQLITE) | |
| 12 #include <sqlite3.h> | |
| 13 #else | |
| 14 #include "third_party/sqlite/preprocessed/sqlite3.h" | |
| 15 #endif | |
| 16 | |
| 11 #include "base/command_line.h" | 17 #include "base/command_line.h" |
| 12 #include "base/lazy_instance.h" | 18 #include "base/lazy_instance.h" |
| 13 #include "base/logging.h" | 19 #include "base/logging.h" |
| 14 #include "base/nullable_string16.h" | 20 #include "base/nullable_string16.h" |
| 15 #include "base/process_util.h" | 21 #include "base/process_util.h" |
| 16 #include "base/shared_memory.h" | 22 #include "base/shared_memory.h" |
| 17 #include "base/stats_table.h" | 23 #include "base/stats_table.h" |
| 18 #include "base/string_util.h" | 24 #include "base/string_util.h" |
| 19 #include "base/thread_local.h" | 25 #include "base/thread_local.h" |
| 20 #include "chrome/common/appcache/appcache_dispatcher.h" | 26 #include "chrome/common/appcache/appcache_dispatcher.h" |
| (...skipping 19 matching lines...) Expand all Loading... | |
| 40 #include "chrome/renderer/external_extension.h" | 46 #include "chrome/renderer/external_extension.h" |
| 41 #include "chrome/renderer/loadtimes_extension_bindings.h" | 47 #include "chrome/renderer/loadtimes_extension_bindings.h" |
| 42 #include "chrome/renderer/net/render_dns_master.h" | 48 #include "chrome/renderer/net/render_dns_master.h" |
| 43 #include "chrome/renderer/render_process.h" | 49 #include "chrome/renderer/render_process.h" |
| 44 #include "chrome/renderer/render_view.h" | 50 #include "chrome/renderer/render_view.h" |
| 45 #include "chrome/renderer/renderer_webkitclient_impl.h" | 51 #include "chrome/renderer/renderer_webkitclient_impl.h" |
| 46 #include "chrome/renderer/renderer_web_database_observer.h" | 52 #include "chrome/renderer/renderer_web_database_observer.h" |
| 47 #include "chrome/renderer/socket_stream_dispatcher.h" | 53 #include "chrome/renderer/socket_stream_dispatcher.h" |
| 48 #include "chrome/renderer/user_script_slave.h" | 54 #include "chrome/renderer/user_script_slave.h" |
| 49 #include "ipc/ipc_message.h" | 55 #include "ipc/ipc_message.h" |
| 56 #include "third_party/tcmalloc/tcmalloc/src/google/malloc_extension.h" | |
| 50 #include "webkit/api/public/WebCache.h" | 57 #include "webkit/api/public/WebCache.h" |
| 51 #include "webkit/api/public/WebColor.h" | 58 #include "webkit/api/public/WebColor.h" |
| 52 #include "webkit/api/public/WebCrossOriginPreflightResultCache.h" | 59 #include "webkit/api/public/WebCrossOriginPreflightResultCache.h" |
| 60 #include "webkit/api/public/WebDatabase.h" | |
| 61 #include "webkit/api/public/WebFontCache.h" | |
| 62 #include "webkit/api/public/WebKit.h" | |
| 53 #include "webkit/api/public/WebRuntimeFeatures.h" | 63 #include "webkit/api/public/WebRuntimeFeatures.h" |
| 54 #include "webkit/api/public/WebFontCache.h" | |
| 55 #include "webkit/api/public/WebColor.h" | |
| 56 #include "webkit/api/public/WebDatabase.h" | |
| 57 #include "webkit/api/public/WebKit.h" | |
| 58 #include "webkit/api/public/WebScriptController.h" | 64 #include "webkit/api/public/WebScriptController.h" |
| 59 #include "webkit/api/public/WebSecurityPolicy.h" | 65 #include "webkit/api/public/WebSecurityPolicy.h" |
| 60 #include "webkit/api/public/WebStorageEventDispatcher.h" | 66 #include "webkit/api/public/WebStorageEventDispatcher.h" |
| 61 #include "webkit/api/public/WebString.h" | 67 #include "webkit/api/public/WebString.h" |
| 62 #include "webkit/extensions/v8/benchmarking_extension.h" | 68 #include "webkit/extensions/v8/benchmarking_extension.h" |
| 63 #include "webkit/extensions/v8/gears_extension.h" | 69 #include "webkit/extensions/v8/gears_extension.h" |
| 64 #include "webkit/extensions/v8/interval_extension.h" | 70 #include "webkit/extensions/v8/interval_extension.h" |
| 65 #include "webkit/extensions/v8/playback_extension.h" | 71 #include "webkit/extensions/v8/playback_extension.h" |
| 66 #include "third_party/tcmalloc/tcmalloc/src/google/malloc_extension.h" | |
| 67 | 72 |
| 68 #if defined(OS_WIN) | 73 #if defined(OS_WIN) |
| 69 #include <windows.h> | 74 #include <windows.h> |
| 70 #include <objbase.h> | 75 #include <objbase.h> |
| 71 #endif | 76 #endif |
| 72 | 77 |
| 73 using WebKit::WebCache; | 78 using WebKit::WebCache; |
| 74 using WebKit::WebCrossOriginPreflightResultCache; | 79 using WebKit::WebCrossOriginPreflightResultCache; |
| 80 using WebKit::WebFontCache; | |
| 75 using WebKit::WebRuntimeFeatures; | 81 using WebKit::WebRuntimeFeatures; |
| 76 using WebKit::WebFontCache; | |
| 77 using WebKit::WebSecurityPolicy; | 82 using WebKit::WebSecurityPolicy; |
| 78 using WebKit::WebScriptController; | 83 using WebKit::WebScriptController; |
| 79 using WebKit::WebString; | 84 using WebKit::WebString; |
| 80 using WebKit::WebStorageEventDispatcher; | 85 using WebKit::WebStorageEventDispatcher; |
| 81 using WebKit::WebView; | 86 using WebKit::WebView; |
| 82 | 87 |
| 83 namespace { | 88 namespace { |
| 84 static const unsigned int kCacheStatsDelayMS = 2000 /* milliseconds */; | 89 static const unsigned int kCacheStatsDelayMS = 2000 /* milliseconds */; |
| 85 static const double kInitialIdleHandlerDelayS = 1.0 /* seconds */; | 90 static const double kInitialIdleHandlerDelayS = 1.0 /* seconds */; |
| 86 | 91 |
| (...skipping 483 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 570 // Clear the object cache (as much as possible; some live objects cannot be | 575 // Clear the object cache (as much as possible; some live objects cannot be |
| 571 // freed). | 576 // freed). |
| 572 WebCache::clear(); | 577 WebCache::clear(); |
| 573 | 578 |
| 574 // Clear the font/glyph cache. | 579 // Clear the font/glyph cache. |
| 575 WebFontCache::clear(); | 580 WebFontCache::clear(); |
| 576 | 581 |
| 577 // Clear the Cross-Origin Preflight cache. | 582 // Clear the Cross-Origin Preflight cache. |
| 578 WebCrossOriginPreflightResultCache::clear(); | 583 WebCrossOriginPreflightResultCache::clear(); |
| 579 | 584 |
| 585 // Release all freeable memory from the SQLite process-global page cache (a | |
| 586 // low-level object which backs the Connection-specific page caches). | |
| 587 while (sqlite3_release_memory(std::numeric_limits<int>::max()) > 0) | |
|
darin (slow to review)
2009/10/31 22:39:40
do we compile with -DSQLITE_ENABLE_MEMORY_MANAGEME
| |
| 588 ; | |
| 589 | |
| 580 // Repeatedly call the V8 idle notification until it returns true ("nothing | 590 // Repeatedly call the V8 idle notification until it returns true ("nothing |
| 581 // more to free"). Note that it makes more sense to do this than to implement | 591 // more to free"). Note that it makes more sense to do this than to implement |
| 582 // a new "delete everything" pass because object references make it difficult | 592 // a new "delete everything" pass because object references make it difficult |
| 583 // to free everything possible in just one pass. | 593 // to free everything possible in just one pass. |
| 584 while (!v8::V8::IdleNotification()) | 594 while (!v8::V8::IdleNotification()) |
| 585 ; | 595 ; |
| 586 | 596 |
| 587 #if defined(OS_WIN) | 597 #if defined(OS_WIN) |
| 588 // Tell tcmalloc to release any free pages it's still holding. | 598 // Tell tcmalloc to release any free pages it's still holding. |
| 589 MallocExtension::instance()->ReleaseFreeMemory(); | 599 MallocExtension::instance()->ReleaseFreeMemory(); |
| 590 #endif | 600 #endif |
| 591 } | 601 } |
| 592 | 602 |
| 593 void RenderThread::OnPurgePluginListCache(bool reload_pages) { | 603 void RenderThread::OnPurgePluginListCache(bool reload_pages) { |
| 594 EnsureWebKitInitialized(); | 604 EnsureWebKitInitialized(); |
| 595 // The call below will cause a GetPlugins call with refresh=true, but at this | 605 // The call below will cause a GetPlugins call with refresh=true, but at this |
| 596 // point we already know that the browser has refreshed its list, so disable | 606 // point we already know that the browser has refreshed its list, so disable |
| 597 // refresh temporarily to prevent each renderer process causing the list to be | 607 // refresh temporarily to prevent each renderer process causing the list to be |
| 598 // regenerated. | 608 // regenerated. |
| 599 plugin_refresh_allowed_ = false; | 609 plugin_refresh_allowed_ = false; |
| 600 WebKit::resetPluginCache(reload_pages); | 610 WebKit::resetPluginCache(reload_pages); |
| 601 plugin_refresh_allowed_ = true; | 611 plugin_refresh_allowed_ = true; |
| 602 } | 612 } |
| OLD | NEW |