frame_consumer_proxy.cc revision 5821806d5e7f356e8fa4b058a389a808ea183019
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#include "remoting/client/frame_consumer_proxy.h"
6
7#include "base/bind.h"
8#include "base/location.h"
9#include "base/single_thread_task_runner.h"
10#include "ppapi/cpp/image_data.h"
11
12namespace remoting {
13
14FrameConsumerProxy::FrameConsumerProxy(
15    scoped_refptr<base::SingleThreadTaskRunner> task_runner)
16    : task_runner_(task_runner) {
17}
18
19void FrameConsumerProxy::ApplyBuffer(const SkISize& view_size,
20                                     const SkIRect& clip_area,
21                                     pp::ImageData* buffer,
22                                     const SkRegion& region) {
23  if (!task_runner_->BelongsToCurrentThread()) {
24    task_runner_->PostTask(FROM_HERE, base::Bind(
25        &FrameConsumerProxy::ApplyBuffer, this,
26        view_size, clip_area, buffer, region));
27    return;
28  }
29
30  if (frame_consumer_)
31    frame_consumer_->ApplyBuffer(view_size, clip_area, buffer, region);
32}
33
34void FrameConsumerProxy::ReturnBuffer(pp::ImageData* buffer) {
35  if (!task_runner_->BelongsToCurrentThread()) {
36    task_runner_->PostTask(FROM_HERE, base::Bind(
37        &FrameConsumerProxy::ReturnBuffer, this, buffer));
38    return;
39  }
40
41  if (frame_consumer_)
42    frame_consumer_->ReturnBuffer(buffer);
43}
44
45void FrameConsumerProxy::SetSourceSize(const SkISize& source_size,
46                                       const SkIPoint& source_dpi) {
47  if (!task_runner_->BelongsToCurrentThread()) {
48    task_runner_->PostTask(FROM_HERE, base::Bind(
49        &FrameConsumerProxy::SetSourceSize, this, source_size, source_dpi));
50    return;
51  }
52
53  if (frame_consumer_)
54    frame_consumer_->SetSourceSize(source_size, source_dpi);
55}
56
57void FrameConsumerProxy::Attach(
58    const base::WeakPtr<FrameConsumer>& frame_consumer) {
59  DCHECK(task_runner_->BelongsToCurrentThread());
60  DCHECK(frame_consumer_ == NULL);
61  frame_consumer_ = frame_consumer;
62}
63
64FrameConsumerProxy::~FrameConsumerProxy() {
65}
66
67}  // namespace remoting
68