| Index: content/common/gpu/image_transport_surface.cc
|
| diff --git a/content/common/gpu/image_transport_surface.cc b/content/common/gpu/image_transport_surface.cc
|
| index 963f0e79be0f4a1982b1e2f47f56fa3aa5073c55..145f30cf312d80521cee55896bc986268907c6ca 100644
|
| --- a/content/common/gpu/image_transport_surface.cc
|
| +++ b/content/common/gpu/image_transport_surface.cc
|
| @@ -74,6 +74,9 @@ ImageTransportHelper::ImageTransportHelper(ImageTransportSurface* surface,
|
| }
|
|
|
| ImageTransportHelper::~ImageTransportHelper() {
|
| + if (stub_)
|
| + stub_->SetLatencyInfoCallback(
|
| + base::Callback<void(const cc::LatencyInfo&)>());
|
| manager_->RemoveRoute(route_id_);
|
| }
|
|
|
| @@ -86,6 +89,11 @@ bool ImageTransportHelper::Initialize() {
|
| decoder->SetResizeCallback(
|
| base::Bind(&ImageTransportHelper::Resize, base::Unretained(this)));
|
|
|
| + if (stub_)
|
| + stub_->SetLatencyInfoCallback(
|
| + base::Bind(&ImageTransportHelper::SetLatencyInfo,
|
| + base::Unretained(this)));
|
| +
|
| return true;
|
| }
|
|
|
| @@ -97,6 +105,7 @@ bool ImageTransportHelper::OnMessageReceived(const IPC::Message& message) {
|
| IPC_MESSAGE_HANDLER(AcceleratedSurfaceMsg_BufferPresented,
|
| OnBufferPresented)
|
| IPC_MESSAGE_HANDLER(AcceleratedSurfaceMsg_ResizeViewACK, OnResizeViewACK);
|
| + IPC_MESSAGE_HANDLER(AcceleratedSurfaceMsg_FrameDisplayed, OnFrameDisplayed);
|
| IPC_MESSAGE_UNHANDLED(handled = false)
|
| IPC_END_MESSAGE_MAP()
|
| return handled;
|
| @@ -146,6 +155,11 @@ void ImageTransportHelper::SendUpdateVSyncParameters(
|
| interval));
|
| }
|
|
|
| +void ImageTransportHelper::SendLatencyInfo(
|
| + const cc::LatencyInfo& latency_info) {
|
| + stub_->SetLatencyInfo(latency_info);
|
| +}
|
| +
|
| void ImageTransportHelper::SetScheduled(bool is_scheduled) {
|
| gpu::GpuScheduler* scheduler = Scheduler();
|
| if (!scheduler)
|
| @@ -229,6 +243,16 @@ void ImageTransportHelper::Resize(gfx::Size size) {
|
| #endif
|
| }
|
|
|
| +void ImageTransportHelper::SetLatencyInfo(
|
| + const cc::LatencyInfo& latency_info) {
|
| + surface_->SetLatencyInfo(latency_info);
|
| +}
|
| +
|
| +void ImageTransportHelper::OnFrameDisplayed(
|
| + const cc::LatencyInfo& latency_info) {
|
| + SendLatencyInfo(latency_info);
|
| +}
|
| +
|
| PassThroughImageTransportSurface::PassThroughImageTransportSurface(
|
| GpuChannelManager* manager,
|
| GpuCommandBufferStub* stub,
|
| @@ -253,8 +277,26 @@ void PassThroughImageTransportSurface::Destroy() {
|
| GLSurfaceAdapter::Destroy();
|
| }
|
|
|
| +void PassThroughImageTransportSurface::SetLatencyInfo(
|
| + const cc::LatencyInfo& latency_info) {
|
| + if (latency_info_.rendererImplFrameNumber !=
|
| + latency_info.rendererImplFrameNumber)
|
| + TRACE_EVENT_ASYNC_BEGIN2("frame", "Frame", this,
|
| + "frame_number",
|
| + latency_info.rendererImplFrameNumber,
|
| + "input_number", latency_info.inputNumber);
|
| +
|
| + latency_info_ = latency_info;
|
| +}
|
| +
|
| bool PassThroughImageTransportSurface::SwapBuffers() {
|
| bool result = gfx::GLSurfaceAdapter::SwapBuffers();
|
| + latency_info_.swapTimestamp = base::TimeTicks::HighResNow();
|
| + helper_->SendLatencyInfo(latency_info_);
|
| + TRACE_EVENT_ASYNC_END2("frame", "Frame", this,
|
| + "frame_number", latency_info_.rendererImplFrameNumber,
|
| + "input_number", latency_info_.inputNumber);
|
| +
|
| SendVSyncUpdateIfAvailable();
|
|
|
| if (transport_) {
|
| @@ -262,6 +304,7 @@ bool PassThroughImageTransportSurface::SwapBuffers() {
|
| // SwapBuffers message.
|
| GpuHostMsg_AcceleratedSurfaceBuffersSwapped_Params params;
|
| params.surface_handle = 0;
|
| + params.latency_info = latency_info_;
|
| params.size = surface()->GetSize();
|
| helper_->SendAcceleratedSurfaceBuffersSwapped(params);
|
|
|
| @@ -273,6 +316,11 @@ bool PassThroughImageTransportSurface::SwapBuffers() {
|
| bool PassThroughImageTransportSurface::PostSubBuffer(
|
| int x, int y, int width, int height) {
|
| bool result = gfx::GLSurfaceAdapter::PostSubBuffer(x, y, width, height);
|
| + latency_info_.swapTimestamp = base::TimeTicks::HighResNow();
|
| + helper_->SendLatencyInfo(latency_info_);
|
| + TRACE_EVENT_ASYNC_END2("frame", "Frame", this,
|
| + "frame_number", latency_info_.rendererImplFrameNumber,
|
| + "input_number", latency_info_.inputNumber);
|
| SendVSyncUpdateIfAvailable();
|
|
|
| if (transport_) {
|
| @@ -280,6 +328,7 @@ bool PassThroughImageTransportSurface::PostSubBuffer(
|
| // PostSubBuffer message.
|
| GpuHostMsg_AcceleratedSurfacePostSubBuffer_Params params;
|
| params.surface_handle = 0;
|
| + params.latency_info = latency_info_;
|
| params.surface_size = surface()->GetSize();
|
| params.x = x;
|
| params.y = y;
|
|
|