| Index: content/renderer/gpu/compositor_external_begin_frame_source.cc
|
| diff --git a/content/renderer/gpu/compositor_external_begin_frame_source.cc b/content/renderer/gpu/compositor_external_begin_frame_source.cc
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..bc310235c2400c98a250e6e56da85f97f2cb1fa1
|
| --- /dev/null
|
| +++ b/content/renderer/gpu/compositor_external_begin_frame_source.cc
|
| @@ -0,0 +1,71 @@
|
| +// Copyright 2014 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "content/renderer/gpu/compositor_external_begin_frame_source.h"
|
| +
|
| +#include "content/common/view_messages.h"
|
| +#include "content/renderer/render_thread_impl.h"
|
| +#include "ipc/ipc_sync_channel.h"
|
| +#include "ipc/ipc_sync_message_filter.h"
|
| +
|
| +namespace content {
|
| +
|
| +CompositorExternalBeginFrameSource::CompositorExternalBeginFrameSource(
|
| + int routing_id)
|
| + : begin_frame_source_filter_(
|
| + RenderThreadImpl::current()->compositor_message_filter()),
|
| + message_sender_(RenderThreadImpl::current()->sync_message_filter()),
|
| + routing_id_(routing_id) {
|
| + DCHECK(begin_frame_source_filter_.get());
|
| + DCHECK(message_sender_.get());
|
| + DetachFromThread();
|
| +}
|
| +
|
| +CompositorExternalBeginFrameSource::~CompositorExternalBeginFrameSource() {
|
| + DCHECK(CalledOnValidThread());
|
| + if (begin_frame_source_proxy_.get()) {
|
| + begin_frame_source_proxy_->ClearBeginFrameSource();
|
| + begin_frame_source_filter_->RemoveRoute(routing_id_,
|
| + begin_frame_source_filter_handler_);
|
| + }
|
| +}
|
| +
|
| +void CompositorExternalBeginFrameSource::OnNeedsBeginFramesChange(
|
| + bool needs_begin_frames) {
|
| + DCHECK(CalledOnValidThread());
|
| + Send(new ViewHostMsg_SetNeedsBeginFrames(routing_id_, needs_begin_frames));
|
| +}
|
| +
|
| +void CompositorExternalBeginFrameSource::SetClientReady() {
|
| + DCHECK(CalledOnValidThread());
|
| + DCHECK(!begin_frame_source_proxy_.get());
|
| + begin_frame_source_proxy_ =
|
| + new CompositorExternalBeginFrameSourceProxy(this);
|
| + begin_frame_source_filter_handler_ =
|
| + base::Bind(&CompositorExternalBeginFrameSourceProxy::OnMessageReceived,
|
| + begin_frame_source_proxy_);
|
| + begin_frame_source_filter_->AddRoute(routing_id_,
|
| + begin_frame_source_filter_handler_);
|
| +}
|
| +
|
| +void CompositorExternalBeginFrameSource::OnMessageReceived(
|
| + const IPC::Message& message) {
|
| + DCHECK(CalledOnValidThread());
|
| + DCHECK(begin_frame_source_proxy_.get());
|
| + IPC_BEGIN_MESSAGE_MAP(CompositorExternalBeginFrameSource, message)
|
| + IPC_MESSAGE_HANDLER(ViewMsg_BeginFrame, OnBeginFrame);
|
| + IPC_END_MESSAGE_MAP();
|
| +}
|
| +
|
| +void CompositorExternalBeginFrameSource::OnBeginFrame(
|
| + const cc::BeginFrameArgs& args) {
|
| + DCHECK(CalledOnValidThread());
|
| + CallOnBeginFrame(args);
|
| +}
|
| +
|
| +bool CompositorExternalBeginFrameSource::Send(IPC::Message* message) {
|
| + return message_sender_->Send(message);
|
| +}
|
| +
|
| +} // namespace content
|
|
|