| Index: chrome/browser/renderer_host/render_process_host.cc
|
| ===================================================================
|
| --- chrome/browser/renderer_host/render_process_host.cc (revision 18263)
|
| +++ chrome/browser/renderer_host/render_process_host.cc (working copy)
|
| @@ -6,12 +6,13 @@
|
|
|
| #include "base/rand_util.h"
|
| #include "base/sys_info.h"
|
| +#include "chrome/browser/child_process_security_policy.h"
|
| #include "chrome/common/chrome_constants.h"
|
| #include "chrome/common/notification_service.h"
|
|
|
| namespace {
|
|
|
| -unsigned int GetMaxRendererProcessCount() {
|
| +size_t GetMaxRendererProcessCount() {
|
| // Defines the maximum number of renderer processes according to the
|
| // amount of installed memory as reported by the OS. The table
|
| // values are calculated by assuming that you want the renderers to
|
| @@ -21,7 +22,7 @@
|
| // If you modify this table you need to adjust browser\browser_uitest.cc
|
| // to match the expected number of processes.
|
|
|
| - static const int kMaxRenderersByRamTier[] = {
|
| + static const size_t kMaxRenderersByRamTier[] = {
|
| 3, // less than 256MB
|
| 6, // 256MB
|
| 9, // 512MB
|
| @@ -39,7 +40,7 @@
|
| 40 // 3584MB
|
| };
|
|
|
| - static unsigned int max_count = 0;
|
| + static size_t max_count = 0;
|
| if (!max_count) {
|
| size_t memory_tier = base::SysInfo::AmountOfPhysicalMemoryMB() / 256;
|
| if (memory_tier >= arraysize(kMaxRenderersByRamTier))
|
| @@ -52,8 +53,24 @@
|
|
|
| // Returns true if the given host is suitable for launching a new view
|
| // associated with the given profile.
|
| -static bool IsSuitableHost(Profile* profile, RenderProcessHost* host) {
|
| - return host->profile() == profile;
|
| +static bool IsSuitableHost(RenderProcessHost* host, Profile* profile,
|
| + RenderProcessHost::Type type) {
|
| + // If the host doesn't have a PID yet, we don't know what it will be used
|
| + // for, so just say it's unsuitable to be safe.
|
| + if (host->pid() == -1)
|
| + return false;
|
| +
|
| + if (host->profile() != profile)
|
| + return false;
|
| +
|
| + RenderProcessHost::Type host_type = RenderProcessHost::TYPE_NORMAL;
|
| + if (ChildProcessSecurityPolicy::GetInstance()->HasDOMUIBindings(host->pid()))
|
| + host_type = RenderProcessHost::TYPE_DOMUI;
|
| + if (ChildProcessSecurityPolicy::GetInstance()->
|
| + HasExtensionBindings(host->pid()))
|
| + host_type = RenderProcessHost::TYPE_EXTENSION;
|
| +
|
| + return host_type == type;
|
| }
|
|
|
| // the global list of all renderer processes
|
| @@ -127,8 +144,7 @@
|
|
|
| // static
|
| bool RenderProcessHost::ShouldTryToUseExistingProcessHost() {
|
| - unsigned int renderer_process_count =
|
| - static_cast<unsigned int>(all_hosts.size());
|
| + size_t renderer_process_count = all_hosts.size();
|
|
|
| // NOTE: Sometimes it's necessary to create more render processes than
|
| // GetMaxRendererProcessCount(), for instance when we want to create
|
| @@ -141,13 +157,15 @@
|
| }
|
|
|
| // static
|
| -RenderProcessHost* RenderProcessHost::GetExistingProcessHost(Profile* profile) {
|
| +RenderProcessHost* RenderProcessHost::GetExistingProcessHost(Profile* profile,
|
| + Type type) {
|
| // First figure out which existing renderers we can use.
|
| std::vector<RenderProcessHost*> suitable_renderers;
|
| suitable_renderers.reserve(size());
|
|
|
| for (iterator iter = begin(); iter != end(); ++iter) {
|
| - if (IsSuitableHost(profile, iter->second))
|
| + if (run_renderer_in_process() ||
|
| + IsSuitableHost(iter->second, profile, type))
|
| suitable_renderers.push_back(iter->second);
|
| }
|
|
|
| @@ -170,3 +188,8 @@
|
| pid_ = pid;
|
| all_hosts.AddWithID(this, pid);
|
| }
|
| +
|
| +void RenderProcessHost::RemoveFromList() {
|
| + if (all_hosts.Lookup(pid_))
|
| + all_hosts.Remove(pid_);
|
| +}
|
|
|