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

Side by Side Diff: content/browser/service_worker/service_worker_disk_cache_migrator.cc

Issue 1152543002: ServiceWorker: Migrate the script cache backend from BlockFile to Simple (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: update histograms.xml Created 5 years, 6 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 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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 "content/browser/service_worker/service_worker_disk_cache_migrator.h" 5 #include "content/browser/service_worker/service_worker_disk_cache_migrator.h"
6 6
7 #include "base/memory/ref_counted.h" 7 #include "base/memory/ref_counted.h"
8 #include "base/metrics/histogram_macros.h"
8 #include "base/strings/string_number_conversions.h" 9 #include "base/strings/string_number_conversions.h"
10 #include "base/time/time.h"
9 #include "content/common/service_worker/service_worker_types.h" 11 #include "content/common/service_worker/service_worker_types.h"
10 #include "net/base/io_buffer.h" 12 #include "net/base/io_buffer.h"
11 #include "net/base/net_errors.h" 13 #include "net/base/net_errors.h"
12 #include "net/disk_cache/disk_cache.h" 14 #include "net/disk_cache/disk_cache.h"
13 15
14 namespace content { 16 namespace content {
15 17
18 namespace {
19
20 void RecordMigrationResult(ServiceWorkerStatusCode status) {
21 UMA_HISTOGRAM_ENUMERATION("ServiceWorker.DiskCacheMigrator.MigrationResult",
22 status, SERVICE_WORKER_ERROR_MAX_VALUE);
23 }
24
25 void RecordNumberOfMigratedResources(size_t migrated_resources) {
26 UMA_HISTOGRAM_CUSTOM_COUNTS(
27 "ServiceWorker.DiskCacheMigrator.NumberOfMigratedResources",
28 migrated_resources, 1, 1000, 50);
29 }
30
31 void RecordMigrationTime(const base::TimeDelta& time) {
32 UMA_HISTOGRAM_MEDIUM_TIMES("ServiceWorker.DiskCacheMigrator.MigrationTime",
33 time);
34 }
35
36 } // namespace
37
16 // A task to move a cached resource from the src DiskCache to the dest 38 // A task to move a cached resource from the src DiskCache to the dest
17 // DiskCache. This is owned by ServiceWorkerDiskCacheMigrator. 39 // DiskCache. This is owned by ServiceWorkerDiskCacheMigrator.
18 class ServiceWorkerDiskCacheMigrator::Task { 40 class ServiceWorkerDiskCacheMigrator::Task {
19 public: 41 public:
20 Task(InflightTaskMap::KeyType task_id, 42 Task(InflightTaskMap::KeyType task_id,
21 int64 resource_id, 43 int64 resource_id,
22 disk_cache::ScopedEntryPtr entry, 44 disk_cache::ScopedEntryPtr entry,
23 ServiceWorkerDiskCache* src, 45 ServiceWorkerDiskCache* src,
24 ServiceWorkerDiskCache* dest, 46 ServiceWorkerDiskCache* dest,
25 const base::WeakPtr<ServiceWorkerDiskCacheMigrator>& owner); 47 const base::WeakPtr<ServiceWorkerDiskCacheMigrator>& owner);
(...skipping 196 matching lines...) Expand 10 before | Expand all | Expand 10 after
222 DCHECK(!src_->is_disabled()); 244 DCHECK(!src_->is_disabled());
223 DCHECK(!dest_->is_disabled()); 245 DCHECK(!dest_->is_disabled());
224 } 246 }
225 247
226 ServiceWorkerDiskCacheMigrator::~ServiceWorkerDiskCacheMigrator() { 248 ServiceWorkerDiskCacheMigrator::~ServiceWorkerDiskCacheMigrator() {
227 } 249 }
228 250
229 void ServiceWorkerDiskCacheMigrator::Start(const StatusCallback& callback) { 251 void ServiceWorkerDiskCacheMigrator::Start(const StatusCallback& callback) {
230 callback_ = callback; 252 callback_ = callback;
231 iterator_ = src_->disk_cache()->CreateIterator(); 253 iterator_ = src_->disk_cache()->CreateIterator();
254 start_time_ = base::TimeTicks::Now();
232 ContinueMigratingResources(); 255 ContinueMigratingResources();
233 } 256 }
234 257
235 void ServiceWorkerDiskCacheMigrator::ContinueMigratingResources() { 258 void ServiceWorkerDiskCacheMigrator::ContinueMigratingResources() {
236 scoped_ptr<WrappedEntry> wrapped_entry(new WrappedEntry); 259 scoped_ptr<WrappedEntry> wrapped_entry(new WrappedEntry);
237 disk_cache::Entry** entry_ptr = wrapped_entry->GetPtr(); 260 disk_cache::Entry** entry_ptr = wrapped_entry->GetPtr();
238 261
239 net::CompletionCallback callback = base::Bind( 262 net::CompletionCallback callback = base::Bind(
240 &ServiceWorkerDiskCacheMigrator::OnOpenNextEntry, 263 &ServiceWorkerDiskCacheMigrator::OnOpenNextEntry,
241 weak_factory_.GetWeakPtr(), base::Passed(wrapped_entry.Pass())); 264 weak_factory_.GetWeakPtr(), base::Passed(wrapped_entry.Pass()));
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
298 ServiceWorkerStatusCode status) { 321 ServiceWorkerStatusCode status) {
299 DCHECK(inflight_tasks_.Lookup(task_id)); 322 DCHECK(inflight_tasks_.Lookup(task_id));
300 inflight_tasks_.Remove(task_id); 323 inflight_tasks_.Remove(task_id);
301 324
302 if (status != SERVICE_WORKER_OK) { 325 if (status != SERVICE_WORKER_OK) {
303 inflight_tasks_.Clear(); 326 inflight_tasks_.Clear();
304 Complete(status); 327 Complete(status);
305 return; 328 return;
306 } 329 }
307 330
331 ++number_of_migrated_resources_;
332
308 if (pending_task_) { 333 if (pending_task_) {
309 RunPendingTask(); 334 RunPendingTask();
310 ContinueMigratingResources(); 335 ContinueMigratingResources();
311 return; 336 return;
312 } 337 }
313 338
314 if (inflight_tasks_.IsEmpty()) { 339 if (inflight_tasks_.IsEmpty()) {
315 Complete(SERVICE_WORKER_OK); 340 Complete(SERVICE_WORKER_OK);
316 return; 341 return;
317 } 342 }
318 } 343 }
319 344
320 void ServiceWorkerDiskCacheMigrator::Complete(ServiceWorkerStatusCode status) { 345 void ServiceWorkerDiskCacheMigrator::Complete(ServiceWorkerStatusCode status) {
321 DCHECK(inflight_tasks_.IsEmpty()); 346 DCHECK(inflight_tasks_.IsEmpty());
322 // TODO(nhiroki): Add UMA for the result of migration. 347 if (status == SERVICE_WORKER_OK) {
348 RecordMigrationTime(base::TimeTicks().Now() - start_time_);
349 RecordNumberOfMigratedResources(number_of_migrated_resources_);
350 }
351 RecordMigrationResult(status);
323 callback_.Run(status); 352 callback_.Run(status);
324 } 353 }
325 354
326 } // namespace content 355 } // namespace content
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698