// Copyright 2014 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef UI_COMPOSITOR_TEST_DRAW_WAITER_H_ #define UI_COMPOSITOR_TEST_DRAW_WAITER_H_ #include "base/run_loop.h" #include "ui/compositor/compositor_observer.h" class Compositor; namespace ui { // This is only to be used for test. It allows execution of other tasks on // the current message loop before the current task finishs (there is a // potential for re-entrancy). class DrawWaiterForTest : public CompositorObserver { public: // Waits for a draw to be issued by the compositor. If the test times out // here, there may be a logic error in the compositor code causing it // not to draw. static void WaitForCompositingStarted(Compositor* compositor); // Waits for a swap to be completed from the compositor. static void WaitForCompositingEnded(Compositor* compositor); // Waits for a commit instead of a draw. static void WaitForCommit(Compositor* compositor); private: enum WaitEvent { WAIT_FOR_COMMIT, WAIT_FOR_COMPOSITING_STARTED, WAIT_FOR_COMPOSITING_ENDED, }; DrawWaiterForTest(WaitEvent wait_event); ~DrawWaiterForTest(); void WaitImpl(Compositor* compositor); // CompositorObserver implementation. void OnCompositingDidCommit(Compositor* compositor) override; void OnCompositingStarted(Compositor* compositor, base::TimeTicks start_time) override; void OnCompositingEnded(Compositor* compositor) override; void OnCompositingAborted(Compositor* compositor) override; void OnCompositingLockStateChanged(Compositor* compositor) override; void OnCompositingShuttingDown(Compositor* compositor) override; scoped_ptr wait_run_loop_; WaitEvent wait_event_; DISALLOW_COPY_AND_ASSIGN(DrawWaiterForTest); }; } // namespace ui #endif // UI_COMPOSITOR_TEST_DRAW_WAITER_H_