Skip to content

Commit

Permalink
[telemetry] Add telemetry to SbPlayer DRM (youtube#4052)
Browse files Browse the repository at this point in the history
Adding additional Media Telemetry to cover SbPlayer DRM functions.

The rough range of each function:
1. SbDrmDestroySystem(): 3.77ms to 111.17ms
2. SbDrmGenerateSessionUpdateRequest(): 32.33ms to 338.9ms
3. SbDrmUpdateSession(): 13.29ms to 267.52ms
4. SbDrmCloseSession(): 2.9ms to 23.71ms

This is the same CL as youtube#4048.

b/303328238
  • Loading branch information
borongc committed Aug 27, 2024
1 parent 08cef06 commit 4efa101
Show file tree
Hide file tree
Showing 6 changed files with 119 additions and 0 deletions.
11 changes: 11 additions & 0 deletions cobalt/media/base/drm_system.cc
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,9 @@ DrmSystem::~DrmSystem() {
ON_INSTANCE_RELEASED(DrmSystem);

if (is_valid()) {
media_metrics_provider_.StartTrackingAction(MediaAction::SBDRM_DESTROY);
SbDrmDestroySystem(wrapped_drm_system_);
media_metrics_provider_.EndTrackingAction(MediaAction::SBDRM_DESTROY);
} else {
LOG(WARNING) << "Attempting to close invalid SbDrmSystem";
}
Expand Down Expand Up @@ -210,8 +212,12 @@ void DrmSystem::GenerateSessionUpdateRequest(
<< ", init data size: " << init_data_length
<< ", ticket: " << ticket;

media_metrics_provider_.StartTrackingAction(
MediaAction::SBDRM_GENERATE_SESSION_UPDATE_REQUEST);
SbDrmGenerateSessionUpdateRequest(wrapped_drm_system_, ticket, type.c_str(),
init_data, init_data_length);
media_metrics_provider_.EndTrackingAction(
MediaAction::SBDRM_GENERATE_SESSION_UPDATE_REQUEST);
}

void DrmSystem::UpdateSession(
Expand All @@ -238,8 +244,11 @@ void DrmSystem::UpdateSession(
<< "), key length: " << key_length << ", ticket: " << ticket
<< ", session id: " << session_id;

media_metrics_provider_.StartTrackingAction(
MediaAction::SBDRM_UPDATE_SESSION);
SbDrmUpdateSession(wrapped_drm_system_, ticket, key, key_length,
session_id.c_str(), session_id.size());
media_metrics_provider_.EndTrackingAction(MediaAction::SBDRM_UPDATE_SESSION);
}

void DrmSystem::CloseSession(const std::string& session_id) {
Expand All @@ -249,7 +258,9 @@ void DrmSystem::CloseSession(const std::string& session_id) {
LOG(INFO) << "Close session of drm system (" << wrapped_drm_system_
<< "), session id: " << session_id;

media_metrics_provider_.StartTrackingAction(MediaAction::SBDRM_CLOSE_SESSION);
SbDrmCloseSession(wrapped_drm_system_, session_id.c_str(), session_id.size());
media_metrics_provider_.EndTrackingAction(MediaAction::SBDRM_CLOSE_SESSION);
}

void DrmSystem::OnSessionUpdateRequestGenerated(
Expand Down
3 changes: 3 additions & 0 deletions cobalt/media/base/drm_system.h
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
#include "base/optional.h"
#include "base/single_thread_task_runner.h"
#include "base/task/sequenced_task_runner.h"
#include "cobalt/media/base/metrics_provider.h"
#include "starboard/atomic.h"
#include "starboard/drm.h"

Expand Down Expand Up @@ -252,6 +253,8 @@ class DrmSystem : public base::RefCounted<DrmSystem> {
// Supports concurrent calls to |Session::Update|.
TicketToSessionUpdateMap ticket_to_session_update_map_;

MediaMetricsProvider media_metrics_provider_;

DISALLOW_COPY_AND_ASSIGN(DrmSystem);
};

Expand Down
21 changes: 21 additions & 0 deletions cobalt/media/base/metrics_provider.cc
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,27 @@ void MediaMetricsProvider::ReportActionLatencyUMA(
UMA_HISTOGRAM_TIMES("Cobalt.Media.SbPlayer.Destroy.LatencyTiming",
action_duration);
break;
case MediaAction::SBDRM_DESTROY:
UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES(
"Cobalt.Media.SbDrm.Destroy.LatencyTiming", action_duration,
base::TimeDelta::FromMicroseconds(500),
base::TimeDelta::FromMilliseconds(250), 50);
break;
case MediaAction::SBDRM_GENERATE_SESSION_UPDATE_REQUEST:
UMA_HISTOGRAM_TIMES(
"Cobalt.Media.SbDrm.GenerateSessionUpdateRequest.LatencyTiming",
action_duration);
break;
case MediaAction::SBDRM_UPDATE_SESSION:
UMA_HISTOGRAM_TIMES("Cobalt.Media.SbDrm.UpdateSession.LatencyTiming",
action_duration);
break;
case MediaAction::SBDRM_CLOSE_SESSION:
UMA_HISTOGRAM_CUSTOM_MICROSECONDS_TIMES(
"Cobalt.Media.SbDrm.CloseSession.LatencyTiming", action_duration,
base::TimeDelta::FromMicroseconds(500),
base::TimeDelta::FromMilliseconds(50), 50);
break;
case MediaAction::UNKNOWN_ACTION:
default:
break;
Expand Down
4 changes: 4 additions & 0 deletions cobalt/media/base/metrics_provider.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,10 @@ enum class MediaAction : uint8_t {
SBPLAYER_CREATE,
SBPLAYER_CREATE_URL_PLAYER,
SBPLAYER_DESTROY,
SBDRM_DESTROY,
SBDRM_GENERATE_SESSION_UPDATE_REQUEST,
SBDRM_UPDATE_SESSION,
SBDRM_CLOSE_SESSION,
};

class MediaMetricsProvider {
Expand Down
44 changes: 44 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,50 @@ TEST_F(MediaMetricsProviderTest, SbPlayerDestroy) {
std::string(kUmaPrefix) + "SbPlayer.Destroy.LatencyTiming", 100, 1);
}

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

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

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

TEST_F(MediaMetricsProviderTest, SbDrmDestroy) {
metrics_.StartTrackingAction(MediaAction::SBDRM_DESTROY);

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

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

TEST_F(MediaMetricsProviderTest, SbDrmGenerateSessionUpdateRequest) {
metrics_.StartTrackingAction(
MediaAction::SBDRM_GENERATE_SESSION_UPDATE_REQUEST);

clock_.Advance(base::TimeDelta::FromMilliseconds(100));
metrics_.EndTrackingAction(
MediaAction::SBDRM_GENERATE_SESSION_UPDATE_REQUEST);

histogram_tester_.ExpectUniqueSample(
std::string(kUmaPrefix) +
"SbDrm.GenerateSessionUpdateRequest.LatencyTiming",
100, 1);
}

TEST_F(MediaMetricsProviderTest, SbDrmUpdateSession) {
metrics_.StartTrackingAction(MediaAction::SBDRM_UPDATE_SESSION);

clock_.Advance(base::TimeDelta::FromMilliseconds(100));
metrics_.EndTrackingAction(MediaAction::SBDRM_UPDATE_SESSION);

histogram_tester_.ExpectUniqueSample(
std::string(kUmaPrefix) + "SbDrm.UpdateSession.LatencyTiming", 100, 1);
}


} // namespace
} // namespace media
Expand Down
36 changes: 36 additions & 0 deletions tools/metrics/histograms/metadata/cobalt/histograms.xml
Original file line number Diff line number Diff line change
Expand Up @@ -275,6 +275,42 @@ Always run the pretty print utility on this file after editing:
</summary>
</histogram>

<histogram name="Cobalt.Media.SbDrm.CloseSession.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 closing session of SbDrm.</summary>
</histogram>

<histogram name="Cobalt.Media.SbDrm.Destroy.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 the destruction of SbDrm.</summary>
</histogram>

<histogram name="Cobalt.Media.SbDrm.GenerateSessionUpdateRequest.LatencyTiming"
units="ms" 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 generating session update request of SbDrm.</summary>
</histogram>

<histogram name="Cobalt.Media.SbDrm.UpdateSession.LatencyTiming" units="ms"
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 updating session of SbDrm.</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 4efa101

Please sign in to comment.