OLD | NEW |
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 665 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
676 storage_partition_impl_(storage_partition_impl), | 676 storage_partition_impl_(storage_partition_impl), |
677 sudden_termination_allowed_(true), | 677 sudden_termination_allowed_(true), |
678 ignore_input_events_(false), | 678 ignore_input_events_(false), |
679 is_for_guests_only_(is_for_guests_only), | 679 is_for_guests_only_(is_for_guests_only), |
680 gpu_observer_registered_(false), | 680 gpu_observer_registered_(false), |
681 delayed_cleanup_needed_(false), | 681 delayed_cleanup_needed_(false), |
682 within_process_died_observer_(false), | 682 within_process_died_observer_(false), |
683 #if BUILDFLAG(ENABLE_WEBRTC) | 683 #if BUILDFLAG(ENABLE_WEBRTC) |
684 webrtc_eventlog_host_(id_), | 684 webrtc_eventlog_host_(id_), |
685 #endif | 685 #endif |
686 max_worker_count_(0), | |
687 permission_service_context_(new PermissionServiceContext(this)), | 686 permission_service_context_(new PermissionServiceContext(this)), |
688 channel_connected_(false), | 687 channel_connected_(false), |
689 sent_render_process_ready_(false), | 688 sent_render_process_ready_(false), |
690 #if defined(OS_ANDROID) | 689 #if defined(OS_ANDROID) |
691 never_signaled_(base::WaitableEvent::ResetPolicy::MANUAL, | 690 never_signaled_(base::WaitableEvent::ResetPolicy::MANUAL, |
692 base::WaitableEvent::InitialState::NOT_SIGNALED), | 691 base::WaitableEvent::InitialState::NOT_SIGNALED), |
693 #endif | 692 #endif |
694 instance_weak_factory_( | 693 instance_weak_factory_( |
695 new base::WeakPtrFactory<RenderProcessHostImpl>(this)), | 694 new base::WeakPtrFactory<RenderProcessHostImpl>(this)), |
696 weak_factory_(this) { | 695 weak_factory_(this) { |
(...skipping 684 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1381 | 1380 |
1382 size_t RenderProcessHostImpl::GetWorkerRefCount() const { | 1381 size_t RenderProcessHostImpl::GetWorkerRefCount() const { |
1383 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 1382 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
1384 return service_worker_ref_count_ + shared_worker_ref_count_; | 1383 return service_worker_ref_count_ + shared_worker_ref_count_; |
1385 } | 1384 } |
1386 | 1385 |
1387 void RenderProcessHostImpl::IncrementServiceWorkerRefCount() { | 1386 void RenderProcessHostImpl::IncrementServiceWorkerRefCount() { |
1388 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 1387 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
1389 DCHECK(!is_worker_ref_count_disabled_); | 1388 DCHECK(!is_worker_ref_count_disabled_); |
1390 ++service_worker_ref_count_; | 1389 ++service_worker_ref_count_; |
1391 if (GetWorkerRefCount() > max_worker_count_) | |
1392 max_worker_count_ = GetWorkerRefCount(); | |
1393 } | 1390 } |
1394 | 1391 |
1395 void RenderProcessHostImpl::DecrementServiceWorkerRefCount() { | 1392 void RenderProcessHostImpl::DecrementServiceWorkerRefCount() { |
1396 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 1393 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
1397 DCHECK(!is_worker_ref_count_disabled_); | 1394 DCHECK(!is_worker_ref_count_disabled_); |
1398 DCHECK_GT(GetWorkerRefCount(), 0U); | 1395 DCHECK_GT(GetWorkerRefCount(), 0U); |
1399 --service_worker_ref_count_; | 1396 --service_worker_ref_count_; |
1400 if (GetWorkerRefCount() == 0) | 1397 if (GetWorkerRefCount() == 0) |
1401 Cleanup(); | 1398 Cleanup(); |
1402 } | 1399 } |
1403 | 1400 |
1404 void RenderProcessHostImpl::IncrementSharedWorkerRefCount() { | 1401 void RenderProcessHostImpl::IncrementSharedWorkerRefCount() { |
1405 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 1402 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
1406 DCHECK(!is_worker_ref_count_disabled_); | 1403 DCHECK(!is_worker_ref_count_disabled_); |
1407 ++shared_worker_ref_count_; | 1404 ++shared_worker_ref_count_; |
1408 if (GetWorkerRefCount() > max_worker_count_) | |
1409 max_worker_count_ = GetWorkerRefCount(); | |
1410 } | 1405 } |
1411 | 1406 |
1412 void RenderProcessHostImpl::DecrementSharedWorkerRefCount() { | 1407 void RenderProcessHostImpl::DecrementSharedWorkerRefCount() { |
1413 DCHECK_CURRENTLY_ON(BrowserThread::UI); | 1408 DCHECK_CURRENTLY_ON(BrowserThread::UI); |
1414 DCHECK(!is_worker_ref_count_disabled_); | 1409 DCHECK(!is_worker_ref_count_disabled_); |
1415 DCHECK_GT(GetWorkerRefCount(), 0U); | 1410 DCHECK_GT(GetWorkerRefCount(), 0U); |
1416 --shared_worker_ref_count_; | 1411 --shared_worker_ref_count_; |
1417 if (GetWorkerRefCount() == 0) | 1412 if (GetWorkerRefCount() == 0) |
1418 Cleanup(); | 1413 Cleanup(); |
1419 } | 1414 } |
(...skipping 717 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2137 if (is_initialized_) | 2132 if (is_initialized_) |
2138 ClearWebRtcLogMessageCallback(); | 2133 ClearWebRtcLogMessageCallback(); |
2139 #endif | 2134 #endif |
2140 | 2135 |
2141 if (!survive_for_worker_start_time_.is_null()) { | 2136 if (!survive_for_worker_start_time_.is_null()) { |
2142 UMA_HISTOGRAM_LONG_TIMES( | 2137 UMA_HISTOGRAM_LONG_TIMES( |
2143 "SharedWorker.RendererSurviveForWorkerTime", | 2138 "SharedWorker.RendererSurviveForWorkerTime", |
2144 base::TimeTicks::Now() - survive_for_worker_start_time_); | 2139 base::TimeTicks::Now() - survive_for_worker_start_time_); |
2145 } | 2140 } |
2146 | 2141 |
2147 if (max_worker_count_ > 0) { | |
2148 // Record the max number of workers (SharedWorker or ServiceWorker) | |
2149 // that are simultaneously hosted in this renderer process. | |
2150 UMA_HISTOGRAM_COUNTS("Render.Workers.MaxWorkerCountInRendererProcess", | |
2151 max_worker_count_); | |
2152 } | |
2153 | |
2154 // We cannot clean up twice; if this fails, there is an issue with our | 2142 // We cannot clean up twice; if this fails, there is an issue with our |
2155 // control flow. | 2143 // control flow. |
2156 DCHECK(!deleting_soon_); | 2144 DCHECK(!deleting_soon_); |
2157 | 2145 |
2158 DCHECK_EQ(0, pending_views_); | 2146 DCHECK_EQ(0, pending_views_); |
2159 | 2147 |
2160 // If the process associated with this RenderProcessHost is still alive, | 2148 // If the process associated with this RenderProcessHost is still alive, |
2161 // notify all observers that the process has exited cleanly, even though it | 2149 // notify all observers that the process has exited cleanly, even though it |
2162 // will be destroyed a bit later. Observers shouldn't rely on this process | 2150 // will be destroyed a bit later. Observers shouldn't rely on this process |
2163 // anymore. | 2151 // anymore. |
(...skipping 850 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3014 LOG(ERROR) << "Terminating render process for bad Mojo message: " << error; | 3002 LOG(ERROR) << "Terminating render process for bad Mojo message: " << error; |
3015 | 3003 |
3016 // The ReceivedBadMessage call below will trigger a DumpWithoutCrashing. | 3004 // The ReceivedBadMessage call below will trigger a DumpWithoutCrashing. |
3017 // Capture the error message in a crash key value. | 3005 // Capture the error message in a crash key value. |
3018 base::debug::ScopedCrashKey error_key_value("mojo-message-error", error); | 3006 base::debug::ScopedCrashKey error_key_value("mojo-message-error", error); |
3019 bad_message::ReceivedBadMessage(render_process_id, | 3007 bad_message::ReceivedBadMessage(render_process_id, |
3020 bad_message::RPH_MOJO_PROCESS_ERROR); | 3008 bad_message::RPH_MOJO_PROCESS_ERROR); |
3021 } | 3009 } |
3022 | 3010 |
3023 } // namespace content | 3011 } // namespace content |
OLD | NEW |