Adds support for tracking OnFrame PostTask delta times
Does not change any functionality but improves the ability to look for (using Perfetto) possible latency issues where a posted task might be prevented from running. Bug: webrtc:15456 Change-Id: I522599c646c8de2183074628df9cab337b1cb85d Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/322121 Reviewed-by: Markus Handell <handellm@webrtc.org> Commit-Queue: Henrik Andreassson <henrika@webrtc.org> Cr-Commit-Position: refs/heads/main@{#40854}
This commit is contained in:
parent
4d2d215b73
commit
bce7ce7ba0
@ -373,13 +373,21 @@ void ZeroHertzAdapterMode::OnFrame(Timestamp post_time,
|
|||||||
|
|
||||||
// Store the frame in the queue and schedule deferred processing.
|
// Store the frame in the queue and schedule deferred processing.
|
||||||
queued_frames_.push_back(frame);
|
queued_frames_.push_back(frame);
|
||||||
|
int frame_id = current_frame_id_;
|
||||||
current_frame_id_++;
|
current_frame_id_++;
|
||||||
scheduled_repeat_ = absl::nullopt;
|
scheduled_repeat_ = absl::nullopt;
|
||||||
TimeDelta time_spent_since_post = clock_->CurrentTime() - post_time;
|
Timestamp task_post_time = clock_->CurrentTime();
|
||||||
|
TimeDelta time_spent_since_post = task_post_time - post_time;
|
||||||
|
TRACE_EVENT_ASYNC_BEGIN0(TRACE_DISABLED_BY_DEFAULT("webrtc"), "FrameToQueue2",
|
||||||
|
frame_id);
|
||||||
queue_->PostDelayedHighPrecisionTask(
|
queue_->PostDelayedHighPrecisionTask(
|
||||||
SafeTask(safety_.flag(),
|
SafeTask(safety_.flag(),
|
||||||
[this] {
|
[this, frame_id, task_post_time] {
|
||||||
RTC_DCHECK_RUN_ON(&sequence_checker_);
|
RTC_DCHECK_RUN_ON(&sequence_checker_);
|
||||||
|
TRACE_EVENT_ASYNC_END1(
|
||||||
|
TRACE_DISABLED_BY_DEFAULT("webrtc"), "FrameToQueue2",
|
||||||
|
frame_id, "delay_us",
|
||||||
|
(clock_->CurrentTime() - task_post_time).us());
|
||||||
ProcessOnDelayedCadence();
|
ProcessOnDelayedCadence();
|
||||||
}),
|
}),
|
||||||
std::max(frame_delay_ - time_spent_since_post, TimeDelta::Zero()));
|
std::max(frame_delay_ - time_spent_since_post, TimeDelta::Zero()));
|
||||||
@ -647,11 +655,17 @@ void FrameCadenceAdapterImpl::OnFrame(const VideoFrame& frame) {
|
|||||||
// Local time in webrtc time base.
|
// Local time in webrtc time base.
|
||||||
Timestamp post_time = clock_->CurrentTime();
|
Timestamp post_time = clock_->CurrentTime();
|
||||||
frames_scheduled_for_processing_.fetch_add(1, std::memory_order_relaxed);
|
frames_scheduled_for_processing_.fetch_add(1, std::memory_order_relaxed);
|
||||||
|
TRACE_EVENT_ASYNC_BEGIN0(TRACE_DISABLED_BY_DEFAULT("webrtc"), "FrameToQueue1",
|
||||||
|
frame.id());
|
||||||
queue_->PostTask(SafeTask(safety_.flag(), [this, post_time, frame] {
|
queue_->PostTask(SafeTask(safety_.flag(), [this, post_time, frame] {
|
||||||
RTC_DCHECK_RUN_ON(queue_);
|
RTC_DCHECK_RUN_ON(queue_);
|
||||||
|
Timestamp current_time = clock_->CurrentTime();
|
||||||
|
TRACE_EVENT_ASYNC_END1(TRACE_DISABLED_BY_DEFAULT("webrtc"), "FrameToQueue1",
|
||||||
|
frame.id(), "delay_us",
|
||||||
|
(current_time - post_time).us());
|
||||||
if (zero_hertz_adapter_created_timestamp_.has_value()) {
|
if (zero_hertz_adapter_created_timestamp_.has_value()) {
|
||||||
TimeDelta time_until_first_frame =
|
TimeDelta time_until_first_frame =
|
||||||
clock_->CurrentTime() - *zero_hertz_adapter_created_timestamp_;
|
current_time - *zero_hertz_adapter_created_timestamp_;
|
||||||
zero_hertz_adapter_created_timestamp_ = absl::nullopt;
|
zero_hertz_adapter_created_timestamp_ = absl::nullopt;
|
||||||
RTC_HISTOGRAM_COUNTS_10000(
|
RTC_HISTOGRAM_COUNTS_10000(
|
||||||
"WebRTC.Screenshare.ZeroHz.TimeUntilFirstFrameMs",
|
"WebRTC.Screenshare.ZeroHz.TimeUntilFirstFrameMs",
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user