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

Unified Diff: components/safe_browsing_db/v4_store.cc

Issue 2383063003: Add UMA metrics for the time it takes to read store from disk and apply update (Closed)
Patch Set: Created 4 years, 3 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 side-by-side diff with in-line comments
Download patch
Index: components/safe_browsing_db/v4_store.cc
diff --git a/components/safe_browsing_db/v4_store.cc b/components/safe_browsing_db/v4_store.cc
index e34cb6f47e9dbf6754ea45f1a26d2f223e6148db..476c0588702ceb07dc33df31304f16925ed589e2 100644
--- a/components/safe_browsing_db/v4_store.cc
+++ b/components/safe_browsing_db/v4_store.cc
@@ -23,14 +23,8 @@ const uint32_t kFileMagic = 0x600D71FE;
const uint32_t kFileVersion = 9;
-void RecordStoreReadResult(StoreReadResult result) {
- UMA_HISTOGRAM_ENUMERATION("SafeBrowsing.V4StoreReadResult", result,
- STORE_READ_RESULT_MAX);
-}
-
-void RecordStoreWriteResult(StoreWriteResult result) {
- UMA_HISTOGRAM_ENUMERATION("SafeBrowsing.V4StoreWriteResult", result,
- STORE_WRITE_RESULT_MAX);
+void RecordAddUnlumpedHashesTime(base::TimeDelta time) {
Nathan Parker 2016/09/30 22:32:05 style nit: Personally I think it's easier to follo
vakh (use Gerrit instead) 2016/10/03 21:30:36 Done. Added the store specific histograms for Time
+ UMA_HISTOGRAM_LONG_TIMES("SafeBrowsing.V4AddUnlumpedHashesTime", time);
}
void RecordApplyUpdateResult(ApplyUpdateResult result) {
@@ -38,22 +32,54 @@ void RecordApplyUpdateResult(ApplyUpdateResult result) {
APPLY_UPDATE_RESULT_MAX);
}
+void RecordApplyUpdateResultWhenReadingFromDisk(ApplyUpdateResult result) {
+ UMA_HISTOGRAM_ENUMERATION(
+ "SafeBrowsing.V4ApplyUpdateResultWhenReadingFromDisk", result,
+ APPLY_UPDATE_RESULT_MAX);
+}
+
void RecordDecodeAdditionsResult(V4DecodeResult result) {
UMA_HISTOGRAM_ENUMERATION("SafeBrowsing.V4DecodeAdditionsResult", result,
DECODE_RESULT_MAX);
}
+void RecordDecodeAdditionsTime(base::TimeDelta time) {
+ UMA_HISTOGRAM_LONG_TIMES("SafeBrowsing.V4DecodeAdditionsTime", time);
+}
+
void RecordDecodeRemovalsResult(V4DecodeResult result) {
UMA_HISTOGRAM_ENUMERATION("SafeBrowsing.V4DecodeRemovalsResult", result,
DECODE_RESULT_MAX);
}
-// TODO(vakh): Collect and record the metrics for time taken to process updates.
+void RecordDecodeRemovalsTime(base::TimeDelta time) {
+ UMA_HISTOGRAM_LONG_TIMES("SafeBrowsing.V4DecodeRemovalsTime", time);
+}
-void RecordApplyUpdateResultWhenReadingFromDisk(ApplyUpdateResult result) {
- UMA_HISTOGRAM_ENUMERATION(
- "SafeBrowsing.V4ApplyUpdateResultWhenReadingFromDisk", result,
- APPLY_UPDATE_RESULT_MAX);
+void RecordMergeUpdateTime(base::TimeDelta time) {
+ UMA_HISTOGRAM_LONG_TIMES("SafeBrowsing.V4MergeUpdateTime", time);
+}
+
+void RecordProcessFullUpdateTime(base::TimeDelta time) {
+ UMA_HISTOGRAM_LONG_TIMES("SafeBrowsing.V4ProcessFullUpdateTime", time);
+}
+
+void RecordProcessPartialUpdateTime(base::TimeDelta time) {
+ UMA_HISTOGRAM_LONG_TIMES("SafeBrowsing.V4ProcessPartialUpdateTime", time);
+}
+
+void RecordReadFromDiskTime(base::TimeDelta time) {
+ UMA_HISTOGRAM_LONG_TIMES("SafeBrowsing.V4ReadFromDiskTime", time);
+}
+
+void RecordStoreReadResult(StoreReadResult result) {
+ UMA_HISTOGRAM_ENUMERATION("SafeBrowsing.V4StoreReadResult", result,
+ STORE_READ_RESULT_MAX);
+}
+
+void RecordStoreWriteResult(StoreWriteResult result) {
+ UMA_HISTOGRAM_ENUMERATION("SafeBrowsing.V4StoreWriteResult", result,
+ STORE_WRITE_RESULT_MAX);
}
// Returns the name of the temporary file used to buffer data for
@@ -115,8 +141,11 @@ ApplyUpdateResult V4Store::ProcessPartialUpdateAndWriteToDisk(
DCHECK(response->has_response_type());
DCHECK_EQ(ListUpdateResponse::PARTIAL_UPDATE, response->response_type());
+ base::TimeTicks before = base::TimeTicks::Now();
Nathan Parker 2016/09/30 22:32:05 I'd add a using base::TimeTicks to simplify all o
vakh (use Gerrit instead) 2016/10/03 21:30:36 Done.
ApplyUpdateResult result = ProcessUpdate(hash_prefix_map_old, response);
+ base::TimeTicks after = base::TimeTicks::Now();
if (result == APPLY_UPDATE_SUCCESS) {
+ RecordProcessPartialUpdateTime(after - before);
Nathan Parker 2016/09/30 22:32:05 nit: You can skip the |afer| and just do TimeTicks
vakh (use Gerrit instead) 2016/10/03 21:30:36 Done.
// TODO(vakh): Create a ListUpdateResponse containing RICE encoded
// hash prefixes and response_type as FULL_UPDATE, and write that to disk.
}
@@ -125,9 +154,12 @@ ApplyUpdateResult V4Store::ProcessPartialUpdateAndWriteToDisk(
ApplyUpdateResult V4Store::ProcessFullUpdateAndWriteToDisk(
std::unique_ptr<ListUpdateResponse> response) {
+ base::TimeTicks before = base::TimeTicks::Now();
ApplyUpdateResult result = ProcessFullUpdate(response);
+ base::TimeTicks after = base::TimeTicks::Now();
if (result == APPLY_UPDATE_SUCCESS) {
RecordStoreWriteResult(WriteToDisk(std::move(response)));
+ RecordProcessFullUpdateTime(after - before);
}
return result;
}
@@ -160,16 +192,19 @@ ApplyUpdateResult V4Store::ProcessUpdate(
DCHECK(removal.has_rice_indices());
const RiceDeltaEncoding& rice_indices = removal.rice_indices();
+ base::TimeTicks before = base::TimeTicks::Now();
V4DecodeResult decode_result = V4RiceDecoder::DecodeIntegers(
rice_indices.first_value(), rice_indices.rice_parameter(),
rice_indices.num_entries(), rice_indices.encoded_data(),
&rice_removals);
+ base::TimeTicks after = base::TimeTicks::Now();
+
RecordDecodeRemovalsResult(decode_result);
if (decode_result != DECODE_SUCCESS) {
return RICE_DECODING_FAILURE;
- } else {
- raw_removals = &rice_removals;
}
+ RecordDecodeRemovalsTime(after - before);
+ raw_removals = &rice_removals;
} else {
NOTREACHED() << "Unexpected compression_type type: " << compression_type;
return UNEXPECTED_COMPRESSION_TYPE_REMOVALS_FAILURE;
@@ -188,11 +223,14 @@ ApplyUpdateResult V4Store::ProcessUpdate(
expected_checksum = response->checksum().sha256();
}
+ base::TimeTicks before = base::TimeTicks::Now();
apply_update_result = MergeUpdate(hash_prefix_map_old, hash_prefix_map,
raw_removals, expected_checksum);
+ base::TimeTicks after = base::TimeTicks::Now();
if (apply_update_result != APPLY_UPDATE_SUCCESS) {
return apply_update_result;
}
+ RecordMergeUpdateTime(after - before);
state_ = response->new_client_state();
return APPLY_UPDATE_SUCCESS;
@@ -250,13 +288,16 @@ ApplyUpdateResult V4Store::UpdateHashPrefixMapFromAdditions(
const RiceDeltaEncoding& rice_hashes = addition.rice_hashes();
std::vector<uint32_t> raw_hashes;
+ base::TimeTicks before = base::TimeTicks::Now();
V4DecodeResult decode_result = V4RiceDecoder::DecodePrefixes(
rice_hashes.first_value(), rice_hashes.rice_parameter(),
rice_hashes.num_entries(), rice_hashes.encoded_data(), &raw_hashes);
+ base::TimeTicks after = base::TimeTicks::Now();
RecordDecodeAdditionsResult(decode_result);
if (decode_result != DECODE_SUCCESS) {
return RICE_DECODING_FAILURE;
} else {
+ RecordDecodeAdditionsTime(after - before);
char* raw_hashes_start = reinterpret_cast<char*>(raw_hashes.data());
size_t raw_hashes_size = sizeof(uint32_t) * raw_hashes.size();
@@ -307,9 +348,12 @@ ApplyUpdateResult V4Store::AddUnlumpedHashes(PrefixSize prefix_size,
return ADDITIONS_SIZE_UNEXPECTED_FAILURE;
}
+ base::TimeTicks before = base::TimeTicks::Now();
Nathan Parker 2016/09/30 22:32:05 What is this recording? The copying of the string
vakh (use Gerrit instead) 2016/10/03 21:30:36 My goal is to remove the TODO. If UMA shows that t
// TODO(vakh): Figure out a way to avoid the following copy operation.
(*additions_map)[prefix_size] =
std::string(raw_hashes_begin, raw_hashes_begin + raw_hashes_length);
+ base::TimeTicks after = base::TimeTicks::Now();
+ RecordAddUnlumpedHashesTime(after - before);
return APPLY_UPDATE_SUCCESS;
}
@@ -487,6 +531,7 @@ ApplyUpdateResult V4Store::MergeUpdate(const HashPrefixMap& old_prefixes_map,
StoreReadResult V4Store::ReadFromDisk() {
DCHECK(task_runner_->RunsTasksOnCurrentThread());
+ base::TimeTicks before = base::TimeTicks::Now();
std::string contents;
bool read_success = base::ReadFileToString(store_path_, &contents);
if (!read_success) {
@@ -519,11 +564,13 @@ StoreReadResult V4Store::ReadFromDisk() {
std::unique_ptr<ListUpdateResponse> response(new ListUpdateResponse);
response->Swap(file_format.mutable_list_update_response());
ApplyUpdateResult apply_update_result = ProcessFullUpdate(response);
+ base::TimeTicks after = base::TimeTicks::Now();
RecordApplyUpdateResultWhenReadingFromDisk(apply_update_result);
if (apply_update_result != APPLY_UPDATE_SUCCESS) {
hash_prefix_map_.clear();
return HASH_PREFIX_MAP_GENERATION_FAILURE;
}
+ RecordReadFromDiskTime(after - before);
return READ_SUCCESS;
}

Powered by Google App Engine
This is Rietveld 408576698