1// Copyright (c) 2012 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 REMOTING_CLIENT_CLIENT_CONTEXT_H_
6#define REMOTING_CLIENT_CLIENT_CONTEXT_H_
7
8#include <string>
9
10#include "base/threading/thread.h"
11
12namespace base {
13class SingleThreadTaskRunner;
14}  // namespace base
15
16namespace remoting {
17
18// A class that manages threads and running context for the chromoting client
19// process.
20class ClientContext {
21 public:
22  // |main_task_runner| is the task runner for the main plugin thread
23  // that is used for all PPAPI calls, e.g. network and graphics.
24  ClientContext(base::SingleThreadTaskRunner* main_task_runner);
25  virtual ~ClientContext();
26
27  void Start();
28  void Stop();
29
30  base::SingleThreadTaskRunner* main_task_runner();
31  base::SingleThreadTaskRunner* decode_task_runner();
32  base::SingleThreadTaskRunner* audio_decode_task_runner();
33
34 private:
35  scoped_refptr<base::SingleThreadTaskRunner> main_task_runner_;
36
37  // A thread that handles all video decode operations.
38  base::Thread decode_thread_;
39
40  // A thread that handles all audio decode operations.
41  base::Thread audio_decode_thread_;
42
43  DISALLOW_COPY_AND_ASSIGN(ClientContext);
44};
45
46}  // namespace remoting
47
48#endif  // REMOTING_CLIENT_CLIENT_CONTEXT_H_
49