Index: ui/compositor/compositor.cc |
diff --git a/ui/compositor/compositor.cc b/ui/compositor/compositor.cc |
index d3b801cbc84f248602213fc97e1b54f652b7cbc1..9ab2c65ae5f158e81b98e6d5dc863803976c2755 100644 |
--- a/ui/compositor/compositor.cc |
+++ b/ui/compositor/compositor.cc |
@@ -8,9 +8,11 @@ |
#include <deque> |
#include "base/bind.h" |
+#include "base/cancelable_callback.h" |
#include "base/command_line.h" |
#include "base/memory/singleton.h" |
#include "base/message_loop.h" |
+#include "base/run_loop.h" |
#include "base/string_util.h" |
#include "base/threading/thread.h" |
#include "base/threading/thread_restrictions.h" |
@@ -335,6 +337,63 @@ void CompositorLock::CancelLock() { |
compositor_ = NULL; |
} |
+// static |
+bool DrawWaiterForTest::Wait(Compositor* compositor) { |
+ DrawWaiterForTest waiter; |
+ return waiter.WaitImpl(compositor); |
+} |
+ |
+DrawWaiterForTest::DrawWaiterForTest() |
+ : kDrawWaitTimeOutMs(1000), |
+ did_draw_(false) { |
+} |
+ |
+DrawWaiterForTest::~DrawWaiterForTest() { |
+} |
+ |
+bool DrawWaiterForTest::WaitImpl(Compositor* compositor) { |
+ did_draw_ = false; |
+ compositor->AddObserver(this); |
+ wait_run_loop_.reset(new base::RunLoop()); |
+ base::CancelableClosure timeout( |
+ base::Bind(&DrawWaiterForTest::TimedOutWhileWaiting, |
+ base::Unretained(this))); |
+ MessageLoop::current()->PostDelayedTask( |
+ FROM_HERE, timeout.callback(), |
+ base::TimeDelta::FromMilliseconds(kDrawWaitTimeOutMs)); |
+ wait_run_loop_->Run(); |
+ compositor->RemoveObserver(this); |
+ return did_draw_; |
+} |
+ |
+void DrawWaiterForTest::TimedOutWhileWaiting() { |
+ LOG(ERROR) << "Timed out waiting for draw."; |
+ wait_run_loop_->Quit(); |
+} |
+ |
+void DrawWaiterForTest::OnCompositingDidCommit(Compositor* compositor) { |
+} |
+ |
+void DrawWaiterForTest::OnCompositingStarted(Compositor* compositor, |
+ base::TimeTicks start_time) { |
+} |
+ |
+void DrawWaiterForTest::OnCompositingEnded(Compositor* compositor) { |
+ did_draw_ = true; |
+ wait_run_loop_->Quit(); |
+} |
+ |
+void DrawWaiterForTest::OnCompositingAborted(Compositor* compositor) { |
+} |
+ |
+void DrawWaiterForTest::OnCompositingLockStateChanged(Compositor* compositor) { |
+} |
+ |
+void DrawWaiterForTest::OnUpdateVSyncParameters(Compositor* compositor, |
+ base::TimeTicks timebase, |
+ base::TimeDelta interval) { |
+} |
+ |
class PostedSwapQueue { |
public: |
PostedSwapQueue() : pending_swap_(NULL) { |