Chromium Code Reviews| 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 f4c5a68cb218b02b354c2612ec7f3b18b4e89b63..6d7f4a420928169eba9cd1770dadd4d74df706ce 100644 |
| --- a/content/common/gpu/image_transport_surface.cc |
| +++ b/content/common/gpu/image_transport_surface.cc |
| @@ -119,9 +119,14 @@ void ImageTransportHelper::SendUpdateVSyncParameters( |
| interval)); |
| } |
| -void ImageTransportHelper::SwapBuffersCompleted( |
| - const std::vector<ui::LatencyInfo>& latency_info) { |
| - stub_->SwapBuffersCompleted(latency_info); |
| +void ImageTransportHelper::SwapBuffersCallBack() { |
| + for (size_t i = 0; i < latency_info_.size(); i++) { |
| + latency_info_[i].AddLatencyNumber( |
| + ui::INPUT_EVENT_LATENCY_TERMINATED_FRAME_SWAP_COMPONENT, 0, 0); |
| + } |
| + |
| + stub_->SwapBuffersCompleted(latency_info_); |
| + latency_info_.clear(); |
| } |
| void ImageTransportHelper::SetPreemptByFlag( |
| @@ -179,7 +184,8 @@ void ImageTransportHelper::Resize(gfx::Size size, float scale_factor) { |
| void ImageTransportHelper::SetLatencyInfo( |
| const std::vector<ui::LatencyInfo>& latency_info) { |
| - surface_->SetLatencyInfo(latency_info); |
|
piman
2014/12/22 20:53:15
Why this change? I don't understand...
It will bre
kalyank
2014/12/23 09:12:32
ImageTransportSurfaceAndroid inherits base::Suppor
kalyank
2014/12/23 11:22:42
Added ImageTransportHelperAndroid, which will be u
|
| + for (size_t i = 0; i < latency_info.size(); i++) |
| + latency_info_.push_back(latency_info[i]); |
| } |
| PassThroughImageTransportSurface::PassThroughImageTransportSurface( |
| @@ -205,37 +211,32 @@ void PassThroughImageTransportSurface::Destroy() { |
| void PassThroughImageTransportSurface::SetLatencyInfo( |
| const std::vector<ui::LatencyInfo>& latency_info) { |
| - for (size_t i = 0; i < latency_info.size(); i++) |
| - latency_info_.push_back(latency_info[i]); |
| + helper_->SetLatencyInfo(latency_info); |
| } |
| bool PassThroughImageTransportSurface::SwapBuffers() { |
| // GetVsyncValues before SwapBuffers to work around Mali driver bug: |
| // crbug.com/223558. |
| SendVSyncUpdateIfAvailable(); |
| - bool result = gfx::GLSurfaceAdapter::SwapBuffers(); |
| - for (size_t i = 0; i < latency_info_.size(); i++) { |
| - latency_info_[i].AddLatencyNumber( |
| - ui::INPUT_EVENT_LATENCY_TERMINATED_FRAME_SWAP_COMPONENT, 0, 0); |
| - } |
| - |
| - helper_->SwapBuffersCompleted(latency_info_); |
| - latency_info_.clear(); |
| - return result; |
| + // We use WeakPtr here to avoid manual management of life time of an instance |
| + // of this class. Callback will not be called once the instance of this class |
| + // is destroyed. However, this also means that the callback can be run on |
| + // GPUMainThread only. |
| + return gfx::GLSurfaceAdapter::SwapBuffersAsync( |
| + base::Bind(&ImageTransportHelper::SwapBuffersCallBack, |
| + helper_->AsWeakPtr())); |
| } |
| bool PassThroughImageTransportSurface::PostSubBuffer( |
| int x, int y, int width, int height) { |
| SendVSyncUpdateIfAvailable(); |
| - bool result = gfx::GLSurfaceAdapter::PostSubBuffer(x, y, width, height); |
| - for (size_t i = 0; i < latency_info_.size(); i++) { |
| - latency_info_[i].AddLatencyNumber( |
| - ui::INPUT_EVENT_LATENCY_TERMINATED_FRAME_SWAP_COMPONENT, 0, 0); |
| - } |
| - |
| - helper_->SwapBuffersCompleted(latency_info_); |
| - latency_info_.clear(); |
| - return result; |
| + // We use WeakPtr here to avoid manual management of life time of an instance |
| + // of this class. Callback will not be called once the instance of this class |
| + // is destroyed. However, this also means that the callback can be run on |
| + // GPUMainThread only. |
| + return gfx::GLSurfaceAdapter::PostSubBufferAsync(x, y, width, height, |
| + base::Bind(&ImageTransportHelper::SwapBuffersCallBack, |
| + helper_->AsWeakPtr())); |
| } |
| bool PassThroughImageTransportSurface::OnMakeCurrent(gfx::GLContext* context) { |