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

Side by Side Diff: chrome/browser/memory/tab_manager.cc

Issue 1550593002: Switch to standard integer types in chrome/browser/, part 2 of 4. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 12 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
« no previous file with comments | « chrome/browser/memory/tab_manager.h ('k') | chrome/browser/memory/tab_manager_browsertest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 #include "chrome/browser/memory/tab_manager.h" 5 #include "chrome/browser/memory/tab_manager.h"
6 6
7 #include <stddef.h>
8
7 #include <algorithm> 9 #include <algorithm>
8 #include <set> 10 #include <set>
9 #include <vector> 11 #include <vector>
10 12
11 #include "ash/multi_profile_uma.h" 13 #include "ash/multi_profile_uma.h"
12 #include "ash/session/session_state_delegate.h" 14 #include "ash/session/session_state_delegate.h"
13 #include "ash/shell.h" 15 #include "ash/shell.h"
14 #include "base/bind.h" 16 #include "base/bind.h"
15 #include "base/bind_helpers.h" 17 #include "base/bind_helpers.h"
16 #include "base/command_line.h" 18 #include "base/command_line.h"
19 #include "base/macros.h"
17 #include "base/memory/memory_pressure_monitor.h" 20 #include "base/memory/memory_pressure_monitor.h"
18 #include "base/metrics/field_trial.h" 21 #include "base/metrics/field_trial.h"
19 #include "base/metrics/histogram.h" 22 #include "base/metrics/histogram.h"
20 #include "base/process/process.h" 23 #include "base/process/process.h"
21 #include "base/strings/string16.h" 24 #include "base/strings/string16.h"
22 #include "base/strings/string_number_conversions.h" 25 #include "base/strings/string_number_conversions.h"
23 #include "base/strings/string_util.h" 26 #include "base/strings/string_util.h"
24 #include "base/strings/utf_string_conversions.h" 27 #include "base/strings/utf_string_conversions.h"
25 #include "base/threading/thread.h" 28 #include "base/threading/thread.h"
26 #include "build/build_config.h" 29 #include "build/build_config.h"
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
68 // If there has been no priority adjustment in this interval, assume the 71 // If there has been no priority adjustment in this interval, assume the
69 // machine was suspended and correct the timing statistics. 72 // machine was suspended and correct the timing statistics.
70 const int kSuspendThresholdSeconds = kAdjustmentIntervalSeconds * 4; 73 const int kSuspendThresholdSeconds = kAdjustmentIntervalSeconds * 4;
71 74
72 // The time during which a tab is protected from discarding after it stops being 75 // The time during which a tab is protected from discarding after it stops being
73 // audible. 76 // audible.
74 const int kAudioProtectionTimeSeconds = 60; 77 const int kAudioProtectionTimeSeconds = 60;
75 78
76 // Returns a unique ID for a WebContents. Do not cast back to a pointer, as 79 // Returns a unique ID for a WebContents. Do not cast back to a pointer, as
77 // the WebContents could be deleted if the user closed the tab. 80 // the WebContents could be deleted if the user closed the tab.
78 int64 IdFromWebContents(WebContents* web_contents) { 81 int64_t IdFromWebContents(WebContents* web_contents) {
79 return reinterpret_cast<int64>(web_contents); 82 return reinterpret_cast<int64_t>(web_contents);
80 } 83 }
81 84
82 int FindTabStripModelById(int64 target_web_contents_id, TabStripModel** model) { 85 int FindTabStripModelById(int64_t target_web_contents_id,
86 TabStripModel** model) {
83 DCHECK(model); 87 DCHECK(model);
84 for (chrome::BrowserIterator it; !it.done(); it.Next()) { 88 for (chrome::BrowserIterator it; !it.done(); it.Next()) {
85 Browser* browser = *it; 89 Browser* browser = *it;
86 TabStripModel* local_model = browser->tab_strip_model(); 90 TabStripModel* local_model = browser->tab_strip_model();
87 for (int idx = 0; idx < local_model->count(); idx++) { 91 for (int idx = 0; idx < local_model->count(); idx++) {
88 WebContents* web_contents = local_model->GetWebContentsAt(idx); 92 WebContents* web_contents = local_model->GetWebContentsAt(idx);
89 int64 web_contents_id = IdFromWebContents(web_contents); 93 int64_t web_contents_id = IdFromWebContents(web_contents);
90 if (web_contents_id == target_web_contents_id) { 94 if (web_contents_id == target_web_contents_id) {
91 *model = local_model; 95 *model = local_model;
92 return idx; 96 return idx;
93 } 97 }
94 } 98 }
95 } 99 }
96 100
97 return -1; 101 return -1;
98 } 102 }
99 103
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after
188 // such as tabs created with JavaScript window.open(). Potentially consider 192 // such as tabs created with JavaScript window.open(). Potentially consider
189 // discarding the entire set together, or use that in the priority computation. 193 // discarding the entire set together, or use that in the priority computation.
190 bool TabManager::DiscardTab() { 194 bool TabManager::DiscardTab() {
191 DCHECK_CURRENTLY_ON(BrowserThread::UI); 195 DCHECK_CURRENTLY_ON(BrowserThread::UI);
192 TabStatsList stats = GetTabStats(); 196 TabStatsList stats = GetTabStats();
193 if (stats.empty()) 197 if (stats.empty())
194 return false; 198 return false;
195 // Loop until a non-discarded tab to kill is found. 199 // Loop until a non-discarded tab to kill is found.
196 for (TabStatsList::const_reverse_iterator stats_rit = stats.rbegin(); 200 for (TabStatsList::const_reverse_iterator stats_rit = stats.rbegin();
197 stats_rit != stats.rend(); ++stats_rit) { 201 stats_rit != stats.rend(); ++stats_rit) {
198 int64 least_important_tab_id = stats_rit->tab_contents_id; 202 int64_t least_important_tab_id = stats_rit->tab_contents_id;
199 if (CanDiscardTab(least_important_tab_id) && 203 if (CanDiscardTab(least_important_tab_id) &&
200 DiscardTabById(least_important_tab_id)) 204 DiscardTabById(least_important_tab_id))
201 return true; 205 return true;
202 } 206 }
203 return false; 207 return false;
204 } 208 }
205 209
206 WebContents* TabManager::DiscardTabById(int64 target_web_contents_id) { 210 WebContents* TabManager::DiscardTabById(int64_t target_web_contents_id) {
207 TabStripModel* model; 211 TabStripModel* model;
208 int index = FindTabStripModelById(target_web_contents_id, &model); 212 int index = FindTabStripModelById(target_web_contents_id, &model);
209 213
210 if (index == -1) 214 if (index == -1)
211 return nullptr; 215 return nullptr;
212 216
213 VLOG(1) << "Discarding tab " << index << " id " << target_web_contents_id; 217 VLOG(1) << "Discarding tab " << index << " id " << target_web_contents_id;
214 218
215 return DiscardWebContentsAt(index, model); 219 return DiscardWebContentsAt(index, model);
216 } 220 }
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after
428 } 432 }
429 last_adjust_time_ = TimeTicks::Now(); 433 last_adjust_time_ = TimeTicks::Now();
430 434
431 #if defined(OS_CHROMEOS) 435 #if defined(OS_CHROMEOS)
432 TabStatsList stats_list = GetTabStats(); 436 TabStatsList stats_list = GetTabStats();
433 // This starts the CrOS specific OOM adjustments in /proc/<pid>/oom_score_adj. 437 // This starts the CrOS specific OOM adjustments in /proc/<pid>/oom_score_adj.
434 delegate_->AdjustOomPriorities(stats_list); 438 delegate_->AdjustOomPriorities(stats_list);
435 #endif 439 #endif
436 } 440 }
437 441
438 bool TabManager::CanDiscardTab(int64 target_web_contents_id) const { 442 bool TabManager::CanDiscardTab(int64_t target_web_contents_id) const {
439 TabStripModel* model; 443 TabStripModel* model;
440 int idx = FindTabStripModelById(target_web_contents_id, &model); 444 int idx = FindTabStripModelById(target_web_contents_id, &model);
441 445
442 if (idx == -1) 446 if (idx == -1)
443 return false; 447 return false;
444 448
445 WebContents* web_contents = model->GetWebContentsAt(idx); 449 WebContents* web_contents = model->GetWebContentsAt(idx);
446 450
447 // Do not discard tabs that don't have a valid URL (most probably they have 451 // Do not discard tabs that don't have a valid URL (most probably they have
448 // just been opened and dicarding them would lose the URL). 452 // just been opened and dicarding them would lose the URL).
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after
587 // sudden_termination_allowed false, and that covers too many common pages 591 // sudden_termination_allowed false, and that covers too many common pages
588 // with ad networks and statistics scripts. Ideally check for beforeUnload 592 // with ad networks and statistics scripts. Ideally check for beforeUnload
589 // handlers, which are likely to present a dialog asking if the user wants to 593 // handlers, which are likely to present a dialog asking if the user wants to
590 // discard state. crbug.com/123049. 594 // discard state. crbug.com/123049.
591 595
592 // Being more recently active is more important. 596 // Being more recently active is more important.
593 return first.last_active > second.last_active; 597 return first.last_active > second.last_active;
594 } 598 }
595 599
596 } // namespace memory 600 } // namespace memory
OLDNEW
« no previous file with comments | « chrome/browser/memory/tab_manager.h ('k') | chrome/browser/memory/tab_manager_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698