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

Side by Side Diff: chrome/browser/predictors/resource_prefetch_predictor_tables.cc

Issue 2804283002: predictors: Refactor UpdateData() function. (Closed)
Patch Set: Oops fix. Created 3 years, 8 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
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 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 "chrome/browser/predictors/resource_prefetch_predictor_tables.h" 5 #include "chrome/browser/predictors/resource_prefetch_predictor_tables.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/memory/ptr_util.h" 10 #include "base/memory/ptr_util.h"
(...skipping 147 matching lines...) Expand 10 before | Expand all | Expand 10 after
158 origin_data_map->clear(); 158 origin_data_map->clear();
159 159
160 GetAllResourceDataHelper(PREFETCH_KEY_TYPE_URL, url_data_map); 160 GetAllResourceDataHelper(PREFETCH_KEY_TYPE_URL, url_data_map);
161 GetAllResourceDataHelper(PREFETCH_KEY_TYPE_HOST, host_data_map); 161 GetAllResourceDataHelper(PREFETCH_KEY_TYPE_HOST, host_data_map);
162 GetAllRedirectDataHelper(PREFETCH_KEY_TYPE_URL, url_redirect_data_map); 162 GetAllRedirectDataHelper(PREFETCH_KEY_TYPE_URL, url_redirect_data_map);
163 GetAllRedirectDataHelper(PREFETCH_KEY_TYPE_HOST, host_redirect_data_map); 163 GetAllRedirectDataHelper(PREFETCH_KEY_TYPE_HOST, host_redirect_data_map);
164 GetAllManifestDataHelper(manifest_map); 164 GetAllManifestDataHelper(manifest_map);
165 GetAllOriginDataHelper(origin_data_map); 165 GetAllOriginDataHelper(origin_data_map);
166 } 166 }
167 167
168 void ResourcePrefetchPredictorTables::UpdateData( 168 void ResourcePrefetchPredictorTables::UpdateResourceData(
169 const PrefetchData& url_data, 169 const PrefetchData& data,
170 const PrefetchData& host_data, 170 PrefetchKeyType key_type) {
171 const RedirectData& url_redirect_data, 171 TRACE_EVENT0("browser", "ResourcePrefetchPredictor::UpdateResourceData");
172 const RedirectData& host_redirect_data) {
173 TRACE_EVENT0("browser", "ResourcePrefetchPredictor::UpdateData");
174 DCHECK_CURRENTLY_ON(BrowserThread::DB); 172 DCHECK_CURRENTLY_ON(BrowserThread::DB);
175 if (CantAccessDatabase()) 173 if (CantAccessDatabase())
176 return; 174 return;
177 175
178 DCHECK(url_data.has_primary_key() || host_data.has_primary_key() || 176 UpdateDataHelper(key_type, PrefetchDataType::RESOURCE, data.primary_key(),
179 url_redirect_data.has_primary_key() || 177 data);
180 host_redirect_data.has_primary_key()); 178 }
181 179
182 DB()->BeginTransaction(); 180 void ResourcePrefetchPredictorTables::UpdateRedirectData(
181 const RedirectData& data,
182 PrefetchKeyType key_type) {
183 TRACE_EVENT0("browser", "ResourcePrefetchPredictor::UpdateRedirectData");
184 DCHECK_CURRENTLY_ON(BrowserThread::DB);
185 if (CantAccessDatabase())
186 return;
183 187
184 bool success = 188 UpdateDataHelper(key_type, PrefetchDataType::REDIRECT, data.primary_key(),
185 (!url_data.has_primary_key() || 189 data);
186 UpdateDataHelper(PREFETCH_KEY_TYPE_URL, PrefetchDataType::RESOURCE,
187 url_data.primary_key(), url_data)) &&
188 (!host_data.has_primary_key() ||
189 UpdateDataHelper(PREFETCH_KEY_TYPE_HOST, PrefetchDataType::RESOURCE,
190 host_data.primary_key(), host_data)) &&
191 (!url_redirect_data.has_primary_key() ||
192 UpdateDataHelper(PREFETCH_KEY_TYPE_URL, PrefetchDataType::REDIRECT,
193 url_redirect_data.primary_key(), url_redirect_data)) &&
194 (!host_redirect_data.has_primary_key() ||
195 UpdateDataHelper(PREFETCH_KEY_TYPE_HOST, PrefetchDataType::REDIRECT,
196 host_redirect_data.primary_key(), host_redirect_data));
197 if (!success)
198 DB()->RollbackTransaction();
199 else
200 DB()->CommitTransaction();
201 } 190 }
202 191
203 void ResourcePrefetchPredictorTables::UpdateManifestData( 192 void ResourcePrefetchPredictorTables::UpdateManifestData(
204 const std::string& host, 193 const std::string& host,
205 const precache::PrecacheManifest& manifest_data) { 194 const precache::PrecacheManifest& manifest_data) {
195 TRACE_EVENT0("browser", "ResourcePrefetchPredictor::UpdateManifestData");
206 DCHECK_CURRENTLY_ON(BrowserThread::DB); 196 DCHECK_CURRENTLY_ON(BrowserThread::DB);
207 if (CantAccessDatabase()) 197 if (CantAccessDatabase())
208 return; 198 return;
209 199
210 DB()->BeginTransaction(); 200 UpdateDataHelper(PREFETCH_KEY_TYPE_HOST, PrefetchDataType::MANIFEST, host,
211 bool success = UpdateDataHelper( 201 manifest_data);
212 PREFETCH_KEY_TYPE_HOST, PrefetchDataType::MANIFEST, host, manifest_data);
213
214 if (!success)
215 DB()->RollbackTransaction();
216 else
217 DB()->CommitTransaction();
218 } 202 }
219 203
220 void ResourcePrefetchPredictorTables::UpdateOriginData( 204 void ResourcePrefetchPredictorTables::UpdateOriginData(
221 const OriginData& origin_data) { 205 const OriginData& origin_data) {
206 TRACE_EVENT0("browser", "ResourcePrefetchPredictor::UpdateOriginData");
222 DCHECK_CURRENTLY_ON(BrowserThread::DB); 207 DCHECK_CURRENTLY_ON(BrowserThread::DB);
223 if (CantAccessDatabase()) 208 if (CantAccessDatabase())
224 return; 209 return;
225 210
226 std::string host = origin_data.host(); 211 UpdateDataHelper(PREFETCH_KEY_TYPE_HOST, PrefetchDataType::ORIGIN,
227 DB()->BeginTransaction(); 212 origin_data.host(), origin_data);
228 bool success = UpdateDataHelper(PREFETCH_KEY_TYPE_HOST,
229 PrefetchDataType::ORIGIN, host, origin_data);
230
231 if (!success)
232 DB()->RollbackTransaction();
233 else
234 DB()->CommitTransaction();
235 } 213 }
236 214
237 void ResourcePrefetchPredictorTables::DeleteResourceData( 215 void ResourcePrefetchPredictorTables::DeleteResourceData(
238 const std::vector<std::string>& urls, 216 const std::vector<std::string>& urls,
239 const std::vector<std::string>& hosts) { 217 const std::vector<std::string>& hosts) {
240 DCHECK_CURRENTLY_ON(BrowserThread::DB); 218 DCHECK_CURRENTLY_ON(BrowserThread::DB);
241 if (CantAccessDatabase()) 219 if (CantAccessDatabase())
242 return; 220 return;
243 221
244 DCHECK(!urls.empty() || !hosts.empty()); 222 DCHECK(!urls.empty() || !hosts.empty());
(...skipping 133 matching lines...) Expand 10 before | Expand all | Expand 10 after
378 .c_str())); 356 .c_str()));
379 357
380 OriginData data; 358 OriginData data;
381 std::string key; 359 std::string key;
382 while (StepAndInitializeProtoData(&reader, &key, &data)) { 360 while (StepAndInitializeProtoData(&reader, &key, &data)) {
383 origin_map->insert({key, data}); 361 origin_map->insert({key, data});
384 DCHECK_EQ(data.host(), key); 362 DCHECK_EQ(data.host(), key);
385 } 363 }
386 } 364 }
387 365
388 bool ResourcePrefetchPredictorTables::UpdateDataHelper( 366 void ResourcePrefetchPredictorTables::UpdateDataHelper(
389 PrefetchKeyType key_type, 367 PrefetchKeyType key_type,
390 PrefetchDataType data_type, 368 PrefetchDataType data_type,
391 const std::string& key, 369 const std::string& key,
392 const MessageLite& data) { 370 const MessageLite& data) {
371 DB()->BeginTransaction();
372
393 // Delete the older data from the table. 373 // Delete the older data from the table.
394 std::unique_ptr<sql::Statement> deleter( 374 std::unique_ptr<sql::Statement> deleter(
395 GetTableUpdateStatement(key_type, data_type, TableOperationType::REMOVE)); 375 GetTableUpdateStatement(key_type, data_type, TableOperationType::REMOVE));
396 deleter->BindString(0, key); 376 deleter->BindString(0, key);
397 if (!deleter->Run()) 377 bool success = deleter->Run();
398 return false;
399 378
400 // Add the new data to the table. 379 if (success) {
401 std::unique_ptr<sql::Statement> inserter( 380 // Add the new data to the table.
402 GetTableUpdateStatement(key_type, data_type, TableOperationType::INSERT)); 381 std::unique_ptr<sql::Statement> inserter(GetTableUpdateStatement(
403 BindProtoDataToStatement(key, data, inserter.get()); 382 key_type, data_type, TableOperationType::INSERT));
404 return inserter->Run(); 383 BindProtoDataToStatement(key, data, inserter.get());
384 success = inserter->Run();
385 }
386
387 if (!success)
388 DB()->RollbackTransaction();
389 else
390 DB()->CommitTransaction();
405 } 391 }
406 392
407 void ResourcePrefetchPredictorTables::DeleteDataHelper( 393 void ResourcePrefetchPredictorTables::DeleteDataHelper(
408 PrefetchKeyType key_type, 394 PrefetchKeyType key_type,
409 PrefetchDataType data_type, 395 PrefetchDataType data_type,
410 const std::vector<std::string>& keys) { 396 const std::vector<std::string>& keys) {
411 for (const std::string& key : keys) { 397 for (const std::string& key : keys) {
412 std::unique_ptr<sql::Statement> deleter(GetTableUpdateStatement( 398 std::unique_ptr<sql::Statement> deleter(GetTableUpdateStatement(
413 key_type, data_type, TableOperationType::REMOVE)); 399 key_type, data_type, TableOperationType::REMOVE));
414 deleter->BindString(0, key); 400 deleter->BindString(0, key);
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after
623 return kManifestTableName; 609 return kManifestTableName;
624 case PrefetchDataType::ORIGIN: 610 case PrefetchDataType::ORIGIN:
625 return kOriginTableName; 611 return kOriginTableName;
626 } 612 }
627 613
628 NOTREACHED(); 614 NOTREACHED();
629 return nullptr; 615 return nullptr;
630 } 616 }
631 617
632 } // namespace predictors 618 } // namespace predictors
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698