1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef BASE_TEST_TEST_PENDING_TASK_H_ 6 #define BASE_TEST_TEST_PENDING_TASK_H_ 7 8 #include "base/callback.h" 9 #include "base/location.h" 10 #include "base/time/time.h" 11 12 namespace base { 13 14 // TestPendingTask is a helper class for test TaskRunner 15 // implementations. See test_simple_task_runner.h for example usage. 16 17 struct TestPendingTask { 18 enum TestNestability { NESTABLE, NON_NESTABLE }; 19 20 TestPendingTask(); 21 TestPendingTask(const tracked_objects::Location& location, 22 const Closure& task, 23 TimeTicks post_time, 24 TimeDelta delay, 25 TestNestability nestability); 26 ~TestPendingTask(); 27 28 // Returns post_time + delay. 29 TimeTicks GetTimeToRun() const; 30 31 // Returns true if this task is nestable and |other| isn't, or if 32 // this task's time to run is strictly earlier than |other|'s time 33 // to run. 34 // 35 // Note that two tasks may both have the same nestability and delay. 36 // In that case, the caller must use some other criterion (probably 37 // the position in some queue) to break the tie. Conveniently, the 38 // following STL functions already do so: 39 // 40 // - std::min_element 41 // - std::stable_sort 42 // 43 // but the following STL functions don't: 44 // 45 // - std::max_element 46 // - std::sort. 47 bool ShouldRunBefore(const TestPendingTask& other) const; 48 49 tracked_objects::Location location; 50 Closure task; 51 TimeTicks post_time; 52 TimeDelta delay; 53 TestNestability nestability; 54 }; 55 56 } // namespace base 57 58 #endif // BASE_TEST_TEST_TASK_RUNNER_H_ 59