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

Side by Side Diff: chrome/browser/extensions/api/declarative/rules_registry_with_cache.h

Issue 14851011: RulesRegistryWithCache::ProcessChangedRules speed-up (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | chrome/browser/extensions/api/declarative/rules_registry_with_cache.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 #ifndef CHROME_BROWSER_EXTENSIONS_API_DECLARATIVE_RULES_REGISTRY_WITH_CACHE_H__ 5 #ifndef CHROME_BROWSER_EXTENSIONS_API_DECLARATIVE_RULES_REGISTRY_WITH_CACHE_H__
6 #define CHROME_BROWSER_EXTENSIONS_API_DECLARATIVE_RULES_REGISTRY_WITH_CACHE_H__ 6 #define CHROME_BROWSER_EXTENSIONS_API_DECLARATIVE_RULES_REGISTRY_WITH_CACHE_H__
7 7
8 #include "chrome/browser/extensions/api/declarative/rules_registry.h" 8 #include "chrome/browser/extensions/api/declarative/rules_registry.h"
9 9
10 #include <map> 10 #include <map>
(...skipping 11 matching lines...) Expand all
22 class Profile; 22 class Profile;
23 23
24 namespace extensions { 24 namespace extensions {
25 25
26 // A base class for RulesRegistries that takes care of storing the 26 // A base class for RulesRegistries that takes care of storing the
27 // RulesRegistry::Rule objects. It contains all the methods that need to run on 27 // RulesRegistry::Rule objects. It contains all the methods that need to run on
28 // the registry thread; methods that need to run on the UI thread are separated 28 // the registry thread; methods that need to run on the UI thread are separated
29 // in the RuleStorageOnUI object. 29 // in the RuleStorageOnUI object.
30 class RulesRegistryWithCache : public RulesRegistry { 30 class RulesRegistryWithCache : public RulesRegistry {
31 public: 31 public:
32 typedef std::vector<linked_ptr<RulesRegistry::Rule> > RulesVector;
32 // RuleStorageOnUI implements the part of the RulesRegistry which works on 33 // RuleStorageOnUI implements the part of the RulesRegistry which works on
33 // the UI thread. It should only be used on the UI thread. It gets created 34 // the UI thread. It should only be used on the UI thread. It gets created
34 // by the RulesRegistry, but right after that it changes owner to the 35 // by the RulesRegistry, but right after that it changes owner to the
35 // RulesRegistryService, and is deleted by the service. 36 // RulesRegistryService, and is deleted by the service.
36 // If |log_storage_init_delay| is set, the delay caused by loading and 37 // If |log_storage_init_delay| is set, the delay caused by loading and
37 // registering rules on initialization will be logged with UMA. 38 // registering rules on initialization will be logged with UMA.
38 class RuleStorageOnUI : public content::NotificationObserver { 39 class RuleStorageOnUI : public content::NotificationObserver {
39 public: 40 public:
40 RuleStorageOnUI(Profile* profile, 41 RuleStorageOnUI(Profile* profile,
41 const std::string& storage_key, 42 const std::string& storage_key,
42 content::BrowserThread::ID rules_registry_thread, 43 content::BrowserThread::ID rules_registry_thread,
43 base::WeakPtr<RulesRegistryWithCache> registry, 44 base::WeakPtr<RulesRegistryWithCache> registry,
44 bool log_storage_init_delay); 45 bool log_storage_init_delay);
45 46
46 virtual ~RuleStorageOnUI(); 47 virtual ~RuleStorageOnUI();
47 48
48 // Initialize the storage functionality. 49 // Initialize the storage functionality.
49 void Init(); 50 void Init();
50 51
51 void WriteToStorage(const std::string& extension_id, 52 void WriteToStorage(const std::string& extension_id,
52 scoped_ptr<base::Value> value); 53 scoped_ptr<RulesVector> new_rules);
53 54
54 base::WeakPtr<RuleStorageOnUI> GetWeakPtr() { 55 base::WeakPtr<RuleStorageOnUI> GetWeakPtr() {
55 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI)); 56 DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::UI));
56 return weak_ptr_factory_.GetWeakPtr(); 57 return weak_ptr_factory_.GetWeakPtr();
57 } 58 }
58 59
59 private: 60 private:
60 enum ReadyState { // Our increasing states of readiness. 61 enum ReadyState { // Our increasing states of readiness.
61 NOT_READY, // Waiting for NOTIFICATION_EXTENSIONS_READY. 62 NOT_READY, // Waiting for NOTIFICATION_EXTENSIONS_READY.
62 EXTENSIONS_READY, // Observed NOTIFICATION_EXTENSIONS_READY. 63 EXTENSIONS_READY, // Observed NOTIFICATION_EXTENSIONS_READY.
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
155 const std::vector<linked_ptr<RulesRegistry::Rule> >& rules) = 0; 156 const std::vector<linked_ptr<RulesRegistry::Rule> >& rules) = 0;
156 virtual std::string RemoveRulesImpl( 157 virtual std::string RemoveRulesImpl(
157 const std::string& extension_id, 158 const std::string& extension_id,
158 const std::vector<std::string>& rule_identifiers) = 0; 159 const std::vector<std::string>& rule_identifiers) = 0;
159 virtual std::string RemoveAllRulesImpl( 160 virtual std::string RemoveAllRulesImpl(
160 const std::string& extension_id) = 0; 161 const std::string& extension_id) = 0;
161 162
162 private: 163 private:
163 typedef std::string ExtensionId; 164 typedef std::string ExtensionId;
164 typedef std::string RuleId; 165 typedef std::string RuleId;
165 typedef std::pair<ExtensionId, RuleId> RulesDictionaryKey; 166 typedef std::map<RuleId, linked_ptr<RulesRegistry::Rule> > RulesDictionary;
166 typedef std::map<RulesDictionaryKey, linked_ptr<RulesRegistry::Rule> >
167 RulesDictionary;
168 167
169 // Common processing after extension's rules have changed. 168 // Common processing after extension's rules have changed.
170 void ProcessChangedRules(const std::string& extension_id); 169 void ProcessChangedRules(const std::string& extension_id);
171 170
172 // Process the callbacks once the registry gets ready. 171 // Process the callbacks once the registry gets ready.
173 void OnReady(base::Time storage_init_time); 172 void OnReady(base::Time storage_init_time);
174 173
175 // Deserialize the rules from the given Value object and add them to the 174 // Deserialize the rules from the given Value object and add them to the
176 // RulesRegistry. 175 // RulesRegistry.
177 void DeserializeAndAddRules(const std::string& extension_id, 176 void DeserializeAndAddRules(const std::string& extension_id,
178 scoped_ptr<base::Value> rules); 177 scoped_ptr<base::Value> rules);
179 178
180 179
181 RulesDictionary rules_; 180 std::map<ExtensionId, RulesDictionary> rules_;
battre 2013/05/07 16:22:09 This variable is going to be deleted with my CL. I
182 181
183 std::vector<base::Closure> ready_callbacks_; 182 std::vector<base::Closure> ready_callbacks_;
184 183
185 // True when we have finished reading from storage for all extensions that 184 // True when we have finished reading from storage for all extensions that
186 // are loaded on startup. 185 // are loaded on startup.
187 bool ready_; 186 bool ready_;
188 187
189 // The factory needs to be declared before |storage_on_ui_|, so that it can 188 // The factory needs to be declared before |storage_on_ui_|, so that it can
190 // produce a pointer as a construction argument for |storage_on_ui_|. 189 // produce a pointer as a construction argument for |storage_on_ui_|.
191 base::WeakPtrFactory<RulesRegistryWithCache> weak_ptr_factory_; 190 base::WeakPtrFactory<RulesRegistryWithCache> weak_ptr_factory_;
192 191
193 // |storage_on_ui_| is owned by the registry service. If |storage_on_ui_| is 192 // |storage_on_ui_| is owned by the registry service. If |storage_on_ui_| is
194 // NULL, then the storage functionality is disabled (this is used in tests). 193 // NULL, then the storage functionality is disabled (this is used in tests).
195 // This registry cannot own |storage_on_ui_| because during the time after 194 // This registry cannot own |storage_on_ui_| because during the time after
196 // rules registry service shuts down on UI thread, and the registry is 195 // rules registry service shuts down on UI thread, and the registry is
197 // destroyed on its thread, the use of the |storage_on_ui_| would not be 196 // destroyed on its thread, the use of the |storage_on_ui_| would not be
198 // safe. The registry only ever associates with one RuleStorageOnUI instance. 197 // safe. The registry only ever associates with one RuleStorageOnUI instance.
199 const base::WeakPtr<RuleStorageOnUI> storage_on_ui_; 198 const base::WeakPtr<RuleStorageOnUI> storage_on_ui_;
200 199
201 DISALLOW_COPY_AND_ASSIGN(RulesRegistryWithCache); 200 DISALLOW_COPY_AND_ASSIGN(RulesRegistryWithCache);
202 }; 201 };
203 202
204 } // namespace extensions 203 } // namespace extensions
205 204
206 #endif // CHROME_BROWSER_EXTENSIONS_API_DECLARATIVE_RULES_REGISTRY_WITH_CACHE_H __ 205 #endif // CHROME_BROWSER_EXTENSIONS_API_DECLARATIVE_RULES_REGISTRY_WITH_CACHE_H __
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/extensions/api/declarative/rules_registry_with_cache.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698