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

Side by Side Diff: content/browser/renderer_host/render_process_host_impl.cc

Issue 356453003: Don't share renderers between unrelated tabs on Android. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Move declaration of more services to a separate CL. Created 6 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 // Represents the browser side of the browser <--> renderer communication 5 // Represents the browser side of the browser <--> renderer communication
6 // channel. There will be one RenderProcessHost per renderer process. 6 // channel. There will be one RenderProcessHost per renderer process.
7 7
8 #include "content/browser/renderer_host/render_process_host_impl.h" 8 #include "content/browser/renderer_host/render_process_host_impl.h"
9 9
10 #include <algorithm> 10 #include <algorithm>
(...skipping 376 matching lines...) Expand 10 before | Expand all | Expand 10 after
387 387
388 // Stores the maximum number of renderer processes the content module can 388 // Stores the maximum number of renderer processes the content module can
389 // create. 389 // create.
390 static size_t g_max_renderer_count_override = 0; 390 static size_t g_max_renderer_count_override = 0;
391 391
392 // static 392 // static
393 size_t RenderProcessHost::GetMaxRendererProcessCount() { 393 size_t RenderProcessHost::GetMaxRendererProcessCount() {
394 if (g_max_renderer_count_override) 394 if (g_max_renderer_count_override)
395 return g_max_renderer_count_override; 395 return g_max_renderer_count_override;
396 396
397 // Defines the maximum number of renderer processes according to the 397 // On Android we don't maintain a limit on the number of renderer process
398 // amount of installed memory as reported by the OS. The calculation 398 // hosts we keep around - we are happy with keeping a lot of these, as long as
399 // assumes that you want the renderers to use half of the installed 399 // the number of live renderer processes remains reasonable, and on Android
400 // RAM and assuming that each WebContents uses ~40MB. 400 // the OS takes care of that.
401 // If you modify this assumption, you need to adjust the 401 #if defined(OS_ANDROID)
klobag.chromium 2014/06/27 16:25:42 hmm, I don't think this is a good way. It makes th
ppi 2014/06/27 16:40:32 But it doesn't diverge too much from the codepaths
ppi 2014/06/27 16:44:32 Should we add a separate boolean function to the A
jam 2014/07/14 22:45:56 I agree with Grace that it's confusing to return 0
ppi 2014/07/16 13:26:54 Done.
402 // ThirtyFourTabs test to match the expected number of processes. 402 return 0u;
403 #endif
404
405 // On other platforms, we calculate the maximum number of renderer process
406 // hosts according to the amount of installed memory as reported by the OS.
407 // The calculation assumes that you want the renderers to use half of the
408 // installed RAM and assuming that each WebContents uses ~40MB. If you modify
409 // this assumption, you need to adjust the ThirtyFourTabs test to match the
410 // expected number of processes.
403 // 411 //
404 // With the given amounts of installed memory below on a 32-bit CPU, 412 // With the given amounts of installed memory below on a 32-bit CPU, the
405 // the maximum renderer count will roughly be as follows: 413 // maximum renderer count will roughly be as follows:
406 // 414 //
407 // 128 MB -> 3 415 // 128 MB -> 3
408 // 512 MB -> 6 416 // 512 MB -> 6
409 // 1024 MB -> 12 417 // 1024 MB -> 12
410 // 4096 MB -> 51 418 // 4096 MB -> 51
411 // 16384 MB -> 82 (kMaxRendererProcessCount) 419 // 16384 MB -> 82 (kMaxRendererProcessCount)
412 420
413 static size_t max_count = 0; 421 static size_t max_count = 0;
414 if (!max_count) { 422 if (!max_count) {
415 const size_t kEstimatedWebContentsMemoryUsage = 423 const size_t kEstimatedWebContentsMemoryUsage =
(...skipping 1363 matching lines...) Expand 10 before | Expand all | Expand 10 after
1779 return false; 1787 return false;
1780 1788
1781 if (run_renderer_in_process()) 1789 if (run_renderer_in_process())
1782 return true; 1790 return true;
1783 1791
1784 // NOTE: Sometimes it's necessary to create more render processes than 1792 // NOTE: Sometimes it's necessary to create more render processes than
1785 // GetMaxRendererProcessCount(), for instance when we want to create 1793 // GetMaxRendererProcessCount(), for instance when we want to create
1786 // a renderer process for a browser context that has no existing 1794 // a renderer process for a browser context that has no existing
1787 // renderers. This is OK in moderation, since the 1795 // renderers. This is OK in moderation, since the
1788 // GetMaxRendererProcessCount() is conservative. 1796 // GetMaxRendererProcessCount() is conservative.
1789 if (g_all_hosts.Get().size() >= GetMaxRendererProcessCount()) 1797 size_t render_host_limit = GetMaxRendererProcessCount();
1798 if (render_host_limit && g_all_hosts.Get().size() >= render_host_limit)
klobag.chromium 2014/06/27 16:25:42 Should we check the live process count?
ppi 2014/06/27 16:40:32 Dead process hosts can come back (re-spawn their p
1790 return true; 1799 return true;
1791 1800
1792 return GetContentClient()->browser()-> 1801 return GetContentClient()->browser()->
1793 ShouldTryToUseExistingProcessHost(browser_context, url); 1802 ShouldTryToUseExistingProcessHost(browser_context, url);
1794 } 1803 }
1795 1804
1796 // static 1805 // static
1797 RenderProcessHost* RenderProcessHost::GetExistingProcessHost( 1806 RenderProcessHost* RenderProcessHost::GetExistingProcessHost(
1798 BrowserContext* browser_context, 1807 BrowserContext* browser_context,
1799 const GURL& site_url) { 1808 const GURL& site_url) {
(...skipping 561 matching lines...) Expand 10 before | Expand all | Expand 10 after
2361 void RenderProcessHostImpl::GpuMemoryBufferAllocated( 2370 void RenderProcessHostImpl::GpuMemoryBufferAllocated(
2362 IPC::Message* reply, 2371 IPC::Message* reply,
2363 const gfx::GpuMemoryBufferHandle& handle) { 2372 const gfx::GpuMemoryBufferHandle& handle) {
2364 DCHECK_CURRENTLY_ON(BrowserThread::UI); 2373 DCHECK_CURRENTLY_ON(BrowserThread::UI);
2365 ChildProcessHostMsg_SyncAllocateGpuMemoryBuffer::WriteReplyParams(reply, 2374 ChildProcessHostMsg_SyncAllocateGpuMemoryBuffer::WriteReplyParams(reply,
2366 handle); 2375 handle);
2367 Send(reply); 2376 Send(reply);
2368 } 2377 }
2369 2378
2370 } // namespace content 2379 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698