| OLD | NEW |
| 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 #include "components/history/core/browser/top_sites_database.h" | 5 #include "components/history/core/browser/top_sites_database.h" |
| 6 | 6 |
| 7 #include <stddef.h> |
| 8 #include <stdint.h> |
| 9 |
| 7 #include "base/files/file_util.h" | 10 #include "base/files/file_util.h" |
| 8 #include "base/memory/ref_counted.h" | 11 #include "base/memory/ref_counted.h" |
| 9 #include "base/metrics/histogram.h" | 12 #include "base/metrics/histogram.h" |
| 10 #include "base/strings/string_split.h" | 13 #include "base/strings/string_split.h" |
| 11 #include "base/strings/string_util.h" | 14 #include "base/strings/string_util.h" |
| 12 #include "components/history/core/browser/history_types.h" | 15 #include "components/history/core/browser/history_types.h" |
| 13 #include "components/history/core/browser/top_sites.h" | 16 #include "components/history/core/browser/top_sites.h" |
| 14 #include "components/history/core/common/thumbnail_score.h" | 17 #include "components/history/core/common/thumbnail_score.h" |
| 15 #include "sql/connection.h" | 18 #include "sql/connection.h" |
| 16 #include "sql/recovery.h" | 19 #include "sql/recovery.h" |
| (...skipping 185 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 202 void RecoverDatabaseOrRaze(sql::Connection* db, const base::FilePath& db_path) { | 205 void RecoverDatabaseOrRaze(sql::Connection* db, const base::FilePath& db_path) { |
| 203 // NOTE(shess): If the version changes, review this code. | 206 // NOTE(shess): If the version changes, review this code. |
| 204 DCHECK_EQ(3, kVersionNumber); | 207 DCHECK_EQ(3, kVersionNumber); |
| 205 | 208 |
| 206 // It is almost certain that some operation against |db| will fail, prevent | 209 // It is almost certain that some operation against |db| will fail, prevent |
| 207 // reentry. | 210 // reentry. |
| 208 db->reset_error_callback(); | 211 db->reset_error_callback(); |
| 209 | 212 |
| 210 // For generating histogram stats. | 213 // For generating histogram stats. |
| 211 size_t thumbnails_recovered = 0; | 214 size_t thumbnails_recovered = 0; |
| 212 int64 original_size = 0; | 215 int64_t original_size = 0; |
| 213 base::GetFileSize(db_path, &original_size); | 216 base::GetFileSize(db_path, &original_size); |
| 214 | 217 |
| 215 scoped_ptr<sql::Recovery> recovery = sql::Recovery::Begin(db, db_path); | 218 scoped_ptr<sql::Recovery> recovery = sql::Recovery::Begin(db, db_path); |
| 216 if (!recovery) { | 219 if (!recovery) { |
| 217 RecordRecoveryEvent(RECOVERY_EVENT_FAILED_SCOPER); | 220 RecordRecoveryEvent(RECOVERY_EVENT_FAILED_SCOPER); |
| 218 return; | 221 return; |
| 219 } | 222 } |
| 220 | 223 |
| 221 // Setup the meta recovery table and fetch the version number from the corrupt | 224 // Setup the meta recovery table and fetch the version number from the corrupt |
| 222 // database. | 225 // database. |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 289 // should be done. Add histograms to Recovered() implementation to get some | 292 // should be done. Add histograms to Recovered() implementation to get some |
| 290 // insight. | 293 // insight. |
| 291 RecordRecoveryEvent(RECOVERY_EVENT_FAILED_COMMIT); | 294 RecordRecoveryEvent(RECOVERY_EVENT_FAILED_COMMIT); |
| 292 return; | 295 return; |
| 293 } | 296 } |
| 294 | 297 |
| 295 // Track the size of the recovered database relative to the size of the input | 298 // Track the size of the recovered database relative to the size of the input |
| 296 // database. The size should almost always be smaller, unless the input | 299 // database. The size should almost always be smaller, unless the input |
| 297 // database was empty to start with. If the percentage results are very low, | 300 // database was empty to start with. If the percentage results are very low, |
| 298 // something is awry. | 301 // something is awry. |
| 299 int64 final_size = 0; | 302 int64_t final_size = 0; |
| 300 if (original_size > 0 && base::GetFileSize(db_path, &final_size) && | 303 if (original_size > 0 && base::GetFileSize(db_path, &final_size) && |
| 301 final_size > 0) { | 304 final_size > 0) { |
| 302 UMA_HISTOGRAM_PERCENTAGE("History.TopSitesRecoveredPercentage", | 305 UMA_HISTOGRAM_PERCENTAGE("History.TopSitesRecoveredPercentage", |
| 303 final_size * 100 / original_size); | 306 final_size * 100 / original_size); |
| 304 } | 307 } |
| 305 | 308 |
| 306 // Using 10,000 because these cases mostly care about "none recovered" and | 309 // Using 10,000 because these cases mostly care about "none recovered" and |
| 307 // "lots recovered". More than 10,000 rows recovered probably means there's | 310 // "lots recovered". More than 10,000 rows recovered probably means there's |
| 308 // something wrong with the profile. | 311 // something wrong with the profile. |
| 309 UMA_HISTOGRAM_COUNTS_10000("History.TopSitesRecoveredRowsThumbnails", | 312 UMA_HISTOGRAM_COUNTS_10000("History.TopSitesRecoveredRowsThumbnails", |
| (...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 541 statement.BindBlob(3, thumbnail.thumbnail->front(), | 544 statement.BindBlob(3, thumbnail.thumbnail->front(), |
| 542 static_cast<int>(thumbnail.thumbnail->size())); | 545 static_cast<int>(thumbnail.thumbnail->size())); |
| 543 } | 546 } |
| 544 statement.BindString(4, GetRedirects(url)); | 547 statement.BindString(4, GetRedirects(url)); |
| 545 const ThumbnailScore& score = thumbnail.thumbnail_score; | 548 const ThumbnailScore& score = thumbnail.thumbnail_score; |
| 546 statement.BindDouble(5, score.boring_score); | 549 statement.BindDouble(5, score.boring_score); |
| 547 statement.BindBool(6, score.good_clipping); | 550 statement.BindBool(6, score.good_clipping); |
| 548 statement.BindBool(7, score.at_top); | 551 statement.BindBool(7, score.at_top); |
| 549 statement.BindInt64(8, score.time_at_snapshot.ToInternalValue()); | 552 statement.BindInt64(8, score.time_at_snapshot.ToInternalValue()); |
| 550 statement.BindBool(9, score.load_completed); | 553 statement.BindBool(9, score.load_completed); |
| 551 int64 last_forced = url.last_forced_time.ToInternalValue(); | 554 int64_t last_forced = url.last_forced_time.ToInternalValue(); |
| 552 DCHECK((last_forced == 0) == (new_rank != kRankOfForcedURL)) | 555 DCHECK((last_forced == 0) == (new_rank != kRankOfForcedURL)) |
| 553 << "Thumbnail without a forced time stamp has a forced rank, or the " | 556 << "Thumbnail without a forced time stamp has a forced rank, or the " |
| 554 << "opposite."; | 557 << "opposite."; |
| 555 statement.BindInt64(10, last_forced); | 558 statement.BindInt64(10, last_forced); |
| 556 if (!statement.Run()) | 559 if (!statement.Run()) |
| 557 return; | 560 return; |
| 558 | 561 |
| 559 // Update rank if this is not a forced thumbnail. | 562 // Update rank if this is not a forced thumbnail. |
| 560 if (new_rank != kRankOfForcedURL) | 563 if (new_rank != kRankOfForcedURL) |
| 561 UpdatePageRankNoTransaction(url, new_rank); | 564 UpdatePageRankNoTransaction(url, new_rank); |
| (...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 723 db->set_error_callback(base::Bind(&DatabaseErrorCallback, db.get(), db_name)); | 726 db->set_error_callback(base::Bind(&DatabaseErrorCallback, db.get(), db_name)); |
| 724 db->set_page_size(4096); | 727 db->set_page_size(4096); |
| 725 db->set_cache_size(32); | 728 db->set_cache_size(32); |
| 726 | 729 |
| 727 if (!db->Open(db_name)) | 730 if (!db->Open(db_name)) |
| 728 return NULL; | 731 return NULL; |
| 729 return db.release(); | 732 return db.release(); |
| 730 } | 733 } |
| 731 | 734 |
| 732 } // namespace history | 735 } // namespace history |
| OLD | NEW |