Skip to content

Commit

Permalink
[telemetry] Add telemetry to SbMedia functions
Browse files Browse the repository at this point in the history
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
  • Loading branch information
borongc committed Sep 10, 2024
1 parent 727a2b7 commit 53cd3fb
Show file tree
Hide file tree
Showing 6 changed files with 132 additions and 3 deletions.
27 changes: 27 additions & 0 deletions cobalt/media/base/metrics_provider.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
3 changes: 3 additions & 0 deletions cobalt/media/base/metrics_provider.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
35 changes: 35 additions & 0 deletions cobalt/media/base/metrics_provider_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
40 changes: 37 additions & 3 deletions cobalt/media/decoder_buffer_allocator.cc
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down
3 changes: 3 additions & 0 deletions cobalt/media/decoder_buffer_allocator.h
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down Expand Up @@ -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_;
Expand Down
27 changes: 27 additions & 0 deletions tools/metrics/histograms/metadata/cobalt/histograms.xml
Original file line number Diff line number Diff line change
Expand Up @@ -311,6 +311,33 @@ Always run the pretty print utility on this file after editing:
<summary>Timing data for updating session of SbDrm.</summary>
</histogram>

<histogram name="Cobalt.Media.SbMedia.BufferPoolAllocateOnDemand.LatencyTiming"
units="microseconds" expires_after="never">
<!-- expires-never: Needed for long-term tracking of SbPlayer latencies. -->

<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>Timing data for allocating buffer pool on demand.</summary>
</histogram>

<histogram name="Cobalt.Media.SbMedia.GetBufferAllocationUnit.LatencyTiming"
units="microseconds" expires_after="never">
<!-- expires-never: Needed for long-term tracking of SbPlayer latencies. -->

<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>Timing data for getting buffer allocation unit.</summary>
</histogram>

<histogram name="Cobalt.Media.SbMedia.GetInitBufferCapacity.LatencyTiming"
units="microseconds" expires_after="never">
<!-- expires-never: Needed for long-term tracking of SbPlayer latencies. -->

<owner>[email protected]</owner>
<owner>[email protected]</owner>
<summary>Timing data for getting initial buffer capacity.</summary>
</histogram>

<histogram name="Cobalt.Media.SbPlayer.Create.LatencyTiming"
units="microseconds" expires_after="never">
<!-- expires-never: Needed for long-term tracking of SbPlayer latencies. -->
Expand Down

0 comments on commit 53cd3fb

Please sign in to comment.