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
) final
;
36 bool RunsTasksOnCurrentThread() const final
;
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
) final
;
44 ~SkewedSingleThreadTaskRunner() final
;
48 scoped_refptr
<base::SingleThreadTaskRunner
> task_runner_
;
50 DISALLOW_COPY_AND_ASSIGN(SkewedSingleThreadTaskRunner
);
57 #endif // MEDIA_CAST_TEST_SKEWED_TASK_RUNNER_H_