Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[telemetry] Add telemetry to SbPlayer functions #4068

Merged
merged 1 commit into from
Aug 30, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
60 changes: 60 additions & 0 deletions cobalt/media/base/metrics_provider.cc
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,66 @@ void MediaMetricsProvider::ReportActionLatencyUMA(
UMA_HISTOGRAM_TIMES("Cobalt.Media.SbPlayer.Destroy.LatencyTiming",
action_duration);
break;
case MediaAction::SBPLAYER_GET_PREFERRED_OUTPUT_MODE:
UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES(
"Cobalt.Media.SbPlayer.GetPreferredOutputMode.LatencyTiming",
action_duration, base::TimeDelta::FromMicroseconds(1),
base::TimeDelta::FromMicroseconds(100), 50);
break;
case MediaAction::SBPLAYER_SEEK:
UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES(
"Cobalt.Media.SbPlayer.Seek.LatencyTiming", action_duration,
base::TimeDelta::FromMicroseconds(1),
base::TimeDelta::FromMicroseconds(800), 50);
break;
case MediaAction::SBPLAYER_WRITE_END_OF_STREAM_AUDIO:
UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES(
"Cobalt.Media.SbPlayer.WriteEndOfStream.Audio.LatencyTiming",
action_duration, base::TimeDelta::FromMicroseconds(1),
base::TimeDelta::FromMilliseconds(25), 50);
break;
case MediaAction::SBPLAYER_WRITE_END_OF_STREAM_VIDEO:
UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES(
"Cobalt.Media.SbPlayer.WriteEndOfStream.Video.LatencyTiming",
action_duration, base::TimeDelta::FromMicroseconds(1),
base::TimeDelta::FromMilliseconds(25), 50);
break;
case MediaAction::SBPLAYER_SET_BOUNDS:
UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES(
"Cobalt.Media.SbPlayer.SetBounds.LatencyTiming", action_duration,
base::TimeDelta::FromMicroseconds(50),
base::TimeDelta::FromMilliseconds(60), 50);
break;
case MediaAction::SBPLAYER_SET_PLAYBACK_RATE:
UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES(
"Cobalt.Media.SbPlayer.SetPlaybackRate.LatencyTiming",
action_duration, base::TimeDelta::FromMicroseconds(1),
base::TimeDelta::FromMilliseconds(50), 50);
break;
case MediaAction::SBPLAYER_SET_VOLUME:
UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES(
"Cobalt.Media.SbPlayer.SetVolume.LatencyTiming", action_duration,
base::TimeDelta::FromMicroseconds(1),
base::TimeDelta::FromMilliseconds(50), 50);
break;
case MediaAction::SBPLAYER_GET_INFO:
UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES(
"Cobalt.Media.SbPlayer.GetInfo.LatencyTiming", action_duration,
base::TimeDelta::FromMicroseconds(1),
base::TimeDelta::FromMilliseconds(20), 50);
break;
case MediaAction::SBPLAYER_GET_CURRENT_FRAME:
UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES(
"Cobalt.Media.SbPlayer.GetCurrentFrame.LatencyTiming",
action_duration, base::TimeDelta::FromMicroseconds(1),
base::TimeDelta::FromMilliseconds(250), 50);
break;
case MediaAction::SBPLAYER_GET_AUDIO_CONFIG:
UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES(
"Cobalt.Media.SbPlayer.GetAudioConfig.LatencyTiming", action_duration,
base::TimeDelta::FromMicroseconds(1),
base::TimeDelta::FromMilliseconds(50), 50);
break;
case MediaAction::SBDRM_CREATE:
UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES(
"Cobalt.Media.SbDrm.Create.LatencyTiming", action_duration,
Expand Down
10 changes: 10 additions & 0 deletions cobalt/media/base/metrics_provider.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,16 @@ enum class MediaAction : uint8_t {
SBPLAYER_CREATE,
SBPLAYER_CREATE_URL_PLAYER,
SBPLAYER_DESTROY,
SBPLAYER_GET_PREFERRED_OUTPUT_MODE,
SBPLAYER_SEEK,
SBPLAYER_WRITE_END_OF_STREAM_AUDIO,
SBPLAYER_WRITE_END_OF_STREAM_VIDEO,
SBPLAYER_SET_BOUNDS,
SBPLAYER_SET_PLAYBACK_RATE,
SBPLAYER_SET_VOLUME,
SBPLAYER_GET_INFO,
SBPLAYER_GET_CURRENT_FRAME,
SBPLAYER_GET_AUDIO_CONFIG,
SBDRM_CREATE,
SBDRM_DESTROY,
SBDRM_GENERATE_SESSION_UPDATE_REQUEST,
Expand Down
106 changes: 106 additions & 0 deletions cobalt/media/base/metrics_provider_test.cc
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,112 @@ TEST_F(MediaMetricsProviderTest, SbPlayerDestroy) {
std::string(kUmaPrefix) + "SbPlayer.Destroy.LatencyTiming", 100, 1);
}

TEST_F(MediaMetricsProviderTest, SbPlayerGetPreferredOutputMode) {
metrics_.StartTrackingAction(MediaAction::SBPLAYER_GET_PREFERRED_OUTPUT_MODE);

clock_.Advance(base::TimeDelta::FromMicroseconds(570));
metrics_.EndTrackingAction(MediaAction::SBPLAYER_GET_PREFERRED_OUTPUT_MODE);

histogram_tester_.ExpectUniqueSample(
std::string(kUmaPrefix) + "SbPlayer.GetPreferredOutputMode.LatencyTiming",
570, 1);
}

TEST_F(MediaMetricsProviderTest, SbPlayerSeek) {
metrics_.StartTrackingAction(MediaAction::SBPLAYER_SEEK);

clock_.Advance(base::TimeDelta::FromMicroseconds(570));
metrics_.EndTrackingAction(MediaAction::SBPLAYER_SEEK);

histogram_tester_.ExpectUniqueSample(
std::string(kUmaPrefix) + "SbPlayer.Seek.LatencyTiming", 570, 1);
}

TEST_F(MediaMetricsProviderTest, SbPlayerSetBounds) {
metrics_.StartTrackingAction(MediaAction::SBPLAYER_SET_BOUNDS);

clock_.Advance(base::TimeDelta::FromMicroseconds(570));
metrics_.EndTrackingAction(MediaAction::SBPLAYER_SET_BOUNDS);

histogram_tester_.ExpectUniqueSample(
std::string(kUmaPrefix) + "SbPlayer.SetBounds.LatencyTiming", 570, 1);
}

TEST_F(MediaMetricsProviderTest, SbPlayerSetPlaybackRate) {
metrics_.StartTrackingAction(MediaAction::SBPLAYER_SET_PLAYBACK_RATE);

clock_.Advance(base::TimeDelta::FromMicroseconds(570));
metrics_.EndTrackingAction(MediaAction::SBPLAYER_SET_PLAYBACK_RATE);

histogram_tester_.ExpectUniqueSample(
std::string(kUmaPrefix) + "SbPlayer.SetPlaybackRate.LatencyTiming", 570,
1);
}

TEST_F(MediaMetricsProviderTest, SbPlayerSetVolume) {
metrics_.StartTrackingAction(MediaAction::SBPLAYER_SET_VOLUME);

clock_.Advance(base::TimeDelta::FromMicroseconds(570));
metrics_.EndTrackingAction(MediaAction::SBPLAYER_SET_VOLUME);

histogram_tester_.ExpectUniqueSample(
std::string(kUmaPrefix) + "SbPlayer.SetVolume.LatencyTiming", 570, 1);
}

TEST_F(MediaMetricsProviderTest, SbPlayerGetInfo) {
metrics_.StartTrackingAction(MediaAction::SBPLAYER_GET_INFO);

clock_.Advance(base::TimeDelta::FromMicroseconds(570));
metrics_.EndTrackingAction(MediaAction::SBPLAYER_GET_INFO);

histogram_tester_.ExpectUniqueSample(
std::string(kUmaPrefix) + "SbPlayer.GetInfo.LatencyTiming", 570, 1);
}

TEST_F(MediaMetricsProviderTest, SbPlayerGetCurrentFrame) {
metrics_.StartTrackingAction(MediaAction::SBPLAYER_GET_CURRENT_FRAME);

clock_.Advance(base::TimeDelta::FromMicroseconds(570));
metrics_.EndTrackingAction(MediaAction::SBPLAYER_GET_CURRENT_FRAME);

histogram_tester_.ExpectUniqueSample(
std::string(kUmaPrefix) + "SbPlayer.GetCurrentFrame.LatencyTiming", 570,
1);
}

TEST_F(MediaMetricsProviderTest, SbPlayerGetAudioConfig) {
metrics_.StartTrackingAction(MediaAction::SBPLAYER_GET_AUDIO_CONFIG);

clock_.Advance(base::TimeDelta::FromMicroseconds(570));
metrics_.EndTrackingAction(MediaAction::SBPLAYER_GET_AUDIO_CONFIG);

histogram_tester_.ExpectUniqueSample(
std::string(kUmaPrefix) + "SbPlayer.GetAudioConfig.LatencyTiming", 570,
1);
}

TEST_F(MediaMetricsProviderTest, SbPlayerWriteEndOfStreamAudio) {
metrics_.StartTrackingAction(MediaAction::SBPLAYER_WRITE_END_OF_STREAM_AUDIO);

clock_.Advance(base::TimeDelta::FromMicroseconds(570));
metrics_.EndTrackingAction(MediaAction::SBPLAYER_WRITE_END_OF_STREAM_AUDIO);

histogram_tester_.ExpectUniqueSample(
std::string(kUmaPrefix) + "SbPlayer.WriteEndOfStream.Audio.LatencyTiming",
570, 1);
}

TEST_F(MediaMetricsProviderTest, SbPlayerWriteEndOfStreamVideo) {
metrics_.StartTrackingAction(MediaAction::SBPLAYER_WRITE_END_OF_STREAM_VIDEO);

clock_.Advance(base::TimeDelta::FromMicroseconds(570));
metrics_.EndTrackingAction(MediaAction::SBPLAYER_WRITE_END_OF_STREAM_VIDEO);

histogram_tester_.ExpectUniqueSample(
std::string(kUmaPrefix) + "SbPlayer.WriteEndOfStream.Video.LatencyTiming",
570, 1);
}

TEST_F(MediaMetricsProviderTest, SbDrmCloseSession) {
metrics_.StartTrackingAction(MediaAction::SBDRM_CLOSE_SESSION);

Expand Down
43 changes: 39 additions & 4 deletions cobalt/media/base/sbplayer_interface.cc
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,12 @@ SbPlayer DefaultSbPlayerInterface::Create(

SbPlayerOutputMode DefaultSbPlayerInterface::GetPreferredOutputMode(
const SbPlayerCreationParam* creation_param) {
return SbPlayerGetPreferredOutputMode(creation_param);
media_metrics_provider_.StartTrackingAction(
MediaAction::SBPLAYER_GET_PREFERRED_OUTPUT_MODE);
auto output_mode = SbPlayerGetPreferredOutputMode(creation_param);
media_metrics_provider_.EndTrackingAction(
MediaAction::SBPLAYER_GET_PREFERRED_OUTPUT_MODE);
return output_mode;
}

void DefaultSbPlayerInterface::Destroy(SbPlayer player) {
Expand All @@ -91,11 +96,13 @@ void DefaultSbPlayerInterface::Destroy(SbPlayer player) {
void DefaultSbPlayerInterface::Seek(SbPlayer player,
base::TimeDelta seek_to_timestamp,
int ticket) {
media_metrics_provider_.StartTrackingAction(MediaAction::SBPLAYER_SEEK);
#if SB_API_VERSION >= 15
SbPlayerSeek(player, seek_to_timestamp.InMicroseconds(), ticket);
#else // SB_API_VERSION >= 15
SbPlayerSeek2(player, seek_to_timestamp.InMicroseconds(), ticket);
#endif // SB_API_VERSION >= 15
media_metrics_provider_.EndTrackingAction(MediaAction::SBPLAYER_SEEK);
}

bool DefaultSbPlayerInterface::IsEnhancedAudioExtensionEnabled() const {
Expand Down Expand Up @@ -131,35 +138,57 @@ int DefaultSbPlayerInterface::GetMaximumNumberOfSamplesPerWrite(

void DefaultSbPlayerInterface::WriteEndOfStream(SbPlayer player,
SbMediaType stream_type) {
auto media_action = (stream_type == kSbMediaTypeAudio)
? MediaAction::SBPLAYER_WRITE_END_OF_STREAM_AUDIO
: MediaAction::SBPLAYER_WRITE_END_OF_STREAM_VIDEO;
media_metrics_provider_.StartTrackingAction(media_action);
SbPlayerWriteEndOfStream(player, stream_type);
media_metrics_provider_.EndTrackingAction(media_action);
}

void DefaultSbPlayerInterface::SetBounds(SbPlayer player, int z_index, int x,
int y, int width, int height) {
media_metrics_provider_.StartTrackingAction(MediaAction::SBPLAYER_SET_BOUNDS);
SbPlayerSetBounds(player, z_index, x, y, width, height);
media_metrics_provider_.EndTrackingAction(MediaAction::SBPLAYER_SET_BOUNDS);
}

bool DefaultSbPlayerInterface::SetPlaybackRate(SbPlayer player,
double playback_rate) {
return SbPlayerSetPlaybackRate(player, playback_rate);
media_metrics_provider_.StartTrackingAction(
MediaAction::SBPLAYER_SET_PLAYBACK_RATE);
auto set_playback_rate = SbPlayerSetPlaybackRate(player, playback_rate);
media_metrics_provider_.EndTrackingAction(
MediaAction::SBPLAYER_SET_PLAYBACK_RATE);
return set_playback_rate;
}

void DefaultSbPlayerInterface::SetVolume(SbPlayer player, double volume) {
media_metrics_provider_.StartTrackingAction(MediaAction::SBPLAYER_SET_VOLUME);
SbPlayerSetVolume(player, volume);
media_metrics_provider_.EndTrackingAction(MediaAction::SBPLAYER_SET_VOLUME);
}

void DefaultSbPlayerInterface::GetInfo(SbPlayer player,
#if SB_API_VERSION >= 15
SbPlayerInfo* out_player_info) {
media_metrics_provider_.StartTrackingAction(MediaAction::SBPLAYER_GET_INFO);
SbPlayerGetInfo(player, out_player_info);
#else // SB_API_VERSION >= 15
SbPlayerInfo2* out_player_info2) {
media_metrics_provider_.StartTrackingAction(MediaAction::SBPLAYER_GET_INFO);
SbPlayerGetInfo2(player, out_player_info2);
#endif // SB_API_VERSION >= 15
media_metrics_provider_.EndTrackingAction(MediaAction::SBPLAYER_GET_INFO);
}

SbDecodeTarget DefaultSbPlayerInterface::GetCurrentFrame(SbPlayer player) {
return SbPlayerGetCurrentFrame(player);
media_metrics_provider_.StartTrackingAction(
MediaAction::SBPLAYER_GET_CURRENT_FRAME);
auto current_frame = SbPlayerGetCurrentFrame(player);
media_metrics_provider_.EndTrackingAction(
MediaAction::SBPLAYER_GET_CURRENT_FRAME);
return current_frame;
}

#if SB_HAS(PLAYER_WITH_URL)
Expand Down Expand Up @@ -199,7 +228,13 @@ void DefaultSbPlayerInterface::GetUrlPlayerExtraInfo(
bool DefaultSbPlayerInterface::GetAudioConfiguration(
SbPlayer player, int index,
SbMediaAudioConfiguration* out_audio_configuration) {
return SbPlayerGetAudioConfiguration(player, index, out_audio_configuration);
media_metrics_provider_.StartTrackingAction(
MediaAction::SBPLAYER_GET_AUDIO_CONFIG);
auto audio_configuration =
SbPlayerGetAudioConfiguration(player, index, out_audio_configuration);
media_metrics_provider_.EndTrackingAction(
MediaAction::SBPLAYER_GET_AUDIO_CONFIG);
return audio_configuration;
}

#endif // SB_API_VERSION >= 15
Expand Down
90 changes: 90 additions & 0 deletions tools/metrics/histograms/metadata/cobalt/histograms.xml
Original file line number Diff line number Diff line change
Expand Up @@ -347,6 +347,96 @@ Always run the pretty print utility on this file after editing:
<summary>Timing data for the destruction of SbPlayer.</summary>
</histogram>

<histogram name="Cobalt.Media.SbPlayer.GetAudioConfig.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 audio configuration.</summary>
</histogram>

<histogram name="Cobalt.Media.SbPlayer.GetCurrentFrame.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 frame.</summary>
</histogram>

<histogram name="Cobalt.Media.SbPlayer.GetInfo.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 media info.</summary>
</histogram>

<histogram name="Cobalt.Media.SbPlayer.GetPreferredOutputMode.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 preferred output mode.</summary>
</histogram>

<histogram name="Cobalt.Media.SbPlayer.Seek.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 setting seek.</summary>
</histogram>

<histogram name="Cobalt.Media.SbPlayer.SetBounds.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 setting bounds.</summary>
</histogram>

<histogram name="Cobalt.Media.SbPlayer.SetPlaybackRate.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 setting playback rate.</summary>
</histogram>

<histogram name="Cobalt.Media.SbPlayer.SetVolume.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 setting volume.</summary>
</histogram>

<histogram name="Cobalt.Media.SbPlayer.WriteEndOfStream.Audio.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 writing end of audio stream.</summary>
</histogram>

<histogram name="Cobalt.Media.SbPlayer.WriteEndOfStream.Video.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 writing end of video stream.</summary>
</histogram>

<histogram name="Cobalt.Media.SDR.Matrix" enum="MatrixID" expires_after="never">
<!-- expires-never: Needed for baseline Media pipeline health metric. -->

Expand Down
Loading