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

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

Issue 2569963002: MemoryCoordinator checks if ServiceWorker exists on the suspending process (Closed)
Patch Set: Created 4 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
OLDNEW
1 // Copyright 2012 The Chromium Authors. All rights reserved. 1 // Copyright 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 1352 matching lines...) Expand 10 before | Expand all | Expand 10 after
1363 1363
1364 const base::TimeTicks& RenderProcessHostImpl::GetInitTimeForNavigationMetrics() 1364 const base::TimeTicks& RenderProcessHostImpl::GetInitTimeForNavigationMetrics()
1365 const { 1365 const {
1366 return init_time_; 1366 return init_time_;
1367 } 1367 }
1368 1368
1369 bool RenderProcessHostImpl::IsProcessBackgrounded() const { 1369 bool RenderProcessHostImpl::IsProcessBackgrounded() const {
1370 return is_process_backgrounded_; 1370 return is_process_backgrounded_;
1371 } 1371 }
1372 1372
1373 size_t RenderProcessHostImpl::GetWorkerRefCount() const {
1374 return service_worker_ref_count_ + shared_worker_ref_count_;
horo 2016/12/13 06:29:33 DCHECK_CURRENTLY_ON(BrowserThread::UI);
shimazu 2016/12/13 07:24:50 Done.
1375 }
1376
1373 void RenderProcessHostImpl::IncrementServiceWorkerRefCount() { 1377 void RenderProcessHostImpl::IncrementServiceWorkerRefCount() {
1374 DCHECK_CURRENTLY_ON(BrowserThread::UI); 1378 DCHECK_CURRENTLY_ON(BrowserThread::UI);
1375 DCHECK(!is_worker_ref_count_disabled_); 1379 DCHECK(!is_worker_ref_count_disabled_);
1376 ++service_worker_ref_count_; 1380 ++service_worker_ref_count_;
1377 if (worker_ref_count() > max_worker_count_) 1381 if (GetWorkerRefCount() > max_worker_count_)
1378 max_worker_count_ = worker_ref_count(); 1382 max_worker_count_ = GetWorkerRefCount();
1379 } 1383 }
1380 1384
1381 void RenderProcessHostImpl::DecrementServiceWorkerRefCount() { 1385 void RenderProcessHostImpl::DecrementServiceWorkerRefCount() {
1382 DCHECK_CURRENTLY_ON(BrowserThread::UI); 1386 DCHECK_CURRENTLY_ON(BrowserThread::UI);
1383 DCHECK(!is_worker_ref_count_disabled_); 1387 DCHECK(!is_worker_ref_count_disabled_);
1384 DCHECK_GT(worker_ref_count(), 0U); 1388 DCHECK_GT(GetWorkerRefCount(), 0U);
1385 --service_worker_ref_count_; 1389 --service_worker_ref_count_;
1386 if (worker_ref_count() == 0) 1390 if (GetWorkerRefCount() == 0)
1387 Cleanup(); 1391 Cleanup();
1388 } 1392 }
1389 1393
1390 void RenderProcessHostImpl::IncrementSharedWorkerRefCount() { 1394 void RenderProcessHostImpl::IncrementSharedWorkerRefCount() {
1391 DCHECK_CURRENTLY_ON(BrowserThread::UI); 1395 DCHECK_CURRENTLY_ON(BrowserThread::UI);
1392 DCHECK(!is_worker_ref_count_disabled_); 1396 DCHECK(!is_worker_ref_count_disabled_);
1393 ++shared_worker_ref_count_; 1397 ++shared_worker_ref_count_;
1394 if (worker_ref_count() > max_worker_count_) 1398 if (GetWorkerRefCount() > max_worker_count_)
1395 max_worker_count_ = worker_ref_count(); 1399 max_worker_count_ = GetWorkerRefCount();
1396 } 1400 }
1397 1401
1398 void RenderProcessHostImpl::DecrementSharedWorkerRefCount() { 1402 void RenderProcessHostImpl::DecrementSharedWorkerRefCount() {
1399 DCHECK_CURRENTLY_ON(BrowserThread::UI); 1403 DCHECK_CURRENTLY_ON(BrowserThread::UI);
1400 DCHECK(!is_worker_ref_count_disabled_); 1404 DCHECK(!is_worker_ref_count_disabled_);
1401 DCHECK_GT(worker_ref_count(), 0U); 1405 DCHECK_GT(GetWorkerRefCount(), 0U);
1402 --shared_worker_ref_count_; 1406 --shared_worker_ref_count_;
1403 if (worker_ref_count() == 0) 1407 if (GetWorkerRefCount() == 0)
1404 Cleanup(); 1408 Cleanup();
1405 } 1409 }
1406 1410
1407 void RenderProcessHostImpl::ForceReleaseWorkerRefCounts() { 1411 void RenderProcessHostImpl::ForceReleaseWorkerRefCounts() {
1408 DCHECK_CURRENTLY_ON(BrowserThread::UI); 1412 DCHECK_CURRENTLY_ON(BrowserThread::UI);
1409 DCHECK(!is_worker_ref_count_disabled_); 1413 DCHECK(!is_worker_ref_count_disabled_);
1410 is_worker_ref_count_disabled_ = true; 1414 is_worker_ref_count_disabled_ = true;
1411 if (!worker_ref_count()) 1415 if (!GetWorkerRefCount())
1412 return; 1416 return;
1413 service_worker_ref_count_ = 0; 1417 service_worker_ref_count_ = 0;
1414 shared_worker_ref_count_ = 0; 1418 shared_worker_ref_count_ = 0;
1415 Cleanup(); 1419 Cleanup();
1416 } 1420 }
1417 1421
1418 bool RenderProcessHostImpl::IsWorkerRefCountDisabled() { 1422 bool RenderProcessHostImpl::IsWorkerRefCountDisabled() {
1419 DCHECK_CURRENTLY_ON(BrowserThread::UI); 1423 DCHECK_CURRENTLY_ON(BrowserThread::UI);
1420 return is_worker_ref_count_disabled_; 1424 return is_worker_ref_count_disabled_;
1421 } 1425 }
(...skipping 505 matching lines...) Expand 10 before | Expand all | Expand 10 after
1927 return false; // Render process hasn't started or is probably crashed. 1931 return false; // Render process hasn't started or is probably crashed.
1928 1932
1929 // Test if there's an unload listener. 1933 // Test if there's an unload listener.
1930 // NOTE: It's possible that an onunload listener may be installed 1934 // NOTE: It's possible that an onunload listener may be installed
1931 // while we're shutting down, so there's a small race here. Given that 1935 // while we're shutting down, so there's a small race here. Given that
1932 // the window is small, it's unlikely that the web page has much 1936 // the window is small, it's unlikely that the web page has much
1933 // state that will be lost by not calling its unload handlers properly. 1937 // state that will be lost by not calling its unload handlers properly.
1934 if (!SuddenTerminationAllowed()) 1938 if (!SuddenTerminationAllowed())
1935 return false; 1939 return false;
1936 1940
1937 if (worker_ref_count() != 0) { 1941 if (GetWorkerRefCount() != 0) {
1938 if (survive_for_worker_start_time_.is_null()) 1942 if (survive_for_worker_start_time_.is_null())
1939 survive_for_worker_start_time_ = base::TimeTicks::Now(); 1943 survive_for_worker_start_time_ = base::TimeTicks::Now();
1940 return false; 1944 return false;
1941 } 1945 }
1942 1946
1943 // Set this before ProcessDied() so observers can tell if the render process 1947 // Set this before ProcessDied() so observers can tell if the render process
1944 // died due to fast shutdown versus another cause. 1948 // died due to fast shutdown versus another cause.
1945 fast_shutdown_started_ = true; 1949 fast_shutdown_started_ = true;
1946 1950
1947 ProcessDied(false /* already_dead */, nullptr); 1951 ProcessDied(false /* already_dead */, nullptr);
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after
2105 // delay the destruction until all of the observer callbacks have been made, 2109 // delay the destruction until all of the observer callbacks have been made,
2106 // and guarantee that the RenderProcessHostDestroyed observer callback is 2110 // and guarantee that the RenderProcessHostDestroyed observer callback is
2107 // always the last callback fired. 2111 // always the last callback fired.
2108 if (within_process_died_observer_) { 2112 if (within_process_died_observer_) {
2109 delayed_cleanup_needed_ = true; 2113 delayed_cleanup_needed_ = true;
2110 return; 2114 return;
2111 } 2115 }
2112 delayed_cleanup_needed_ = false; 2116 delayed_cleanup_needed_ = false;
2113 2117
2114 // Records the time when the process starts surviving for workers for UMA. 2118 // Records the time when the process starts surviving for workers for UMA.
2115 if (listeners_.IsEmpty() && worker_ref_count() > 0 && 2119 if (listeners_.IsEmpty() && GetWorkerRefCount() > 0 &&
2116 survive_for_worker_start_time_.is_null()) { 2120 survive_for_worker_start_time_.is_null()) {
2117 survive_for_worker_start_time_ = base::TimeTicks::Now(); 2121 survive_for_worker_start_time_ = base::TimeTicks::Now();
2118 } 2122 }
2119 2123
2120 // Until there are no other owners of this object, we can't delete ourselves. 2124 // Until there are no other owners of this object, we can't delete ourselves.
2121 if (!listeners_.IsEmpty() || worker_ref_count() != 0) 2125 if (!listeners_.IsEmpty() || GetWorkerRefCount() != 0)
2122 return; 2126 return;
2123 2127
2124 #if BUILDFLAG(ENABLE_WEBRTC) 2128 #if BUILDFLAG(ENABLE_WEBRTC)
2125 if (is_initialized_) 2129 if (is_initialized_)
2126 ClearWebRtcLogMessageCallback(); 2130 ClearWebRtcLogMessageCallback();
2127 #endif 2131 #endif
2128 2132
2129 if (!survive_for_worker_start_time_.is_null()) { 2133 if (!survive_for_worker_start_time_.is_null()) {
2130 UMA_HISTOGRAM_LONG_TIMES( 2134 UMA_HISTOGRAM_LONG_TIMES(
2131 "SharedWorker.RendererSurviveForWorkerTime", 2135 "SharedWorker.RendererSurviveForWorkerTime",
(...skipping 870 matching lines...) Expand 10 before | Expand all | Expand 10 after
3002 LOG(ERROR) << "Terminating render process for bad Mojo message: " << error; 3006 LOG(ERROR) << "Terminating render process for bad Mojo message: " << error;
3003 3007
3004 // The ReceivedBadMessage call below will trigger a DumpWithoutCrashing. 3008 // The ReceivedBadMessage call below will trigger a DumpWithoutCrashing.
3005 // Capture the error message in a crash key value. 3009 // Capture the error message in a crash key value.
3006 base::debug::ScopedCrashKey error_key_value("mojo-message-error", error); 3010 base::debug::ScopedCrashKey error_key_value("mojo-message-error", error);
3007 bad_message::ReceivedBadMessage(render_process_id, 3011 bad_message::ReceivedBadMessage(render_process_id,
3008 bad_message::RPH_MOJO_PROCESS_ERROR); 3012 bad_message::RPH_MOJO_PROCESS_ERROR);
3009 } 3013 }
3010 3014
3011 } // namespace content 3015 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698