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

Side by Side Diff: base/memory/memory_pressure_listener.cc

Issue 1312163003: Add method for suppressing MemoryPressureListener notifications (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address thestig's comments Created 5 years, 3 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
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "base/memory/memory_pressure_listener.h" 5 #include "base/memory/memory_pressure_listener.h"
6 6
7 #include "base/lazy_instance.h" 7 #include "base/lazy_instance.h"
8 #include "base/observer_list_threadsafe.h" 8 #include "base/observer_list_threadsafe.h"
9 #include "base/trace_event/trace_event.h" 9 #include "base/trace_event/trace_event.h"
10 10
(...skipping 14 matching lines...) Expand all
25 // Leaky. 25 // Leaky.
26 ret->AddRef(); 26 ret->AddRef();
27 return ret; 27 return ret;
28 } 28 }
29 }; 29 };
30 30
31 LazyInstance< 31 LazyInstance<
32 ObserverListThreadSafe<MemoryPressureListener>, 32 ObserverListThreadSafe<MemoryPressureListener>,
33 LeakyLazyObserverListTraits> g_observers = LAZY_INSTANCE_INITIALIZER; 33 LeakyLazyObserverListTraits> g_observers = LAZY_INSTANCE_INITIALIZER;
34 34
35 // All memory pressure notifications within this process will be suppressed if
36 // this variable is set to 1.
37 subtle::Atomic32 g_notifications_suppressed = 0;
38
35 } // namespace 39 } // namespace
36 40
37 MemoryPressureListener::MemoryPressureListener( 41 MemoryPressureListener::MemoryPressureListener(
38 const MemoryPressureListener::MemoryPressureCallback& callback) 42 const MemoryPressureListener::MemoryPressureCallback& callback)
39 : callback_(callback) { 43 : callback_(callback) {
40 g_observers.Get().AddObserver(this); 44 g_observers.Get().AddObserver(this);
41 } 45 }
42 46
43 MemoryPressureListener::~MemoryPressureListener() { 47 MemoryPressureListener::~MemoryPressureListener() {
44 g_observers.Get().RemoveObserver(this); 48 g_observers.Get().RemoveObserver(this);
45 } 49 }
46 50
47 void MemoryPressureListener::Notify(MemoryPressureLevel memory_pressure_level) { 51 void MemoryPressureListener::Notify(MemoryPressureLevel memory_pressure_level) {
48 callback_.Run(memory_pressure_level); 52 callback_.Run(memory_pressure_level);
49 } 53 }
50 54
51 // static 55 // static
52 void MemoryPressureListener::NotifyMemoryPressure( 56 void MemoryPressureListener::NotifyMemoryPressure(
53 MemoryPressureLevel memory_pressure_level) { 57 MemoryPressureLevel memory_pressure_level) {
54 DCHECK_NE(memory_pressure_level, MEMORY_PRESSURE_LEVEL_NONE); 58 DCHECK_NE(memory_pressure_level, MEMORY_PRESSURE_LEVEL_NONE);
55 TRACE_EVENT1("memory", "MemoryPressureListener::NotifyMemoryPressure", 59 TRACE_EVENT1("memory", "MemoryPressureListener::NotifyMemoryPressure",
56 "level", memory_pressure_level); 60 "level", memory_pressure_level);
61 if (AreNotificationsSuppressed())
62 return;
57 g_observers.Get().Notify(FROM_HERE, &MemoryPressureListener::Notify, 63 g_observers.Get().Notify(FROM_HERE, &MemoryPressureListener::Notify,
58 memory_pressure_level); 64 memory_pressure_level);
59 } 65 }
60 66
67 // static
68 bool MemoryPressureListener::AreNotificationsSuppressed() {
69 return subtle::Acquire_Load(&g_notifications_suppressed) == 1;
70 }
71
72 // static
73 void MemoryPressureListener::SetNotificationsSuppressed(bool suppress) {
74 subtle::Release_Store(&g_notifications_suppressed, suppress ? 1 : 0);
75 }
76
61 } // namespace base 77 } // namespace base
OLDNEW
« no previous file with comments | « base/memory/memory_pressure_listener.h ('k') | base/memory/memory_pressure_listener_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698