media_task_runner.h revision 1320f92c476a1ad9d19dba2a48c72b75566198e9
11320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Copyright 2014 The Chromium Authors. All rights reserved.
21320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// Use of this source code is governed by a BSD-style license that can be
31320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci// found in the LICENSE file.
41320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#ifndef CHROMECAST_MEDIA_CMA_BASE_MEDIA_TASK_RUNNER_H_
61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#define CHROMECAST_MEDIA_CMA_BASE_MEDIA_TASK_RUNNER_H_
71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/callback.h"
91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/location.h"
101320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/macros.h"
111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/memory/ref_counted.h"
121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/time/time.h"
131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace chromecast {
151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace media {
161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass MediaTaskRunner
181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    : public base::RefCountedThreadSafe<MediaTaskRunner> {
191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public:
201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  MediaTaskRunner();
211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Post a task with the given media |timestamp|. If |timestamp| is equal to
231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // |kNoTimestamp()|, the task is scheduled right away.
241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // How the media timestamp is used to schedule the task is an implementation
251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // detail of derived classes.
261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // Returns true if the task may be run at some point in the future, and false
271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // if the task definitely will not be run.
281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual bool PostMediaTask(
291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      const tracked_objects::Location& from_here,
301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      const base::Closure& task,
311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      base::TimeDelta timestamp) = 0;
321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci protected:
341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  virtual ~MediaTaskRunner();
351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  friend class base::RefCountedThreadSafe<MediaTaskRunner>;
361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private:
381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DISALLOW_COPY_AND_ASSIGN(MediaTaskRunner);
391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci};
401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}  // namespace media
421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}  // namespace chromecast
431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif  // CHROMECAST_MEDIA_CMA_BASE_MEDIA_TASK_RUNNER_H_
45