Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3221)

Unified Diff: cc/test/test_compositor_frame_sink.cc

Issue 2402173002: cc: Get rid of PostSwapBuffersComplete. (Closed)
Patch Set: postswap: . Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: cc/test/test_compositor_frame_sink.cc
diff --git a/cc/test/test_compositor_frame_sink.cc b/cc/test/test_compositor_frame_sink.cc
index 2800db713edb14d0b66fefa06edda68488133901..98c6e11cb65a562a95a6eff92a4a11eb903db253 100644
--- a/cc/test/test_compositor_frame_sink.cc
+++ b/cc/test/test_compositor_frame_sink.cc
@@ -25,40 +25,42 @@ TestCompositorFrameSink::TestCompositorFrameSink(
SharedBitmapManager* shared_bitmap_manager,
gpu::GpuMemoryBufferManager* gpu_memory_buffer_manager,
const RendererSettings& renderer_settings,
- base::SingleThreadTaskRunner* task_runner,
+ scoped_refptr<base::SingleThreadTaskRunner> task_runner,
bool synchronous_composite,
bool force_disable_reclaim_resources)
: CompositorFrameSink(std::move(compositor_context_provider),
std::move(worker_context_provider)),
+ task_runner_(std::move(task_runner)),
frame_sink_id_(kCompositorFrameSinkId),
surface_manager_(new SurfaceManager),
surface_id_allocator_(new SurfaceIdAllocator()),
surface_factory_(
new SurfaceFactory(frame_sink_id_, surface_manager_.get(), this)),
display_context_shared_with_compositor_(
- display_output_surface->context_provider() == context_provider()) {
+ display_output_surface->context_provider() == context_provider()),
+ weak_ptr_factory_(this) {
std::unique_ptr<SyntheticBeginFrameSource> begin_frame_source;
std::unique_ptr<DisplayScheduler> scheduler;
if (!synchronous_composite) {
if (renderer_settings.disable_display_vsync) {
begin_frame_source.reset(new BackToBackBeginFrameSource(
- base::MakeUnique<DelayBasedTimeSource>(task_runner)));
+ base::MakeUnique<DelayBasedTimeSource>(task_runner_.get())));
} else {
begin_frame_source.reset(new DelayBasedBeginFrameSource(
- base::MakeUnique<DelayBasedTimeSource>(task_runner)));
+ base::MakeUnique<DelayBasedTimeSource>(task_runner_.get())));
begin_frame_source->SetAuthoritativeVSyncInterval(
base::TimeDelta::FromMilliseconds(1000.f /
renderer_settings.refresh_rate));
}
scheduler.reset(new DisplayScheduler(
- begin_frame_source.get(), task_runner,
+ begin_frame_source.get(), task_runner_.get(),
display_output_surface->capabilities().max_frames_pending));
}
display_.reset(
new Display(shared_bitmap_manager, gpu_memory_buffer_manager,
renderer_settings, std::move(begin_frame_source),
std::move(display_output_surface), std::move(scheduler),
- base::MakeUnique<TextureMailboxDeleter>(task_runner)));
+ base::MakeUnique<TextureMailboxDeleter>(task_runner_.get())));
// Since this CompositorFrameSink and the Display are tightly coupled and in
// the same process/thread, the LayerTreeHostImpl can reclaim resources from
@@ -132,10 +134,16 @@ void TestCompositorFrameSink::SwapBuffers(CompositorFrame frame) {
bool synchronous = !display_->has_scheduler();
- surface_factory_->SubmitCompositorFrame(
- delegated_local_frame_id_, std::move(frame),
- base::Bind(&TestCompositorFrameSink::DidDrawCallback,
- base::Unretained(this)));
+ SurfaceFactory::DrawCallback draw_callback;
+ if (!synchronous) {
+ // For async draws, we use a callback tell when it is done, but for sync
+ // draws we don't need one.
sunnyps 2016/10/10 20:58:15 nit: Make a note that weak ptr is not required for
danakj 2016/10/10 21:02:11 Done.
+ draw_callback = base::Bind(&TestCompositorFrameSink::DidDrawCallback,
+ base::Unretained(this));
+ }
+
+ surface_factory_->SubmitCompositorFrame(delegated_local_frame_id_,
+ std::move(frame), draw_callback);
for (std::unique_ptr<CopyOutputRequest>& copy_request : copy_requests_) {
surface_factory_->RequestCopyOfSurface(delegated_local_frame_id_,
@@ -143,14 +151,20 @@ void TestCompositorFrameSink::SwapBuffers(CompositorFrame frame) {
}
copy_requests_.clear();
- if (synchronous)
+ if (synchronous) {
display_->DrawAndSwap();
+ // Post this to get a new stack frame so that we exit this function before
+ // calling the client to tell it that it is done.
+ task_runner_->PostTask(FROM_HERE,
+ base::Bind(&TestCompositorFrameSink::DidDrawCallback,
+ weak_ptr_factory_.GetWeakPtr()));
+ }
}
void TestCompositorFrameSink::DidDrawCallback() {
sunnyps 2016/10/10 20:58:15 nit: DCHECK(!display_->has_scheduler())?
danakj 2016/10/10 21:02:11 Inverted but done. use callback => not synchronous
danakj 2016/10/10 21:32:29 Wait both paths to use this function but one posts
// This is the frame ack to unthrottle the next frame, not actually a notice
// that drawing is done.
- CompositorFrameSink::PostSwapBuffersComplete();
+ client_->DidSwapBuffersComplete();
}
void TestCompositorFrameSink::ForceReclaimResources() {

Powered by Google App Engine
This is Rietveld 408576698