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,18 +525,25 @@ void Scheduler::RunNextTask() { ...@@ -525,18 +525,25 @@ void Scheduler::RunNextTask() {
{ {
base::AutoUnlock auto_unlock(lock_); base::AutoUnlock auto_unlock(lock_);
order_data->BeginProcessingOrderNumber(order_num); 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(); base::TimeTicks wall_time_start = base::TimeTicks::Now();
std::move(closure).Run(); std::move(closure).Run();
base::TimeDelta thread_time_elapsed = if (supports_thread_time) {
base::ThreadTicks::Now() - thread_time_start; base::TimeDelta thread_time_elapsed =
base::TimeDelta wall_time_elapsed = base::ThreadTicks::Now() - thread_time_start;
base::TimeTicks::Now() - wall_time_start; base::TimeDelta wall_time_elapsed =
base::TimeDelta blocked_time = wall_time_elapsed - thread_time_elapsed; base::TimeTicks::Now() - wall_time_start;
base::TimeDelta blocked_time = wall_time_elapsed - thread_time_elapsed;
total_blocked_time_ += blocked_time; total_blocked_time_ += blocked_time;
}
if (order_data->IsProcessingOrderNumber()) if (order_data->IsProcessingOrderNumber())
order_data->FinishProcessingOrderNumber(order_num); order_data->FinishProcessingOrderNumber(order_num);
...@@ -559,6 +566,8 @@ void Scheduler::RunNextTask() { ...@@ -559,6 +566,8 @@ void Scheduler::RunNextTask() {
} }
base::TimeDelta Scheduler::TakeTotalBlockingTime() { base::TimeDelta Scheduler::TakeTotalBlockingTime() {
if (!base::ThreadTicks::IsSupported())
return base::TimeDelta::Min();
base::TimeDelta result; base::TimeDelta result;
std::swap(result, total_blocked_time_); std::swap(result, total_blocked_time_);
return result; return result;
......
...@@ -94,7 +94,8 @@ class GPU_EXPORT Scheduler { ...@@ -94,7 +94,8 @@ class GPU_EXPORT Scheduler {
base::WeakPtr<Scheduler> AsWeakPtr(); 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(); base::TimeDelta TakeTotalBlockingTime();
private: private:
......
...@@ -239,7 +239,7 @@ void PassThroughImageTransportSurface::FinishSwapBuffers( ...@@ -239,7 +239,7 @@ void PassThroughImageTransportSurface::FinishSwapBuffers(
auto blocked_time_since_last_swap = auto blocked_time_since_last_swap =
delegate_->GetGpuBlockedTimeSinceLastSwap(); delegate_->GetGpuBlockedTimeSinceLastSwap();
if (!multiple_surfaces_swapped_) { if (!blocked_time_since_last_swap.is_min() && !multiple_surfaces_swapped_) {
static constexpr base::TimeDelta kTimingMetricsHistogramMin = static constexpr base::TimeDelta kTimingMetricsHistogramMin =
base::TimeDelta::FromMicroseconds(5); base::TimeDelta::FromMicroseconds(5);
static constexpr base::TimeDelta kTimingMetricsHistogramMax = 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