Index: cc/surfaces/surface_display_output_surface.cc |
diff --git a/cc/surfaces/surface_display_output_surface.cc b/cc/surfaces/surface_display_output_surface.cc |
index e1f90da761421f5a97bbf939f6714c3fa00144a6..c64f7b768132d81bfe392ed0e17208628cca2cdf 100644 |
--- a/cc/surfaces/surface_display_output_surface.cc |
+++ b/cc/surfaces/surface_display_output_surface.cc |
@@ -21,7 +21,8 @@ SurfaceDisplayOutputSurface::SurfaceDisplayOutputSurface( |
: OutputSurface(context_provider), |
display_client_(NULL), |
factory_(surface_manager, this), |
- allocator_(allocator) { |
+ allocator_(allocator), |
+ inside_swap_buffers_(false) { |
jbauman
2015/06/10 00:17:45
0
|
factory_.set_needs_sync_points(false); |
capabilities_.delegated_rendering = true; |
capabilities_.max_frames_pending = 1; |
@@ -46,26 +47,36 @@ void SurfaceDisplayOutputSurface::ReceivedVSyncParameters( |
} |
void SurfaceDisplayOutputSurface::SwapBuffers(CompositorFrame* frame) { |
+ inside_swap_buffers_ = 1; |
+ |
gfx::Size frame_size = |
frame->delegated_frame_data->render_pass_list.back()->output_rect.size(); |
if (frame_size.IsEmpty() || frame_size != display_size_) { |
+ inside_swap_buffers_ = 2; |
if (!surface_id_.is_null()) { |
factory_.Destroy(surface_id_); |
} |
+ inside_swap_buffers_ = 3; |
surface_id_ = allocator_->GenerateId(); |
factory_.Create(surface_id_); |
display_size_ = frame_size; |
} |
+ inside_swap_buffers_ = 4; |
display_client_->display()->SetSurfaceId(surface_id_, |
frame->metadata.device_scale_factor); |
+ inside_swap_buffers_ = 5; |
scoped_ptr<CompositorFrame> frame_copy(new CompositorFrame()); |
+ inside_swap_buffers_ = 6; |
frame->AssignTo(frame_copy.get()); |
+ inside_swap_buffers_ = 7; |
factory_.SubmitFrame( |
surface_id_, frame_copy.Pass(), |
base::Bind(&SurfaceDisplayOutputSurface::SwapBuffersComplete, |
base::Unretained(this))); |
+ inside_swap_buffers_ = 0; |
+ |
client_->DidSwapBuffers(); |
} |
@@ -92,6 +103,7 @@ void SurfaceDisplayOutputSurface::ReturnResources( |
} |
void SurfaceDisplayOutputSurface::SwapBuffersComplete(SurfaceDrawStatus drawn) { |
+ DCHECK_EQ(0, inside_swap_buffers_); |
if (client_ && !display_client_->output_surface_lost()) |
client_->DidSwapBuffersComplete(); |
} |