// 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 MEDIA_CAST_TEST_SKEWED_TASK_RUNNER_H_ #define MEDIA_CAST_TEST_SKEWED_TASK_RUNNER_H_ #include #include "base/basictypes.h" #include "base/single_thread_task_runner.h" #include "base/test/simple_test_tick_clock.h" #include "base/test/test_pending_task.h" namespace media { namespace cast { namespace test { // This class wraps a SingleThreadTaskRunner, and allows you to scale // the delay for any posted task by a factor. The factor is changed by // calling SetSkew(). A skew of 2.0 means that all delayed task will // have to wait twice as long. class SkewedSingleThreadTaskRunner : public base::SingleThreadTaskRunner { public: explicit SkewedSingleThreadTaskRunner( const scoped_refptr& task_runner); // Set the delay multiplier to |skew|. void SetSkew(double skew); // base::SingleThreadTaskRunner implementation. virtual bool PostDelayedTask(const tracked_objects::Location& from_here, const base::Closure& task, base::TimeDelta delay) override; virtual bool RunsTasksOnCurrentThread() const override; // This function is currently not used, and will return false. virtual bool PostNonNestableDelayedTask( const tracked_objects::Location& from_here, const base::Closure& task, base::TimeDelta delay) override; protected: virtual ~SkewedSingleThreadTaskRunner(); private: double skew_; scoped_refptr task_runner_; DISALLOW_COPY_AND_ASSIGN(SkewedSingleThreadTaskRunner); }; } // namespace test } // namespace cast } // namespace media #endif // MEDIA_CAST_TEST_SKEWED_TASK_RUNNER_H_