blob: c340419a95b4d0bb96c0d071df0f68483b2d43e5 [file] [log] [blame]
// Copyright 2018 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 COMPONENTS_NTP_SNIPPETS_CONTEXTUAL_CONTEXTUAL_SUGGESTIONS_UKM_ENTRY_H_
#define COMPONENTS_NTP_SNIPPETS_CONTEXTUAL_CONTEXTUAL_SUGGESTIONS_UKM_ENTRY_H_
#include "base/gtest_prod_util.h"
#include "components/ntp_snippets/contextual/contextual_suggestions_metrics_reporter.h"
#include "services/metrics/public/cpp/ukm_source_id.h"
namespace base {
class ElapsedTimer;
}
namespace contextual_suggestions {
FORWARD_DECLARE_TEST(ContextualSuggestionsUkmEntryTest, BinaryOrderTest);
// The state of the Fetcher request.
// This value is written to the "FetchState" UKM metric.
enum class FetchState {
NOT_STARTED,
DELAYED,
REQUESTED,
ERROR_RESULT,
SERVER_BUSY,
BELOW_THRESHOLD,
EMPTY,
COMPLETED,
};
// The way that the sheet UI was triggered.
// This value is written to the "TriggerEvent" UKM metric.
enum class TriggerEvent {
NEVER_SHOWN,
REVERSE_SCROLL,
};
// Writes a single UKM entry that describes the latest state of the event stream
// monitored through |RecordEventMetrics|.
class ContextualSuggestionsUkmEntry {
public:
// Sets up recording of a UKM entry for the given |source_id|.
explicit ContextualSuggestionsUkmEntry(ukm::SourceId source_id);
~ContextualSuggestionsUkmEntry();
// Updates tracked metrics for the given |event|.
void RecordEventMetrics(ContextualSuggestionsEvent event);
// Writes the latest data tracked into a single UKM entry.
void Flush();
private:
FRIEND_TEST_ALL_PREFIXES(ContextualSuggestionsUkmEntryTest, BinaryOrderTest);
// Starts the elapsed timer if not already started.
void StartTimerIfNeeded();
// Stops the elapsed timer if not already stopped.
void StopTimerIfNeeded();
// Internal state trackers.
FetchState fetch_state_;
TriggerEvent trigger_event_;
bool closed_from_peek_;
bool was_sheet_opened_;
bool any_suggestion_taken_;
bool any_suggestion_downloaded_;
// The minimum exponential bucket of the duration in milliseconds that the
// sheet was viewed before taking action. A value of 0 means not yet
// computed.
int64_t show_duration_exponential_bucket_;
// Simple timer for how long the sheet is showing.
std::unique_ptr<base::ElapsedTimer> show_duration_timer_;
// The UKM identifier for the current URL / page in use.
ukm::SourceId source_id_;
DISALLOW_COPY_AND_ASSIGN(ContextualSuggestionsUkmEntry);
};
} // namespace contextual_suggestions
#endif // COMPONENTS_NTP_SNIPPETS_CONTEXTUAL_CONTEXTUAL_SUGGESTIONS_UKM_ENTRY_H_