blob: edbb65ae3320f10b3cae9a1a673ec0af84cd86c2 [file] [log] [blame]
// Copyright 2020 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 SERVICES_NETWORK_TRUST_TOKENS_TRUST_TOKEN_OPERATION_METRICS_RECORDER_H_
#define SERVICES_NETWORK_TRUST_TOKENS_TRUST_TOKEN_OPERATION_METRICS_RECORDER_H_
#include "base/time/time.h"
#include "services/network/public/mojom/trust_tokens.mojom.h"
#include "services/network/trust_tokens/trust_token_request_issuance_helper.h"
namespace network {
namespace internal {
// The following templates, which allow constructing names for the various Trust
// Tokens timing histograms, are exposed for testing.
extern const char kTrustTokenServerTimeHistogramNameBase[];
extern const char kTrustTokenTotalTimeHistogramNameBase[];
extern const char kTrustTokenFinalizeTimeHistogramNameBase[];
extern const char kTrustTokenBeginTimeHistogramNameBase[];
} // namespace internal
// A TrustTokenOperationMetricsRecorder records timing and success metrics for a
// single Trust Tokens operation. To use, call BeginBegin at the time the Begin
// (outbound) part of the operation starts and FinishBegin at the time the Begin
// part finishes; if the Begin part was successful, call BeginFinalize and
// FinishFinalize analogously during the Finalize (inbound) part of the
// operation.
class TrustTokenOperationMetricsRecorder final
: public TrustTokenRequestIssuanceHelper::MetricsDelegate {
public:
explicit TrustTokenOperationMetricsRecorder(
mojom::TrustTokenOperationType type);
~TrustTokenOperationMetricsRecorder() override;
TrustTokenOperationMetricsRecorder(
const TrustTokenOperationMetricsRecorder&) = delete;
TrustTokenOperationMetricsRecorder& operator=(
const TrustTokenOperationMetricsRecorder&) = delete;
void BeginBegin();
void FinishBegin(mojom::TrustTokenOperationStatus status);
void BeginFinalize();
void FinishFinalize(mojom::TrustTokenOperationStatus status);
// TrustTokenRequestIssuanceHelper::MetricsDelegate:
void WillExecutePlatformProvidedOperation() override;
private:
mojom::TrustTokenOperationType type_;
// Start and end times for the Begin part of the operation:
base::TimeTicks begin_start_;
base::TimeTicks begin_end_;
// Start time for the Finalize part of the operation:
base::TimeTicks finalize_start_;
// If true, inserts a histogram suffix indicating that the Trust Tokens
// operation being measured is "platform-provided": executed against a
// device-local provider, rather than against an issuer's server.
bool operation_is_platform_provided_ = false;
};
// HistogramTrustTokenOperationNetError logs a //net error code corresponding to
// a Trust Tokens operation. This is a temporary measure for helping understand
// why "Failed to fetch" errors occur quite often in live testing: see
// https://crbug.com/1128174.
void HistogramTrustTokenOperationNetError(
network::mojom::TrustTokenOperationType type,
network::mojom::TrustTokenOperationStatus status,
int net_error);
} // namespace network
#endif // SERVICES_NETWORK_TRUST_TOKENS_TRUST_TOKEN_OPERATION_METRICS_RECORDER_H_