blob: a870c583c455a6be8019012132314c903e99f823 [file] [log] [blame]
// Copyright 2017 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 MEDIA_MOJO_SERVICES_MEDIA_METRICS_PROVIDER_H_
#define MEDIA_MOJO_SERVICES_MEDIA_METRICS_PROVIDER_H_
#include <stdint.h>
#include "media/base/pipeline_status.h"
#include "media/base/timestamp_constants.h"
#include "media/mojo/interfaces/media_metrics_provider.mojom.h"
#include "media/mojo/services/media_mojo_export.h"
#include "media/mojo/services/video_decode_perf_history.h"
#include "url/origin.h"
namespace media {
class VideoDecodePerfHistory;
// See mojom::MediaMetricsProvider for documentation.
class MEDIA_MOJO_EXPORT MediaMetricsProvider
: public mojom::MediaMetricsProvider {
public:
explicit MediaMetricsProvider(VideoDecodePerfHistory::SaveCallback save_cb);
~MediaMetricsProvider() override;
// Creates a MediaMetricsProvider, |perf_history| may be nullptr if perf
// history database recording is disabled.
static void Create(VideoDecodePerfHistory::SaveCallback save_cb,
mojom::MediaMetricsProviderRequest request);
private:
// mojom::MediaMetricsProvider implementation:
void Initialize(bool is_mse,
bool is_top_frame,
const url::Origin& untrusted_top_origin) override;
void OnError(PipelineStatus status) override;
void SetIsEME() override;
void SetTimeToMetadata(base::TimeDelta elapsed) override;
void SetTimeToFirstFrame(base::TimeDelta elapsed) override;
void SetTimeToPlayReady(base::TimeDelta elapsed) override;
void AcquireWatchTimeRecorder(
mojom::PlaybackPropertiesPtr properties,
mojom::WatchTimeRecorderRequest request) override;
void AcquireVideoDecodeStatsRecorder(
mojom::VideoDecodeStatsRecorderRequest request) override;
// Session unique ID which maps to a given WebMediaPlayerImpl instances. Used
// to coordinate multiply logged events with a singly logged metric.
const uint64_t player_id_;
// These values are not always sent but have known defaults.
PipelineStatus pipeline_status_ = PIPELINE_OK;
bool is_eme_ = false;
// The values below are only set if |initialized_| is true.
bool initialized_ = false;
bool is_mse_;
bool is_top_frame_;
url::Origin untrusted_top_origin_;
base::TimeDelta time_to_metadata_ = kNoTimestamp;
base::TimeDelta time_to_first_frame_ = kNoTimestamp;
base::TimeDelta time_to_play_ready_ = kNoTimestamp;
const VideoDecodePerfHistory::SaveCallback save_cb_;
DISALLOW_COPY_AND_ASSIGN(MediaMetricsProvider);
};
} // namespace media
#endif // MEDIA_MOJO_SERVICES_MEDIA_METRICS_PROVIDER_H_