| OLD | NEW |
| 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 "components/precache/core/precache_database.h" | 5 #include "components/precache/core/precache_database.h" |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/files/file_path.h" | 8 #include "base/files/file_path.h" |
| 9 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
| 10 #include "base/metrics/histogram.h" | 10 #include "base/metrics/histogram.h" |
| (...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 93 // Since the precache came from the cache, and there's no entry in the URL | 93 // Since the precache came from the cache, and there's no entry in the URL |
| 94 // table for the URL, this means that the resource was already in the cache | 94 // table for the URL, this means that the resource was already in the cache |
| 95 // because of user browsing. Thus, this precache had no effect, so ignore | 95 // because of user browsing. Thus, this precache had no effect, so ignore |
| 96 // it. | 96 // it. |
| 97 return; | 97 return; |
| 98 } | 98 } |
| 99 | 99 |
| 100 if (!was_cached) { | 100 if (!was_cached) { |
| 101 // The precache only counts as overhead if it was downloaded over the | 101 // The precache only counts as overhead if it was downloaded over the |
| 102 // network. | 102 // network. |
| 103 UMA_HISTOGRAM_COUNTS("Precache.DownloadedPrecacheMotivated", size); | 103 UMA_HISTOGRAM_COUNTS("Precache.DownloadedPrecacheMotivated", |
| 104 static_cast<base::HistogramBase::Sample>(size)); |
| 104 } | 105 } |
| 105 | 106 |
| 106 // Use the URL table to keep track of URLs that are in the cache thanks to | 107 // Use the URL table to keep track of URLs that are in the cache thanks to |
| 107 // precaching. If a row for the URL already exists, than update the timestamp | 108 // precaching. If a row for the URL already exists, than update the timestamp |
| 108 // to |fetch_time|. | 109 // to |fetch_time|. |
| 109 buffered_writes_.push_back( | 110 buffered_writes_.push_back( |
| 110 base::Bind(&PrecacheURLTable::AddURL, | 111 base::Bind(&PrecacheURLTable::AddURL, |
| 111 base::Unretained(&precache_url_table_), url, fetch_time)); | 112 base::Unretained(&precache_url_table_), url, fetch_time)); |
| 112 buffered_urls_.insert(url.spec()); | 113 buffered_urls_.insert(url.spec()); |
| 113 MaybePostFlush(); | 114 MaybePostFlush(); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 126 // If the URL for this fetch is in the write buffer, then flush the write | 127 // If the URL for this fetch is in the write buffer, then flush the write |
| 127 // buffer. | 128 // buffer. |
| 128 Flush(); | 129 Flush(); |
| 129 } | 130 } |
| 130 | 131 |
| 131 if (was_cached && !precache_url_table_.HasURL(url)) { | 132 if (was_cached && !precache_url_table_.HasURL(url)) { |
| 132 // Ignore cache hits that precache can't take credit for. | 133 // Ignore cache hits that precache can't take credit for. |
| 133 return; | 134 return; |
| 134 } | 135 } |
| 135 | 136 |
| 137 base::HistogramBase::Sample size_sample = |
| 138 static_cast<base::HistogramBase::Sample>(size); |
| 136 if (!was_cached) { | 139 if (!was_cached) { |
| 137 // The fetch was served over the network during user browsing, so count it | 140 // The fetch was served over the network during user browsing, so count it |
| 138 // as downloaded non-precache bytes. | 141 // as downloaded non-precache bytes. |
| 139 UMA_HISTOGRAM_COUNTS("Precache.DownloadedNonPrecache", size); | 142 UMA_HISTOGRAM_COUNTS("Precache.DownloadedNonPrecache", size_sample); |
| 140 if (is_connection_cellular) { | 143 if (is_connection_cellular) { |
| 141 UMA_HISTOGRAM_COUNTS("Precache.DownloadedNonPrecache.Cellular", size); | 144 UMA_HISTOGRAM_COUNTS("Precache.DownloadedNonPrecache.Cellular", |
| 145 size_sample); |
| 142 } | 146 } |
| 143 } else { | 147 } else { |
| 144 // The fetch was served from the cache, and since there's an entry for this | 148 // The fetch was served from the cache, and since there's an entry for this |
| 145 // URL in the URL table, this means that the resource was served from the | 149 // URL in the URL table, this means that the resource was served from the |
| 146 // cache only because precaching put it there. Thus, precaching was helpful, | 150 // cache only because precaching put it there. Thus, precaching was helpful, |
| 147 // so count the fetch as saved bytes. | 151 // so count the fetch as saved bytes. |
| 148 UMA_HISTOGRAM_COUNTS("Precache.Saved", size); | 152 UMA_HISTOGRAM_COUNTS("Precache.Saved", size_sample); |
| 149 if (is_connection_cellular) { | 153 if (is_connection_cellular) { |
| 150 UMA_HISTOGRAM_COUNTS("Precache.Saved.Cellular", size); | 154 UMA_HISTOGRAM_COUNTS("Precache.Saved.Cellular", size_sample); |
| 151 } | 155 } |
| 152 } | 156 } |
| 153 | 157 |
| 154 // Since the resource has been fetched during user browsing, remove any record | 158 // Since the resource has been fetched during user browsing, remove any record |
| 155 // of that URL having been precached from the URL table, if any exists. | 159 // of that URL having been precached from the URL table, if any exists. |
| 156 // The current fetch would have put this resource in the cache regardless of | 160 // The current fetch would have put this resource in the cache regardless of |
| 157 // whether or not it was previously precached, so delete any record of that | 161 // whether or not it was previously precached, so delete any record of that |
| 158 // URL having been precached from the URL table. | 162 // URL having been precached from the URL table. |
| 159 buffered_writes_.push_back( | 163 buffered_writes_.push_back( |
| 160 base::Bind(&PrecacheURLTable::DeleteURL, | 164 base::Bind(&PrecacheURLTable::DeleteURL, |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 218 // database writes can be buffered up and flushed together in the same | 222 // database writes can be buffered up and flushed together in the same |
| 219 // transaction. | 223 // transaction. |
| 220 base::MessageLoop::current()->PostDelayedTask( | 224 base::MessageLoop::current()->PostDelayedTask( |
| 221 FROM_HERE, base::Bind(&PrecacheDatabase::PostedFlush, | 225 FROM_HERE, base::Bind(&PrecacheDatabase::PostedFlush, |
| 222 scoped_refptr<PrecacheDatabase>(this)), | 226 scoped_refptr<PrecacheDatabase>(this)), |
| 223 base::TimeDelta::FromSeconds(1)); | 227 base::TimeDelta::FromSeconds(1)); |
| 224 is_flush_posted_ = true; | 228 is_flush_posted_ = true; |
| 225 } | 229 } |
| 226 | 230 |
| 227 } // namespace precache | 231 } // namespace precache |
| OLD | NEW |