| Index: base/path_service.cc
|
| ===================================================================
|
| --- base/path_service.cc (revision 56775)
|
| +++ base/path_service.cc (working copy)
|
| @@ -31,6 +31,7 @@
|
| namespace {
|
|
|
| typedef base::hash_map<int, FilePath> PathMap;
|
| +typedef base::hash_set<int> PathSet;
|
|
|
| // We keep a linked list of providers. In a debug build we ensure that no two
|
| // providers claim overlapping keys.
|
| @@ -93,8 +94,8 @@
|
|
|
| struct PathData {
|
| Lock lock;
|
| - PathMap cache; // Cache mappings from path key to path value.
|
| - PathMap overrides; // Track path overrides.
|
| + PathMap cache; // Track mappings from path key to path value.
|
| + PathSet overrides; // Track whether a path has been overridden.
|
| Provider* providers; // Linked list of path service providers.
|
|
|
| PathData() {
|
| @@ -140,20 +141,6 @@
|
| }
|
|
|
| // static
|
| -bool PathService::GetFromOverrides(int key, FilePath* result) {
|
| - PathData* path_data = GetPathData();
|
| - AutoLock scoped_lock(path_data->lock);
|
| -
|
| - // check for an overriden version.
|
| - PathMap::const_iterator it = path_data->overrides.find(key);
|
| - if (it != path_data->overrides.end()) {
|
| - *result = it->second;
|
| - return true;
|
| - }
|
| - return false;
|
| -}
|
| -
|
| -// static
|
| void PathService::AddToCache(int key, const FilePath& path) {
|
| PathData* path_data = GetPathData();
|
| AutoLock scoped_lock(path_data->lock);
|
| @@ -175,16 +162,9 @@
|
| if (key == base::DIR_CURRENT)
|
| return file_util::GetCurrentDirectory(result);
|
|
|
| - if (GetFromCache(key, result)) {
|
| - LOG(ERROR) << "Key: " << key << " returning " << result->value() << " from cache.";
|
| + if (GetFromCache(key, result))
|
| return true;
|
| - }
|
|
|
| - if (GetFromOverrides(key, result)) {
|
| - LOG(ERROR) << "Key: " << key << " returning " << result->value() << " from overrides.";
|
| - return true;
|
| - }
|
| -
|
| FilePath path;
|
|
|
| // search providers for the requested path
|
| @@ -204,7 +184,6 @@
|
| AddToCache(key, path);
|
|
|
| *result = path;
|
| - LOG(ERROR) << "Key: " << key << " returning " << result->value() << ".";
|
| return true;
|
| }
|
|
|
| @@ -220,6 +199,14 @@
|
| }
|
| #endif
|
|
|
| +bool PathService::IsOverridden(int key) {
|
| + PathData* path_data = GetPathData();
|
| + DCHECK(path_data);
|
| +
|
| + AutoLock scoped_lock(path_data->lock);
|
| + return path_data->overrides.find(key) != path_data->overrides.end();
|
| +}
|
| +
|
| bool PathService::Override(int key, const FilePath& path) {
|
| PathData* path_data = GetPathData();
|
| DCHECK(path_data);
|
| @@ -241,14 +228,8 @@
|
| return false;
|
|
|
| AutoLock scoped_lock(path_data->lock);
|
| -
|
| - // Clear the cache now. Some of its entries could have depended
|
| - // on the value we are overriding, and are now out of sync with reality.
|
| - path_data->cache.clear();
|
| -
|
| path_data->cache[key] = file_path;
|
| - path_data->overrides[key] = file_path;
|
| -
|
| + path_data->overrides.insert(key);
|
| return true;
|
| }
|
|
|
|
|