| OLD | NEW |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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/browser/memory/tab_manager_delegate_chromeos.h" | 5 #include "chrome/browser/memory/tab_manager_delegate_chromeos.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 #include <set> | 8 #include <set> |
| 9 #include <string> | 9 #include <string> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 266 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 277 int TabManagerDelegate::MemoryStat::EstimatedMemoryFreedKB( | 277 int TabManagerDelegate::MemoryStat::EstimatedMemoryFreedKB( |
| 278 base::ProcessHandle pid) { | 278 base::ProcessHandle pid) { |
| 279 std::unique_ptr<base::ProcessMetrics> process_metrics( | 279 std::unique_ptr<base::ProcessMetrics> process_metrics( |
| 280 base::ProcessMetrics::CreateProcessMetrics(pid)); | 280 base::ProcessMetrics::CreateProcessMetrics(pid)); |
| 281 base::WorkingSetKBytes mem_usage; | 281 base::WorkingSetKBytes mem_usage; |
| 282 process_metrics->GetWorkingSetKBytes(&mem_usage); | 282 process_metrics->GetWorkingSetKBytes(&mem_usage); |
| 283 return mem_usage.priv; | 283 return mem_usage.priv; |
| 284 } | 284 } |
| 285 | 285 |
| 286 class TabManagerDelegate::UmaReporter { | 286 class TabManagerDelegate::UmaReporter { |
| 287 public: | 287 public: |
| 288 UmaReporter() | 288 UmaReporter() : last_kill_time_(), total_kills_(0) {} |
| 289 : last_kill_time_(), total_kills_(0) {} | 289 ~UmaReporter() {} |
| 290 ~UmaReporter() {} | 290 void ReportKill(const int memory_freed); |
| 291 void ReportKill(const int memory_freed); | |
| 292 | 291 |
| 293 private: | 292 private: |
| 294 base::Time last_kill_time_; | 293 base::Time last_kill_time_; |
| 295 int total_kills_; | 294 int total_kills_; |
| 296 }; | 295 }; |
| 297 | 296 |
| 298 void TabManagerDelegate::UmaReporter::ReportKill(const int memory_freed) { | 297 void TabManagerDelegate::UmaReporter::ReportKill(const int memory_freed) { |
| 299 base::Time now = base::Time::Now(); | 298 base::Time now = base::Time::Now(); |
| 300 const TimeDelta time_delta = | 299 const TimeDelta time_delta = |
| 301 last_kill_time_.is_null() ? | 300 last_kill_time_.is_null() ? |
| 302 TimeDelta::FromSeconds(arc::kMaxOomMemoryKillTimeDeltaSecs) : | 301 TimeDelta::FromSeconds(arc::kMaxOomMemoryKillTimeDeltaSecs) : |
| 303 (now - last_kill_time_); | 302 (now - last_kill_time_); |
| 304 UMA_HISTOGRAM_OOM_KILL_TIME_INTERVAL( | 303 UMA_HISTOGRAM_OOM_KILL_TIME_INTERVAL( |
| 305 "Arc.LowMemoryKiller.TimeDelta", time_delta); | 304 "Arc.LowMemoryKiller.TimeDelta", time_delta); |
| (...skipping 23 matching lines...) Expand all Loading... |
| 329 uma_(new UmaReporter()), | 328 uma_(new UmaReporter()), |
| 330 weak_ptr_factory_(this) { | 329 weak_ptr_factory_(this) { |
| 331 registrar_.Add(this, content::NOTIFICATION_RENDERER_PROCESS_CLOSED, | 330 registrar_.Add(this, content::NOTIFICATION_RENDERER_PROCESS_CLOSED, |
| 332 content::NotificationService::AllBrowserContextsAndSources()); | 331 content::NotificationService::AllBrowserContextsAndSources()); |
| 333 registrar_.Add(this, content::NOTIFICATION_RENDERER_PROCESS_TERMINATED, | 332 registrar_.Add(this, content::NOTIFICATION_RENDERER_PROCESS_TERMINATED, |
| 334 content::NotificationService::AllBrowserContextsAndSources()); | 333 content::NotificationService::AllBrowserContextsAndSources()); |
| 335 registrar_.Add(this, content::NOTIFICATION_RENDER_WIDGET_VISIBILITY_CHANGED, | 334 registrar_.Add(this, content::NOTIFICATION_RENDER_WIDGET_VISIBILITY_CHANGED, |
| 336 content::NotificationService::AllBrowserContextsAndSources()); | 335 content::NotificationService::AllBrowserContextsAndSources()); |
| 337 auto arc_bridge_service = arc::ArcBridgeService::Get(); | 336 auto arc_bridge_service = arc::ArcBridgeService::Get(); |
| 338 if (arc_bridge_service) | 337 if (arc_bridge_service) |
| 339 arc_bridge_service->AddObserver(this); | 338 arc_bridge_service->process()->AddObserver(this); |
| 340 auto activation_client = GetActivationClient(); | 339 auto activation_client = GetActivationClient(); |
| 341 if (activation_client) | 340 if (activation_client) |
| 342 activation_client->AddObserver(this); | 341 activation_client->AddObserver(this); |
| 343 BrowserList::GetInstance()->AddObserver(this); | 342 BrowserList::GetInstance()->AddObserver(this); |
| 344 } | 343 } |
| 345 | 344 |
| 346 TabManagerDelegate::~TabManagerDelegate() { | 345 TabManagerDelegate::~TabManagerDelegate() { |
| 347 BrowserList::GetInstance()->RemoveObserver(this); | 346 BrowserList::GetInstance()->RemoveObserver(this); |
| 348 auto activation_client = GetActivationClient(); | 347 auto activation_client = GetActivationClient(); |
| 349 if (activation_client) | 348 if (activation_client) |
| 350 activation_client->RemoveObserver(this); | 349 activation_client->RemoveObserver(this); |
| 351 auto arc_bridge_service = arc::ArcBridgeService::Get(); | 350 auto arc_bridge_service = arc::ArcBridgeService::Get(); |
| 352 if (arc_bridge_service) | 351 if (arc_bridge_service) |
| 353 arc_bridge_service->RemoveObserver(this); | 352 arc_bridge_service->process()->RemoveObserver(this); |
| 354 } | 353 } |
| 355 | 354 |
| 356 void TabManagerDelegate::OnBrowserSetLastActive(Browser* browser) { | 355 void TabManagerDelegate::OnBrowserSetLastActive(Browser* browser) { |
| 357 // Set OOM score to the selected tab when a browser window is activated. | 356 // Set OOM score to the selected tab when a browser window is activated. |
| 358 // content::NOTIFICATION_RENDER_WIDGET_VISIBILITY_CHANGED didn't catch the | 357 // content::NOTIFICATION_RENDER_WIDGET_VISIBILITY_CHANGED didn't catch the |
| 359 // case (like when switching focus between 2 browser windows) so we need to | 358 // case (like when switching focus between 2 browser windows) so we need to |
| 360 // handle it here. | 359 // handle it here. |
| 361 TabStripModel* tab_strip_model = browser->tab_strip_model(); | 360 TabStripModel* tab_strip_model = browser->tab_strip_model(); |
| 362 int selected_index = tab_strip_model->active_index(); | 361 int selected_index = tab_strip_model->active_index(); |
| 363 content::WebContents* contents = | 362 content::WebContents* contents = |
| 364 tab_strip_model->GetWebContentsAt(selected_index); | 363 tab_strip_model->GetWebContentsAt(selected_index); |
| 365 if (!contents) | 364 if (!contents) |
| 366 return; | 365 return; |
| 367 | 366 |
| 368 base::ProcessHandle pid = contents->GetRenderProcessHost()->GetHandle(); | 367 base::ProcessHandle pid = contents->GetRenderProcessHost()->GetHandle(); |
| 369 AdjustFocusedTabScore(pid); | 368 AdjustFocusedTabScore(pid); |
| 370 } | 369 } |
| 371 | 370 |
| 372 void TabManagerDelegate::OnProcessInstanceReady() { | 371 void TabManagerDelegate::OnInstanceReady() { |
| 373 auto arc_bridge_service = arc::ArcBridgeService::Get(); | 372 auto arc_bridge_service = arc::ArcBridgeService::Get(); |
| 374 DCHECK(arc_bridge_service); | 373 DCHECK(arc_bridge_service); |
| 375 | 374 |
| 376 arc_process_instance_ = arc_bridge_service->process_instance(); | 375 arc_process_instance_ = arc_bridge_service->process()->instance(); |
| 377 arc_process_instance_version_ = arc_bridge_service->process_version(); | 376 arc_process_instance_version_ = arc_bridge_service->process()->version(); |
| 378 | 377 |
| 379 DCHECK(arc_process_instance_); | 378 DCHECK(arc_process_instance_); |
| 380 | 379 |
| 381 if (!IsArcMemoryManagementEnabled()) | 380 if (!IsArcMemoryManagementEnabled()) |
| 382 return; | 381 return; |
| 383 | 382 |
| 384 if (arc_process_instance_version_ < 2) { | 383 if (arc_process_instance_version_ < 2) { |
| 385 VLOG(1) << "ProcessInstance version < 2 does not " | 384 VLOG(1) << "ProcessInstance version < 2 does not " |
| 386 "support DisableBuiltinOomAdjustment() yet."; | 385 "support DisableBuiltinOomAdjustment() yet."; |
| 387 return; | 386 return; |
| 388 } | 387 } |
| 389 // Stop Android system-wide oom_adj adjustment since this class will | 388 // Stop Android system-wide oom_adj adjustment since this class will |
| 390 // take over oom_score_adj settings. | 389 // take over oom_score_adj settings. |
| 391 arc_process_instance_->DisableBuiltinOomAdjustment(); | 390 arc_process_instance_->DisableBuiltinOomAdjustment(); |
| 392 | 391 |
| 393 if (arc_process_instance_version_ < 3) { | 392 if (arc_process_instance_version_ < 3) { |
| 394 VLOG(1) << "arc::ProcessInstance version < 3 does not " | 393 VLOG(1) << "arc::ProcessInstance version < 3 does not " |
| 395 "support DisableLowMemoryKiller() yet."; | 394 "support DisableLowMemoryKiller() yet."; |
| 396 return; | 395 return; |
| 397 } | 396 } |
| 398 VLOG(2) << "Disable LowMemoryKiller"; | 397 VLOG(2) << "Disable LowMemoryKiller"; |
| 399 arc_process_instance_->DisableLowMemoryKiller(); | 398 arc_process_instance_->DisableLowMemoryKiller(); |
| 400 } | 399 } |
| 401 | 400 |
| 402 void TabManagerDelegate::OnProcessInstanceClosed() { | 401 void TabManagerDelegate::OnInstanceClosed() { |
| 403 arc_process_instance_ = nullptr; | 402 arc_process_instance_ = nullptr; |
| 404 arc_process_instance_version_ = 0; | 403 arc_process_instance_version_ = 0; |
| 405 } | 404 } |
| 406 | 405 |
| 407 void TabManagerDelegate::OnWindowActivated( | 406 void TabManagerDelegate::OnWindowActivated( |
| 408 aura::client::ActivationChangeObserver::ActivationReason reason, | 407 aura::client::ActivationChangeObserver::ActivationReason reason, |
| 409 aura::Window* gained_active, | 408 aura::Window* gained_active, |
| 410 aura::Window* lost_active) { | 409 aura::Window* lost_active) { |
| 411 if (IsArcWindow(gained_active)) { | 410 if (IsArcWindow(gained_active)) { |
| 412 // Currently there is no way to know which app is displayed in the ARC | 411 // Currently there is no way to know which app is displayed in the ARC |
| (...skipping 403 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 816 } | 815 } |
| 817 } | 816 } |
| 818 priority += priority_increment; | 817 priority += priority_increment; |
| 819 } | 818 } |
| 820 | 819 |
| 821 if (oom_score_for_tabs.size()) | 820 if (oom_score_for_tabs.size()) |
| 822 SetOomScoreAdjForTabs(oom_score_for_tabs); | 821 SetOomScoreAdjForTabs(oom_score_for_tabs); |
| 823 } | 822 } |
| 824 | 823 |
| 825 } // namespace memory | 824 } // namespace memory |
| OLD | NEW |