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

Unified Diff: ui/compositor/compositor.cc

Issue 13725019: Aura: Make views_unittests work with --ui-enable-threaded-compositing (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 8 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: ui/compositor/compositor.cc
diff --git a/ui/compositor/compositor.cc b/ui/compositor/compositor.cc
index f3a3c8bd74c6830c0db843127f5beefd70db0e18..91e550344182a924ded8f8ba601f6e3cd95b546b 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"
@@ -104,6 +106,51 @@ void ResetImplicitFactory() {
namespace ui {
+class DrawWaiter : public ui::CompositorObserver {
+ public:
+ DrawWaiter() : did_draw_(false) {}
+
+ bool Wait(ui::Compositor* compositor) {
+ did_draw_ = false;
+ compositor->AddObserver(this);
+ wait_run_loop_.reset(new base::RunLoop());
+ base::CancelableClosure timeout(
+ base::Bind(&DrawWaiter::TimedOutWhileWaiting,
+ base::Unretained(this)));
+ MessageLoop::current()->PostDelayedTask(
+ FROM_HERE, timeout.callback(),
+ base::TimeDelta::FromMilliseconds(compositor->kDrawWaitTimeOutMs));
+ wait_run_loop_->Run();
+ compositor->RemoveObserver(this);
+ return did_draw_;
+ }
+
+ private:
+ void TimedOutWhileWaiting() {
+ LOG(ERROR) << "Timed out waiting for draw.";
+ wait_run_loop_->Quit();
+ }
+
+ // ui::CompositorObserver implementation.
+ virtual void OnCompositingDidCommit(Compositor* compositor) OVERRIDE {}
+ virtual void OnCompositingStarted(Compositor* compositor,
+ base::TimeTicks start_time) OVERRIDE {}
+ virtual void OnCompositingEnded(Compositor* compositor) OVERRIDE {
+ did_draw_ = true;
+ wait_run_loop_->Quit();
+ }
+ virtual void OnCompositingAborted(Compositor* compositor) OVERRIDE {}
+ virtual void OnCompositingLockStateChanged(Compositor* compositor) OVERRIDE {}
+ virtual void OnUpdateVSyncParameters(Compositor* compositor,
+ base::TimeTicks timebase,
+ base::TimeDelta interval) OVERRIDE {}
+
+ scoped_ptr<base::RunLoop> wait_run_loop_;
+ bool did_draw_;
+
+ DISALLOW_COPY_AND_ASSIGN(DrawWaiter);
+};
+
// static
ContextFactory* ContextFactory::GetInstance() {
if (!g_context_factory)
@@ -697,6 +744,11 @@ scoped_refptr<CompositorLock> Compositor::GetCompositorLock() {
return compositor_lock_;
}
+bool Compositor::WaitForDraw() {
+ DrawWaiter draw_waiter;
+ return draw_waiter.Wait(this);
+}
+
void Compositor::UnlockCompositor() {
DCHECK(compositor_lock_);
compositor_lock_ = NULL;

Powered by Google App Engine
This is Rietveld 408576698