Commit 5ea9e525 authored by brianderson's avatar brianderson Committed by Commit bot

cc: DCHECK if SDOS::SwapBuffersComplete is called prematurely

This is for debugging purposes only and will be reverted
soon.

BUG=495650
CQ_INCLUDE_TRYBOTS=tryserver.blink:linux_blink_rel

Review URL: https://codereview.chromium.org/1175703004

Cr-Commit-Position: refs/heads/master@{#333667}
parent dea97335
...@@ -7,6 +7,7 @@ ...@@ -7,6 +7,7 @@
#include <algorithm> #include <algorithm>
#include "base/auto_reset.h" #include "base/auto_reset.h"
#include "base/debug/stack_trace.h"
#include "base/logging.h" #include "base/logging.h"
#include "base/profiler/scoped_tracker.h" #include "base/profiler/scoped_tracker.h"
#include "base/single_thread_task_runner.h" #include "base/single_thread_task_runner.h"
...@@ -226,7 +227,8 @@ void Scheduler::DidSwapBuffers() { ...@@ -226,7 +227,8 @@ void Scheduler::DidSwapBuffers() {
} }
void Scheduler::DidSwapBuffersComplete() { void Scheduler::DidSwapBuffersComplete() {
DCHECK_GT(state_machine_.pending_swaps(), 0) << AsValue()->ToString(); DCHECK_GT(state_machine_.pending_swaps(), 0)
<< AsValue()->ToString() << base::debug::StackTrace().ToString();
state_machine_.DidSwapBuffersComplete(); state_machine_.DidSwapBuffersComplete();
ProcessScheduledActions(); ProcessScheduledActions();
} }
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
#include "cc/surfaces/surface_display_output_surface.h" #include "cc/surfaces/surface_display_output_surface.h"
#include "base/bind.h" #include "base/bind.h"
#include "base/debug/stack_trace.h"
#include "cc/output/compositor_frame.h" #include "cc/output/compositor_frame.h"
#include "cc/output/compositor_frame_ack.h" #include "cc/output/compositor_frame_ack.h"
#include "cc/surfaces/display.h" #include "cc/surfaces/display.h"
...@@ -21,7 +22,8 @@ SurfaceDisplayOutputSurface::SurfaceDisplayOutputSurface( ...@@ -21,7 +22,8 @@ SurfaceDisplayOutputSurface::SurfaceDisplayOutputSurface(
: OutputSurface(context_provider), : OutputSurface(context_provider),
display_client_(NULL), display_client_(NULL),
factory_(surface_manager, this), factory_(surface_manager, this),
allocator_(allocator) { allocator_(allocator),
inside_swap_buffers_(0) {
factory_.set_needs_sync_points(false); factory_.set_needs_sync_points(false);
capabilities_.delegated_rendering = true; capabilities_.delegated_rendering = true;
capabilities_.max_frames_pending = 1; capabilities_.max_frames_pending = 1;
...@@ -46,26 +48,36 @@ void SurfaceDisplayOutputSurface::ReceivedVSyncParameters( ...@@ -46,26 +48,36 @@ void SurfaceDisplayOutputSurface::ReceivedVSyncParameters(
} }
void SurfaceDisplayOutputSurface::SwapBuffers(CompositorFrame* frame) { void SurfaceDisplayOutputSurface::SwapBuffers(CompositorFrame* frame) {
inside_swap_buffers_ = 1;
gfx::Size frame_size = gfx::Size frame_size =
frame->delegated_frame_data->render_pass_list.back()->output_rect.size(); frame->delegated_frame_data->render_pass_list.back()->output_rect.size();
if (frame_size.IsEmpty() || frame_size != display_size_) { if (frame_size.IsEmpty() || frame_size != display_size_) {
inside_swap_buffers_ = 2;
if (!surface_id_.is_null()) { if (!surface_id_.is_null()) {
factory_.Destroy(surface_id_); factory_.Destroy(surface_id_);
} }
inside_swap_buffers_ = 3;
surface_id_ = allocator_->GenerateId(); surface_id_ = allocator_->GenerateId();
factory_.Create(surface_id_); factory_.Create(surface_id_);
display_size_ = frame_size; display_size_ = frame_size;
} }
inside_swap_buffers_ = 4;
display_client_->display()->SetSurfaceId(surface_id_, display_client_->display()->SetSurfaceId(surface_id_,
frame->metadata.device_scale_factor); frame->metadata.device_scale_factor);
inside_swap_buffers_ = 5;
scoped_ptr<CompositorFrame> frame_copy(new CompositorFrame()); scoped_ptr<CompositorFrame> frame_copy(new CompositorFrame());
inside_swap_buffers_ = 6;
frame->AssignTo(frame_copy.get()); frame->AssignTo(frame_copy.get());
inside_swap_buffers_ = 7;
factory_.SubmitFrame( factory_.SubmitFrame(
surface_id_, frame_copy.Pass(), surface_id_, frame_copy.Pass(),
base::Bind(&SurfaceDisplayOutputSurface::SwapBuffersComplete, base::Bind(&SurfaceDisplayOutputSurface::SwapBuffersComplete,
base::Unretained(this))); base::Unretained(this)));
inside_swap_buffers_ = 0;
client_->DidSwapBuffers(); client_->DidSwapBuffers();
} }
...@@ -92,6 +104,7 @@ void SurfaceDisplayOutputSurface::ReturnResources( ...@@ -92,6 +104,7 @@ void SurfaceDisplayOutputSurface::ReturnResources(
} }
void SurfaceDisplayOutputSurface::SwapBuffersComplete(SurfaceDrawStatus drawn) { void SurfaceDisplayOutputSurface::SwapBuffersComplete(SurfaceDrawStatus drawn) {
DCHECK_EQ(0, inside_swap_buffers_) << base::debug::StackTrace().ToString();
if (client_ && !display_client_->output_surface_lost()) if (client_ && !display_client_->output_surface_lost())
client_->DidSwapBuffersComplete(); client_->DidSwapBuffersComplete();
} }
......
...@@ -54,6 +54,9 @@ class CC_SURFACES_EXPORT SurfaceDisplayOutputSurface ...@@ -54,6 +54,9 @@ class CC_SURFACES_EXPORT SurfaceDisplayOutputSurface
SurfaceId surface_id_; SurfaceId surface_id_;
SurfaceIdAllocator* allocator_; SurfaceIdAllocator* allocator_;
// TODO(brianderson): Remove this after solving crbug.com/495650
int inside_swap_buffers_;
DISALLOW_COPY_AND_ASSIGN(SurfaceDisplayOutputSurface); DISALLOW_COPY_AND_ASSIGN(SurfaceDisplayOutputSurface);
}; };
......
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