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 12namespace base { 13 14// TestPendingTask is a helper class for test TaskRunner 15// implementations. See test_simple_task_runner.h for example usage. 16 17struct 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