1 // Copyright 2014 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.
5 #ifndef MEDIA_CAST_TEST_SKEWED_TASK_RUNNER_H_
6 #define MEDIA_CAST_TEST_SKEWED_TASK_RUNNER_H_
10 #include "base/basictypes.h"
11 #include "base/single_thread_task_runner.h"
12 #include "base/test/simple_test_tick_clock.h"
13 #include "base/test/test_pending_task.h"
19 // This class wraps a SingleThreadTaskRunner, and allows you to scale
20 // the delay for any posted task by a factor. The factor is changed by
21 // calling SetSkew(). A skew of 2.0 means that all delayed task will
22 // have to wait twice as long.
23 class SkewedSingleThreadTaskRunner : public base::SingleThreadTaskRunner {
25 explicit SkewedSingleThreadTaskRunner(
26 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner);
28 // Set the delay multiplier to |skew|.
29 void SetSkew(double skew);
31 // base::SingleThreadTaskRunner implementation.
32 bool PostDelayedTask(const tracked_objects::Location& from_here,
33 const base::Closure& task,
34 base::TimeDelta delay) override;
36 bool RunsTasksOnCurrentThread() const override;
38 // This function is currently not used, and will return false.
39 bool PostNonNestableDelayedTask(const tracked_objects::Location& from_here,
40 const base::Closure& task,
41 base::TimeDelta delay) override;
44 ~SkewedSingleThreadTaskRunner() override;
48 scoped_refptr<base::SingleThreadTaskRunner> task_runner_;
50 DISALLOW_COPY_AND_ASSIGN(SkewedSingleThreadTaskRunner);
57 #endif // MEDIA_CAST_TEST_SKEWED_TASK_RUNNER_H_