diff options
author | joi@chromium.org <joi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-11-12 15:29:20 +0000 |
---|---|---|
committer | joi@chromium.org <joi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-11-12 15:29:20 +0000 |
commit | 54ffd94accce938694d0aab9aff214d6686d9427 (patch) | |
tree | 6e40ac84f6add296f4b7b6f1312411a0f7f653b4 /chrome/browser/api/prefs/pref_member.cc | |
parent | 8c77b83c8d278b601736f6c5db9eddb7ca135bb3 (diff) | |
download | chromium_src-54ffd94accce938694d0aab9aff214d6686d9427.zip chromium_src-54ffd94accce938694d0aab9aff214d6686d9427.tar.gz chromium_src-54ffd94accce938694d0aab9aff214d6686d9427.tar.bz2 |
Reland: Closure-based API to PrefChangeObserver and PrefMember.
The original was in http://codereview.chromium.org/11368098/ (landed
as r166670) but seemed to increase memory usage significantly.
This version does away with storing the pref name in callbacks, which
should reduce memory usage.
TBR=ben@chromium.org,finnur@chromium.org
BUG=155525, 160177
Review URL: https://chromiumcodereview.appspot.com/11369153
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@167179 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/api/prefs/pref_member.cc')
-rw-r--r-- | chrome/browser/api/prefs/pref_member.cc | 19 |
1 files changed, 12 insertions, 7 deletions
diff --git a/chrome/browser/api/prefs/pref_member.cc b/chrome/browser/api/prefs/pref_member.cc index e81b13a..5ca5e62d 100644 --- a/chrome/browser/api/prefs/pref_member.cc +++ b/chrome/browser/api/prefs/pref_member.cc @@ -4,7 +4,8 @@ #include "chrome/browser/api/prefs/pref_member.h" -#include "base/bind.h" +#include "base/bind_helpers.h" +#include "base/callback.h" #include "base/location.h" #include "base/prefs/public/pref_service_base.h" #include "base/value_conversions.h" @@ -14,8 +15,7 @@ using base::MessageLoopProxy; namespace subtle { PrefMemberBase::PrefMemberBase() - : observer_(NULL), - prefs_(NULL), + : prefs_(NULL), setting_value_(false) { } @@ -25,13 +25,13 @@ PrefMemberBase::~PrefMemberBase() { void PrefMemberBase::Init(const char* pref_name, PrefServiceBase* prefs, - PrefObserver* observer) { + const NamedChangeCallback& observer) { DCHECK(pref_name); DCHECK(prefs); DCHECK(pref_name_.empty()); // Check that Init is only called once. - observer_ = observer; prefs_ = prefs; pref_name_ = pref_name; + observer_ = observer; // Check that the preference is registered. DCHECK(prefs_->FindPreference(pref_name_.c_str())) << pref_name << " not registered."; @@ -60,8 +60,8 @@ void PrefMemberBase::OnPreferenceChanged(PrefServiceBase* service, const std::string& pref_name) { VerifyValuePrefName(); UpdateValueFromPref(); - if (!setting_value_ && observer_) - observer_->OnPreferenceChanged(service, pref_name); + if (!setting_value_ && !observer_.is_null()) + observer_.Run(pref_name); } void PrefMemberBase::UpdateValueFromPref() const { @@ -82,6 +82,11 @@ void PrefMemberBase::VerifyPref() const { UpdateValueFromPref(); } +void PrefMemberBase::InvokeUnnamedCallback(const base::Closure& callback, + const std::string& pref_name) { + callback.Run(); +} + PrefMemberBase::Internal::Internal() : thread_loop_(MessageLoopProxy::current()), is_managed_(false) { |