Revert "Measure wall clock time of capture and encode processing."
This reverts commit 8039cdbe48f8c8bb91fa1761f807005a7b497196.
Reason for revert: remove functionality after measurement complete
Original change's description:
> Measure wall clock time of capture and encode processing.
>
> (NOTE: This and dependent CLs will be reverted in a few days after
> data collection from the field is complete.)
>
> This change introduces a new task queue concept, Voucher. They
> are associated with a currently running task tree. Whenever
> tasks are posted, the current voucher is inherited and set as
> current in the new task.
>
> The voucher exists for as long as there are direct and indirect
> tasks running that descend from the task where the voucher was
> created.
>
> Vouchers aggregate application-specific attachments, which perform
> logic unrelated to Voucher progression. This particular change adds
> an attachment that measures time from capture to all encode operations
> complete, and places it into the WebRTC.Video.CaptureToSendTimeMs UMA.
>
> An accompanying Chrome change crrev.com/c/4992282 ensures survival of
> vouchers across certain Mojo IPC.
>
> Bug: chromium:1498378
> Change-Id: I2a27800a4e5504f219d8b9d33c56a48904cf6dde
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/325400
> Reviewed-by: Harald Alvestrand <hta@webrtc.org>
> Commit-Queue: Markus Handell <handellm@webrtc.org>
> Cr-Commit-Position: refs/heads/main@{#41061}
Bug: chromium:1498378
Change-Id: I9503575fbc52f1946ca26fc3c17b623ea75cd3c5
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/327023
Commit-Queue: Markus Handell <handellm@webrtc.org>
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Bot-Commit: rubber-stamper@appspot.gserviceaccount.com <rubber-stamper@appspot.gserviceaccount.com>
Cr-Commit-Position: refs/heads/main@{#41135}
diff --git a/api/task_queue/BUILD.gn b/api/task_queue/BUILD.gn
index a410c53..e0e2e50 100644
--- a/api/task_queue/BUILD.gn
+++ b/api/task_queue/BUILD.gn
@@ -20,7 +20,6 @@
"..:location",
"../../rtc_base:checks",
"../../rtc_base:macromagic",
- "../../rtc_base:voucher",
"../../rtc_base/system:rtc_export",
"../units:time_delta",
]
diff --git a/api/task_queue/task_queue_base.cc b/api/task_queue/task_queue_base.cc
index 78c9a27..ecdc7f7 100644
--- a/api/task_queue/task_queue_base.cc
+++ b/api/task_queue/task_queue_base.cc
@@ -14,7 +14,6 @@
#include "absl/functional/any_invocable.h"
#include "api/units/time_delta.h"
#include "rtc_base/checks.h"
-#include "rtc_base/voucher.h"
#if defined(ABSL_HAVE_THREAD_LOCAL)
@@ -29,23 +28,6 @@
return current;
}
-void TaskQueueBase::PostTask(absl::AnyInvocable<void() &&> task,
- const Location& location) {
- PostTaskInternal(std::move(task), PostTaskTraits{}, location);
-}
-
-void TaskQueueBase::PostTaskInternal(absl::AnyInvocable<void() &&> task,
- const PostTaskTraits& traits,
- const Location& location) {
- auto current = Voucher::Current();
- PostTaskImpl(
- [task = std::move(task), current = std::move(current)]() mutable {
- Voucher::ScopedSetter setter(std::move(current));
- std::move(task)();
- },
- traits, location);
-}
-
TaskQueueBase::CurrentTaskQueueSetter::CurrentTaskQueueSetter(
TaskQueueBase* task_queue)
: previous_(current) {
diff --git a/api/task_queue/task_queue_base.h b/api/task_queue/task_queue_base.h
index b285716..89e9e9e 100644
--- a/api/task_queue/task_queue_base.h
+++ b/api/task_queue/task_queue_base.h
@@ -64,7 +64,9 @@
//
// May be called on any thread or task queue, including this task queue.
void PostTask(absl::AnyInvocable<void() &&> task,
- const Location& location = Location::Current());
+ const Location& location = Location::Current()) {
+ PostTaskImpl(std::move(task), PostTaskTraits{}, location);
+ }
// Prefer PostDelayedTask() over PostDelayedHighPrecisionTask() whenever
// possible.
@@ -185,11 +187,6 @@
// Users of the TaskQueue should call Delete instead of directly deleting
// this object.
virtual ~TaskQueueBase() = default;
-
- private:
- void PostTaskInternal(absl::AnyInvocable<void() &&> task,
- const PostTaskTraits& traits,
- const Location& location);
};
struct TaskQueueDeleter {
diff --git a/rtc_base/BUILD.gn b/rtc_base/BUILD.gn
index 67d2b86..ac237ed 100644
--- a/rtc_base/BUILD.gn
+++ b/rtc_base/BUILD.gn
@@ -1453,21 +1453,6 @@
absl_deps = [ "//third_party/abseil-cpp/absl/strings" ]
}
-rtc_library("voucher") {
- sources = [
- "voucher.cc",
- "voucher.h",
- ]
- deps = [
- ":macromagic",
- ":refcount",
- "../api:make_ref_counted",
- "synchronization:mutex",
- "system:rtc_export",
- ]
- absl_deps = [ "//third_party/abseil-cpp/absl/container:inlined_vector" ]
-}
-
rtc_library("stream") {
visibility = [ "*" ]
sources = [
diff --git a/rtc_base/voucher.cc b/rtc_base/voucher.cc
deleted file mode 100644
index 46dd780..0000000
--- a/rtc_base/voucher.cc
+++ /dev/null
@@ -1,80 +0,0 @@
-/*
- * Copyright 2023 The WebRTC Project Authors. All rights reserved.
- *
- * Use of this source code is governed by a BSD-style license
- * that can be found in the LICENSE file in the root of the source
- * tree. An additional intellectual property rights grant can be found
- * in the file PATENTS. All contributing project authors may
- * be found in the AUTHORS file in the root of the source tree.
- */
-
-#include "rtc_base/voucher.h"
-
-#include <memory>
-#include <utility>
-
-#include "api/make_ref_counted.h"
-
-namespace webrtc {
-namespace {
-
-rtc::FinalRefCountedObject<Voucher>*& CurrentVoucherStorage() {
- static thread_local rtc::FinalRefCountedObject<Voucher>* storage = nullptr;
- return storage;
-}
-
-} // namespace
-
-Voucher::ScopedSetter::ScopedSetter(Ptr voucher)
- : old_current_(Voucher::Current()) {
- Voucher::SetCurrent(std::move(voucher));
-}
-
-Voucher::ScopedSetter::~ScopedSetter() {
- Voucher::SetCurrent(std::move(old_current_));
-}
-
-Voucher::Attachment::Id Voucher::Attachment::GetNextId() {
- static std::atomic<Voucher::Attachment::Id> current_id = 0;
- auto id = current_id.fetch_add(1);
- RTC_CHECK(id < Voucher::kAttachmentCapacity);
- return id;
-}
-
-Voucher::Ptr Voucher::CurrentOrCreateForCurrentTask() {
- auto& storage = CurrentVoucherStorage();
- Voucher::Ptr result(storage);
- if (!result) {
- result = rtc::make_ref_counted<Voucher>();
- storage = result.get();
- storage->AddRef();
- }
- return result;
-}
-
-Voucher::Ptr Voucher::Current() {
- auto& storage = CurrentVoucherStorage();
- Voucher::Ptr result(storage);
- return result;
-}
-
-Voucher::Voucher() : attachments_(Voucher::kAttachmentCapacity) {}
-
-void Voucher::SetCurrent(Voucher::Ptr value) {
- auto& storage = CurrentVoucherStorage();
- if (value.get() != storage) {
- if (storage) {
- storage->Release();
- }
- storage = value.release();
- }
-}
-
-void Voucher::SetAttachment(Attachment::Id id,
- std::unique_ptr<Attachment> attachment) {
- RTC_CHECK(id < kAttachmentCapacity);
- MutexLock lock(&mu_);
- attachments_[id] = std::move(attachment);
-}
-
-} // namespace webrtc
diff --git a/rtc_base/voucher.h b/rtc_base/voucher.h
deleted file mode 100644
index 30a6460..0000000
--- a/rtc_base/voucher.h
+++ /dev/null
@@ -1,78 +0,0 @@
-/*
- * Copyright 2023 The WebRTC Project Authors. All rights reserved.
- *
- * Use of this source code is governed by a BSD-style license
- * that can be found in the LICENSE file in the root of the source
- * tree. An additional intellectual property rights grant can be found
- * in the file PATENTS. All contributing project authors may
- * be found in the AUTHORS file in the root of the source tree.
- */
-
-#ifndef RTC_BASE_VOUCHER_H_
-#define RTC_BASE_VOUCHER_H_
-
-#include <memory>
-
-#include "absl/container/inlined_vector.h"
-#include "rtc_base/ref_counted_object.h"
-#include "rtc_base/synchronization/mutex.h"
-#include "rtc_base/system/rtc_export.h"
-
-namespace webrtc {
-
-// A voucher is associated with a currently running task tree. Whenever tasks
-// are posted, the current voucher is inherited and set as current in the new
-// task. The voucher exists for as long as there are direct and indirect
-// tasks running that descend from the task where the voucher was created.
-class RTC_EXPORT Voucher {
- public:
- static constexpr size_t kAttachmentCapacity = 4;
-
- using Ptr = rtc::scoped_refptr<rtc::FinalRefCountedObject<Voucher>>;
-
- // Vouchers aggregate attachments, which are application-specific attachments
- // that have logic unrelated to the mechanics of Voucher progression.
- class Attachment {
- public:
- using Id = size_t;
-
- // Attachments should call this function one to get an ID to use with
- // SetAttachment.
- static Attachment::Id GetNextId();
-
- virtual ~Attachment() = default;
- };
-
- // Scoped setter that saves the current voucher on stack and instates a new
- // one, until the scope exits.
- class ScopedSetter {
- public:
- explicit ScopedSetter(Ptr voucher);
- ~ScopedSetter();
-
- private:
- Ptr old_current_;
- };
-
- static Ptr Current();
- static Ptr CurrentOrCreateForCurrentTask();
-
- // For Attachments: stores an attachment into a voucher. If one is already
- // present, it gets replaced.
- void SetAttachment(Attachment::Id id, std::unique_ptr<Attachment> attachment);
-
- private:
- friend class rtc::FinalRefCountedObject<webrtc::Voucher>;
- Voucher();
-
- friend class ScopedSetter;
- static void SetCurrent(Ptr ptr);
-
- Mutex mu_;
- absl::InlinedVector<std::unique_ptr<Attachment>, kAttachmentCapacity>
- attachments_ RTC_GUARDED_BY(&mu_);
-};
-
-} // namespace webrtc
-
-#endif // RTC_BASE_VOUCHER_H_
diff --git a/video/BUILD.gn b/video/BUILD.gn
index 850b454..1722ad4 100644
--- a/video/BUILD.gn
+++ b/video/BUILD.gn
@@ -448,7 +448,6 @@
"../rtc_base:safe_conversions",
"../rtc_base:stringutils",
"../rtc_base:timeutils",
- "../rtc_base:voucher",
"../rtc_base/experiments:balanced_degradation_settings",
"../rtc_base/experiments:encoder_info_settings",
"../rtc_base/experiments:field_trial_parser",
diff --git a/video/video_stream_encoder.cc b/video/video_stream_encoder.cc
index c9bd604..2e5a120 100644
--- a/video/video_stream_encoder.cc
+++ b/video/video_stream_encoder.cc
@@ -49,9 +49,7 @@
#include "rtc_base/strings/string_builder.h"
#include "rtc_base/system/no_unique_address.h"
#include "rtc_base/thread_annotations.h"
-#include "rtc_base/time_utils.h"
#include "rtc_base/trace_event.h"
-#include "rtc_base/voucher.h"
#include "system_wrappers/include/metrics.h"
#include "video/adaptation/video_stream_encoder_resource_manager.h"
#include "video/alignment_adjuster.h"
@@ -85,35 +83,6 @@
constexpr int kDefaultMinScreenSharebps = 1200000;
-// This voucher attachment measures the time from a passed capture reference
-// time to the time when the voucher is destroyed.
-class CaptureProcessingDurationMeasurement : public Voucher::Attachment {
- public:
- static void AttachToCurrentVoucher(Timestamp capture_reference_time) {
- static const Voucher::Attachment::Id kCaptureToEncodeAttachmentId =
- Voucher::Attachment::GetNextId();
- auto voucher = Voucher::CurrentOrCreateForCurrentTask();
- voucher->SetAttachment(
- kCaptureToEncodeAttachmentId,
- std::make_unique<CaptureProcessingDurationMeasurement>(
- capture_reference_time));
- }
- explicit CaptureProcessingDurationMeasurement(
- Timestamp capture_reference_time)
- : capture_reference_time_(capture_reference_time) {}
- ~CaptureProcessingDurationMeasurement() override {
- auto duration =
- Clock::GetRealTimeClock()->CurrentTime() - capture_reference_time_;
- TRACE_EVENT1("webrtc", "CaptureProcessingDurationMeasurement", "duration",
- duration.us());
- RTC_HISTOGRAM_COUNTS_1000("WebRTC.Video.CaptureToSendTimeMs",
- duration.ms());
- }
-
- private:
- const Timestamp capture_reference_time_;
-};
-
int GetNumSpatialLayers(const VideoCodec& codec) {
if (codec.codecType == kVideoCodecVP9) {
return codec.VP9().numberOfSpatialLayers;
@@ -2065,9 +2034,6 @@
frame_encode_metadata_writer_.OnEncodeStarted(out_frame);
- CaptureProcessingDurationMeasurement::AttachToCurrentVoucher(
- out_frame.reference_time().value_or(clock_->CurrentTime()));
-
const int32_t encode_status = encoder_->Encode(out_frame, &next_frame_types_);
was_encode_called_since_last_initialization_ = true;