| OLD | NEW |
| 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 #include "chrome/renderer/chrome_render_thread_observer.h" | 5 #include "chrome/renderer/chrome_render_thread_observer.h" |
| 6 | 6 |
| 7 #include <stddef.h> | 7 #include <stddef.h> |
| 8 | 8 |
| 9 #include <limits> | 9 #include <limits> |
| 10 #include <memory> | 10 #include <memory> |
| (...skipping 109 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 120 static_cast<uint64_t>(stats.deadSize))); | 120 static_cast<uint64_t>(stats.deadSize))); |
| 121 } | 121 } |
| 122 | 122 |
| 123 base::WeakPtrFactory<RendererResourceDelegate> weak_factory_; | 123 base::WeakPtrFactory<RendererResourceDelegate> weak_factory_; |
| 124 | 124 |
| 125 DISALLOW_COPY_AND_ASSIGN(RendererResourceDelegate); | 125 DISALLOW_COPY_AND_ASSIGN(RendererResourceDelegate); |
| 126 }; | 126 }; |
| 127 | 127 |
| 128 static const int kWaitForWorkersStatsTimeoutMS = 20; | 128 static const int kWaitForWorkersStatsTimeoutMS = 20; |
| 129 | 129 |
| 130 class ResourceUsageReporterImpl : public mojom::ResourceUsageReporter { | 130 class ResourceUsageReporterImpl : public chrome::mojom::ResourceUsageReporter { |
| 131 public: | 131 public: |
| 132 explicit ResourceUsageReporterImpl( | 132 explicit ResourceUsageReporterImpl( |
| 133 base::WeakPtr<ChromeRenderThreadObserver> observer) | 133 base::WeakPtr<ChromeRenderThreadObserver> observer) |
| 134 : workers_to_go_(0), observer_(observer), weak_factory_(this) {} | 134 : workers_to_go_(0), observer_(observer), weak_factory_(this) {} |
| 135 ~ResourceUsageReporterImpl() override {} | 135 ~ResourceUsageReporterImpl() override {} |
| 136 | 136 |
| 137 private: | 137 private: |
| 138 static void CollectOnWorkerThread( | 138 static void CollectOnWorkerThread( |
| 139 const scoped_refptr<base::TaskRunner>& master, | 139 const scoped_refptr<base::TaskRunner>& master, |
| 140 base::WeakPtr<ResourceUsageReporterImpl> impl) { | 140 base::WeakPtr<ResourceUsageReporterImpl> impl) { |
| (...skipping 23 matching lines...) Expand all Loading... |
| 164 if (!callback_.is_null()) | 164 if (!callback_.is_null()) |
| 165 callback_.Run(std::move(usage_data_)); | 165 callback_.Run(std::move(usage_data_)); |
| 166 callback_.Reset(); | 166 callback_.Reset(); |
| 167 weak_factory_.InvalidateWeakPtrs(); | 167 weak_factory_.InvalidateWeakPtrs(); |
| 168 workers_to_go_ = 0; | 168 workers_to_go_ = 0; |
| 169 } | 169 } |
| 170 | 170 |
| 171 void GetUsageData(const GetUsageDataCallback& callback) override { | 171 void GetUsageData(const GetUsageDataCallback& callback) override { |
| 172 DCHECK(callback_.is_null()); | 172 DCHECK(callback_.is_null()); |
| 173 weak_factory_.InvalidateWeakPtrs(); | 173 weak_factory_.InvalidateWeakPtrs(); |
| 174 usage_data_ = mojom::ResourceUsageData::New(); | 174 usage_data_ = chrome::mojom::ResourceUsageData::New(); |
| 175 usage_data_->reports_v8_stats = true; | 175 usage_data_->reports_v8_stats = true; |
| 176 callback_ = callback; | 176 callback_ = callback; |
| 177 | 177 |
| 178 // Since it is not safe to call any Blink or V8 functions until Blink has | 178 // Since it is not safe to call any Blink or V8 functions until Blink has |
| 179 // been initialized (which also initializes V8), early out and send 0 back | 179 // been initialized (which also initializes V8), early out and send 0 back |
| 180 // for all resources. | 180 // for all resources. |
| 181 if (!observer_) { | 181 if (!observer_) { |
| 182 SendResults(); | 182 SendResults(); |
| 183 return; | 183 return; |
| 184 } | 184 } |
| 185 | 185 |
| 186 WebCache::ResourceTypeStats stats; | 186 WebCache::ResourceTypeStats stats; |
| 187 WebCache::getResourceTypeStats(&stats); | 187 WebCache::getResourceTypeStats(&stats); |
| 188 usage_data_->web_cache_stats = mojom::ResourceTypeStats::From(stats); | 188 usage_data_->web_cache_stats = |
| 189 chrome::mojom::ResourceTypeStats::From(stats); |
| 189 | 190 |
| 190 v8::Isolate* isolate = v8::Isolate::GetCurrent(); | 191 v8::Isolate* isolate = v8::Isolate::GetCurrent(); |
| 191 if (isolate) { | 192 if (isolate) { |
| 192 v8::HeapStatistics heap_stats; | 193 v8::HeapStatistics heap_stats; |
| 193 isolate->GetHeapStatistics(&heap_stats); | 194 isolate->GetHeapStatistics(&heap_stats); |
| 194 usage_data_->v8_bytes_allocated = heap_stats.total_heap_size(); | 195 usage_data_->v8_bytes_allocated = heap_stats.total_heap_size(); |
| 195 usage_data_->v8_bytes_used = heap_stats.used_heap_size(); | 196 usage_data_->v8_bytes_used = heap_stats.used_heap_size(); |
| 196 } | 197 } |
| 197 base::Closure collect = base::Bind( | 198 base::Closure collect = base::Bind( |
| 198 &ResourceUsageReporterImpl::CollectOnWorkerThread, | 199 &ResourceUsageReporterImpl::CollectOnWorkerThread, |
| 199 base::ThreadTaskRunnerHandle::Get(), weak_factory_.GetWeakPtr()); | 200 base::ThreadTaskRunnerHandle::Get(), weak_factory_.GetWeakPtr()); |
| 200 workers_to_go_ = RenderThread::Get()->PostTaskToAllWebWorkers(collect); | 201 workers_to_go_ = RenderThread::Get()->PostTaskToAllWebWorkers(collect); |
| 201 if (workers_to_go_) { | 202 if (workers_to_go_) { |
| 202 // The guard task to send out partial stats | 203 // The guard task to send out partial stats |
| 203 // in case some workers are not responsive. | 204 // in case some workers are not responsive. |
| 204 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( | 205 base::ThreadTaskRunnerHandle::Get()->PostDelayedTask( |
| 205 FROM_HERE, base::Bind(&ResourceUsageReporterImpl::SendResults, | 206 FROM_HERE, base::Bind(&ResourceUsageReporterImpl::SendResults, |
| 206 weak_factory_.GetWeakPtr()), | 207 weak_factory_.GetWeakPtr()), |
| 207 base::TimeDelta::FromMilliseconds(kWaitForWorkersStatsTimeoutMS)); | 208 base::TimeDelta::FromMilliseconds(kWaitForWorkersStatsTimeoutMS)); |
| 208 } else { | 209 } else { |
| 209 // No worker threads so just send out the main thread data right away. | 210 // No worker threads so just send out the main thread data right away. |
| 210 SendResults(); | 211 SendResults(); |
| 211 } | 212 } |
| 212 } | 213 } |
| 213 | 214 |
| 214 mojom::ResourceUsageDataPtr usage_data_; | 215 chrome::mojom::ResourceUsageDataPtr usage_data_; |
| 215 GetUsageDataCallback callback_; | 216 GetUsageDataCallback callback_; |
| 216 int workers_to_go_; | 217 int workers_to_go_; |
| 217 base::WeakPtr<ChromeRenderThreadObserver> observer_; | 218 base::WeakPtr<ChromeRenderThreadObserver> observer_; |
| 218 | 219 |
| 219 base::WeakPtrFactory<ResourceUsageReporterImpl> weak_factory_; | 220 base::WeakPtrFactory<ResourceUsageReporterImpl> weak_factory_; |
| 220 | 221 |
| 221 DISALLOW_COPY_AND_ASSIGN(ResourceUsageReporterImpl); | 222 DISALLOW_COPY_AND_ASSIGN(ResourceUsageReporterImpl); |
| 222 }; | 223 }; |
| 223 | 224 |
| 224 void CreateResourceUsageReporter( | 225 void CreateResourceUsageReporter( |
| 225 base::WeakPtr<ChromeRenderThreadObserver> observer, | 226 base::WeakPtr<ChromeRenderThreadObserver> observer, |
| 226 mojo::InterfaceRequest<mojom::ResourceUsageReporter> request) { | 227 mojo::InterfaceRequest<chrome::mojom::ResourceUsageReporter> request) { |
| 227 mojo::MakeStrongBinding(base::MakeUnique<ResourceUsageReporterImpl>(observer), | 228 mojo::MakeStrongBinding(base::MakeUnique<ResourceUsageReporterImpl>(observer), |
| 228 std::move(request)); | 229 std::move(request)); |
| 229 } | 230 } |
| 230 | 231 |
| 231 } // namespace | 232 } // namespace |
| 232 | 233 |
| 233 bool ChromeRenderThreadObserver::is_incognito_process_ = false; | 234 bool ChromeRenderThreadObserver::is_incognito_process_ = false; |
| 234 | 235 |
| 235 ChromeRenderThreadObserver::ChromeRenderThreadObserver() | 236 ChromeRenderThreadObserver::ChromeRenderThreadObserver() |
| 236 : field_trial_syncer_(this), | 237 : field_trial_syncer_(this), |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 310 void ChromeRenderThreadObserver::OnSetFieldTrialGroup( | 311 void ChromeRenderThreadObserver::OnSetFieldTrialGroup( |
| 311 const std::string& trial_name, | 312 const std::string& trial_name, |
| 312 const std::string& group_name) { | 313 const std::string& group_name) { |
| 313 field_trial_syncer_.OnSetFieldTrialGroup(trial_name, group_name); | 314 field_trial_syncer_.OnSetFieldTrialGroup(trial_name, group_name); |
| 314 } | 315 } |
| 315 | 316 |
| 316 const RendererContentSettingRules* | 317 const RendererContentSettingRules* |
| 317 ChromeRenderThreadObserver::content_setting_rules() const { | 318 ChromeRenderThreadObserver::content_setting_rules() const { |
| 318 return &content_setting_rules_; | 319 return &content_setting_rules_; |
| 319 } | 320 } |
| OLD | NEW |