1a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
2a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
3a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// found in the LICENSE file.
4a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
5a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "media/cast/test/utility/standalone_cast_environment.h"
6a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
7a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#include "base/time/default_tick_clock.h"
8a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
9a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace media {
10a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace cast {
11a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
12effb81e5f8246d0db0270817048dc992db66e9fbBen MurdochStandaloneCastEnvironment::StandaloneCastEnvironment()
13a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)    : CastEnvironment(
14a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)          make_scoped_ptr<base::TickClock>(new base::DefaultTickClock()),
15a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)          NULL,
16a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)          NULL,
17effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch          NULL),
18a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)      main_thread_("StandaloneCastEnvironment Main"),
19effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      audio_thread_("StandaloneCastEnvironment Audio"),
20effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch      video_thread_("StandaloneCastEnvironment Video") {
21a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#define CREATE_TASK_RUNNER(name, options)   \
22a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  name##_thread_.StartWithOptions(options); \
23a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  CastEnvironment::name##_thread_proxy_ = name##_thread_.message_loop_proxy()
24a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
25a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  CREATE_TASK_RUNNER(main,
26a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)                     base::Thread::Options(base::MessageLoop::TYPE_IO, 0));
27effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  CREATE_TASK_RUNNER(audio, base::Thread::Options());
28effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  CREATE_TASK_RUNNER(video, base::Thread::Options());
29a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)#undef CREATE_TASK_RUNNER
30a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
31a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
32a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)StandaloneCastEnvironment::~StandaloneCastEnvironment() {
335f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  CHECK(CalledOnValidThread());
345f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  CHECK(!main_thread_.IsRunning());
355f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  CHECK(!audio_thread_.IsRunning());
365f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  CHECK(!video_thread_.IsRunning());
37a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
38a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
39a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)void StandaloneCastEnvironment::Shutdown() {
405f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)  CHECK(CalledOnValidThread());
41a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)  main_thread_.Stop();
42effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  audio_thread_.Stop();
43effb81e5f8246d0db0270817048dc992db66e9fbBen Murdoch  video_thread_.Stop();
44a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}
45a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)
46a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}  // namespace cast
47a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)}  // namespace media
48