summaryrefslogtreecommitdiff
path: root/chromium/media/fuchsia
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/media/fuchsia')
-rw-r--r--chromium/media/fuchsia/audio/fuchsia_audio_renderer.cc18
-rw-r--r--chromium/media/fuchsia/audio/fuchsia_audio_renderer.h3
-rw-r--r--chromium/media/fuchsia/camera/fake_fuchsia_camera.cc4
-rw-r--r--chromium/media/fuchsia/cdm/fuchsia_cdm_factory.cc6
-rw-r--r--chromium/media/fuchsia/cdm/fuchsia_cdm_factory.h1
-rw-r--r--chromium/media/fuchsia/common/sysmem_buffer_pool.cc4
-rw-r--r--chromium/media/fuchsia/common/sysmem_buffer_writer.cc38
-rw-r--r--chromium/media/fuchsia/common/sysmem_buffer_writer.h22
-rw-r--r--chromium/media/fuchsia/metrics/BUILD.gn28
-rw-r--r--chromium/media/fuchsia/metrics/DEPS3
-rw-r--r--chromium/media/fuchsia/metrics/fuchsia_playback_events_recorder.cc139
-rw-r--r--chromium/media/fuchsia/metrics/fuchsia_playback_events_recorder.h70
-rw-r--r--chromium/media/fuchsia/metrics/fuchsia_playback_events_recorder_test.cc202
13 files changed, 69 insertions, 469 deletions
diff --git a/chromium/media/fuchsia/audio/fuchsia_audio_renderer.cc b/chromium/media/fuchsia/audio/fuchsia_audio_renderer.cc
index b4f6476516c..0b1c04bca4c 100644
--- a/chromium/media/fuchsia/audio/fuchsia_audio_renderer.cc
+++ b/chromium/media/fuchsia/audio/fuchsia_audio_renderer.cc
@@ -7,7 +7,6 @@
#include <lib/sys/cpp/component_context.h>
#include "base/bind.h"
-#include "base/fuchsia/default_context.h"
#include "base/fuchsia/fuchsia_logging.h"
#include "base/logging.h"
#include "base/sequenced_task_runner.h"
@@ -235,6 +234,8 @@ void FuchsiaAudioRenderer::SetLatencyHint(
// shape and usefulness outside of fuchsia.
}
+void FuchsiaAudioRenderer::SetPreservesPitch(bool preserves_pitch) {}
+
void FuchsiaAudioRenderer::StartTicking() {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
@@ -290,8 +291,10 @@ void FuchsiaAudioRenderer::SetMediaTime(base::TimeDelta time) {
base::TimeDelta FuchsiaAudioRenderer::CurrentMediaTime() {
base::AutoLock lock(timeline_lock_);
- if (state_ != PlaybackState::kPlaying)
+ if (state_ != PlaybackState::kPlaying &&
+ state_ != PlaybackState::kEndOfStream) {
return media_pos_;
+ }
return CurrentMediaTimeLocked();
}
@@ -304,7 +307,8 @@ bool FuchsiaAudioRenderer::GetWallClockTimes(
base::AutoLock lock(timeline_lock_);
- const bool is_time_moving = state_ == PlaybackState::kPlaying;
+ const bool is_time_moving = state_ == PlaybackState::kPlaying ||
+ state_ == PlaybackState::kEndOfStream;
if (media_timestamps.empty()) {
wall_clock_times->push_back(is_time_moving ? now : base::TimeTicks());
@@ -428,8 +432,7 @@ void FuchsiaAudioRenderer::OnAudioConsumerStatusChanged(
void FuchsiaAudioRenderer::ScheduleReadDemuxerStream() {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
- if (!demuxer_stream_ || read_timer_.IsRunning() ||
- demuxer_stream_->IsReadPending() ||
+ if (!demuxer_stream_ || read_timer_.IsRunning() || is_demuxer_read_pending_ ||
GetPlaybackState() == PlaybackState::kEndOfStream ||
num_pending_packets_ >= stream_sink_buffers_.size()) {
return;
@@ -456,7 +459,9 @@ void FuchsiaAudioRenderer::ScheduleReadDemuxerStream() {
void FuchsiaAudioRenderer::ReadDemuxerStream() {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
DCHECK(demuxer_stream_);
+ DCHECK(!is_demuxer_read_pending_);
+ is_demuxer_read_pending_ = true;
demuxer_stream_->Read(
base::BindOnce(&FuchsiaAudioRenderer::OnDemuxerStreamReadDone,
weak_factory_.GetWeakPtr()));
@@ -466,6 +471,9 @@ void FuchsiaAudioRenderer::OnDemuxerStreamReadDone(
DemuxerStream::Status read_status,
scoped_refptr<DecoderBuffer> buffer) {
DCHECK_CALLED_ON_VALID_THREAD(thread_checker_);
+ DCHECK(is_demuxer_read_pending_);
+
+ is_demuxer_read_pending_ = false;
if (read_status != DemuxerStream::kOk) {
if (read_status == DemuxerStream::kError) {
diff --git a/chromium/media/fuchsia/audio/fuchsia_audio_renderer.h b/chromium/media/fuchsia/audio/fuchsia_audio_renderer.h
index b22ff67d179..fec88cb1a2f 100644
--- a/chromium/media/fuchsia/audio/fuchsia_audio_renderer.h
+++ b/chromium/media/fuchsia/audio/fuchsia_audio_renderer.h
@@ -43,6 +43,7 @@ class FuchsiaAudioRenderer : public AudioRenderer, public TimeSource {
void StartPlaying() final;
void SetVolume(float volume) final;
void SetLatencyHint(base::Optional<base::TimeDelta> latency_hint) final;
+ void SetPreservesPitch(bool preserves_pitch) final;
// TimeSource implementation.
void StartTicking() final;
@@ -132,6 +133,8 @@ class FuchsiaAudioRenderer : public AudioRenderer, public TimeSource {
fuchsia::media::audio::VolumeControlPtr volume_control_;
DemuxerStream* demuxer_stream_ = nullptr;
+ bool is_demuxer_read_pending_ = false;
+
RendererClient* client_ = nullptr;
// Initialize() completion callback.
diff --git a/chromium/media/fuchsia/camera/fake_fuchsia_camera.cc b/chromium/media/fuchsia/camera/fake_fuchsia_camera.cc
index 921a1b6cfb1..cae3ecab9f6 100644
--- a/chromium/media/fuchsia/camera/fake_fuchsia_camera.cc
+++ b/chromium/media/fuchsia/camera/fake_fuchsia_camera.cc
@@ -7,7 +7,7 @@
#include <fuchsia/sysmem/cpp/fidl.h>
#include <lib/sys/cpp/component_context.h>
-#include "base/fuchsia/default_context.h"
+#include "base/fuchsia/process_context.h"
#include "base/memory/platform_shared_memory_region.h"
#include "base/memory/writable_shared_memory_region.h"
#include "base/message_loop/message_loop_current.h"
@@ -290,7 +290,7 @@ void FakeCameraStream::SetBufferCollection(
SendBufferCollection();
// Initialize the new collection using |local_token|.
- auto allocator = base::fuchsia::ComponentContextForCurrentProcess()
+ auto allocator = base::ComponentContextForProcess()
->svc()
->Connect<fuchsia::sysmem::Allocator>();
diff --git a/chromium/media/fuchsia/cdm/fuchsia_cdm_factory.cc b/chromium/media/fuchsia/cdm/fuchsia_cdm_factory.cc
index a95c5e3e597..0f2e5828ffb 100644
--- a/chromium/media/fuchsia/cdm/fuchsia_cdm_factory.cc
+++ b/chromium/media/fuchsia/cdm/fuchsia_cdm_factory.cc
@@ -25,7 +25,6 @@ FuchsiaCdmFactory::~FuchsiaCdmFactory() = default;
void FuchsiaCdmFactory::Create(
const std::string& key_system,
- const url::Origin& security_origin,
const CdmConfig& cdm_config,
const SessionMessageCB& session_message_cb,
const SessionClosedCB& session_closed_cb,
@@ -35,11 +34,6 @@ void FuchsiaCdmFactory::Create(
CdmCreatedCB bound_cdm_created_cb =
BindToCurrentLoop(std::move(cdm_created_cb));
- if (security_origin.opaque()) {
- std::move(bound_cdm_created_cb).Run(nullptr, "Invalid origin.");
- return;
- }
-
if (CanUseAesDecryptor(key_system)) {
auto cdm = base::MakeRefCounted<AesDecryptor>(
session_message_cb, session_closed_cb, session_keys_change_cb,
diff --git a/chromium/media/fuchsia/cdm/fuchsia_cdm_factory.h b/chromium/media/fuchsia/cdm/fuchsia_cdm_factory.h
index ad8cd9248e9..76f4c05d6da 100644
--- a/chromium/media/fuchsia/cdm/fuchsia_cdm_factory.h
+++ b/chromium/media/fuchsia/cdm/fuchsia_cdm_factory.h
@@ -22,7 +22,6 @@ class MEDIA_EXPORT FuchsiaCdmFactory : public CdmFactory {
// CdmFactory implementation.
void Create(const std::string& key_system,
- const url::Origin& security_origin,
const CdmConfig& cdm_config,
const SessionMessageCB& session_message_cb,
const SessionClosedCB& session_closed_cb,
diff --git a/chromium/media/fuchsia/common/sysmem_buffer_pool.cc b/chromium/media/fuchsia/common/sysmem_buffer_pool.cc
index 94c1a1f43d9..2b4b0b5487a 100644
--- a/chromium/media/fuchsia/common/sysmem_buffer_pool.cc
+++ b/chromium/media/fuchsia/common/sysmem_buffer_pool.cc
@@ -8,8 +8,8 @@
#include <algorithm>
#include "base/bind.h"
-#include "base/fuchsia/default_context.h"
#include "base/fuchsia/fuchsia_logging.h"
+#include "base/fuchsia/process_context.h"
#include "media/fuchsia/common/sysmem_buffer_reader.h"
#include "media/fuchsia/common/sysmem_buffer_writer.h"
@@ -126,7 +126,7 @@ void SysmemBufferPool::OnError() {
}
BufferAllocator::BufferAllocator() {
- allocator_ = base::fuchsia::ComponentContextForCurrentProcess()
+ allocator_ = base::ComponentContextForProcess()
->svc()
->Connect<fuchsia::sysmem::Allocator>();
diff --git a/chromium/media/fuchsia/common/sysmem_buffer_writer.cc b/chromium/media/fuchsia/common/sysmem_buffer_writer.cc
index addfafb6e94..0942b9f5337 100644
--- a/chromium/media/fuchsia/common/sysmem_buffer_writer.cc
+++ b/chromium/media/fuchsia/common/sysmem_buffer_writer.cc
@@ -70,16 +70,30 @@ class SysmemBufferWriter::Buffer {
size_t bytes_to_fill = std::min(size_, data.size());
memcpy(base_address_ + offset_, data.data(), bytes_to_fill);
- // Flush CPU cache if StreamProcessor reads from RAM.
- if (coherency_domain_ == fuchsia::sysmem::CoherencyDomain::RAM) {
- zx_status_t status = zx_cache_flush(base_address_ + offset_,
- bytes_to_fill, ZX_CACHE_FLUSH_DATA);
- ZX_DCHECK(status == ZX_OK, status) << "zx_cache_flush";
- }
+ FlushBuffer(0, bytes_to_fill);
return bytes_to_fill;
}
+ base::span<uint8_t> ReserveAndMapBuffer() {
+ DCHECK(!is_used_);
+ is_used_ = true;
+ return base::make_span(base_address_ + offset_, size_);
+ }
+
+ void FlushBuffer(size_t flush_offset, size_t flush_size) {
+ DCHECK(is_used_);
+ DCHECK_LE(flush_size, size_ - flush_offset);
+
+ if (coherency_domain_ != fuchsia::sysmem::CoherencyDomain::RAM)
+ return;
+
+ uint8_t* address = base_address_ + offset_ + flush_offset;
+ zx_status_t status =
+ zx_cache_flush(address, flush_size, ZX_CACHE_FLUSH_DATA);
+ ZX_DCHECK(status == ZX_OK, status) << "zx_cache_flush";
+ }
+
void Release() { is_used_ = false; }
private:
@@ -187,4 +201,16 @@ SysmemBufferWriter::GetRecommendedConstraints(
return buffer_constraints;
}
+base::span<uint8_t> SysmemBufferWriter::ReserveAndMapBuffer(size_t index) {
+ DCHECK_LT(index, buffers_.size());
+ return buffers_[index].ReserveAndMapBuffer();
+}
+
+void SysmemBufferWriter::FlushBuffer(size_t index,
+ size_t flush_offset,
+ size_t flush_size) {
+ DCHECK_LT(index, buffers_.size());
+ return buffers_[index].FlushBuffer(flush_offset, flush_size);
+}
+
} // namespace media
diff --git a/chromium/media/fuchsia/common/sysmem_buffer_writer.h b/chromium/media/fuchsia/common/sysmem_buffer_writer.h
index 9aed936f2b2..aaee25c1449 100644
--- a/chromium/media/fuchsia/common/sysmem_buffer_writer.h
+++ b/chromium/media/fuchsia/common/sysmem_buffer_writer.h
@@ -11,6 +11,7 @@
#include <memory>
#include "base/containers/span.h"
+#include "base/memory/shared_memory_mapping.h"
#include "base/optional.h"
namespace media {
@@ -30,11 +31,24 @@ class SysmemBufferWriter {
explicit SysmemBufferWriter(std::vector<Buffer> buffers);
~SysmemBufferWriter();
- // Write the content of |data| into buffer at |index|. Return num of bytes
- // written into the buffer. Write a used buffer will fail. It will mark the
- // buffer as "used".
+ SysmemBufferWriter(const SysmemBufferWriter&) = delete;
+ SysmemBufferWriter& operator=(const SysmemBufferWriter&) = delete;
+
+ // Write the content of |data| into the buffer at |index|. Return num of bytes
+ // written into the buffer. Can be called only for an unused buffer. Marks
+ // the buffer as used.
size_t Write(size_t index, base::span<const uint8_t> data);
+ // Returns a span for the memory-mapping of the buffer with the specified
+ // |index|. Can be called only for an unused buffer. Marks the buffer as used.
+ // Callers must call FlushCache() after they are finished updating the buffer.
+ base::span<uint8_t> ReserveAndMapBuffer(size_t index);
+
+ // Flushes CPU cache for specified range in the buffer with the specified
+ // |index| in case the buffer collection uses RAM coherency. No-op for
+ // collections with RAM coherency.
+ void FlushBuffer(size_t index, size_t flush_offset, size_t flush_size);
+
// Acquire unused buffer for write. If |min_size| is provided, the returned
// buffer will have available size larger than |min_size|. This will NOT
// mark the buffer as "used".
@@ -50,8 +64,6 @@ class SysmemBufferWriter {
private:
std::vector<Buffer> buffers_;
-
- DISALLOW_COPY_AND_ASSIGN(SysmemBufferWriter);
};
} // namespace media
diff --git a/chromium/media/fuchsia/metrics/BUILD.gn b/chromium/media/fuchsia/metrics/BUILD.gn
deleted file mode 100644
index ee6952ba233..00000000000
--- a/chromium/media/fuchsia/metrics/BUILD.gn
+++ /dev/null
@@ -1,28 +0,0 @@
-# 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.
-
-source_set("metrics") {
- sources = [
- "fuchsia_playback_events_recorder.cc",
- "fuchsia_playback_events_recorder.h",
- ]
- deps = [
- "//media/mojo/mojom",
- "//mojo/public/cpp/bindings",
- ]
-}
-
-source_set("unittests") {
- testonly = true
-
- deps = [
- ":metrics",
- "//base",
- "//base/test:test_support",
- "//media",
- "//testing/gtest",
- ]
-
- sources = [ "fuchsia_playback_events_recorder_test.cc" ]
-}
diff --git a/chromium/media/fuchsia/metrics/DEPS b/chromium/media/fuchsia/metrics/DEPS
deleted file mode 100644
index ef8ad28d9d4..00000000000
--- a/chromium/media/fuchsia/metrics/DEPS
+++ /dev/null
@@ -1,3 +0,0 @@
-include_rules = [
- "+mojo/public",
-]
diff --git a/chromium/media/fuchsia/metrics/fuchsia_playback_events_recorder.cc b/chromium/media/fuchsia/metrics/fuchsia_playback_events_recorder.cc
deleted file mode 100644
index d883b08b38a..00000000000
--- a/chromium/media/fuchsia/metrics/fuchsia_playback_events_recorder.cc
+++ /dev/null
@@ -1,139 +0,0 @@
-// 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.
-
-#include "media/fuchsia/metrics/fuchsia_playback_events_recorder.h"
-
-#include "base/metrics/user_metrics.h"
-#include "base/strings/stringprintf.h"
-#include "mojo/public/cpp/bindings/self_owned_receiver.h"
-
-namespace media {
-
-namespace {
-
-void RecordEventWithValueAt(const char* name,
- int64_t value,
- base::TimeTicks time) {
- base::RecordComputedActionAt(
- base::StringPrintf("WebEngine.Media.%s:%ld", name, value), time);
-}
-
-void RecordEventWithValue(const char* name, int64_t value) {
- RecordEventWithValueAt(name, value, base::TimeTicks::Now());
-}
-
-constexpr base::TimeDelta kBitrateReportPeriod =
- base::TimeDelta::FromSeconds(5);
-
-} // namespace
-
-FuchsiaPlaybackEventsRecorder::BitrateEstimator::BitrateEstimator() {}
-FuchsiaPlaybackEventsRecorder::BitrateEstimator::~BitrateEstimator() {}
-
-void FuchsiaPlaybackEventsRecorder::BitrateEstimator::Update(
- const PipelineStatistics& stats) {
- base::TimeTicks now = base::TimeTicks::Now();
-
- // The code below trusts that |stats| are valid even though they came from an
- // untrusted process. That's accepable because the stats are used only to
- // record metrics.
- if (last_stats_) {
- time_elapsed_ += now - last_stats_time_;
- audio_bytes_ +=
- stats.audio_bytes_decoded - last_stats_->audio_bytes_decoded;
- video_bytes_ +=
- stats.video_bytes_decoded - last_stats_->video_bytes_decoded;
- if (time_elapsed_ >= kBitrateReportPeriod) {
- size_t audio_bitrate_kbps =
- 8 * audio_bytes_ / time_elapsed_.InMilliseconds();
- RecordEventWithValueAt("AudioBitrate", audio_bitrate_kbps, now);
-
- size_t video_bitrate_kbps =
- 8 * video_bytes_ / time_elapsed_.InMilliseconds();
- RecordEventWithValueAt("VideoBitrate", video_bitrate_kbps, now);
-
- time_elapsed_ = base::TimeDelta();
- audio_bytes_ = 0;
- video_bytes_ = 0;
- }
- }
-
- last_stats_ = stats;
- last_stats_time_ = now;
-}
-
-void FuchsiaPlaybackEventsRecorder::BitrateEstimator::OnPause() {
- last_stats_ = {};
-}
-
-// static
-void FuchsiaPlaybackEventsRecorder::Create(
- mojo::PendingReceiver<mojom::PlaybackEventsRecorder> receiver) {
- mojo::MakeSelfOwnedReceiver(std::make_unique<FuchsiaPlaybackEventsRecorder>(),
- std::move(receiver));
-}
-
-FuchsiaPlaybackEventsRecorder::FuchsiaPlaybackEventsRecorder() = default;
-FuchsiaPlaybackEventsRecorder::~FuchsiaPlaybackEventsRecorder() = default;
-
-void FuchsiaPlaybackEventsRecorder::OnPlaying() {
- base::RecordComputedAction("WebEngine.Media.Playing");
-}
-
-void FuchsiaPlaybackEventsRecorder::OnPaused() {
- base::RecordComputedAction("WebEngine.Media.Pause");
- bitrate_estimator_.OnPause();
-}
-
-void FuchsiaPlaybackEventsRecorder::OnSeeking() {
- buffering_state_ = BufferingState::kInitialBuffering;
-}
-
-void FuchsiaPlaybackEventsRecorder::OnEnded() {
- base::RecordComputedAction("WebEngine.Media.Ended");
-}
-
-void FuchsiaPlaybackEventsRecorder::OnBuffering() {
- DCHECK(buffering_state_ == BufferingState::kBuffered);
-
- buffering_start_time_ = base::TimeTicks::Now();
- buffering_state_ = BufferingState::kBuffering;
-
- bitrate_estimator_.OnPause();
-}
-
-void FuchsiaPlaybackEventsRecorder::OnBufferingComplete() {
- auto now = base::TimeTicks::Now();
-
- if (buffering_state_ == BufferingState::kBuffering) {
- base::TimeDelta time_between_buffering =
- buffering_start_time_ - last_buffering_end_time_;
- RecordEventWithValueAt("PlayTimeBeforeAutoPause",
- time_between_buffering.InMilliseconds(), now);
-
- base::TimeDelta buffering_user_time = now - buffering_start_time_;
- RecordEventWithValueAt("AutoPauseTime",
- buffering_user_time.InMilliseconds(), now);
- }
-
- buffering_state_ = BufferingState::kBuffered;
- last_buffering_end_time_ = now;
-}
-
-void FuchsiaPlaybackEventsRecorder::OnError(PipelineStatus status) {
- RecordEventWithValue("Error", status);
-}
-
-void FuchsiaPlaybackEventsRecorder::OnNaturalSizeChanged(
- const gfx::Size& size) {
- base::RecordComputedAction(base::StringPrintf(
- "WebEngine.Media.VideoResolution:%dx%d", size.width(), size.height()));
-}
-
-void FuchsiaPlaybackEventsRecorder::OnPipelineStatistics(
- const PipelineStatistics& stats) {
- bitrate_estimator_.Update(stats);
-}
-
-} // namespace media
diff --git a/chromium/media/fuchsia/metrics/fuchsia_playback_events_recorder.h b/chromium/media/fuchsia/metrics/fuchsia_playback_events_recorder.h
deleted file mode 100644
index 2686bafec9e..00000000000
--- a/chromium/media/fuchsia/metrics/fuchsia_playback_events_recorder.h
+++ /dev/null
@@ -1,70 +0,0 @@
-// 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 MEDIA_FUCHSIA_METRICS_FUCHSIA_PLAYBACK_EVENTS_RECORDER_H_
-#define MEDIA_FUCHSIA_METRICS_FUCHSIA_PLAYBACK_EVENTS_RECORDER_H_
-
-#include "media/mojo/mojom/playback_events_recorder.mojom.h"
-#include "mojo/public/cpp/bindings/pending_remote.h"
-#include "mojo/public/cpp/bindings/remote.h"
-
-namespace media {
-
-class FuchsiaPlaybackEventsRecorder : public mojom::PlaybackEventsRecorder {
- public:
- static void Create(
- mojo::PendingReceiver<mojom::PlaybackEventsRecorder> receiver);
-
- FuchsiaPlaybackEventsRecorder();
- ~FuchsiaPlaybackEventsRecorder() final;
-
- FuchsiaPlaybackEventsRecorder(const FuchsiaPlaybackEventsRecorder&) = delete;
- FuchsiaPlaybackEventsRecorder& operator=(
- const FuchsiaPlaybackEventsRecorder&) = delete;
-
- // mojom::PlaybackEventsRecorder implementation.
- void OnPlaying() final;
- void OnPaused() final;
- void OnSeeking() final;
- void OnEnded() final;
- void OnBuffering() final;
- void OnBufferingComplete() final;
- void OnError(PipelineStatus status) final;
- void OnNaturalSizeChanged(const gfx::Size& size) final;
- void OnPipelineStatistics(const PipelineStatistics& stats) final;
-
- private:
- class BitrateEstimator {
- public:
- BitrateEstimator();
- ~BitrateEstimator();
-
- void Update(const PipelineStatistics& stats);
- void OnPause();
-
- private:
- base::TimeDelta time_elapsed_;
- size_t audio_bytes_ = 0;
- size_t video_bytes_ = 0;
-
- base::Optional<PipelineStatistics> last_stats_;
- base::TimeTicks last_stats_time_;
- };
-
- enum class BufferingState {
- kInitialBuffering,
- kBuffering,
- kBuffered,
- };
-
- BufferingState buffering_state_ = BufferingState::kInitialBuffering;
- base::TimeTicks buffering_start_time_;
- base::TimeTicks last_buffering_end_time_;
-
- BitrateEstimator bitrate_estimator_;
-};
-
-} // namespace media
-
-#endif // MEDIA_FUCHSIA_METRICS_FUCHSIA_PLAYBACK_EVENTS_RECORDER_H_ \ No newline at end of file
diff --git a/chromium/media/fuchsia/metrics/fuchsia_playback_events_recorder_test.cc b/chromium/media/fuchsia/metrics/fuchsia_playback_events_recorder_test.cc
deleted file mode 100644
index a18704575a2..00000000000
--- a/chromium/media/fuchsia/metrics/fuchsia_playback_events_recorder_test.cc
+++ /dev/null
@@ -1,202 +0,0 @@
-// 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.
-
-#include "media/fuchsia/metrics/fuchsia_playback_events_recorder.h"
-
-#include "base/metrics/user_metrics.h"
-#include "base/test/simple_test_tick_clock.h"
-#include "base/test/task_environment.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace media {
-
-constexpr base::TimeDelta kSecond = base::TimeDelta::FromSeconds(1);
-
-class FuchsiaPlaybackEventsRecorderTest : public testing::Test {
- public:
- FuchsiaPlaybackEventsRecorderTest()
- : task_environment_(base::test::TaskEnvironment::MainThreadType::IO,
- base::test::TaskEnvironment::TimeSource::MOCK_TIME) {
- time_base_ = base::TimeTicks::Now();
-
- base::SetRecordActionTaskRunner(
- task_environment_.GetMainThreadTaskRunner());
- action_callback_ = base::BindRepeating(
- &FuchsiaPlaybackEventsRecorderTest::OnAction, base::Unretained(this));
- base::AddActionCallback(action_callback_);
- }
-
- ~FuchsiaPlaybackEventsRecorderTest() override {
- base::RemoveActionCallback(action_callback_);
- }
-
- protected:
- struct Event {
- base::TimeTicks time;
- std::string name;
-
- bool operator==(const Event& other) const {
- return time == other.time && name == other.name;
- }
- };
-
- void OnAction(const std::string& name, base::TimeTicks time) {
- recorded_events_.push_back({time, name});
- }
-
- void ExpectEvents(const std::vector<Event>& expected) {
- EXPECT_EQ(recorded_events_.size(), expected.size());
- size_t end = std::min(recorded_events_.size(), expected.size());
- for (size_t i = 0; i < end; ++i) {
- SCOPED_TRACE(i);
- EXPECT_EQ(recorded_events_[i].time, expected[i].time);
- EXPECT_EQ(recorded_events_[i].name, expected[i].name);
- }
- }
-
- base::test::TaskEnvironment task_environment_;
-
- base::SimpleTestTickClock test_clock_;
- base::TimeTicks time_base_;
-
- base::ActionCallback action_callback_;
- FuchsiaPlaybackEventsRecorder recorder_;
- std::vector<Event> recorded_events_;
-};
-
-TEST_F(FuchsiaPlaybackEventsRecorderTest, PlayPause) {
- recorder_.OnNaturalSizeChanged(gfx::Size(640, 480));
- recorder_.OnPlaying();
- task_environment_.AdvanceClock(2 * kSecond);
- recorder_.OnPaused();
-
- ExpectEvents({
- {time_base_, "WebEngine.Media.VideoResolution:640x480"},
- {time_base_, "WebEngine.Media.Playing"},
- {time_base_ + 2 * kSecond, "WebEngine.Media.Pause"},
- });
-}
-
-TEST_F(FuchsiaPlaybackEventsRecorderTest, Error) {
- recorder_.OnPlaying();
- task_environment_.AdvanceClock(2 * kSecond);
- recorder_.OnError(PIPELINE_ERROR_DECODE);
-
- ExpectEvents({
- {time_base_, "WebEngine.Media.Playing"},
- {time_base_ + 2 * kSecond, "WebEngine.Media.Error:3"},
- });
-}
-
-TEST_F(FuchsiaPlaybackEventsRecorderTest, Buffering) {
- recorder_.OnPlaying();
- recorder_.OnBufferingComplete();
- task_environment_.AdvanceClock(2 * kSecond);
- recorder_.OnBuffering();
- task_environment_.AdvanceClock(3 * kSecond);
- recorder_.OnBufferingComplete();
-
- ExpectEvents({
- {time_base_, "WebEngine.Media.Playing"},
- {time_base_ + 5 * kSecond,
- "WebEngine.Media.PlayTimeBeforeAutoPause:2000"},
- {time_base_ + 5 * kSecond, "WebEngine.Media.AutoPauseTime:3000"},
- });
-}
-
-TEST_F(FuchsiaPlaybackEventsRecorderTest, Bitrate) {
- recorder_.OnPlaying();
- recorder_.OnBufferingComplete();
-
- PipelineStatistics stats;
- recorder_.OnPipelineStatistics(stats);
-
- for (int i = 0; i < 5; ++i) {
- stats.audio_bytes_decoded += 5000;
- stats.video_bytes_decoded += 10000;
-
- task_environment_.AdvanceClock(kSecond);
- recorder_.OnPipelineStatistics(stats);
- }
-
- ExpectEvents({
- {time_base_, "WebEngine.Media.Playing"},
- {time_base_ + 5 * kSecond, "WebEngine.Media.AudioBitrate:40"},
- {time_base_ + 5 * kSecond, "WebEngine.Media.VideoBitrate:80"},
- });
-}
-
-TEST_F(FuchsiaPlaybackEventsRecorderTest, BitrateAfterPause) {
- recorder_.OnPlaying();
- recorder_.OnBufferingComplete();
-
- PipelineStatistics stats;
- recorder_.OnPipelineStatistics(stats);
-
- for (int i = 0; i < 3; ++i) {
- stats.audio_bytes_decoded += 5000;
- stats.video_bytes_decoded += 10000;
-
- task_environment_.AdvanceClock(kSecond);
- recorder_.OnPipelineStatistics(stats);
- }
-
- recorder_.OnPaused();
- task_environment_.AdvanceClock(10 * kSecond);
- recorder_.OnPlaying();
-
- for (int i = 0; i < 3; ++i) {
- stats.audio_bytes_decoded += 5000;
- stats.video_bytes_decoded += 10000;
-
- task_environment_.AdvanceClock(kSecond);
- recorder_.OnPipelineStatistics(stats);
- }
-
- ExpectEvents({
- {time_base_, "WebEngine.Media.Playing"},
- {time_base_ + 3 * kSecond, "WebEngine.Media.Pause"},
- {time_base_ + 13 * kSecond, "WebEngine.Media.Playing"},
- {time_base_ + 16 * kSecond, "WebEngine.Media.AudioBitrate:40"},
- {time_base_ + 16 * kSecond, "WebEngine.Media.VideoBitrate:80"},
- });
-}
-
-TEST_F(FuchsiaPlaybackEventsRecorderTest, BitrateAfterBuffering) {
- recorder_.OnPlaying();
- recorder_.OnBufferingComplete();
-
- PipelineStatistics stats;
- recorder_.OnPipelineStatistics(stats);
-
- for (int i = 0; i < 3; ++i) {
- stats.audio_bytes_decoded += 5000;
- stats.video_bytes_decoded += 10000;
-
- task_environment_.AdvanceClock(kSecond);
- recorder_.OnPipelineStatistics(stats);
- }
-
- recorder_.OnBuffering();
- task_environment_.AdvanceClock(10 * kSecond);
- recorder_.OnBufferingComplete();
-
- for (int i = 0; i < 3; ++i) {
- stats.audio_bytes_decoded += 5000;
- stats.video_bytes_decoded += 10000;
-
- task_environment_.AdvanceClock(kSecond);
- recorder_.OnPipelineStatistics(stats);
- }
-
- ExpectEvents({
- {time_base_, "WebEngine.Media.Playing"},
- {time_base_ + 13 * kSecond,
- "WebEngine.Media.PlayTimeBeforeAutoPause:3000"},
- {time_base_ + 13 * kSecond, "WebEngine.Media.AutoPauseTime:10000"},
- {time_base_ + 16 * kSecond, "WebEngine.Media.AudioBitrate:40"},
- {time_base_ + 16 * kSecond, "WebEngine.Media.VideoBitrate:80"},
- });
-}
-} // namespace media \ No newline at end of file