blob: d4ec38a3fb16fc354c24b96bdeaecac1814ea59c [file] [log] [blame]
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_METRICS_H_
#define CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_METRICS_H_
#include "base/macros.h"
#include "content/browser/service_worker/service_worker_database.h"
#include "content/common/service_worker/service_worker_types.h"
#include "third_party/WebKit/public/platform/modules/serviceworker/WebServiceWorkerResponseError.h"
class GURL;
namespace content {
class ServiceWorkerMetrics {
public:
enum ReadResponseResult {
READ_OK,
READ_HEADERS_ERROR,
READ_DATA_ERROR,
NUM_READ_RESPONSE_RESULT_TYPES,
};
enum WriteResponseResult {
WRITE_OK,
WRITE_HEADERS_ERROR,
WRITE_DATA_ERROR,
NUM_WRITE_RESPONSE_RESULT_TYPES,
};
enum DiskCacheMigrationResult {
MIGRATION_OK,
MIGRATION_NOT_NECESSARY,
MIGRATION_ERROR_MIGRATION_FAILED,
MIGRATION_ERROR_UPDATE_DATABASE,
NUM_MIGRATION_RESULT_TYPES,
};
enum DeleteAndStartOverResult {
DELETE_OK,
DELETE_DATABASE_ERROR,
DELETE_DISK_CACHE_ERROR,
NUM_DELETE_AND_START_OVER_RESULT_TYPES,
};
enum URLRequestJobResult {
REQUEST_JOB_FALLBACK_RESPONSE,
REQUEST_JOB_FALLBACK_FOR_CORS,
REQUEST_JOB_HEADERS_ONLY_RESPONSE,
REQUEST_JOB_STREAM_RESPONSE,
REQUEST_JOB_BLOB_RESPONSE,
REQUEST_JOB_ERROR_RESPONSE_STATUS_ZERO,
REQUEST_JOB_ERROR_BAD_BLOB,
REQUEST_JOB_ERROR_NO_PROVIDER_HOST,
REQUEST_JOB_ERROR_NO_ACTIVE_VERSION,
REQUEST_JOB_ERROR_NO_REQUEST,
REQUEST_JOB_ERROR_FETCH_EVENT_DISPATCH,
REQUEST_JOB_ERROR_BLOB_READ,
REQUEST_JOB_ERROR_STREAM_ABORTED,
REQUEST_JOB_ERROR_KILLED,
REQUEST_JOB_ERROR_KILLED_WITH_BLOB,
REQUEST_JOB_ERROR_KILLED_WITH_STREAM,
REQUEST_JOB_ERROR_DESTROYED,
REQUEST_JOB_ERROR_DESTROYED_WITH_BLOB,
REQUEST_JOB_ERROR_DESTROYED_WITH_STREAM,
REQUEST_JOB_ERROR_BAD_DELEGATE,
NUM_REQUEST_JOB_RESULT_TYPES,
};
// Used for UMA. Append-only.
enum class StopStatus {
NORMAL,
DETACH_BY_REGISTRY,
TIMEOUT,
// Add new types here.
NUM_TYPES
};
enum EventType {
EVENT_TYPE_FETCH,
// Add new events to record here.
NUM_EVENT_TYPES
};
// Used for UMA. Append only.
enum class Site { OTHER, NEW_TAB_PAGE, NUM_TYPES };
// Excludes NTP scope from UMA for now as it tends to dominate the stats and
// makes the results largely skewed. Some metrics don't follow this policy
// and hence don't call this function.
static bool ShouldExcludeSiteFromHistogram(Site site);
static bool ShouldExcludeURLFromHistogram(const GURL& url);
// Used for ServiceWorkerDiskCache.
static void CountInitDiskCacheResult(bool result);
static void CountReadResponseResult(ReadResponseResult result);
static void CountWriteResponseResult(WriteResponseResult result);
// Used for ServiceWorkerDatabase.
static void CountOpenDatabaseResult(ServiceWorkerDatabase::Status status);
static void CountReadDatabaseResult(ServiceWorkerDatabase::Status status);
static void CountWriteDatabaseResult(ServiceWorkerDatabase::Status status);
static void RecordDestroyDatabaseResult(ServiceWorkerDatabase::Status status);
// Used for ServiceWorkerStorage.
static void RecordPurgeResourceResult(int net_error);
static void RecordDeleteAndStartOverResult(DeleteAndStartOverResult result);
static void RecordDiskCacheMigrationResult(DiskCacheMigrationResult result);
// Counts the number of page loads controlled by a Service Worker.
static void CountControlledPageLoad(const GURL& url);
// Records the result of trying to start a worker. |is_installed| indicates
// whether the version has been installed.
static void RecordStartWorkerStatus(ServiceWorkerStatusCode status,
bool is_installed);
// Records the time taken to successfully start a worker. |is_installed|
// indicates whether the version has been installed.
static void RecordStartWorkerTime(const base::TimeDelta& time,
bool is_installed);
// Records the result of trying to stop a worker.
static void RecordWorkerStopped(StopStatus status);
// Records the time taken to successfully stop a worker.
static void RecordStopWorkerTime(const base::TimeDelta& time);
static void RecordActivateEventStatus(ServiceWorkerStatusCode status);
static void RecordInstallEventStatus(ServiceWorkerStatusCode status);
// Records how much of dispatched events are handled while a Service
// Worker is awake (i.e. after it is woken up until it gets stopped).
static void RecordEventHandledRatio(EventType event,
size_t handled_events,
size_t fired_events);
// Records the result of dispatching a fetch event to a service worker.
static void RecordFetchEventStatus(bool is_main_resource,
ServiceWorkerStatusCode status);
// Records the amount of time spent handling a fetch event with the given
// result.
static void RecordFetchEventTime(ServiceWorkerFetchEventResult result,
const base::TimeDelta& time);
// Records result of a ServiceWorkerURLRequestJob that was forwarded to
// the service worker.
static void RecordURLRequestJobResult(bool is_main_resource,
URLRequestJobResult result);
// Records the error code provided when the renderer returns a response with
// status zero to a fetch request.
static void RecordStatusZeroResponseError(
bool is_main_resource,
blink::WebServiceWorkerResponseError error);
// Records the mode of request that was fallbacked to the network.
static void RecordFallbackedRequestMode(FetchRequestMode mode);
// Called at the beginning of each ServiceWorkerVersion::Dispatch*Event
// function. Records the time elapsed since idle (generally the time since the
// previous event ended).
static void RecordTimeBetweenEvents(const base::TimeDelta& time);
private:
DISALLOW_IMPLICIT_CONSTRUCTORS(ServiceWorkerMetrics);
};
} // namespace content
#endif // CONTENT_BROWSER_SERVICE_WORKER_SERVICE_WORKER_METRICS_H_