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

Side by Side Diff: components/data_reduction_proxy/browser/data_reduction_proxy_delayed_pref_service.cc

Issue 473723002: Update data reduction proxy statistics prefs less often on desktop (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@tooManyWritesPatch
Patch Set: Created 6 years, 4 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
(Empty)
1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "components/data_reduction_proxy/browser/data_reduction_proxy_delayed_p ref_service.h"
6
7 #include "base/bind.h"
8 #include "base/location.h"
9 #include "base/prefs/pref_service.h"
10 #include "base/prefs/scoped_user_pref_update.h"
11 #include "base/sequenced_task_runner.h"
12 #include "base/strings/string_number_conversions.h"
13 #include "base/time/time.h"
14 #include "base/values.h"
15
16 namespace data_reduction_proxy {
17
18 DataReductionProxyDelayedPrefService::DataReductionProxyDelayedPrefService(
19 PrefService* prefs,
20 scoped_refptr<base::SequencedTaskRunner> task_runner,
21 base::TimeDelta delay)
22 : pref_service_(prefs),
23 task_runner_(task_runner),
24 delay_(delay),
25 delayed_task_posted_(false) {
26 DCHECK(prefs);
bengr 2014/08/14 17:39:42 Also, DCHECK that delay is non-negative
megjablon 2014/08/26 19:28:40 Done.
27 if (delay_ <= base::TimeDelta()) {
bengr 2014/08/14 17:39:42 Don't you mean >=?. Also, afaict, these don't need
megjablon 2014/08/26 19:28:41 Done.
28 pref_map_ = new DataReductionProxyPrefMap();
29 list_pref_map_ = new DataReductionProxyListPrefMap();
30 }
31 }
32
33 DataReductionProxyDelayedPrefService::~DataReductionProxyDelayedPrefService() {
34 WritePrefs();
35 }
36
37 int64 DataReductionProxyDelayedPrefService::GetInt64(const char* pref_path) {
38 if (!(delay_ <= base::TimeDelta())) {
bengr 2014/08/14 17:39:41 if (delay_ == base::TimeDelta()) return pref_ser
megjablon 2014/08/26 19:28:41 Done.
39 return pref_service_->GetInt64(pref_path);
40 }
41
42 DataReductionProxyPrefMap::iterator iter = pref_map_->find(pref_path);
43 if (iter == pref_map_->end()) {
44 int64 pref_value = pref_service_->GetInt64(pref_path);
45 pref_map_->insert(std::pair<const char*, int64>(pref_path, pref_value));
bengr 2014/08/14 17:39:42 You can do pref_map_[pref_path] = pref_value, I th
megjablon 2014/08/26 19:28:40 Done.
46 return pref_value;
47 }
48 return iter->second;
49 }
50
51 void DataReductionProxyDelayedPrefService::SetInt64(const char* pref_path,
52 int64 pref_value) {
53 if (!(delay_ <= base::TimeDelta())) {
bengr 2014/08/14 17:39:41 if (delay_ == base::TimeDelta()) ...
megjablon 2014/08/26 19:28:41 Done.
54 pref_service_->SetInt64(pref_path, pref_value);
55 return;
56 }
57
58 if (!delayed_task_posted_)
59 WritePrefsAndPost();
60 DataReductionProxyPrefMap::iterator iter = pref_map_->find(pref_path);
bengr 2014/08/14 17:39:42 Can you factor out the initialization of the maps?
megjablon 2014/08/26 19:28:40 Done.
61 if (iter == pref_map_->end()) {
62 int64 pref_value = pref_service_->GetInt64(pref_path);
63 pref_map_->insert(std::pair<const char*, int64>(pref_path, pref_value));
bengr 2014/08/14 17:39:41 again, use []
megjablon 2014/08/26 19:28:40 Done.
64 }
65 (*pref_map_)[pref_path] = pref_value;
66 }
67
68 base::ListValue* DataReductionProxyDelayedPrefService::GetList(
69 const char* pref_path) {
70 if (!(delay_ <= base::TimeDelta())) {
71 return ListPrefUpdate(pref_service_, pref_path).Get();
72 }
73
74 if (!delayed_task_posted_)
75 WritePrefsAndPost();
76 DataReductionProxyListPrefMap::iterator iter =
77 list_pref_map_->find(pref_path);
78 if (iter == list_pref_map_->end()) {
79 base::ListValue* pref_value = pref_service_->GetList(pref_path)->DeepCopy();
bengr 2014/08/14 17:39:41 This looks like a memory leak. Where do you deallo
megjablon 2014/08/26 19:28:40 Using a ScopedPtrHashMap
megjablon 2014/08/26 19:28:40 Done.
80 list_pref_map_->insert(std::pair<const char*, base::ListValue*>
81 (pref_path, pref_value));
82 return pref_value;
83 }
84 return iter->second;
85 }
86
87 void DataReductionProxyDelayedPrefService::WritePrefs() {
88 for(DataReductionProxyPrefMap::iterator iter = pref_map_->begin();
bengr 2014/08/14 17:39:41 for (
megjablon 2014/08/26 19:28:41 Done.
89 iter != pref_map_->end(); ++iter) {
90 pref_service_->SetInt64(iter->first, iter->second);
91 }
92
93 for (DataReductionProxyListPrefMap::iterator iter = list_pref_map_->begin();
94 iter != list_pref_map_->end(); ++iter) {
bengr 2014/08/14 17:39:41 indent one more
megjablon 2014/08/26 19:28:40 Done.
95 TransferList(*(iter->second),
96 ListPrefUpdate(pref_service_, iter->first).Get());
97 }
98 }
99
100 void DataReductionProxyDelayedPrefService::WritePrefsAndPost() {
101 // Only write after the first time posting the task
102 if (!delayed_task_posted_) {
103 delayed_task_posted_ = true;
104 } else {
105 WritePrefs();
106 }
107 task_runner_->PostDelayedTask(
108 FROM_HERE,
109 base::Bind(&DataReductionProxyDelayedPrefService::WritePrefsAndPost,
110 base::Unretained(this)),
bengr 2014/08/14 17:39:41 What happens after this is destroyed? I think you
bengr 2014/08/14 23:09:49 Ignore that. I think you can just pass a WeakPtr i
megjablon 2014/08/26 19:28:40 Done.
111 delay_);
112 }
113
114 void DataReductionProxyDelayedPrefService::TransferList(
115 const base::ListValue& from_list,
116 base::ListValue* to_list) {
117 to_list->Clear();
118 for (size_t i = 0; i < from_list.GetSize(); ++i) {
119 int64 value = GetListPrefInt64Value(from_list, i);
120 to_list->Set(i, new base::StringValue(base::Int64ToString(value)));
bengr 2014/08/14 17:39:41 you can combine this line with the previous.
megjablon 2014/08/26 19:28:41 Done.
121 }
122 }
123
124 int64 DataReductionProxyDelayedPrefService::GetListPrefInt64Value(
125 const base::ListValue& list,
126 size_t index) {
127 std::string string_value;
128 if (!list.GetString(index, &string_value)) {
129 NOTREACHED();
130 return 0;
131 }
132
133 int64 value = 0;
134 bool rv = base::StringToInt64(string_value, &value);
135 DCHECK(rv);
136 return value;
137 }
138
139 } // namespace data_reduction_proxy
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698