Chromium Code Reviews| Index: content/renderer/gpu/render_widget_compositor.cc |
| diff --git a/content/renderer/gpu/render_widget_compositor.cc b/content/renderer/gpu/render_widget_compositor.cc |
| index b6c7631c744cd0d7965191fd7105db39b4a6fbda..2adeb8b87e81ae0ba9c486d254b5305614c03901 100644 |
| --- a/content/renderer/gpu/render_widget_compositor.cc |
| +++ b/content/renderer/gpu/render_widget_compositor.cc |
| @@ -186,8 +186,37 @@ static cc::BrowserControlsState ConvertBrowserControlsState( |
| return static_cast<cc::BrowserControlsState>(state); |
| } |
| +double MonotonicallyIncreasingTime() { |
| + return base::TimeTicks::Now().ToInternalValue() / |
| + static_cast<double>(base::Time::kMicrosecondsPerSecond); |
|
sunnyps
2017/05/02 01:20:46
nit: can you put the static_case<double> on the fi
panicker
2017/05/02 21:21:36
Done.
|
| +} |
| + |
| } // namespace |
| +RenderWidgetCompositor::ReportTimeSwapPromise::ReportTimeSwapPromise( |
| + ReportTimeCallback callback, |
| + const scoped_refptr<base::SingleThreadTaskRunner>& task_runner) |
| + : callback_(callback), task_runner_(task_runner) {} |
| + |
| +RenderWidgetCompositor::ReportTimeSwapPromise::~ReportTimeSwapPromise() {} |
| + |
| +void RenderWidgetCompositor::ReportTimeSwapPromise::DidSwap() { |
| + task_runner_->PostTask( |
| + FROM_HERE, |
| + base::BindOnce(callback_, true, MonotonicallyIncreasingTime())); |
| +} |
| + |
| +cc::SwapPromise::DidNotSwapAction |
| +RenderWidgetCompositor::ReportTimeSwapPromise::DidNotSwap( |
| + cc::SwapPromise::DidNotSwapReason reason) { |
| + task_runner_->PostTask(FROM_HERE, base::BindOnce(callback_, false, 0)); |
| + return cc::SwapPromise::DidNotSwapAction::BREAK_PROMISE; |
| +} |
| + |
| +int64_t RenderWidgetCompositor::ReportTimeSwapPromise::TraceId() const { |
| + return 0; |
| +} |
| + |
| // static |
| std::unique_ptr<RenderWidgetCompositor> RenderWidgetCompositor::Create( |
| RenderWidgetCompositorDelegate* delegate, |
| @@ -1155,4 +1184,10 @@ void RenderWidgetCompositor::SetLocalSurfaceId( |
| layer_tree_host_->SetLocalSurfaceId(local_surface_id); |
| } |
| +void RenderWidgetCompositor::NotifySwapTime( |
| + base::Callback<void(bool, double)> callback) { |
| + QueueSwapPromise(base::MakeUnique<ReportTimeSwapPromise>( |
| + std::move(callback), base::ThreadTaskRunnerHandle::Get())); |
| +} |
| + |
| } // namespace content |