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. 4 5#ifndef MEDIA_CAST_TEST_SKEWED_TASK_RUNNER_H_ 6#define MEDIA_CAST_TEST_SKEWED_TASK_RUNNER_H_ 7 8#include <map> 9 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" 14 15namespace media { 16namespace cast { 17namespace test { 18 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. 23class SkewedSingleThreadTaskRunner : public base::SingleThreadTaskRunner { 24 public: 25 explicit SkewedSingleThreadTaskRunner( 26 const scoped_refptr<base::SingleThreadTaskRunner>& task_runner); 27 28 // Set the delay multiplier to |skew|. 29 void SetSkew(double skew); 30 31 // base::SingleThreadTaskRunner implementation. 32 virtual bool PostDelayedTask(const tracked_objects::Location& from_here, 33 const base::Closure& task, 34 base::TimeDelta delay) OVERRIDE; 35 36 virtual bool RunsTasksOnCurrentThread() const OVERRIDE; 37 38 // This function is currently not used, and will return false. 39 virtual bool PostNonNestableDelayedTask( 40 const tracked_objects::Location& from_here, 41 const base::Closure& task, 42 base::TimeDelta delay) OVERRIDE; 43 44 protected: 45 virtual ~SkewedSingleThreadTaskRunner(); 46 47 private: 48 double skew_; 49 scoped_refptr<base::SingleThreadTaskRunner> task_runner_; 50 51 DISALLOW_COPY_AND_ASSIGN(SkewedSingleThreadTaskRunner); 52}; 53 54} // namespace test 55} // namespace cast 56} // namespace media 57 58#endif // MEDIA_CAST_TEST_SKEWED_TASK_RUNNER_H_ 59