From 53cd3fb0a9f6a79bc9d3dc9cdfe264e51f37ec42 Mon Sep 17 00:00:00 2001 From: Bo-Rong Chen Date: Tue, 10 Sep 2024 14:49:16 -0700 Subject: [PATCH] [telemetry] Add telemetry to SbMedia functions Adding additional Media Telemetry to cover SbMedia functions. The rough range of each function: 1. SbMediaIsBufferPoolAllocateOnDemand(): 1us to 2us 2. SbMediaGetInitialBufferCapacity(): 1us to 2us 3. SbMediaGetBufferAllocationUnit(): 1us to 2us b/303328238 --- cobalt/media/base/metrics_provider.cc | 27 +++++++++++++ cobalt/media/base/metrics_provider.h | 3 ++ cobalt/media/base/metrics_provider_test.cc | 35 ++++++++++++++++ cobalt/media/decoder_buffer_allocator.cc | 40 +++++++++++++++++-- cobalt/media/decoder_buffer_allocator.h | 3 ++ .../histograms/metadata/cobalt/histograms.xml | 27 +++++++++++++ 6 files changed, 132 insertions(+), 3 deletions(-) diff --git a/cobalt/media/base/metrics_provider.cc b/cobalt/media/base/metrics_provider.cc index b6b4d72a5916..0867fe58ebe3 100644 --- a/cobalt/media/base/metrics_provider.cc +++ b/cobalt/media/base/metrics_provider.cc @@ -172,6 +172,33 @@ void MediaMetricsProvider::ReportActionLatencyUMA( base::TimeDelta::FromMicroseconds(500), base::TimeDelta::FromMilliseconds(50), 50); break; + case MediaAction::SBMEDIA_BUFFER_POOL_ALLOCATE_ON_DEMAND: + // TODO(borongchen): remove unused debug log messages + // LOG(ERROR) << "Brown SBMEDIA_BUFFER_POOL_ALLOCATE_ON_DEMAND " + // << action_duration; + UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES( + "Cobalt.Media.SbMedia.BufferPoolAllocateOnDemand.LatencyTiming", + action_duration, base::TimeDelta::FromMicroseconds(1), + base::TimeDelta::FromMicroseconds(50), 50); + break; + case MediaAction::SBMEDIA_GET_INIT_BUFFER_CAPACITY: + // TODO(borongchen): remove unused debug log messages + // LOG(ERROR) << "Brown SBMEDIA_GET_INIT_BUFFER_CAPACITY " + // << action_duration; + UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES( + "Cobalt.Media.SbMedia.GetInitBufferCapacity.LatencyTiming", + action_duration, base::TimeDelta::FromMicroseconds(1), + base::TimeDelta::FromMicroseconds(50), 50); + break; + case MediaAction::SBMEDIA_GET_BUFFER_ALLOCATION_UNIT: + // TODO(borongchen): remove unused debug log messages + // LOG(ERROR) << "Brown SBMEDIA_GET_BUFFER_ALLOCATION_UNIT " + // << action_duration; + UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES( + "Cobalt.Media.SbMedia.GetBufferAllocationUnit.LatencyTiming", + action_duration, base::TimeDelta::FromMicroseconds(1), + base::TimeDelta::FromMicroseconds(50), 50); + break; case MediaAction::UNKNOWN_ACTION: default: break; diff --git a/cobalt/media/base/metrics_provider.h b/cobalt/media/base/metrics_provider.h index 56a5c8328f00..a58f5820497e 100644 --- a/cobalt/media/base/metrics_provider.h +++ b/cobalt/media/base/metrics_provider.h @@ -48,6 +48,9 @@ enum class MediaAction : uint8_t { SBDRM_GENERATE_SESSION_UPDATE_REQUEST, SBDRM_UPDATE_SESSION, SBDRM_CLOSE_SESSION, + SBMEDIA_BUFFER_POOL_ALLOCATE_ON_DEMAND, + SBMEDIA_GET_INIT_BUFFER_CAPACITY, + SBMEDIA_GET_BUFFER_ALLOCATION_UNIT, }; class MediaMetricsProvider { diff --git a/cobalt/media/base/metrics_provider_test.cc b/cobalt/media/base/metrics_provider_test.cc index 46a5470605fa..b2de2e0a58cc 100644 --- a/cobalt/media/base/metrics_provider_test.cc +++ b/cobalt/media/base/metrics_provider_test.cc @@ -138,6 +138,41 @@ TEST_F(MediaMetricsProviderTest, SbDrmUpdateSession) { std::string(kUmaPrefix) + "SbDrm.UpdateSession.LatencyTiming", 100, 1); } +TEST_F(MediaMetricsProviderTest, SbMediaIsBufferPoolAllocateOnDemand) { + metrics_.StartTrackingAction( + MediaAction::SBMEDIA_BUFFER_POOL_ALLOCATE_ON_DEMAND); + + clock_.Advance(base::TimeDelta::FromMicroseconds(570)); + metrics_.EndTrackingAction( + MediaAction::SBMEDIA_BUFFER_POOL_ALLOCATE_ON_DEMAND); + + histogram_tester_.ExpectUniqueSample( + std::string(kUmaPrefix) + + "SbMedia.BufferPoolAllocateOnDemand.LatencyTiming", + 570, 1); +} + +TEST_F(MediaMetricsProviderTest, SbMediaGetInitialBufferCapacity) { + metrics_.StartTrackingAction(MediaAction::SBMEDIA_GET_INIT_BUFFER_CAPACITY); + + clock_.Advance(base::TimeDelta::FromMicroseconds(570)); + metrics_.EndTrackingAction(MediaAction::SBMEDIA_GET_INIT_BUFFER_CAPACITY); + + histogram_tester_.ExpectUniqueSample( + std::string(kUmaPrefix) + "SbMedia.GetInitBufferCapacity.LatencyTiming", + 570, 1); +} + +TEST_F(MediaMetricsProviderTest, SbMediaGetBufferAllocationUnit) { + metrics_.StartTrackingAction(MediaAction::SBMEDIA_GET_BUFFER_ALLOCATION_UNIT); + + clock_.Advance(base::TimeDelta::FromMicroseconds(570)); + metrics_.EndTrackingAction(MediaAction::SBMEDIA_GET_BUFFER_ALLOCATION_UNIT); + + histogram_tester_.ExpectUniqueSample( + std::string(kUmaPrefix) + "SbMedia.GetBufferAllocationUnit.LatencyTiming", + 570, 1); +} } // namespace } // namespace media diff --git a/cobalt/media/decoder_buffer_allocator.cc b/cobalt/media/decoder_buffer_allocator.cc index 6c91b45a3592..2514f107b4c1 100644 --- a/cobalt/media/decoder_buffer_allocator.cc +++ b/cobalt/media/decoder_buffer_allocator.cc @@ -38,11 +38,45 @@ const size_t kSmallAllocationThreshold = 512; } // namespace +bool CreateSbMediaIsBufferPoolAllocateOnDemandWithHistogram( + MediaMetricsProvider& media_metrics_provider) { + media_metrics_provider.StartTrackingAction( + MediaAction::SBMEDIA_BUFFER_POOL_ALLOCATE_ON_DEMAND); + auto is_memory_pool_allocated_on_demand = + SbMediaIsBufferPoolAllocateOnDemand(); + media_metrics_provider.EndTrackingAction( + MediaAction::SBMEDIA_BUFFER_POOL_ALLOCATE_ON_DEMAND); + return is_memory_pool_allocated_on_demand; +} + +int CreateSbMediaGetInitialBufferCapacityWithHistogram( + MediaMetricsProvider& media_metrics_provider) { + media_metrics_provider.StartTrackingAction( + MediaAction::SBMEDIA_GET_INIT_BUFFER_CAPACITY); + auto initial_capacity = SbMediaGetInitialBufferCapacity(); + media_metrics_provider.EndTrackingAction( + MediaAction::SBMEDIA_GET_INIT_BUFFER_CAPACITY); + return initial_capacity; +} + +bool CreateSbMediaGetBufferAllocationUnitWithHistogram( + MediaMetricsProvider& media_metrics_provider) { + media_metrics_provider.StartTrackingAction( + MediaAction::SBMEDIA_GET_BUFFER_ALLOCATION_UNIT); + auto allocation_unit = SbMediaGetBufferAllocationUnit(); + media_metrics_provider.EndTrackingAction( + MediaAction::SBMEDIA_GET_BUFFER_ALLOCATION_UNIT); + return allocation_unit; +} + DecoderBufferAllocator::DecoderBufferAllocator() : is_memory_pool_allocated_on_demand_( - SbMediaIsBufferPoolAllocateOnDemand()), - initial_capacity_(SbMediaGetInitialBufferCapacity()), - allocation_unit_(SbMediaGetBufferAllocationUnit()) { + CreateSbMediaIsBufferPoolAllocateOnDemandWithHistogram( + media_metrics_provider_)), + initial_capacity_(CreateSbMediaGetInitialBufferCapacityWithHistogram( + media_metrics_provider_)), + allocation_unit_(CreateSbMediaGetBufferAllocationUnitWithHistogram( + media_metrics_provider_)) { if (is_memory_pool_allocated_on_demand_) { DLOG(INFO) << "Allocated media buffer pool on demand."; Allocator::Set(this); diff --git a/cobalt/media/decoder_buffer_allocator.h b/cobalt/media/decoder_buffer_allocator.h index da9877cce5ad..7e61561942e1 100644 --- a/cobalt/media/decoder_buffer_allocator.h +++ b/cobalt/media/decoder_buffer_allocator.h @@ -21,6 +21,7 @@ #include "base/compiler_specific.h" #include "base/synchronization/lock.h" #include "base/time/time.h" +#include "cobalt/media/base/metrics_provider.h" #include "cobalt/media/bidirectional_fit_reuse_allocator.h" #include "cobalt/media/decoder_buffer_memory_info.h" #include "cobalt/media/starboard_memory_allocator.h" @@ -63,6 +64,8 @@ class DecoderBufferAllocator : public ::media::DecoderBuffer::Allocator, private: void EnsureReuseAllocatorIsCreated(); + MediaMetricsProvider media_metrics_provider_; + const bool is_memory_pool_allocated_on_demand_; const int initial_capacity_; const int allocation_unit_; diff --git a/tools/metrics/histograms/metadata/cobalt/histograms.xml b/tools/metrics/histograms/metadata/cobalt/histograms.xml index 1cc9ae95c457..b38dd40a08a8 100644 --- a/tools/metrics/histograms/metadata/cobalt/histograms.xml +++ b/tools/metrics/histograms/metadata/cobalt/histograms.xml @@ -311,6 +311,33 @@ Always run the pretty print utility on this file after editing: Timing data for updating session of SbDrm. + + + + borongchen@google.com + cobalt-team@google.com + Timing data for allocating buffer pool on demand. + + + + + + borongchen@google.com + cobalt-team@google.com + Timing data for getting buffer allocation unit. + + + + + + borongchen@google.com + cobalt-team@google.com + Timing data for getting initial buffer capacity. + +