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

Unified Diff: cc/test/test_compositor_frame_sink.cc

Issue 2386183003: Revert of cc: Remove frame queuing from the scheduler. (patchset #14 id:400001 of https://coderevie… (Closed)
Patch Set: fix revert 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
« no previous file with comments | « cc/test/test_compositor_frame_sink.h ('k') | cc/trees/proxy_impl.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 c06eac6b38a026e5644602c9d5032d685383d592..5930e3a9d7b18311496d3e0cafdd32baf29f8ac8 100644
--- a/cc/test/test_compositor_frame_sink.cc
+++ b/cc/test/test_compositor_frame_sink.cc
@@ -34,7 +34,8 @@ TestCompositorFrameSink::TestCompositorFrameSink(
surface_manager_(new SurfaceManager),
surface_id_allocator_(new SurfaceIdAllocator(
FrameSinkId(kCompositorClientId, kCompositorSinkId))),
- surface_factory_(new SurfaceFactory(surface_manager_.get(), this)) {
+ surface_factory_(new SurfaceFactory(surface_manager_.get(), this)),
+ weak_ptrs_(this) {
std::unique_ptr<SyntheticBeginFrameSource> begin_frame_source;
std::unique_ptr<DisplayScheduler> scheduler;
if (!synchronous_composite) {
@@ -116,6 +117,7 @@ void TestCompositorFrameSink::DetachFromClient() {
surface_factory_ = nullptr;
surface_id_allocator_ = nullptr;
surface_manager_ = nullptr;
+ weak_ptrs_.InvalidateWeakPtrs();
CompositorFrameSink::DetachFromClient();
}
@@ -139,7 +141,7 @@ void TestCompositorFrameSink::SwapBuffers(CompositorFrame frame) {
surface_factory_->SubmitCompositorFrame(
delegated_surface_id_, std::move(frame),
base::Bind(&TestCompositorFrameSink::DidDrawCallback,
- base::Unretained(this)));
+ weak_ptrs_.GetWeakPtr(), synchronous));
for (std::unique_ptr<CopyOutputRequest>& copy_request : copy_requests_)
surface_factory_->RequestCopyOfSurface(delegated_surface_id_,
@@ -150,10 +152,17 @@ void TestCompositorFrameSink::SwapBuffers(CompositorFrame frame) {
display_->DrawAndSwap();
}
-void TestCompositorFrameSink::DidDrawCallback() {
+void TestCompositorFrameSink::DidDrawCallback(bool synchronous) {
// This is the frame ack to unthrottle the next frame, not actually a notice
// that drawing is done.
- CompositorFrameSink::PostSwapBuffersComplete();
+ if (synchronous) {
+ // For synchronous draws, this must be posted to a new stack because we are
+ // still the original call to SwapBuffers, and we want to leave that before
+ // saying that it is done.
+ CompositorFrameSink::PostSwapBuffersComplete();
+ } else {
+ client_->DidSwapBuffersComplete();
+ }
}
void TestCompositorFrameSink::ForceReclaimResources() {
« no previous file with comments | « cc/test/test_compositor_frame_sink.h ('k') | cc/trees/proxy_impl.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698