Commit 5653486e authored by Vasiliy Telezhnikov's avatar Vasiliy Telezhnikov Committed by Commit Bot

Measure GpuBlockedTime only on supported platforms

ThreadTicks::Now() is not available on some platforms and thus we can't
measure GpuBlockedTime there. This CL skips measuring/reporting if not
available to prevent DCHECK's and invalid data.

Bug: 1021494
Change-Id: I8c7d7f8cdae478b0b5012a5267aa909d62da6408
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1899587Reviewed-by: default avatarJonathan Backer <backer@chromium.org>
Commit-Queue: Jonathan Backer <backer@chromium.org>
Commit-Queue: Vasiliy Telezhnikov <vasilyt@chromium.org>
Auto-Submit: Vasiliy Telezhnikov <vasilyt@chromium.org>
Cr-Commit-Position: refs/heads/master@{#712579}
parent 0eee9ae1
......@@ -525,11 +525,17 @@ void Scheduler::RunNextTask() {
{
base::AutoUnlock auto_unlock(lock_);
order_data->BeginProcessingOrderNumber(order_num);
base::ThreadTicks thread_time_start = base::ThreadTicks::Now();
bool supports_thread_time = base::ThreadTicks::IsSupported();
// We can't call base::ThreadTicks::Now() if it's not supported
base::ThreadTicks thread_time_start =
supports_thread_time ? base::ThreadTicks::Now() : base::ThreadTicks();
base::TimeTicks wall_time_start = base::TimeTicks::Now();
std::move(closure).Run();
if (supports_thread_time) {
base::TimeDelta thread_time_elapsed =
base::ThreadTicks::Now() - thread_time_start;
base::TimeDelta wall_time_elapsed =
......@@ -537,6 +543,7 @@ void Scheduler::RunNextTask() {
base::TimeDelta blocked_time = wall_time_elapsed - thread_time_elapsed;
total_blocked_time_ += blocked_time;
}
if (order_data->IsProcessingOrderNumber())
order_data->FinishProcessingOrderNumber(order_num);
......@@ -559,6 +566,8 @@ void Scheduler::RunNextTask() {
}
base::TimeDelta Scheduler::TakeTotalBlockingTime() {
if (!base::ThreadTicks::IsSupported())
return base::TimeDelta::Min();
base::TimeDelta result;
std::swap(result, total_blocked_time_);
return result;
......
......@@ -94,7 +94,8 @@ class GPU_EXPORT Scheduler {
base::WeakPtr<Scheduler> AsWeakPtr();
// Takes and resets current accumulated blocking time
// Takes and resets current accumulated blocking time. Not available on all
// platforms. Returns TimeDelta::Min() when not available.
base::TimeDelta TakeTotalBlockingTime();
private:
......
......@@ -239,7 +239,7 @@ void PassThroughImageTransportSurface::FinishSwapBuffers(
auto blocked_time_since_last_swap =
delegate_->GetGpuBlockedTimeSinceLastSwap();
if (!multiple_surfaces_swapped_) {
if (!blocked_time_since_last_swap.is_min() && !multiple_surfaces_swapped_) {
static constexpr base::TimeDelta kTimingMetricsHistogramMin =
base::TimeDelta::FromMicroseconds(5);
static constexpr base::TimeDelta kTimingMetricsHistogramMax =
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment