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

Side by Side Diff: content/browser/memory/memory_pressure_controller_impl.cc

Issue 2872743002: Add an experiment to avoid memory pressure broadcasts. (Closed)
Patch Set: Created 3 years, 7 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/flag_descriptions.cc ('k') | content/public/common/content_features.h » ('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 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 "content/browser/memory/memory_pressure_controller_impl.h" 5 #include "content/browser/memory/memory_pressure_controller_impl.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/feature_list.h"
8 #include "content/browser/memory/memory_message_filter.h" 9 #include "content/browser/memory/memory_message_filter.h"
9 #include "content/public/browser/browser_thread.h" 10 #include "content/public/browser/browser_thread.h"
11 #include "content/public/common/content_features.h"
12
13 namespace features {
14
15 // This experiment controls whether memory pressure notifications to
16 // renderers are broadcast.
17 const base::Feature kEnableBroadcastMemoryPressure = {
18 "EnableBroadcastMemoryPressure", base::FEATURE_ENABLED_BY_DEFAULT,
19 };
20
21 } // namespace features
10 22
11 namespace content { 23 namespace content {
12 24
13 MemoryPressureControllerImpl::MemoryPressureControllerImpl() {} 25 MemoryPressureControllerImpl::MemoryPressureControllerImpl() {}
14 26
15 MemoryPressureControllerImpl::~MemoryPressureControllerImpl() {} 27 MemoryPressureControllerImpl::~MemoryPressureControllerImpl() {}
16 28
17 void MemoryPressureControllerImpl::OnMemoryMessageFilterAdded( 29 void MemoryPressureControllerImpl::OnMemoryMessageFilterAdded(
18 MemoryMessageFilter* filter) { 30 MemoryMessageFilter* filter) {
19 DCHECK_CURRENTLY_ON(BrowserThread::IO); 31 DCHECK_CURRENTLY_ON(BrowserThread::IO);
20 32
21 // Add the message filter to the set of all memory message filters and check 33 // Add the message filter to the set of all memory message filters and check
22 // that it wasn't there beforehand. 34 // that it wasn't there beforehand.
23 const bool success = 35 const bool success =
24 memory_message_filters_.insert( 36 memory_message_filters_
25 std::make_pair(filter->process_host(), filter)) 37 .insert(std::make_pair(filter->process_host(), filter))
26 .second; 38 .second;
27 DCHECK(success); 39 DCHECK(success);
28 40
29 // There's no need to send a message to the child process if memory pressure 41 // There's no need to send a message to the child process if memory pressure
30 // notifications are not suppressed. 42 // notifications are not suppressed.
31 if (base::MemoryPressureListener::AreNotificationsSuppressed()) 43 if (base::MemoryPressureListener::AreNotificationsSuppressed())
32 filter->SendSetPressureNotificationsSuppressed(true); 44 filter->SendSetPressureNotificationsSuppressed(true);
33 } 45 }
34 46
35 void MemoryPressureControllerImpl::OnMemoryMessageFilterRemoved( 47 void MemoryPressureControllerImpl::OnMemoryMessageFilterRemoved(
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
120 BrowserThread::PostTask( 132 BrowserThread::PostTask(
121 BrowserThread::IO, FROM_HERE, 133 BrowserThread::IO, FROM_HERE,
122 base::Bind(&MemoryPressureControllerImpl::SendPressureNotificationImpl, 134 base::Bind(&MemoryPressureControllerImpl::SendPressureNotificationImpl,
123 base::Unretained(this), child_process_host, level)); 135 base::Unretained(this), child_process_host, level));
124 return; 136 return;
125 } 137 }
126 138
127 if (base::MemoryPressureListener::AreNotificationsSuppressed()) 139 if (base::MemoryPressureListener::AreNotificationsSuppressed())
128 return; 140 return;
129 141
142 // This desktop-only experiment can disable the memory pressure broadcasts.
143 #if defined(OS_MACOSX) || (defined(OS_LINUX) && !defined(OS_CHROMEOS)) || \
144 defined(OS_WIN)
145 if (!base::FeatureList::IsEnabled(features::kEnableBroadcastMemoryPressure))
146 return;
147 #endif
148
130 // Find the appropriate message filter and dispatch the message. 149 // Find the appropriate message filter and dispatch the message.
131 auto it = memory_message_filters_.find(child_process_host); 150 auto it = memory_message_filters_.find(child_process_host);
132 if (it != memory_message_filters_.end()) 151 if (it != memory_message_filters_.end())
133 it->second->SendPressureNotification(level); 152 it->second->SendPressureNotification(level);
134 } 153 }
135 154
136 } // namespace content 155 } // namespace content
OLDNEW
« no previous file with comments | « chrome/browser/flag_descriptions.cc ('k') | content/public/common/content_features.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698